diff --git a/DEPS b/DEPS
index a0ea7a0..59c2d5d 100644
--- a/DEPS
+++ b/DEPS
@@ -39,11 +39,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': '452ba88066b51931696fc3d0a2a1c0f8809a4143',
+  'skia_revision': '52ede1d905728cdcaa98db1e4a33724f5a85c62d',
   # 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': 'cfa497128c3c4bf3c554010438eef876bc9bdbc0',
+  'v8_revision': 'f9c1dd047c983594d12bf412a85b42b746c2b198',
   # 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.
@@ -220,7 +220,7 @@
    Var('chromium_git') + '/native_client/src/third_party/scons-2.0.1.git' + '@' + '1c1550e17fc26355d08627fbdec13d8291227067',
 
   'src/third_party/webrtc':
-    Var('chromium_git') + '/external/webrtc/trunk/webrtc.git' + '@' + '7e0fbcaf91e14929ed33b0c9f5b2947f7e87be58', # commit position 13200
+    Var('chromium_git') + '/external/webrtc/trunk/webrtc.git' + '@' + 'b0d0745693df49646d7cf7a1745ca8772e73d3af', # commit position 13210
 
   'src/third_party/openmax_dl':
     Var('chromium_git') + '/external/webrtc/deps/third_party/openmax.git' + '@' +  Var('openmax_dl_revision'),
diff --git a/WATCHLISTS b/WATCHLISTS
index cc9f6e0..4eba844 100644
--- a/WATCHLISTS
+++ b/WATCHLISTS
@@ -1461,7 +1461,6 @@
     'device_bluetooth': ['scheib+watch@chromium.org',
                          'ortuno+watch@chromium.org'],
     'device_sensors': ['timvolodine@chromium.org',
-                       'mvanouwerkerk@chromium.org',
                        'rijubrata.bhaumik@intel.com',
                        'mlamouri+watch-sensors@chromium.org'],
     'developer_recommended_flags': ['scheib+watch@chromium.org'],
@@ -1584,7 +1583,6 @@
     'prerender': ['cbentzel+watch@chromium.org', 'tburkard+watch@chromium.org',
                   'gavinp+prer@chromium.org'],
     'push_messaging': ['peter@chromium.org', 'johnme+watch@chromium.org',
-                       'mvanouwerkerk+watch@chromium.org',
                        'harkness+watch@chromium.org'],
     'pyauto': ['anantha@chromium.org',
                'dyu@chromium.org',
@@ -1702,7 +1700,6 @@
     'blink_device_light': [ 'timvolodine@chromium.org',
                             'mlamouri+watch-blink@chromium.org' ],
     'blink_device_orientation': [ 'timvolodine@chromium.org',
-                                  'mvanouwerkerk+watch@chromium.org',
                                   'mlamouri+watch-blink@chromium.org' ],
     'blink_devtools': [ 'pfeldman+blink@chromium.org',
                         'apavlov+blink@chromium.org',
@@ -1766,7 +1763,6 @@
                          'yoav@yoav.ws' ],
     'blink_preloadScanner': [ 'yoav@yoav.ws' ],
     'blink_push_messaging': [ 'johnme+watch@chromium.org',
-                              'mvanouwerkerk+watch@chromium.org',
                               'peter@chromium.org' ],
     'blink_client_hints': [ 'yoav@yoav.ws' ],
     'blink_scheduler': [ 'scheduler-bugs@chromium.org' ],
diff --git a/android_webview/glue/java/src/com/android/webview/chromium/WebViewChromiumFactoryProvider.java b/android_webview/glue/java/src/com/android/webview/chromium/WebViewChromiumFactoryProvider.java
index 78d1bdc..99381b2 100644
--- a/android_webview/glue/java/src/com/android/webview/chromium/WebViewChromiumFactoryProvider.java
+++ b/android_webview/glue/java/src/com/android/webview/chromium/WebViewChromiumFactoryProvider.java
@@ -118,10 +118,11 @@
 
         // WebView needs to make sure to always use the wrapped application context.
         ContextUtils.initApplicationContext(
-                ResourcesContextWrapperFactory.get(mWebViewDelegate.getApplication()));
+                ResourcesContextWrapperFactory.get(
+                        mWebViewDelegate.getApplication().getApplicationContext()));
 
         if (isBuildDebuggable()) {
-            // Suppress the StrictMode violation as this codepath is only hit on debugglable builds.
+            // Suppress the StrictMode violation as this codepath is only hit on debuggable builds.
             StrictMode.ThreadPolicy oldPolicy = StrictMode.allowThreadDiskReads();
             CommandLine.initFromFile(COMMAND_LINE_FILE);
             StrictMode.setThreadPolicy(oldPolicy);
@@ -131,7 +132,7 @@
 
         ThreadUtils.setWillOverrideUiThread();
         // Load chromium library.
-        AwBrowserProcess.loadLibrary(ContextUtils.getApplicationContext());
+        AwBrowserProcess.loadLibrary();
 
         final PackageInfo packageInfo = WebViewFactory.getLoadedPackageInfo();
 
@@ -139,14 +140,14 @@
         System.loadLibrary("webviewchromium_plat_support");
 
         // Use shared preference to check for package downgrade.
-        mWebViewPrefs = mWebViewDelegate.getApplication().getSharedPreferences(
+        mWebViewPrefs = ContextUtils.getApplicationContext().getSharedPreferences(
                 CHROMIUM_PREFS_NAME, Context.MODE_PRIVATE);
         int lastVersion = mWebViewPrefs.getInt(VERSION_CODE_PREF, 0);
         int currentVersion = packageInfo.versionCode;
         if (!versionCodeGE(currentVersion, lastVersion)) {
             // The WebView package has been downgraded since we last ran in this application.
             // Delete the WebView data directory's contents.
-            String dataDir = PathUtils.getDataDirectory(mWebViewDelegate.getApplication());
+            String dataDir = PathUtils.getDataDirectory(ContextUtils.getApplicationContext());
             Log.i(TAG, "WebView package downgraded from " + lastVersion + " to " + currentVersion
                             + "; deleting contents of " + dataDir);
             deleteContents(new File(dataDir));
@@ -286,7 +287,7 @@
         initNetworkChangeNotifier(context);
         final int extraBindFlags = 0;
         AwBrowserProcess.configureChildProcessLauncher(webViewPackageName, extraBindFlags);
-        AwBrowserProcess.start(context);
+        AwBrowserProcess.start();
 
         if (isBuildDebuggable()) {
             setWebContentsDebuggingEnabled(true);
@@ -313,7 +314,7 @@
 
         // Start listening for data reduction proxy setting changes.
         mProxyManager = new AwDataReductionProxyManager();
-        mProxyManager.start(mWebViewDelegate.getApplication());
+        mProxyManager.start(ContextUtils.getApplicationContext());
     }
 
     boolean hasStarted() {
diff --git a/android_webview/java/src/org/chromium/android_webview/AwBrowserProcess.java b/android_webview/java/src/org/chromium/android_webview/AwBrowserProcess.java
index 30082fc..f7025f2 100644
--- a/android_webview/java/src/org/chromium/android_webview/AwBrowserProcess.java
+++ b/android_webview/java/src/org/chromium/android_webview/AwBrowserProcess.java
@@ -40,12 +40,12 @@
      * to run webview in this process. Does not create threads; safe to call from zygote.
      * Note: it is up to the caller to ensure this is only called once.
      */
-    public static void loadLibrary(Context context) {
-        PathUtils.setPrivateDataDirectorySuffix(PRIVATE_DATA_DIRECTORY_SUFFIX, context);
-        ContextUtils.initApplicationContext(context.getApplicationContext());
+    public static void loadLibrary() {
+        Context appContext = ContextUtils.getApplicationContext();
+        PathUtils.setPrivateDataDirectorySuffix(PRIVATE_DATA_DIRECTORY_SUFFIX, appContext);
         try {
             LibraryLoader libraryLoader = LibraryLoader.get(LibraryProcessType.PROCESS_WEBVIEW);
-            libraryLoader.loadNow(context);
+            libraryLoader.loadNow(appContext);
             // Switch the command line implementation from Java to native.
             // It's okay for the WebView to do this before initialization because we have
             // setup the JNI bindings by this point.
@@ -69,23 +69,23 @@
      * Starts the chromium browser process running within this process. Creates threads
      * and performs other per-app resource allocations; must not be called from zygote.
      * Note: it is up to the caller to ensure this is only called once.
-     * @param context The Android application context
      */
-    public static void start(final Context context) {
-        tryObtainingDataDirLockOrDie(context);
+    public static void start() {
+        tryObtainingDataDirLockOrDie();
         // We must post to the UI thread to cover the case that the user
         // has invoked Chromium startup by using the (thread-safe)
         // CookieManager rather than creating a WebView.
         ThreadUtils.runOnUiThreadBlocking(new Runnable() {
             @Override
             public void run() {
+                Context appContext = ContextUtils.getApplicationContext();
                 // The policies are used by browser startup, so we need to register the policy
                 // providers before starting the browser process. This only registers java objects
                 // and doesn't need the native library.
-                CombinedPolicyProvider.get().registerProvider(new AwPolicyProvider(context));
+                CombinedPolicyProvider.get().registerProvider(new AwPolicyProvider(appContext));
 
                 try {
-                    BrowserStartupController.get(context, LibraryProcessType.PROCESS_WEBVIEW)
+                    BrowserStartupController.get(appContext, LibraryProcessType.PROCESS_WEBVIEW)
                             .startBrowserProcessesSync(!CommandLine.getInstance().hasSwitch(
                                             AwSwitches.WEBVIEW_SANDBOXED_RENDERER));
                 } catch (ProcessInitException e) {
@@ -95,11 +95,11 @@
         });
     }
 
-    private static void tryObtainingDataDirLockOrDie(Context context) {
+    private static void tryObtainingDataDirLockOrDie() {
         StrictMode.ThreadPolicy oldPolicy = StrictMode.allowThreadDiskReads();
         StrictMode.allowThreadDiskWrites();
         try {
-            String dataPath = PathUtils.getDataDirectory(context);
+            String dataPath = PathUtils.getDataDirectory(ContextUtils.getApplicationContext());
             File lockFile = new File(dataPath, EXCLUSIVE_LOCK_FILE);
             boolean success = false;
             try {
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 f4dabead..7e71adf 100644
--- a/android_webview/java/src/org/chromium/android_webview/AwContents.java
+++ b/android_webview/java/src/org/chromium/android_webview/AwContents.java
@@ -1578,6 +1578,10 @@
             }
         }
 
+        // Temporary to generate a Java stack for crbug.com/618807.
+        if (mNativeAwContents == 0) {
+            throw new RuntimeException("Calling load on destroyed webview " + mIsDestroyed);
+        }
         nativeSetExtraHeadersForUrl(
                 mNativeAwContents, params.getUrl(), params.getExtraHttpRequestHeadersString());
         params.setExtraHeaders(new HashMap<String, String>());
diff --git a/android_webview/javatests/src/org/chromium/android_webview/test/AwSecondBrowserProcessTest.java b/android_webview/javatests/src/org/chromium/android_webview/test/AwSecondBrowserProcessTest.java
index b12f602..55d4125 100644
--- a/android_webview/javatests/src/org/chromium/android_webview/test/AwSecondBrowserProcessTest.java
+++ b/android_webview/javatests/src/org/chromium/android_webview/test/AwSecondBrowserProcessTest.java
@@ -117,14 +117,15 @@
     }
 
     private boolean tryStartingBrowserProcess() {
-        final Context context = getActivity();
         final Boolean success[] = new Boolean[1];
+        // The activity must be launched in order for proper webview statics to be setup.
+        getActivity();
         // runOnMainSync does not catch RuntimeExceptions, they just terminate the test.
         getInstrumentation().runOnMainSync(new Runnable() {
             @Override
             public void run() {
                 try {
-                    AwBrowserProcess.start(context);
+                    AwBrowserProcess.start();
                     success[0] = true;
                 } catch (RuntimeException e) {
                     success[0] = false;
diff --git a/android_webview/javatests/src/org/chromium/android_webview/test/AwTestBase.java b/android_webview/javatests/src/org/chromium/android_webview/test/AwTestBase.java
index d458392..f14ba48 100644
--- a/android_webview/javatests/src/org/chromium/android_webview/test/AwTestBase.java
+++ b/android_webview/javatests/src/org/chromium/android_webview/test/AwTestBase.java
@@ -90,11 +90,12 @@
     }
 
     protected void startBrowserProcess() throws Exception {
-        final Context context = getActivity();
+        // The activity must be launched in order for proper webview statics to be setup.
+        getActivity();
         getInstrumentation().runOnMainSync(new Runnable() {
             @Override
             public void run() {
-                AwBrowserProcess.start(context);
+                AwBrowserProcess.start();
             }
         });
     }
diff --git a/android_webview/javatests/src/org/chromium/android_webview/test/CookieManagerStartupTest.java b/android_webview/javatests/src/org/chromium/android_webview/test/CookieManagerStartupTest.java
index 9cb017f..0fe073a 100644
--- a/android_webview/javatests/src/org/chromium/android_webview/test/CookieManagerStartupTest.java
+++ b/android_webview/javatests/src/org/chromium/android_webview/test/CookieManagerStartupTest.java
@@ -14,6 +14,7 @@
 import org.chromium.android_webview.AwWebResourceResponse;
 import org.chromium.android_webview.test.util.CommonResources;
 import org.chromium.android_webview.test.util.CookieUtils;
+import org.chromium.base.ContextUtils;
 import org.chromium.base.test.util.Feature;
 import org.chromium.net.test.util.TestWebServer;
 
@@ -29,10 +30,11 @@
     @Override
     protected void setUp() throws Exception {
         super.setUp();
-        // CookeManager assumes that native is loaded, but webview browser should not be loaded for
+        // CookieManager assumes that native is loaded, but webview browser should not be loaded for
         // these tests as webview is not necessarily loaded when CookieManager is called.
-        AwBrowserProcess.loadLibrary(
-                getInstrumentation().getTargetContext().getApplicationContext());
+        Context appContext = getInstrumentation().getTargetContext().getApplicationContext();
+        ContextUtils.initApplicationContext(appContext);
+        AwBrowserProcess.loadLibrary();
     }
 
     @Override
@@ -45,11 +47,12 @@
     }
 
     private void startChromiumWithClient(TestAwContentsClient contentsClient) throws Exception {
-        final Context context = getActivity();
+        // The activity must be launched in order for proper webview statics to be setup.
+        getActivity();
         getInstrumentation().runOnMainSync(new Runnable() {
             @Override
             public void run() {
-                AwBrowserProcess.start(context);
+                AwBrowserProcess.start();
             }
         });
 
diff --git a/android_webview/javatests/src/org/chromium/android_webview/test/HttpCacheTest.java b/android_webview/javatests/src/org/chromium/android_webview/test/HttpCacheTest.java
index 55083d0..3c9e234 100644
--- a/android_webview/javatests/src/org/chromium/android_webview/test/HttpCacheTest.java
+++ b/android_webview/javatests/src/org/chromium/android_webview/test/HttpCacheTest.java
@@ -70,11 +70,10 @@
     @SmallTest
     @Feature({"AndroidWebView"})
     public void testLegacyHttpCacheDirIsRemovedOnStartup() throws Exception {
-        Context targetContext = getInstrumentation().getTargetContext();
+        Context appContext = getInstrumentation().getTargetContext().getApplicationContext();
         PathUtils.setPrivateDataDirectorySuffix(
-                AwBrowserProcess.PRIVATE_DATA_DIRECTORY_SUFFIX, targetContext);
-        File webViewLegacyCacheDir = new File(
-                PathUtils.getDataDirectory(targetContext), "Cache");
+                AwBrowserProcess.PRIVATE_DATA_DIRECTORY_SUFFIX, appContext);
+        File webViewLegacyCacheDir = new File(PathUtils.getDataDirectory(appContext), "Cache");
         if (!webViewLegacyCacheDir.isDirectory()) {
             assertTrue(webViewLegacyCacheDir.mkdir());
             assertTrue(webViewLegacyCacheDir.isDirectory());
@@ -83,8 +82,8 @@
         assertTrue(dummyCacheFile.exists());
 
         // Set up JNI bindings.
-        ContextUtils.initApplicationContext(targetContext.getApplicationContext());
-        AwBrowserProcess.loadLibrary(targetContext);
+        ContextUtils.initApplicationContext(appContext);
+        AwBrowserProcess.loadLibrary();
         // No delay before removing the legacy cache files.
         AwContentsStatics.setLegacyCacheRemovalDelayForTest(0);
 
diff --git a/android_webview/test/shell/src/org/chromium/android_webview/shell/AwShellActivity.java b/android_webview/test/shell/src/org/chromium/android_webview/shell/AwShellActivity.java
index 9d04cf03..94df928e 100644
--- a/android_webview/test/shell/src/org/chromium/android_webview/shell/AwShellActivity.java
+++ b/android_webview/test/shell/src/org/chromium/android_webview/shell/AwShellActivity.java
@@ -40,6 +40,7 @@
 import org.chromium.android_webview.test.NullContentsClient;
 import org.chromium.base.BaseSwitches;
 import org.chromium.base.CommandLine;
+import org.chromium.base.ContextUtils;
 import org.chromium.base.Log;
 import org.chromium.base.TraceEvent;
 import org.chromium.content.app.ContentApplication;
@@ -79,7 +80,8 @@
         ContentApplication.initCommandLine(this);
         waitForDebuggerIfNeeded();
 
-        AwBrowserProcess.loadLibrary(this);
+        ContextUtils.initApplicationContext(getApplicationContext());
+        AwBrowserProcess.loadLibrary();
 
         if (CommandLine.getInstance().hasSwitch(AwShellSwitches.ENABLE_ATRACE)) {
             Log.e(TAG, "Enabling Android trace.");
@@ -129,7 +131,7 @@
     }
 
     private AwTestContainerView createAwTestContainerView() {
-        AwBrowserProcess.start(this);
+        AwBrowserProcess.start();
         AwTestContainerView testContainerView = new AwTestContainerView(this, true);
         AwContentsClient awContentsClient = new NullContentsClient() {
             private View mCustomView;
diff --git a/android_webview/test/shell/src/org/chromium/android_webview/test/AwTestRunnerActivity.java b/android_webview/test/shell/src/org/chromium/android_webview/test/AwTestRunnerActivity.java
index c3d4ccb..c3af5de 100644
--- a/android_webview/test/shell/src/org/chromium/android_webview/test/AwTestRunnerActivity.java
+++ b/android_webview/test/shell/src/org/chromium/android_webview/test/AwTestRunnerActivity.java
@@ -30,7 +30,7 @@
 
         AwShellResourceProvider.registerResources(this);
         ContextUtils.initApplicationContext(getApplicationContext());
-        AwBrowserProcess.loadLibrary(this);
+        AwBrowserProcess.loadLibrary();
 
         mLinearLayout = new LinearLayout(this);
         mLinearLayout.setOrientation(LinearLayout.VERTICAL);
diff --git a/android_webview/test/shell/src/org/chromium/android_webview/test/SecondBrowserProcess.java b/android_webview/test/shell/src/org/chromium/android_webview/test/SecondBrowserProcess.java
index 14c19e52..eaf350f 100644
--- a/android_webview/test/shell/src/org/chromium/android_webview/test/SecondBrowserProcess.java
+++ b/android_webview/test/shell/src/org/chromium/android_webview/test/SecondBrowserProcess.java
@@ -15,6 +15,7 @@
 import org.chromium.android_webview.AwResource;
 import org.chromium.android_webview.shell.R;
 import org.chromium.base.CommandLine;
+import org.chromium.base.ContextUtils;
 import org.chromium.base.annotations.SuppressFBWarnings;
 
 /**
@@ -56,7 +57,8 @@
         CommandLine.initFromFile("/data/local/tmp/android-webview-command-line");
         AwResource.setResources(this.getResources());
         AwResource.setConfigKeySystemUuidMapping(R.array.config_key_system_uuid_mapping);
-        AwBrowserProcess.loadLibrary(this);
-        AwBrowserProcess.start(this);
+        ContextUtils.initApplicationContext(getApplicationContext());
+        AwBrowserProcess.loadLibrary();
+        AwBrowserProcess.start();
     }
 }
diff --git a/android_webview/tools/apk_merger.py b/android_webview/tools/apk_merger.py
index 45792852..4f2b61e 100755
--- a/android_webview/tools/apk_merger.py
+++ b/android_webview/tools/apk_merger.py
@@ -192,6 +192,8 @@
                     'natives_blob_32.bin': ['-0'],
                     args.shared_library: []}
 
+  if args.debug:
+    expected_files['gdbserver'] = []
   if args.uncompress_shared_libraries:
     expected_files[args.shared_library] += ['-0']
 
@@ -233,6 +235,7 @@
   parser.add_argument('--shared_library', required=True)
   parser.add_argument('--page-align-shared-libraries', action='store_true')
   parser.add_argument('--uncompress-shared-libraries', action='store_true')
+  parser.add_argument('--debug', action='store_true')
   args = parser.parse_args()
 
   tmp_dir = tempfile.mkdtemp()
diff --git a/ash/shelf/shelf_button.cc b/ash/shelf/shelf_button.cc
index 2d9f4d1..d6bd245 100644
--- a/ash/shelf/shelf_button.cc
+++ b/ash/shelf/shelf_button.cc
@@ -345,8 +345,8 @@
   return icon_view_->bounds();
 }
 
-void ShelfButton::OnDragStarted() {
-  AnimateInkDrop(views::InkDropState::HIDDEN);
+void ShelfButton::OnDragStarted(const ui::LocatedEvent* event) {
+  AnimateInkDrop(views::InkDropState::HIDDEN, event);
 }
 
 void ShelfButton::ShowContextMenu(const gfx::Point& p,
@@ -503,7 +503,8 @@
       gfx::Size(kInkDropLargeSize, kInkDropLargeSize),
       kInkDropLargeCornerRadius,
       gfx::Size(kInkDropSmallSize, kInkDropSmallSize),
-      kInkDropSmallCornerRadius, GetInkDropCenter(), GetInkDropBaseColor()));
+      kInkDropSmallCornerRadius, GetLocalBounds().CenterPoint(),
+      GetInkDropBaseColor()));
 }
 
 bool ShelfButton::ShouldEnterPushedState(const ui::Event& event) {
diff --git a/ash/shelf/shelf_button.h b/ash/shelf/shelf_button.h
index 9295f78..2d758c15 100644
--- a/ash/shelf/shelf_button.h
+++ b/ash/shelf/shelf_button.h
@@ -56,7 +56,7 @@
   gfx::Rect GetIconBounds() const;
 
   // Called when user started dragging the shelf button.
-  void OnDragStarted();
+  void OnDragStarted(const ui::LocatedEvent* event);
 
   // Overrides to views::CustomButton:
   void ShowContextMenu(const gfx::Point& p,
diff --git a/ash/shelf/shelf_view.cc b/ash/shelf/shelf_view.cc
index 3d798c8..868b089 100644
--- a/ash/shelf/shelf_view.cc
+++ b/ash/shelf/shelf_view.cc
@@ -1073,7 +1073,7 @@
   ReorderChildView(drag_view_, -1);
   bounds_animator_->StopAnimatingView(drag_view_);
 
-  drag_view_->OnDragStarted();
+  drag_view_->OnDragStarted(&event);
 }
 
 void ShelfView::ContinueDrag(const ui::LocatedEvent& event) {
diff --git a/build/android/pylib/base/test_dispatcher.py b/build/android/pylib/base/test_dispatcher.py
index c513d9a..327709ca 100644
--- a/build/android/pylib/base/test_dispatcher.py
+++ b/build/android/pylib/base/test_dispatcher.py
@@ -147,8 +147,12 @@
     index = threadsafe_counter.GetAndIncrement()
     logging.warning('Creating shard %s for device %s.', index, device)
     runner = runner_factory(device, index)
-    runner.SetUp()
-    out_runners.append(runner)
+    if runner:
+      runner.SetUp()
+      out_runners.append(runner)
+    else:
+      logging.info('Device %s is not active. Will not create shard %s.',
+                   str(device), index)
   except (device_errors.CommandFailedError,
           device_errors.CommandTimeoutError,
           device_errors.DeviceUnreachableError):
diff --git a/build/android/pylib/perf/setup.py b/build/android/pylib/perf/setup.py
index 6abefef..e8c32cf 100644
--- a/build/android/pylib/perf/setup.py
+++ b/build/android/pylib/perf/setup.py
@@ -102,8 +102,10 @@
       flaky_steps = json.load(f)
 
   def TestRunnerFactory(device, shard_index):
-    return test_runner.TestRunner(
-        test_options, device, shard_index, len(all_devices),
-        steps_dict, flaky_steps)
+    if str(device) in active_devices:
+      return test_runner.TestRunner(
+          test_options, device, shard_index, len(all_devices),
+          steps_dict, flaky_steps)
+    return None
 
   return (TestRunnerFactory, sorted_step_names, all_devices)
diff --git a/cc/ipc/quads.mojom b/cc/ipc/quads.mojom
index 04e1d9e..21cc0da 100644
--- a/cc/ipc/quads.mojom
+++ b/cc/ipc/quads.mojom
@@ -151,5 +151,5 @@
   gfx.mojom.Transform transform_to_root_target;
   bool has_transparent_background;
   array<DrawQuad> quads;
-  array<cc.mojom.SharedQuadState> shared_quad_states;
+  cc.mojom.SharedQuadStateList shared_quad_states;
 };
diff --git a/cc/ipc/quads.typemap b/cc/ipc/quads.typemap
index 20f7ad7..779e655 100644
--- a/cc/ipc/quads.typemap
+++ b/cc/ipc/quads.typemap
@@ -8,8 +8,13 @@
   "//cc/quads/render_pass.h",
 ]
 traits_headers = [ "//cc/ipc/quads_struct_traits.h" ]
-sources = [ "//cc/ipc/quads_struct_traits.cc" ]
-public_deps = [ "//cc" ]
+sources = [
+  "//cc/ipc/quads_struct_traits.cc",
+]
+public_deps = [
+  "//cc",
+]
 type_mappings = [
   "cc.mojom.QuadList=cc::QuadList",
+  "cc.mojom.SharedQuadStateList=cc::SharedQuadStateList",
 ]
diff --git a/cc/ipc/shared_quad_state.mojom b/cc/ipc/shared_quad_state.mojom
index 45fdbbb9..8dbbaaef 100644
--- a/cc/ipc/shared_quad_state.mojom
+++ b/cc/ipc/shared_quad_state.mojom
@@ -29,3 +29,6 @@
   int32 sorting_context_id;
 };
 
+struct SharedQuadStateList {
+  array<SharedQuadState> shared_quad_states;
+};
diff --git a/cc/ipc/shared_quad_state_struct_traits.h b/cc/ipc/shared_quad_state_struct_traits.h
index 675e6dc..7b5dde7 100644
--- a/cc/ipc/shared_quad_state_struct_traits.h
+++ b/cc/ipc/shared_quad_state_struct_traits.h
@@ -62,6 +62,53 @@
   }
 };
 
+struct SharedQuadStateListArray {
+  cc::SharedQuadStateList* list;
+};
+
+template <>
+struct ArrayTraits<SharedQuadStateListArray> {
+  using Element = cc::SharedQuadState;
+  using Iterator = cc::SharedQuadStateList::Iterator;
+  using ConstIterator = cc::SharedQuadStateList::ConstIterator;
+
+  static ConstIterator GetBegin(const SharedQuadStateListArray& input) {
+    return input.list->begin();
+  }
+  static Iterator GetBegin(SharedQuadStateListArray& input) {
+    return input.list->begin();
+  }
+  static void AdvanceIterator(ConstIterator& iterator) { ++iterator; }
+  static void AdvanceIterator(Iterator& iterator) { ++iterator; }
+  static const Element& GetValue(ConstIterator& iterator) { return **iterator; }
+  static Element& GetValue(Iterator& iterator) { return **iterator; }
+  static size_t GetSize(const SharedQuadStateListArray& input) {
+    return input.list->size();
+  }
+  static bool Resize(SharedQuadStateListArray& input, size_t size) {
+    if (input.list->size() == size)
+      return true;
+    input.list->clear();
+    for (size_t i = 0; i < size; ++i)
+      input.list->AllocateAndConstruct<cc::SharedQuadState>();
+    return true;
+  }
+};
+
+template <>
+struct StructTraits<cc::mojom::SharedQuadStateList, cc::SharedQuadStateList> {
+  static SharedQuadStateListArray shared_quad_states(
+      const cc::SharedQuadStateList& list) {
+    return {const_cast<cc::SharedQuadStateList*>(&list)};
+  }
+
+  static bool Read(cc::mojom::SharedQuadStateListDataView data,
+                   cc::SharedQuadStateList* out) {
+    SharedQuadStateListArray sqs_array = {out};
+    return data.ReadSharedQuadStates(&sqs_array);
+  }
+};
+
 }  // namespace mojo
 
 #endif  // CC_IPC_SHARED_QUAD_STATE_STRUCT_TRAITS_H_
diff --git a/cc/layers/heads_up_display_layer.cc b/cc/layers/heads_up_display_layer.cc
index 26344ff..0492cb0a 100644
--- a/cc/layers/heads_up_display_layer.cc
+++ b/cc/layers/heads_up_display_layer.cc
@@ -18,11 +18,10 @@
 }
 
 HeadsUpDisplayLayer::HeadsUpDisplayLayer()
-    : typeface_(
-          SkTypeface::CreateFromName("times new roman", SkTypeface::kNormal)) {
+    : typeface_(SkTypeface::MakeFromName("times new roman", SkFontStyle())) {
   if (!typeface_) {
-    typeface_ = sk_sp<SkTypeface>(
-        SkTypeface::CreateFromName("monospace", SkTypeface::kBold));
+    typeface_ = SkTypeface::MakeFromName(
+        "monospace", SkFontStyle::FromOldStyle(SkTypeface::kBold));
   }
   DCHECK(typeface_.get());
   SetIsDrawable(true);
diff --git a/chrome/android/java/proguard.flags b/chrome/android/java/proguard.flags
index a1751e9c..1b2aed87 100644
--- a/chrome/android/java/proguard.flags
+++ b/chrome/android/java/proguard.flags
@@ -84,9 +84,6 @@
 # Google Play Services warnings are about its resources.
 -dontwarn com.google.android.gms.R**
 
-# TODO(yfriedman): Remove when crbug.com/488192 is fixed.
--dontwarn org.apache.http.**
-
 # The support library contains references to newer platform versions.
 # Don't warn about those in case this app is linking against an older
 # platform version.  We know about them, and they are safe.
@@ -99,9 +96,20 @@
   !static final <fields>;
 }
 
-# Everything below this is kept because they are referenced by the test APK.
--dontwarn javax.annotation.Nullable
+# Allowing Proguard to change modifiers. This change shrinks the .dex size by
+# ~1.1%, and reduces the method count by ~4.3%.
+-allowaccessmodification
 
+# Allows Proguard freedom in removing these log related calls. We ask for debug
+# and verbose logs to be stripped out in base.Log, so we are just ensuring we
+# get rid of all other debug/verbose logs.
+-assumenosideeffects class android.util.Log {
+  static *** d(...);
+  static *** v(...);
+  static *** isLoggable(...);
+}
+
+# Everything below this is kept because they are referenced by the test APK.
 -keep class android.support.v7.mediarouter.R* {
   *;
 }
@@ -152,25 +160,15 @@
   public void flingViewport(long, int, int);
 }
 
-# TODO(aurimas): remove this when Google Play Services no longer uses setLatestEventInfo call
-# that was deprecated in Android M. It is save to suppress this according to b/18510449.
--dontwarn android.app.Notification
-
-# IntentUtils uses reflection to access a method that is hidden until API level 18.
--dontnote org.chromium.chrome.browser.util.IntentUtils
-
 # Needed to compile ChromeTest.apk
 -keep class android.support.customtabs.** {
   *;
 }
 
+# TODO(yfriedman): Remove when crbug.com/488192 is fixed.
+-dontwarn org.apache.http.conn.scheme.LayeredSocketFactory
+
 # Needed to run ChromeTest.apk
 -keepnames class com.google.android.gms.common.GoogleApiAvailability {
   *;
 }
-
-#-keep public class android.net.http.SslCertificate
-#-keep public class android.webkit.WebVie
-
-#-dontwarn android.webkit.WebView
--dontwarn android.net.http.SslCertificate
diff --git a/chrome/android/java/res/layout/new_tab_page_snippets_card.xml b/chrome/android/java/res/layout/new_tab_page_snippets_card.xml
index 2a0c6905..3e64b2cf 100644
--- a/chrome/android/java/res/layout/new_tab_page_snippets_card.xml
+++ b/chrome/android/java/res/layout/new_tab_page_snippets_card.xml
@@ -49,7 +49,8 @@
         android:maxLines="1"
         android:ellipsize="end"
         android:textSize="12sp"
-        android:textColor="@color/snippets_publisher_name_color" />
+        android:textColor="@color/snippets_publisher_name_color"
+        android:textDirection="locale" />
 
     <ImageView
         android:id="@+id/article_thumbnail"
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ntp/snippets/SnippetArticleViewHolder.java b/chrome/android/java/src/org/chromium/chrome/browser/ntp/snippets/SnippetArticleViewHolder.java
index a83941e..ed965d6 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/ntp/snippets/SnippetArticleViewHolder.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/ntp/snippets/SnippetArticleViewHolder.java
@@ -127,10 +127,13 @@
 
         mHeadlineTextView.setText(mArticle.mTitle);
 
-        String publisherAttribution = String.format(PUBLISHER_FORMAT_STRING, mArticle.mPublisher,
+        // We format the publisher here so that having a publisher name in an RTL language doesn't
+        // mess up the formatting on an LTR device and vice versa.
+        String publisherAttribution = String.format(PUBLISHER_FORMAT_STRING,
+                BidiFormatter.getInstance().unicodeWrap(mArticle.mPublisher),
                 DateUtils.getRelativeTimeSpanString(mArticle.mPublishTimestampMilliseconds,
                         System.currentTimeMillis(), DateUtils.MINUTE_IN_MILLIS));
-        mPublisherTextView.setText(BidiFormatter.getInstance().unicodeWrap(publisherAttribution));
+        mPublisherTextView.setText(publisherAttribution);
 
         // The favicon of the publisher should match the textview height.
         int widthSpec = MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED);
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/TabPersistentStore.java b/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/TabPersistentStore.java
index a38c1c4..9aea9801 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/TabPersistentStore.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/TabPersistentStore.java
@@ -40,6 +40,7 @@
 import java.io.IOException;
 import java.util.ArrayDeque;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Deque;
 import java.util.List;
 import java.util.concurrent.ExecutionException;
@@ -178,6 +179,7 @@
 
     private SharedPreferences mPreferences;
     private AsyncTask<Void, Void, DataInputStream> mPrefetchTabListTask;
+    private byte[] mLastSavedMetadata;
 
     @VisibleForTesting
     AsyncTask<Void, Void, TabState> mPrefetchActiveTabTask;
@@ -258,7 +260,7 @@
     private void logExecutionTime(String name, long time) {
         if (LibraryLoader.isInitialized()) {
             RecordHistogram.recordTimesHistogram("Android.StrictMode.TabPersistentStore." + name,
-                    SystemClock.elapsedRealtime() - time, TimeUnit.MILLISECONDS);
+                    SystemClock.uptimeMillis() - time, TimeUnit.MILLISECONDS);
         }
     }
 
@@ -266,7 +268,7 @@
         // Temporarily allowing disk access. TODO: Fix. See http://b/5518024
         StrictMode.ThreadPolicy oldPolicy = StrictMode.allowThreadDiskWrites();
         try {
-            long time = SystemClock.elapsedRealtime();
+            long saveStateStartTime = SystemClock.uptimeMillis();
             // The list of tabs should be saved first in case our activity is terminated early.
             // Explicitly toss out any existing SaveListTask because they only save the TabModel as
             // it looked when the SaveListTask was first created.
@@ -276,6 +278,7 @@
             } catch (IOException e) {
                 Log.w(TAG, "Error while saving tabs state; will attempt to continue...", e);
             }
+            logExecutionTime("SaveListTime", saveStateStartTime);
 
             // Add current tabs to save because they did not get a save signal yet.
             Tab currentStandardTab = TabModelUtils.getCurrentTab(mTabModelSelector.getModel(false));
@@ -310,6 +313,7 @@
                 mSaveTabTask = null;
             }
 
+            long saveTabsStartTime = SystemClock.uptimeMillis();
             // Synchronously save any remaining unsaved tabs (hopefully very few).
             for (Tab tab : mTabsToSave) {
                 int id = tab.getId();
@@ -331,7 +335,8 @@
                 }
             }
             mTabsToSave.clear();
-            logExecutionTime("SaveStateTime", time);
+            logExecutionTime("SaveTabsTime", saveTabsStartTime);
+            logExecutionTime("SaveStateTime", saveStateStartTime);
         } finally {
             StrictMode.setThreadPolicy(oldPolicy);
         }
@@ -341,7 +346,7 @@
      * Restore saved state. Must be called before any tabs are added to the list.
      */
     public void loadState() {
-        long time = SystemClock.elapsedRealtime();
+        long time = SystemClock.uptimeMillis();
         waitForMigrationToFinish();
         logExecutionTime("LoadStateTime", time);
 
@@ -350,11 +355,11 @@
         mNormalTabsRestored = new SparseIntArray();
         mIncognitoTabsRestored = new SparseIntArray();
         try {
-            time = SystemClock.elapsedRealtime();
+            time = SystemClock.uptimeMillis();
             assert mTabModelSelector.getModel(true).getCount() == 0;
             assert mTabModelSelector.getModel(false).getCount() == 0;
             checkAndUpdateMaxTabId();
-            long timeWaitingForPrefetch = SystemClock.elapsedRealtime();
+            long timeWaitingForPrefetch = SystemClock.uptimeMillis();
             DataInputStream stream = mPrefetchTabListTask.get();
             logExecutionTime("LoadStateInternalPrefetchTime", timeWaitingForPrefetch);
             readSavedStateFile(stream,
@@ -440,11 +445,11 @@
         // 2. restoreTab is used to preempt async queue and restore immediately on the UI thread.
         StrictMode.ThreadPolicy oldPolicy = StrictMode.allowThreadDiskReads();
         try {
-            long time = SystemClock.elapsedRealtime();
+            long time = SystemClock.uptimeMillis();
             TabState state;
             int restoredTabId = mPreferences.getInt(PREF_ACTIVE_TAB_ID, Tab.INVALID_TAB_ID);
             if (restoredTabId == tabToRestore.id && mPrefetchActiveTabTask != null) {
-                long timeWaitingForPrefetch = SystemClock.elapsedRealtime();
+                long timeWaitingForPrefetch = SystemClock.uptimeMillis();
                 state = mPrefetchActiveTabTask.get();
                 logExecutionTime("RestoreTabPrefetchTime", timeWaitingForPrefetch);
             } else {
@@ -713,7 +718,14 @@
     }
 
     private void saveListToFile(byte[] listData) {
+        if (Arrays.equals(mLastSavedMetadata, listData)) return;
+
         saveListToFile(getStateDirectory(), listData);
+        mLastSavedMetadata = listData;
+        if (LibraryLoader.isInitialized()) {
+            RecordHistogram.recordCountHistogram(
+                    "Android.TabPersistentStore.MetadataFileSize", listData.length);
+        }
     }
 
     /**
@@ -810,7 +822,7 @@
 
     private int readSavedStateFile(DataInputStream stream, OnTabStateReadCallback callback)
             throws IOException {
-        long time = SystemClock.elapsedRealtime();
+        long time = SystemClock.uptimeMillis();
         int nextId = 0;
         boolean skipUrlRead = false;
         boolean skipIncognitoCount = false;
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/widget/ToolbarProgressBar.java b/chrome/android/java/src/org/chromium/chrome/browser/widget/ToolbarProgressBar.java
index 49bdd28..28a2c02 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/widget/ToolbarProgressBar.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/widget/ToolbarProgressBar.java
@@ -8,6 +8,7 @@
 import android.animation.TimeAnimator.TimeListener;
 import android.content.Context;
 import android.graphics.Color;
+import android.os.Build;
 import android.support.v4.view.ViewCompat;
 import android.text.TextUtils;
 import android.util.AttributeSet;
@@ -59,7 +60,7 @@
 
     // The amount of time in ms that the progress bar has to be stopped before the indeterminate
     // animation starts.
-    private static final long ANIMATION_START_THRESHOLD = 3000;
+    private static final long ANIMATION_START_THRESHOLD = 5000;
 
     private static final float THEMED_BACKGROUND_WHITE_FRACTION = 0.2f;
     private static final float THEMED_FOREGROUND_BLACK_FRACTION = 0.64f;
@@ -194,7 +195,8 @@
 
         if (TextUtils.equals(animation, "smooth")) {
             mAnimationLogic = new ProgressAnimationSmooth();
-        } else if (TextUtils.equals(animation, "smooth-indeterminate")) {
+        } else if (TextUtils.equals(animation, "smooth-indeterminate")
+                && Build.VERSION.SDK_INT > Build.VERSION_CODES.JELLY_BEAN_MR2) {
             mAnimationLogic = new ProgressAnimationSmooth();
 
             LayoutParams animationParams = new LayoutParams(getLayoutParams());
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/widget/ToolbarProgressBarAnimatingView.java b/chrome/android/java/src/org/chromium/chrome/browser/widget/ToolbarProgressBarAnimatingView.java
index a48fc1c1..3d8e9b6 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/widget/ToolbarProgressBarAnimatingView.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/widget/ToolbarProgressBarAnimatingView.java
@@ -5,6 +5,7 @@
 package org.chromium.chrome.browser.widget;
 
 import android.animation.Animator;
+import android.animation.Animator.AnimatorListener;
 import android.animation.AnimatorListenerAdapter;
 import android.animation.AnimatorSet;
 import android.animation.ValueAnimator;
@@ -27,20 +28,35 @@
     /** The drawable inside this ImageView. */
     private final ColorDrawable mAnimationDrawable;
 
-    /** The amount of time the fast part of the animation should take in ms. */
-    private static final int FAST_ANIMATION_DURATION_MS = 900;
+    /** The fraction of the total time that the slow animation should take. */
+    private static final float SLOW_ANIMATION_FRACTION = 0.60f;
 
-    /** The amount of time the slow part of the animation should take in ms. */
-    private static final int SLOW_ANIMATION_DURATION_MS = 1600;
+    /** The fraction of the total time that the fast animation delay should take. */
+    private static final float FAST_ANIMATION_DELAY = 0.02f;
+
+    /** The fraction of the total time that the fast animation should take. */
+    private static final float FAST_ANIMATION_FRACTION = 0.38f;
 
     /** The time between animation sequences. */
     private static final int ANIMATION_DELAY_MS = 1000;
 
     /** The width of the animating bar relative to the current width of the progress bar. */
-    private static final float ANIMATING_BAR_SCALE = 0.5f;
+    private static final float ANIMATING_BAR_SCALE = 0.3f;
+
+    /**
+     * The width of the animating bar relative to the current width of the progress bar for the
+     * first half of the slow animation.
+     */
+    private static final float SMALL_ANIMATING_BAR_SCALE = 0.1f;
+
+    /** The fraction of overall completion that the small animating bar should be expanded at. */
+    private static final float SMALL_BAR_EXPANSION_COMPLETE = 0.6f;
+
+    /** The maximum size of the animating view. */
+    private static final float ANIMATING_VIEW_MAX_WIDTH_DP = 400;
 
     /** Interpolator for enter and exit animation. */
-    private final BakedBezierInterpolator mBezier = BakedBezierInterpolator.TRANSFORM_CURVE;
+    private final BakedBezierInterpolator mBezier = BakedBezierInterpolator.FADE_OUT_CURVE;
 
     /** The current width of the progress bar. */
     private float mProgressWidth = 0;
@@ -48,6 +64,12 @@
     /** The set of individual animators that constitute the whole animation sequence. */
     private final AnimatorSet mAnimatorSet;
 
+    /** The animator controlling the fast animation. */
+    private final ValueAnimator mFastAnimation;
+
+    /** The animator controlling the slow animation. */
+    private final ValueAnimator mSlowAnimation;
+
     /** Track if the animation has been canceled. */
     private boolean mIsCanceled;
 
@@ -60,11 +82,11 @@
     /** The last fraction of the animation that was drawn. */
     private float mLastAnimatedFraction;
 
-    /**
-     * If the animation is currently running. This is needed because Animator.isStarted() is not
-     * reliable on JellyBean.
-     */
-    private boolean mIsAnimationRunning;
+    /** The last animation that received an update. */
+    private ValueAnimator mLastUpdatedAnimation;
+
+    /** The ratio of px to dp. */
+    private float mDpToPx;
 
     /**
      * An animation update listener that moves an ImageView across the progress bar.
@@ -72,8 +94,9 @@
     private class ProgressBarUpdateListener implements AnimatorUpdateListener {
         @Override
         public void onAnimationUpdate(ValueAnimator animation) {
+            mLastUpdatedAnimation = animation;
             mLastAnimatedFraction = animation.getAnimatedFraction();
-            updateAnimation(mLastAnimatedFraction);
+            updateAnimation(mLastUpdatedAnimation, mLastAnimatedFraction);
         }
     }
 
@@ -85,6 +108,7 @@
         super(context);
         setLayoutParams(layoutParams);
         mIsRtl = LocalizationUtils.isLayoutRtl();
+        mDpToPx = getResources().getDisplayMetrics().density;
 
         mAnimationDrawable = new ColorDrawable(Color.WHITE);
 
@@ -93,28 +117,44 @@
         mListener = new ProgressBarUpdateListener();
         mAnimatorSet = new AnimatorSet();
 
-        ValueAnimator fastAnimation = new ValueAnimator();
-        fastAnimation.setFloatValues(0.0f, 1.0f);
-        fastAnimation.setDuration(FAST_ANIMATION_DURATION_MS);
-        fastAnimation.addUpdateListener(mListener);
+        mSlowAnimation = new ValueAnimator();
+        mSlowAnimation.setFloatValues(0.0f, 1.0f);
+        mSlowAnimation.addUpdateListener(mListener);
 
-        ValueAnimator slowAnimation = new ValueAnimator();
-        slowAnimation.setFloatValues(0.0f, 1.0f);
-        slowAnimation.setDuration(SLOW_ANIMATION_DURATION_MS);
-        slowAnimation.addUpdateListener(mListener);
+        mFastAnimation = new ValueAnimator();
+        mFastAnimation.setFloatValues(0.0f, 1.0f);
+        mFastAnimation.addUpdateListener(mListener);
 
-        mAnimatorSet.playSequentially(fastAnimation, slowAnimation);
+        updateAnimationDuration();
 
-        slowAnimation.addListener(new AnimatorListenerAdapter() {
+        mAnimatorSet.playSequentially(mSlowAnimation, mFastAnimation);
+
+        AnimatorListener listener = new AnimatorListenerAdapter() {
             @Override
             public void onAnimationEnd(Animator a) {
                 // Replay the animation if it has not been canceled.
                 if (mIsCanceled) return;
                 // Repeats of the animation should have a start delay.
                 mAnimatorSet.setStartDelay(ANIMATION_DELAY_MS);
-                mAnimatorSet.start();
+                updateAnimationDuration();
+                // Only restart the animation if the last animation is ending.
+                if (a == mFastAnimation) mAnimatorSet.start();
             }
-        });
+        };
+
+        mSlowAnimation.addListener(listener);
+        mFastAnimation.addListener(listener);
+    }
+
+    /**
+     * Update the duration of the animation based on the width of the progress bar.
+     */
+    private void updateAnimationDuration() {
+        // Total duration: logE(progress_dp) * 200 * 1.3
+        long totalDuration = (long) (Math.log(mProgressWidth / mDpToPx) / Math.log(Math.E)) * 260;
+        mSlowAnimation.setDuration((long) (totalDuration * SLOW_ANIMATION_FRACTION));
+        mFastAnimation.setStartDelay((long) (totalDuration * FAST_ANIMATION_DELAY));
+        mFastAnimation.setDuration((long) (totalDuration * FAST_ANIMATION_FRACTION));
     }
 
     /**
@@ -122,8 +162,8 @@
      */
     public void startAnimation() {
         mIsCanceled = false;
-        if (!mIsAnimationRunning) {
-            mIsAnimationRunning = true;
+        if (!mAnimatorSet.isStarted()) {
+            updateAnimationDuration();
             // Set the initial start delay to 0ms so it starts immediately.
             mAnimatorSet.setStartDelay(0);
 
@@ -141,18 +181,36 @@
 
     /**
      * Update the animating view.
+     * @param animator The current running animator.
      * @param animatedFraction The current fraction of completion for the animation.
      */
-    private void updateAnimation(float animatedFraction) {
+    private void updateAnimation(ValueAnimator animator, float animatedFraction) {
+        if (mIsCanceled) return;
         float bezierProgress = mBezier.getInterpolation(animatedFraction);
 
         // Left and right bound change based on if the layout is RTL.
         float leftBound = mIsRtl ? -mProgressWidth : 0.0f;
         float rightBound = mIsRtl ? 0.0f : mProgressWidth;
 
+        float barScale = ANIMATING_BAR_SCALE;
+
+        // If the current animation is the slow animation, the bar slowly expands from 20% of the
+        // progress bar width to 30%.
+        if (animator == mSlowAnimation && animatedFraction <= SMALL_BAR_EXPANSION_COMPLETE) {
+            float sizeDiff = ANIMATING_BAR_SCALE - SMALL_ANIMATING_BAR_SCALE;
+
+            // Since the bar will only expand for the first 60% of the animation, multiply the
+            // animated fraction by 1/0.6 to get the fraction completed.
+            float completeFraction = (animatedFraction / SMALL_BAR_EXPANSION_COMPLETE);
+
+            barScale = SMALL_ANIMATING_BAR_SCALE + sizeDiff * completeFraction;
+        }
+
         // Include the width of the animating bar in this computation so it comes from
         // off-screen.
-        float animatingWidth = mProgressWidth * ANIMATING_BAR_SCALE;
+        float animatingWidth = Math.min(ANIMATING_VIEW_MAX_WIDTH_DP * mDpToPx,
+                mProgressWidth * barScale);
+
         float animatorCenter =
                 ((mProgressWidth + animatingWidth) * bezierProgress) - animatingWidth / 2.0f;
         if (mIsRtl) animatorCenter *= -1.0f;
@@ -186,7 +244,6 @@
      */
     public void cancelAnimation() {
         mIsCanceled = true;
-        mIsAnimationRunning = false;
         // Reset position and alpha.
         setScaleX(0.0f);
         setTranslationX(0.0f);
@@ -201,8 +258,11 @@
      * @param progressWidth The width of the contaiing progress bar.
      */
     public void update(float progressWidth) {
+        // Since the progress bar can become visible before current progress is sent, the width
+        // needs to be updated even if the progess bar isn't showing. The result of not having
+        // this is most noticable if you rotate the device on a slow page.
         mProgressWidth = progressWidth;
-        updateAnimation(mLastAnimatedFraction);
+        updateAnimation(mLastUpdatedAnimation, mLastAnimatedFraction);
     }
 
     /**
diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources.grd
index 9a8f1ec..fb83920c 100644
--- a/chrome/app/generated_resources.grd
+++ b/chrome/app/generated_resources.grd
@@ -7430,12 +7430,6 @@
       <message name="IDS_FILL_ON_ACCOUNT_SELECT_DESCRIPTION" desc="Description of the experiment for the password manager to fill on account selection rather than page load">
         Filling of passwords when an account is explicitly selected by the user rather than autofilling credentials on page load.
       </message>
-      <message name="IDS_FLAGS_FILL_ON_ACCOUNT_SELECT_ENABLE_HIGHLIGHTING" desc="Option to enable fill on account select with field highlighting">
-        Enable with field highlighting
-      </message>
-      <message name="IDS_FLAGS_FILL_ON_ACCOUNT_SELECT_ENABLE_NO_HIGHLIGHTING" desc="Option to enable fill on account select with no field highlighting">
-        Enable with no field highlighting
-      </message>
       <if expr="not is_android">
         <message name="IDS_PASSWORD_MANAGER_SAVE_BUTTON" desc="Save button text for password manager">
           Save
diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc
index 075118b..415f0ad 100644
--- a/chrome/browser/about_flags.cc
+++ b/chrome/browser/about_flags.cc
@@ -357,14 +357,6 @@
     switches::kExtensionContentVerificationEnforceStrict },
 };
 
-const FeatureEntry::Choice kFillOnAccountSelectChoices[] = {
-  { IDS_GENERIC_EXPERIMENT_CHOICE_DEFAULT, "", "" },
-  { IDS_GENERIC_EXPERIMENT_CHOICE_DISABLED,
-    autofill::switches::kDisableFillOnAccountSelect, "" },
-  { IDS_FLAGS_FILL_ON_ACCOUNT_SELECT_ENABLE_HIGHLIGHTING,
-    autofill::switches::kEnableFillOnAccountSelect, "" },
-};
-
 const FeatureEntry::Choice kTopChromeMaterialDesignChoices[] = {
   { IDS_GENERIC_EXPERIMENT_CHOICE_DEFAULT, "", "" },
   { IDS_FLAGS_TOP_CHROME_MD_NON_MATERIAL,
@@ -1430,9 +1422,6 @@
     {"enable-touch-hover", IDS_FLAGS_TOUCH_HOVER_NAME,
      IDS_FLAGS_TOUCH_HOVER_DESCRIPTION, kOsAndroid,
      SINGLE_VALUE_TYPE("enable-touch-hover")},
-    {"enable-fill-on-account-select", IDS_FILL_ON_ACCOUNT_SELECT_NAME,
-     IDS_FILL_ON_ACCOUNT_SELECT_DESCRIPTION, kOsAll,
-     MULTI_VALUE_TYPE(kFillOnAccountSelectChoices)},
 #if defined(OS_CHROMEOS)
     {"enable-wifi-credential-sync",  // FLAGS:RECORD_UMA
      IDS_FLAGS_WIFI_CREDENTIAL_SYNC_NAME,
@@ -1927,6 +1916,9 @@
      SINGLE_VALUE_TYPE(chromeos::switches::kEnableEolNotification)},
 #endif  // defined(OS_CHROMEOS)
 
+    {"fill-on-account-select", IDS_FILL_ON_ACCOUNT_SELECT_NAME,
+     IDS_FILL_ON_ACCOUNT_SELECT_DESCRIPTION, kOsAll,
+     FEATURE_VALUE_TYPE(password_manager::features::kFillOnAccountSelect)},
     // NOTE: Adding new command-line switches requires adding corresponding
     // entries to enum "LoginCustomFlags" in histograms.xml. See note in
     // histograms.xml and don't forget to run AboutFlagsHistogramTest unit test.
diff --git a/chrome/browser/browsing_data/browsing_data_counter_utils.cc b/chrome/browser/browsing_data/browsing_data_counter_utils.cc
index d40ee0f..39c3a9b 100644
--- a/chrome/browser/browsing_data/browsing_data_counter_utils.cc
+++ b/chrome/browser/browsing_data/browsing_data_counter_utils.cc
@@ -16,6 +16,13 @@
 #include "ui/base/l10n/l10n_util.h"
 #include "ui/base/text/bytes_formatting.h"
 
+#if defined(ENABLE_EXTENSIONS)
+#include "base/numerics/safe_conversions.h"
+#include "base/strings/string_util.h"
+#include "base/strings/utf_string_conversions.h"
+#include "chrome/browser/browsing_data/hosted_apps_counter.h"
+#endif
+
 bool AreCountersEnabled() {
   if (base::CommandLine::ForCurrentProcess()->HasSwitch(
           switches::kEnableClearBrowsingDataCounters)) {
@@ -158,6 +165,43 @@
       default:
         NOTREACHED();
     }
+
+#if defined(ENABLE_EXTENSIONS)
+  } else if (pref_name == prefs::kDeleteHostedAppsData) {
+    // Hosted apps counter.
+    const HostedAppsCounter::HostedAppsResult* hosted_apps_result =
+        static_cast<const HostedAppsCounter::HostedAppsResult*>(result);
+    int hosted_apps_count = hosted_apps_result->Value();
+
+    DCHECK_GE(hosted_apps_result->Value(),
+              base::checked_cast<BrowsingDataCounter::ResultInt>(
+                  hosted_apps_result->examples().size()));
+
+    std::vector<base::string16> replacements;
+    if (hosted_apps_count > 0) {
+      replacements.push_back(                                     // App1,
+          base::UTF8ToUTF16(hosted_apps_result->examples()[0]));
+    }
+    if (hosted_apps_count > 1) {
+      replacements.push_back(
+          base::UTF8ToUTF16(hosted_apps_result->examples()[1]));  // App2,
+    }
+    if (hosted_apps_count > 2) {
+      replacements.push_back(l10n_util::GetPluralStringFUTF16(  // and X-2 more.
+          IDS_DEL_HOSTED_APPS_COUNTER_AND_X_MORE,
+          hosted_apps_count - 2));
+    }
+
+    // The output string has both the number placeholder (#) and substitution
+    // placeholders ($1, $2, $3). First fetch the correct plural string first,
+    // then substitute the $ placeholders.
+    text = base::ReplaceStringPlaceholders(
+        l10n_util::GetPluralStringFUTF16(
+            IDS_DEL_HOSTED_APPS_COUNTER, hosted_apps_count),
+        replacements,
+        nullptr);
+#endif
+
   }
 
   return text;
diff --git a/chrome/browser/browsing_data/browsing_data_counter_utils_unittest.cc b/chrome/browser/browsing_data/browsing_data_counter_utils_unittest.cc
index c422570..b36cc705 100644
--- a/chrome/browser/browsing_data/browsing_data_counter_utils_unittest.cc
+++ b/chrome/browser/browsing_data/browsing_data_counter_utils_unittest.cc
@@ -4,12 +4,20 @@
 
 #include "chrome/browser/browsing_data/browsing_data_counter_utils.h"
 
+#include <string>
+#include <vector>
+
 #include "base/strings/stringprintf.h"
 #include "base/strings/utf_string_conversions.h"
 #include "chrome/browser/browsing_data/autofill_counter.h"
 #include "chrome/test/base/testing_browser_process.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
+#if defined(ENABLE_EXTENSIONS)
+#include "base/strings/string_split.h"
+#include "chrome/browser/browsing_data/hosted_apps_counter.h"
+#endif
+
 // Tests the complex output of the Autofill counter.
 TEST(BrowsingDataCounterUtilsTest, AutofillCounterResult) {
   AutofillCounter counter;
@@ -20,12 +28,12 @@
 
   // Test all configurations of zero and nonzero partial results for datatypes.
   // Test singular and plural for each datatype.
-  struct TestCase {
+  const struct TestCase {
     int num_credit_cards;
     int num_addresses;
     int num_suggestions;
     std::string expected_output;
-  } test_cases[] = {
+  } kTestCases[] = {
       {0, 0, 0, "none"},
       {1, 0, 0, "1 credit card"},
       {0, 5, 0, "5 addresses"},
@@ -38,7 +46,7 @@
       {4, 2, 1, "4 credit cards, 2 addresses, 1 other"},
   };
 
-  for (const TestCase& test_case : test_cases) {
+  for (const TestCase& test_case : kTestCases) {
     AutofillCounter::AutofillResult result(
         &counter,
         test_case.num_suggestions,
@@ -57,3 +65,47 @@
     EXPECT_EQ(output, base::ASCIIToUTF16(test_case.expected_output));
   }
 }
+
+#if defined(ENABLE_EXTENSIONS)
+// Tests the complex output of the hosted apps counter.
+TEST(BrowsingDataCounterUtilsTest, HostedAppsCounterResult) {
+  HostedAppsCounter counter;
+
+  // This test assumes that the strings are served exactly as defined,
+  // i.e. that the locale is set to the default "en".
+  ASSERT_EQ("en", TestingBrowserProcess::GetGlobal()->GetApplicationLocale());
+
+  // Test the output for various numbers of hosted apps.
+  const struct TestCase {
+    std::string apps_list;
+    std::string expected_output;
+  } kTestCases[] = {
+      { "", "none" },
+      { "App1", "1 app (App1)" },
+      { "App1, App2", "2 apps (App1, App2)" },
+      { "App1, App2, App3", "3 apps (App1, App2, and 1 more)" },
+      { "App1, App2, App3, App4", "4 apps (App1, App2, and 2 more)" },
+      { "App1, App2, App3, App4, App5", "5 apps (App1, App2, and 3 more)" },
+  };
+
+  for (const TestCase& test_case : kTestCases) {
+    // Split the list of installed apps by commas.
+    std::vector<std::string> apps = base::SplitString(
+        test_case.apps_list, ",",
+        base::TRIM_WHITESPACE, base::SPLIT_WANT_NONEMPTY);
+
+    // The first two apps in the list are used as examples.
+    std::vector<std::string> examples;
+    examples.assign(
+        apps.begin(), apps.begin() + (apps.size() > 2 ? 2 : apps.size()));
+
+    HostedAppsCounter::HostedAppsResult result(
+        &counter,
+        apps.size(),
+        examples);
+
+    base::string16 output = GetCounterTextFromResult(&result);
+    EXPECT_EQ(output, base::ASCIIToUTF16(test_case.expected_output));
+  }
+}
+#endif
diff --git a/chrome/browser/budget_service/background_budget_service.cc b/chrome/browser/budget_service/background_budget_service.cc
index ec36dfd..f79b75c 100644
--- a/chrome/browser/budget_service/background_budget_service.cc
+++ b/chrome/browser/budget_service/background_budget_service.cc
@@ -22,6 +22,9 @@
 #include "components/pref_registry/pref_registry_syncable.h"
 #include "components/prefs/pref_service.h"
 #include "components/prefs/scoped_user_pref_update.h"
+#include "content/public/browser/browser_thread.h"
+
+using content::BrowserThread;
 
 namespace {
 
@@ -109,7 +112,8 @@
   return SiteEngagementScore::kMaxPoints + 1.0;
 }
 
-double BackgroundBudgetService::GetBudget(const GURL& origin) {
+void BackgroundBudgetService::GetBudget(const GURL& origin,
+                                        const GetBudgetCallback& callback) {
   DCHECK_EQ(origin, origin.GetOrigin());
 
   // Get the current SES score, which we'll use to set a new budget.
@@ -123,7 +127,9 @@
                               &last_updated_msec)) {
     // If there is no stored data or the data can't be parsed, just return the
     // SES.
-    return ses_score;
+    BrowserThread::PostTask(BrowserThread::UI, FROM_HERE,
+                            base::Bind(callback, ses_score));
+    return;
   }
 
   base::Time now = clock_->Now();
@@ -134,8 +140,11 @@
   // clock will reach the future, and the budget calculations will catch up.
   // TODO(harkness): Consider what to do if the clock jumps forward by a
   // significant amount.
-  if (elapsed.InMicroseconds() < 0)
-    return old_budget;
+  if (elapsed.InMicroseconds() < 0) {
+    BrowserThread::PostTask(BrowserThread::UI, FROM_HERE,
+                            base::Bind(callback, old_budget));
+    return;
+  }
 
   // For each time period that elapses, calculate the carryover ratio as the
   // ratio of time remaining in our max period to the total period.
@@ -159,10 +168,13 @@
   double budget = budget_carryover + ses_component;
   DCHECK_GE(budget, 0.0);
 
-  return budget;
+  BrowserThread::PostTask(BrowserThread::UI, FROM_HERE,
+                          base::Bind(callback, budget));
 }
 
-void BackgroundBudgetService::StoreBudget(const GURL& origin, double budget) {
+void BackgroundBudgetService::StoreBudget(const GURL& origin,
+                                          double budget,
+                                          const base::Closure& closure) {
   DCHECK_EQ(origin, origin.GetOrigin());
   DCHECK_GE(budget, 0.0);
   DCHECK_LE(budget, SiteEngagementService::GetMaxPoints());
@@ -173,6 +185,8 @@
 
   base::Time time = clock_->Now();
   SetBudgetDataInPrefs(profile_, origin, time.ToDoubleT(), budget, ses_score);
+
+  BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, base::Bind(closure));
 }
 
 // Override the default clock with the specified clock. Only used for testing.
diff --git a/chrome/browser/budget_service/background_budget_service.h b/chrome/browser/budget_service/background_budget_service.h
index 35f79d3..6967efaf 100644
--- a/chrome/browser/budget_service/background_budget_service.h
+++ b/chrome/browser/budget_service/background_budget_service.h
@@ -8,6 +8,7 @@
 #include <memory>
 #include <string>
 
+#include "base/callback_forward.h"
 #include "base/gtest_prod_util.h"
 #include "components/keyed_service/core/keyed_service.h"
 #include "url/gurl.h"
@@ -41,14 +42,19 @@
   // Query for the base cost for any background processing.
   static double GetCost(CostType type);
 
-  // Get the budget associated with the origin. This is returned as the double
-  // budget. Budget will be a value between 0.0 and
+  using GetBudgetCallback = base::Callback<void(double budget)>;
+
+  // Get the budget associated with the origin. This is passed to the
+  // callback. Budget will be a value between 0.0 and
   // SiteEngagementScore::kMaxPoints.
-  double GetBudget(const GURL& origin);
+  void GetBudget(const GURL& origin, const GetBudgetCallback& callback);
 
   // Store the budget associated with the origin. Budget should be a value
-  // between 0.0 and SiteEngagementScore::kMaxPoints.
-  void StoreBudget(const GURL& origin, double budget);
+  // between 0.0 and SiteEngagementScore::kMaxPoints. closure will be called
+  // when the store completes.
+  void StoreBudget(const GURL& origin,
+                   double budget,
+                   const base::Closure& closure);
 
  private:
   friend class BackgroundBudgetServiceTest;
diff --git a/chrome/browser/budget_service/background_budget_service_unittest.cc b/chrome/browser/budget_service/background_budget_service_unittest.cc
index 98ee3dff..6050527 100644
--- a/chrome/browser/budget_service/background_budget_service_unittest.cc
+++ b/chrome/browser/budget_service/background_budget_service_unittest.cc
@@ -6,6 +6,7 @@
 #include <string>
 
 #include "base/memory/ptr_util.h"
+#include "base/run_loop.h"
 #include "base/test/simple_test_clock.h"
 #include "chrome/browser/budget_service/background_budget_service.h"
 #include "chrome/browser/budget_service/background_budget_service_factory.h"
@@ -31,7 +32,7 @@
 
 class BackgroundBudgetServiceTest : public testing::Test {
  public:
-  BackgroundBudgetServiceTest() {}
+  BackgroundBudgetServiceTest() : budget_(0.0) {}
   ~BackgroundBudgetServiceTest() override {}
 
   BackgroundBudgetService* GetService() {
@@ -52,74 +53,83 @@
     return clock;
   }
 
+  double GetBudget() {
+    const GURL origin(kTestOrigin);
+    base::RunLoop run_loop;
+    GetService()->GetBudget(
+        origin, base::Bind(&BackgroundBudgetServiceTest::GotBudget,
+                           base::Unretained(this), run_loop.QuitClosure()));
+    run_loop.Run();
+    return budget_;
+  }
+
+  void GotBudget(base::Closure run_loop_closure, double budget) {
+    budget_ = budget;
+    run_loop_closure.Run();
+  }
+
+  void StoreBudget(double budget) {
+    const GURL origin(kTestOrigin);
+    base::RunLoop run_loop;
+    GetService()->StoreBudget(origin, budget, run_loop.QuitClosure());
+    run_loop.Run();
+  }
+
+  // Budget for callbacks to set.
+  double budget_;
+
  private:
   content::TestBrowserThreadBundle thread_bundle_;
   TestingProfile profile_;
 };
 
 TEST_F(BackgroundBudgetServiceTest, GetBudgetNoBudgetOrSES) {
-  const GURL origin(kTestOrigin);
-
-  double budget = GetService()->GetBudget(origin);
-
-  EXPECT_DOUBLE_EQ(budget, 0.0);
+  EXPECT_DOUBLE_EQ(GetBudget(), 0.0);
 }
 
 TEST_F(BackgroundBudgetServiceTest, GetBudgetNoBudgetSESExists) {
-  const GURL origin(kTestOrigin);
-
   // Set a starting SES for the url but no stored budget info.
+  const GURL origin(kTestOrigin);
   SetSiteEngagementScore(origin, kTestSES);
 
-  double budget = GetService()->GetBudget(origin);
-
-  EXPECT_DOUBLE_EQ(budget, kTestSES);
+  EXPECT_DOUBLE_EQ(GetBudget(), kTestSES);
 }
 
 TEST_F(BackgroundBudgetServiceTest, GetBudgetNoElapsedTime) {
-  const GURL origin(kTestOrigin);
-
-  std::unique_ptr<BackgroundBudgetService> service(
-      new BackgroundBudgetService(profile()));
-
-  service->StoreBudget(origin, kTestBudget);
-
-  double budget = service->GetBudget(origin);
-
-  EXPECT_NEAR(budget, kTestBudget, kTestBudget);
+  StoreBudget(kTestBudget);
+  EXPECT_DOUBLE_EQ(GetBudget(), kTestBudget);
 }
 
 TEST_F(BackgroundBudgetServiceTest, GetBudgetElapsedTime) {
   // Manually construct a BackgroundBudgetServie with a clock that the test
   // can control so that we can fast forward in time.
-  BackgroundBudgetService* service = GetService();
   base::SimpleTestClock* clock = SetClockForTesting();
   base::Time starting_time = clock->Now();
 
   // Set initial SES and budget values.
   const GURL origin(kTestOrigin);
   SetSiteEngagementScore(origin, kTestSES);
-  service->StoreBudget(origin, kTestBudget);
+  StoreBudget(kTestBudget);
 
-  double budget = service->GetBudget(origin);
+  double budget = GetBudget();
   EXPECT_DOUBLE_EQ(budget, kTestBudget);
 
   // Query for the budget after 1 second has passed.
   clock->SetNow(starting_time + base::TimeDelta::FromSeconds(1));
-  budget = service->GetBudget(origin);
-  EXPECT_NEAR(budget, kTestBudget, kTestSES * 1.0 / kSecondsToAccumulate);
+  budget = GetBudget();
+  EXPECT_LT(budget, kTestBudget + kTestSES * 1.0 / kSecondsToAccumulate);
   EXPECT_GT(budget, kTestBudget);
 
   // Query for the budget after 1 hour has passed.
   clock->SetNow(starting_time + base::TimeDelta::FromHours(1));
-  budget = service->GetBudget(origin);
-  EXPECT_NEAR(budget, kTestBudget, kTestSES * 3600.0 / kSecondsToAccumulate);
+  budget = GetBudget();
+  EXPECT_LT(budget, kTestBudget + kTestSES * 3600.0 / kSecondsToAccumulate);
   EXPECT_GT(budget, kTestBudget);
 
   // Query for the budget after 5 days have passed. The budget should be
   // increasing, but not up the SES score.
   clock->SetNow(starting_time + base::TimeDelta::FromDays(5));
-  budget = service->GetBudget(origin);
+  budget = GetBudget();
   EXPECT_GT(budget, kTestBudget);
   EXPECT_LT(budget, kTestSES);
   double moderate_ses_budget = budget;
@@ -127,23 +137,23 @@
   // Query for the budget after 10 days have passed. By this point, the budget
   // should converge to the SES score.
   clock->SetNow(starting_time + base::TimeDelta::FromDays(10));
-  budget = service->GetBudget(origin);
+  budget = GetBudget();
   EXPECT_DOUBLE_EQ(budget, kTestSES);
 
   // Now, change the SES score to the maximum amount and reinitialize budget.
   SetSiteEngagementScore(origin, kMaxSES);
-  service->StoreBudget(origin, kTestBudget);
+  StoreBudget(kTestBudget);
   starting_time = clock->Now();
 
   // Query for the budget after 1 second has passed.
   clock->SetNow(starting_time + base::TimeDelta::FromSeconds(1));
-  budget = service->GetBudget(origin);
-  EXPECT_NEAR(budget, kTestBudget, kMaxSES * 1.0 / kSecondsToAccumulate);
+  budget = GetBudget();
+  EXPECT_LT(budget, kTestBudget + kMaxSES * 1.0 / kSecondsToAccumulate);
 
   // Query for the budget after 5 days have passed. Again, the budget should be
   // approaching the SES, but not have reached it.
   clock->SetNow(starting_time + base::TimeDelta::FromDays(5));
-  budget = service->GetBudget(origin);
+  budget = GetBudget();
   EXPECT_GT(budget, kTestBudget);
   EXPECT_LT(budget, kMaxSES);
 
@@ -153,13 +163,13 @@
 
   // Now, change the SES score to a low amount and reinitialize budget.
   SetSiteEngagementScore(origin, kLowSES);
-  service->StoreBudget(origin, kTestBudget);
+  StoreBudget(kTestBudget);
   starting_time = clock->Now();
 
   // Query for the budget after 5 days have passed. Again, the budget should be
   // approaching the SES, this time decreasing, but not have reached it.
   clock->SetNow(starting_time + base::TimeDelta::FromDays(5));
-  budget = service->GetBudget(origin);
+  budget = GetBudget();
   EXPECT_LT(budget, kTestBudget);
   EXPECT_GT(budget, kLowSES);
 }
@@ -167,13 +177,12 @@
 TEST_F(BackgroundBudgetServiceTest, GetBudgetConsumedOverTime) {
   // Manually construct a BackgroundBudgetService with a clock that the test
   // can control so that we can fast forward in time.
-  BackgroundBudgetService* service = GetService();
   base::SimpleTestClock* clock = SetClockForTesting();
 
   // Set initial SES and budget values.
   const GURL origin(kTestOrigin);
   SetSiteEngagementScore(origin, kTestSES);
-  service->StoreBudget(origin, kTestBudget);
+  StoreBudget(kTestBudget);
   double budget = 0.0;
 
   // Measure over 200 hours. In each hour a message is received, and for 1 in
@@ -181,12 +190,12 @@
   for (int i = 0; i < 200; i++) {
     // Query for the budget after 1 hour has passed.
     clock->Advance(base::TimeDelta::FromHours(1));
-    budget = service->GetBudget(origin);
+    budget = GetBudget();
 
     if (i % 10 == 0) {
       double cost = BackgroundBudgetService::GetCost(
           BackgroundBudgetService::CostType::SILENT_PUSH);
-      service->StoreBudget(origin, budget - cost);
+      StoreBudget(budget - cost);
     }
   }
 
@@ -210,32 +219,30 @@
   update_map->SetStringWithoutPathExpansion(origin.spec(), "20#2.0");
 
   // Get the budget, expect that it will return SES.
-  double budget = GetService()->GetBudget(origin);
-
-  EXPECT_DOUBLE_EQ(budget, kTestSES);
+  EXPECT_DOUBLE_EQ(GetBudget(), kTestSES);
 }
 
 TEST_F(BackgroundBudgetServiceTest, GetBudgetNegativeTime) {
   // Manually construct a BackgroundBudgetService with a clock that the test
   // can control so that we can fast forward in time.
-  BackgroundBudgetService* service = GetService();
   base::SimpleTestClock* clock = SetClockForTesting();
   base::Time starting_time = clock->Now();
 
   // Set initial SES and budget values.
   const GURL origin(kTestOrigin);
   SetSiteEngagementScore(origin, kTestSES);
-  service->StoreBudget(origin, kTestBudget);
+  StoreBudget(kTestBudget);
 
   // Move time forward an hour and get the budget.
   clock->SetNow(starting_time + base::TimeDelta::FromHours(1));
-  double budget = service->GetBudget(origin);
-  service->StoreBudget(origin, budget);
-  EXPECT_NE(kTestBudget, budget);
+  double original_budget = GetBudget();
+
+  // Store the updated budget.
+  StoreBudget(original_budget);
+  EXPECT_NE(kTestBudget, original_budget);
 
   // Now move time backwards a day and make sure that the current
   // budget matches the budget of the most foward time.
   clock->SetNow(starting_time - base::TimeDelta::FromDays(1));
-  double back_budget = service->GetBudget(origin);
-  EXPECT_NEAR(budget, back_budget, 0.01);
+  EXPECT_NEAR(original_budget, GetBudget(), 0.01);
 }
diff --git a/chrome/browser/chrome_content_browser_client.cc b/chrome/browser/chrome_content_browser_client.cc
index f788b6f..39338e6 100644
--- a/chrome/browser/chrome_content_browser_client.cc
+++ b/chrome/browser/chrome_content_browser_client.cc
@@ -1557,9 +1557,7 @@
       autofill::switches::kDisableAccessorySuggestionView,
       autofill::switches::kEnableAccessorySuggestionView,
 #endif
-      autofill::switches::kDisableFillOnAccountSelect,
       autofill::switches::kDisablePasswordGeneration,
-      autofill::switches::kEnableFillOnAccountSelect,
       autofill::switches::kEnablePasswordGeneration,
       autofill::switches::kEnableSingleClickAutofill,
       autofill::switches::kEnableSuggestionsWithSubstringMatch,
diff --git a/chrome/browser/io_thread.cc b/chrome/browser/io_thread.cc
index 95db4d7..1731e128 100644
--- a/chrome/browser/io_thread.cc
+++ b/chrome/browser/io_thread.cc
@@ -997,8 +997,7 @@
       globals->network_quality_estimator.get());
   context->set_backoff_manager(globals->url_request_backoff_manager.get());
 
-  context->set_http_server_properties(
-      globals->http_server_properties->GetWeakPtr());
+  context->set_http_server_properties(globals->http_server_properties.get());
 
   context->set_enable_brotli(globals->enable_brotli);
 
@@ -1048,8 +1047,7 @@
   context->set_network_delegate(globals->system_network_delegate.get());
   context->set_http_user_agent_settings(
       globals->http_user_agent_settings.get());
-  context->set_http_server_properties(
-      globals->http_server_properties->GetWeakPtr());
+  context->set_http_server_properties(globals->http_server_properties.get());
 
   context->set_enable_brotli(globals->enable_brotli);
 
diff --git a/chrome/browser/page_load_metrics/observers/document_write_page_load_metrics_observer.cc b/chrome/browser/page_load_metrics/observers/document_write_page_load_metrics_observer.cc
index 162a03b..e79c5a7b 100644
--- a/chrome/browser/page_load_metrics/observers/document_write_page_load_metrics_observer.cc
+++ b/chrome/browser/page_load_metrics/observers/document_write_page_load_metrics_observer.cc
@@ -74,9 +74,100 @@
     "ParseBlockedOnScriptLoadFromDocumentWrite.ParseComplete.Background";
 const char kBackgroundHistogramDocWriteBlockParseDuration[] =
     "PageLoad.Clients.DocWrite.Block.Timing2.ParseDuration.Background";
+
+// Histograms that are logged immediately on receiving timing/metadata update.
+const char kHistogramDocWriteFirstContentfulPaintImmediate[] =
+    "PageLoad.Clients.DocWrite.Evaluator.PaintTiming."
+    "NavigationToFirstContentfulPaint";
+const char kHistogramDocWriteParseStartToFirstContentfulPaintImmediate[] =
+    "PageLoad.Clients.DocWrite.Evaluator.PaintTiming."
+    "ParseStartToFirstContentfulPaint";
+const char kHistogramDocWriteParseDurationImmediate[] =
+    "PageLoad.Clients.DocWrite.Evaluator.ParseTiming.ParseDuration";
+const char kHistogramDocWriteParseBlockedOnScriptImmediate[] =
+    "PageLoad.Clients.DocWrite.Evaluator.ParseTiming.ParseBlockedOnScriptLoad";
+const char kHistogramDocWriteParseBlockedOnScriptLoadDocumentWriteImmediate[] =
+    "PageLoad.Clients.DocWrite.Evaluator.ParseTiming."
+    "ParseBlockedOnScriptLoadFromDocumentWrite";
+const char kBackgroundHistogramDocWriteFirstContentfulPaintImmediate[] =
+    "PageLoad.Clients.DocWrite.Evaluator.PaintTiming."
+    "NavigationToFirstContentfulPaint."
+    "Background";
+const char kBackgroundHistogramDocWriteParseDurationImmediate[] =
+    "PageLoad.Clients.DocWrite.Evaluator.ParseTiming.ParseDuration.Background";
+const char kBackgroundHistogramDocWriteParseBlockedOnScriptImmediate[] =
+    "PageLoad.Clients.DocWrite.Evaluator.ParseTiming.ParseBlockedOnScriptLoad."
+    "Background";
+const char
+    kBackgroundHistogramDocWriteParseBlockedOnScriptLoadDocumentWriteImmediate
+        [] = "PageLoad.Clients.DocWrite.Evaluator.ParseTiming."
+             "ParseBlockedOnScriptLoadFromDocumentWrite.Background";
+
+const char kHistogramDocWriteBlockParseStartToFirstContentfulPaintImmediate[] =
+    "PageLoad.Clients.DocWrite.Block.PaintTiming."
+    "ParseStartToFirstContentfulPaint";
+const char kHistogramDocWriteBlockParseBlockedOnScriptImmediate[] =
+    "PageLoad.Clients.DocWrite.Block.ParseTiming.ParseBlockedOnScriptLoad";
+const char
+    kHistogramDocWriteBlockParseBlockedOnScriptLoadDocumentWriteImmediate[] =
+        "PageLoad.Clients.DocWrite.Block.ParseTiming."
+        "ParseBlockedOnScriptLoadFromDocumentWrite";
+const char kHistogramDocWriteBlockParseDurationImmediate[] =
+    "PageLoad.Clients.DocWrite.Block.ParseTiming.ParseDuration";
+
+const char kBackgroundHistogramDocWriteBlockParseBlockedOnScriptImmediate[] =
+    "PageLoad.Clients.DocWrite.Block.ParseTiming.ParseBlockedOnScriptLoad."
+    "Background";
+const char
+    kBackgroundDocWriteBlockParseBlockedOnScriptLoadDocumentWriteImmediate[] =
+        "PageLoad.Clients.DocWrite.Block.ParseTiming."
+        "ParseBlockedOnScriptLoadFromDocumentWrite.Background";
+const char kBackgroundHistogramDocWriteBlockParseDurationImmediate[] =
+    "PageLoad.Clients.DocWrite.Block.ParseTiming.ParseDuration.Background";
 }  // namespace internal
 
-DocumentWritePageLoadMetricsObserver::DocumentWritePageLoadMetricsObserver() {}
+DocumentWritePageLoadMetricsObserver::DocumentWritePageLoadMetricsObserver()
+    : doc_write_block_reload_observed_(false) {}
+
+void DocumentWritePageLoadMetricsObserver::OnFirstContentfulPaint(
+    const page_load_metrics::PageLoadTiming& timing,
+    const page_load_metrics::PageLoadExtraInfo& info) {
+  if (info.metadata.behavior_flags &
+      blink::WebLoadingBehaviorFlag::WebLoadingBehaviorDocumentWriteEvaluator) {
+    LogDocumentWriteEvaluatorFirstContentfulPaint(timing, info);
+  }
+  if (info.metadata.behavior_flags &
+      blink::WebLoadingBehaviorFlag::WebLoadingBehaviorDocumentWriteBlock) {
+    LogDocumentWriteBlockFirstContentfulPaint(timing, info);
+  }
+}
+
+void DocumentWritePageLoadMetricsObserver::OnParseStop(
+    const page_load_metrics::PageLoadTiming& timing,
+    const page_load_metrics::PageLoadExtraInfo& info) {
+  if (info.metadata.behavior_flags &
+      blink::WebLoadingBehaviorFlag::WebLoadingBehaviorDocumentWriteEvaluator) {
+    LogDocumentWriteEvaluatorParseStop(timing, info);
+  }
+  if (info.metadata.behavior_flags &
+      blink::WebLoadingBehaviorFlag::WebLoadingBehaviorDocumentWriteBlock) {
+    LogDocumentWriteBlockParseStop(timing, info);
+  }
+}
+
+void DocumentWritePageLoadMetricsObserver::OnLoadingBehaviorObserved(
+    const page_load_metrics::PageLoadExtraInfo& info) {
+  if ((info.metadata.behavior_flags &
+       blink::WebLoadingBehaviorFlag::
+           WebLoadingBehaviorDocumentWriteBlockReload) &&
+      !doc_write_block_reload_observed_) {
+    DCHECK(
+        !(info.metadata.behavior_flags &
+          blink::WebLoadingBehaviorFlag::WebLoadingBehaviorDocumentWriteBlock));
+    UMA_HISTOGRAM_COUNTS(internal::kHistogramDocWriteBlockReloadCount, 1);
+    doc_write_block_reload_observed_ = true;
+  }
+}
 
 void DocumentWritePageLoadMetricsObserver::OnComplete(
     const page_load_metrics::PageLoadTiming& timing,
@@ -91,13 +182,52 @@
       blink::WebLoadingBehaviorFlag::WebLoadingBehaviorDocumentWriteBlock) {
     LogDocumentWriteBlockData(timing, info);
   }
-  if (info.metadata.behavior_flags &
-      blink::WebLoadingBehaviorFlag::
-          WebLoadingBehaviorDocumentWriteBlockReload) {
-    DCHECK(
-        !(info.metadata.behavior_flags &
-          blink::WebLoadingBehaviorFlag::WebLoadingBehaviorDocumentWriteBlock));
-    UMA_HISTOGRAM_COUNTS(internal::kHistogramDocWriteBlockReloadCount, 1);
+}
+
+void DocumentWritePageLoadMetricsObserver::
+    LogDocumentWriteEvaluatorFirstContentfulPaint(
+        const page_load_metrics::PageLoadTiming& timing,
+        const page_load_metrics::PageLoadExtraInfo& info) {
+  if (WasStartedInForegroundEventInForeground(timing.first_contentful_paint,
+                                              info)) {
+    PAGE_LOAD_HISTOGRAM(
+        internal::kHistogramDocWriteFirstContentfulPaintImmediate,
+        timing.first_contentful_paint);
+    PAGE_LOAD_HISTOGRAM(
+        internal::kHistogramDocWriteParseStartToFirstContentfulPaintImmediate,
+        timing.first_contentful_paint - timing.parse_start);
+  } else {
+    PAGE_LOAD_HISTOGRAM(
+        internal::kBackgroundHistogramDocWriteFirstContentfulPaintImmediate,
+        timing.first_contentful_paint);
+  }
+}
+
+void DocumentWritePageLoadMetricsObserver::LogDocumentWriteEvaluatorParseStop(
+    const page_load_metrics::PageLoadTiming& timing,
+    const page_load_metrics::PageLoadExtraInfo& info) {
+  base::TimeDelta parse_duration = timing.parse_stop - timing.parse_start;
+  if (WasStartedInForegroundEventInForeground(timing.parse_stop, info)) {
+    PAGE_LOAD_HISTOGRAM(internal::kHistogramDocWriteParseDurationImmediate,
+                        parse_duration);
+    PAGE_LOAD_HISTOGRAM(
+        internal::kHistogramDocWriteParseBlockedOnScriptImmediate,
+        timing.parse_blocked_on_script_load_duration);
+    PAGE_LOAD_HISTOGRAM(
+        internal::
+            kHistogramDocWriteParseBlockedOnScriptLoadDocumentWriteImmediate,
+        timing.parse_blocked_on_script_load_from_document_write_duration);
+  } else {
+    PAGE_LOAD_HISTOGRAM(
+        internal::kBackgroundHistogramDocWriteParseDurationImmediate,
+        parse_duration);
+    PAGE_LOAD_HISTOGRAM(
+        internal::kBackgroundHistogramDocWriteParseBlockedOnScriptImmediate,
+        timing.parse_blocked_on_script_load_duration);
+    PAGE_LOAD_HISTOGRAM(
+        internal::
+            kBackgroundHistogramDocWriteParseBlockedOnScriptLoadDocumentWriteImmediate,
+        timing.parse_blocked_on_script_load_from_document_write_duration);
   }
 }
 
@@ -162,6 +292,48 @@
   }
 }
 
+void DocumentWritePageLoadMetricsObserver::
+    LogDocumentWriteBlockFirstContentfulPaint(
+        const page_load_metrics::PageLoadTiming& timing,
+        const page_load_metrics::PageLoadExtraInfo& info) {
+  if (WasStartedInForegroundEventInForeground(timing.first_contentful_paint,
+                                              info)) {
+    PAGE_LOAD_HISTOGRAM(
+        internal::
+            kHistogramDocWriteBlockParseStartToFirstContentfulPaintImmediate,
+        timing.first_contentful_paint - timing.parse_start);
+  }
+}
+
+void DocumentWritePageLoadMetricsObserver::LogDocumentWriteBlockParseStop(
+    const page_load_metrics::PageLoadTiming& timing,
+    const page_load_metrics::PageLoadExtraInfo& info) {
+  base::TimeDelta parse_duration = timing.parse_stop - timing.parse_start;
+  if (WasStartedInForegroundEventInForeground(timing.parse_stop, info)) {
+    PAGE_LOAD_HISTOGRAM(internal::kHistogramDocWriteBlockParseDurationImmediate,
+                        parse_duration);
+    PAGE_LOAD_HISTOGRAM(
+        internal::kHistogramDocWriteBlockParseBlockedOnScriptImmediate,
+        timing.parse_blocked_on_script_load_duration);
+    PAGE_LOAD_HISTOGRAM(
+        internal::
+            kHistogramDocWriteBlockParseBlockedOnScriptLoadDocumentWriteImmediate,
+        timing.parse_blocked_on_script_load_from_document_write_duration);
+  } else {
+    PAGE_LOAD_HISTOGRAM(
+        internal::kBackgroundHistogramDocWriteBlockParseDurationImmediate,
+        parse_duration);
+    PAGE_LOAD_HISTOGRAM(
+        internal::
+            kBackgroundHistogramDocWriteBlockParseBlockedOnScriptImmediate,
+        timing.parse_blocked_on_script_load_duration);
+    PAGE_LOAD_HISTOGRAM(
+        internal::
+            kBackgroundDocWriteBlockParseBlockedOnScriptLoadDocumentWriteImmediate,
+        timing.parse_blocked_on_script_load_from_document_write_duration);
+  }
+}
+
 void DocumentWritePageLoadMetricsObserver::LogDocumentWriteBlockData(
     const page_load_metrics::PageLoadTiming& timing,
     const page_load_metrics::PageLoadExtraInfo& info) {
diff --git a/chrome/browser/page_load_metrics/observers/document_write_page_load_metrics_observer.h b/chrome/browser/page_load_metrics/observers/document_write_page_load_metrics_observer.h
index e39f9990..070cf4e 100644
--- a/chrome/browser/page_load_metrics/observers/document_write_page_load_metrics_observer.h
+++ b/chrome/browser/page_load_metrics/observers/document_write_page_load_metrics_observer.h
@@ -14,6 +14,9 @@
 extern const char kHistogramDocWriteParseStartToFirstContentfulPaint[];
 extern const char kHistogramDocWriteBlockParseStartToFirstContentfulPaint[];
 extern const char kHistogramDocWriteBlockReloadCount[];
+extern const char kHistogramDocWriteParseStartToFirstContentfulPaintImmediate[];
+extern const char
+    kHistogramDocWriteBlockParseStartToFirstContentfulPaintImmediate[];
 
 }  // namespace internal
 
@@ -26,6 +29,17 @@
       const page_load_metrics::PageLoadTiming& timing,
       const page_load_metrics::PageLoadExtraInfo& extra_info) override;
 
+  void OnFirstContentfulPaint(
+      const page_load_metrics::PageLoadTiming& timing,
+      const page_load_metrics::PageLoadExtraInfo& extra_info) override;
+
+  void OnParseStop(
+      const page_load_metrics::PageLoadTiming& timing,
+      const page_load_metrics::PageLoadExtraInfo& extra_info) override;
+
+  void OnLoadingBehaviorObserved(
+      const page_load_metrics::PageLoadExtraInfo& extra_info) override;
+
  private:
   void LogDocumentWriteEvaluatorData(
       const page_load_metrics::PageLoadTiming& timing,
@@ -35,6 +49,24 @@
       const page_load_metrics::PageLoadTiming& timing,
       const page_load_metrics::PageLoadExtraInfo& info);
 
+  void LogDocumentWriteEvaluatorFirstContentfulPaint(
+      const page_load_metrics::PageLoadTiming& timing,
+      const page_load_metrics::PageLoadExtraInfo& info);
+
+  void LogDocumentWriteEvaluatorParseStop(
+      const page_load_metrics::PageLoadTiming& timing,
+      const page_load_metrics::PageLoadExtraInfo& info);
+
+  void LogDocumentWriteBlockFirstContentfulPaint(
+      const page_load_metrics::PageLoadTiming& timing,
+      const page_load_metrics::PageLoadExtraInfo& info);
+
+  void LogDocumentWriteBlockParseStop(
+      const page_load_metrics::PageLoadTiming& timing,
+      const page_load_metrics::PageLoadExtraInfo& info);
+
+  bool doc_write_block_reload_observed_;
+
   DISALLOW_COPY_AND_ASSIGN(DocumentWritePageLoadMetricsObserver);
 };
 
diff --git a/chrome/browser/page_load_metrics/observers/document_write_page_load_metrics_observer_unittest.cc b/chrome/browser/page_load_metrics/observers/document_write_page_load_metrics_observer_unittest.cc
index ce89a17f..752ffaa 100644
--- a/chrome/browser/page_load_metrics/observers/document_write_page_load_metrics_observer_unittest.cc
+++ b/chrome/browser/page_load_metrics/observers/document_write_page_load_metrics_observer_unittest.cc
@@ -21,15 +21,30 @@
         internal::kHistogramDocWriteParseStartToFirstContentfulPaint, 0);
   }
 
+  void AssertNoPreloadImmediateHistogramsLogged() {
+    histogram_tester().ExpectTotalCount(
+        internal::kHistogramDocWriteParseStartToFirstContentfulPaintImmediate,
+        0);
+  }
+
   void AssertNoBlockHistogramsLogged() {
     histogram_tester().ExpectTotalCount(
         internal::kHistogramDocWriteBlockParseStartToFirstContentfulPaint, 0);
   }
+
+  void AssertNoBlockImmediateHistogramsLogged() {
+    histogram_tester().ExpectTotalCount(
+        internal::
+            kHistogramDocWriteBlockParseStartToFirstContentfulPaintImmediate,
+        0);
+  }
 };
 
 TEST_F(DocumentWritePageLoadMetricsObserverTest, NoMetrics) {
   AssertNoPreloadHistogramsLogged();
+  AssertNoPreloadImmediateHistogramsLogged();
   AssertNoBlockHistogramsLogged();
+  AssertNoBlockImmediateHistogramsLogged();
 }
 
 TEST_F(DocumentWritePageLoadMetricsObserverTest, PossiblePreload) {
@@ -46,6 +61,15 @@
   NavigateAndCommit(GURL("https://www.google.com"));
   SimulateTimingAndMetadataUpdate(timing, metadata);
 
+  // Verify that the immediate metrics get logged.
+  histogram_tester().ExpectTotalCount(
+      internal::kHistogramDocWriteParseStartToFirstContentfulPaintImmediate, 1);
+  histogram_tester().ExpectTotalCount(
+      internal::kHistogramDocWriteParseStartToFirstContentfulPaint, 0);
+  histogram_tester().ExpectBucketCount(
+      internal::kHistogramDocWriteParseStartToFirstContentfulPaintImmediate,
+      contentful_paint.InMilliseconds(), 1);
+
   NavigateAndCommit(GURL("https://www.example.com"));
 
   histogram_tester().ExpectTotalCount(
@@ -65,6 +89,7 @@
   page_load_metrics::PageLoadMetadata metadata;
   NavigateAndCommit(GURL("https://www.google.com"));
   SimulateTimingAndMetadataUpdate(timing, metadata);
+  AssertNoPreloadImmediateHistogramsLogged();
 
   NavigateAndCommit(GURL("https://www.example.com"));
   AssertNoPreloadHistogramsLogged();
@@ -84,10 +109,26 @@
   NavigateAndCommit(GURL("https://www.google.com"));
   SimulateTimingAndMetadataUpdate(timing, metadata);
 
+  // Verify that the immediate metrics get logged.
+  histogram_tester().ExpectTotalCount(
+      internal::
+          kHistogramDocWriteBlockParseStartToFirstContentfulPaintImmediate,
+      1);
+  histogram_tester().ExpectTotalCount(
+      internal::kHistogramDocWriteBlockParseStartToFirstContentfulPaint, 0);
+  histogram_tester().ExpectBucketCount(
+      internal::
+          kHistogramDocWriteBlockParseStartToFirstContentfulPaintImmediate,
+      contentful_paint.InMilliseconds(), 1);
+
   NavigateAndCommit(GURL("https://www.example.com"));
 
   histogram_tester().ExpectTotalCount(
       internal::kHistogramDocWriteBlockParseStartToFirstContentfulPaint, 1);
+  histogram_tester().ExpectTotalCount(
+      internal::
+          kHistogramDocWriteBlockParseStartToFirstContentfulPaintImmediate,
+      1);
   histogram_tester().ExpectBucketCount(
       internal::kHistogramDocWriteBlockParseStartToFirstContentfulPaint,
       contentful_paint.InMilliseconds(), 1);
@@ -107,18 +148,22 @@
   NavigateAndCommit(GURL("https://www.google.com"));
   SimulateTimingAndMetadataUpdate(timing, metadata);
 
-  NavigateAndCommit(GURL("https://www.example.com"));
-
   histogram_tester().ExpectTotalCount(
       internal::kHistogramDocWriteBlockReloadCount, 1);
 
   // Another reload.
-  NavigateAndCommit(GURL("https://www.google.com"));
-  SimulateTimingAndMetadataUpdate(timing, metadata);
   NavigateAndCommit(GURL("https://www.example.com"));
+  SimulateTimingAndMetadataUpdate(timing, metadata);
 
   histogram_tester().ExpectTotalCount(
       internal::kHistogramDocWriteBlockReloadCount, 2);
+
+  // Another metadata update should not increase reload count.
+  metadata.behavior_flags |=
+      blink::WebLoadingBehaviorFlag::WebLoadingBehaviorServiceWorkerControlled;
+  SimulateTimingAndMetadataUpdate(timing, metadata);
+  histogram_tester().ExpectTotalCount(
+      internal::kHistogramDocWriteBlockReloadCount, 2);
 }
 
 TEST_F(DocumentWritePageLoadMetricsObserverTest, NoPossibleBlock) {
@@ -131,6 +176,7 @@
   page_load_metrics::PageLoadMetadata metadata;
   NavigateAndCommit(GURL("https://www.google.com"));
   SimulateTimingAndMetadataUpdate(timing, metadata);
+  AssertNoBlockImmediateHistogramsLogged();
 
   NavigateAndCommit(GURL("https://www.example.com"));
   AssertNoBlockHistogramsLogged();
diff --git a/chrome/browser/page_load_metrics/page_load_metrics_browsertest.cc b/chrome/browser/page_load_metrics/page_load_metrics_browsertest.cc
index 711d340d..8596dbe 100644
--- a/chrome/browser/page_load_metrics/page_load_metrics_browsertest.cc
+++ b/chrome/browser/page_load_metrics/page_load_metrics_browsertest.cc
@@ -136,9 +136,6 @@
   histogram_tester_.ExpectTotalCount(
       internal::kHistogramDocWriteBlockParseStartToFirstContentfulPaint, 1);
 
-  histogram_tester_.ExpectTotalCount(
-      internal::kHistogramDocWriteBlockReloadCount, 1);
-
   ui_test_utils::NavigateToURL(browser(),
                                embedded_test_server()->GetURL("/title2.html"));
 
diff --git a/chrome/browser/profiles/profile_impl.cc b/chrome/browser/profiles/profile_impl.cc
index 2fa534d7..c859b1fe4 100644
--- a/chrome/browser/profiles/profile_impl.cc
+++ b/chrome/browser/profiles/profile_impl.cc
@@ -330,6 +330,20 @@
   registry->RegisterBooleanPref(prefs::kForceYouTubeSafetyMode, false);
   registry->RegisterBooleanPref(prefs::kForceSessionSync, false);
   registry->RegisterStringPref(prefs::kAllowedDomainsForApps, std::string());
+
+#if defined(OS_ANDROID)
+  // The following prefs don't need to be sync'd to mobile. This file isn't
+  // compiled on iOS so we only need to exclude them syncing from the Android
+  // build.
+  registry->RegisterIntegerPref(prefs::kProfileAvatarIndex, -1);
+  // Whether a profile is using an avatar without having explicitely chosen it
+  // (i.e. was assigned by default by legacy profile creation).
+  registry->RegisterBooleanPref(prefs::kProfileUsingDefaultAvatar, true);
+  registry->RegisterBooleanPref(prefs::kProfileUsingGAIAAvatar, false);
+  // Whether a profile is using a default avatar name (eg. Pickles or Person 1).
+  registry->RegisterBooleanPref(prefs::kProfileUsingDefaultName, true);
+  registry->RegisterStringPref(prefs::kProfileName, std::string());
+#else
   registry->RegisterIntegerPref(
       prefs::kProfileAvatarIndex,
       -1,
@@ -349,10 +363,12 @@
       prefs::kProfileUsingDefaultName,
       true,
       user_prefs::PrefRegistrySyncable::SYNCABLE_PREF);
-  registry->RegisterStringPref(prefs::kSupervisedUserId, std::string());
   registry->RegisterStringPref(prefs::kProfileName,
                                std::string(),
                                user_prefs::PrefRegistrySyncable::SYNCABLE_PREF);
+#endif
+
+  registry->RegisterStringPref(prefs::kSupervisedUserId, std::string());
   registry->RegisterStringPref(prefs::kHomePage,
                                std::string(),
                                user_prefs::PrefRegistrySyncable::SYNCABLE_PREF);
diff --git a/chrome/browser/profiles/profile_io_data.cc b/chrome/browser/profiles/profile_io_data.cc
index 5c4d65b..c057348 100644
--- a/chrome/browser/profiles/profile_io_data.cc
+++ b/chrome/browser/profiles/profile_io_data.cc
@@ -916,9 +916,8 @@
   data_reduction_proxy_io_data_ = std::move(data_reduction_proxy_io_data);
 }
 
-base::WeakPtr<net::HttpServerProperties>
-ProfileIOData::http_server_properties() const {
-  return http_server_properties_->GetWeakPtr();
+net::HttpServerProperties* ProfileIOData::http_server_properties() const {
+  return http_server_properties_.get();
 }
 
 void ProfileIOData::set_http_server_properties(
diff --git a/chrome/browser/profiles/profile_io_data.h b/chrome/browser/profiles/profile_io_data.h
index 5f7078d..bb157500 100644
--- a/chrome/browser/profiles/profile_io_data.h
+++ b/chrome/browser/profiles/profile_io_data.h
@@ -389,7 +389,7 @@
     return proxy_service_.get();
   }
 
-  base::WeakPtr<net::HttpServerProperties> http_server_properties() const;
+  net::HttpServerProperties* http_server_properties() const;
 
   void set_http_server_properties(
       std::unique_ptr<net::HttpServerProperties> http_server_properties) const;
diff --git a/chrome/browser/push_messaging/push_messaging_notification_manager.cc b/chrome/browser/push_messaging/push_messaging_notification_manager.cc
index 490ecaa..e80db64e 100644
--- a/chrome/browser/push_messaging/push_messaging_notification_manager.cc
+++ b/chrome/browser/push_messaging/push_messaging_notification_manager.cc
@@ -186,12 +186,24 @@
     }
   }
 
-  // Get the budget for the service worker. This will internally record UMA
-  // for budget development work in the future.
+  // Get the budget for the service worker.
   BackgroundBudgetService* service =
       BackgroundBudgetServiceFactory::GetForProfile(profile_);
-  double budget = service->GetBudget(origin);
+  service->GetBudget(
+      origin,
+      base::Bind(&PushMessagingNotificationManager::DidGetBudget,
+                 weak_factory_.GetWeakPtr(), origin,
+                 service_worker_registration_id, message_handled_closure,
+                 notification_needed, notification_shown));
+}
 
+void PushMessagingNotificationManager::DidGetBudget(
+    const GURL& origin,
+    int64_t service_worker_registration_id,
+    const base::Closure& message_handled_closure,
+    bool notification_needed,
+    bool notification_shown,
+    const double budget) {
   // Record the budget available any time the budget is queried.
   UMA_HISTOGRAM_COUNTS_100("PushMessaging.BackgroundBudget", budget);
 
@@ -275,14 +287,14 @@
   double cost = BackgroundBudgetService::GetCost(
       BackgroundBudgetService::CostType::SILENT_PUSH);
   if (budget >= cost) {
-    // Update the stored budget.
-    BackgroundBudgetService* service =
-        BackgroundBudgetServiceFactory::GetForProfile(profile_);
-    service->StoreBudget(origin, budget - cost);
-
     RecordUserVisibleStatus(
         content::PUSH_USER_VISIBLE_STATUS_REQUIRED_BUT_NOT_SHOWN_USED_GRACE);
-    message_handled_closure.Run();
+
+    BackgroundBudgetService* service =
+        BackgroundBudgetServiceFactory::GetForProfile(profile_);
+    // Update the stored budget.
+    service->StoreBudget(origin, budget - cost, message_handled_closure);
+
     return;
   }
 
diff --git a/chrome/browser/push_messaging/push_messaging_notification_manager.h b/chrome/browser/push_messaging/push_messaging_notification_manager.h
index 60a2edb7..6a5256b 100644
--- a/chrome/browser/push_messaging/push_messaging_notification_manager.h
+++ b/chrome/browser/push_messaging/push_messaging_notification_manager.h
@@ -93,6 +93,13 @@
       bool success,
       int64_t persistent_notification_id);
 
+  void DidGetBudget(const GURL& origin,
+                    int64_t service_worker_registration_id,
+                    const base::Closure& message_handled_closure,
+                    bool notification_needed,
+                    bool notification_shown,
+                    double budget);
+
   // Weak. This manager is owned by a keyed service on this profile.
   Profile* profile_;
 
diff --git a/chrome/browser/resources/chromeos/arc_support/icon/48.png b/chrome/browser/resources/chromeos/arc_support/icon/48.png
index a5b6fde..388c23ce 100644
--- a/chrome/browser/resources/chromeos/arc_support/icon/48.png
+++ b/chrome/browser/resources/chromeos/arc_support/icon/48.png
Binary files differ
diff --git a/chrome/browser/resources/chromeos/login/screen_gaia_signin.js b/chrome/browser/resources/chromeos/login/screen_gaia_signin.js
index 6920681..fb77708 100644
--- a/chrome/browser/resources/chromeos/login/screen_gaia_signin.js
+++ b/chrome/browser/resources/chromeos/login/screen_gaia_signin.js
@@ -557,6 +557,13 @@
      * @private
      */
     loadAuthExtension: function(data) {
+      // Redirect the webview to the blank page in order to stop the SAML IdP
+      // page from working in a background (see crbug.com/613245).
+      if (this.screenMode_ == ScreenMode.DEFAULT &&
+          data.screenMode != ScreenMode.DEFAULT) {
+        this.gaiaAuthHost_.resetWebview();
+      }
+
       this.screenMode = data.screenMode;
       this.email = '';
       this.authCompleted_ = false;
@@ -923,7 +930,7 @@
      */
     reset: function(takeFocus, forceOnline) {
       // Reload and show the sign-in UI if needed.
-      this.gaiaAuthHost_.resetStates_();
+      this.gaiaAuthHost_.resetStates();
       if (takeFocus) {
         if (!forceOnline && this.isOffline()) {
           // Show 'Cancel' button to allow user to return to the main screen
diff --git a/chrome/browser/resources/gaia_auth_host/authenticator.js b/chrome/browser/resources/gaia_auth_host/authenticator.js
index aa75f8a..f4e0e93 100644
--- a/chrome/browser/resources/gaia_auth_host/authenticator.js
+++ b/chrome/browser/resources/gaia_auth_host/authenticator.js
@@ -32,6 +32,7 @@
   var SERVICE_ID = 'chromeoslogin';
   var EMBEDDED_SETUP_CHROMEOS_ENDPOINT = 'embedded/setup/chromeos';
   var SAML_REDIRECTION_PATH = 'samlredirect';
+  var BLANK_PAGE_URL = 'about:blank';
 
   /**
    * The source URL parameter for the constrained signin flow.
@@ -196,7 +197,7 @@
    * Reinitializes authentication parameters so that a failed login attempt
    * would not result in an infinite loop.
    */
-  Authenticator.prototype.resetStates_ = function() {
+  Authenticator.prototype.resetStates = function() {
     this.isLoaded_ = false;
     this.email_ = null;
     this.gaiaId_ = null;
@@ -216,13 +217,21 @@
   };
 
   /**
+   * Resets the webview to the blank page.
+   */
+  Authenticator.prototype.resetWebview = function() {
+    if (this.webview_.src && this.webview_.src != BLANK_PAGE_URL)
+      this.webview_.src = BLANK_PAGE_URL;
+  };
+
+  /**
    * Loads the authenticator component with the given parameters.
    * @param {AuthMode} authMode Authorization mode.
    * @param {Object} data Parameters for the authorization flow.
    */
   Authenticator.prototype.load = function(authMode, data) {
     this.authMode = authMode;
-    this.resetStates_();
+    this.resetStates();
     // gaiaUrl parameter is used for testing. Once defined, it is never changed.
     this.idpOrigin_ = data.gaiaUrl || IDP_ORIGIN;
     this.continueUrl_ = data.continueUrl || CONTINUE_URL;
@@ -270,7 +279,7 @@
    * Reloads the authenticator component.
    */
   Authenticator.prototype.reload = function() {
-    this.resetStates_();
+    this.resetStates();
     this.webview_.src = this.reloadUrl_;
     this.isLoaded_ = true;
   };
@@ -703,7 +712,7 @@
             gapsCookie: this.newGapsCookie_ || this.gapsCookie_ || '',
           }
         }));
-    this.resetStates_();
+    this.resetStates();
   };
 
   /**
@@ -786,6 +795,8 @@
       this.fireReadyEvent_();
       // Focus webview after dispatching event when webview is already visible.
       this.webview_.focus();
+    } else if (currentUrl == BLANK_PAGE_URL) {
+      this.fireReadyEvent_();
     }
   };
 
diff --git a/chrome/browser/resources/settings/privacy_page/privacy_page.html b/chrome/browser/resources/settings/privacy_page/privacy_page.html
index 3373c22e..b6a3ee3 100644
--- a/chrome/browser/resources/settings/privacy_page/privacy_page.html
+++ b/chrome/browser/resources/settings/privacy_page/privacy_page.html
@@ -157,10 +157,16 @@
       <template is="dom-if" name="site-settings-category-cookies">
         <settings-subpage page-title="$i18n{siteSettingsCategoryCookies}">
           <site-settings-category
-              prefs="{{prefs}}"
               selected-site="{{selectedSite}}"
               current-route="{{currentRoute}}"
               category="{{ContentSettingsTypes.COOKIES}}">
+            <div class="settings-box cookie-controls">
+              <settings-checkbox class="start"
+                  label="$i18n{thirdPartyCookie}"
+                  sub-label="$i18n{thirdPartyCookieSublabel}"
+                  pref="{{prefs.profile.block_third_party_cookies}}">
+              </settings-checkbox>
+            </div>
           </site-settings-category>
         </settings-subpage>
       </template>
diff --git a/chrome/browser/resources/settings/site_settings/site_settings_category.html b/chrome/browser/resources/settings/site_settings/site_settings_category.html
index d94be549..13c970a 100644
--- a/chrome/browser/resources/settings/site_settings/site_settings_category.html
+++ b/chrome/browser/resources/settings/site_settings/site_settings_category.html
@@ -47,15 +47,7 @@
           on-change="onToggleChange_"></paper-toggle-button>
     </div>
 
-    <div id="cookieControls" hidden>
-      <div class="settings-box">
-        <settings-checkbox class="start"
-            label="$i18n{thirdPartyCookie}"
-            sub-label="$i18n{thirdPartyCookieSublabel}"
-            pref="{{prefs.profile.block_third_party_cookies}}">
-        </settings-checkbox>
-      </div>
-    </div>
+    <content select=".cookie-controls"></content>
 
     <settings-site-list
         category="[[category]]"
diff --git a/chrome/browser/resources/settings/site_settings/site_settings_category.js b/chrome/browser/resources/settings/site_settings/site_settings_category.js
index a01aa7f7..9012e4a 100644
--- a/chrome/browser/resources/settings/site_settings/site_settings_category.js
+++ b/chrome/browser/resources/settings/site_settings/site_settings_category.js
@@ -22,14 +22,6 @@
     },
 
     /**
-     * Preferences state.
-     */
-    prefs: {
-      type: Object,
-      notify: true,
-    },
-
-    /**
      * Represents the state of the main toggle shown for the category. For
      * example, the Location category can be set to Block/Ask so false, in that
      * case, represents Block and true represents Ask.
@@ -61,9 +53,6 @@
   ready: function() {
     this.addWebUIListener('contentSettingCategoryChanged',
         this.defaultValueForCategoryChanged_.bind(this));
-
-    if (this.category == settings.ContentSettingsTypes.COOKIES)
-      this.$.cookieControls.hidden = false;
   },
 
   /**
diff --git a/chrome/browser/themes/theme_properties.cc b/chrome/browser/themes/theme_properties.cc
index 770b3dd..ba17e76 100644
--- a/chrome/browser/themes/theme_properties.cc
+++ b/chrome/browser/themes/theme_properties.cc
@@ -92,6 +92,11 @@
 constexpr SkColor kDefaultColorBookmarkTextIncognito[] = {
     kDefaultColorBookmarkText, SK_ColorWHITE};
 
+const SkColor kDefaultColorBookmarkInstructionsText[] = {
+    SK_ColorBLACK, SkColorSetRGB(0x64, 0x64, 0x64)};
+const SkColor kDefaultColorBookmarkInstructionsTextIncognito[] = {
+    SK_ColorBLACK, SkColorSetARGB(0x8A, 0xFF, 0xFF, 0xFF)};
+
 #if defined(OS_WIN)
 const SkColor kDefaultColorNTPBackground =
     color_utils::GetSysSkColor(COLOR_WINDOW);
@@ -358,6 +363,9 @@
     // Properties not stored in theme pack.
     case COLOR_CONTROL_BACKGROUND:
       return kDefaultColorControlBackground;
+    case COLOR_BOOKMARK_BAR_INSTRUCTIONS_TEXT:
+      return otr ? kDefaultColorBookmarkInstructionsTextIncognito[mode]
+                 : kDefaultColorBookmarkInstructionsText[mode];
     case COLOR_TOOLBAR_BOTTOM_SEPARATOR:
     case COLOR_DETACHED_BOOKMARK_BAR_SEPARATOR:
       return otr ? kDefaultDetachedBookmarkBarSeparatorIncognito[mode]
diff --git a/chrome/browser/themes/theme_properties.h b/chrome/browser/themes/theme_properties.h
index 6b32347..83c719c 100644
--- a/chrome/browser/themes/theme_properties.h
+++ b/chrome/browser/themes/theme_properties.h
@@ -107,6 +107,9 @@
     // The color of a background tab, as well as the new tab button.
     COLOR_BACKGROUND_TAB,
 
+    // The color of the "instructions text" in an empty bookmarks bar.
+    COLOR_BOOKMARK_BAR_INSTRUCTIONS_TEXT,
+
     // Colors used for the detached (NTP) bookmark bar.
     COLOR_DETACHED_BOOKMARK_BAR_BACKGROUND,
     COLOR_DETACHED_BOOKMARK_BAR_SEPARATOR,
diff --git a/chrome/browser/themes/theme_service.cc b/chrome/browser/themes/theme_service.cc
index 149e9ef..64380f1 100644
--- a/chrome/browser/themes/theme_service.cc
+++ b/chrome/browser/themes/theme_service.cc
@@ -460,6 +460,10 @@
           GetColor(ThemeProperties::COLOR_TOOLBAR, incognito),
           incognito ? kTintIncognito : kTint);
     }
+    case ThemeProperties::COLOR_BOOKMARK_BAR_INSTRUCTIONS_TEXT:
+      if (UsingDefaultTheme())
+        break;
+      return GetColor(ThemeProperties::COLOR_BOOKMARK_TEXT, incognito);
     case ThemeProperties::COLOR_DETACHED_BOOKMARK_BAR_BACKGROUND:
       if (UsingDefaultTheme())
         break;
diff --git a/chrome/browser/ui/extensions/icon_with_badge_image_source.cc b/chrome/browser/ui/extensions/icon_with_badge_image_source.cc
index 7045c44..08ab72a 100644
--- a/chrome/browser/ui/extensions/icon_with_badge_image_source.cc
+++ b/chrome/browser/ui/extensions/icon_with_badge_image_source.cc
@@ -82,13 +82,12 @@
       // that don't have Arial.
       ResourceBundle& rb = ResourceBundle::GetSharedInstance();
       const gfx::Font& base_font = rb.GetFont(ResourceBundle::BaseFont);
-      typeface = sk_sp<SkTypeface>(SkTypeface::MakeFromName(
-          base_font.GetFontName().c_str(), SkFontStyle()));
+      typeface = SkTypeface::MakeFromName(base_font.GetFontName().c_str(),
+                                          SkFontStyle());
       DCHECK(typeface);
     }
 
-    text_paint->setTypeface(typeface.get());
-    // |text_paint| adds its own ref. Release the ref from CreateFontName.
+    text_paint->setTypeface(std::move(typeface));
   }
   return text_paint;
 }
diff --git a/chrome/browser/ui/views/bookmarks/bookmark_bar_instructions_view.cc b/chrome/browser/ui/views/bookmarks/bookmark_bar_instructions_view.cc
index 5fbdc49..7064073 100644
--- a/chrome/browser/ui/views/bookmarks/bookmark_bar_instructions_view.cc
+++ b/chrome/browser/ui/views/bookmarks/bookmark_bar_instructions_view.cc
@@ -123,8 +123,8 @@
   if (!theme_provider)
     return;
   updated_colors_ = true;
-  SkColor text_color =
-      theme_provider->GetColor(ThemeProperties::COLOR_BOOKMARK_TEXT);
+  SkColor text_color = theme_provider->GetColor(
+      ThemeProperties::COLOR_BOOKMARK_BAR_INSTRUCTIONS_TEXT);
   instructions_->SetEnabledColor(text_color);
   if (!import_link_)
     return;
diff --git a/chrome/browser/ui/views/bookmarks/bookmark_bar_view.cc b/chrome/browser/ui/views/bookmarks/bookmark_bar_view.cc
index f008bff..614710b 100644
--- a/chrome/browser/ui/views/bookmarks/bookmark_bar_view.cc
+++ b/chrome/browser/ui/views/bookmarks/bookmark_bar_view.cc
@@ -239,7 +239,7 @@
 
   std::unique_ptr<views::InkDropRipple> CreateInkDropRipple() const override {
     return base::WrapUnique(new views::FloodFillInkDropRipple(
-        CalculateInkDropBounds(size()), GetInkDropCenter(),
+        CalculateInkDropBounds(size()), GetInkDropCenterBasedOnLastEvent(),
         GetInkDropBaseColor()));
   }
 
@@ -336,7 +336,7 @@
 
   std::unique_ptr<views::InkDropRipple> CreateInkDropRipple() const override {
     return base::WrapUnique(new views::FloodFillInkDropRipple(
-        CalculateInkDropBounds(size()), GetInkDropCenter(),
+        CalculateInkDropBounds(size()), GetInkDropCenterBasedOnLastEvent(),
         GetInkDropBaseColor()));
   }
 
@@ -392,7 +392,7 @@
       // TODO(bruthig): The ACTION_PENDING triggering logic should be in
       // MenuButton::OnPressed() however there is a bug with the pressed state
       // logic in MenuButton. See http://crbug.com/567252.
-      AnimateInkDrop(views::InkDropState::ACTION_PENDING);
+      AnimateInkDrop(views::InkDropState::ACTION_PENDING, &event);
     }
     return MenuButton::OnMousePressed(event);
   }
diff --git a/chrome/browser/ui/views/download/download_item_view_md.cc b/chrome/browser/ui/views/download/download_item_view_md.cc
index 6b944ff..cdba586 100644
--- a/chrome/browser/ui/views/download/download_item_view_md.cc
+++ b/chrome/browser/ui/views/download/download_item_view_md.cc
@@ -161,7 +161,8 @@
 
   // Promoted visibility to public.
   void AnimateInkDrop(views::InkDropState state) {
-    BarControlButton::AnimateInkDrop(state);
+    // TODO(bruthig): Plumb in the proper Event.
+    BarControlButton::AnimateInkDrop(state, nullptr /* event */);
   }
 
  private:
@@ -409,7 +410,7 @@
   if (!starting_drag_) {
     starting_drag_ = true;
     drag_start_point_ = event.location();
-    AnimateInkDrop(views::InkDropState::HIDDEN);
+    AnimateInkDrop(views::InkDropState::HIDDEN, &event);
   }
   if (dragging_) {
     if (download()->GetState() == DownloadItem::COMPLETE) {
@@ -449,6 +450,7 @@
 
   if (event.key_code() == ui::VKEY_SPACE ||
       event.key_code() == ui::VKEY_RETURN) {
+    AnimateInkDrop(views::InkDropState::ACTION_TRIGGERED, nullptr /* &event */);
     // OpenDownload may delete this, so don't add any code after this line.
     OpenDownload();
     return true;
@@ -492,7 +494,7 @@
 std::unique_ptr<views::InkDropRipple> DownloadItemViewMd::CreateInkDropRipple()
     const {
   return base::WrapUnique(new views::FloodFillInkDropRipple(
-      GetLocalBounds(), GetLocalBounds().CenterPoint(),
+      GetLocalBounds(), GetInkDropCenterBasedOnLastEvent(),
       color_utils::DeriveDefaultIconColor(GetTextColor())));
 }
 
@@ -755,7 +757,6 @@
                            base::Time::Now() - creation_time_);
 
   UpdateAccessibleName();
-  AnimateInkDrop(views::InkDropState::ACTION_TRIGGERED);
 
   // Calling download()->OpenDownload may delete this, so this must be
   // the last thing we do.
@@ -855,7 +856,7 @@
   if (!active_event)
     return;
 
-  AnimateInkDrop(views::InkDropState::ACTION_PENDING);
+  AnimateInkDrop(views::InkDropState::ACTION_PENDING, &event);
 }
 
 void DownloadItemViewMd::HandleClickEvent(const ui::LocatedEvent& event,
@@ -867,6 +868,8 @@
   if (!active_event || IsShowingWarningDialog())
     return;
 
+  AnimateInkDrop(views::InkDropState::ACTION_TRIGGERED, &event);
+
   // OpenDownload may delete this, so don't add any code after this line.
   OpenDownload();
 }
diff --git a/chrome/browser/ui/views/location_bar/bubble_icon_view.cc b/chrome/browser/ui/views/location_bar/bubble_icon_view.cc
index aadea3e..c444502 100644
--- a/chrome/browser/ui/views/location_bar/bubble_icon_view.cc
+++ b/chrome/browser/ui/views/location_bar/bubble_icon_view.cc
@@ -75,7 +75,7 @@
   // If the bubble is showing then don't reshow it when the mouse is released.
   suppress_mouse_released_action_ = IsBubbleShowing();
   if (!suppress_mouse_released_action_ && event.IsOnlyLeftMouseButton())
-    AnimateInkDrop(views::InkDropState::ACTION_PENDING);
+    AnimateInkDrop(views::InkDropState::ACTION_PENDING, &event);
 
   // We want to show the bubble on mouse release; that is the standard behavior
   // for buttons.
@@ -95,8 +95,9 @@
     return;
 
   const bool activated = HitTestPoint(event.location());
-  AnimateInkDrop(activated ? views::InkDropState::ACTIVATED
-                           : views::InkDropState::HIDDEN);
+  AnimateInkDrop(
+      activated ? views::InkDropState::ACTIVATED : views::InkDropState::HIDDEN,
+      &event);
   if (activated)
     ExecuteCommand(EXECUTE_SOURCE_MOUSE);
   OnPressed(activated);
@@ -106,7 +107,7 @@
   if (event.key_code() != ui::VKEY_RETURN && event.key_code() != ui::VKEY_SPACE)
     return false;
 
-  AnimateInkDrop(views::InkDropState::ACTIVATED);
+  AnimateInkDrop(views::InkDropState::ACTIVATED, nullptr /* &event */);
   // As with CustomButton, return activates on key down and space activates on
   // key up.
   if (event.key_code() == ui::VKEY_RETURN)
@@ -161,7 +162,7 @@
 
 void BubbleIconView::OnGestureEvent(ui::GestureEvent* event) {
   if (event->type() == ui::ET_GESTURE_TAP) {
-    AnimateInkDrop(views::InkDropState::ACTIVATED);
+    AnimateInkDrop(views::InkDropState::ACTIVATED, event);
     ExecuteCommand(EXECUTE_SOURCE_GESTURE);
     event->SetHandled();
   }
@@ -175,7 +176,7 @@
                                                bool visible) {
   // |widget| is a bubble that has just got shown / hidden.
   if (!visible)
-    AnimateInkDrop(views::InkDropState::DEACTIVATED);
+    AnimateInkDrop(views::InkDropState::DEACTIVATED, nullptr /* event */);
 }
 
 void BubbleIconView::ExecuteCommand(ExecuteSource source) {
diff --git a/chrome/browser/ui/views/location_bar/content_setting_image_view.cc b/chrome/browser/ui/views/location_bar/content_setting_image_view.cc
index 751df94..f656918 100644
--- a/chrome/browser/ui/views/location_bar/content_setting_image_view.cc
+++ b/chrome/browser/ui/views/location_bar/content_setting_image_view.cc
@@ -14,6 +14,7 @@
 #include "ui/base/l10n/l10n_util.h"
 #include "ui/base/material_design/material_design_controller.h"
 #include "ui/base/theme_provider.h"
+#include "ui/events/event_utils.h"
 #include "ui/gfx/color_palette.h"
 #include "ui/gfx/color_utils.h"
 #include "ui/views/controls/image_view.h"
@@ -93,7 +94,7 @@
   // mechanism to show one after the other, but it doesn't seem important now.
   int string_id = content_setting_image_model_->explanatory_string_id();
   if (string_id && !label()->visible()) {
-    AnimateInkDrop(views::InkDropState::HIDDEN);
+    AnimateInkDrop(views::InkDropState::HIDDEN, nullptr /* event */);
     SetLabel(l10n_util::GetStringUTF16(string_id));
     label()->SetVisible(true);
     slide_animator_.Show();
@@ -116,7 +117,7 @@
   // If the bubble is showing then don't reshow it when the mouse is released.
   suppress_mouse_released_action_ = bubble_view_ != nullptr;
   if (!suppress_mouse_released_action_ && !label()->visible())
-    AnimateInkDrop(views::InkDropState::ACTION_PENDING);
+    AnimateInkDrop(views::InkDropState::ACTION_PENDING, &event);
 
   // We want to show the bubble on mouse release; that is the standard behavior
   // for buttons.
@@ -133,14 +134,14 @@
   }
   const bool activated = HitTestPoint(event.location());
   if (!label()->visible() && !activated)
-    AnimateInkDrop(views::InkDropState::HIDDEN);
+    AnimateInkDrop(views::InkDropState::HIDDEN, &event);
   if (activated)
-    OnActivate();
+    OnActivate(event);
 }
 
 void ContentSettingImageView::OnGestureEvent(ui::GestureEvent* event) {
   if (event->type() == ui::ET_GESTURE_TAP)
-    OnActivate();
+    OnActivate(*event);
   if ((event->type() == ui::ET_GESTURE_TAP) ||
       (event->type() == ui::ET_GESTURE_TAP_DOWN))
     event->SetHandled();
@@ -192,7 +193,7 @@
           slide_animator_.GetCurrentValue() > (1.0 - kOpenFraction));
 }
 
-bool ContentSettingImageView::OnActivate() {
+bool ContentSettingImageView::OnActivate(const ui::Event& event) {
   if (slide_animator_.is_animating()) {
     // If the user clicks while we're animating, the bubble arrow will be
     // pointing to the image, and if we allow the animation to keep running, the
@@ -227,7 +228,8 @@
     // the animation simply pauses and no other visible state change occurs, so
     // show the arrow in this case.
     if (ui::MaterialDesignController::IsModeMaterial() && !pause_animation_) {
-      AnimateInkDrop(views::InkDropState::ACTIVATED);
+      AnimateInkDrop(views::InkDropState::ACTIVATED,
+                     ui::LocatedEvent::FromIfValid(&event));
       bubble_view_->SetArrowPaintType(views::BubbleBorder::PAINT_TRANSPARENT);
     }
     bubble_widget->Show();
@@ -275,7 +277,7 @@
                                                         bool visible) {
   // |widget| is a bubble that has just got shown / hidden.
   if (!visible && !label()->visible())
-    AnimateInkDrop(views::InkDropState::DEACTIVATED);
+    AnimateInkDrop(views::InkDropState::DEACTIVATED, nullptr /* event */);
 }
 
 void ContentSettingImageView::UpdateImage() {
diff --git a/chrome/browser/ui/views/location_bar/content_setting_image_view.h b/chrome/browser/ui/views/location_bar/content_setting_image_view.h
index 7d66b91..7f8f33a 100644
--- a/chrome/browser/ui/views/location_bar/content_setting_image_view.h
+++ b/chrome/browser/ui/views/location_bar/content_setting_image_view.h
@@ -72,7 +72,7 @@
   bool ShouldShowBackground() const override;
   double WidthMultiplier() const override;
   bool IsShrinking() const override;
-  bool OnActivate() override;
+  bool OnActivate(const ui::Event& event) override;
 
   // gfx::AnimationDelegate:
   void AnimationEnded(const gfx::Animation* animation) override;
diff --git a/chrome/browser/ui/views/location_bar/icon_label_bubble_view.cc b/chrome/browser/ui/views/location_bar/icon_label_bubble_view.cc
index 06bf08f5..5835543 100644
--- a/chrome/browser/ui/views/location_bar/icon_label_bubble_view.cc
+++ b/chrome/browser/ui/views/location_bar/icon_label_bubble_view.cc
@@ -118,7 +118,7 @@
   return false;
 }
 
-bool IconLabelBubbleView::OnActivate() {
+bool IconLabelBubbleView::OnActivate(const ui::Event& event) {
   return false;
 }
 
@@ -129,13 +129,13 @@
 
 bool IconLabelBubbleView::OnKeyPressed(const ui::KeyEvent& event) {
   if (event.key_code() == ui::VKEY_RETURN)
-    return OnActivate();
+    return OnActivate(event);
   return false;
 }
 
 bool IconLabelBubbleView::OnKeyReleased(const ui::KeyEvent& event) {
   if (event.key_code() == ui::VKEY_SPACE)
-    return OnActivate();
+    return OnActivate(event);
   return false;
 }
 
diff --git a/chrome/browser/ui/views/location_bar/icon_label_bubble_view.h b/chrome/browser/ui/views/location_bar/icon_label_bubble_view.h
index f1404ec..7676039c 100644
--- a/chrome/browser/ui/views/location_bar/icon_label_bubble_view.h
+++ b/chrome/browser/ui/views/location_bar/icon_label_bubble_view.h
@@ -78,7 +78,7 @@
 
   // The view has been activated by a user gesture such as spacebar. Returns
   // true if some handling was performed.
-  virtual bool OnActivate();
+  virtual bool OnActivate(const ui::Event& event);
 
   // views::View:
   gfx::Size GetPreferredSize() const override;
diff --git a/chrome/browser/ui/views/location_bar/location_icon_view.cc b/chrome/browser/ui/views/location_bar/location_icon_view.cc
index c4c56c4..03382cc 100644
--- a/chrome/browser/ui/views/location_bar/location_icon_view.cc
+++ b/chrome/browser/ui/views/location_bar/location_icon_view.cc
@@ -109,7 +109,7 @@
 
 void LocationIconView::ProcessLocatedEvent(const ui::LocatedEvent& event) {
   if (HitTestPoint(event.location()))
-    OnActivate();
+    OnActivate(event);
 }
 
 gfx::Size LocationIconView::GetMinimumSize() const {
@@ -131,7 +131,7 @@
   return GetTextColor();
 }
 
-bool LocationIconView::OnActivate() {
+bool LocationIconView::OnActivate(const ui::Event& event) {
   WebContents* contents = location_bar_->GetWebContents();
   if (!contents)
     return false;
diff --git a/chrome/browser/ui/views/location_bar/location_icon_view.h b/chrome/browser/ui/views/location_bar/location_icon_view.h
index 0966a4f..f056a1c4 100644
--- a/chrome/browser/ui/views/location_bar/location_icon_view.h
+++ b/chrome/browser/ui/views/location_bar/location_icon_view.h
@@ -35,7 +35,7 @@
                       base::string16* tooltip) const override;
   SkColor GetTextColor() const override;
   SkColor GetBorderColor() const override;
-  bool OnActivate() override;
+  bool OnActivate(const ui::Event& event) override;
 
   // Whether we should show the tooltip for this icon or not.
   void set_show_tooltip(bool show_tooltip) { show_tooltip_ = show_tooltip; }
diff --git a/chrome/browser/ui/views/toolbar/toolbar_action_view.cc b/chrome/browser/ui/views/toolbar/toolbar_action_view.cc
index bb15ae8..9b6bd25 100644
--- a/chrome/browser/ui/views/toolbar/toolbar_action_view.cc
+++ b/chrome/browser/ui/views/toolbar/toolbar_action_view.cc
@@ -191,7 +191,7 @@
     // TODO(bruthig): The ACTION_PENDING triggering logic should be in
     // MenuButton::OnPressed() however there is a bug with the pressed state
     // logic in MenuButton. See http://crbug.com/567252.
-    AnimateInkDrop(views::InkDropState::ACTION_PENDING);
+    AnimateInkDrop(views::InkDropState::ACTION_PENDING, &event);
   }
   return MenuButton::OnMousePressed(event);
 }
diff --git a/chrome/browser/ui/views/toolbar/toolbar_button.cc b/chrome/browser/ui/views/toolbar/toolbar_button.cc
index b49a042b..58bd5f3 100644
--- a/chrome/browser/ui/views/toolbar/toolbar_button.cc
+++ b/chrome/browser/ui/views/toolbar/toolbar_button.cc
@@ -221,7 +221,7 @@
 
   menu_showing_ = true;
 
-  AnimateInkDrop(views::InkDropState::ACTIVATED);
+  AnimateInkDrop(views::InkDropState::ACTIVATED, nullptr /* event */);
 
   // Exit if the model is null.
   if (!model_.get())
@@ -241,7 +241,7 @@
 }
 
 void ToolbarButton::OnMenuClosed() {
-  AnimateInkDrop(views::InkDropState::DEACTIVATED);
+  AnimateInkDrop(views::InkDropState::DEACTIVATED, nullptr /* event */);
 
   menu_showing_ = false;
 
diff --git a/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc b/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc
index 2bd1259..e4ae4c2 100644
--- a/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc
+++ b/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc
@@ -256,14 +256,6 @@
       web_ui, service, dom_distiller::kDomDistillerScheme);
 }
 
-#if !defined(OS_ANDROID)
-template<>
-WebUIController* NewWebUI<settings::MdSettingsUI>(WebUI* web_ui,
-                                                  const GURL& url) {
-  return new settings::MdSettingsUI(web_ui, url);
-}
-#endif
-
 #if defined(ENABLE_EXTENSIONS)
 // Only create ExtensionWebUI for URLs that are allowed extension bindings,
 // hosted by actual tabs.
diff --git a/chrome/browser/ui/webui/settings/md_settings_ui.cc b/chrome/browser/ui/webui/settings/md_settings_ui.cc
index 0cf7732..b0b6876 100644
--- a/chrome/browser/ui/webui/settings/md_settings_ui.cc
+++ b/chrome/browser/ui/webui/settings/md_settings_ui.cc
@@ -53,7 +53,7 @@
 
 namespace settings {
 
-MdSettingsUI::MdSettingsUI(content::WebUI* web_ui, const GURL& url)
+MdSettingsUI::MdSettingsUI(content::WebUI* web_ui)
     : content::WebUIController(web_ui),
       WebContentsObserver(web_ui->GetWebContents()) {
   Profile* profile = Profile::FromWebUI(web_ui);
@@ -88,6 +88,11 @@
 
   // Host must be derived from the visible URL, since this might be serving
   // either chrome://settings or chrome://md-settings.
+  GURL url = web_ui->GetWebContents()->GetVisibleURL();
+
+  if (url.SchemeIs(content::kViewSourceScheme))
+    url = GURL(url.GetContent());
+
   CHECK(url.GetOrigin() == GURL(chrome::kChromeUISettingsURL).GetOrigin() ||
         url.GetOrigin() == GURL(chrome::kChromeUIMdSettingsURL).GetOrigin());
 
diff --git a/chrome/browser/ui/webui/settings/md_settings_ui.h b/chrome/browser/ui/webui/settings/md_settings_ui.h
index 6f49d40..8c48fae 100644
--- a/chrome/browser/ui/webui/settings/md_settings_ui.h
+++ b/chrome/browser/ui/webui/settings/md_settings_ui.h
@@ -12,8 +12,6 @@
 #include "content/public/browser/web_contents_observer.h"
 #include "content/public/browser/web_ui_controller.h"
 
-class GURL;
-
 namespace settings {
 
 class SettingsPageUIHandler;
@@ -22,7 +20,7 @@
 class MdSettingsUI : public content::WebUIController,
                      public content::WebContentsObserver {
  public:
-  MdSettingsUI(content::WebUI* web_ui, const GURL& url);
+  explicit MdSettingsUI(content::WebUI* web_ui);
   ~MdSettingsUI() override;
 
   // content::WebContentsObserver:
diff --git a/chrome/browser/ui/webui/settings/md_settings_ui_browsertest.cc b/chrome/browser/ui/webui/settings/md_settings_ui_browsertest.cc
index 1cbaa43..3407bfe 100644
--- a/chrome/browser/ui/webui/settings/md_settings_ui_browsertest.cc
+++ b/chrome/browser/ui/webui/settings/md_settings_ui_browsertest.cc
@@ -4,33 +4,16 @@
 
 #include <string>
 
-#include "chrome/browser/ui/browser.h"
-#include "chrome/browser/ui/browser_commands.h"
-#include "chrome/browser/ui/tabs/tab_strip_model.h"
 #include "chrome/common/url_constants.h"
 #include "chrome/test/base/in_process_browser_test.h"
 #include "chrome/test/base/ui_test_utils.h"
 #include "content/public/common/url_constants.h"
-#include "content/public/test/browser_test_utils.h"
-#include "ui/base/window_open_disposition.h"
 #include "url/gurl.h"
 
 typedef InProcessBrowserTest MdSettingsBrowserTest;
 
-using ui_test_utils::NavigateToURL;
-using content::WaitForLoadStop;
-
 IN_PROC_BROWSER_TEST_F(MdSettingsBrowserTest, ViewSourceDoesntCrash) {
-  NavigateToURL(browser(),
+  ui_test_utils::NavigateToURL(browser(),
       GURL(content::kViewSourceScheme + std::string(":") +
            chrome::kChromeUIMdSettingsURL));
 }
-
-IN_PROC_BROWSER_TEST_F(MdSettingsBrowserTest, BackForwardDoesntCrash) {
-  NavigateToURL(browser(), GURL(chrome::kChromeUIMdSettingsURL));
-
-  NavigateToURL(browser(), GURL(chrome::kChromeUINewTabURL));
-
-  chrome::GoBack(browser(), CURRENT_TAB);
-  WaitForLoadStop(browser()->tab_strip_model()->GetActiveWebContents());
-}
diff --git a/chrome/renderer/DEPS b/chrome/renderer/DEPS
index 2036a51..67577dc 100644
--- a/chrome/renderer/DEPS
+++ b/chrome/renderer/DEPS
@@ -19,6 +19,7 @@
   "+components/network_hints/renderer",
   "+components/page_load_metrics/renderer",
   "+components/password_manager/content/renderer",
+  "+components/password_manager/core/common",
   "+components/pdf/renderer",
   "+components/plugins/renderer",
   "+components/printing/common",
diff --git a/chrome/renderer/autofill/password_autofill_agent_browsertest.cc b/chrome/renderer/autofill/password_autofill_agent_browsertest.cc
index 2fa4a8e..0b0876ad 100644
--- a/chrome/renderer/autofill/password_autofill_agent_browsertest.cc
+++ b/chrome/renderer/autofill/password_autofill_agent_browsertest.cc
@@ -4,7 +4,7 @@
 
 #include <tuple>
 
-#include "base/command_line.h"
+#include "base/feature_list.h"
 #include "base/macros.h"
 #include "base/strings/string_util.h"
 #include "base/strings/utf_string_conversions.h"
@@ -17,10 +17,10 @@
 #include "components/autofill/content/renderer/test_password_autofill_agent.h"
 #include "components/autofill/content/renderer/test_password_generation_agent.h"
 #include "components/autofill/core/common/autofill_constants.h"
-#include "components/autofill/core/common/autofill_switches.h"
 #include "components/autofill/core/common/form_data.h"
 #include "components/autofill/core/common/form_field_data.h"
 #include "components/autofill/core/common/password_form_field_prediction_map.h"
+#include "components/password_manager/core/common/password_manager_features.h"
 #include "content/public/renderer/render_frame.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "third_party/WebKit/public/platform/WebString.h"
@@ -327,6 +327,14 @@
     ChromeRenderViewTest::TearDown();
   }
 
+  void SetFillOnAccountSelect() {
+    base::FeatureList::ClearInstanceForTesting();
+    std::unique_ptr<base::FeatureList> feature_list(new base::FeatureList);
+    feature_list->InitializeFromCommandLine(
+        password_manager::features::kFillOnAccountSelect.name, "");
+    base::FeatureList::SetInstance(std::move(feature_list));
+  }
+
   void UpdateOriginForHTML(const std::string& html) {
     std::string origin = "data:text/html;charset=utf-8," + html;
     fill_data_.origin = GURL(origin);
@@ -1290,8 +1298,7 @@
 // user clicks on the password field when FillOnAccountSelect is enabled.
 TEST_F(PasswordAutofillAgentTest,
        FillOnAccountSelectOnlyNoCredentialsOnPasswordClick) {
-  base::CommandLine::ForCurrentProcess()->AppendSwitch(
-      autofill::switches::kEnableFillOnAccountSelect);
+  SetFillOnAccountSelect();
 
   // Simulate the browser sending back the login info.
   SimulateOnShowInitialPasswordAccountSuggestions(fill_data_);
@@ -1320,8 +1327,7 @@
 // suggested.
 TEST_F(PasswordAutofillAgentTest,
        FillOnAccountSelectOnlyCredentialsOnPasswordClick) {
-  base::CommandLine::ForCurrentProcess()->AppendSwitch(
-      autofill::switches::kEnableFillOnAccountSelect);
+  SetFillOnAccountSelect();
 
   // Simulate the browser sending back the login info.
   SimulateOnShowInitialPasswordAccountSuggestions(fill_data_);
@@ -1570,8 +1576,7 @@
 }
 
 TEST_F(PasswordAutofillAgentTest, FillOnAccountSelectOnly) {
-  base::CommandLine::ForCurrentProcess()->AppendSwitch(
-      autofill::switches::kEnableFillOnAccountSelect);
+  SetFillOnAccountSelect();
 
   ClearUsernameAndPasswordFields();
 
@@ -1583,8 +1588,7 @@
 }
 
 TEST_F(PasswordAutofillAgentTest, FillOnAccountSelectOnlyReadonlyUsername) {
-  base::CommandLine::ForCurrentProcess()->AppendSwitch(
-      autofill::switches::kEnableFillOnAccountSelect);
+  SetFillOnAccountSelect();
 
   ClearUsernameAndPasswordFields();
 
@@ -1599,8 +1603,7 @@
 
 TEST_F(PasswordAutofillAgentTest,
        FillOnAccountSelectOnlyReadonlyNotPreferredUsername) {
-  base::CommandLine::ForCurrentProcess()->AppendSwitch(
-      autofill::switches::kEnableFillOnAccountSelect);
+  SetFillOnAccountSelect();
 
   ClearUsernameAndPasswordFields();
 
@@ -1614,8 +1617,7 @@
 }
 
 TEST_F(PasswordAutofillAgentTest, FillOnAccountSelectOnlyNoUsername) {
-  base::CommandLine::ForCurrentProcess()->AppendSwitch(
-      autofill::switches::kEnableFillOnAccountSelect);
+  SetFillOnAccountSelect();
 
   // Load a form with no username and update test data.
   LoadHTML(kVisibleFormWithNoUsernameHTML);
@@ -1739,8 +1741,7 @@
 // highlighted as autofillable (regression test for https://crbug.com/442564).
 TEST_F(PasswordAutofillAgentTest,
        FillOnAccountSelectOnlyReadonlyUnknownUsername) {
-  base::CommandLine::ForCurrentProcess()->AppendSwitch(
-      autofill::switches::kEnableFillOnAccountSelect);
+  SetFillOnAccountSelect();
 
   ClearUsernameAndPasswordFields();
 
diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn
index 4d6fc6af..add65b8 100644
--- a/chrome/test/BUILD.gn
+++ b/chrome/test/BUILD.gn
@@ -371,7 +371,6 @@
     data = [
       "data/",
       "//content/test/data/",
-      "//net/data/ssl/certificates/",
       "//net/tools/testserver/",
       "//ppapi/tests/test_case.html",
       "//ppapi/tests/test_case.html.mock-http-headers",
@@ -893,7 +892,6 @@
       "//content/test/data/",
       "//google_apis/test/",
       "//media/test/data/",
-      "//net/data/",
       "//net/tools/testserver/",
       "//ppapi/tests/test_case.html",
       "//ppapi/tests/test_case.html.mock-http-headers",
@@ -1744,7 +1742,6 @@
     "//components/test/data/",
     "//extensions/test/data/",
     "//google_apis/test/data/",
-    "//net/data/",
     "//net/tools/testserver/",
     "//third_party/accessibility-audit/axs_testing.js",
     "//third_party/chaijs/chai.js",
diff --git a/chrome_elf/BUILD.gn b/chrome_elf/BUILD.gn
index 8d859f0..eff18a09 100644
--- a/chrome_elf/BUILD.gn
+++ b/chrome_elf/BUILD.gn
@@ -26,9 +26,6 @@
 # in the world.
 shared_library("chrome_elf") {
   sources = [
-    "//chrome/app/chrome_crash_reporter_client_win.cc",
-    "//chrome/app/chrome_crash_reporter_client_win.h",
-    "//chrome/common/chrome_result_codes.h",
     "chrome_elf.def",
     "chrome_elf_main.cc",
     "chrome_elf_main.h",
@@ -39,12 +36,8 @@
     ":chrome_elf_manifest",
     ":chrome_elf_resources",
     ":common",
-    "//base",
     "//build/config/sanitizers:deps",
     "//chrome/install_static:install_static_util",
-    "//components/crash/content/app",
-    "//components/crash/core/common",
-    "//content/public/common:result_codes",
   ]
   configs += [ "//build/config/win:windowed" ]
   configs -= [ "//build/config/win:console" ]
diff --git a/chrome_elf/DEPS b/chrome_elf/DEPS
index 1166833..1f3de79e 100644
--- a/chrome_elf/DEPS
+++ b/chrome_elf/DEPS
@@ -1,7 +1,6 @@
 include_rules = [
   "+sandbox",
   "+breakpad/src/client",
-  "+chrome/app/chrome_crash_reporter_client_win.h",
   "+chrome/common/chrome_version.h",
   "+chrome/install_static/install_util.h"
 ]
diff --git a/chrome_elf/chrome_elf.gyp b/chrome_elf/chrome_elf.gyp
index 22e77b8..034476a 100644
--- a/chrome_elf/chrome_elf.gyp
+++ b/chrome_elf/chrome_elf.gyp
@@ -37,7 +37,6 @@
         'chrome_elf.def',
         'chrome_elf_main.cc',
         'chrome_elf_main.h',
-        '../chrome/app/chrome_crash_reporter_client_win.cc',
         '<(SHARED_INTERMEDIATE_DIR)/chrome_elf/chrome_elf_version.rc',
       ],
       'dependencies': [
@@ -45,8 +44,6 @@
         'chrome_elf_breakpad',
         'chrome_elf_resources',
         '../chrome/chrome.gyp:install_static_util',
-        '../components/components.gyp:crash_component',
-        '../components/components.gyp:crash_core_common',
       ],
       'msvs_settings': {
         'VCLinkerTool': {
diff --git a/chromecast/browser/url_request_context_factory.cc b/chromecast/browser/url_request_context_factory.cc
index d7948f90..e743412 100644
--- a/chromecast/browser/url_request_context_factory.cc
+++ b/chromecast/browser/url_request_context_factory.cc
@@ -290,7 +290,7 @@
   params->ssl_config_service = ssl_config_service_.get();
   params->transport_security_state = transport_security_state_.get();
   params->http_auth_handler_factory = http_auth_handler_factory_.get();
-  params->http_server_properties = http_server_properties_->GetWeakPtr();
+  params->http_server_properties = http_server_properties_.get();
   params->ignore_certificate_errors = ignore_certificate_errors;
   params->proxy_service = proxy_service_.get();
 }
@@ -316,8 +316,7 @@
       transport_security_state_.get());
   system_context->set_http_auth_handler_factory(
       http_auth_handler_factory_.get());
-  system_context->set_http_server_properties(
-      http_server_properties_->GetWeakPtr());
+  system_context->set_http_server_properties(http_server_properties_.get());
   system_context->set_http_transaction_factory(
       system_transaction_factory_.get());
   system_context->set_http_user_agent_settings(
@@ -383,8 +382,7 @@
   main_context->set_transport_security_state(transport_security_state_.get());
   main_context->set_http_auth_handler_factory(
       http_auth_handler_factory_.get());
-  main_context->set_http_server_properties(
-      http_server_properties_->GetWeakPtr());
+  main_context->set_http_server_properties(http_server_properties_.get());
   main_context->set_cookie_store(main_cookie_store_.get());
   main_context->set_http_user_agent_settings(
       http_user_agent_settings_.get());
diff --git a/chromeos/BUILD.gn b/chromeos/BUILD.gn
index 51ee789..9cdf567 100644
--- a/chromeos/BUILD.gn
+++ b/chromeos/BUILD.gn
@@ -179,7 +179,6 @@
 
   data = [
     "test/data/",
-    "//net/data/",
   ]
 }
 
diff --git a/components/autofill/core/common/autofill_switches.cc b/components/autofill/core/common/autofill_switches.cc
index b553a957..42276f8 100644
--- a/components/autofill/core/common/autofill_switches.cc
+++ b/components/autofill/core/common/autofill_switches.cc
@@ -12,10 +12,6 @@
 // credit card form.
 const char kDisableCreditCardScan[]         = "disable-credit-card-scan";
 
-// Disables the experiment for the password manager to only fill on account
-// selection, rather than autofilling on page load.
-const char kDisableFillOnAccountSelect[]    = "disable-fill-on-account-select";
-
 // Disables the experimental Full Form Autofill on iOS feature.
 const char kDisableFullFormAutofillIOS[]    = "disable-full-form-autofill-ios";
 
@@ -40,10 +36,6 @@
 // credit card form.
 const char kEnableCreditCardScan[]          = "enable-credit-card-scan";
 
-// Enables the experiment for the password manager to only fill on account
-// selection, rather than autofilling on page load, with highlighting of fields.
-const char kEnableFillOnAccountSelect[]     = "enable-fill-on-account-select";
-
 // Enables the experimental Full Form Autofill on iOS feature.
 const char kEnableFullFormAutofillIOS[]     = "enable-full-form-autofill-ios";
 
diff --git a/components/autofill/core/common/autofill_switches.h b/components/autofill/core/common/autofill_switches.h
index 4b9eb5e..75c7a93 100644
--- a/components/autofill/core/common/autofill_switches.h
+++ b/components/autofill/core/common/autofill_switches.h
@@ -13,15 +13,12 @@
 // All switches in alphabetical order. The switches should be documented
 // alongside the definition of their values in the .cc file.
 extern const char kDisableCreditCardScan[];
-extern const char kDisableFillOnAccountSelect[];
 extern const char kDisableFullFormAutofillIOS[];
 extern const char kDisableOfferStoreUnmaskedWalletCards[];
 extern const char kDisableOfferUploadCreditCards[];
 extern const char kDisablePasswordGeneration[];
 extern const char kDisableSingleClickAutofill[];
 extern const char kEnableCreditCardScan[];
-extern const char kEnableFillOnAccountSelect[];
-extern const char kEnableFillOnAccountSelectNoHighlighting[];
 extern const char kEnableFullFormAutofillIOS[];
 extern const char kEnableOfferStoreUnmaskedWalletCards[];
 extern const char kEnableOfferUploadCreditCards[];
diff --git a/components/bitmap_uploader/bitmap_uploader.cc b/components/bitmap_uploader/bitmap_uploader.cc
index 61e2266b..b79de43 100644
--- a/components/bitmap_uploader/bitmap_uploader.cc
+++ b/components/bitmap_uploader/bitmap_uploader.cc
@@ -80,7 +80,10 @@
   frame->resources.resize(0u);
 
   pass->quads.resize(0u);
-  pass->shared_quad_states.push_back(mojo::CreateDefaultSQS(bounds.size()));
+  // The SharedQuadState is owned by the SharedQuadStateList shared_quad_states.
+  cc::SharedQuadState* sqs =
+      pass->shared_quad_states.AllocateAndConstruct<cc::SharedQuadState>();
+  mojo::ConfigureSharedQuadState(bounds.size(), sqs);
 
   if (bitmap_.get()) {
     gpu::gles2::GLES2Interface* gl = gles2_context_->interface();
diff --git a/components/cronet/ios/cronet_environment.cc b/components/cronet/ios/cronet_environment.cc
index 96eacd2d..3ff9faa 100644
--- a/components/cronet/ios/cronet_environment.cc
+++ b/components/cronet/ios/cronet_environment.cc
@@ -274,8 +274,7 @@
   main_context_->set_transport_security_state(
       new net::TransportSecurityState());
   http_server_properties_.reset(new net::HttpServerPropertiesImpl());
-  main_context_->set_http_server_properties(
-      http_server_properties_->GetWeakPtr());
+  main_context_->set_http_server_properties(http_server_properties_.get());
 
   // TODO(rdsmith): Note that the ".release()" calls below are leaking
   // the objects in question; this should be fixed by having an object
diff --git a/components/data_reduction_proxy/core/browser/data_reduction_proxy_config_service_client.cc b/components/data_reduction_proxy/core/browser/data_reduction_proxy_config_service_client.cc
index a9edb9a..e652b5c 100644
--- a/components/data_reduction_proxy/core/browser/data_reduction_proxy_config_service_client.cc
+++ b/components/data_reduction_proxy/core/browser/data_reduction_proxy_config_service_client.cc
@@ -19,6 +19,7 @@
 #include "base/strings/string_number_conversions.h"
 #include "base/values.h"
 #include "components/data_reduction_proxy/core/browser/data_reduction_proxy_config.h"
+#include "components/data_reduction_proxy/core/browser/data_reduction_proxy_io_data.h"
 #include "components/data_reduction_proxy/core/browser/data_reduction_proxy_mutable_config_values.h"
 #include "components/data_reduction_proxy/core/browser/data_reduction_proxy_request_options.h"
 #include "components/data_reduction_proxy/core/common/data_reduction_proxy_event_creator.h"
@@ -143,6 +144,7 @@
     DataReductionProxyMutableConfigValues* config_values,
     DataReductionProxyConfig* config,
     DataReductionProxyEventCreator* event_creator,
+    DataReductionProxyIOData* io_data,
     net::NetLog* net_log,
     ConfigStorer config_storer)
     : params_(std::move(params)),
@@ -150,6 +152,7 @@
       config_values_(config_values),
       config_(config),
       event_creator_(event_creator),
+      io_data_(io_data),
       net_log_(net_log),
       config_storer_(config_storer),
       backoff_entry_(&backoff_policy),
@@ -167,6 +170,7 @@
   DCHECK(config_values);
   DCHECK(config);
   DCHECK(event_creator);
+  DCHECK(io_data);
   DCHECK(net_log);
   DCHECK(config_service_url_.is_valid());
   // Constructed on the UI thread, but should be checked on the IO thread.
@@ -386,6 +390,7 @@
   config_storer_.Run(std::string());
   request_options_->Invalidate();
   config_values_->Invalidate();
+  io_data_->SetPingbackReportingFraction(0.0f);
   config_->ReloadConfig();
 }
 
@@ -465,6 +470,15 @@
 bool DataReductionProxyConfigServiceClient::ParseAndApplyProxyConfig(
     const ClientConfig& config) {
   DCHECK(thread_checker_.CalledOnValidThread());
+  float reporting_fraction = 0.0f;
+  if (config.has_pageload_metrics_config() &&
+      config.pageload_metrics_config().has_reporting_fraction()) {
+    reporting_fraction = config.pageload_metrics_config().reporting_fraction();
+  }
+  DCHECK_LE(0.0f, reporting_fraction);
+  DCHECK_GE(1.0f, reporting_fraction);
+  io_data_->SetPingbackReportingFraction(reporting_fraction);
+
   if (!config.has_proxy_config())
     return false;
 
diff --git a/components/data_reduction_proxy/core/browser/data_reduction_proxy_config_service_client.h b/components/data_reduction_proxy/core/browser/data_reduction_proxy_config_service_client.h
index 351f9bae..7357c4b 100644
--- a/components/data_reduction_proxy/core/browser/data_reduction_proxy_config_service_client.h
+++ b/components/data_reduction_proxy/core/browser/data_reduction_proxy_config_service_client.h
@@ -41,6 +41,7 @@
 class ClientConfig;
 class DataReductionProxyConfig;
 class DataReductionProxyEventCreator;
+class DataReductionProxyIOData;
 class DataReductionProxyMutableConfigValues;
 class DataReductionProxyParams;
 class DataReductionProxyRequestOptions;
@@ -95,6 +96,7 @@
       DataReductionProxyMutableConfigValues* config_values,
       DataReductionProxyConfig* config,
       DataReductionProxyEventCreator* event_creator,
+      DataReductionProxyIOData* io_data,
       net::NetLog* net_log,
       ConfigStorer config_storer);
 
@@ -209,6 +211,9 @@
   // The caller must ensure that the |event_creator_| outlives this instance.
   DataReductionProxyEventCreator* event_creator_;
 
+  // The caller must ensure that the |io_data_| outlives this instance.
+  DataReductionProxyIOData* io_data_;
+
   // The caller must ensure that the |net_log_| outlives this instance.
   net::NetLog* net_log_;
 
diff --git a/components/data_reduction_proxy/core/browser/data_reduction_proxy_config_service_client_unittest.cc b/components/data_reduction_proxy/core/browser/data_reduction_proxy_config_service_client_unittest.cc
index 2f2060046..9724e89 100644
--- a/components/data_reduction_proxy/core/browser/data_reduction_proxy_config_service_client_unittest.cc
+++ b/components/data_reduction_proxy/core/browser/data_reduction_proxy_config_service_client_unittest.cc
@@ -83,12 +83,20 @@
                           int primary_port,
                           ProxyServer_ProxyScheme secondary_scheme,
                           const std::string& secondary_host,
-                          int secondary_port) {
+                          int secondary_port,
+                          float reporting_fraction) {
   ClientConfig config;
 
   config.set_session_key(session_key);
   config.mutable_refresh_duration()->set_seconds(expire_duration_seconds);
   config.mutable_refresh_duration()->set_nanos(expire_duration_nanoseconds);
+
+  // Leave the pageload_metrics_config empty when |reporting_fraction| is not
+  // inclusively between zero and one.
+  if (reporting_fraction >= 0.0f && reporting_fraction <= 1.0f) {
+    config.mutable_pageload_metrics_config()->set_reporting_fraction(
+        reporting_fraction);
+  }
   ProxyServer* primary_proxy =
       config.mutable_proxy_config()->add_http_proxy_servers();
   primary_proxy->set_scheme(primary_scheme);
@@ -165,22 +173,53 @@
     ClientConfig config =
         CreateConfig(kSuccessSessionKey, kConfigRefreshDurationSeconds, 0,
                      ProxyServer_ProxyScheme_HTTPS, "origin.net", 443,
-                     ProxyServer_ProxyScheme_HTTP, "fallback.net", 80);
+                     ProxyServer_ProxyScheme_HTTP, "fallback.net", 80, 0.5f);
     config.SerializeToString(&config_);
     encoded_config_ = EncodeConfig(config);
 
-    ClientConfig previous_config =
-        CreateConfig(kOldSuccessSessionKey, kConfigRefreshDurationSeconds, 0,
-                     ProxyServer_ProxyScheme_HTTPS, "old.origin.net", 443,
-                     ProxyServer_ProxyScheme_HTTP, "old.fallback.net", 80);
+    ClientConfig previous_config = CreateConfig(
+        kOldSuccessSessionKey, kConfigRefreshDurationSeconds, 0,
+        ProxyServer_ProxyScheme_HTTPS, "old.origin.net", 443,
+        ProxyServer_ProxyScheme_HTTP, "old.fallback.net", 80, 0.0f);
     previous_config.SerializeToString(&previous_config_);
 
     ClientConfig persisted =
         CreateConfig(kPersistedSessionKey, kConfigRefreshDurationSeconds, 0,
                      ProxyServer_ProxyScheme_HTTPS, "persisted.net", 443,
-                     ProxyServer_ProxyScheme_HTTP, "persisted.net", 80);
+                     ProxyServer_ProxyScheme_HTTP, "persisted.net", 80, 0.0f);
     loaded_config_ = EncodeConfig(persisted);
 
+    ClientConfig zero_reporting_fraction_config =
+        CreateConfig(kSuccessSessionKey, kConfigRefreshDurationSeconds, 0,
+                     ProxyServer_ProxyScheme_HTTPS, "origin.net", 443,
+                     ProxyServer_ProxyScheme_HTTP, "origin.net", 0, 0.0f);
+    zero_reporting_fraction_encoded_config_ =
+        EncodeConfig(zero_reporting_fraction_config);
+
+    ClientConfig one_reporting_fraction_config =
+        CreateConfig(kSuccessSessionKey, kConfigRefreshDurationSeconds, 0,
+                     ProxyServer_ProxyScheme_HTTPS, "", 443,
+                     ProxyServer_ProxyScheme_HTTP, "", 0, 1.0f);
+    one_reporting_fraction_encoded_config_ =
+        EncodeConfig(one_reporting_fraction_config);
+
+    // Passing in -1.0f as the reporting fraction causes the
+    // |empty_reporting_fraction_config| to have no pageload_metrics_config()
+    // set.
+    ClientConfig empty_reporting_fraction_config =
+        CreateConfig(kSuccessSessionKey, kConfigRefreshDurationSeconds, 0,
+                     ProxyServer_ProxyScheme_HTTPS, "origin.net", 443,
+                     ProxyServer_ProxyScheme_HTTP, "origin.net", 0, -1.0f);
+    empty_reporting_fraction_encoded_config_ =
+        EncodeConfig(empty_reporting_fraction_config);
+
+    ClientConfig half_reporting_fraction_config =
+        CreateConfig(kSuccessSessionKey, kConfigRefreshDurationSeconds, 0,
+                     ProxyServer_ProxyScheme_HTTPS, "origin.net", 443,
+                     ProxyServer_ProxyScheme_HTTP, "origin.net", 0, 0.5f);
+    half_reporting_fraction_encoded_config_ =
+        EncodeConfig(half_reporting_fraction_config);
+
     success_reads_[0] = net::MockRead("HTTP/1.1 200 OK\r\n\r\n");
     success_reads_[1] =
         net::MockRead(net::ASYNC, config_.c_str(), config_.length());
@@ -217,6 +256,7 @@
     EXPECT_EQ(kSuccessSessionKey, request_options()->GetSecureSession());
     // The config should be persisted on the pref.
     EXPECT_EQ(encoded_config(), persisted_config());
+    EXPECT_EQ(0.5f, pingback_reporting_fraction());
   }
 
   void VerifyRemoteSuccessWithOldConfig() {
@@ -261,6 +301,10 @@
     return test_context_->GetConfiguredProxiesForHttp();
   }
 
+  float pingback_reporting_fraction() const {
+    return test_context_->io_data()->pingback_reporting_fraction();
+  }
+
   void RunUntilIdle() {
     test_context_->RunUntilIdle();
   }
@@ -302,6 +346,18 @@
   const std::string& previous_success_response() const {
     return previous_config_;
   }
+  const std::string& empty_reporting_fraction_encoded_config() const {
+    return empty_reporting_fraction_encoded_config_;
+  }
+  const std::string& one_reporting_fraction_encoded_config() const {
+    return one_reporting_fraction_encoded_config_;
+  }
+  const std::string& zero_reporting_fraction_encoded_config() const {
+    return zero_reporting_fraction_encoded_config_;
+  }
+  const std::string& half_reporting_fraction_encoded_config() const {
+    return half_reporting_fraction_encoded_config_;
+  }
 
   bool IsTrustedSpdyProxy(const net::ProxyServer& proxy_server) const {
     return delegate_->IsTrustedSpdyProxy(proxy_server);
@@ -379,6 +435,18 @@
   // An encoded config that represents a previously saved configuration.
   std::string loaded_config_;
 
+  // A configuration where the pingback reporting fraction is not set.
+  std::string empty_reporting_fraction_encoded_config_;
+
+  // A configuration where the pingback reporting fraction is set to 1.0f.
+  std::string one_reporting_fraction_encoded_config_;
+
+  // A configuration where the pingback reporting fraction is set to 0.0f.
+  std::string zero_reporting_fraction_encoded_config_;
+
+  // A configuration where the pingback reporting fraction is set to 0.5f.
+  std::string half_reporting_fraction_encoded_config_;
+
   // Mock socket data.
   std::vector<std::unique_ptr<net::SocketDataProvider>> socket_data_providers_;
 
@@ -971,6 +1039,50 @@
   EXPECT_FALSE(request_options()->GetSecureSession().empty());
 }
 
+// Verifies that setting a client config sets the pingback reporting fraction
+// correctly to 0.0f.
+TEST_F(DataReductionProxyConfigServiceClientTest,
+       ApplySerializedConfigZeroReportingFraction) {
+  Init(true, false, std::string());
+  // ApplySerializedConfig should apply the encoded config.
+  config_client()->ApplySerializedConfig(
+      zero_reporting_fraction_encoded_config());
+  EXPECT_EQ(0.0f, pingback_reporting_fraction());
+}
+
+// Verifies that setting a client config sets the pingback reporting fraction
+// correctly to 0.0f when the pingback is not set in the protobuf.
+TEST_F(DataReductionProxyConfigServiceClientTest,
+       ApplySerializedConfigEmptyReportingFraction) {
+  Init(true, false, std::string());
+  // ApplySerializedConfig should apply the encoded config.
+  config_client()->ApplySerializedConfig(
+      empty_reporting_fraction_encoded_config());
+  EXPECT_EQ(0.0f, pingback_reporting_fraction());
+}
+
+// Verifies that setting a client config sets the pingback reporting fraction
+// correctly to 1.0f.
+TEST_F(DataReductionProxyConfigServiceClientTest,
+       ApplySerializedConfigOneReportingFraction) {
+  Init(true, false, std::string());
+  // ApplySerializedConfig should apply the encoded config.
+  config_client()->ApplySerializedConfig(
+      one_reporting_fraction_encoded_config());
+  EXPECT_EQ(1.0f, pingback_reporting_fraction());
+}
+
+// Verifies that setting a client config sets the pingback reporting fraction
+// correctly to 0.5f.
+TEST_F(DataReductionProxyConfigServiceClientTest,
+       ApplySerializedConfigHalfReportingFraction) {
+  Init(true, false, std::string());
+  // ApplySerializedConfig should apply the encoded config.
+  config_client()->ApplySerializedConfig(
+      half_reporting_fraction_encoded_config());
+  EXPECT_EQ(0.5f, pingback_reporting_fraction());
+}
+
 #if defined(OS_ANDROID)
 // Verifies the correctness of fetching config when Chromium is in background
 // and foreground.
diff --git a/components/data_reduction_proxy/core/browser/data_reduction_proxy_io_data.cc b/components/data_reduction_proxy/core/browser/data_reduction_proxy_io_data.cc
index e72f64b..b7207c2 100644
--- a/components/data_reduction_proxy/core/browser/data_reduction_proxy_io_data.cc
+++ b/components/data_reduction_proxy/core/browser/data_reduction_proxy_io_data.cc
@@ -145,7 +145,7 @@
     // caller is owned by |this|.
     config_client_.reset(new DataReductionProxyConfigServiceClient(
         std::move(params), GetBackoffPolicy(), request_options_.get(),
-        raw_mutable_config, config_.get(), event_creator_.get(), net_log_,
+        raw_mutable_config, config_.get(), event_creator_.get(), this, net_log_,
         base::Bind(&DataReductionProxyIOData::StoreSerializedConfig,
                    base::Unretained(this))));
   }
@@ -207,6 +207,15 @@
   return enabled_;
 }
 
+void DataReductionProxyIOData::SetPingbackReportingFraction(
+    float pingback_reporting_fraction) {
+  DCHECK(io_task_runner_->BelongsToCurrentThread());
+  ui_task_runner_->PostTask(
+      FROM_HERE,
+      base::Bind(&DataReductionProxyService::SetPingbackReportingFraction,
+                 service_, pingback_reporting_fraction));
+}
+
 std::unique_ptr<net::URLRequestInterceptor>
 DataReductionProxyIOData::CreateInterceptor() {
   DCHECK(io_task_runner_->BelongsToCurrentThread());
diff --git a/components/data_reduction_proxy/core/browser/data_reduction_proxy_io_data.h b/components/data_reduction_proxy/core/browser/data_reduction_proxy_io_data.h
index edd83e2..e53cd86f 100644
--- a/components/data_reduction_proxy/core/browser/data_reduction_proxy_io_data.h
+++ b/components/data_reduction_proxy/core/browser/data_reduction_proxy_io_data.h
@@ -121,6 +121,10 @@
   // Returns true if the Data Reduction Proxy is enabled and false otherwise.
   bool IsEnabled() const;
 
+  // Changes the reporting fraction for the pingback service to
+  // |pingback_reporting_fraction|. Overridden in testing.
+  virtual void SetPingbackReportingFraction(float pingback_reporting_fraction);
+
   // Various accessor methods.
   DataReductionProxyConfigurator* configurator() const {
     return configurator_.get();
diff --git a/components/data_reduction_proxy/core/browser/data_reduction_proxy_pingback_client.cc b/components/data_reduction_proxy/core/browser/data_reduction_proxy_pingback_client.cc
index 7d9c066..5079649 100644
--- a/components/data_reduction_proxy/core/browser/data_reduction_proxy_pingback_client.cc
+++ b/components/data_reduction_proxy/core/browser/data_reduction_proxy_pingback_client.cc
@@ -4,6 +4,7 @@
 
 #include "components/data_reduction_proxy/core/browser/data_reduction_proxy_pingback_client.h"
 
+#include "base/rand_util.h"
 #include "components/data_reduction_proxy/core/browser/data_reduction_proxy_data.h"
 #include "components/data_reduction_proxy/core/common/data_reduction_proxy_page_load_timing.h"
 #include "components/data_reduction_proxy/core/common/data_reduction_proxy_params.h"
@@ -65,7 +66,8 @@
 DataReductionProxyPingbackClient::DataReductionProxyPingbackClient(
     net::URLRequestContextGetter* url_request_context)
     : url_request_context_(url_request_context),
-      pingback_url_(util::AddApiKeyToUrl(params::GetPingbackURL())) {}
+      pingback_url_(util::AddApiKeyToUrl(params::GetPingbackURL())),
+      pingback_reporting_fraction_(0.0) {}
 
 DataReductionProxyPingbackClient::~DataReductionProxyPingbackClient() {
   DCHECK(thread_checker_.CalledOnValidThread());
@@ -116,9 +118,20 @@
 }
 
 bool DataReductionProxyPingbackClient::ShouldSendPingback() const {
-  // TODO(ryansturm): Modulate the frequency of sending a pingback based on a
-  // client config parameter. crbug.com/616805
-  return params::IsForcePingbackEnabledViaFlags();
+  return params::IsForcePingbackEnabledViaFlags() ||
+         GenerateRandomFloat() < pingback_reporting_fraction_;
+}
+
+float DataReductionProxyPingbackClient::GenerateRandomFloat() const {
+  return static_cast<float>(base::RandDouble());
+}
+
+void DataReductionProxyPingbackClient::SetPingbackReportingFraction(
+    float pingback_reporting_fraction) {
+  DCHECK(thread_checker_.CalledOnValidThread());
+  DCHECK_LE(0.0f, pingback_reporting_fraction);
+  DCHECK_GE(1.0f, pingback_reporting_fraction);
+  pingback_reporting_fraction_ = pingback_reporting_fraction;
 }
 
 }  // namespace data_reduction_proxy
diff --git a/components/data_reduction_proxy/core/browser/data_reduction_proxy_pingback_client.h b/components/data_reduction_proxy/core/browser/data_reduction_proxy_pingback_client.h
index 75d17719..7d9623c9 100644
--- a/components/data_reduction_proxy/core/browser/data_reduction_proxy_pingback_client.h
+++ b/components/data_reduction_proxy/core/browser/data_reduction_proxy_pingback_client.h
@@ -38,12 +38,20 @@
   virtual void SendPingback(const DataReductionProxyData& data,
                             const DataReductionProxyPageLoadTiming& timing);
 
+  // Sets the probability of actually sending a pingback to the server for any
+  // call to SendPingback.
+  void SetPingbackReportingFraction(float pingback_reporting_fraction);
+
+ protected:
+  // Generates a float in the range [0, 1). Virtualized in testing.
+  virtual float GenerateRandomFloat() const;
+
  private:
   // URLFetcherDelegate implmentation:
   void OnURLFetchComplete(const net::URLFetcher* source) override;
 
-  // Whether a pingback should be sent. Virtualized for testing.
-  virtual bool ShouldSendPingback() const;
+  // Whether a pingback should be sent.
+  bool ShouldSendPingback() const;
 
   // Creates an URLFetcher that will POST to |secure_proxy_url_| using
   // |url_request_context_|. The max retires is set to 5.
@@ -61,6 +69,9 @@
   // Serialized data to send to the data saver proxy server.
   std::list<std::string> data_to_send_;
 
+  // The probability of sending a pingback to the server.
+  float pingback_reporting_fraction_;
+
   base::ThreadChecker thread_checker_;
 
   DISALLOW_COPY_AND_ASSIGN(DataReductionProxyPingbackClient);
diff --git a/components/data_reduction_proxy/core/browser/data_reduction_proxy_pingback_client_unittest.cc b/components/data_reduction_proxy/core/browser/data_reduction_proxy_pingback_client_unittest.cc
index 1b93ac82..605b589d 100644
--- a/components/data_reduction_proxy/core/browser/data_reduction_proxy_pingback_client_unittest.cc
+++ b/components/data_reduction_proxy/core/browser/data_reduction_proxy_pingback_client_unittest.cc
@@ -7,11 +7,13 @@
 #include <memory>
 #include <string>
 
+#include "base/command_line.h"
 #include "base/memory/ptr_util.h"
 #include "base/message_loop/message_loop.h"
 #include "base/time/time.h"
 #include "components/data_reduction_proxy/core/browser/data_reduction_proxy_data.h"
 #include "components/data_reduction_proxy/core/common/data_reduction_proxy_page_load_timing.h"
+#include "components/data_reduction_proxy/core/common/data_reduction_proxy_switches.h"
 #include "components/data_reduction_proxy/core/common/data_reduction_proxy_util.h"
 #include "components/data_reduction_proxy/proto/client_config.pb.h"
 #include "components/data_reduction_proxy/proto/pageload_metrics.pb.h"
@@ -37,16 +39,23 @@
   TestDataReductionProxyPingbackClient(
       net::URLRequestContextGetter* url_request_context_getter)
       : DataReductionProxyPingbackClient(url_request_context_getter),
-        should_send_pingback_(false) {}
+        should_override_random_(false),
+        override_value_(0.0f) {}
 
-  void set_should_send_pingback(bool should_send_pingback) {
-    should_send_pingback_ = should_send_pingback;
+  void OverrideRandom(bool should_override_random, float override_value) {
+    should_override_random_ = should_override_random;
+    override_value_ = override_value;
   }
 
  private:
-  bool ShouldSendPingback() const override { return should_send_pingback_; }
+  float GenerateRandomFloat() const override {
+    if (should_override_random_)
+      return override_value_;
+    return DataReductionProxyPingbackClient::GenerateRandomFloat();
+  }
 
-  bool should_send_pingback_;
+  bool should_override_random_;
+  float override_value_;
 };
 
 class DataReductionProxyPingbackClientTest : public testing::Test {
@@ -93,7 +102,8 @@
 TEST_F(DataReductionProxyPingbackClientTest, VerifyPingbackContent) {
   Init();
   EXPECT_FALSE(factory()->GetFetcherByID(0));
-  pingback_client()->set_should_send_pingback(true);
+  pingback_client()->OverrideRandom(true, 0.5f);
+  pingback_client()->SetPingbackReportingFraction(1.0f);
   CreateAndSendPingback();
 
   net::TestURLFetcher* test_fetcher = factory()->GetFetcherByID(0);
@@ -125,7 +135,8 @@
 TEST_F(DataReductionProxyPingbackClientTest, SendTwoPingbacks) {
   Init();
   EXPECT_FALSE(factory()->GetFetcherByID(0));
-  pingback_client()->set_should_send_pingback(true);
+  pingback_client()->OverrideRandom(true, 0.5f);
+  pingback_client()->SetPingbackReportingFraction(1.0f);
   CreateAndSendPingback();
   CreateAndSendPingback();
 
@@ -140,9 +151,50 @@
 TEST_F(DataReductionProxyPingbackClientTest, NoPingbackSent) {
   Init();
   EXPECT_FALSE(factory()->GetFetcherByID(0));
-  pingback_client()->set_should_send_pingback(false);
+  pingback_client()->OverrideRandom(true, 0.5f);
+  pingback_client()->SetPingbackReportingFraction(0.0f);
   CreateAndSendPingback();
   EXPECT_FALSE(factory()->GetFetcherByID(0));
 }
 
+TEST_F(DataReductionProxyPingbackClientTest, VerifyReportingBehvaior) {
+  Init();
+  EXPECT_FALSE(factory()->GetFetcherByID(0));
+
+  // Verify that if the random number is less than the reporting fraction, the
+  // pingback is created.
+  pingback_client()->SetPingbackReportingFraction(0.5f);
+  pingback_client()->OverrideRandom(true, 0.4f);
+  CreateAndSendPingback();
+  net::TestURLFetcher* test_fetcher = factory()->GetFetcherByID(0);
+  EXPECT_TRUE(test_fetcher);
+  test_fetcher->delegate()->OnURLFetchComplete(test_fetcher);
+
+  // Verify that if the random number is greater than the reporting fraction,
+  // the pingback is not created.
+  pingback_client()->OverrideRandom(true, 0.6f);
+  CreateAndSendPingback();
+  test_fetcher = factory()->GetFetcherByID(0);
+  EXPECT_FALSE(test_fetcher);
+
+  // Verify that if the random number is equal to the reporting fraction, the
+  // pingback is not created. Specifically, if the reporting fraction is zero,
+  // and the random number is zero, no pingback is sent.
+  pingback_client()->SetPingbackReportingFraction(0.0f);
+  pingback_client()->OverrideRandom(true, 0.0f);
+  CreateAndSendPingback();
+  test_fetcher = factory()->GetFetcherByID(0);
+  EXPECT_FALSE(test_fetcher);
+
+  // Verify that the command line flag forces a pingback.
+  base::CommandLine::ForCurrentProcess()->AppendSwitch(
+      data_reduction_proxy::switches::kEnableDataReductionProxyForcePingback);
+  pingback_client()->SetPingbackReportingFraction(0.0f);
+  pingback_client()->OverrideRandom(true, 1.0f);
+  CreateAndSendPingback();
+  test_fetcher = factory()->GetFetcherByID(0);
+  EXPECT_TRUE(test_fetcher);
+  test_fetcher->delegate()->OnURLFetchComplete(test_fetcher);
+}
+
 }  // namespace data_reduction_proxy
diff --git a/components/data_reduction_proxy/core/browser/data_reduction_proxy_service.cc b/components/data_reduction_proxy/core/browser/data_reduction_proxy_service.cc
index 0ae4abcb..a0ca5ba 100644
--- a/components/data_reduction_proxy/core/browser/data_reduction_proxy_service.cc
+++ b/components/data_reduction_proxy/core/browser/data_reduction_proxy_service.cc
@@ -262,6 +262,12 @@
                             enabled, at_startup));
 }
 
+void DataReductionProxyService::SetPingbackReportingFraction(
+    float pingback_reporting_fraction) {
+  DCHECK(CalledOnValidThread());
+  pingback_client_->SetPingbackReportingFraction(pingback_reporting_fraction);
+}
+
 void DataReductionProxyService::LoadHistoricalDataUsage(
     const HistoricalDataUsageCallback& load_data_usage_callback) {
   std::unique_ptr<std::vector<DataUsageBucket>> data_usage(
diff --git a/components/data_reduction_proxy/core/browser/data_reduction_proxy_service.h b/components/data_reduction_proxy/core/browser/data_reduction_proxy_service.h
index 0e3d1b2..1f13bff 100644
--- a/components/data_reduction_proxy/core/browser/data_reduction_proxy_service.h
+++ b/components/data_reduction_proxy/core/browser/data_reduction_proxy_service.h
@@ -137,6 +137,9 @@
   void AddObserver(DataReductionProxyServiceObserver* observer);
   void RemoveObserver(DataReductionProxyServiceObserver* observer);
 
+  // Sets the reporting fraction in the pingback client.
+  void SetPingbackReportingFraction(float pingback_reporting_fraction);
+
   // Accessor methods.
   DataReductionProxyCompressionStats* compression_stats() const {
     return compression_stats_.get();
diff --git a/components/data_reduction_proxy/core/browser/data_reduction_proxy_test_utils.cc b/components/data_reduction_proxy/core/browser/data_reduction_proxy_test_utils.cc
index a9740dc..bef5d09 100644
--- a/components/data_reduction_proxy/core/browser/data_reduction_proxy_test_utils.cc
+++ b/components/data_reduction_proxy/core/browser/data_reduction_proxy_test_utils.cc
@@ -15,6 +15,7 @@
 #include "components/data_reduction_proxy/core/browser/data_reduction_proxy_config_test_utils.h"
 #include "components/data_reduction_proxy/core/browser/data_reduction_proxy_configurator.h"
 #include "components/data_reduction_proxy/core/browser/data_reduction_proxy_interceptor.h"
+#include "components/data_reduction_proxy/core/browser/data_reduction_proxy_io_data.h"
 #include "components/data_reduction_proxy/core/browser/data_reduction_proxy_mutable_config_values.h"
 #include "components/data_reduction_proxy/core/browser/data_reduction_proxy_network_delegate.h"
 #include "components/data_reduction_proxy/core/browser/data_reduction_proxy_prefs.h"
@@ -103,6 +104,7 @@
         DataReductionProxyMutableConfigValues* config_values,
         DataReductionProxyConfig* config,
         DataReductionProxyEventCreator* event_creator,
+        DataReductionProxyIOData* io_data,
         net::NetLog* net_log,
         ConfigStorer config_storer)
     : DataReductionProxyConfigServiceClient(std::move(params),
@@ -111,6 +113,7 @@
                                             config_values,
                                             config,
                                             event_creator,
+                                            io_data,
                                             net_log,
                                             config_storer),
 #if defined(OS_ANDROID)
@@ -217,17 +220,17 @@
     std::unique_ptr<DataReductionProxyEventCreator> event_creator,
     std::unique_ptr<DataReductionProxyRequestOptions> request_options,
     std::unique_ptr<DataReductionProxyConfigurator> configurator,
-    std::unique_ptr<DataReductionProxyConfigServiceClient> config_client,
     net::NetLog* net_log,
     bool enabled)
-    : DataReductionProxyIOData(), service_set_(false) {
+    : DataReductionProxyIOData(),
+      service_set_(false),
+      pingback_reporting_fraction_(0.0f) {
   io_task_runner_ = task_runner;
   ui_task_runner_ = task_runner;
   config_ = std::move(config);
   event_creator_ = std::move(event_creator);
   request_options_ = std::move(request_options);
   configurator_ = std::move(configurator);
-  config_client_ = std::move(config_client);
   net_log_ = net_log;
   bypass_stats_.reset(new DataReductionProxyBypassStats(
       config_.get(), base::Bind(&DataReductionProxyIOData::SetUnreachable,
@@ -238,6 +241,11 @@
 TestDataReductionProxyIOData::~TestDataReductionProxyIOData() {
 }
 
+void TestDataReductionProxyIOData::SetPingbackReportingFraction(
+    float pingback_reporting_fraction) {
+  pingback_reporting_fraction_ = pingback_reporting_fraction;
+}
+
 void TestDataReductionProxyIOData::SetDataReductionProxyService(
     base::WeakPtr<DataReductionProxyService> data_reduction_proxy_service) {
   if (!service_set_)
@@ -429,21 +437,6 @@
         new DataReductionProxyRequestOptions(client_, config.get()));
   }
 
-  if (use_test_config_client_) {
-    test_context_flags |= USE_TEST_CONFIG_CLIENT;
-    config_client.reset(new TestDataReductionProxyConfigServiceClient(
-        std::move(params), request_options.get(), raw_mutable_config,
-        config.get(), event_creator.get(), net_log.get(),
-        base::Bind(&TestConfigStorer::StoreSerializedConfig,
-                   base::Unretained(config_storer.get()))));
-  } else if (use_config_client_) {
-    config_client.reset(new DataReductionProxyConfigServiceClient(
-        std::move(params), GetBackoffPolicy(), request_options.get(),
-        raw_mutable_config, config.get(), event_creator.get(), net_log.get(),
-        base::Bind(&TestConfigStorer::StoreSerializedConfig,
-                   base::Unretained(config_storer.get()))));
-  }
-
   std::unique_ptr<DataReductionProxySettings> settings(
       new DataReductionProxySettings());
   if (skip_settings_initialization_) {
@@ -462,10 +455,27 @@
   std::unique_ptr<TestDataReductionProxyIOData> io_data(
       new TestDataReductionProxyIOData(
           task_runner, std::move(config), std::move(event_creator),
-          std::move(request_options), std::move(configurator),
-          std::move(config_client), net_log.get(), true /* enabled */));
+          std::move(request_options), std::move(configurator), net_log.get(),
+          true /* enabled */));
   io_data->SetSimpleURLRequestContextGetter(request_context_getter);
 
+  if (use_test_config_client_) {
+    test_context_flags |= USE_TEST_CONFIG_CLIENT;
+    config_client.reset(new TestDataReductionProxyConfigServiceClient(
+        std::move(params), io_data->request_options(), raw_mutable_config,
+        io_data->config(), io_data->event_creator(), io_data.get(),
+        net_log.get(), base::Bind(&TestConfigStorer::StoreSerializedConfig,
+                                  base::Unretained(config_storer.get()))));
+  } else if (use_config_client_) {
+    config_client.reset(new DataReductionProxyConfigServiceClient(
+        std::move(params), GetBackoffPolicy(), io_data->request_options(),
+        raw_mutable_config, io_data->config(), io_data->event_creator(),
+        io_data.get(), net_log.get(),
+        base::Bind(&TestConfigStorer::StoreSerializedConfig,
+                   base::Unretained(config_storer.get()))));
+  }
+  io_data->set_config_client(std::move(config_client));
+
   std::unique_ptr<DataReductionProxyTestContext> test_context(
       new DataReductionProxyTestContext(
           task_runner, std::move(pref_service), std::move(net_log),
diff --git a/components/data_reduction_proxy/core/browser/data_reduction_proxy_test_utils.h b/components/data_reduction_proxy/core/browser/data_reduction_proxy_test_utils.h
index 9cfe056..7c5e09c 100644
--- a/components/data_reduction_proxy/core/browser/data_reduction_proxy_test_utils.h
+++ b/components/data_reduction_proxy/core/browser/data_reduction_proxy_test_utils.h
@@ -103,6 +103,7 @@
       DataReductionProxyMutableConfigValues* config_values,
       DataReductionProxyConfig* config,
       DataReductionProxyEventCreator* event_creator,
+      DataReductionProxyIOData* io_data,
       net::NetLog* net_log,
       ConfigStorer config_storer);
 
@@ -192,7 +193,6 @@
       std::unique_ptr<DataReductionProxyEventCreator> event_creator,
       std::unique_ptr<DataReductionProxyRequestOptions> request_options,
       std::unique_ptr<DataReductionProxyConfigurator> configurator,
-      std::unique_ptr<DataReductionProxyConfigServiceClient> config_client,
       net::NetLog* net_log,
       bool enabled);
   ~TestDataReductionProxyIOData() override;
@@ -204,6 +204,10 @@
     return configurator_.get();
   }
 
+  void set_config_client(
+      std::unique_ptr<DataReductionProxyConfigServiceClient> config_client) {
+    config_client_ = std::move(config_client);
+  }
   DataReductionProxyConfigServiceClient* config_client() const {
     return config_client_.get();
   }
@@ -217,9 +221,19 @@
     return weak_factory_.GetWeakPtr();
   }
 
+  // Records the reporting fraction that was set by parsing a config.
+  void SetPingbackReportingFraction(float pingback_reporting_fraction) override;
+
+  float pingback_reporting_fraction() const {
+    return pingback_reporting_fraction_;
+  }
+
  private:
   // Allowed SetDataReductionProxyService to be re-entrant.
   bool service_set_;
+
+  // Reporting fraction last set via SetPingbackReportingFraction.
+  float pingback_reporting_fraction_;
 };
 
 // Test version of |DataStore|. Uses an in memory hash map to store data.
diff --git a/components/data_reduction_proxy/proto/client_config.proto b/components/data_reduction_proxy/proto/client_config.proto
index 7729bcdb..98cc093 100644
--- a/components/data_reduction_proxy/proto/client_config.proto
+++ b/components/data_reduction_proxy/proto/client_config.proto
@@ -25,6 +25,14 @@
   // for some time thereafter. If both refresh_duration and refresh_time are
   // present, refresh_duration should take priority.
   optional Duration refresh_duration = 4;
+  // Configuration information for reporting pageload metrics.
+  optional PageloadMetricsConfig pageload_metrics_config = 5;
+}
+
+// The configuration for reporting pageload metrics.
+message PageloadMetricsConfig {
+  // The fraction of pageloads for which to report pageload metrics.
+  optional float reporting_fraction = 1;
 }
 
 // N.B.:
diff --git a/components/image_fetcher/image_data_fetcher.cc b/components/image_fetcher/image_data_fetcher.cc
index 8be7dcb..0f91131 100644
--- a/components/image_fetcher/image_data_fetcher.cc
+++ b/components/image_fetcher/image_data_fetcher.cc
@@ -6,7 +6,6 @@
 
 #include "net/base/load_flags.h"
 #include "net/url_request/url_fetcher.h"
-#include "net/url_request/url_fetcher_delegate.h"
 #include "net/url_request/url_request.h"
 #include "net/url_request/url_request_context_getter.h"
 #include "net/url_request/url_request_status.h"
@@ -14,71 +13,23 @@
 
 namespace image_fetcher {
 
-// An active image URL fetcher request. The class contains any related request
-// state and logic for handling a single image url request.
-class ImageDataFetcher::ImageDataFetcherRequest
-    : public net::URLFetcherDelegate {
- public:
-  ImageDataFetcherRequest(const GURL& url,
-                          const ImageDataFetcherCallback& callback,
-                          ImageDataFetcher* image_url_fetcher);
-  ~ImageDataFetcherRequest() override {}
+// An active image URL fetcher request. The struct contains the related requests
+// state.
+struct ImageDataFetcher::ImageDataFetcherRequest {
+  ImageDataFetcherRequest(const ImageDataFetcherCallback& callback,
+                          std::unique_ptr<net::URLFetcher> url_fetcher)
+    : callback(callback),
+      url_fetcher(std::move(url_fetcher)) {}
 
-  // Sends the URL requests.
-  void Start(net::URLRequestContextGetter* request_context);
-
- private:
-  // Method inherited from URLFetcherDelegate
-  void OnURLFetchComplete(const net::URLFetcher* source) override;
-
-  // The URL of the image to fetch.
-  const GURL url_;
+  ~ImageDataFetcherRequest() {}
 
   // The callback to run after the image data was fetched. The callback will
   // be run even if the image data could not be fetched successfully.
-  ImageDataFetcherCallback callback_;
+  ImageDataFetcherCallback callback;
 
-  // The ImageDataFetcher that owns the ImageDataFetcherRequest.
-  ImageDataFetcher* image_url_fetcher_;
-
-  std::unique_ptr<net::URLFetcher> url_fetcher_;
-
-  DISALLOW_COPY_AND_ASSIGN(ImageDataFetcherRequest);
+  std::unique_ptr<net::URLFetcher> url_fetcher;
 };
 
-ImageDataFetcher::ImageDataFetcherRequest::ImageDataFetcherRequest(
-    const GURL& url,
-    const ImageDataFetcherCallback& callback,
-    ImageDataFetcher* image_url_fetcher)
-    : url_(url),
-      callback_(callback),
-      image_url_fetcher_(image_url_fetcher) {
-}
-
-void ImageDataFetcher::ImageDataFetcherRequest::Start(
-    net::URLRequestContextGetter* request_context) {
-  DCHECK(!url_fetcher_);
-
-  url_fetcher_ = net::URLFetcher::Create(url_, net::URLFetcher::GET, this);
-  url_fetcher_->SetRequestContext(request_context);
-  url_fetcher_->Start();
-}
-
-void ImageDataFetcher::ImageDataFetcherRequest::OnURLFetchComplete(
-    const net::URLFetcher* source) {
-  // An empty string is passed to the callback in case on an unsuccessfull URL
-  // request.
-  std::string image_data;
-  if (source->GetStatus().status() == net::URLRequestStatus::SUCCESS) {
-    source->GetResponseAsString(&image_data);
-  }
-  callback_.Run(image_data);
-
-  // Remove the completed ImageDataFetcherRequest from the internal request
-  // queue. This must be last in the method.
-  image_url_fetcher_->RemoveImageDataFetcherRequest(url_);
-}
-
 ImageDataFetcher::ImageDataFetcher(
     net::URLRequestContextGetter* url_request_context_getter)
     : url_request_context_getter_(url_request_context_getter) {}
@@ -87,15 +38,29 @@
 
 void ImageDataFetcher::FetchImageData(
     const GURL& url, const ImageDataFetcherCallback& callback) {
+  std::unique_ptr<net::URLFetcher> url_fetcher =
+      net::URLFetcher::Create(url, net::URLFetcher::GET, this);
+
   std::unique_ptr<ImageDataFetcherRequest> request(
-      new ImageDataFetcherRequest(url, callback, this));
-  request->Start(url_request_context_getter_.get());
-  pending_requests_[url] = std::move(request);
+      new ImageDataFetcherRequest(callback, std::move(url_fetcher)));
+  request->url_fetcher->SetRequestContext(url_request_context_getter_.get());
+  request->url_fetcher->Start();
+
+  pending_requests_[request->url_fetcher.get()] = std::move(request);
 }
 
-void ImageDataFetcher::RemoveImageDataFetcherRequest(const GURL& image_url) {
-  size_t count = pending_requests_.erase(image_url);
-  DCHECK(count);
+void ImageDataFetcher::OnURLFetchComplete(const net::URLFetcher* source) {
+  auto request_iter = pending_requests_.find(source);
+  DCHECK(request_iter != pending_requests_.end());
+
+  std::string image_data;
+  if (source->GetStatus().status() == net::URLRequestStatus::SUCCESS) {
+    source->GetResponseAsString(&image_data);
+  }
+  request_iter->second->callback.Run(image_data);
+
+  // Remove the finished request.
+  pending_requests_.erase(request_iter);
 }
 
 }  // namespace image_fetcher
diff --git a/components/image_fetcher/image_data_fetcher.h b/components/image_fetcher/image_data_fetcher.h
index c503db8..bd476ef 100644
--- a/components/image_fetcher/image_data_fetcher.h
+++ b/components/image_fetcher/image_data_fetcher.h
@@ -12,22 +12,24 @@
 #include "base/callback.h"
 #include "base/macros.h"
 #include "base/memory/ref_counted.h"
+#include "net/url_request/url_fetcher_delegate.h"
 #include "url/gurl.h"
 
 namespace net {
+class URLFetcher;
 class URLRequestContextGetter;
 }  // namespace net
 
 namespace image_fetcher {
 
-class ImageDataFetcher {
+class ImageDataFetcher : public net::URLFetcherDelegate {
  public:
   using ImageDataFetcherCallback =
       base::Callback<void(const std::string& image_data)>;
 
   explicit ImageDataFetcher(
       net::URLRequestContextGetter* url_request_context_getter);
-  ~ImageDataFetcher();
+  ~ImageDataFetcher() override;
 
   // Fetches the raw image bytes from the given |image_url| and calls the given
   // |callback|. The callback is run even if fetching the URL fails. In case
@@ -36,14 +38,13 @@
                       const ImageDataFetcherCallback& callback);
 
  private:
-  class ImageDataFetcherRequest;
+  struct ImageDataFetcherRequest;
 
-  // Removes the ImageDataFetcherRequest for the given |image_url| from the
-  // internal request queue.
-  void RemoveImageDataFetcherRequest(const GURL& image_url);
+  // Method inherited from URLFetcherDelegate
+  void OnURLFetchComplete(const net::URLFetcher* source) override;
 
   // All active image url requests.
-  std::map<const GURL, std::unique_ptr<ImageDataFetcherRequest>>
+  std::map<const net::URLFetcher*, std::unique_ptr<ImageDataFetcherRequest>>
       pending_requests_;
 
   scoped_refptr<net::URLRequestContextGetter> url_request_context_getter_;
diff --git a/components/mus/public/cpp/surfaces/surfaces_type_converters.cc b/components/mus/public/cpp/surfaces/surfaces_type_converters.cc
index 3ec9198..e869ba6 100644
--- a/components/mus/public/cpp/surfaces/surfaces_type_converters.cc
+++ b/components/mus/public/cpp/surfaces/surfaces_type_converters.cc
@@ -307,8 +307,6 @@
   pass->transform_to_root_target = input.transform_to_root_target;
   pass->has_transparent_background = input.has_transparent_background;
   Array<DrawQuadPtr> quads(input.quad_list.size());
-  Array<cc::SharedQuadState> shared_quad_state(
-      input.shared_quad_state_list.size());
   const cc::SharedQuadState* last_sqs = nullptr;
   cc::SharedQuadStateList::ConstIterator next_sqs_iter =
       input.shared_quad_state_list.begin();
@@ -317,7 +315,7 @@
     const cc::DrawQuad& quad = **iter;
     quads[iter.index()] = DrawQuad::From(quad);
     if (quad.shared_quad_state != last_sqs) {
-      shared_quad_state[next_sqs_iter.index()] = **next_sqs_iter;
+      pass->shared_quad_states.AllocateAndCopyFrom(*next_sqs_iter);
       last_sqs = *next_sqs_iter;
       ++next_sqs_iter;
     }
@@ -326,9 +324,8 @@
         static_cast<uint32_t>(next_sqs_iter.index() - 1);
   }
   // We should copy all shared quad states.
-  DCHECK_EQ(next_sqs_iter.index(), shared_quad_state.size());
+  DCHECK_EQ(next_sqs_iter.index(), pass->shared_quad_states.size());
   pass->quads = std::move(quads);
-  pass->shared_quad_states = std::move(shared_quad_state);
   return pass;
 }
 
@@ -341,10 +338,7 @@
   pass->SetAll(input->id, input->output_rect, input->damage_rect,
                input->transform_to_root_target,
                input->has_transparent_background);
-  for (size_t i = 0; i < input->shared_quad_states.size(); ++i) {
-    cc::SharedQuadState* state = pass->CreateAndAppendSharedQuadState();
-    *state = input->shared_quad_states[i];
-  }
+  pass->shared_quad_state_list = std::move(input->shared_quad_states);
   cc::SharedQuadStateList::Iterator sqs_iter =
       pass->shared_quad_state_list.begin();
   for (size_t i = 0; i < input->quads.size(); ++i) {
diff --git a/components/mus/public/cpp/surfaces/surfaces_utils.cc b/components/mus/public/cpp/surfaces/surfaces_utils.cc
index 297902a..d0e7ca6 100644
--- a/components/mus/public/cpp/surfaces/surfaces_utils.cc
+++ b/components/mus/public/cpp/surfaces/surfaces_utils.cc
@@ -13,16 +13,14 @@
 
 namespace mojo {
 
-cc::SharedQuadState CreateDefaultSQS(const gfx::Size& size) {
-  cc::SharedQuadState sqs;
-  sqs.quad_layer_bounds = size;
-  sqs.visible_quad_layer_rect = gfx::Rect(size);
-  sqs.clip_rect = gfx::Rect(size);
-  sqs.is_clipped = false;
-  sqs.opacity = 1.f;
-  sqs.blend_mode = SkXfermode::kSrc_Mode;
-  sqs.sorting_context_id = 0;
-  return sqs;
+void ConfigureSharedQuadState(const gfx::Size& size, cc::SharedQuadState* out) {
+  out->quad_layer_bounds = size;
+  out->visible_quad_layer_rect = gfx::Rect(size);
+  out->clip_rect = gfx::Rect(size);
+  out->is_clipped = false;
+  out->opacity = 1.f;
+  out->blend_mode = SkXfermode::kSrc_Mode;
+  out->sorting_context_id = 0;
 }
 
 RenderPassPtr CreateDefaultPass(int id, const gfx::Rect& rect) {
diff --git a/components/mus/public/cpp/surfaces/surfaces_utils.h b/components/mus/public/cpp/surfaces/surfaces_utils.h
index 24a259d..63164839 100644
--- a/components/mus/public/cpp/surfaces/surfaces_utils.h
+++ b/components/mus/public/cpp/surfaces/surfaces_utils.h
@@ -19,8 +19,9 @@
 
 namespace mojo {
 
-MOJO_SURFACES_EXPORT cc::SharedQuadState CreateDefaultSQS(
-    const gfx::Size& size);
+// Initializes the SharedQuadState |out| to a visible quad rect of |size|.
+MOJO_SURFACES_EXPORT void ConfigureSharedQuadState(const gfx::Size& size,
+                                                   cc::SharedQuadState* out);
 
 // Constructs a pass with the given id, output_rect and damage_rect set to rect,
 // transform_to_root_target set to identity and has_transparent_background set
diff --git a/components/mus/public/cpp/surfaces/tests/surface_unittest.cc b/components/mus/public/cpp/surfaces/tests/surface_unittest.cc
index cdf539f..aa5ed1c2 100644
--- a/components/mus/public/cpp/surfaces/tests/surface_unittest.cc
+++ b/components/mus/public/cpp/surfaces/tests/surface_unittest.cc
@@ -152,7 +152,7 @@
   mus_pass->id.layer_id = 1;
   mus_pass->id.index = 1u;
   mus_pass->quads.push_back(std::move(mus_texture_quad));
-  mus_pass->shared_quad_states.push_back(cc::SharedQuadState());
+  mus_pass->shared_quad_states.AllocateAndConstruct<cc::SharedQuadState>();
 
   std::unique_ptr<cc::RenderPass> pass =
       mus_pass.To<std::unique_ptr<cc::RenderPass>>();
diff --git a/components/ntp_snippets/ntp_snippets_database_unittest.cc b/components/ntp_snippets/ntp_snippets_database_unittest.cc
index 5a7cf570..1640d43e 100644
--- a/components/ntp_snippets/ntp_snippets_database_unittest.cc
+++ b/components/ntp_snippets/ntp_snippets_database_unittest.cc
@@ -83,10 +83,11 @@
   void OnSnippetsLoaded(NTPSnippet::PtrVector snippets) {
     OnSnippetsLoadedImpl(snippets);
   }
-
   MOCK_METHOD1(OnSnippetsLoadedImpl,
                void(const NTPSnippet::PtrVector& snippets));
 
+  MOCK_METHOD1(OnImageLoaded, void(std::string));
+
  private:
   base::MessageLoop message_loop_;
   base::ScopedTempDir database_dir_;
@@ -109,10 +110,15 @@
   CreateDatabase();
   EXPECT_FALSE(db()->IsInitialized());
 
+  // Start a snippet and image load before the DB is initialized.
   db()->LoadSnippets(base::Bind(&NTPSnippetsDatabaseTest::OnSnippetsLoaded,
                                 base::Unretained(this)));
+  db()->LoadImage("id", base::Bind(&NTPSnippetsDatabaseTest::OnImageLoaded,
+                                   base::Unretained(this)));
 
+  // They should be serviced once initialization finishes.
   EXPECT_CALL(*this, OnSnippetsLoadedImpl(_));
+  EXPECT_CALL(*this, OnImageLoaded(_));
   base::RunLoop().RunUntilIdle();
   EXPECT_TRUE(db()->IsInitialized());
 }
@@ -127,10 +133,12 @@
 
   Mock::VerifyAndClearExpectations(this);
 
+  EXPECT_CALL(*this, OnSnippetsLoadedImpl(_));
   db()->LoadSnippets(base::Bind(&NTPSnippetsDatabaseTest::OnSnippetsLoaded,
                                 base::Unretained(this)));
-
-  EXPECT_CALL(*this, OnSnippetsLoadedImpl(_));
+  EXPECT_CALL(*this, OnImageLoaded(_));
+  db()->LoadImage("id", base::Bind(&NTPSnippetsDatabaseTest::OnImageLoaded,
+                                   base::Unretained(this)));
   base::RunLoop().RunUntilIdle();
 }
 
@@ -140,27 +148,52 @@
   ASSERT_TRUE(db()->IsInitialized());
 
   std::unique_ptr<NTPSnippet> snippet = CreateTestSnippet();
+  std::string image_data("pretty image");
 
+  // Store a snippet and an image.
   db()->SaveSnippet(*snippet);
-  base::RunLoop().RunUntilIdle();
+  db()->SaveImage(snippet->id(), image_data);
 
-  db()->LoadSnippets(base::Bind(&NTPSnippetsDatabaseTest::OnSnippetsLoaded,
-                                base::Unretained(this)));
-
+  // Make sure they're there.
   EXPECT_CALL(*this,
               OnSnippetsLoadedImpl(ElementsAre(SnippetEq(snippet.get()))));
+  db()->LoadSnippets(base::Bind(&NTPSnippetsDatabaseTest::OnSnippetsLoaded,
+                                base::Unretained(this)));
   base::RunLoop().RunUntilIdle();
 
   Mock::VerifyAndClearExpectations(this);
 
-  // The snippet should still exist after recreating the database.
-  CreateDatabase();
+  EXPECT_CALL(*this, OnImageLoaded(image_data));
+  db()->LoadImage(snippet->id(),
+                  base::Bind(&NTPSnippetsDatabaseTest::OnImageLoaded,
+                             base::Unretained(this)));
+  base::RunLoop().RunUntilIdle();
+}
 
-  db()->LoadSnippets(base::Bind(&NTPSnippetsDatabaseTest::OnSnippetsLoaded,
-                                base::Unretained(this)));
+TEST_F(NTPSnippetsDatabaseTest, SavePersist) {
+  CreateDatabase();
+  base::RunLoop().RunUntilIdle();
+  ASSERT_TRUE(db()->IsInitialized());
+
+  std::unique_ptr<NTPSnippet> snippet = CreateTestSnippet();
+  std::string image_data("pretty image");
+
+  // Store a snippet and an image.
+  db()->SaveSnippet(*snippet);
+  db()->SaveImage(snippet->id(), image_data);
+  base::RunLoop().RunUntilIdle();
+
+  // They should still exist after recreating the database.
+  CreateDatabase();
 
   EXPECT_CALL(*this,
               OnSnippetsLoadedImpl(ElementsAre(SnippetEq(snippet.get()))));
+  db()->LoadSnippets(base::Bind(&NTPSnippetsDatabaseTest::OnSnippetsLoaded,
+                                base::Unretained(this)));
+  EXPECT_CALL(*this, OnImageLoaded(image_data));
+  db()->LoadImage(snippet->id(),
+                  base::Bind(&NTPSnippetsDatabaseTest::OnImageLoaded,
+                             base::Unretained(this)));
   base::RunLoop().RunUntilIdle();
 }
 
@@ -171,20 +204,19 @@
 
   std::unique_ptr<NTPSnippet> snippet = CreateTestSnippet();
 
+  // Store a snippet.
   db()->SaveSnippet(*snippet);
-  base::RunLoop().RunUntilIdle();
 
+  // Change it.
   const std::string text("some text");
   snippet->set_snippet(text);
-
   db()->SaveSnippet(*snippet);
-  base::RunLoop().RunUntilIdle();
 
-  db()->LoadSnippets(base::Bind(&NTPSnippetsDatabaseTest::OnSnippetsLoaded,
-                                base::Unretained(this)));
-
+  // Make sure we get the updated version.
   EXPECT_CALL(*this,
               OnSnippetsLoadedImpl(ElementsAre(SnippetEq(snippet.get()))));
+  db()->LoadSnippets(base::Bind(&NTPSnippetsDatabaseTest::OnSnippetsLoaded,
+                                base::Unretained(this)));
   base::RunLoop().RunUntilIdle();
 }
 
@@ -195,16 +227,62 @@
 
   std::unique_ptr<NTPSnippet> snippet = CreateTestSnippet();
 
+  // Store a snippet.
   db()->SaveSnippet(*snippet);
-  base::RunLoop().RunUntilIdle();
 
-  db()->DeleteSnippet(snippet->id());
-  base::RunLoop().RunUntilIdle();
-
+  // Make sure it's there.
+  EXPECT_CALL(*this,
+              OnSnippetsLoadedImpl(ElementsAre(SnippetEq(snippet.get()))));
   db()->LoadSnippets(base::Bind(&NTPSnippetsDatabaseTest::OnSnippetsLoaded,
                                 base::Unretained(this)));
+  base::RunLoop().RunUntilIdle();
 
+  Mock::VerifyAndClearExpectations(this);
+
+  // Delete the snippet.
+  db()->DeleteSnippet(snippet->id());
+
+  // Make sure it's gone.
   EXPECT_CALL(*this, OnSnippetsLoadedImpl(IsEmpty()));
+  db()->LoadSnippets(base::Bind(&NTPSnippetsDatabaseTest::OnSnippetsLoaded,
+                                base::Unretained(this)));
+  base::RunLoop().RunUntilIdle();
+}
+
+TEST_F(NTPSnippetsDatabaseTest, DeleteSnippetAlsoDeletesImage) {
+  CreateDatabase();
+  base::RunLoop().RunUntilIdle();
+  ASSERT_TRUE(db()->IsInitialized());
+
+  std::unique_ptr<NTPSnippet> snippet = CreateTestSnippet();
+  std::string image_data("pretty image");
+
+  // Store a snippet and image.
+  db()->SaveSnippet(*snippet);
+  db()->SaveImage(snippet->id(), image_data);
+  base::RunLoop().RunUntilIdle();
+
+  // Make sure they're there.
+  EXPECT_CALL(*this,
+              OnSnippetsLoadedImpl(ElementsAre(SnippetEq(snippet.get()))));
+  db()->LoadSnippets(base::Bind(&NTPSnippetsDatabaseTest::OnSnippetsLoaded,
+                                base::Unretained(this)));
+  EXPECT_CALL(*this, OnImageLoaded(image_data));
+  db()->LoadImage(snippet->id(),
+                  base::Bind(&NTPSnippetsDatabaseTest::OnImageLoaded,
+                             base::Unretained(this)));
+  base::RunLoop().RunUntilIdle();
+
+  Mock::VerifyAndClearExpectations(this);
+
+  // Delete the snippet.
+  db()->DeleteSnippet(snippet->id());
+
+  // Make sure the image is gone.
+  EXPECT_CALL(*this, OnImageLoaded(std::string()));
+  db()->LoadImage(snippet->id(),
+                  base::Bind(&NTPSnippetsDatabaseTest::OnImageLoaded,
+                             base::Unretained(this)));
   base::RunLoop().RunUntilIdle();
 }
 
diff --git a/components/ntp_snippets/ntp_snippets_fetcher.cc b/components/ntp_snippets/ntp_snippets_fetcher.cc
index b7786e5..96fab85 100644
--- a/components/ntp_snippets/ntp_snippets_fetcher.cc
+++ b/components/ntp_snippets/ntp_snippets_fetcher.cc
@@ -9,6 +9,8 @@
 #include "base/command_line.h"
 #include "base/files/file_path.h"
 #include "base/files/file_util.h"
+#include "base/json/json_writer.h"
+#include "base/memory/ptr_util.h"
 #include "base/metrics/histogram_macros.h"
 #include "base/metrics/sparse_histogram.h"
 #include "base/path_service.h"
@@ -62,49 +64,6 @@
 const char kHostRestrictionOnString[] = "on";  // the default value
 const char kHostRestrictionOffString[] = "off";
 
-const char kRequestFormat[] =
-    "{"
-    "  \"response_detail_level\": \"STANDARD\","
-    "%s"  // If authenticated - an obfuscated Gaia ID will be inserted here.
-    "  \"advanced_options\": {"
-    "    \"local_scoring_params\": {"
-    "      \"content_params\": {"
-    "        \"only_return_personalized_results\": %s"
-    "%s"  // If authenticated - user segment (lang code) will be inserted here.
-    "      },"
-    "      \"content_restricts\": ["
-    "        {"
-    "          \"type\": \"METADATA\","
-    "          \"value\": \"TITLE\""
-    "        },"
-    "        {"
-    "          \"type\": \"METADATA\","
-    "          \"value\": \"SNIPPET\""
-    "        },"
-    "        {"
-    "          \"type\": \"METADATA\","
-    "          \"value\": \"THUMBNAIL\""
-    "        }"
-    "      ],"
-    "      \"content_selectors\": [%s]"
-    "    },"
-    "    \"global_scoring_params\": {"
-    "      \"num_to_return\": %i,"
-    "      \"sort_type\": 1"
-    "    }"
-    "  }"
-    "}";
-
-const char kGaiaIdFormat[] = "  \"obfuscated_gaia_id\": \"%s\",";
-const char kUserSegmentFormat[] = "        ,\"user_segment\": \"%s\"";
-const char kHostRestrictFormat[] =
-    "      {"
-    "        \"type\": \"HOST_RESTRICT\","
-    "        \"value\": \"%s\""
-    "      }";
-const char kTrueString[] = "true";
-const char kFalseString[] = "false";
-
 std::string FetchResultToString(NTPSnippetsFetcher::FetchResult result) {
   switch (result) {
     case NTPSnippetsFetcher::FetchResult::SUCCESS:
@@ -128,17 +87,6 @@
   return "Unknown error";
 }
 
-std::string BuildRequest(const std::string& obfuscated_gaia_id,
-                         bool only_return_personalized_results,
-                         const std::string& user_segment,
-                         const std::string& host_restricts,
-                         int count_to_fetch) {
-  return base::StringPrintf(
-      kRequestFormat, obfuscated_gaia_id.c_str(),
-      only_return_personalized_results ? kTrueString : kFalseString,
-      user_segment.c_str(), host_restricts.c_str(), count_to_fetch);
-}
-
 }  // namespace
 
 NTPSnippetsFetcher::NTPSnippetsFetcher(
@@ -237,6 +185,63 @@
   }
 }
 
+// static
+std::string NTPSnippetsFetcher::BuildRequest(
+    const std::string& obfuscated_gaia_id,
+    bool only_return_personalized_results,
+    const std::string& user_segment,
+    const std::set<std::string>& host_restricts,
+    int count_to_fetch) {
+  auto content_params = base::MakeUnique<base::DictionaryValue>();
+  content_params->SetBoolean("only_return_personalized_results",
+                             only_return_personalized_results);
+  if (!user_segment.empty()) {
+    content_params->SetString("user_segment", user_segment);
+  }
+
+  auto content_restricts = base::MakeUnique<base::ListValue>();
+  for (const auto& metadata : {"TITLE", "SNIPPET", "THUMBNAIL"}) {
+    auto entry = base::MakeUnique<base::DictionaryValue>();
+    entry->SetString("type", "METADATA");
+    entry->SetString("value", metadata);
+    content_restricts->Append(std::move(entry));
+  }
+
+  auto content_selectors = base::MakeUnique<base::ListValue>();
+  for (const auto& host : host_restricts) {
+    auto entry = base::MakeUnique<base::DictionaryValue>();
+    entry->SetString("type", "HOST_RESTRICT");
+    entry->SetString("value", host);
+    content_selectors->Append(std::move(entry));
+  }
+
+  auto local_scoring_params = base::MakeUnique<base::DictionaryValue>();
+  local_scoring_params->Set("content_params", std::move(content_params));
+  local_scoring_params->Set("content_restricts", std::move(content_restricts));
+  local_scoring_params->Set("content_selectors", std::move(content_selectors));
+
+  auto global_scoring_params = base::MakeUnique<base::DictionaryValue>();
+  global_scoring_params->SetInteger("num_to_return", count_to_fetch);
+  global_scoring_params->SetInteger("sort_type", 1);
+
+  auto advanced = base::MakeUnique<base::DictionaryValue>();
+  advanced->Set("local_scoring_params", std::move(local_scoring_params));
+  advanced->Set("global_scoring_params", std::move(global_scoring_params));
+
+  auto request = base::MakeUnique<base::DictionaryValue>();
+  request->SetString("response_detail_level", "STANDARD");
+  request->Set("advanced_options", std::move(advanced));
+  if (!obfuscated_gaia_id.empty()) {
+    request->SetString("obfuscated_gaia_id", obfuscated_gaia_id);
+  }
+
+  std::string request_json;
+  bool success = base::JSONWriter::WriteWithOptions(
+      *request, base::JSONWriter::OPTIONS_PRETTY_PRINT, &request_json);
+  DCHECK(success);
+  return request_json;
+}
+
 void NTPSnippetsFetcher::FetchSnippetsImpl(const GURL& url,
                                            const std::string& auth_header,
                                            const std::string& request) {
@@ -262,18 +267,6 @@
   url_fetcher_->Start();
 }
 
-std::string NTPSnippetsFetcher::GetHostRestricts() const {
-  std::string host_restricts;
-  if (UsesHostRestrictions()) {
-    for (const std::string& host : hosts_) {
-      if (!host_restricts.empty())
-        host_restricts.push_back(',');
-      host_restricts += base::StringPrintf(kHostRestrictFormat, host.c_str());
-    }
-  }
-  return host_restricts;
-}
-
 bool NTPSnippetsFetcher::UsesHostRestrictions() const {
   return use_host_restriction_ &&
          !base::CommandLine::ForCurrentProcess()->HasSwitch(
@@ -293,26 +286,26 @@
   GURL url(base::StringPrintf(kSnippetsServerNonAuthorizedFormat,
                               kSnippetsServer, key.c_str()));
 
-  FetchSnippetsImpl(url, std::string(),
-                    BuildRequest(/*obfuscated_gaia_id=*/std::string(),
-                                 /*only_return_personalized_results=*/false,
-                                 /*user_segment=*/std::string(),
-                                 GetHostRestricts(), count_to_fetch_));
+  FetchSnippetsImpl(
+      url, std::string(),
+      BuildRequest(/*obfuscated_gaia_id=*/std::string(),
+                   /*only_return_personalized_results=*/false,
+                   /*user_segment=*/std::string(),
+                   UsesHostRestrictions() ? hosts_ : std::set<std::string>(),
+                   count_to_fetch_));
 }
 
 void NTPSnippetsFetcher::FetchSnippetsAuthenticated(
     const std::string& account_id,
     const std::string& oauth_access_token) {
-  std::string gaia_id = base::StringPrintf(kGaiaIdFormat, account_id.c_str());
-  std::string user_segment =
-      base::StringPrintf(kUserSegmentFormat, locale_.c_str());
-
   FetchSnippetsImpl(
       GURL(kSnippetsServer),
       base::StringPrintf(kAuthorizationRequestHeaderFormat,
                          oauth_access_token.c_str()),
-      BuildRequest(gaia_id, personalization_ == Personalization::kPersonal,
-                   user_segment, GetHostRestricts(), count_to_fetch_));
+      BuildRequest(account_id, personalization_ == Personalization::kPersonal,
+                   locale_,
+                   UsesHostRestrictions() ? hosts_ : std::set<std::string>(),
+                   count_to_fetch_));
 }
 
 void NTPSnippetsFetcher::StartTokenRequest() {
diff --git a/components/ntp_snippets/ntp_snippets_fetcher.h b/components/ntp_snippets/ntp_snippets_fetcher.h
index d4e3b37..6af62af 100644
--- a/components/ntp_snippets/ntp_snippets_fetcher.h
+++ b/components/ntp_snippets/ntp_snippets_fetcher.h
@@ -116,10 +116,18 @@
   }
 
  private:
+  FRIEND_TEST_ALL_PREFIXES(NTPSnippetsFetcherTest, BuildRequestAuthenticated);
+  FRIEND_TEST_ALL_PREFIXES(NTPSnippetsFetcherTest, BuildRequestUnauthenticated);
+
+  static std::string BuildRequest(const std::string& obfuscated_gaia_id,
+                                  bool only_return_personalized_results,
+                                  const std::string& user_segment,
+                                  const std::set<std::string>& host_restricts,
+                                  int count_to_fetch);
+
   void FetchSnippetsImpl(const GURL& url,
                          const std::string& auth_header,
                          const std::string& request);
-  std::string GetHostRestricts() const;
   void FetchSnippetsNonAuthenticated();
   void FetchSnippetsAuthenticated(const std::string& account_id,
                                   const std::string& oauth_access_token);
diff --git a/components/ntp_snippets/ntp_snippets_fetcher_unittest.cc b/components/ntp_snippets/ntp_snippets_fetcher_unittest.cc
index c67f165..523e1d5 100644
--- a/components/ntp_snippets/ntp_snippets_fetcher_unittest.cc
+++ b/components/ntp_snippets/ntp_snippets_fetcher_unittest.cc
@@ -24,6 +24,7 @@
 #include "testing/gtest/include/gtest/gtest.h"
 
 namespace ntp_snippets {
+
 namespace {
 
 using testing::ElementsAre;
@@ -51,6 +52,25 @@
   return arg && static_cast<int>(arg->size()) == size;
 }
 
+MATCHER_P(EqualsJSON, json, "equals JSON") {
+  std::unique_ptr<base::Value> expected = base::JSONReader::Read(json);
+  if (!expected) {
+    *result_listener << "INTERNAL ERROR: couldn't parse expected JSON";
+    return false;
+  }
+
+  std::string err_msg;
+  int err_line, err_col;
+  std::unique_ptr<base::Value> actual = base::JSONReader::ReadAndReturnError(
+      arg, base::JSON_PARSE_RFC, nullptr, &err_msg, &err_line, &err_col);
+  if (!actual) {
+    *result_listener << "input:" << err_line << ":" << err_col << ": "
+                     << "parse error: " << err_msg;
+    return false;
+  }
+  return base::Value::Equals(actual.get(), expected.get());
+}
+
 class MockSnippetsAvailableCallback {
  public:
   // Workaround for gMock's lack of support for movable arguments.
@@ -94,6 +114,8 @@
       base::TimeDelta::FromMilliseconds(kTestJsonParsingLatencyMs));
 }
 
+}  // namespace
+
 class NTPSnippetsFetcherTest : public testing::Test {
  public:
   NTPSnippetsFetcherTest()
@@ -171,6 +193,81 @@
   DISALLOW_COPY_AND_ASSIGN(NTPSnippetsFetcherTest);
 };
 
+TEST_F(NTPSnippetsFetcherTest, BuildRequestAuthenticated) {
+  EXPECT_THAT(NTPSnippetsFetcher::BuildRequest("0BFUSGAIA", true, "en",
+                                               {"chromium.org"}, 25),
+              EqualsJSON("{"
+                         "  \"response_detail_level\": \"STANDARD\","
+                         "  \"obfuscated_gaia_id\": \"0BFUSGAIA\","
+                         "  \"advanced_options\": {"
+                         "    \"local_scoring_params\": {"
+                         "      \"content_params\": {"
+                         "        \"only_return_personalized_results\": true,"
+                         "        \"user_segment\": \"en\""
+                         "      },"
+                         "      \"content_restricts\": ["
+                         "        {"
+                         "          \"type\": \"METADATA\","
+                         "          \"value\": \"TITLE\""
+                         "        },"
+                         "        {"
+                         "          \"type\": \"METADATA\","
+                         "          \"value\": \"SNIPPET\""
+                         "        },"
+                         "        {"
+                         "          \"type\": \"METADATA\","
+                         "          \"value\": \"THUMBNAIL\""
+                         "        }"
+                         "      ],"
+                         "      \"content_selectors\": ["
+                         "        {"
+                         "          \"type\": \"HOST_RESTRICT\","
+                         "          \"value\": \"chromium.org\""
+                         "        }"
+                         "      ]"
+                         "    },"
+                         "    \"global_scoring_params\": {"
+                         "      \"num_to_return\": 25,"
+                         "      \"sort_type\": 1"
+                         "    }"
+                         "  }"
+                         "}"));
+}
+
+TEST_F(NTPSnippetsFetcherTest, BuildRequestUnauthenticated) {
+  EXPECT_THAT(NTPSnippetsFetcher::BuildRequest("", false, "",
+                                               std::set<std::string>(), 10),
+              EqualsJSON("{"
+                         "  \"response_detail_level\": \"STANDARD\","
+                         "  \"advanced_options\": {"
+                         "    \"local_scoring_params\": {"
+                         "      \"content_params\": {"
+                         "        \"only_return_personalized_results\": false"
+                         "      },"
+                         "      \"content_restricts\": ["
+                         "        {"
+                         "          \"type\": \"METADATA\","
+                         "          \"value\": \"TITLE\""
+                         "        },"
+                         "        {"
+                         "          \"type\": \"METADATA\","
+                         "          \"value\": \"SNIPPET\""
+                         "        },"
+                         "        {"
+                         "          \"type\": \"METADATA\","
+                         "          \"value\": \"THUMBNAIL\""
+                         "        }"
+                         "      ],"
+                         "      \"content_selectors\": []"
+                         "    },"
+                         "    \"global_scoring_params\": {"
+                         "      \"num_to_return\": 10,"
+                         "      \"sort_type\": 1"
+                         "    }"
+                         "  }"
+                         "}"));
+}
+
 TEST_F(NTPSnippetsFetcherTest, ShouldNotFetchOnCreation) {
   // The lack of registered baked in responses would cause any fetch to fail.
   FastForwardUntilNoTasksRemain();
@@ -407,5 +504,4 @@
                                        /*count=*/1)));
 }
 
-}  // namespace
 }  // namespace ntp_snippets
diff --git a/components/open_from_clipboard/clipboard_recent_content_ios.h b/components/open_from_clipboard/clipboard_recent_content_ios.h
index 3ea32831..19e40ed 100644
--- a/components/open_from_clipboard/clipboard_recent_content_ios.h
+++ b/components/open_from_clipboard/clipboard_recent_content_ios.h
@@ -37,11 +37,16 @@
   // registered.
   bool HasPasteboardChanged(base::TimeDelta uptime);
 
+  // Gets the current URL in the clipboard. If the cache is out of date, updates
+  // it.
+  bool GetCurrentURLFromClipboard(GURL* url);
+
   // Loads information from the user defaults about the latest pasteboard entry.
   void LoadFromUserDefaults();
 
   // ClipboardRecentContent implementation.
   bool GetRecentURLFromClipboard(GURL* url) const override;
+
   base::TimeDelta GetClipboardContentAge() const override;
   void SuppressClipboardContent() override;
   void RecentURLDisplayed() override;
diff --git a/components/open_from_clipboard/clipboard_recent_content_ios.mm b/components/open_from_clipboard/clipboard_recent_content_ios.mm
index 36df143..4b6efd2ea 100644
--- a/components/open_from_clipboard/clipboard_recent_content_ios.mm
+++ b/components/open_from_clipboard/clipboard_recent_content_ios.mm
@@ -206,6 +206,13 @@
   return md5_changed;
 }
 
+bool ClipboardRecentContentIOS::GetCurrentURLFromClipboard(GURL* url) {
+  if (HasPasteboardChanged(base::SysInfo::Uptime())) {
+    PasteboardChanged();
+  }
+  return GetRecentURLFromClipboard(url);
+}
+
 void ClipboardRecentContentIOS::Init(base::TimeDelta uptime) {
   last_pasteboard_change_count_ = NSIntegerMax;
   url_from_pasteboard_cache_ = URLFromPasteboard();
diff --git a/components/page_load_metrics/browser/metrics_web_contents_observer.cc b/components/page_load_metrics/browser/metrics_web_contents_observer.cc
index a289253e..736d86e9 100644
--- a/components/page_load_metrics/browser/metrics_web_contents_observer.cc
+++ b/components/page_load_metrics/browser/metrics_web_contents_observer.cc
@@ -207,6 +207,7 @@
 void DispatchObserverTimingCallbacks(PageLoadMetricsObserver* observer,
                                      const PageLoadTiming& last_timing,
                                      const PageLoadTiming& new_timing,
+                                     const PageLoadMetadata& last_metadata,
                                      const PageLoadExtraInfo& extra_info) {
   observer->OnTimingUpdate(new_timing, extra_info);
   if (!new_timing.dom_content_loaded_event_start.is_zero() &&
@@ -232,6 +233,8 @@
     observer->OnParseStart(new_timing, extra_info);
   if (!new_timing.parse_stop.is_zero() && last_timing.parse_stop.is_zero())
     observer->OnParseStop(new_timing, extra_info);
+  if (extra_info.metadata.behavior_flags != last_metadata.behavior_flags)
+    observer->OnLoadingBehaviorObserved(extra_info);
 }
 
 }  // namespace
@@ -402,11 +405,13 @@
     // the observer timing callbacks.
     const PageLoadTiming last_timing = timing_;
     timing_ = new_timing;
+
+    const PageLoadMetadata last_metadata = metadata_;
     metadata_ = new_metadata;
     const PageLoadExtraInfo info = GetPageLoadMetricsInfo();
     for (const auto& observer : observers_) {
       DispatchObserverTimingCallbacks(observer.get(), last_timing, new_timing,
-                                      info);
+                                      last_metadata, info);
     }
     return true;
   }
diff --git a/components/page_load_metrics/browser/page_load_metrics_observer.h b/components/page_load_metrics/browser/page_load_metrics_observer.h
index 796a3678..a08ec0a 100644
--- a/components/page_load_metrics/browser/page_load_metrics_observer.h
+++ b/components/page_load_metrics/browser/page_load_metrics_observer.h
@@ -179,6 +179,11 @@
                             const PageLoadExtraInfo& extra_info) {}
   virtual void OnParseStop(const PageLoadTiming& timing,
                            const PageLoadExtraInfo& extra_info) {}
+
+  // Observer method to be invoked when there is a change in PageLoadMetadata's
+  // behavior_flags.
+  virtual void OnLoadingBehaviorObserved(
+      const page_load_metrics::PageLoadExtraInfo& extra_info) {}
 };
 
 }  // namespace page_load_metrics
diff --git a/components/password_manager/core/browser/password_form_manager.cc b/components/password_manager/core/browser/password_form_manager.cc
index 05d4f85..6b90eaa 100644
--- a/components/password_manager/core/browser/password_form_manager.cc
+++ b/components/password_manager/core/browser/password_form_manager.cc
@@ -12,6 +12,7 @@
 #include <utility>
 
 #include "base/command_line.h"
+#include "base/feature_list.h"
 #include "base/memory/ptr_util.h"
 #include "base/metrics/field_trial.h"
 #include "base/metrics/histogram_macros.h"
@@ -34,6 +35,7 @@
 #include "components/password_manager/core/browser/password_manager_util.h"
 #include "components/password_manager/core/browser/password_store.h"
 #include "components/password_manager/core/browser/statistics_table.h"
+#include "components/password_manager/core/common/password_manager_features.h"
 #include "google_apis/gaia/gaia_auth_util.h"
 
 using autofill::FormStructure;
@@ -49,10 +51,6 @@
 
 namespace {
 
-// Experiment information
-const char kFillOnAccountSelectFieldTrialName[] = "FillOnAccountSelect";
-const char kFillOnAccountSelectFieldTrialEnabledGroup[] = "Enable";
-
 PasswordForm CopyAndModifySSLValidity(const PasswordForm& orig,
                                       bool ssl_valid) {
   PasswordForm result(orig);
@@ -120,22 +118,18 @@
 }
 
 bool ShouldShowInitialPasswordAccountSuggestions() {
-  std::string group_name =
-      base::FieldTrialList::FindFullName(kFillOnAccountSelectFieldTrialName);
+  return base::FeatureList::IsEnabled(
+      password_manager::features::kFillOnAccountSelect);
+}
 
-  if (base::CommandLine::ForCurrentProcess()->HasSwitch(
-          autofill::switches::kDisableFillOnAccountSelect)) {
-    return false;
-  }
+// Update |credential| to reflect usage. This is broken out from UpdateLogin()
+// so that PSL matches can also be properly updated.
+void UpdateMetadataForUsage(PasswordForm* credential) {
+  ++credential->times_used;
 
-  if (base::CommandLine::ForCurrentProcess()->HasSwitch(
-          autofill::switches::kEnableFillOnAccountSelect)) {
-    return true;
-  }
-
-  return base::StartsWith(group_name,
-                          kFillOnAccountSelectFieldTrialEnabledGroup,
-                          base::CompareCase::SENSITIVE);
+  // Remove alternate usernames. At this point we assume that we have found
+  // the right username.
+  credential->other_possible_usernames.clear();
 }
 
 }  // namespace
@@ -728,7 +722,7 @@
     return;
   }
 
-  UpdateMetadataForUsage(pending_credentials_);
+  UpdateMetadataForUsage(&pending_credentials_);
 
   client_->GetStoreResultFilter()->ReportFormUsed(pending_credentials_);
 
@@ -795,15 +789,6 @@
   }
 }
 
-void PasswordFormManager::UpdateMetadataForUsage(
-    const PasswordForm& credential) {
-  ++pending_credentials_.times_used;
-
-  // Remove alternate usernames. At this point we assume that we have found
-  // the right username.
-  pending_credentials_.other_possible_usernames.clear();
-}
-
 bool PasswordFormManager::UpdatePendingCredentialsIfOtherPossibleUsername(
     const base::string16& username) {
   for (PasswordFormMap::const_iterator it = best_matches_.begin();
@@ -1098,7 +1083,7 @@
       // TODO(gcasto): It would be nice if other state were shared such that if
       // say a password was updated on one match it would update on all related
       // passwords. This is a much larger change.
-      UpdateMetadataForUsage(pending_credentials_);
+      UpdateMetadataForUsage(&pending_credentials_);
 
       // Update |pending_credentials_| in order to be able correctly save it.
       pending_credentials_.origin = provisionally_saved_form_->origin;
diff --git a/components/password_manager/core/browser/password_form_manager.h b/components/password_manager/core/browser/password_form_manager.h
index 25c4f2b..f271f31 100644
--- a/components/password_manager/core/browser/password_form_manager.h
+++ b/components/password_manager/core/browser/password_form_manager.h
@@ -398,10 +398,6 @@
   bool UpdatePendingCredentialsIfUsernameChanged(
       const autofill::PasswordForm& form);
 
-  // Update state to reflect that |credential| was used. This is broken out from
-  // UpdateLogin() so that PSL matches can also be properly updated.
-  void UpdateMetadataForUsage(const autofill::PasswordForm& credential);
-
   // Converts the "ActionsTaken" fields into an int so they can be logged to
   // UMA.
   int GetActionsTaken() const;
@@ -486,7 +482,7 @@
 
   // Set of forms from PasswordStore that correspond to the current site and
   // that are not in |best_matches_|.
-  ScopedVector<autofill::PasswordForm> not_best_matches_;
+  std::vector<std::unique_ptr<autofill::PasswordForm>> not_best_matches_;
 
   // Federated credentials relevant to the observed form. They are neither
   // filled not saved by this PasswordFormManager, so they are kept separately
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 7da6df8..35377086 100644
--- a/components/password_manager/core/browser/password_form_manager_unittest.cc
+++ b/components/password_manager/core/browser/password_form_manager_unittest.cc
@@ -8,7 +8,7 @@
 #include <memory>
 #include <utility>
 
-#include "base/command_line.h"
+#include "base/feature_list.h"
 #include "base/macros.h"
 #include "base/memory/ptr_util.h"
 #include "base/run_loop.h"
@@ -21,7 +21,6 @@
 #include "components/autofill/core/browser/test_autofill_driver.h"
 #include "components/autofill/core/browser/test_personal_data_manager.h"
 #include "components/autofill/core/common/autofill_pref_names.h"
-#include "components/autofill/core/common/autofill_switches.h"
 #include "components/autofill/core/common/password_form.h"
 #include "components/password_manager/core/browser/credentials_filter.h"
 #include "components/password_manager/core/browser/mock_password_store.h"
@@ -33,6 +32,7 @@
 #include "components/password_manager/core/browser/statistics_table.h"
 #include "components/password_manager/core/browser/stub_password_manager_client.h"
 #include "components/password_manager/core/browser/stub_password_manager_driver.h"
+#include "components/password_manager/core/common/password_manager_features.h"
 #include "components/password_manager/core/common/password_manager_pref_names.h"
 #include "components/prefs/pref_registry_simple.h"
 #include "components/prefs/pref_service.h"
@@ -705,8 +705,11 @@
   PasswordFormManagerFillOnAccountSelectTest() {}
 
   void SetUp() override {
-    base::CommandLine::ForCurrentProcess()->AppendSwitch(
-        autofill::switches::kEnableFillOnAccountSelect);
+    std::unique_ptr<base::FeatureList> feature_list(new base::FeatureList);
+    std::vector<const base::Feature*> enabled_features;
+    std::vector<const base::Feature*> disabled_features;
+    enabled_features.push_back(&features::kFillOnAccountSelect);
+    SetFeatures(enabled_features, disabled_features, std::move(feature_list));
     PasswordFormManagerTest::SetUp();
   }
 };
diff --git a/components/password_manager/core/browser/password_manager_unittest.cc b/components/password_manager/core/browser/password_manager_unittest.cc
index 44f5e9d..677643d2 100644
--- a/components/password_manager/core/browser/password_manager_unittest.cc
+++ b/components/password_manager/core/browser/password_manager_unittest.cc
@@ -8,6 +8,7 @@
 #include <utility>
 #include <vector>
 
+#include "base/feature_list.h"
 #include "base/macros.h"
 #include "base/memory/ptr_util.h"
 #include "base/message_loop/message_loop.h"
@@ -124,6 +125,18 @@
 class PasswordManagerTest : public testing::Test {
  protected:
   void SetUp() override {
+    // TODO(jww): The following FeatureList clear can be removed once
+    // https://crbug.com/620435 is resolved. This cleanup is needed because on
+    // some platforms (e.g. iOS), the base::FeatureList is not reset betwen
+    // test runs, so if these unit tests are run right after some other unit
+    // tests that turn on a feature, that might affect these tests. In
+    // particular, the earlier fill-on-account-select unit tests turned on
+    // their respective Feature and that was incorrectly left on for these
+    // tests.
+    base::FeatureList::ClearInstanceForTesting();
+    std::unique_ptr<base::FeatureList> feature_list(new base::FeatureList);
+    base::FeatureList::SetInstance(std::move(feature_list));
+
     store_ = new testing::StrictMock<MockPasswordStore>;
     EXPECT_CALL(*store_, ReportMetrics(_, _)).Times(AnyNumber());
     CHECK(store_->Init(syncer::SyncableService::StartSyncFlare()));
diff --git a/components/password_manager/core/common/password_manager_features.cc b/components/password_manager/core/common/password_manager_features.cc
index 849d7f7d2..a65edefa4 100644
--- a/components/password_manager/core/common/password_manager_features.cc
+++ b/components/password_manager/core/common/password_manager_features.cc
@@ -55,6 +55,11 @@
 const base::Feature kViewPasswords = {"view-passwords",
                                       base::FEATURE_DISABLED_BY_DEFAULT};
 
+// Enables the experiment for the password manager to only fill on account
+// selection, rather than autofilling on page load, with highlighting of fields.
+const base::Feature kFillOnAccountSelect = {"fill-on-account-select",
+                                            base::FEATURE_DISABLED_BY_DEFAULT};
+
 }  // namespace features
 
 }  // namespace password_manager
diff --git a/components/password_manager/core/common/password_manager_features.h b/components/password_manager/core/common/password_manager_features.h
index 728d5adf..02bcb55 100644
--- a/components/password_manager/core/common/password_manager_features.h
+++ b/components/password_manager/core/common/password_manager_features.h
@@ -27,6 +27,7 @@
 extern const base::Feature kProtectSyncCredentialOnReauth;
 extern const base::Feature kPasswordImportExport;
 extern const base::Feature kViewPasswords;
+extern const base::Feature kFillOnAccountSelect;
 
 }  // namespace features
 
diff --git a/components/security_state/BUILD.gn b/components/security_state/BUILD.gn
index 68cd282..4d2823b 100644
--- a/components/security_state/BUILD.gn
+++ b/components/security_state/BUILD.gn
@@ -43,8 +43,4 @@
     "//net:test_support",
     "//testing/gtest",
   ]
-
-  data = [
-    "//net/data/",
-  ]
 }
diff --git a/content/browser/BUILD.gn b/content/browser/BUILD.gn
index f5c3906..b971f30 100644
--- a/content/browser/BUILD.gn
+++ b/content/browser/BUILD.gn
@@ -66,6 +66,7 @@
     "//gpu/command_buffer/client:gles2_interface",
     "//ipc/mojo",
     "//media",
+    "//media/capture",
     "//media/gpu/ipc/client",
     "//media/midi",
     "//media/mojo/interfaces:image_capture",
@@ -350,6 +351,7 @@
     deps += [
       "//content/public/android:jni",
       "//media",
+      "//media/capture/video/android",
       "//media/mojo/interfaces",
       "//mojo/android:libsystem_java",
       "//ui/android",
diff --git a/content/browser/loader/resource_scheduler_unittest.cc b/content/browser/loader/resource_scheduler_unittest.cc
index e935523..fbe518b 100644
--- a/content/browser/loader/resource_scheduler_unittest.cc
+++ b/content/browser/loader/resource_scheduler_unittest.cc
@@ -131,7 +131,7 @@
         io_thread_(BrowserThread::IO, &message_loop_),
         field_trial_list_(new base::MockEntropyProvider()) {
     InitializeScheduler();
-    context_.set_http_server_properties(http_server_properties_.GetWeakPtr());
+    context_.set_http_server_properties(&http_server_properties_);
   }
 
   ~ResourceSchedulerTest() override {
diff --git a/content/child/runtime_features.cc b/content/child/runtime_features.cc
index d7095e5..704dd89 100644
--- a/content/child/runtime_features.cc
+++ b/content/child/runtime_features.cc
@@ -125,11 +125,6 @@
       switches::kEnableGpuMemoryBufferCompositorResources) &&
       !command_line.HasSwitch(switches::kDisableWebGLImageChromium) &&
       !command_line.HasSwitch(switches::kDisableGpu);
-
-  // There are two bugs in WebGL image chromium.
-  // https://bugs.chromium.org/p/chromium/issues/detail?id=581777#c37
-  // TODO(erikchen): When those issues are fixed, reenable this feature.
-  enable_web_gl_image_chromium = false;
 #else
   bool enable_web_gl_image_chromium =
       command_line.HasSwitch(switches::kEnableWebGLImageChromium);
diff --git a/content/common/BUILD.gn b/content/common/BUILD.gn
index b459439c..62e7354 100644
--- a/content/common/BUILD.gn
+++ b/content/common/BUILD.gn
@@ -61,6 +61,7 @@
     "//media",
     "//media:shared_memory_support",
     "//media/base/ipc",
+    "//media/capture",
     "//media/gpu/ipc/client",
     "//media/gpu/ipc/common",
     "//media/midi",
diff --git a/content/content_browser.gypi b/content/content_browser.gypi
index d8ea67218..72d4a24b 100644
--- a/content/content_browser.gypi
+++ b/content/content_browser.gypi
@@ -2009,7 +2009,7 @@
     ['use_udev == 1', {
       'dependencies': [
         '../device/udev_linux/udev.gyp:udev_linux',
-        '../media/media.gyp:media',
+        '../media/capture/capture.gyp:capture',
       ],
     }, {
       'sources!': [
diff --git a/content/content_common.gypi b/content/content_common.gypi
index 55e8cac30..9a17f6d 100644
--- a/content/content_common.gypi
+++ b/content/content_common.gypi
@@ -17,6 +17,7 @@
     '../ipc/ipc.gyp:ipc',
     '../ipc/mojo/ipc_mojo.gyp:ipc_mojo',
     '../media/base/ipc/media_base_ipc.gyp:media_base_ipc',
+    '../media/capture/capture.gyp:capture',
     '../media/media.gyp:media',
     '../media/media.gyp:media_gpu',
     '../media/media.gyp:shared_memory_support',
diff --git a/content/content_tests.gypi b/content/content_tests.gypi
index 201ba4d..1cb529b 100644
--- a/content/content_tests.gypi
+++ b/content/content_tests.gypi
@@ -853,6 +853,7 @@
         '../gpu/gpu.gyp:gpu_ipc_service_test_support',
         '../ipc/mojo/ipc_mojo.gyp:ipc_mojo',
         '../media/blink/media_blink.gyp:media_blink',
+        '../media/capture/capture.gyp:capture',
         '../media/media.gyp:media',
         '../media/midi/midi.gyp:midi',
         '../mojo/mojo_edk.gyp:mojo_common_test_support',
@@ -1835,6 +1836,7 @@
             '../base/base.gyp:base_javatests',
             '../base/base.gyp:base_java_test_support',
             '../device/battery/battery.gyp:device_battery_javatests',
+            '../media/capture/capture.gyp:capture_java',
             '../media/media.gyp:media_java',
             '../media/media.gyp:media_test_support',
             '../mojo/mojo_public.gyp:mojo_public_test_interfaces',
diff --git a/content/public/test/render_view_test.cc b/content/public/test/render_view_test.cc
index b4728b4..89d5011 100644
--- a/content/public/test/render_view_test.cc
+++ b/content/public/test/render_view_test.cc
@@ -38,7 +38,6 @@
 #include "content/test/test_content_client.h"
 #include "content/test/test_render_frame.h"
 #include "third_party/WebKit/public/platform/WebScreenInfo.h"
-#include "third_party/WebKit/public/platform/WebURLLoader.h"
 #include "third_party/WebKit/public/platform/WebURLRequest.h"
 #include "third_party/WebKit/public/web/WebDocument.h"
 #include "third_party/WebKit/public/web/WebHistoryItem.h"
@@ -67,7 +66,6 @@
 using blink::WebMouseEvent;
 using blink::WebScriptSource;
 using blink::WebString;
-using blink::WebURLLoader;
 using blink::WebURLRequest;
 
 namespace {
@@ -108,66 +106,10 @@
   }
 }
 
-WebURLRequest createDataRequest(const std::string& html) {
-  std::string url_str = "data:text/html;charset=utf-8,";
-  url_str.append(html);
-  GURL url(url_str);
-  WebURLRequest request(url);
-  request.setCheckForBrowserSideNavigation(false);
-  return request;
-}
-
 }  // namespace
 
 namespace content {
 
-const char kWrappedHTMLDataHeader[] = "X-WrappedHTMLData";
-
-// This loader checks all requests for the presence of the X-WrappedHTMLData
-// header and, if it's found, substitutes a data: url with the header's value
-// instead of loading the original request. It is used to implement
-// LoadHTMLWithURLOverride.
-class WebURLLoaderWrapper : public WebURLLoader {
-public:
-  WebURLLoaderWrapper(WebURLLoader* wrapped_loader)
-    : wrapped_loader_(wrapped_loader) { }
-
-  void loadSynchronously(const WebURLRequest& request,
-                         blink::WebURLResponse& response,
-                         blink::WebURLError& error,
-                         blink::WebData& data) override {
-    std::string html = request.httpHeaderField(kWrappedHTMLDataHeader).utf8();
-    wrapped_loader_->loadSynchronously(
-        html.empty() ? request : createDataRequest(html),
-        response,
-        error,
-        data);
-  }
-
-  void loadAsynchronously(const WebURLRequest& request,
-                          blink::WebURLLoaderClient* client) override {
-    std::string html = request.httpHeaderField(kWrappedHTMLDataHeader).utf8();
-    wrapped_loader_->loadAsynchronously(
-        html.empty() ? request : createDataRequest(html),
-        client);
-  }
-
-  void cancel() override {
-    wrapped_loader_->cancel();
-  }
-
-  void setDefersLoading(bool defer) override {
-    wrapped_loader_->setDefersLoading(defer);
-  }
-
-  void setLoadingTaskRunner(blink::WebTaskRunner* runner) override {
-    wrapped_loader_->setLoadingTaskRunner(runner);
-  }
-
-private:
-  std::unique_ptr<WebURLLoader> wrapped_loader_;
-};
-
 class RendererBlinkPlatformImplTestOverrideImpl
     : public RendererBlinkPlatformImpl {
  public:
@@ -179,13 +121,6 @@
   // Get rid of the dependency to the sandbox, which is not available in
   // RenderViewTest.
   blink::WebSandboxSupport* sandboxSupport() override { return NULL; }
-
-  // Inject a WebURLLoader which rewrites requests that have the
-  // X-WrappedHTMLData header.
-  WebURLLoader* createURLLoader() override {
-    return new WebURLLoaderWrapper(
-        RendererBlinkPlatformImpl::createURLLoader());
-  }
 };
 
 RenderViewTest::RendererBlinkPlatformImplTestOverride::
@@ -247,7 +182,12 @@
 }
 
 void RenderViewTest::LoadHTML(const char* html) {
-  GetMainFrame()->loadRequest(createDataRequest(html));
+  std::string url_string = "data:text/html;charset=utf-8,";
+  url_string.append(html);
+  GURL url(url_string);
+  WebURLRequest request(url);
+  request.setCheckForBrowserSideNavigation(false);
+  GetMainFrame()->loadRequest(request);
   // The load actually happens asynchronously, so we pump messages to process
   // the pending continuation.
   FrameLoadWaiter(view_->GetMainRenderFrame()).Wait();
@@ -256,12 +196,8 @@
 
 void RenderViewTest::LoadHTMLWithUrlOverride(const char* html,
                                              const char* url_override) {
-  GURL url(url_override);
-  WebURLRequest request(url);
-  request.setCheckForBrowserSideNavigation(false);
-  request.addHTTPHeaderField(kWrappedHTMLDataHeader, WebString::fromUTF8(html));
-
-  GetMainFrame()->loadRequest(request);
+  GetMainFrame()->loadHTMLString(std::string(html),
+                                 blink::WebURL(GURL(url_override)));
   // The load actually happens asynchronously, so we pump messages to process
   // the pending continuation.
   FrameLoadWaiter(view_->GetMainRenderFrame()).Wait();
diff --git a/content/renderer/BUILD.gn b/content/renderer/BUILD.gn
index 374ceff..139a800 100644
--- a/content/renderer/BUILD.gn
+++ b/content/renderer/BUILD.gn
@@ -60,6 +60,7 @@
     "//jingle:jingle_glue",
     "//media",
     "//media/blink",
+    "//media/capture",
     "//media/gpu",
     "//media/gpu/ipc/client",
     "//media/gpu/ipc/common",
diff --git a/content/renderer/media/webrtc/media_stream_remote_video_source.cc b/content/renderer/media/webrtc/media_stream_remote_video_source.cc
index 928b180..78ac796 100644
--- a/content/renderer/media/webrtc/media_stream_remote_video_source.cc
+++ b/content/renderer/media/webrtc/media_stream_remote_video_source.cc
@@ -72,6 +72,10 @@
 RemoteVideoSourceDelegate::~RemoteVideoSourceDelegate() {
 }
 
+namespace {
+void DoNothing(const scoped_refptr<rtc::RefCountInterface>& ref) {}
+}  // anonymous
+
 void MediaStreamRemoteVideoSource::RemoteVideoSourceDelegate::OnFrame(
     const cricket::VideoFrame& incoming_frame) {
   const base::TimeDelta incoming_timestamp = base::TimeDelta::FromMicroseconds(
@@ -89,16 +93,19 @@
       incoming_timestamp - start_timestamp_;
 
   scoped_refptr<media::VideoFrame> video_frame;
-  if (incoming_frame.video_frame_buffer()->native_handle() != NULL) {
+  scoped_refptr<webrtc::VideoFrameBuffer> buffer(
+      incoming_frame.video_frame_buffer());
+
+  if (buffer->native_handle() != NULL) {
     video_frame =
-        static_cast<media::VideoFrame*>(
-            incoming_frame.video_frame_buffer()->native_handle());
+        static_cast<media::VideoFrame*>(buffer->native_handle());
     video_frame->set_timestamp(elapsed_timestamp);
   } else {
-    const cricket::VideoFrame* frame =
-        incoming_frame.GetCopyWithRotationApplied();
-
-    gfx::Size size(frame->width(), frame->height());
+    // Note that the GetCopyWithRotationApplied returns a pointer to a
+    // frame owned by incoming_frame.
+    buffer =
+        incoming_frame.GetCopyWithRotationApplied()->video_frame_buffer();
+    gfx::Size size(buffer->width(), buffer->height());
 
     // Make a shallow copy. Both |frame| and |video_frame| will share a single
     // reference counted frame buffer. Const cast and hope no one will overwrite
@@ -107,17 +114,17 @@
     // need to const cast here.
     video_frame = media::VideoFrame::WrapExternalYuvData(
         media::PIXEL_FORMAT_YV12, size, gfx::Rect(size), size,
-        frame->video_frame_buffer()->StrideY(),
-        frame->video_frame_buffer()->StrideU(),
-        frame->video_frame_buffer()->StrideV(),
-        const_cast<uint8_t*>(frame->video_frame_buffer()->DataY()),
-        const_cast<uint8_t*>(frame->video_frame_buffer()->DataU()),
-        const_cast<uint8_t*>(frame->video_frame_buffer()->DataV()),
+        buffer->StrideY(),
+        buffer->StrideU(),
+        buffer->StrideV(),
+        const_cast<uint8_t*>(buffer->DataY()),
+        const_cast<uint8_t*>(buffer->DataU()),
+        const_cast<uint8_t*>(buffer->DataV()),
         elapsed_timestamp);
     if (!video_frame)
       return;
-    video_frame->AddDestructionObserver(
-        base::Bind(&base::DeletePointer<cricket::VideoFrame>, frame->Copy()));
+    // The bind ensures that we keep a reference to the underlying buffer.
+    video_frame->AddDestructionObserver(base::Bind(&DoNothing, buffer));
   }
 
   video_frame->metadata()->SetTimeTicks(
diff --git a/content/test/BUILD.gn b/content/test/BUILD.gn
index 2ca867a..79782aa 100644
--- a/content/test/BUILD.gn
+++ b/content/test/BUILD.gn
@@ -74,6 +74,7 @@
     "//ipc:test_support",
     "//ipc/mojo",
     "//media",
+    "//media/capture",
     "//mojo/edk/system",
     "//mojo/edk/test:test_support",
     "//net:test_support",
@@ -185,6 +186,7 @@
 
   if (is_android) {
     deps += [
+      "//media/capture/video/android:android",
       "//ui/android",
       "//ui/shell_dialogs",
     ]
@@ -403,7 +405,6 @@
     data = [
       "$root_out_dir/content_shell.pak",
       "data/",
-      "//net/data/",
       "//media/test/data/",
     ]
 
@@ -625,7 +626,6 @@
     data = [
       "$root_out_dir/content_shell.pak",
       "data/",
-      "//net/data/ssl/certificates/",
       "//media/test/data/",
     ]
   }
@@ -671,6 +671,7 @@
     "//media:test_support",
     "//media/audio:test_support",
     "//media/base:test_support",
+    "//media/capture",
     "//media/midi:midi",
     "//mojo/edk/test:test_support",
     "//mojo/public/cpp/bindings",
diff --git a/device/BUILD.gn b/device/BUILD.gn
index eb63e5e..96a719b 100644
--- a/device/BUILD.gn
+++ b/device/BUILD.gn
@@ -47,6 +47,8 @@
     "bluetooth/test/bluetooth_test_mac.mm",
     "bluetooth/test/bluetooth_test_win.cc",
     "bluetooth/test/bluetooth_test_win.h",
+    "bluetooth/test/mock_bluetooth_cbcharacteristic_mac.h",
+    "bluetooth/test/mock_bluetooth_cbcharacteristic_mac.mm",
     "bluetooth/test/mock_bluetooth_cbperipheral_mac.h",
     "bluetooth/test/mock_bluetooth_cbperipheral_mac.mm",
     "bluetooth/test/mock_bluetooth_cbservice_mac.h",
diff --git a/device/bluetooth/BUILD.gn b/device/bluetooth/BUILD.gn
index a58a906..8e4fbc2 100644
--- a/device/bluetooth/BUILD.gn
+++ b/device/bluetooth/BUILD.gn
@@ -101,6 +101,8 @@
     "bluetooth_remote_gatt_characteristic.h",
     "bluetooth_remote_gatt_characteristic_android.cc",
     "bluetooth_remote_gatt_characteristic_android.h",
+    "bluetooth_remote_gatt_characteristic_mac.h",
+    "bluetooth_remote_gatt_characteristic_mac.mm",
     "bluetooth_remote_gatt_characteristic_win.cc",
     "bluetooth_remote_gatt_characteristic_win.h",
     "bluetooth_remote_gatt_descriptor.cc",
diff --git a/device/bluetooth/bluetooth.gyp b/device/bluetooth/bluetooth.gyp
index 6ed73cf7..2e332cfa 100644
--- a/device/bluetooth/bluetooth.gyp
+++ b/device/bluetooth/bluetooth.gyp
@@ -103,6 +103,8 @@
         'bluetooth_remote_gatt_characteristic.h',
         'bluetooth_remote_gatt_characteristic_android.cc',
         'bluetooth_remote_gatt_characteristic_android.h',
+        'bluetooth_remote_gatt_characteristic_mac.h',
+        'bluetooth_remote_gatt_characteristic_mac.mm',
         'bluetooth_remote_gatt_characteristic_win.cc',
         'bluetooth_remote_gatt_characteristic_win.h',
         'bluetooth_remote_gatt_descriptor.cc',
diff --git a/device/bluetooth/bluetooth_low_energy_device_mac.h b/device/bluetooth/bluetooth_low_energy_device_mac.h
index c5e24b1..9b972ba59 100644
--- a/device/bluetooth/bluetooth_low_energy_device_mac.h
+++ b/device/bluetooth/bluetooth_low_energy_device_mac.h
@@ -95,6 +95,7 @@
   // Methods used by BluetoothLowEnergyPeripheralBridge.
   void DidDiscoverPrimaryServices(NSError* error);
   void DidModifyServices(NSArray* invalidatedServices);
+  void DidDiscoverCharacteristics(CBService* cb_service, NSError* error);
 
   // Updates information about the device.
   virtual void Update(NSDictionary* advertisement_data, int rssi);
@@ -111,6 +112,7 @@
   friend class BluetoothAdapterMac;
   friend class BluetoothAdapterMacTest;
   friend class BluetoothLowEnergyPeripheralBridge;
+  friend class BluetoothRemoteGattServiceMac;
   friend class BluetoothTestMac;
 
   // Returns the Bluetooth adapter.
diff --git a/device/bluetooth/bluetooth_low_energy_device_mac.mm b/device/bluetooth/bluetooth_low_energy_device_mac.mm
index b8c47f4..04c400a 100644
--- a/device/bluetooth/bluetooth_low_energy_device_mac.mm
+++ b/device/bluetooth/bluetooth_low_energy_device_mac.mm
@@ -239,7 +239,7 @@
 void BluetoothLowEnergyDeviceMac::DidDiscoverPrimaryServices(NSError* error) {
   if (error) {
     // TODO(http://crbug.com/609320): Need to pass the error.
-    // TODO(http://crbug.com/609844): Decide what to do if we fail to discover
+    // TODO(http://crbug.com/609844): Decide what to do if discover failed
     // a device services.
     VLOG(1) << "Can't discover primary services: "
             << error.localizedDescription.UTF8String << " (" << error.domain
@@ -258,10 +258,44 @@
       adapter_->NotifyGattServiceAdded(gatt_service);
     }
   }
-  // TODO(http://crbug.com/609064): Services are fully discovered once all
-  // characteristics have been found.
-  SetGattServicesDiscoveryComplete(true);
-  adapter_->NotifyGattServicesDiscovered(this);
+  for (GattServiceMap::const_iterator it = gatt_services_.begin();
+       it != gatt_services_.end(); ++it) {
+    device::BluetoothRemoteGattService* gatt_service = it->second;
+    device::BluetoothRemoteGattServiceMac* gatt_service_mac =
+        static_cast<BluetoothRemoteGattServiceMac*>(gatt_service);
+    gatt_service_mac->DiscoverCharacteristics();
+  }
+}
+
+void BluetoothLowEnergyDeviceMac::DidDiscoverCharacteristics(
+    CBService* cb_service,
+    NSError* error) {
+  if (error) {
+    // TODO(http://crbug.com/609320): Need to pass the error.
+    // TODO(http://crbug.com/609844): Decide what to do if discover failed
+    VLOG(1) << "Can't discover characteristics: "
+            << error.localizedDescription.UTF8String << " (" << error.domain
+            << ": " << error.code << ")";
+    return;
+  }
+  BluetoothRemoteGattServiceMac* gatt_service =
+      GetBluetoothRemoteGattService(cb_service);
+  DCHECK(gatt_service);
+  gatt_service->DidDiscoverCharacteristics();
+
+  // Notify when all services have been discovered.
+  bool discovery_complete =
+      std::find_if_not(
+          gatt_services_.begin(), gatt_services_.end(),
+          [](std::pair<std::string, BluetoothRemoteGattService*> pair) {
+            BluetoothRemoteGattService* gatt_service = pair.second;
+            return static_cast<BluetoothRemoteGattServiceMac*>(gatt_service)
+                ->IsDiscoveryComplete();
+          }) == gatt_services_.end();
+  if (discovery_complete) {
+    SetGattServicesDiscoveryComplete(true);
+    adapter_->NotifyGattServicesDiscovered(this);
+  }
 }
 
 void BluetoothLowEnergyDeviceMac::DidModifyServices(
diff --git a/device/bluetooth/bluetooth_low_energy_peripheral_delegate.mm b/device/bluetooth/bluetooth_low_energy_peripheral_delegate.mm
index 7614429..19b628b 100644
--- a/device/bluetooth/bluetooth_low_energy_peripheral_delegate.mm
+++ b/device/bluetooth/bluetooth_low_energy_peripheral_delegate.mm
@@ -27,6 +27,10 @@
     device_mac_->DidDiscoverPrimaryServices(error);
   };
 
+  void DidDiscoverCharacteristics(CBService* service, NSError* error) {
+    device_mac_->DidDiscoverCharacteristics(service, error);
+  };
+
   CBPeripheral* GetPeripheral() { return device_mac_->GetPeripheral(); }
 
  private:
@@ -60,4 +64,10 @@
   bridge_->DidDiscoverPrimaryServices(error);
 }
 
+- (void)peripheral:(CBPeripheral*)peripheral
+    didDiscoverCharacteristicsForService:(CBService*)service
+                                   error:(NSError*)error {
+  bridge_->DidDiscoverCharacteristics(service, error);
+}
+
 @end
diff --git a/device/bluetooth/bluetooth_remote_gatt_characteristic_mac.h b/device/bluetooth/bluetooth_remote_gatt_characteristic_mac.h
new file mode 100644
index 0000000..57d0aad
--- /dev/null
+++ b/device/bluetooth/bluetooth_remote_gatt_characteristic_mac.h
@@ -0,0 +1,72 @@
+// 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 DEVICE_BLUETOOTH_BLUETOOTH_REMOTE_GATT_CHARACTERISTIC_MAC_H_
+#define DEVICE_BLUETOOTH_BLUETOOTH_REMOTE_GATT_CHARACTERISTIC_MAC_H_
+
+#include "device/bluetooth/bluetooth_remote_gatt_characteristic.h"
+
+#include "base/mac/scoped_nsobject.h"
+
+@class CBCharacteristic;
+
+namespace device {
+
+class BluetoothRemoteGattServiceMac;
+
+// The BluetoothRemoteGattCharacteristicMac class implements
+// BluetoothRemoteGattCharacteristic for remote GATT services on OS X.
+class DEVICE_BLUETOOTH_EXPORT BluetoothRemoteGattCharacteristicMac
+    : public BluetoothRemoteGattCharacteristic {
+ public:
+  BluetoothRemoteGattCharacteristicMac(
+      BluetoothRemoteGattServiceMac* gatt_service,
+      CBCharacteristic* cb_characteristic);
+  ~BluetoothRemoteGattCharacteristicMac() override;
+
+  // Override BluetoothGattCharacteristic methods.
+  std::string GetIdentifier() const override;
+  BluetoothUUID GetUUID() const override;
+  Properties GetProperties() const override;
+  Permissions GetPermissions() const override;
+
+  // Override BluetoothRemoteGattCharacteristic methods.
+  const std::vector<uint8_t>& GetValue() const override;
+  BluetoothRemoteGattService* GetService() const override;
+  bool IsNotifying() const override;
+  std::vector<BluetoothRemoteGattDescriptor*> GetDescriptors() const override;
+  BluetoothRemoteGattDescriptor* GetDescriptor(
+      const std::string& identifier) const override;
+  void StartNotifySession(const NotifySessionCallback& callback,
+                          const ErrorCallback& error_callback) override;
+  void ReadRemoteCharacteristic(const ValueCallback& callback,
+                                const ErrorCallback& error_callback) override;
+  void WriteRemoteCharacteristic(const std::vector<uint8_t>& new_value,
+                                 const base::Closure& callback,
+                                 const ErrorCallback& error_callback) override;
+
+  DISALLOW_COPY_AND_ASSIGN(BluetoothRemoteGattCharacteristicMac);
+
+ private:
+  friend class BluetoothRemoteGattServiceMac;
+  friend class BluetoothTestMac;
+
+  // Returns CoreBluetooth characteristic.
+  CBCharacteristic* GetCBCharacteristic() const;
+
+  // gatt_service_ owns instances of this class.
+  BluetoothRemoteGattServiceMac* gatt_service_;
+  // A characteristic from CBPeripheral.services.characteristics.
+  base::scoped_nsobject<CBCharacteristic> cb_characteristic_;
+  // Characteristic identifier.
+  std::string identifier_;
+  // Service UUID.
+  BluetoothUUID uuid_;
+  // Characteristic value.
+  std::vector<uint8_t> value_;
+};
+
+}  // namespace device
+
+#endif  // DEVICE_BLUETOOTH_BLUETOOTH_REMOTE_GATT_CHARACTERISTIC_MAC_H_
diff --git a/device/bluetooth/bluetooth_remote_gatt_characteristic_mac.mm b/device/bluetooth/bluetooth_remote_gatt_characteristic_mac.mm
new file mode 100644
index 0000000..e3ce08ec
--- /dev/null
+++ b/device/bluetooth/bluetooth_remote_gatt_characteristic_mac.mm
@@ -0,0 +1,151 @@
+// 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 "device/bluetooth/bluetooth_remote_gatt_characteristic_mac.h"
+
+#import <CoreBluetooth/CoreBluetooth.h>
+
+#include "device/bluetooth/bluetooth_adapter_mac.h"
+#include "device/bluetooth/bluetooth_remote_gatt_service_mac.h"
+
+namespace device {
+
+namespace {
+
+static BluetoothGattCharacteristic::Properties ConvertProperties(
+    CBCharacteristicProperties cb_property) {
+  BluetoothGattCharacteristic::Properties result =
+      BluetoothGattCharacteristic::PROPERTY_NONE;
+  if (cb_property & CBCharacteristicPropertyBroadcast) {
+    result |= BluetoothGattCharacteristic::PROPERTY_BROADCAST;
+  }
+  if (cb_property & CBCharacteristicPropertyRead) {
+    result |= BluetoothGattCharacteristic::PROPERTY_READ;
+  }
+  if (cb_property & CBCharacteristicPropertyWriteWithoutResponse) {
+    result |= BluetoothGattCharacteristic::PROPERTY_WRITE_WITHOUT_RESPONSE;
+  }
+  if (cb_property & CBCharacteristicPropertyWrite) {
+    result |= BluetoothGattCharacteristic::PROPERTY_WRITE;
+  }
+  if (cb_property & CBCharacteristicPropertyNotify) {
+    result |= BluetoothGattCharacteristic::PROPERTY_NOTIFY;
+  }
+  if (cb_property & CBCharacteristicPropertyIndicate) {
+    result |= BluetoothGattCharacteristic::PROPERTY_INDICATE;
+  }
+  if (cb_property & CBCharacteristicPropertyAuthenticatedSignedWrites) {
+    result |= BluetoothGattCharacteristic::PROPERTY_AUTHENTICATED_SIGNED_WRITES;
+  }
+  if (cb_property & CBCharacteristicPropertyExtendedProperties) {
+    result |= BluetoothGattCharacteristic::PROPERTY_EXTENDED_PROPERTIES;
+  }
+  if (cb_property & CBCharacteristicPropertyNotifyEncryptionRequired) {
+    // This property is used only in CBMutableCharacteristic
+    // (local characteristic). So this value should never appear for
+    // CBCharacteristic (remote characteristic). Apple is not able to send
+    // this value over BLE since it is not part of the spec.
+    DCHECK(false);
+    result |= BluetoothGattCharacteristic::PROPERTY_NOTIFY;
+  }
+  if (cb_property & CBCharacteristicPropertyIndicateEncryptionRequired) {
+    // This property is used only in CBMutableCharacteristic
+    // (local characteristic). So this value should never appear for
+    // CBCharacteristic (remote characteristic). Apple is not able to send
+    // this value over BLE since it is not part of the spec.
+    DCHECK(false);
+    result |= BluetoothGattCharacteristic::PROPERTY_INDICATE;
+  }
+  return result;
+}
+}  // namespace
+
+BluetoothRemoteGattCharacteristicMac::BluetoothRemoteGattCharacteristicMac(
+    BluetoothRemoteGattServiceMac* gatt_service,
+    CBCharacteristic* cb_characteristic)
+    : gatt_service_(gatt_service),
+      cb_characteristic_(cb_characteristic, base::scoped_policy::RETAIN) {
+  uuid_ = BluetoothAdapterMac::BluetoothUUIDWithCBUUID(
+      [cb_characteristic_.get() UUID]);
+  identifier_ =
+      [NSString stringWithFormat:@"%s-%p", uuid_.canonical_value().c_str(),
+                                 (void*)cb_characteristic_]
+          .UTF8String;
+}
+
+BluetoothRemoteGattCharacteristicMac::~BluetoothRemoteGattCharacteristicMac() {}
+
+std::string BluetoothRemoteGattCharacteristicMac::GetIdentifier() const {
+  return identifier_;
+}
+
+BluetoothUUID BluetoothRemoteGattCharacteristicMac::GetUUID() const {
+  return uuid_;
+}
+
+BluetoothGattCharacteristic::Properties
+BluetoothRemoteGattCharacteristicMac::GetProperties() const {
+  return ConvertProperties(cb_characteristic_.get().properties);
+}
+
+BluetoothGattCharacteristic::Permissions
+BluetoothRemoteGattCharacteristicMac::GetPermissions() const {
+  // Not supported for remote characteristics for CoreBluetooth.
+  NOTIMPLEMENTED();
+  return PERMISSION_NONE;
+}
+
+const std::vector<uint8_t>& BluetoothRemoteGattCharacteristicMac::GetValue()
+    const {
+  return value_;
+}
+
+BluetoothRemoteGattService* BluetoothRemoteGattCharacteristicMac::GetService()
+    const {
+  return static_cast<BluetoothRemoteGattService*>(gatt_service_);
+}
+
+bool BluetoothRemoteGattCharacteristicMac::IsNotifying() const {
+  NOTIMPLEMENTED();
+  return false;
+}
+
+std::vector<BluetoothRemoteGattDescriptor*>
+BluetoothRemoteGattCharacteristicMac::GetDescriptors() const {
+  NOTIMPLEMENTED();
+  return std::vector<BluetoothRemoteGattDescriptor*>();
+}
+
+BluetoothRemoteGattDescriptor*
+BluetoothRemoteGattCharacteristicMac::GetDescriptor(
+    const std::string& identifier) const {
+  NOTIMPLEMENTED();
+  return nullptr;
+}
+
+void BluetoothRemoteGattCharacteristicMac::StartNotifySession(
+    const NotifySessionCallback& callback,
+    const ErrorCallback& error_callback) {
+  NOTIMPLEMENTED();
+}
+
+void BluetoothRemoteGattCharacteristicMac::ReadRemoteCharacteristic(
+    const ValueCallback& callback,
+    const ErrorCallback& error_callback) {
+  NOTIMPLEMENTED();
+}
+
+void BluetoothRemoteGattCharacteristicMac::WriteRemoteCharacteristic(
+    const std::vector<uint8_t>& new_value,
+    const base::Closure& callback,
+    const ErrorCallback& error_callback) {
+  NOTIMPLEMENTED();
+}
+
+CBCharacteristic* BluetoothRemoteGattCharacteristicMac::GetCBCharacteristic()
+    const {
+  return cb_characteristic_.get();
+}
+
+}  // namespace device.
diff --git a/device/bluetooth/bluetooth_remote_gatt_characteristic_unittest.cc b/device/bluetooth/bluetooth_remote_gatt_characteristic_unittest.cc
index 64d6e40..cc21864 100644
--- a/device/bluetooth/bluetooth_remote_gatt_characteristic_unittest.cc
+++ b/device/bluetooth/bluetooth_remote_gatt_characteristic_unittest.cc
@@ -136,8 +136,12 @@
 };
 #endif
 
-#if defined(OS_ANDROID) || defined(OS_WIN)
+#if defined(OS_ANDROID) || defined(OS_MACOSX) || defined(OS_WIN)
 TEST_F(BluetoothRemoteGattCharacteristicTest, GetIdentifier) {
+  if (!PlatformSupportsLowEnergy()) {
+    LOG(WARNING) << "Low Energy Bluetooth unavailable, skipping unit test.";
+    return;
+  }
   InitWithFakeAdapter();
   StartLowEnergyDiscoverySession();
   // 2 devices to verify unique IDs across them.
@@ -197,10 +201,14 @@
 
   EXPECT_NE(char5->GetIdentifier(), char6->GetIdentifier());
 }
-#endif  // defined(OS_ANDROID) || defined(OS_WIN)
+#endif  // defined(OS_ANDROID) || defined(OS_MACOSX) || defined(OS_WIN)
 
-#if defined(OS_ANDROID) || defined(OS_WIN)
+#if defined(OS_ANDROID) || defined(OS_MACOSX) || defined(OS_WIN)
 TEST_F(BluetoothRemoteGattCharacteristicTest, GetUUID) {
+  if (!PlatformSupportsLowEnergy()) {
+    LOG(WARNING) << "Low Energy Bluetooth unavailable, skipping unit test.";
+    return;
+  }
   InitWithFakeAdapter();
   StartLowEnergyDiscoverySession();
   BluetoothDevice* device = SimulateLowEnergyDevice(3);
@@ -235,10 +243,14 @@
   EXPECT_EQ(uuid2, char2->GetUUID());
   EXPECT_EQ(uuid2, char3->GetUUID());
 }
-#endif  // defined(OS_ANDROID) || defined(OS_WIN)
+#endif  // defined(OS_ANDROID) || defined(OS_MACOSX) || defined(OS_WIN)
 
-#if defined(OS_ANDROID) || defined(OS_WIN)
+#if defined(OS_ANDROID) || defined(OS_MACOSX) || defined(OS_WIN)
 TEST_F(BluetoothRemoteGattCharacteristicTest, GetProperties) {
+  if (!PlatformSupportsLowEnergy()) {
+    LOG(WARNING) << "Low Energy Bluetooth unavailable, skipping unit test.";
+    return;
+  }
   InitWithFakeAdapter();
   StartLowEnergyDiscoverySession();
   BluetoothDevice* device = SimulateLowEnergyDevice(3);
@@ -263,17 +275,21 @@
   EXPECT_EQ(0, properties1);
   EXPECT_EQ(7, properties2);
 }
-#endif  // defined(OS_ANDROID) || defined(OS_WIN)
+#endif  // defined(OS_ANDROID) || defined(OS_MACOSX) || defined(OS_WIN)
 
-#if defined(OS_ANDROID) || defined(OS_WIN)
+#if defined(OS_ANDROID) || defined(OS_MACOSX) || defined(OS_WIN)
 // Tests GetService.
 TEST_F(BluetoothRemoteGattCharacteristicTest, GetService) {
+  if (!PlatformSupportsLowEnergy()) {
+    LOG(WARNING) << "Low Energy Bluetooth unavailable, skipping unit test.";
+    return;
+  }
   ASSERT_NO_FATAL_FAILURE(FakeCharacteristicBoilerplate());
 
   EXPECT_EQ(service_, characteristic1_->GetService());
   EXPECT_EQ(service_, characteristic2_->GetService());
 }
-#endif  // defined(OS_ANDROID) || defined(OS_WIN)
+#endif  // defined(OS_ANDROID) || defined(OS_MACOSX) || defined(OS_WIN)
 
 #if defined(OS_ANDROID) || defined(OS_WIN)
 // Tests ReadRemoteCharacteristic and GetValue with empty value buffer.
diff --git a/device/bluetooth/bluetooth_remote_gatt_service_mac.h b/device/bluetooth/bluetooth_remote_gatt_service_mac.h
index f5add19..4367949 100644
--- a/device/bluetooth/bluetooth_remote_gatt_service_mac.h
+++ b/device/bluetooth/bluetooth_remote_gatt_service_mac.h
@@ -9,15 +9,19 @@
 
 #include <vector>
 
+#include "base/containers/scoped_ptr_hash_map.h"
 #include "base/mac/scoped_nsobject.h"
 #include "device/bluetooth/bluetooth_remote_gatt_service.h"
 
+@class CBCharacteristic;
+@class CBPeripheral;
 @class CBService;
 
 namespace device {
 
+class BluetoothAdapterMac;
 class BluetoothDevice;
-class BluetoothGattCharacteristic;
+class BluetoothRemoteGattCharacteristicMac;
 class BluetoothLowEnergyDeviceMac;
 class BluetoothTestMac;
 
@@ -45,18 +49,39 @@
   friend BluetoothLowEnergyDeviceMac;
   friend BluetoothTestMac;
 
+  // Starts discovering characteristics by calling CoreBluetooth.
+  void DiscoverCharacteristics();
+  // Called by the BluetoothLowEnergyDeviceMac instance when the characteristics
+  // has been discovered.
+  void DidDiscoverCharacteristics();
+  // Returns true if the characteristics has been discovered.
+  bool IsDiscoveryComplete();
+
+  // Returns the mac adapter.
+  BluetoothAdapterMac* GetMacAdapter() const;
+  // Returns CBPeripheral.
+  CBPeripheral* GetCBPeripheral() const;
   // Returns CBService.
   CBService* GetService() const;
+  // Returns a remote characteristic based on the CBCharacteristic.
+  BluetoothRemoteGattCharacteristicMac* GetBluetoothRemoteGattCharacteristicMac(
+      CBCharacteristic* characteristic) const;
 
   // bluetooth_device_mac_ owns instances of this class.
   BluetoothLowEnergyDeviceMac* bluetooth_device_mac_;
   // A service from CBPeripheral.services.
   base::scoped_nsobject<CBService> service_;
+  // Map of characteristics, keyed by characteristic identifier.
+  std::unordered_map<std::string,
+                     std::unique_ptr<BluetoothRemoteGattCharacteristicMac>>
+      gatt_characteristic_macs_;
   bool is_primary_;
   // Service identifier.
   std::string identifier_;
   // Service UUID.
   BluetoothUUID uuid_;
+  // Is true if the characteristics has been discovered.
+  bool is_discovery_complete_;
 
   DISALLOW_COPY_AND_ASSIGN(BluetoothRemoteGattServiceMac);
 };
diff --git a/device/bluetooth/bluetooth_remote_gatt_service_mac.mm b/device/bluetooth/bluetooth_remote_gatt_service_mac.mm
index 2e84070..f2b17d7 100644
--- a/device/bluetooth/bluetooth_remote_gatt_service_mac.mm
+++ b/device/bluetooth/bluetooth_remote_gatt_service_mac.mm
@@ -8,8 +8,10 @@
 #include <vector>
 
 #include "base/logging.h"
+#include "base/memory/ptr_util.h"
 #include "device/bluetooth/bluetooth_adapter_mac.h"
 #include "device/bluetooth/bluetooth_low_energy_device_mac.h"
+#include "device/bluetooth/bluetooth_remote_gatt_characteristic_mac.h"
 #include "device/bluetooth/bluetooth_uuid.h"
 
 namespace device {
@@ -20,7 +22,8 @@
     bool is_primary)
     : bluetooth_device_mac_(bluetooth_device_mac),
       service_(service, base::scoped_policy::RETAIN),
-      is_primary_(is_primary) {
+      is_primary_(is_primary),
+      is_discovery_complete_(false) {
   uuid_ = BluetoothAdapterMac::BluetoothUUIDWithCBUUID([service_.get() UUID]);
   identifier_ =
       [NSString stringWithFormat:@"%s-%p", uuid_.canonical_value().c_str(),
@@ -48,8 +51,13 @@
 
 std::vector<BluetoothRemoteGattCharacteristic*>
 BluetoothRemoteGattServiceMac::GetCharacteristics() const {
-  NOTIMPLEMENTED();
-  return std::vector<BluetoothRemoteGattCharacteristic*>();
+  std::vector<BluetoothRemoteGattCharacteristic*> gatt_characteristics;
+  for (const auto& iter : gatt_characteristic_macs_) {
+    BluetoothRemoteGattCharacteristic* gatt_characteristic =
+        static_cast<BluetoothRemoteGattCharacteristic*>(iter.second.get());
+    gatt_characteristics.push_back(gatt_characteristic);
+  }
+  return gatt_characteristics;
 }
 
 std::vector<BluetoothRemoteGattService*>
@@ -61,12 +69,88 @@
 BluetoothRemoteGattCharacteristic*
 BluetoothRemoteGattServiceMac::GetCharacteristic(
     const std::string& identifier) const {
-  NOTIMPLEMENTED();
-  return nullptr;
+  auto searched_pair = gatt_characteristic_macs_.find(identifier);
+  if (searched_pair == gatt_characteristic_macs_.end()) {
+    return nullptr;
+  }
+  return static_cast<BluetoothRemoteGattCharacteristic*>(
+      searched_pair->second.get());
+}
+
+void BluetoothRemoteGattServiceMac::DiscoverCharacteristics() {
+  is_discovery_complete_ = false;
+  [GetCBPeripheral() discoverCharacteristics:nil forService:GetService()];
+}
+
+void BluetoothRemoteGattServiceMac::DidDiscoverCharacteristics() {
+  DCHECK(!is_discovery_complete_);
+  std::unordered_set<std::string> characteristic_identifier_to_remove;
+  for (const auto& iter : gatt_characteristic_macs_) {
+    characteristic_identifier_to_remove.insert(iter.first);
+  }
+
+  for (CBCharacteristic* cb_characteristic in GetService().characteristics) {
+    BluetoothRemoteGattCharacteristicMac* gatt_characteristic_mac =
+        GetBluetoothRemoteGattCharacteristicMac(cb_characteristic);
+    if (gatt_characteristic_mac) {
+      const std::string& identifier = gatt_characteristic_mac->GetIdentifier();
+      characteristic_identifier_to_remove.erase(identifier);
+      continue;
+    }
+    gatt_characteristic_mac =
+        new BluetoothRemoteGattCharacteristicMac(this, cb_characteristic);
+    const std::string& identifier = gatt_characteristic_mac->GetIdentifier();
+    auto result_iter = gatt_characteristic_macs_.insert(
+        {identifier, base::WrapUnique(gatt_characteristic_mac)});
+    DCHECK(result_iter.second);
+    GetMacAdapter()->NotifyGattCharacteristicAdded(gatt_characteristic_mac);
+  }
+
+  for (const std::string& identifier : characteristic_identifier_to_remove) {
+    auto pair_to_remove = gatt_characteristic_macs_.find(identifier);
+    std::unique_ptr<BluetoothRemoteGattCharacteristicMac>
+        characteristic_to_remove;
+    pair_to_remove->second.swap(characteristic_to_remove);
+    gatt_characteristic_macs_.erase(pair_to_remove);
+    GetMacAdapter()->NotifyGattCharacteristicRemoved(
+        characteristic_to_remove.get());
+  }
+  is_discovery_complete_ = true;
+  GetMacAdapter()->NotifyGattServiceChanged(this);
+}
+
+bool BluetoothRemoteGattServiceMac::IsDiscoveryComplete() {
+  return is_discovery_complete_;
+}
+
+BluetoothAdapterMac* BluetoothRemoteGattServiceMac::GetMacAdapter() const {
+  return bluetooth_device_mac_->GetMacAdapter();
+}
+
+CBPeripheral* BluetoothRemoteGattServiceMac::GetCBPeripheral() const {
+  return bluetooth_device_mac_->GetPeripheral();
 }
 
 CBService* BluetoothRemoteGattServiceMac::GetService() const {
   return service_.get();
 }
 
+BluetoothRemoteGattCharacteristicMac*
+BluetoothRemoteGattServiceMac::GetBluetoothRemoteGattCharacteristicMac(
+    CBCharacteristic* characteristic) const {
+  auto found = std::find_if(
+      gatt_characteristic_macs_.begin(), gatt_characteristic_macs_.end(),
+      [characteristic](
+          const std::pair<
+              const std::string,
+              std::unique_ptr<BluetoothRemoteGattCharacteristicMac>>& pair) {
+        return pair.second->GetCBCharacteristic() == characteristic;
+      });
+  if (found == gatt_characteristic_macs_.end()) {
+    return nullptr;
+  } else {
+    return found->second.get();
+  }
+}
+
 }  // namespace device
diff --git a/device/bluetooth/bluetooth_remote_gatt_service_unittest.cc b/device/bluetooth/bluetooth_remote_gatt_service_unittest.cc
index 4e8c00c..0454f60 100644
--- a/device/bluetooth/bluetooth_remote_gatt_service_unittest.cc
+++ b/device/bluetooth/bluetooth_remote_gatt_service_unittest.cc
@@ -23,7 +23,7 @@
 class BluetoothRemoteGattServiceTest : public BluetoothTest {};
 #endif
 
-#if defined(OS_ANDROID) || defined(OS_WIN) || defined(OS_MACOSX)
+#if defined(OS_ANDROID) || defined(OS_MACOSX) || defined(OS_WIN)
 TEST_F(BluetoothRemoteGattServiceTest, GetIdentifier) {
   if (!PlatformSupportsLowEnergy()) {
     LOG(WARNING) << "Low Energy Bluetooth unavailable, skipping unit test.";
@@ -63,9 +63,9 @@
 
   EXPECT_NE(service3->GetIdentifier(), service4->GetIdentifier());
 }
-#endif  // defined(OS_ANDROID) || defined(OS_WIN) || defined(OS_MACOSX)
+#endif  // defined(OS_ANDROID) || defined(OS_MACOSX) || defined(OS_WIN)
 
-#if defined(OS_ANDROID) || defined(OS_WIN) || defined(OS_MACOSX)
+#if defined(OS_ANDROID) || defined(OS_MACOSX) || defined(OS_WIN)
 TEST_F(BluetoothRemoteGattServiceTest, GetUUID) {
   if (!PlatformSupportsLowEnergy()) {
     LOG(WARNING) << "Low Energy Bluetooth unavailable, skipping unit test.";
@@ -89,9 +89,9 @@
   EXPECT_EQ(uuid, device->GetGattServices()[0]->GetUUID());
   EXPECT_EQ(uuid, device->GetGattServices()[1]->GetUUID());
 }
-#endif  // defined(OS_ANDROID) || defined(OS_WIN) || defined(OS_MACOSX)
+#endif  // defined(OS_ANDROID) || defined(OS_MACOSX) || defined(OS_WIN)
 
-#if defined(OS_ANDROID) || defined(OS_WIN)
+#if defined(OS_ANDROID) || defined(OS_MACOSX) || defined(OS_WIN)
 TEST_F(BluetoothRemoteGattServiceTest, GetCharacteristics_FindNone) {
   if (!PlatformSupportsLowEnergy()) {
     LOG(WARNING) << "Low Energy Bluetooth unavailable, skipping unit test.";
@@ -112,11 +112,15 @@
 
   EXPECT_EQ(0u, service->GetCharacteristics().size());
 }
-#endif  // defined(OS_ANDROID) || defined(OS_WIN)
+#endif  // defined(OS_ANDROID) || defined(OS_MACOSX) || defined(OS_WIN)
 
-#if defined(OS_ANDROID) || defined(OS_WIN)
+#if defined(OS_ANDROID) || defined(OS_MACOSX) || defined(OS_WIN)
 TEST_F(BluetoothRemoteGattServiceTest,
        GetCharacteristics_and_GetCharacteristic) {
+  if (!PlatformSupportsLowEnergy()) {
+    LOG(WARNING) << "Low Energy Bluetooth unavailable, skipping unit test.";
+    return;
+  }
   InitWithFakeAdapter();
   StartLowEnergyDiscoverySession();
   BluetoothDevice* device = SimulateLowEnergyDevice(3);
@@ -161,11 +165,15 @@
   EXPECT_EQ(service->GetCharacteristic(char_id1),
             service->GetCharacteristic(char_id1));
 }
-#endif  // defined(OS_ANDROID) || defined(OS_WIN)
+#endif  // defined(OS_ANDROID) || defined(OS_MACOSX) || defined(OS_WIN)
 
-#if defined(OS_WIN)
+#if defined(OS_MACOSX) || defined(OS_WIN)
 TEST_F(BluetoothRemoteGattServiceTest,
        GetCharacteristic_CharacteristicRemoved) {
+  if (!PlatformSupportsLowEnergy()) {
+    LOG(WARNING) << "Low Energy Bluetooth unavailable, skipping unit test.";
+    return;
+  }
   InitWithFakeAdapter();
   StartLowEnergyDiscoverySession();
   BluetoothDevice* device = SimulateLowEnergyDevice(3);
@@ -216,9 +224,16 @@
   EXPECT_FALSE(service->GetCharacteristic(removed_char));
   EXPECT_EQ(0u, service->GetCharacteristics().size());
 
+#if defined(OS_MACOSX)
+  // SimulateGattServicesDiscovered
+  // 4 * SimulateGattCharacteristic
+  // 4 * SimulateGattCharacteristicRemoved
+  EXPECT_EQ(9, observer.gatt_service_changed_count());
+#else  // defined(OS_MACOSX)
   EXPECT_EQ(4, observer.gatt_service_changed_count());
+#endif  // defined(OS_MACOSX)
 }
-#endif  // defined(OS_WIN)
+#endif  //  defined(OS_MACOSX) || defined(OS_WIN)
 
 #if defined(OS_WIN) || defined(OS_MACOSX)
 TEST_F(BluetoothRemoteGattServiceTest, SimulateGattServiceRemove) {
diff --git a/device/bluetooth/test/bluetooth_test_mac.h b/device/bluetooth/test/bluetooth_test_mac.h
index f725bba3..a323131c 100644
--- a/device/bluetooth/test/bluetooth_test_mac.h
+++ b/device/bluetooth/test/bluetooth_test_mac.h
@@ -10,6 +10,12 @@
 #include "base/test/test_simple_task_runner.h"
 #include "device/bluetooth/test/bluetooth_test.h"
 
+#if __OBJC__
+@class MockCBPeripheral;
+#else   // __OBJC__
+class MockCBPeripheral;
+#endif  // __OBJC__
+
 namespace device {
 
 class BluetoothAdapterMac;
@@ -41,6 +47,12 @@
       BluetoothDevice* device,
       const std::vector<std::string>& uuids) override;
   void SimulateGattServiceRemoved(BluetoothRemoteGattService* service) override;
+  void SimulateGattCharacteristic(BluetoothRemoteGattService* service,
+                                  const std::string& uuid,
+                                  int properties) override;
+  void SimulateGattCharacteristicRemoved(
+      BluetoothRemoteGattService* service,
+      BluetoothRemoteGattCharacteristic* characteristic) override;
 
   // Callback for the bluetooth central manager mock.
   void OnFakeBluetoothDeviceConnectGattCalled();
@@ -52,6 +64,10 @@
  protected:
   class ScopedMockCentralManager;
 
+  // Returns MockCBPeripheral from BluetoothRemoteGattService.
+  MockCBPeripheral* GetMockCBPeripheral(
+      BluetoothRemoteGattService* service) const;
+
   // Utility function for finding CBUUIDs with relatively nice SHA256 hashes.
   std::string FindCBUUIDForHashTarget();
 
diff --git a/device/bluetooth/test/bluetooth_test_mac.mm b/device/bluetooth/test/bluetooth_test_mac.mm
index cc4b8d8..41ca2742 100644
--- a/device/bluetooth/test/bluetooth_test_mac.mm
+++ b/device/bluetooth/test/bluetooth_test_mac.mm
@@ -10,8 +10,11 @@
 #include "base/strings/string_number_conversions.h"
 #include "build/build_config.h"
 #include "device/bluetooth/bluetooth_adapter_mac.h"
+#include "device/bluetooth/bluetooth_remote_gatt_characteristic_mac.h"
 #include "device/bluetooth/bluetooth_remote_gatt_service_mac.h"
+#include "device/bluetooth/test/mock_bluetooth_cbcharacteristic_mac.h"
 #include "device/bluetooth/test/mock_bluetooth_cbperipheral_mac.h"
+#include "device/bluetooth/test/mock_bluetooth_cbservice_mac.h"
 #include "device/bluetooth/test/mock_bluetooth_central_manager_mac.h"
 #include "device/bluetooth/test/test_bluetooth_adapter_observer.h"
 #include "third_party/ocmock/OCMock/OCMock.h"
@@ -21,6 +24,18 @@
 using base::mac::ObjCCast;
 using base::scoped_nsobject;
 
+namespace {
+
+void DidDiscoverServices(MockCBPeripheral* peripheral_mock) {
+  [peripheral_mock didDiscoverServicesWithError:nil];
+  // BluetoothLowEnergyDeviceMac is expected to call
+  // -[CBPeripheral discoverCharacteristics:forService:] for each services,
+  // so -[<CBPeripheralDelegate peripheral:didDiscoverCharacteristicsForService:
+  // error:] needs to be called
+  [peripheral_mock didDiscoverCharactericsForAllServices];
+}
+}  // namespace
+
 namespace device {
 
 // This class hides Objective-C from bluetooth_test_mac.h.
@@ -237,7 +252,7 @@
     [services addObject:cb_service_uuid];
   }
   [peripheral_mock addServices:services];
-  [peripheral_mock didDiscoverServicesWithError:nil];
+  DidDiscoverServices(peripheral_mock);
 }
 
 void BluetoothTestMac::SimulateGattServiceRemoved(
@@ -252,7 +267,44 @@
   CBPeripheral* peripheral = device_mac->GetPeripheral();
   MockCBPeripheral* peripheral_mock = ObjCCast<MockCBPeripheral>(peripheral);
   [peripheral_mock removeService:mac_gatt_service->GetService()];
-  [peripheral_mock didDiscoverServicesWithError:nil];
+  // After -[MockCBPeripheral removeService:], BluetoothLowEnergyDeviceMac is
+  // expected to call -[CBPeripheral discoverServices:]
+  DidDiscoverServices(peripheral_mock);
+}
+
+void BluetoothTestMac::SimulateGattCharacteristic(
+    BluetoothRemoteGattService* service,
+    const std::string& uuid,
+    int properties) {
+  BluetoothRemoteGattServiceMac* mac_gatt_service =
+      static_cast<BluetoothRemoteGattServiceMac*>(service);
+  CBService* cb_service = mac_gatt_service->GetService();
+  MockCBService* service_mock = ObjCCast<MockCBService>(cb_service);
+  CBUUID* cb_uuid = [CBUUID UUIDWithString:@(uuid.c_str())];
+  [service_mock addCharacteristicWithUUID:cb_uuid properties:properties];
+  MockCBPeripheral* peripheral_mock = GetMockCBPeripheral(service);
+  [peripheral_mock didModifyServices:@[]];
+  // After -[MockCBPeripheral didModifyServices:], BluetoothLowEnergyDeviceMac
+  // is expected to call -[CBPeripheral discoverServices:]
+  DidDiscoverServices(peripheral_mock);
+}
+
+void BluetoothTestMac::SimulateGattCharacteristicRemoved(
+    BluetoothRemoteGattService* service,
+    BluetoothRemoteGattCharacteristic* characteristic) {
+  MockCBPeripheral* peripheral_mock = GetMockCBPeripheral(service);
+  BluetoothRemoteGattServiceMac* mac_gatt_service =
+      static_cast<BluetoothRemoteGattServiceMac*>(service);
+  CBService* cb_service = mac_gatt_service->GetService();
+  MockCBService* service_mock = ObjCCast<MockCBService>(cb_service);
+  BluetoothRemoteGattCharacteristicMac* characteristic_mac =
+      static_cast<BluetoothRemoteGattCharacteristicMac*>(characteristic);
+  CBCharacteristic* cb_characteristic =
+      characteristic_mac->GetCBCharacteristic();
+  MockCBCharacteristic* characteristic_mock =
+      ObjCCast<MockCBCharacteristic>(cb_characteristic);
+  [service_mock removeCharacteristicMock:characteristic_mock];
+  DidDiscoverServices(peripheral_mock);
 }
 
 void BluetoothTestMac::OnFakeBluetoothDeviceConnectGattCalled() {
@@ -267,6 +319,15 @@
   gatt_discovery_attempts_++;
 }
 
+MockCBPeripheral* BluetoothTestMac::GetMockCBPeripheral(
+    BluetoothRemoteGattService* service) const {
+  BluetoothDevice* device = service->GetDevice();
+  BluetoothLowEnergyDeviceMac* device_mac =
+      static_cast<BluetoothLowEnergyDeviceMac*>(device);
+  CBPeripheral* cb_peripheral = device_mac->GetPeripheral();
+  return ObjCCast<MockCBPeripheral>(cb_peripheral);
+}
+
 // Utility function for generating new (CBUUID, address) pairs where CBUUID
 // hashes to address. For use when adding a new device address to the testing
 // suite because CoreBluetooth peripherals have CBUUIDs in place of addresses,
diff --git a/device/bluetooth/test/mock_bluetooth_cbcharacteristic_mac.h b/device/bluetooth/test/mock_bluetooth_cbcharacteristic_mac.h
new file mode 100644
index 0000000..0b31513
--- /dev/null
+++ b/device/bluetooth/test/mock_bluetooth_cbcharacteristic_mac.h
@@ -0,0 +1,23 @@
+// 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 DEVICE_BLUETOOTH_TEST_MOCK_BLUETOOTH_CBCHARACTERISTIC_MAC_H_
+#define DEVICE_BLUETOOTH_TEST_MOCK_BLUETOOTH_CBCHARACTERISTIC_MAC_H_
+
+#include "base/mac/sdk_forward_declarations.h"
+#include "build/build_config.h"
+
+#import <CoreBluetooth/CoreBluetooth.h>
+
+// This class mocks the behavior of a CBCharacteristic.
+@interface MockCBCharacteristic : NSObject
+
+@property(readonly, nonatomic) CBUUID* UUID;
+@property(readonly, nonatomic) CBCharacteristic* characteristic;
+
+- (instancetype)initWithCBUUID:(CBUUID*)uuid properties:(int)properties;
+
+@end
+
+#endif  // DEVICE_BLUETOOTH_TEST_MOCK_BLUETOOTH_CBCHARACTERISTIC_MAC_H_
diff --git a/device/bluetooth/test/mock_bluetooth_cbcharacteristic_mac.mm b/device/bluetooth/test/mock_bluetooth_cbcharacteristic_mac.mm
new file mode 100644
index 0000000..97d260a
--- /dev/null
+++ b/device/bluetooth/test/mock_bluetooth_cbcharacteristic_mac.mm
@@ -0,0 +1,138 @@
+// 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 "device/bluetooth/test/mock_bluetooth_cbcharacteristic_mac.h"
+
+#include "base/mac/foundation_util.h"
+#include "base/mac/scoped_nsobject.h"
+#include "device/bluetooth/bluetooth_gatt_characteristic.h"
+
+using base::mac::ObjCCast;
+using base::scoped_nsobject;
+
+namespace device {
+
+namespace {
+
+CBCharacteristicProperties AddCBCharacteristicProperties(
+    CBCharacteristicProperties value1,
+    CBCharacteristicProperties value2) {
+  return static_cast<CBCharacteristicProperties>(value1 | value2);
+}
+
+CBCharacteristicProperties GattCharacteristicPropertyToCBCharacteristicProperty(
+    BluetoothGattCharacteristic::Properties gatt_property) {
+  CBCharacteristicProperties result =
+      static_cast<CBCharacteristicProperties>(0);
+  if (gatt_property & BluetoothGattCharacteristic::PROPERTY_BROADCAST) {
+    result = AddCBCharacteristicProperties(result,
+                                           CBCharacteristicPropertyBroadcast);
+  }
+  if (gatt_property & BluetoothGattCharacteristic::PROPERTY_READ) {
+    result =
+        AddCBCharacteristicProperties(result, CBCharacteristicPropertyRead);
+  }
+  if (gatt_property &
+      BluetoothGattCharacteristic::PROPERTY_WRITE_WITHOUT_RESPONSE) {
+    result = AddCBCharacteristicProperties(
+        result, CBCharacteristicPropertyWriteWithoutResponse);
+  }
+  if (gatt_property & BluetoothGattCharacteristic::PROPERTY_WRITE) {
+    result =
+        AddCBCharacteristicProperties(result, CBCharacteristicPropertyWrite);
+  }
+  if (gatt_property & BluetoothGattCharacteristic::PROPERTY_NOTIFY) {
+    result =
+        AddCBCharacteristicProperties(result, CBCharacteristicPropertyNotify);
+  }
+  if (gatt_property & BluetoothGattCharacteristic::PROPERTY_INDICATE) {
+    result =
+        AddCBCharacteristicProperties(result, CBCharacteristicPropertyIndicate);
+  }
+  if (gatt_property &
+      BluetoothGattCharacteristic::PROPERTY_AUTHENTICATED_SIGNED_WRITES) {
+    result = AddCBCharacteristicProperties(
+        result, CBCharacteristicPropertyAuthenticatedSignedWrites);
+  }
+  if (gatt_property &
+      BluetoothGattCharacteristic::PROPERTY_EXTENDED_PROPERTIES) {
+    result = AddCBCharacteristicProperties(
+        result, CBCharacteristicPropertyExtendedProperties);
+  }
+  if (gatt_property & BluetoothGattCharacteristic::PROPERTY_RELIABLE_WRITE) {
+  }
+  if (gatt_property &
+      BluetoothGattCharacteristic::PROPERTY_WRITABLE_AUXILIARIES) {
+  }
+  if (gatt_property & BluetoothGattCharacteristic::PROPERTY_READ_ENCRYPTED) {
+    result =
+        AddCBCharacteristicProperties(result, CBCharacteristicPropertyRead);
+  }
+  if (gatt_property & BluetoothGattCharacteristic::PROPERTY_WRITE_ENCRYPTED) {
+    result =
+        AddCBCharacteristicProperties(result, CBCharacteristicPropertyWrite);
+  }
+  if (gatt_property &
+      BluetoothGattCharacteristic::PROPERTY_READ_ENCRYPTED_AUTHENTICATED) {
+    result =
+        AddCBCharacteristicProperties(result, CBCharacteristicPropertyRead);
+  }
+  if (gatt_property &
+      BluetoothGattCharacteristic::PROPERTY_WRITE_ENCRYPTED_AUTHENTICATED) {
+    result =
+        AddCBCharacteristicProperties(result, CBCharacteristicPropertyWrite);
+  }
+  return result;
+}
+}  // namespace
+}  // device
+
+@interface MockCBCharacteristic () {
+  scoped_nsobject<CBUUID> _UUID;
+  CBCharacteristicProperties _cb_properties;
+}
+@end
+
+@implementation MockCBCharacteristic
+
+- (instancetype)initWithCBUUID:(CBUUID*)uuid properties:(int)properties {
+  self = [super init];
+  if (self) {
+    _UUID.reset([uuid retain]);
+    _cb_properties =
+        device::GattCharacteristicPropertyToCBCharacteristicProperty(
+            properties);
+  }
+  return self;
+}
+
+- (BOOL)isKindOfClass:(Class)aClass {
+  if (aClass == [CBCharacteristic class] ||
+      [aClass isSubclassOfClass:[CBCharacteristic class]]) {
+    return YES;
+  }
+  return [super isKindOfClass:aClass];
+}
+
+- (BOOL)isMemberOfClass:(Class)aClass {
+  if (aClass == [CBCharacteristic class] ||
+      [aClass isSubclassOfClass:[CBCharacteristic class]]) {
+    return YES;
+  }
+  return [super isKindOfClass:aClass];
+}
+
+- (CBUUID*)UUID {
+  return _UUID.get();
+}
+
+- (CBCharacteristic*)characteristic {
+  return ObjCCast<CBCharacteristic>(self);
+}
+
+- (CBCharacteristicProperties)properties {
+  return _cb_properties;
+}
+
+@end
\ No newline at end of file
diff --git a/device/bluetooth/test/mock_bluetooth_cbperipheral_mac.h b/device/bluetooth/test/mock_bluetooth_cbperipheral_mac.h
index 3e8e1ed..fdc30dbe 100644
--- a/device/bluetooth/test/mock_bluetooth_cbperipheral_mac.h
+++ b/device/bluetooth/test/mock_bluetooth_cbperipheral_mac.h
@@ -38,6 +38,8 @@
 - (void)addServices:(NSArray*)services;
 - (void)didDiscoverServicesWithError:(NSError*)error;
 - (void)removeService:(CBService*)uuid;
+- (void)didDiscoverCharactericsForAllServices;
+- (void)didModifyServices:(NSArray*)invalidatedServices;
 
 @end
 
diff --git a/device/bluetooth/test/mock_bluetooth_cbperipheral_mac.mm b/device/bluetooth/test/mock_bluetooth_cbperipheral_mac.mm
index a4fa499..3f36cc7 100644
--- a/device/bluetooth/test/mock_bluetooth_cbperipheral_mac.mm
+++ b/device/bluetooth/test/mock_bluetooth_cbperipheral_mac.mm
@@ -84,6 +84,11 @@
   if (_bluetoothTestMac) {
     _bluetoothTestMac->OnFakeBluetoothServiceDiscovery();
   }
+  [_delegate peripheral:self.peripheral didDiscoverServices:nil];
+}
+
+- (void)discoverCharacteristics:(NSArray*)characteristics
+                     forService:(CBService*)service {
 }
 
 - (void)removeAllServices {
@@ -95,8 +100,10 @@
     _services.reset([[NSMutableArray alloc] init]);
   }
   for (CBUUID* uuid in services) {
-    base::scoped_nsobject<MockCBService> service(
-        [[MockCBService alloc] initWithCBUUID:uuid primary:YES]);
+    base::scoped_nsobject<MockCBService> service([[MockCBService alloc]
+        initWithPeripheral:self.peripheral
+                    CBUUID:uuid
+                   primary:YES]);
     [_services.get() addObject:service.get().service];
   }
 }
@@ -110,6 +117,18 @@
                                                    base::scoped_policy::RETAIN);
   DCHECK(serviceToRemove);
   [_services.get() removeObject:serviceToRemove];
+  [self didModifyServices:@[ serviceToRemove ]];
+}
+
+- (void)didDiscoverCharactericsForAllServices {
+  for (CBService* service in _services.get()) {
+    [_delegate peripheral:self.peripheral
+        didDiscoverCharacteristicsForService:service
+                                       error:nil];
+  }
+}
+
+- (void)didModifyServices:(NSArray*)invalidatedServices {
   // -[CBPeripheralDelegate peripheral:didModifyServices:] is only available
   // with 10.9. It is safe to call this method (even if chrome is running on
   // 10.8) since WebBluetooth is enabled only with 10.10.
@@ -117,7 +136,7 @@
       [_delegate respondsToSelector:@selector(peripheral:didModifyServices:)]);
 #pragma clang diagnostic push
 #pragma clang diagnostic ignored "-Wpartial-availability"
-  [_delegate peripheral:self.peripheral didModifyServices:@[ serviceToRemove ]];
+  [_delegate peripheral:self.peripheral didModifyServices:invalidatedServices];
 #pragma clang diagnostic pop
 }
 
diff --git a/device/bluetooth/test/mock_bluetooth_cbservice_mac.h b/device/bluetooth/test/mock_bluetooth_cbservice_mac.h
index 5533706..fd0867d 100644
--- a/device/bluetooth/test/mock_bluetooth_cbservice_mac.h
+++ b/device/bluetooth/test/mock_bluetooth_cbservice_mac.h
@@ -10,6 +10,8 @@
 
 #import <CoreBluetooth/CoreBluetooth.h>
 
+@class MockCBCharacteristic;
+
 // This class mocks the behavior of a CBService.
 @interface MockCBService : NSObject
 
@@ -17,7 +19,13 @@
 @property(readonly, nonatomic) BOOL isPrimary;
 @property(readonly, nonatomic) CBService* service;
 
-- (instancetype)initWithCBUUID:(CBUUID*)uuid primary:(BOOL)isPrimary;
+- (instancetype)initWithPeripheral:(CBPeripheral*)peripheral
+                            CBUUID:(CBUUID*)uuid
+                           primary:(BOOL)isPrimary;
+
+// Creates and adds a mock characteristic.
+- (void)addCharacteristicWithUUID:(CBUUID*)cb_uuid properties:(int)properties;
+- (void)removeCharacteristicMock:(MockCBCharacteristic*)characteristic_mock;
 
 @end
 
diff --git a/device/bluetooth/test/mock_bluetooth_cbservice_mac.mm b/device/bluetooth/test/mock_bluetooth_cbservice_mac.mm
index 48337c8e..4e06976 100644
--- a/device/bluetooth/test/mock_bluetooth_cbservice_mac.mm
+++ b/device/bluetooth/test/mock_bluetooth_cbservice_mac.mm
@@ -7,13 +7,17 @@
 #include "base/mac/foundation_util.h"
 #include "base/mac/scoped_nsobject.h"
 #include "device/bluetooth/test/bluetooth_test.h"
+#include "device/bluetooth/test/mock_bluetooth_cbcharacteristic_mac.h"
 
 using base::mac::ObjCCast;
 using base::scoped_nsobject;
 
 @interface MockCBService () {
+  // Owner of this instance.
+  CBPeripheral* _peripheral;
   scoped_nsobject<CBUUID> _UUID;
   BOOL _primary;
+  scoped_nsobject<NSMutableArray> _characteristics;
 }
 
 @end
@@ -22,11 +26,15 @@
 
 @synthesize isPrimary = _primary;
 
-- (instancetype)initWithCBUUID:(CBUUID*)uuid primary:(BOOL)isPrimary {
+- (instancetype)initWithPeripheral:(CBPeripheral*)peripheral
+                            CBUUID:(CBUUID*)uuid
+                           primary:(BOOL)isPrimary {
   self = [super init];
   if (self) {
     _UUID.reset([uuid retain]);
     _primary = isPrimary;
+    _peripheral = peripheral;
+    _characteristics.reset([[NSMutableArray alloc] init]);
   }
   return self;
 }
@@ -47,12 +55,31 @@
   return [super isKindOfClass:aClass];
 }
 
+- (CBPeripheral*)peripheral {
+  return _peripheral;
+}
+
 - (CBUUID*)UUID {
   return _UUID.get();
 }
 
+- (void)addCharacteristicWithUUID:(CBUUID*)cb_uuid properties:(int)properties {
+  scoped_nsobject<MockCBCharacteristic> characteristic_mock(
+      [[MockCBCharacteristic alloc] initWithCBUUID:cb_uuid
+                                        properties:properties]);
+  [_characteristics.get() addObject:characteristic_mock];
+}
+
+- (void)removeCharacteristicMock:(MockCBCharacteristic*)characteristic_mock {
+  [_characteristics.get() removeObject:characteristic_mock];
+}
+
 - (CBService*)service {
   return ObjCCast<CBService>(self);
 }
 
+- (NSArray*)characteristics {
+  return _characteristics.get();
+}
+
 @end
diff --git a/device/device_tests.gyp b/device/device_tests.gyp
index 92c57f7..8a9ee0a 100644
--- a/device/device_tests.gyp
+++ b/device/device_tests.gyp
@@ -64,6 +64,8 @@
         'bluetooth/test/bluetooth_test_mac.mm',
         'bluetooth/test/bluetooth_test_win.h',
         'bluetooth/test/bluetooth_test_win.cc',
+        'bluetooth/test/mock_bluetooth_cbcharacteristic_mac.mm',
+        'bluetooth/test/mock_bluetooth_cbcharacteristic_mac.h',
         'bluetooth/test/mock_bluetooth_cbperipheral_mac.mm',
         'bluetooth/test/mock_bluetooth_cbperipheral_mac.h',
         'bluetooth/test/mock_bluetooth_cbservice_mac.mm',
diff --git a/extensions/BUILD.gn b/extensions/BUILD.gn
index 21c24ba6..e13999a 100644
--- a/extensions/BUILD.gn
+++ b/extensions/BUILD.gn
@@ -215,7 +215,6 @@
 
   data = [
     "test/data/",
-    "//net/data/",
     "//net/tools/testserver/",
     "//third_party/pyftpdlib/",
     "//third_party/pywebsocket/",
@@ -242,6 +241,7 @@
     "//device/usb:test_support",
     "//mojo/edk/js",
     "//mojo/public/cpp/bindings",
+    "//net:test_support",
     "//testing/gmock",
     "//testing/gtest",
   ]
diff --git a/google_apis/gcm/tools/mcs_probe.cc b/google_apis/gcm/tools/mcs_probe.cc
index d6ecb39..cf078e6 100644
--- a/google_apis/gcm/tools/mcs_probe.cc
+++ b/google_apis/gcm/tools/mcs_probe.cc
@@ -414,8 +414,7 @@
   session_params.transport_security_state = transport_security_state_.get();
   session_params.ssl_config_service = new net::SSLConfigServiceDefaults();
   session_params.http_auth_handler_factory = http_auth_handler_factory_.get();
-  session_params.http_server_properties =
-      http_server_properties_->GetWeakPtr();
+  session_params.http_server_properties = http_server_properties_.get();
   session_params.host_mapping_rules = host_mapping_rules_.get();
   session_params.ignore_certificate_errors = true;
   session_params.testing_fixed_http_port = 0;
diff --git a/infra/config/cq.cfg b/infra/config/cq.cfg
index cbd3508..defa1527 100644
--- a/infra/config/cq.cfg
+++ b/infra/config/cq.cfg
@@ -56,7 +56,6 @@
       builders { name: "linux_chromium_chromeos_rel_ng" }
       builders { name: "linux_chromium_clobber_rel_ng" }
       builders { name: "linux_chromium_compile_dbg_ng" }
-      builders { name: "linux_chromium_gn_chromeos_rel" }
       builders { name: "linux_chromium_rel_ng" }
     }
     buckets {
diff --git a/ios/chrome/browser/browser_state/chrome_browser_state_io_data.cc b/ios/chrome/browser/browser_state/chrome_browser_state_io_data.cc
index df3d36c..fe297287 100644
--- a/ios/chrome/browser/browser_state/chrome_browser_state_io_data.cc
+++ b/ios/chrome/browser/browser_state/chrome_browser_state_io_data.cc
@@ -318,9 +318,9 @@
   return enable_metrics_.GetValue();
 }
 
-base::WeakPtr<net::HttpServerProperties>
-ChromeBrowserStateIOData::http_server_properties() const {
-  return http_server_properties_->GetWeakPtr();
+net::HttpServerProperties* ChromeBrowserStateIOData::http_server_properties()
+    const {
+  return http_server_properties_.get();
 }
 
 void ChromeBrowserStateIOData::set_http_server_properties(
diff --git a/ios/chrome/browser/browser_state/chrome_browser_state_io_data.h b/ios/chrome/browser/browser_state/chrome_browser_state_io_data.h
index 61906d6..013727e 100644
--- a/ios/chrome/browser/browser_state/chrome_browser_state_io_data.h
+++ b/ios/chrome/browser/browser_state/chrome_browser_state_io_data.h
@@ -203,7 +203,7 @@
 
   net::ProxyService* proxy_service() const { return proxy_service_.get(); }
 
-  base::WeakPtr<net::HttpServerProperties> http_server_properties() const;
+  net::HttpServerProperties* http_server_properties() const;
 
   void set_http_server_properties(
       std::unique_ptr<net::HttpServerProperties> http_server_properties) const;
diff --git a/ios/chrome/browser/ios_chrome_io_thread.mm b/ios/chrome/browser/ios_chrome_io_thread.mm
index a6cd8b9..85c3bed7 100644
--- a/ios/chrome/browser/ios_chrome_io_thread.mm
+++ b/ios/chrome/browser/ios_chrome_io_thread.mm
@@ -550,8 +550,7 @@
       globals->network_quality_estimator.get());
   context->set_backoff_manager(globals->url_request_backoff_manager.get());
 
-  context->set_http_server_properties(
-      globals->http_server_properties->GetWeakPtr());
+  context->set_http_server_properties(globals->http_server_properties.get());
 
   net::HttpNetworkSession::Params system_params(params);
   net::URLRequestContextBuilder::SetHttpNetworkSessionComponents(
diff --git a/ios/crnet/crnet_environment.mm b/ios/crnet/crnet_environment.mm
index 9c4686dfc..e61bead8 100644
--- a/ios/crnet/crnet_environment.mm
+++ b/ios/crnet/crnet_environment.mm
@@ -386,8 +386,7 @@
   main_context_->set_transport_security_state(
       new net::TransportSecurityState());
   http_server_properties_.reset(new net::HttpServerPropertiesImpl());
-  main_context_->set_http_server_properties(
-      http_server_properties_->GetWeakPtr());
+  main_context_->set_http_server_properties(http_server_properties_.get());
   // TODO(rdsmith): Note that the ".release()" calls below are leaking
   // the objects in question; this should be fixed by having an object
   // corresponding to URLRequestContextStorage that actually owns those
diff --git a/ios/web/ios_web_shell_exe.gypi b/ios/web/ios_web_shell_exe.gypi
index f9f790de..137b257 100644
--- a/ios/web/ios_web_shell_exe.gypi
+++ b/ios/web/ios_web_shell_exe.gypi
@@ -25,6 +25,7 @@
   ],
   'xcode_settings': {
     'INFOPLIST_FILE': 'shell/Info.plist',
+    'CLANG_ENABLE_OBJC_ARC': 'YES',
   },
   'sources': [
     'shell/app_delegate.h',
diff --git a/ios/web/shell/BUILD.gn b/ios/web/shell/BUILD.gn
index 6e5b0141..0b581a2 100644
--- a/ios/web/shell/BUILD.gn
+++ b/ios/web/shell/BUILD.gn
@@ -25,6 +25,8 @@
     "-Xlinker",
     "2",
   ]
+
+  configs += [ "//build/config/compiler:enable_arc" ]
 }
 
 bundle_data_xib("main_view_bundle_data") {
@@ -84,4 +86,6 @@
     "Foundation.framework",
     "UIKit.framework",
   ]
+
+  configs += [ "//build/config/compiler:enable_arc" ]
 }
diff --git a/ios/web/shell/app_delegate.h b/ios/web/shell/app_delegate.h
index fba25e8..a031d2d 100644
--- a/ios/web/shell/app_delegate.h
+++ b/ios/web/shell/app_delegate.h
@@ -9,7 +9,7 @@
 
 @interface AppDelegate : UIResponder<UIApplicationDelegate>
 
-@property(nonatomic, retain) UIWindow* window;
+@property(nonatomic, strong) UIWindow* window;
 
 @end
 
diff --git a/ios/web/shell/app_delegate.mm b/ios/web/shell/app_delegate.mm
index 87e65a5..f5a4a3f 100644
--- a/ios/web/shell/app_delegate.mm
+++ b/ios/web/shell/app_delegate.mm
@@ -15,6 +15,10 @@
 #include "ios/web/shell/shell_web_client.h"
 #import "ios/web/shell/view_controller.h"
 
+#if !defined(__has_feature) || !__has_feature(objc_arc)
+#error "This file requires ARC support."
+#endif
+
 @interface AppDelegate () {
   std::unique_ptr<web::ShellMainDelegate> _delegate;
   std::unique_ptr<web::WebMain> _webMain;
diff --git a/ios/web/shell/shell_browser_state.mm b/ios/web/shell/shell_browser_state.mm
index ecffe42..be4fc4c 100644
--- a/ios/web/shell/shell_browser_state.mm
+++ b/ios/web/shell/shell_browser_state.mm
@@ -12,6 +12,10 @@
 #include "ios/web/public/web_thread.h"
 #include "ios/web/shell/shell_url_request_context_getter.h"
 
+#if !defined(__has_feature) || !__has_feature(objc_arc)
+#error "This file requires ARC support."
+#endif
+
 namespace web {
 
 ShellBrowserState::ShellBrowserState() : BrowserState() {
diff --git a/ios/web/shell/shell_main_delegate.mm b/ios/web/shell/shell_main_delegate.mm
index 97db23d..367a7f76 100644
--- a/ios/web/shell/shell_main_delegate.mm
+++ b/ios/web/shell/shell_main_delegate.mm
@@ -6,6 +6,10 @@
 
 #include "ios/web/shell/shell_web_client.h"
 
+#if !defined(__has_feature) || !__has_feature(objc_arc)
+#error "This file requires ARC support."
+#endif
+
 namespace web {
 
 ShellMainDelegate::ShellMainDelegate() {
diff --git a/ios/web/shell/shell_url_request_context_getter.mm b/ios/web/shell/shell_url_request_context_getter.mm
index 1a352fb3..eeb855e 100644
--- a/ios/web/shell/shell_url_request_context_getter.mm
+++ b/ios/web/shell/shell_url_request_context_getter.mm
@@ -38,6 +38,10 @@
 #include "net/url_request/url_request_context_storage.h"
 #include "net/url_request/url_request_job_factory_impl.h"
 
+#if !defined(__has_feature) || !__has_feature(objc_arc)
+#error "This file requires ARC support."
+#endif
+
 namespace web {
 
 ShellURLRequestContextGetter::ShellURLRequestContextGetter(
diff --git a/ios/web/shell/shell_web_client.mm b/ios/web/shell/shell_web_client.mm
index 3e90c05..659f789 100644
--- a/ios/web/shell/shell_web_client.mm
+++ b/ios/web/shell/shell_web_client.mm
@@ -9,6 +9,10 @@
 #include "ios/web/public/user_agent.h"
 #include "ios/web/shell/shell_web_main_parts.h"
 
+#if !defined(__has_feature) || !__has_feature(objc_arc)
+#error "This file requires ARC support."
+#endif
+
 namespace web {
 
 ShellWebClient::ShellWebClient() {
diff --git a/ios/web/shell/shell_web_main_parts.mm b/ios/web/shell/shell_web_main_parts.mm
index 1a1c7ee..9833401f 100644
--- a/ios/web/shell/shell_web_main_parts.mm
+++ b/ios/web/shell/shell_web_main_parts.mm
@@ -6,6 +6,10 @@
 
 #include "ios/web/shell/shell_browser_state.h"
 
+#if !defined(__has_feature) || !__has_feature(objc_arc)
+#error "This file requires ARC support."
+#endif
+
 namespace web {
 
 ShellWebMainParts::ShellWebMainParts() {
diff --git a/ios/web/shell/view_controller.h b/ios/web/shell/view_controller.h
index 8f15271..b85b1dc0 100644
--- a/ios/web/shell/view_controller.h
+++ b/ios/web/shell/view_controller.h
@@ -22,8 +22,8 @@
 // Implements the main UI for ios_web_shell, including a toolbar and web view.
 @interface ViewController : UIViewController
 
-@property(nonatomic, retain) IBOutlet UIView* containerView;
-@property(nonatomic, retain) IBOutlet UIToolbar* toolbarView;
+@property(nonatomic, strong) IBOutlet UIView* containerView;
+@property(nonatomic, strong) IBOutlet UIToolbar* toolbarView;
 @property(nonatomic, assign, readonly) web::WebState* webState;
 
 // Initializes a new ViewController from |MainView.xib| using the given
diff --git a/ios/web/shell/view_controller.mm b/ios/web/shell/view_controller.mm
index a03c23b2..a3eca6c6 100644
--- a/ios/web/shell/view_controller.mm
+++ b/ios/web/shell/view_controller.mm
@@ -11,7 +11,6 @@
 #include <memory>
 #include <utility>
 
-#include "base/mac/objc_property_releaser.h"
 #import "base/mac/scoped_nsobject.h"
 #include "base/strings/sys_string_conversions.h"
 #include "ios/net/cookies/cookie_store_ios.h"
@@ -27,6 +26,10 @@
 #import "net/base/mac/url_conversions.h"
 #include "ui/base/page_transition_types.h"
 
+#if !defined(__has_feature) || !__has_feature(objc_arc)
+#error "This file requires ARC support."
+#endif
+
 NSString* const kWebShellBackButtonAccessibilityLabel = @"Back";
 NSString* const kWebShellForwardButtonAccessibilityLabel = @"Forward";
 NSString* const kWebShellAddressFieldAccessibilityLabel = @"Address field";
@@ -40,11 +43,9 @@
   std::unique_ptr<web::WebState> _webState;
   std::unique_ptr<web::WebStateObserverBridge> _webStateObserver;
   std::unique_ptr<web::WebStateDelegateBridge> _webStateDelegate;
-
-  base::mac::ObjCPropertyReleaser _propertyReleaser_ViewController;
 }
 @property(nonatomic, assign, readonly) NavigationManager* navigationManager;
-@property(nonatomic, readwrite, retain) UITextField* field;
+@property(nonatomic, readwrite, strong) UITextField* field;
 @end
 
 @implementation ViewController
@@ -56,7 +57,6 @@
 - (instancetype)initWithBrowserState:(web::BrowserState*)browserState {
   self = [super initWithNibName:@"MainView" bundle:nil];
   if (self) {
-    _propertyReleaser_ViewController.Init(self, [ViewController class]);
     _browserState = browserState;
   }
   return self;
@@ -65,7 +65,6 @@
 - (void)dealloc {
   net::HTTPProtocolHandlerDelegate::SetInstance(nullptr);
   net::RequestTracker::SetRequestTrackerFactory(nullptr);
-  [super dealloc];
 }
 
 - (void)viewDidLoad {
diff --git a/ios/web/shell/web_exe_main.mm b/ios/web/shell/web_exe_main.mm
index 0e7c58b..ac18706ed 100644
--- a/ios/web/shell/web_exe_main.mm
+++ b/ios/web/shell/web_exe_main.mm
@@ -6,6 +6,10 @@
 
 #import "ios/web/shell/app_delegate.h"
 
+#if !defined(__has_feature) || !__has_feature(objc_arc)
+#error "This file requires ARC support."
+#endif
+
 int main(int argc, char* argv[]) {
   @autoreleasepool {
     return UIApplicationMain(argc, argv, nil,
diff --git a/media/BUILD.gn b/media/BUILD.gn
index fb4c400..99b66f6e 100644
--- a/media/BUILD.gn
+++ b/media/BUILD.gn
@@ -337,8 +337,6 @@
     deps += [
       "//media/base/android",
       "//media/base/android:media_jni_headers",
-      "//media/capture/video/android:capture_java",
-      "//media/capture/video/android:capture_jni_headers",
     ]
 
     # Only 64 bit builds are using android-21 NDK library, check common.gypi
@@ -362,6 +360,11 @@
 
   if (is_mac) {
     public_deps += [ "//media/base/mac" ]
+    libs += [
+      "CoreFoundation.framework",
+      "CoreGraphics.framework",
+      "Foundation.framework",
+    ]
   }
 
   if (is_ios) {
@@ -370,12 +373,6 @@
 
   if (is_win) {
     deps += [ "//media/base/win" ]
-    libs += [
-      "mf.lib",
-      "mfplat.lib",
-      "mfreadwrite.lib",
-      "mfuuid.lib",
-    ]
   }
 
   if (proprietary_codecs) {
@@ -462,7 +459,6 @@
     ":shared_memory_support",
     "//media/audio",
     "//media/base",
-    "//media/capture",
     "//third_party/opus",
   ]
 
@@ -597,6 +593,8 @@
     "//media/audio:unittests",
     "//media/base:test_support",
     "//media/base:unittests",
+
+    # TODO(mcasas): Remove the capture sources after https://crbug.com/618718.
     "//media/capture:unittests",
     "//media/test:pipeline_integration_tests",
     "//skia",  # Direct dependency required to inherit config.
diff --git a/media/base/BUILD.gn b/media/base/BUILD.gn
index 792dbe79..7db6c40 100644
--- a/media/base/BUILD.gn
+++ b/media/base/BUILD.gn
@@ -401,6 +401,14 @@
     "//testing/gmock",
     "//ui/gfx:test_support",
   ]
+  if (is_android) {
+    deps += [
+      # Needed to register capture Java/Jni objects. TODO(mcasas): Remove when
+      # the dependency to capture is not needed, see https://crbug.com/618718.
+      "//media/capture",
+      "//media/capture/video/android",
+    ]
+  }
 }
 
 source_set("unittests") {
diff --git a/media/base/win/BUILD.gn b/media/base/win/BUILD.gn
index 49559bac..a90f7c94 100644
--- a/media/base/win/BUILD.gn
+++ b/media/base/win/BUILD.gn
@@ -4,19 +4,32 @@
 
 assert(is_win)
 
-source_set("win") {
+component("win") {
+  defines = [ "MF_INITIALIZER_IMPLEMENTATION" ]
   set_sources_assignment_filter([])
   sources = [
     "mf_initializer.cc",
     "mf_initializer.h",
+    "mf_initializer_export.h",
   ]
   set_sources_assignment_filter(sources_assignment_filter)
   configs += [
+    # TODO(jschuh): https://crbug.com/167187 fix size_t to int truncations.
+    "//build/config/compiler:no_size_t_to_int_warning",
     "//media:media_config",
-    "//media:media_implementation",
   ]
   deps = [
     "//base",
     "//media:shared_memory_support",
   ]
+  libs = [
+    "mf.lib",
+    "mfplat.lib",
+    "mfreadwrite.lib",
+  ]
+  ldflags = [
+    "/DELAYLOAD:mf.dll",
+    "/DELAYLOAD:mfplat.dll",
+    "/DELAYLOAD:mfreadwrite.dll",
+  ]
 }
diff --git a/media/base/win/mf_initializer.h b/media/base/win/mf_initializer.h
index 4c10d6a..eadc39cc 100644
--- a/media/base/win/mf_initializer.h
+++ b/media/base/win/mf_initializer.h
@@ -5,13 +5,13 @@
 #ifndef MEDIA_BASE_WIN_MF_INITIALIZER_H_
 #define MEDIA_BASE_WIN_MF_INITIALIZER_H_
 
-#include "media/base/media_export.h"
+#include "media/base/win/mf_initializer_export.h"
 
 namespace media {
 
 // Makes sure MFStartup() is called exactly once, and that this call is paired
 // by a call to MFShutdown().
-MEDIA_EXPORT void InitializeMediaFoundation();
+MF_INITIALIZER_EXPORT void InitializeMediaFoundation();
 
 }  // namespace media
 
diff --git a/media/base/win/mf_initializer_export.h b/media/base/win/mf_initializer_export.h
new file mode 100644
index 0000000..d81391d0
--- /dev/null
+++ b/media/base/win/mf_initializer_export.h
@@ -0,0 +1,29 @@
+// 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 MEDIA_BASE_WIN_MF_INITIALIZER_EXPORT_H_
+#define MEDIA_BASE_WIN_MF_INITIALIZER_EXPORT_H_
+
+#if defined(COMPONENT_BUILD)
+#if defined(WIN32)
+
+#if defined(MF_INITIALIZER_IMPLEMENTATION)
+#define MF_INITIALIZER_EXPORT __declspec(dllexport)
+#else
+#define MF_INITIALIZER_EXPORT __declspec(dllimport)
+#endif  // defined(MF_INITIALIZER_IMPLEMENTATION)
+
+#else  // defined(WIN32)
+#if defined(MF_INITIALIZER_IMPLEMENTATION)
+#define MF_INITIALIZER_EXPORT __attribute__((visibility("default")))
+#else
+#define MF_INITIALIZER_EXPORT
+#endif
+#endif
+
+#else  // defined(COMPONENT_BUILD)
+#define MF_INITIALIZER_EXPORT
+#endif
+
+#endif  // MEDIA_BASE_WIN_MF_INITIALIZER_EXPORT_H_
diff --git a/media/blink/webmediaplayer_cast_android.cc b/media/blink/webmediaplayer_cast_android.cc
index b9957b56..8f073b95 100644
--- a/media/blink/webmediaplayer_cast_android.cc
+++ b/media/blink/webmediaplayer_cast_android.cc
@@ -67,7 +67,8 @@
   paint.setAntiAlias(true);
   paint.setFilterQuality(kHigh_SkFilterQuality);
   paint.setColor(SK_ColorWHITE);
-  paint.setTypeface(SkTypeface::CreateFromName("sans", SkTypeface::kBold));
+  paint.setTypeface(SkTypeface::MakeFromName(
+      "sans", SkFontStyle::FromOldStyle(SkTypeface::kBold)));
   paint.setTextSize(kTextSize);
 
   // Calculate the vertical margin from the top
diff --git a/media/capture/BUILD.gn b/media/capture/BUILD.gn
index f6968116a..619f000 100644
--- a/media/capture/BUILD.gn
+++ b/media/capture/BUILD.gn
@@ -6,8 +6,10 @@
 import("//media/media_options.gni")
 import("//testing/test.gni")
 
-source_set("capture") {
+component("capture") {
+  defines = [ "CAPTURE_IMPLEMENTATION" ]
   sources = [
+    "capture_export.h",
     "content/animated_content_sampler.cc",
     "content/animated_content_sampler.h",
     "content/capture_resolution_chooser.cc",
@@ -25,12 +27,6 @@
     "device_monitor_mac.mm",
     "system_message_window_win.cc",
     "system_message_window_win.h",
-    "video/android/photo_capabilities.cc",
-    "video/android/photo_capabilities.h",
-    "video/android/video_capture_device_android.cc",
-    "video/android/video_capture_device_android.h",
-    "video/android/video_capture_device_factory_android.cc",
-    "video/android/video_capture_device_factory_android.h",
     "video/fake_video_capture_device.cc",
     "video/fake_video_capture_device.h",
     "video/fake_video_capture_device_factory.cc",
@@ -83,20 +79,26 @@
   public_deps = []
   deps = [
     "//base",
-    "//media/base",
+    "//base:i18n",
+    "//media",
     "//skia",
     "//ui/display",
+    "//ui/gfx",
   ]
 
   configs += [
+    # TODO(mcasas): media/base should be a component and not a source_set, but
+    # it depends on parts of media/filters, media/ffmpeg etc. Until then, we
+    # pretend to be inside media.dll and duplicate the few symbols needed, see
+    # https://crbug.com/590017.
     "//media:media_implementation",
-
-    # TODO(mcasas): Fix size_t to int truncation warning-treated-as-errors.
-    "//build/config/compiler:no_size_t_to_int_warning",
   ]
 
   if (is_android) {
-    public_deps += [ "video/android" ]
+    public_deps += [
+      "video/android",
+      "video/android:capture_java",
+    ]
     deps += [ "video/android:capture_jni_headers" ]
   }
 
@@ -105,6 +107,7 @@
     libs = [
       "CoreFoundation.framework",
       "CoreGraphics.framework",
+      "CoreVideo.framework",
       "Foundation.framework",
     ]
   }
@@ -118,22 +121,28 @@
   }
 
   if (is_win) {
-    public_deps += [ "//media/base/win" ]
+    deps += [
+      "//media/base",  # For media_switches.
+      "//media/base/win",
+    ]
     libs = [
       "mf.lib",
       "mfplat.lib",
       "mfreadwrite.lib",
       "mfuuid.lib",
     ]
-
     ldflags = [
       "/DELAYLOAD:mf.dll",
       "/DELAYLOAD:mfplat.dll",
       "/DELAYLOAD:mfreadwrite.dll",
     ]
+
+    # TODO(jschuh): https://crbug.com/167187 fix size_t to int truncations.
+    configs += [ "//build/config/compiler:no_size_t_to_int_warning" ]
   }
 }
 
+# TODO(mcasas): Make this a test target, https://crbug.com/618718.
 source_set("unittests") {
   testonly = true
 
@@ -150,11 +159,13 @@
   ]
 
   deps = [
-    "//media/base:unittests",
+    ":capture",
     "//testing/gmock",
     "//testing/gtest",
   ]
 
-  # TODO(mcasas): Fix size_t to int truncation warning-treated-as-errors.
-  configs += [ "//build/config/compiler:no_size_t_to_int_warning" ]
+  if (is_win) {
+    # TODO(jschuh): https://crbug.com/167187 fix size_t to int truncations.
+    configs += [ "//build/config/compiler:no_size_t_to_int_warning" ]
+  }
 }
diff --git a/media/capture/capture.gyp b/media/capture/capture.gyp
new file mode 100644
index 0000000..d8de2d5
--- /dev/null
+++ b/media/capture/capture.gyp
@@ -0,0 +1,225 @@
+# 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.
+
+{
+  'variables': {
+    'chromium_code': 1,
+    'capture_sources': [
+      'capture_export.h',
+      'content/animated_content_sampler.cc',
+      'content/animated_content_sampler.h',
+      'content/capture_resolution_chooser.cc',
+      'content/capture_resolution_chooser.h',
+      'content/feedback_signal_accumulator.h',
+      'content/screen_capture_device_core.cc',
+      'content/screen_capture_device_core.h',
+      'content/smooth_event_sampler.cc',
+      'content/smooth_event_sampler.h',
+      'content/thread_safe_capture_oracle.cc',
+      'content/thread_safe_capture_oracle.h',
+      'content/video_capture_oracle.cc',
+      'content/video_capture_oracle.h',
+      'device_monitor_mac.h',
+      'device_monitor_mac.mm',
+      'system_message_window_win.cc',
+      'system_message_window_win.h',
+      'video/android/video_capture_device_android.cc',
+      'video/android/video_capture_device_android.h',
+      'video/android/video_capture_device_factory_android.cc',
+      'video/android/video_capture_device_factory_android.h',
+      'video/fake_video_capture_device.cc',
+      'video/fake_video_capture_device.h',
+      'video/fake_video_capture_device_factory.cc',
+      'video/fake_video_capture_device_factory.h',
+      'video/file_video_capture_device.cc',
+      'video/file_video_capture_device.h',
+      'video/file_video_capture_device_factory.cc',
+      'video/file_video_capture_device_factory.h',
+      'video/linux/v4l2_capture_delegate.cc',
+      'video/linux/v4l2_capture_delegate.h',
+      'video/linux/video_capture_device_chromeos.cc',
+      'video/linux/video_capture_device_chromeos.h',
+      'video/linux/video_capture_device_factory_linux.cc',
+      'video/linux/video_capture_device_factory_linux.h',
+      'video/linux/video_capture_device_linux.cc',
+      'video/linux/video_capture_device_linux.h',
+      'video/mac/video_capture_device_avfoundation_mac.h',
+      'video/mac/video_capture_device_avfoundation_mac.mm',
+      'video/mac/video_capture_device_decklink_mac.h',
+      'video/mac/video_capture_device_decklink_mac.mm',
+      'video/mac/video_capture_device_factory_mac.h',
+      'video/mac/video_capture_device_factory_mac.mm',
+      'video/mac/video_capture_device_mac.h',
+      'video/mac/video_capture_device_mac.mm',
+      'video/scoped_result_callback.h',
+      'video/video_capture_device.cc',
+      'video/video_capture_device.h',
+      'video/video_capture_device_factory.cc',
+      'video/video_capture_device_factory.h',
+      'video/video_capture_device_info.cc',
+      'video/video_capture_device_info.h',
+      'video/win/capability_list_win.cc',
+      'video/win/capability_list_win.h',
+      'video/win/filter_base_win.cc',
+      'video/win/filter_base_win.h',
+      'video/win/pin_base_win.cc',
+      'video/win/pin_base_win.h',
+      'video/win/sink_filter_observer_win.h',
+      'video/win/sink_filter_win.cc',
+      'video/win/sink_filter_win.h',
+      'video/win/sink_input_pin_win.cc',
+      'video/win/sink_input_pin_win.h',
+      'video/win/video_capture_device_factory_win.cc',
+      'video/win/video_capture_device_factory_win.h',
+      'video/win/video_capture_device_mf_win.cc',
+      'video/win/video_capture_device_mf_win.h',
+      'video/win/video_capture_device_win.cc',
+      'video/win/video_capture_device_win.h'
+    ],
+
+    'capture_unittests_sources': [
+      'content/animated_content_sampler_unittest.cc',
+      'content/capture_resolution_chooser_unittest.cc',
+      'content/feedback_signal_accumulator_unittest.cc',
+      'content/smooth_event_sampler_unittest.cc',
+      'content/video_capture_oracle_unittest.cc',
+      'system_message_window_win_unittest.cc',
+      'video/fake_video_capture_device_unittest.cc',
+      'video/mac/video_capture_device_factory_mac_unittest.mm',
+      'video/video_capture_device_unittest.cc'
+    ],
+
+    # The following files lack appropriate platform suffixes.
+    'conditions': [
+      ['OS=="linux" and use_udev==1', {
+        'capture_sources': [
+          'device_monitor_udev.cc',
+          'device_monitor_udev.h',
+        ],
+      }],
+    ],
+  },
+
+  'targets': [
+    {
+      # GN version: //media/capture
+      'target_name': 'capture',
+      'type': '<(component)',
+      'hard_dependency': 1,
+      'dependencies': [
+        '<(DEPTH)/base/base.gyp:base',
+        '<(DEPTH)/base/base.gyp:base_i18n',
+        '<(DEPTH)/media/media.gyp:media',
+        '<(DEPTH)/media/media.gyp:shared_memory_support',  # For audio support.
+        '<(DEPTH)/skia/skia.gyp:skia',
+        '<(DEPTH)/ui/gfx/gfx.gyp:gfx',
+        '<(DEPTH)/ui/gfx/gfx.gyp:gfx_geometry',
+      ],
+      'defines': [
+        'CAPTURE_IMPLEMENTATION',
+      ],
+      'include_dirs': [
+        '<(DEPTH)/',
+      ],
+      'sources': [
+        '<@(capture_sources)'
+      ],
+      'conditions': [
+        ['OS=="android"', {
+          'dependencies': [
+            'capture_java',
+          ],
+        }],
+        ['OS=="mac"', {
+          'dependencies': [
+            '<(DEPTH)/third_party/decklink/decklink.gyp:decklink',
+          ],
+        }],
+        ['chromeos==1', {
+          'dependencies': [
+            '<(DEPTH)/ui/display/display.gyp:display',
+          ],
+        }],
+        ['OS=="linux" and use_udev==1', {
+          'dependencies': [
+            '<(DEPTH)/device/udev_linux/udev.gyp:udev_linux',
+          ],
+        }],
+        ['OS=="win"', {
+          'dependencies': [
+            '<(DEPTH)/media/media.gyp:mf_initializer',
+          ],
+          # TODO(jschuh): http://crbug.com/167187 fix size_t to int truncations.
+          'msvs_disabled_warnings': [ 4267, ],
+        }],
+      ],
+    },
+
+    {
+      # GN version: //media/capture:unittests source_set
+      'target_name': 'unittests',
+      'type': 'none',
+      'dependencies': [
+        'capture',
+      ],
+      'direct_dependent_settings': {
+        'sources': [
+          '<@(capture_unittests_sources)'
+        ],
+      },
+    },
+  ],
+
+  'conditions': [
+    ['OS=="android"', {
+      'targets': [
+        {
+          'target_name': 'capture_java',
+          'type': 'none',
+          'dependencies': [
+            '/base/base.gyp:base',
+            'media_android_captureapitype',
+            'media_android_imageformat',
+            'video_capture_android_jni_headers',
+          ],
+          'export_dependent_settings': [
+            '../base/base.gyp:base',
+          ],
+          'variables': {
+            'java_in_dir': 'video/android/java',
+          },
+          'includes': ['../../build/java.gypi'],
+        },
+        {
+          'target_name': 'media_android_captureapitype',
+          'type': 'none',
+          'variables': {
+            'source_file': 'video/video_capture_device.h',
+          },
+         'includes': [ '../../build/android/java_cpp_enum.gypi' ],
+        },
+        {
+          'target_name': 'media_android_imageformat',
+          'type': 'none',
+          'variables': {
+            'source_file': 'video/android/video_capture_device_android.h',
+          },
+          'includes': [ '../../build/android/java_cpp_enum.gypi' ],
+        },
+        {
+          'target_name': 'video_capture_android_jni_headers',
+          'type': 'none',
+          'sources': [
+            'video/android/java/src/org/chromium/media/VideoCapture.java',
+            'video/android/java/src/org/chromium/media/VideoCaptureFactory.java',
+          ],
+          'variables': {
+           'jni_gen_package': 'media',
+          },
+         'includes': ['../../build/jni_generator.gypi'],
+        },
+      ],
+    }],
+  ],
+}
diff --git a/media/capture/capture.gypi b/media/capture/capture.gypi
deleted file mode 100644
index 2535c44..0000000
--- a/media/capture/capture.gypi
+++ /dev/null
@@ -1,106 +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.
-
-{
-  'defines': [
-    'MEDIA_IMPLEMENTATION',
-  ],
-  'variables': {
-    # GN version: //media/capture:capture
-    'capture_sources': [
-      'capture/content/animated_content_sampler.cc',
-      'capture/content/animated_content_sampler.h',
-      'capture/content/capture_resolution_chooser.cc',
-      'capture/content/capture_resolution_chooser.h',
-      'capture/content/feedback_signal_accumulator.h',
-      'capture/content/screen_capture_device_core.cc',
-      'capture/content/screen_capture_device_core.h',
-      'capture/content/smooth_event_sampler.cc',
-      'capture/content/smooth_event_sampler.h',
-      'capture/content/thread_safe_capture_oracle.cc',
-      'capture/content/thread_safe_capture_oracle.h',
-      'capture/content/video_capture_oracle.cc',
-      'capture/content/video_capture_oracle.h',
-      'capture/device_monitor_mac.h',
-      'capture/device_monitor_mac.mm',
-      'capture/system_message_window_win.cc',
-      'capture/system_message_window_win.h',
-      'capture/video/android/video_capture_device_android.cc',
-      'capture/video/android/video_capture_device_android.h',
-      'capture/video/android/video_capture_device_factory_android.cc',
-      'capture/video/android/video_capture_device_factory_android.h',
-      'capture/video/fake_video_capture_device.cc',
-      'capture/video/fake_video_capture_device.h',
-      'capture/video/fake_video_capture_device_factory.cc',
-      'capture/video/fake_video_capture_device_factory.h',
-      'capture/video/file_video_capture_device.cc',
-      'capture/video/file_video_capture_device.h',
-      'capture/video/file_video_capture_device_factory.cc',
-      'capture/video/file_video_capture_device_factory.h',
-      'capture/video/linux/v4l2_capture_delegate.cc',
-      'capture/video/linux/v4l2_capture_delegate.h',
-      'capture/video/linux/video_capture_device_chromeos.cc',
-      'capture/video/linux/video_capture_device_chromeos.h',
-      'capture/video/linux/video_capture_device_factory_linux.cc',
-      'capture/video/linux/video_capture_device_factory_linux.h',
-      'capture/video/linux/video_capture_device_linux.cc',
-      'capture/video/linux/video_capture_device_linux.h',
-      'capture/video/mac/video_capture_device_avfoundation_mac.h',
-      'capture/video/mac/video_capture_device_avfoundation_mac.mm',
-      'capture/video/mac/video_capture_device_decklink_mac.h',
-      'capture/video/mac/video_capture_device_decklink_mac.mm',
-      'capture/video/mac/video_capture_device_factory_mac.h',
-      'capture/video/mac/video_capture_device_factory_mac.mm',
-      'capture/video/mac/video_capture_device_mac.h',
-      'capture/video/mac/video_capture_device_mac.mm',
-      'capture/video/scoped_result_callback.h',
-      'capture/video/video_capture_device.cc',
-      'capture/video/video_capture_device.h',
-      'capture/video/video_capture_device_factory.cc',
-      'capture/video/video_capture_device_factory.h',
-      'capture/video/video_capture_device_info.cc',
-      'capture/video/video_capture_device_info.h',
-      'capture/video/win/capability_list_win.cc',
-      'capture/video/win/capability_list_win.h',
-      'capture/video/win/filter_base_win.cc',
-      'capture/video/win/filter_base_win.h',
-      'capture/video/win/pin_base_win.cc',
-      'capture/video/win/pin_base_win.h',
-      'capture/video/win/sink_filter_observer_win.h',
-      'capture/video/win/sink_filter_win.cc',
-      'capture/video/win/sink_filter_win.h',
-      'capture/video/win/sink_input_pin_win.cc',
-      'capture/video/win/sink_input_pin_win.h',
-      'capture/video/win/video_capture_device_factory_win.cc',
-      'capture/video/win/video_capture_device_factory_win.h',
-      'capture/video/win/video_capture_device_mf_win.cc',
-      'capture/video/win/video_capture_device_mf_win.h',
-      'capture/video/win/video_capture_device_win.cc',
-      'capture/video/win/video_capture_device_win.h'
-    ],
-
-    # GN version: //media/capture:unittests
-    'capture_unittests_sources': [
-      'capture/content/animated_content_sampler_unittest.cc',
-      'capture/content/capture_resolution_chooser_unittest.cc',
-      'capture/content/feedback_signal_accumulator_unittest.cc',
-      'capture/content/smooth_event_sampler_unittest.cc',
-      'capture/content/video_capture_oracle_unittest.cc',
-      'capture/system_message_window_win_unittest.cc',
-      'capture/video/fake_video_capture_device_unittest.cc',
-      'capture/video/mac/video_capture_device_factory_mac_unittest.mm',
-      'capture/video/video_capture_device_unittest.cc'
-    ],
-
-    # The following files lack appropriate platform suffixes.
-    'conditions': [
-      ['OS=="linux" and use_udev==1', {
-        'capture_sources': [
-          'capture/device_monitor_udev.cc',
-          'capture/device_monitor_udev.h',
-        ],
-      }],
-    ],
-  },
-}
diff --git a/media/capture/capture_export.h b/media/capture/capture_export.h
new file mode 100644
index 0000000..93c6511f
--- /dev/null
+++ b/media/capture/capture_export.h
@@ -0,0 +1,29 @@
+// 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 MEDIA_CAPTURE_CAPTURE_EXPORT_H_
+#define MEDIA_CAPTURE_CAPTURE_EXPORT_H_
+
+#if defined(COMPONENT_BUILD)
+#if defined(WIN32)
+
+#if defined(CAPTURE_IMPLEMENTATION)
+#define CAPTURE_EXPORT __declspec(dllexport)
+#else
+#define CAPTURE_EXPORT __declspec(dllimport)
+#endif  // defined(CAPTURE_IMPLEMENTATION)
+
+#else  // defined(WIN32)
+#if defined(CAPTURE_IMPLEMENTATION)
+#define CAPTURE_EXPORT __attribute__((visibility("default")))
+#else
+#define CAPTURE_EXPORT
+#endif
+#endif
+
+#else  // defined(COMPONENT_BUILD)
+#define CAPTURE_EXPORT
+#endif
+
+#endif  // MEDIA_CAPTURE_CAPTURE_EXPORT_H_
diff --git a/media/capture/content/animated_content_sampler.h b/media/capture/content/animated_content_sampler.h
index f8cb6f5..0539de7 100644
--- a/media/capture/content/animated_content_sampler.h
+++ b/media/capture/content/animated_content_sampler.h
@@ -8,7 +8,7 @@
 #include <deque>
 
 #include "base/time/time.h"
-#include "media/base/media_export.h"
+#include "media/capture/capture_export.h"
 #include "ui/gfx/geometry/rect.h"
 
 namespace media {
@@ -22,7 +22,7 @@
 // In addition, AnimatedContentSampler will provide rewritten frame timestamps,
 // for downstream consumers, that are "truer" to the source content than to the
 // local presentation hardware.
-class MEDIA_EXPORT AnimatedContentSampler {
+class CAPTURE_EXPORT AnimatedContentSampler {
  public:
   explicit AnimatedContentSampler(base::TimeDelta min_capture_period);
   ~AnimatedContentSampler();
diff --git a/media/capture/content/capture_resolution_chooser.h b/media/capture/content/capture_resolution_chooser.h
index e995e93..cbc887d 100644
--- a/media/capture/content/capture_resolution_chooser.h
+++ b/media/capture/content/capture_resolution_chooser.h
@@ -7,8 +7,8 @@
 
 #include <vector>
 
-#include "media/base/media_export.h"
 #include "media/base/video_capture_types.h"
+#include "media/capture/capture_export.h"
 #include "ui/gfx/geometry/size.h"
 
 namespace media {
@@ -31,7 +31,7 @@
 // possibile snapped frame sizes are computed relative to the resolution of the
 // source content: They are the same or smaller in size, and are of the same
 // aspect ratio.
-class MEDIA_EXPORT CaptureResolutionChooser {
+class CAPTURE_EXPORT CaptureResolutionChooser {
  public:
   // media::ResolutionChangePolicy determines whether the variable frame
   // resolutions being computed must adhere to a fixed aspect ratio or not, or
diff --git a/media/capture/content/feedback_signal_accumulator.h b/media/capture/content/feedback_signal_accumulator.h
index d27887a3..33873f1 100644
--- a/media/capture/content/feedback_signal_accumulator.h
+++ b/media/capture/content/feedback_signal_accumulator.h
@@ -6,7 +6,7 @@
 #define MEDIA_CAPTURE_CONTENT_FEEDBACK_SIGNAL_ACCUMULATOR_H_
 
 #include "base/time/time.h"
-#include "media/base/media_export.h"
+#include "media/capture/capture_export.h"
 
 namespace media {
 
diff --git a/media/capture/content/screen_capture_device_core.h b/media/capture/content/screen_capture_device_core.h
index 6d1c8b86..3f8884b 100644
--- a/media/capture/content/screen_capture_device_core.h
+++ b/media/capture/content/screen_capture_device_core.h
@@ -11,7 +11,7 @@
 #include "base/macros.h"
 #include "base/memory/weak_ptr.h"
 #include "base/threading/thread_checker.h"
-#include "media/base/media_export.h"
+#include "media/capture/capture_export.h"
 #include "media/capture/content/thread_safe_capture_oracle.h"
 #include "media/capture/video/video_capture_device.h"
 
@@ -26,7 +26,7 @@
 class ThreadSafeCaptureOracle;
 
 // Keeps track of the video capture source frames and executes copying.
-class MEDIA_EXPORT VideoCaptureMachine {
+class CAPTURE_EXPORT VideoCaptureMachine {
  public:
   VideoCaptureMachine();
   virtual ~VideoCaptureMachine();
@@ -72,7 +72,7 @@
 // (see notes at top of this file).  It times the start of successive captures
 // and facilitates the processing of each through the stages of the
 // pipeline.
-class MEDIA_EXPORT ScreenCaptureDeviceCore
+class CAPTURE_EXPORT ScreenCaptureDeviceCore
     : public base::SupportsWeakPtr<ScreenCaptureDeviceCore> {
  public:
   ScreenCaptureDeviceCore(std::unique_ptr<VideoCaptureMachine> capture_machine);
diff --git a/media/capture/content/smooth_event_sampler.h b/media/capture/content/smooth_event_sampler.h
index 66c39e0..47ed58e 100644
--- a/media/capture/content/smooth_event_sampler.h
+++ b/media/capture/content/smooth_event_sampler.h
@@ -7,12 +7,12 @@
 
 #include "base/macros.h"
 #include "base/time/time.h"
-#include "media/base/media_export.h"
+#include "media/capture/capture_export.h"
 
 namespace media {
 
 // Filters a sequence of events to achieve a target frequency.
-class MEDIA_EXPORT SmoothEventSampler {
+class CAPTURE_EXPORT SmoothEventSampler {
  public:
   explicit SmoothEventSampler(base::TimeDelta min_capture_period);
 
diff --git a/media/capture/content/thread_safe_capture_oracle.cc b/media/capture/content/thread_safe_capture_oracle.cc
index 6cd4048..4ba2de3 100644
--- a/media/capture/content/thread_safe_capture_oracle.cc
+++ b/media/capture/content/thread_safe_capture_oracle.cc
@@ -85,8 +85,8 @@
     // TODO(miu): Clients should request exact padding, instead of this
     // memory-wasting hack to make frames that are compatible with all HW
     // encoders.  http://crbug.com/555911
-    coded_size.SetSize(base::bits::Align(visible_size.width(), 16),
-                       base::bits::Align(visible_size.height(), 16));
+    coded_size.SetSize(base::bits::Align(visible_size.width(), 16u),
+                       base::bits::Align(visible_size.height(), 16u));
 
     if (event == VideoCaptureOracle::kPassiveRefreshRequest) {
       output_buffer = client_->ResurrectLastOutputBuffer(
diff --git a/media/capture/content/thread_safe_capture_oracle.h b/media/capture/content/thread_safe_capture_oracle.h
index c4d4a8d..f54315b 100644
--- a/media/capture/content/thread_safe_capture_oracle.h
+++ b/media/capture/content/thread_safe_capture_oracle.h
@@ -9,8 +9,8 @@
 #include <string>
 
 #include "base/memory/ref_counted.h"
-#include "media/base/media_export.h"
 #include "media/base/video_frame.h"
+#include "media/capture/capture_export.h"
 #include "media/capture/content/video_capture_oracle.h"
 #include "media/capture/video/video_capture_device.h"
 
@@ -27,7 +27,7 @@
 // the VideoCaptureOracle, which decides which frames to capture, and a
 // VideoCaptureDevice::Client, which allocates and receives the captured
 // frames, in a lock to synchronize state between the two.
-class MEDIA_EXPORT ThreadSafeCaptureOracle
+class CAPTURE_EXPORT ThreadSafeCaptureOracle
     : public base::RefCountedThreadSafe<ThreadSafeCaptureOracle> {
  public:
   ThreadSafeCaptureOracle(std::unique_ptr<VideoCaptureDevice::Client> client,
diff --git a/media/capture/content/video_capture_oracle.h b/media/capture/content/video_capture_oracle.h
index 36779b94..3fdb35c 100644
--- a/media/capture/content/video_capture_oracle.h
+++ b/media/capture/content/video_capture_oracle.h
@@ -7,7 +7,7 @@
 
 #include "base/callback_forward.h"
 #include "base/time/time.h"
-#include "media/base/media_export.h"
+#include "media/capture/capture_export.h"
 #include "media/capture/content/animated_content_sampler.h"
 #include "media/capture/content/capture_resolution_chooser.h"
 #include "media/capture/content/feedback_signal_accumulator.h"
@@ -20,7 +20,7 @@
 // from a video capture device.  It is informed of every update by the device;
 // this empowers it to look into the future and decide if a particular frame
 // ought to be captured in order to achieve its target frame rate.
-class MEDIA_EXPORT VideoCaptureOracle {
+class CAPTURE_EXPORT VideoCaptureOracle {
  public:
   enum Event {
     kCompositorUpdate,
diff --git a/media/capture/device_monitor_mac.h b/media/capture/device_monitor_mac.h
index c243c56..c6db8b9 100644
--- a/media/capture/device_monitor_mac.h
+++ b/media/capture/device_monitor_mac.h
@@ -10,7 +10,7 @@
 #include "base/macros.h"
 #include "base/system_monitor/system_monitor.h"
 #include "base/threading/thread_checker.h"
-#include "media/base/media_export.h"
+#include "media/capture/capture_export.h"
 
 namespace {
 class DeviceMonitorMacImpl;
@@ -21,7 +21,7 @@
 // Class to track audio/video devices removal or addition via callback to
 // base::SystemMonitor ProcessDevicesChanged(). A single object of this class
 // is created from the browser main process and lives as long as this one.
-class MEDIA_EXPORT DeviceMonitorMac {
+class CAPTURE_EXPORT DeviceMonitorMac {
  public:
   DeviceMonitorMac();
   ~DeviceMonitorMac();
diff --git a/media/capture/device_monitor_udev.h b/media/capture/device_monitor_udev.h
index 4571072d..a8f9d82 100644
--- a/media/capture/device_monitor_udev.h
+++ b/media/capture/device_monitor_udev.h
@@ -14,7 +14,7 @@
 #include "base/memory/ref_counted.h"
 #include "base/message_loop/message_loop.h"
 #include "base/single_thread_task_runner.h"
-#include "media/base/media_export.h"
+#include "media/capture/capture_export.h"
 
 extern "C" {
 struct udev_device;
@@ -26,7 +26,7 @@
 
 namespace media {
 
-class MEDIA_EXPORT DeviceMonitorLinux
+class CAPTURE_EXPORT DeviceMonitorLinux
     : public base::MessageLoop::DestructionObserver {
  public:
   explicit DeviceMonitorLinux(
diff --git a/media/capture/system_message_window_win.h b/media/capture/system_message_window_win.h
index 1dde0edb..6468317 100644
--- a/media/capture/system_message_window_win.h
+++ b/media/capture/system_message_window_win.h
@@ -10,11 +10,11 @@
 #include <memory>
 
 #include "base/macros.h"
-#include "media/base/media_export.h"
+#include "media/capture/capture_export.h"
 
 namespace media {
 
-class MEDIA_EXPORT SystemMessageWindowWin {
+class CAPTURE_EXPORT SystemMessageWindowWin {
  public:
   SystemMessageWindowWin();
 
diff --git a/media/capture/video/android/BUILD.gn b/media/capture/video/android/BUILD.gn
index b958038..ca97117 100644
--- a/media/capture/video/android/BUILD.gn
+++ b/media/capture/video/android/BUILD.gn
@@ -14,6 +14,12 @@
   sources = [
     "capture_jni_registrar.cc",
     "capture_jni_registrar.h",
+    "photo_capabilities.cc",
+    "photo_capabilities.h",
+    "video_capture_device_android.cc",
+    "video_capture_device_android.h",
+    "video_capture_device_factory_android.cc",
+    "video_capture_device_factory_android.h",
   ]
   configs += [
     "//media:media_config",
diff --git a/media/capture/video/android/capture_jni_registrar.h b/media/capture/video/android/capture_jni_registrar.h
index df15a10..361c5ab9 100644
--- a/media/capture/video/android/capture_jni_registrar.h
+++ b/media/capture/video/android/capture_jni_registrar.h
@@ -7,12 +7,12 @@
 
 #include <jni.h>
 
-#include "media/base/media_export.h"
+#include "media/capture/capture_export.h"
 
 namespace media {
 
 // Register all JNI bindings necessary for capture.
-MEDIA_EXPORT bool RegisterCaptureJni(JNIEnv* env);
+CAPTURE_EXPORT bool RegisterCaptureJni(JNIEnv* env);
 
 }  // namespace media
 
diff --git a/media/capture/video/android/video_capture_device_android.h b/media/capture/video/android/video_capture_device_android.h
index 8eede91..9de33bf 100644
--- a/media/capture/video/android/video_capture_device_android.h
+++ b/media/capture/video/android/video_capture_device_android.h
@@ -13,7 +13,7 @@
 #include "base/synchronization/lock.h"
 #include "base/threading/thread.h"
 #include "base/time/time.h"
-#include "media/base/media_export.h"
+#include "media/capture/capture_export.h"
 #include "media/capture/video/video_capture_device.h"
 
 namespace tracked_objects {
@@ -26,7 +26,7 @@
 // by VideoCaptureManager on its own thread, while OnFrameAvailable is called
 // on JAVA thread (i.e., UI thread). Both will access |state_| and |client_|,
 // but only VideoCaptureManager would change their value.
-class MEDIA_EXPORT VideoCaptureDeviceAndroid : public VideoCaptureDevice {
+class CAPTURE_EXPORT VideoCaptureDeviceAndroid : public VideoCaptureDevice {
  public:
   // Automatically generated enum to interface with Java world.
   //
diff --git a/media/capture/video/android/video_capture_device_factory_android.h b/media/capture/video/android/video_capture_device_factory_android.h
index f45050ab..aa1f366 100644
--- a/media/capture/video/android/video_capture_device_factory_android.h
+++ b/media/capture/video/android/video_capture_device_factory_android.h
@@ -17,7 +17,7 @@
 
 // VideoCaptureDeviceFactory on Android. This class implements the static
 // VideoCapture methods and the factory of VideoCaptureAndroid.
-class MEDIA_EXPORT VideoCaptureDeviceFactoryAndroid
+class CAPTURE_EXPORT VideoCaptureDeviceFactoryAndroid
     : public VideoCaptureDeviceFactory {
  public:
   static bool RegisterVideoCaptureDeviceFactory(JNIEnv* env);
diff --git a/media/capture/video/fake_video_capture_device.cc b/media/capture/video/fake_video_capture_device.cc
index 116d2d02..2acb5a4 100644
--- a/media/capture/video/fake_video_capture_device.cc
+++ b/media/capture/video/fake_video_capture_device.cc
@@ -187,9 +187,9 @@
   base::TimeTicks now = base::TimeTicks::Now();
   if (first_ref_time_.is_null())
     first_ref_time_ = now;
-  client_->OnIncomingCapturedData(fake_frame_.get(), frame_size,
-                                  capture_format_, 0 /* rotation */, now,
-                                  now - first_ref_time_);
+  client_->OnIncomingCapturedData(
+      fake_frame_.get(), static_cast<int>(frame_size), capture_format_,
+      0u /* rotation */, now, now - first_ref_time_);
   BeepAndScheduleNextCapture(
       expected_execution_time,
       base::Bind(&FakeVideoCaptureDevice::CaptureUsingOwnBuffers,
@@ -222,7 +222,8 @@
           VideoFrame::PlaneSize(PIXEL_FORMAT_I420, i,
                                 capture_format_.frame_size)
               .GetArea();
-      memcpy(capture_buffer->data(i), fake_frame_.get() + offset, plane_size);
+      memcpy(capture_buffer->data(i), fake_frame_.get() + offset,
+             static_cast<int>(plane_size));
       offset += plane_size;
     }
   } else {
diff --git a/media/capture/video/fake_video_capture_device.h b/media/capture/video/fake_video_capture_device.h
index cb29b789..a3334a78 100644
--- a/media/capture/video/fake_video_capture_device.h
+++ b/media/capture/video/fake_video_capture_device.h
@@ -22,7 +22,7 @@
 
 namespace media {
 
-class MEDIA_EXPORT FakeVideoCaptureDevice : public VideoCaptureDevice {
+class CAPTURE_EXPORT FakeVideoCaptureDevice : public VideoCaptureDevice {
  public:
   enum class BufferOwnership {
     OWN_BUFFERS,
diff --git a/media/capture/video/fake_video_capture_device_factory.h b/media/capture/video/fake_video_capture_device_factory.h
index 2876bf1..6f67c811 100644
--- a/media/capture/video/fake_video_capture_device_factory.h
+++ b/media/capture/video/fake_video_capture_device_factory.h
@@ -14,7 +14,7 @@
 
 // Extension of VideoCaptureDeviceFactory to create and manipulate fake devices,
 // not including file-based ones.
-class MEDIA_EXPORT FakeVideoCaptureDeviceFactory
+class CAPTURE_EXPORT FakeVideoCaptureDeviceFactory
     : public VideoCaptureDeviceFactory {
  public:
   FakeVideoCaptureDeviceFactory();
diff --git a/media/capture/video/file_video_capture_device.cc b/media/capture/video/file_video_capture_device.cc
index e429806..dc249a00e 100644
--- a/media/capture/video/file_video_capture_device.cc
+++ b/media/capture/video/file_video_capture_device.cc
@@ -179,14 +179,14 @@
   }
 
   std::string header(kY4MHeaderMaxSize, '\0');
-  file_->Read(0, &header[0], header.size());
+  file_->Read(0, &header[0], static_cast<int>(header.size()));
   const size_t header_end = header.find(kY4MSimpleFrameDelimiter);
   CHECK_NE(header_end, header.npos);
 
   ParseY4MTags(header, capture_format);
   first_frame_byte_index_ = header_end + kY4MSimpleFrameDelimiterSize;
   current_byte_index_ = first_frame_byte_index_;
-  frame_size_ = capture_format->ImageAllocationSize();
+  frame_size_ = static_cast<int>(capture_format->ImageAllocationSize());
   return true;
 }
 
@@ -230,7 +230,7 @@
   if (!ParseJpegStream(mapped_file_->data(), mapped_file_->length(), &result))
     return false;
 
-  frame_size_ = result.image_size;
+  frame_size_ = static_cast<int>(result.image_size);
   if (frame_size_ > static_cast<int>(mapped_file_->length())) {
     LOG(ERROR) << "File is incomplete";
     return false;
@@ -255,7 +255,7 @@
                        &result)) {
     return nullptr;
   }
-  *frame_size = frame_size_ = result.image_size;
+  *frame_size = frame_size_ = static_cast<int>(result.image_size);
   current_byte_index_ += frame_size_;
   // Reset the pointer to play repeatedly.
   if (current_byte_index_ >= mapped_file_->length())
diff --git a/media/capture/video/file_video_capture_device.h b/media/capture/video/file_video_capture_device.h
index c3ecbfc..53d2670 100644
--- a/media/capture/video/file_video_capture_device.h
+++ b/media/capture/video/file_video_capture_device.h
@@ -32,7 +32,7 @@
 // Example MJPEG videos can be found in media/data/test/bear.mjpeg.
 // Restrictions: Y4M videos should have .y4m file extension and MJPEG videos
 // should have .mjpeg file extension.
-class MEDIA_EXPORT FileVideoCaptureDevice : public VideoCaptureDevice {
+class CAPTURE_EXPORT FileVideoCaptureDevice : public VideoCaptureDevice {
  public:
   // Reads and parses the header of a |file_path|, returning the collected
   // pixel format in |video_format|. Returns true on file parsed successfully,
diff --git a/media/capture/video/file_video_capture_device_factory.h b/media/capture/video/file_video_capture_device_factory.h
index 42ae083..8d99a28 100644
--- a/media/capture/video/file_video_capture_device_factory.h
+++ b/media/capture/video/file_video_capture_device_factory.h
@@ -12,7 +12,7 @@
 // Extension of VideoCaptureDeviceFactory to create and manipulate file-backed
 // fake devices. These devices play back video-only files as video capture
 // input.
-class MEDIA_EXPORT FileVideoCaptureDeviceFactory
+class CAPTURE_EXPORT FileVideoCaptureDeviceFactory
     : public VideoCaptureDeviceFactory {
  public:
   FileVideoCaptureDeviceFactory() {}
diff --git a/media/capture/video/linux/video_capture_device_factory_linux.h b/media/capture/video/linux/video_capture_device_factory_linux.h
index 02ebdfd..2790520 100644
--- a/media/capture/video/linux/video_capture_device_factory_linux.h
+++ b/media/capture/video/linux/video_capture_device_factory_linux.h
@@ -16,7 +16,7 @@
 
 // Extension of VideoCaptureDeviceFactory to create and manipulate Linux
 // devices.
-class MEDIA_EXPORT VideoCaptureDeviceFactoryLinux
+class CAPTURE_EXPORT VideoCaptureDeviceFactoryLinux
     : public VideoCaptureDeviceFactory {
  public:
   explicit VideoCaptureDeviceFactoryLinux(
diff --git a/media/capture/video/mac/video_capture_device_decklink_mac.h b/media/capture/video/mac/video_capture_device_decklink_mac.h
index 136872d..b078f21 100644
--- a/media/capture/video/mac/video_capture_device_decklink_mac.h
+++ b/media/capture/video/mac/video_capture_device_decklink_mac.h
@@ -32,7 +32,7 @@
 // Creates a reference counted |decklink_capture_delegate_| that does all the
 // DeckLink SDK configuration and capture work while holding a weak reference to
 // us for sending back frames, logs and error messages.
-class MEDIA_EXPORT VideoCaptureDeviceDeckLinkMac : public VideoCaptureDevice {
+class CAPTURE_EXPORT VideoCaptureDeviceDeckLinkMac : public VideoCaptureDevice {
  public:
   // Gets the names of all DeckLink video capture devices connected to this
   // computer, as enumerated by the DeckLink SDK. To allow the user to choose
diff --git a/media/capture/video/mac/video_capture_device_factory_mac.h b/media/capture/video/mac/video_capture_device_factory_mac.h
index 891284b..3c57efe 100644
--- a/media/capture/video/mac/video_capture_device_factory_mac.h
+++ b/media/capture/video/mac/video_capture_device_factory_mac.h
@@ -13,7 +13,7 @@
 namespace media {
 
 // Extension of VideoCaptureDeviceFactory to create and manipulate Mac devices.
-class MEDIA_EXPORT VideoCaptureDeviceFactoryMac
+class CAPTURE_EXPORT VideoCaptureDeviceFactoryMac
     : public VideoCaptureDeviceFactory {
  public:
   VideoCaptureDeviceFactoryMac();
diff --git a/media/capture/video/mac/video_capture_device_mac.h b/media/capture/video/mac/video_capture_device_mac.h
index 5b7a090..88b986b 100644
--- a/media/capture/video/mac/video_capture_device_mac.h
+++ b/media/capture/video/mac/video_capture_device_mac.h
@@ -33,7 +33,7 @@
 }  // namespace tracked_objects
 
 // Small class to bundle device name and connection type into a dictionary.
-MEDIA_EXPORT
+CAPTURE_EXPORT
 @interface DeviceNameAndTransportType : NSObject {
  @private
   base::scoped_nsobject<NSString> deviceName_;
diff --git a/media/capture/video/video_capture_device.h b/media/capture/video/video_capture_device.h
index ece44329..ffdb0b1 100644
--- a/media/capture/video/video_capture_device.h
+++ b/media/capture/video/video_capture_device.h
@@ -26,9 +26,9 @@
 #include "base/single_thread_task_runner.h"
 #include "base/time/time.h"
 #include "build/build_config.h"
-#include "media/base/media_export.h"
 #include "media/base/video_capture_types.h"
 #include "media/base/video_frame.h"
+#include "media/capture/capture_export.h"
 #include "media/capture/video/scoped_result_callback.h"
 #include "mojo/public/cpp/bindings/array.h"
 #include "ui/gfx/gpu_memory_buffer.h"
@@ -39,7 +39,7 @@
 
 namespace media {
 
-class MEDIA_EXPORT VideoCaptureDevice {
+class CAPTURE_EXPORT VideoCaptureDevice {
  public:
   // Represents a capture device name and ID.
   // You should not create an instance of this class directly by e.g. setting
@@ -49,7 +49,7 @@
   // The reason for this is that a device name might contain platform specific
   // settings that are relevant only to the platform specific implementation of
   // VideoCaptureDevice::Create.
-  class MEDIA_EXPORT Name {
+  class CAPTURE_EXPORT Name {
    public:
     Name();
     Name(const std::string& name, const std::string& id);
@@ -179,10 +179,10 @@
   // is actually two-in-one: clients may implement OnIncomingCapturedData() or
   // ReserveOutputBuffer() + OnIncomingCapturedVideoFrame(), or all of them.
   // All clients must implement OnError().
-  class MEDIA_EXPORT Client {
+  class CAPTURE_EXPORT Client {
    public:
     // Memory buffer returned by Client::ReserveOutputBuffer().
-    class MEDIA_EXPORT Buffer {
+    class CAPTURE_EXPORT Buffer {
      public:
       virtual ~Buffer() = 0;
       virtual int id() const = 0;
diff --git a/media/capture/video/video_capture_device_factory.h b/media/capture/video/video_capture_device_factory.h
index fd85ed85..de16133 100644
--- a/media/capture/video/video_capture_device_factory.h
+++ b/media/capture/video/video_capture_device_factory.h
@@ -15,7 +15,7 @@
 // devices in the different platforms. VCDFs are created by MediaStreamManager
 // on IO thread and plugged into VideoCaptureManager, who owns and operates them
 // in Device Thread (a.k.a. Audio Thread).
-class MEDIA_EXPORT VideoCaptureDeviceFactory {
+class CAPTURE_EXPORT VideoCaptureDeviceFactory {
  public:
   static std::unique_ptr<VideoCaptureDeviceFactory> CreateFactory(
       scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner);
diff --git a/media/capture/video/video_capture_device_info.h b/media/capture/video/video_capture_device_info.h
index e091dec..5f68649b0 100644
--- a/media/capture/video/video_capture_device_info.h
+++ b/media/capture/video/video_capture_device_info.h
@@ -11,7 +11,7 @@
 namespace media {
 
 // A convenience wrap of a device's name and associated supported formats.
-struct MEDIA_EXPORT VideoCaptureDeviceInfo {
+struct CAPTURE_EXPORT VideoCaptureDeviceInfo {
   VideoCaptureDeviceInfo();
   VideoCaptureDeviceInfo(const VideoCaptureDevice::Name& name,
                          const VideoCaptureFormats& supported_formats);
diff --git a/media/capture/video/win/filter_base_win.cc b/media/capture/video/win/filter_base_win.cc
index 166b860..c43ec64 100644
--- a/media/capture/video/win/filter_base_win.cc
+++ b/media/capture/video/win/filter_base_win.cc
@@ -38,7 +38,8 @@
   STDMETHOD(Next)(ULONG count, IPin** pins, ULONG* fetched) override {
     ULONG pins_fetched = 0;
     while (pins_fetched < count && filter_->NoOfPins() > index_) {
-      IPin* pin = filter_->GetPin(index_++);
+      index_++;
+      IPin* pin = filter_->GetPin(static_cast<int>(index_));
       pin->AddRef();
       pins[pins_fetched++] = pin;
     }
diff --git a/media/capture/video/win/video_capture_device_factory_win.cc b/media/capture/video/win/video_capture_device_factory_win.cc
index 3c3bf31..6c5ee5f 100644
--- a/media/capture/video/win/video_capture_device_factory_win.cc
+++ b/media/capture/video/win/video_capture_device_factory_win.cc
@@ -114,7 +114,8 @@
     if (base::StartsWith(name, kBlacklistedCameraNames[i],
                          base::CompareCase::INSENSITIVE_ASCII)) {
       DVLOG(1) << "Enumerated blacklisted device: " << name;
-      UMA_HISTOGRAM_ENUMERATION("Media.VideoCapture.BlacklistedDevice", i,
+      UMA_HISTOGRAM_ENUMERATION("Media.VideoCapture.BlacklistedDevice",
+                                static_cast<int32_t>(i),
                                 BLACKLISTED_CAMERA_MAX + 1);
       return true;
     }
diff --git a/media/capture/video/win/video_capture_device_factory_win.h b/media/capture/video/win/video_capture_device_factory_win.h
index 09b5768..86477a30 100644
--- a/media/capture/video/win/video_capture_device_factory_win.h
+++ b/media/capture/video/win/video_capture_device_factory_win.h
@@ -14,7 +14,7 @@
 
 // Extension of VideoCaptureDeviceFactory to create and manipulate Windows
 // devices, via either DirectShow or MediaFoundation APIs.
-class MEDIA_EXPORT VideoCaptureDeviceFactoryWin
+class CAPTURE_EXPORT VideoCaptureDeviceFactoryWin
     : public VideoCaptureDeviceFactory {
  public:
   static bool PlatformSupportsMediaFoundation();
diff --git a/media/capture/video/win/video_capture_device_mf_win.h b/media/capture/video/win/video_capture_device_mf_win.h
index ae6d5ca9..971b537 100644
--- a/media/capture/video/win/video_capture_device_mf_win.h
+++ b/media/capture/video/win/video_capture_device_mf_win.h
@@ -19,7 +19,7 @@
 #include "base/synchronization/lock.h"
 #include "base/threading/non_thread_safe.h"
 #include "base/win/scoped_comptr.h"
-#include "media/base/media_export.h"
+#include "media/capture/capture_export.h"
 #include "media/capture/video/video_capture_device.h"
 
 interface IMFSourceReader;
@@ -35,8 +35,8 @@
 const DWORD kFirstVideoStream =
     static_cast<DWORD>(MF_SOURCE_READER_FIRST_VIDEO_STREAM);
 
-class MEDIA_EXPORT VideoCaptureDeviceMFWin : public base::NonThreadSafe,
-                                             public VideoCaptureDevice {
+class CAPTURE_EXPORT VideoCaptureDeviceMFWin : public base::NonThreadSafe,
+                                               public VideoCaptureDevice {
  public:
   static bool FormatFromGuid(const GUID& guid, VideoPixelFormat* format);
 
diff --git a/media/cast/cast.gyp b/media/cast/cast.gyp
index b2d930a..4d8e83e 100644
--- a/media/cast/cast.gyp
+++ b/media/cast/cast.gyp
@@ -131,6 +131,9 @@
             '<(DEPTH)/third_party/libvpx/libvpx.gyp:libvpx',
           ],
         }], # OS=="ios"
+        ['OS=="win"', {
+          'dependencies': [ '<(DEPTH)/media/media.gyp:mf_initializer' ],
+        }],
       ], # conditions
     },
     {
diff --git a/media/gpu/BUILD.gn b/media/gpu/BUILD.gn
index 2f31c10..2a630e8 100644
--- a/media/gpu/BUILD.gn
+++ b/media/gpu/BUILD.gn
@@ -331,9 +331,11 @@
       "dxva_video_decode_accelerator_win.h",
     ]
     configs += [
+      # TODO(jschuh): crbug.com/167187 fix size_t to int truncations.
       "//build/config/compiler:no_size_t_to_int_warning",
       "//third_party/khronos:khronos_headers",
     ]
+    public_deps += [ "//media/base/win" ]
     deps += [ "//third_party/angle:includes" ]
     libs += [
       "d3d9.lib",
diff --git a/media/media.gyp b/media/media.gyp
index a553800..6bfddab 100644
--- a/media/media.gyp
+++ b/media/media.gyp
@@ -49,7 +49,6 @@
     ],
   },
   'includes': [
-    'capture/capture.gypi',
     'media_cdm.gypi',
     'media_variables.gypi',
   ],
@@ -102,11 +101,7 @@
       'include_dirs': [
         '..',
       ],
-      'includes': [
-        'capture/capture.gypi',
-      ],
       'sources': [
-        '<@(capture_sources)',
         'audio/agc_audio_stream.h',
         'audio/alsa/alsa_input.cc',
         'audio/alsa/alsa_input.h',
@@ -475,8 +470,6 @@
         'base/video_util.h',
         'base/wall_clock_time_source.cc',
         'base/wall_clock_time_source.h',
-        'base/win/mf_initializer.cc',
-        'base/win/mf_initializer.h',
         'base/yuv_convert.cc',
         'base/yuv_convert.h',
         'cdm/aes_decryptor.cc',
@@ -713,11 +706,9 @@
         }],
         ['OS=="android"', {
           'dependencies': [
-            'capture_java',
             'media_android_jni_headers',
             'media_java',
             'player_android',
-            'video_capture_android_jni_headers',
           ],
           'sources!': [
             'base/audio_video_metadata_extractor.cc',
@@ -820,12 +811,6 @@
                 'audio/cras/cras_unified.h',
               ],
             }],
-
-            ['use_udev==1', {
-              'dependencies': [
-                '<(DEPTH)/device/udev_linux/udev.gyp:udev_linux',
-              ],
-            }],
           ],
         }],
         ['OS!="linux"', {
@@ -923,10 +908,6 @@
           ],
         }],
         ['OS=="mac"', {
-          'dependencies': [
-            '<(DEPTH)/third_party/decklink/decklink.gyp:decklink',
-          ],
-
           'link_settings': {
             'libraries': [
               '$(SDKROOT)/System/Library/Frameworks/AudioToolbox.framework',
@@ -939,39 +920,6 @@
           },
         }],
         ['OS=="win"', {
-          'link_settings':  {
-            'libraries': [
-              '-ldxguid.lib',
-              '-lmf.lib',
-              '-lmfplat.lib',
-              '-lmfreadwrite.lib',
-              '-lmfuuid.lib',
-              '-lsetupapi.lib',
-              '-lwinmm.lib',
-            ],
-          },
-          # Specify delayload for media.dll.
-          'msvs_settings': {
-            'VCLinkerTool': {
-              'DelayLoadDLLs': [
-                'mf.dll',
-                'mfplat.dll',
-                'mfreadwrite.dll',
-              ],
-            },
-          },
-          # Specify delayload for components that link with media.lib.
-          'all_dependent_settings': {
-            'msvs_settings': {
-              'VCLinkerTool': {
-                'DelayLoadDLLs': [
-                  'mf.dll',
-                  'mfplat.dll',
-                  'mfreadwrite.dll',
-                ],
-              },
-            },
-          },
           # TODO(wolenetz): Fix size_t to int truncations in win64. See
           # http://crbug.com/171009
           'conditions': [
@@ -1127,6 +1075,8 @@
       'type': '<(gtest_target_type)',
       'dependencies': [
         'audio_test_config',
+        # TODO(mcasas): Remove this entry after https://crbug.com/618718.
+        'capture/capture.gyp:unittests',
         'cdm_paths',
         'media',
         'media_features',
@@ -1149,7 +1099,6 @@
         '../url/url.gyp:url_lib',
       ],
       'sources': [
-        '<@(capture_unittests_sources)',
         'base/android/access_unit_queue_unittest.cc',
         'base/android/media_codec_decoder_unittest.cc',
         'base/android/media_drm_bridge_unittest.cc',
@@ -1545,12 +1494,14 @@
     },
     {
       # GN version: //media:audio_unittests
-      # For running the subset of media_unittests that might require audio
+      # For running the subset of tests that might require audio
       # hardware separately on GPU bots. media_unittests includes these too.
       'target_name': 'audio_unittests',
       'type': '<(gtest_target_type)',
       'dependencies': [
         'audio_test_config',
+        # TODO(mcasas): Remove this entry after https://crbug.com/618718.
+        'capture/capture.gyp:unittests',
         'media_test_support',
         '../base/base.gyp:test_support_base',
         '../testing/gmock.gyp:gmock',
@@ -1748,6 +1699,56 @@
         },
       ], # targets
     }],
+    ['OS=="win"', {
+      'targets': [
+        {
+          # GN version: //media/base/win
+          'target_name': 'mf_initializer',
+          'type': '<(component)',
+          'include_dirs': [ '..', ],
+          'defines': [ 'MF_INITIALIZER_IMPLEMENTATION', ],
+          'sources': [
+            'base/win/mf_initializer_export.h',
+            'base/win/mf_initializer.cc',
+            'base/win/mf_initializer.h',
+          ],
+          'dependencies': [
+            '../base/base.gyp:base',
+          ],
+          'link_settings':  {
+            'libraries': [
+              '-ldxguid.lib',
+              '-lmf.lib',
+              '-lmfplat.lib',
+              '-lmfreadwrite.lib',
+              '-lmfuuid.lib',
+              '-lsetupapi.lib',
+              '-lwinmm.lib',
+            ],
+          },
+          'msvs_settings': {
+            'VCLinkerTool': {
+              'DelayLoadDLLs': [
+                'mf.dll',
+                'mfplat.dll',
+                'mfreadwrite.dll',
+              ],
+            },
+          },
+          'all_dependent_settings': {
+            'msvs_settings': {
+              'VCLinkerTool': {
+                'DelayLoadDLLs': [
+                  'mf.dll',
+                  'mfplat.dll',
+                  'mfreadwrite.dll',
+                ],
+              },
+            },
+          },
+        },
+      ],
+    }],
     ['OS=="android"', {
       'targets': [
         {
@@ -1755,7 +1756,6 @@
           'target_name': 'media_unittests_apk',
           'type': 'none',
           'dependencies': [
-            'capture_java',
             'media_java',
             'media_unittests',
           ],
@@ -1770,7 +1770,6 @@
           'target_name': 'media_perftests_apk',
           'type': 'none',
           'dependencies': [
-            'capture_java',
             'media_java',
             'media_perftests',
           ],
@@ -1799,19 +1798,6 @@
           'includes': ['../build/jni_generator.gypi'],
         },
         {
-          # GN: //media/capture/video/android:capture_jni_headers
-          'target_name': 'video_capture_android_jni_headers',
-          'type': 'none',
-          'sources': [
-            'capture/video/android/java/src/org/chromium/media/VideoCapture.java',
-            'capture/video/android/java/src/org/chromium/media/VideoCaptureFactory.java',
-          ],
-          'variables': {
-            'jni_gen_package': 'media',
-          },
-          'includes': ['../build/jni_generator.gypi'],
-        },
-        {
           # GN: //media/base/android:android
           'target_name': 'player_android',
           'type': 'static_library',
@@ -1901,23 +1887,6 @@
           ],
         },
         {
-          # GN: //media/capture/video/android:capture_java
-          'target_name': 'capture_java',
-          'type': 'none',
-          'dependencies': [
-            '../base/base.gyp:base',
-            'media_android_captureapitype',
-            'media_android_imageformat',
-          ],
-          'export_dependent_settings': [
-            '../base/base.gyp:base',
-          ],
-          'variables': {
-            'java_in_dir': 'capture/video/android/java',
-          },
-          'includes': ['../build/java.gypi'],
-        },
-        {
           # GN: //media/base/android:media_java
           'target_name': 'media_java',
           'type': 'none',
@@ -1932,24 +1901,6 @@
           },
           'includes': ['../build/java.gypi'],
         },
-        {
-          # GN: //media/base/android:media_android_captureapitype
-          'target_name': 'media_android_captureapitype',
-          'type': 'none',
-          'variables': {
-            'source_file': 'capture/video/video_capture_device.h',
-          },
-          'includes': [ '../build/android/java_cpp_enum.gypi' ],
-        },
-        {
-          # GN: //media/base/android:media_android_imageformat
-          'target_name': 'media_android_imageformat',
-          'type': 'none',
-          'variables': {
-            'source_file': 'capture/video/android/video_capture_device_android.h',
-          },
-          'includes': [ '../build/android/java_cpp_enum.gypi' ],
-        },
       ],
       'conditions': [
         ['test_isolation_mode != "noop"',
diff --git a/media/media_gpu.gypi b/media/media_gpu.gypi
index 70c1398..8bea3e23 100644
--- a/media/media_gpu.gypi
+++ b/media/media_gpu.gypi
@@ -323,6 +323,7 @@
     ['OS=="win"', {
       'dependencies': [
         '../media/media.gyp:media',
+        '../media/media.gyp:mf_initializer',
         '../ui/gl/gl.gyp:gl',
         '../ui/gl/init/gl_init.gyp:gl_init',
       ],
diff --git a/media/mojo/services/media_mojo_unittest.cc b/media/mojo/services/media_mojo_unittest.cc
index 2c6c9c0..db87a1f7 100644
--- a/media/mojo/services/media_mojo_unittest.cc
+++ b/media/mojo/services/media_mojo_unittest.cc
@@ -59,7 +59,7 @@
   MediaShellTest()
       : ShellTest("exe:media_mojo_unittests"),
         renderer_client_binding_(&renderer_client_),
-        video_demuxer_stream_(DemuxerStream::VIDEO) {}
+        video_stream_(DemuxerStream::VIDEO) {}
   ~MediaShellTest() override {}
 
   void SetUp() override {
@@ -102,16 +102,17 @@
                           bool expected_result) {
     service_factory_->CreateRenderer(mojo::GetProxy(&renderer_));
 
-    video_demuxer_stream_.set_video_decoder_config(video_config);
+    video_stream_.set_video_decoder_config(video_config);
 
-    mojom::DemuxerStreamPtr video_stream;
-    new MojoDemuxerStreamImpl(&video_demuxer_stream_, GetProxy(&video_stream));
+    mojom::DemuxerStreamPtr video_stream_proxy;
+    mojo_video_stream_.reset(new MojoDemuxerStreamImpl(
+        &video_stream_, GetProxy(&video_stream_proxy)));
 
     EXPECT_CALL(*this, OnRendererInitialized(expected_result))
         .Times(Exactly(1))
         .WillOnce(InvokeWithoutArgs(run_loop_.get(), &base::RunLoop::Quit));
     renderer_->Initialize(renderer_client_binding_.CreateInterfacePtrAndBind(),
-                          nullptr, std::move(video_stream),
+                          nullptr, std::move(video_stream_proxy),
                           base::Bind(&MediaShellTest::OnRendererInitialized,
                                      base::Unretained(this)));
   }
@@ -128,7 +129,8 @@
   StrictMock<MockRendererClient> renderer_client_;
   mojo::Binding<mojom::RendererClient> renderer_client_binding_;
 
-  StrictMock<MockDemuxerStream> video_demuxer_stream_;
+  StrictMock<MockDemuxerStream> video_stream_;
+  std::unique_ptr<MojoDemuxerStreamImpl> mojo_video_stream_;
 
  private:
   std::unique_ptr<shell::Connection> connection_;
diff --git a/net/BUILD.gn b/net/BUILD.gn
index 020e7d1..2ec0189 100644
--- a/net/BUILD.gn
+++ b/net/BUILD.gn
@@ -632,6 +632,10 @@
     ":test_support_bundle_data",
   ]
 
+  data = [
+    "data/",
+  ]
+
   if (!is_ios) {
     public_deps += [ "//third_party/protobuf:py_proto" ]
   }
@@ -1429,9 +1433,7 @@
     "//url:url_features",
   ]
 
-  data = [
-    "data/",
-  ]
+  data = []
   data_deps = [
     "third_party/nist-pkits/",
   ]
diff --git a/net/http/http_network_layer_unittest.cc b/net/http/http_network_layer_unittest.cc
index 6753309..bab57ccf 100644
--- a/net/http/http_network_layer_unittest.cc
+++ b/net/http/http_network_layer_unittest.cc
@@ -44,8 +44,7 @@
     session_params.transport_security_state = transport_security_state_.get();
     session_params.proxy_service = proxy_service_.get();
     session_params.ssl_config_service = ssl_config_service_.get();
-    session_params.http_server_properties =
-        http_server_properties_.GetWeakPtr();
+    session_params.http_server_properties = &http_server_properties_;
     network_session_.reset(new HttpNetworkSession(session_params));
     factory_.reset(new HttpNetworkLayer(network_session_.get()));
   }
diff --git a/net/http/http_network_session.h b/net/http/http_network_session.h
index fc114cb8..7952421 100644
--- a/net/http/http_network_session.h
+++ b/net/http/http_network_session.h
@@ -76,7 +76,7 @@
     ProxyService* proxy_service;
     SSLConfigService* ssl_config_service;
     HttpAuthHandlerFactory* http_auth_handler_factory;
-    base::WeakPtr<HttpServerProperties> http_server_properties;
+    HttpServerProperties* http_server_properties;
     NetLog* net_log;
     HostMappingRules* host_mapping_rules;
     SocketPerformanceWatcherFactory* socket_performance_watcher_factory;
@@ -227,7 +227,7 @@
   HttpAuthHandlerFactory* http_auth_handler_factory() {
     return http_auth_handler_factory_;
   }
-  base::WeakPtr<HttpServerProperties> http_server_properties() {
+  HttpServerProperties* http_server_properties() {
     return http_server_properties_;
   }
   HttpStreamFactory* http_stream_factory() {
@@ -276,7 +276,7 @@
   ClientSocketPoolManager* GetSocketPoolManager(SocketPoolType pool_type);
 
   NetLog* const net_log_;
-  const base::WeakPtr<HttpServerProperties> http_server_properties_;
+  HttpServerProperties* const http_server_properties_;
   CertVerifier* const cert_verifier_;
   HttpAuthHandlerFactory* const http_auth_handler_factory_;
 
diff --git a/net/http/http_network_transaction_ssl_unittest.cc b/net/http/http_network_transaction_ssl_unittest.cc
index 45c46e4..499689c 100644
--- a/net/http/http_network_transaction_ssl_unittest.cc
+++ b/net/http/http_network_transaction_ssl_unittest.cc
@@ -85,8 +85,7 @@
 
     session_params_.client_socket_factory = &mock_socket_factory_;
     session_params_.host_resolver = &mock_resolver_;
-    session_params_.http_server_properties =
-        http_server_properties_.GetWeakPtr();
+    session_params_.http_server_properties = &http_server_properties_;
     session_params_.transport_security_state = &transport_security_state_;
   }
 
diff --git a/net/http/http_network_transaction_unittest.cc b/net/http/http_network_transaction_unittest.cc
index 7486324..342e170c 100644
--- a/net/http/http_network_transaction_unittest.cc
+++ b/net/http/http_network_transaction_unittest.cc
@@ -9093,7 +9093,7 @@
     SpdySessionDependencies* session_deps_) {
   std::unique_ptr<HttpNetworkSession> session(CreateSession(session_deps_));
 
-  base::WeakPtr<HttpServerProperties> http_server_properties =
+  HttpServerProperties* http_server_properties =
       session->http_server_properties();
   AlternativeService alternative_service(
       AlternateProtocolFromNextProto(next_proto), "", 443);
@@ -9984,10 +9984,10 @@
   EXPECT_EQ(ERR_IO_PENDING, rv);
 
   url::SchemeHostPort test_server("http", "www.example.org", 80);
-  HttpServerProperties& http_server_properties =
-      *session->http_server_properties();
+  HttpServerProperties* http_server_properties =
+      session->http_server_properties();
   AlternativeServiceVector alternative_service_vector =
-      http_server_properties.GetAlternativeServices(test_server);
+      http_server_properties->GetAlternativeServices(test_server);
   EXPECT_TRUE(alternative_service_vector.empty());
 
   EXPECT_EQ(OK, callback.WaitForResult());
@@ -10004,7 +10004,7 @@
   EXPECT_EQ("hello world", response_data);
 
   alternative_service_vector =
-      http_server_properties.GetAlternativeServices(test_server);
+      http_server_properties->GetAlternativeServices(test_server);
   ASSERT_EQ(1u, alternative_service_vector.size());
   EXPECT_EQ(AlternateProtocolFromNextProto(GetProtocol()),
             alternative_service_vector[0].protocol);
@@ -10043,10 +10043,10 @@
       new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get()));
 
   url::SchemeHostPort test_server(request.url);
-  HttpServerProperties& http_server_properties =
-      *session->http_server_properties();
+  HttpServerProperties* http_server_properties =
+      session->http_server_properties();
   AlternativeServiceVector alternative_service_vector =
-      http_server_properties.GetAlternativeServices(test_server);
+      http_server_properties->GetAlternativeServices(test_server);
   EXPECT_TRUE(alternative_service_vector.empty());
 
   int rv = trans->Start(&request, callback.callback(), BoundNetLog());
@@ -10065,7 +10065,7 @@
   EXPECT_EQ("hello world", response_data);
 
   alternative_service_vector =
-      http_server_properties.GetAlternativeServices(test_server);
+      http_server_properties->GetAlternativeServices(test_server);
   EXPECT_TRUE(alternative_service_vector.empty());
 }
 
@@ -10096,7 +10096,7 @@
 
   std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_));
 
-  base::WeakPtr<HttpServerProperties> http_server_properties =
+  HttpServerProperties* http_server_properties =
       session->http_server_properties();
   AlternativeService alternative_service(
       AlternateProtocolFromNextProto(GetProtocol()), "different.example.org",
@@ -10140,7 +10140,7 @@
 
   std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_));
 
-  base::WeakPtr<HttpServerProperties> http_server_properties =
+  HttpServerProperties* http_server_properties =
       session->http_server_properties();
   AlternativeService alternative_service(
       AlternateProtocolFromNextProto(GetProtocol()), "", 444);
@@ -10162,15 +10162,15 @@
 
   // Set an alternative service for origin.
   std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_));
-  HttpServerProperties& http_server_properties =
-      *session->http_server_properties();
+  HttpServerProperties* http_server_properties =
+      session->http_server_properties();
   url::SchemeHostPort test_server("http", "www.example.org", 80);
   AlternativeService alternative_service(QUIC, "", 80);
   base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1);
-  http_server_properties.SetAlternativeService(test_server, alternative_service,
-                                               expiration);
+  http_server_properties->SetAlternativeService(
+      test_server, alternative_service, expiration);
   AlternativeServiceVector alternative_service_vector =
-      http_server_properties.GetAlternativeServices(test_server);
+      http_server_properties->GetAlternativeServices(test_server);
   EXPECT_EQ(1u, alternative_service_vector.size());
 
   // Send a clear header.
@@ -10209,7 +10209,7 @@
   EXPECT_EQ("hello world", response_data);
 
   alternative_service_vector =
-      http_server_properties.GetAlternativeServices(test_server);
+      http_server_properties->GetAlternativeServices(test_server);
   EXPECT_TRUE(alternative_service_vector.empty());
 }
 
@@ -10246,10 +10246,10 @@
   EXPECT_EQ(ERR_IO_PENDING, rv);
 
   url::SchemeHostPort test_server("http", "www.example.org", 80);
-  HttpServerProperties& http_server_properties =
-      *session->http_server_properties();
+  HttpServerProperties* http_server_properties =
+      session->http_server_properties();
   AlternativeServiceVector alternative_service_vector =
-      http_server_properties.GetAlternativeServices(test_server);
+      http_server_properties->GetAlternativeServices(test_server);
   EXPECT_TRUE(alternative_service_vector.empty());
 
   EXPECT_EQ(OK, callback.WaitForResult());
@@ -10266,7 +10266,7 @@
   EXPECT_EQ("hello world", response_data);
 
   alternative_service_vector =
-      http_server_properties.GetAlternativeServices(test_server);
+      http_server_properties->GetAlternativeServices(test_server);
   ASSERT_EQ(2u, alternative_service_vector.size());
   EXPECT_EQ(AlternateProtocolFromNextProto(GetProtocol()),
             alternative_service_vector[0].protocol);
@@ -10303,7 +10303,7 @@
 
   std::unique_ptr<HttpNetworkSession> session = CreateSession(&session_deps_);
 
-  base::WeakPtr<HttpServerProperties> http_server_properties =
+  HttpServerProperties* http_server_properties =
       session->http_server_properties();
   AlternativeService alternative_service(
       AlternateProtocolFromNextProto(GetProtocol()), "different.example.org",
@@ -10358,7 +10358,7 @@
   // Set up a QUIC alternative service for server.
   session_deps_.enable_alternative_service_with_different_host = false;
   std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_));
-  base::WeakPtr<HttpServerProperties> http_server_properties =
+  HttpServerProperties* http_server_properties =
       session->http_server_properties();
   AlternativeService alternative_service(QUIC, alternative);
   base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1);
@@ -10418,7 +10418,7 @@
 
   session_deps_.enable_alternative_service_with_different_host = true;
   std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_));
-  base::WeakPtr<HttpServerProperties> http_server_properties =
+  HttpServerProperties* http_server_properties =
       session->http_server_properties();
 
   // Set up two QUIC alternative services for server.
@@ -10483,7 +10483,7 @@
 
   std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_));
 
-  base::WeakPtr<HttpServerProperties> http_server_properties =
+  HttpServerProperties* http_server_properties =
       session->http_server_properties();
   const url::SchemeHostPort server(request.url);
   // Port must be < 1024, or the header will be ignored (since initial port was
@@ -10549,7 +10549,7 @@
 
   std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_));
 
-  base::WeakPtr<HttpServerProperties> http_server_properties =
+  HttpServerProperties* http_server_properties =
       session->http_server_properties();
   const int kUnrestrictedAlternatePort = 1024;
   AlternativeService alternative_service(
@@ -10601,7 +10601,7 @@
 
   std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_));
 
-  base::WeakPtr<HttpServerProperties> http_server_properties =
+  HttpServerProperties* http_server_properties =
       session->http_server_properties();
   const int kUnrestrictedAlternatePort = 1024;
   AlternativeService alternative_service(
@@ -10652,7 +10652,7 @@
 
   std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_));
 
-  base::WeakPtr<HttpServerProperties> http_server_properties =
+  HttpServerProperties* http_server_properties =
       session->http_server_properties();
   const int kRestrictedAlternatePort = 80;
   AlternativeService alternative_service(
@@ -10704,7 +10704,7 @@
 
   std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_));
 
-  base::WeakPtr<HttpServerProperties> http_server_properties =
+  HttpServerProperties* http_server_properties =
       session->http_server_properties();
   const int kRestrictedAlternatePort = 80;
   AlternativeService alternative_service(
@@ -10755,7 +10755,7 @@
 
   std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_));
 
-  base::WeakPtr<HttpServerProperties> http_server_properties =
+  HttpServerProperties* http_server_properties =
       session->http_server_properties();
   const int kUnrestrictedAlternatePort = 1025;
   AlternativeService alternative_service(
@@ -10801,7 +10801,7 @@
 
   std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_));
 
-  base::WeakPtr<HttpServerProperties> http_server_properties =
+  HttpServerProperties* http_server_properties =
       session->http_server_properties();
   const int kUnsafePort = 7;
   AlternativeService alternative_service(
@@ -13541,7 +13541,7 @@
 
     session_deps_.enable_alternative_service_with_different_host = true;
     std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_));
-    base::WeakPtr<HttpServerProperties> http_server_properties =
+    HttpServerProperties* http_server_properties =
         session->http_server_properties();
     AlternativeService alternative_service(
         AlternateProtocolFromNextProto(GetProtocol()), alternative);
@@ -13646,7 +13646,7 @@
   // Set up alternative service for server.
   session_deps_.enable_alternative_service_with_different_host = true;
   std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_));
-  base::WeakPtr<HttpServerProperties> http_server_properties =
+  HttpServerProperties* http_server_properties =
       session->http_server_properties();
   AlternativeService alternative_service(
       AlternateProtocolFromNextProto(GetProtocol()), alternative);
@@ -13717,7 +13717,7 @@
   // Set up alternative service for server.
   session_deps_.enable_alternative_service_with_different_host = true;
   std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_));
-  base::WeakPtr<HttpServerProperties> http_server_properties =
+  HttpServerProperties* http_server_properties =
       session->http_server_properties();
   AlternativeService alternative_service(
       AlternateProtocolFromNextProto(GetProtocol()), alternative);
@@ -13826,7 +13826,7 @@
   // Set up alternative service for server.
   session_deps_.enable_alternative_service_with_different_host = false;
   std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_));
-  base::WeakPtr<HttpServerProperties> http_server_properties =
+  HttpServerProperties* http_server_properties =
       session->http_server_properties();
   AlternativeService alternative_service(
       AlternateProtocolFromNextProto(GetProtocol()), alternative);
diff --git a/net/http/http_response_body_drainer_unittest.cc b/net/http/http_response_body_drainer_unittest.cc
index 4d280d3..fdaa315 100644
--- a/net/http/http_response_body_drainer_unittest.cc
+++ b/net/http/http_response_body_drainer_unittest.cc
@@ -241,7 +241,7 @@
     HttpNetworkSession::Params params;
     params.proxy_service = proxy_service_.get();
     params.ssl_config_service = ssl_config_service_.get();
-    params.http_server_properties = http_server_properties_->GetWeakPtr();
+    params.http_server_properties = http_server_properties_.get();
     params.transport_security_state = transport_security_state_.get();
     return new HttpNetworkSession(params);
   }
diff --git a/net/http/http_server_properties.h b/net/http/http_server_properties.h
index 8827f42..5acc682 100644
--- a/net/http/http_server_properties.h
+++ b/net/http/http_server_properties.h
@@ -14,7 +14,6 @@
 
 #include "base/containers/mru_cache.h"
 #include "base/macros.h"
-#include "base/memory/weak_ptr.h"
 #include "base/time/time.h"
 #include "net/base/host_port_pair.h"
 #include "net/base/net_export.h"
@@ -230,9 +229,6 @@
   HttpServerProperties() {}
   virtual ~HttpServerProperties() {}
 
-  // Gets a weak pointer for this object.
-  virtual base::WeakPtr<HttpServerProperties> GetWeakPtr() = 0;
-
   // Deletes all data.
   virtual void Clear() = 0;
 
diff --git a/net/http/http_server_properties_impl.cc b/net/http/http_server_properties_impl.cc
index bc41c9ae..9e6e92e 100644
--- a/net/http/http_server_properties_impl.cc
+++ b/net/http/http_server_properties_impl.cc
@@ -219,10 +219,6 @@
   }
 }
 
-base::WeakPtr<HttpServerProperties> HttpServerPropertiesImpl::GetWeakPtr() {
-  return weak_ptr_factory_.GetWeakPtr();
-}
-
 void HttpServerPropertiesImpl::Clear() {
   DCHECK(CalledOnValidThread());
   spdy_servers_map_.Clear();
diff --git a/net/http/http_server_properties_impl.h b/net/http/http_server_properties_impl.h
index 116b81f6..526045d 100644
--- a/net/http/http_server_properties_impl.h
+++ b/net/http/http_server_properties_impl.h
@@ -15,6 +15,7 @@
 #include <vector>
 
 #include "base/macros.h"
+#include "base/memory/weak_ptr.h"
 #include "base/threading/non_thread_safe.h"
 #include "base/values.h"
 #include "net/base/host_port_pair.h"
@@ -77,7 +78,6 @@
   // HttpServerProperties methods:
   // -----------------------------
 
-  base::WeakPtr<HttpServerProperties> GetWeakPtr() override;
   void Clear() override;
   bool SupportsRequestPriority(const url::SchemeHostPort& server) override;
   bool GetSupportsSpdy(const url::SchemeHostPort& server) override;
diff --git a/net/http/http_server_properties_manager.cc b/net/http/http_server_properties_manager.cc
index 3c7fa3e..e460a9fa 100644
--- a/net/http/http_server_properties_manager.cc
+++ b/net/http/http_server_properties_manager.cc
@@ -130,12 +130,6 @@
     http_server_properties_dict->SetInteger(kVersionKey, version_number);
 }
 
-// This is required for conformance with the HttpServerProperties interface.
-base::WeakPtr<HttpServerProperties> HttpServerPropertiesManager::GetWeakPtr() {
-  DCHECK(network_task_runner_->RunsTasksOnCurrentThread());
-  return network_weak_ptr_factory_->GetWeakPtr();
-}
-
 void HttpServerPropertiesManager::Clear() {
   Clear(base::Closure());
 }
diff --git a/net/http/http_server_properties_manager.h b/net/http/http_server_properties_manager.h
index c16761a..2ba49b5 100644
--- a/net/http/http_server_properties_manager.h
+++ b/net/http/http_server_properties_manager.h
@@ -106,7 +106,6 @@
   // HttpServerProperties methods:
   // ----------------------------------
 
-  base::WeakPtr<HttpServerProperties> GetWeakPtr() override;
   void Clear() override;
   bool SupportsRequestPriority(const url::SchemeHostPort& server) override;
   bool GetSupportsSpdy(const url::SchemeHostPort& server) override;
diff --git a/net/http/http_stream_factory_impl_job.cc b/net/http/http_stream_factory_impl_job.cc
index 8ac81e6..b137b91 100644
--- a/net/http/http_stream_factory_impl_job.cc
+++ b/net/http/http_stream_factory_impl_job.cc
@@ -256,7 +256,7 @@
 
 int HttpStreamFactoryImpl::Job::Preconnect(int num_streams) {
   DCHECK_GT(num_streams, 0);
-  base::WeakPtr<HttpServerProperties> http_server_properties =
+  HttpServerProperties* http_server_properties =
       session_->http_server_properties();
   if (http_server_properties &&
       http_server_properties->SupportsRequestPriority(
@@ -1016,7 +1016,7 @@
 
   const bool expect_spdy = IsSpdyAlternative();
 
-  base::WeakPtr<HttpServerProperties> http_server_properties =
+  HttpServerProperties* http_server_properties =
       session_->http_server_properties();
   if (http_server_properties) {
     http_server_properties->MaybeForceHTTP11(destination_, &server_ssl_config_);
@@ -1367,7 +1367,7 @@
                                        host_port_pair.host(),
                                        host_port_pair.port());
 
-  base::WeakPtr<HttpServerProperties> http_server_properties =
+  HttpServerProperties* http_server_properties =
       session_->http_server_properties();
   if (http_server_properties)
     http_server_properties->SetSupportsSpdy(scheme_host_port, true);
diff --git a/net/http/http_stream_factory_impl_unittest.cc b/net/http/http_stream_factory_impl_unittest.cc
index 198569b..943528a 100644
--- a/net/http/http_stream_factory_impl_unittest.cc
+++ b/net/http/http_stream_factory_impl_unittest.cc
@@ -695,7 +695,7 @@
     params.transport_security_state = &transport_security_state;
     params.proxy_service = proxy_service.get();
     params.ssl_config_service = ssl_config_service.get();
-    params.http_server_properties = http_server_properties.GetWeakPtr();
+    params.http_server_properties = &http_server_properties;
 
     std::unique_ptr<HttpNetworkSession> session(new HttpNetworkSession(params));
     session->quic_stream_factory()->set_require_confirmation(false);
@@ -819,7 +819,7 @@
   params.transport_security_state = &transport_security_state;
   params.proxy_service = proxy_service.get();
   params.ssl_config_service = ssl_config_service.get();
-  params.http_server_properties = http_server_properties.GetWeakPtr();
+  params.http_server_properties = &http_server_properties;
   params.quic_max_number_of_lossy_connections = 2;
 
   std::unique_ptr<HttpNetworkSession> session(new HttpNetworkSession(params));
@@ -884,7 +884,7 @@
         SpdySessionDependencies::CreateSessionParams(&session_deps);
     params.enable_quic = true;
     params.quic_disable_preconnect_if_0rtt = true;
-    params.http_server_properties = http_server_properties.GetWeakPtr();
+    params.http_server_properties = &http_server_properties;
 
     std::unique_ptr<HttpNetworkSession> session(new HttpNetworkSession(params));
     HttpNetworkSessionPeer peer(session.get());
@@ -929,7 +929,7 @@
         SpdySessionDependencies::CreateSessionParams(&session_deps);
     params.enable_quic = true;
     params.quic_disable_preconnect_if_0rtt = true;
-    params.http_server_properties = http_server_properties.GetWeakPtr();
+    params.http_server_properties = &http_server_properties;
 
     std::unique_ptr<HttpNetworkSession> session(new HttpNetworkSession(params));
 
@@ -1493,6 +1493,8 @@
     clock_->AdvanceTime(QuicTime::Delta::FromMilliseconds(20));
   }
 
+  void TearDown() override { session_.reset(); }
+
   // Disable bidirectional stream over QUIC. This should be invoked before
   // Initialize().
   void DisableQuicBidirectionalStream() {
@@ -1501,7 +1503,7 @@
 
   void Initialize() {
     params_.enable_quic = true;
-    params_.http_server_properties = http_server_properties_.GetWeakPtr();
+    params_.http_server_properties = &http_server_properties_;
     params_.quic_host_whitelist.insert("www.example.org");
     params_.quic_random = &random_generator_;
     params_.quic_clock = clock_;
diff --git a/net/quic/crypto/properties_based_quic_server_info.cc b/net/quic/crypto/properties_based_quic_server_info.cc
index 708f44a4..5522f6c 100644
--- a/net/quic/crypto/properties_based_quic_server_info.cc
+++ b/net/quic/crypto/properties_based_quic_server_info.cc
@@ -14,7 +14,7 @@
 
 PropertiesBasedQuicServerInfo::PropertiesBasedQuicServerInfo(
     const QuicServerId& server_id,
-    base::WeakPtr<HttpServerProperties> http_server_properties)
+    HttpServerProperties* http_server_properties)
     : QuicServerInfo(server_id),
       http_server_properties_(http_server_properties) {
   DCHECK(http_server_properties_);
@@ -55,7 +55,7 @@
 void PropertiesBasedQuicServerInfo::OnExternalCacheHit() {}
 
 PropertiesBasedQuicServerInfoFactory::PropertiesBasedQuicServerInfoFactory(
-    base::WeakPtr<HttpServerProperties> http_server_properties)
+    HttpServerProperties* http_server_properties)
     : http_server_properties_(http_server_properties) {}
 
 PropertiesBasedQuicServerInfoFactory::~PropertiesBasedQuicServerInfoFactory() {}
diff --git a/net/quic/crypto/properties_based_quic_server_info.h b/net/quic/crypto/properties_based_quic_server_info.h
index c7189ab4..c4cea698 100644
--- a/net/quic/crypto/properties_based_quic_server_info.h
+++ b/net/quic/crypto/properties_based_quic_server_info.h
@@ -23,9 +23,8 @@
 // it's ok for us to keep it on disk.
 class NET_EXPORT_PRIVATE PropertiesBasedQuicServerInfo : public QuicServerInfo {
  public:
-  PropertiesBasedQuicServerInfo(
-      const QuicServerId& server_id,
-      base::WeakPtr<HttpServerProperties> http_server_properties);
+  PropertiesBasedQuicServerInfo(const QuicServerId& server_id,
+                                HttpServerProperties* http_server_properties);
   ~PropertiesBasedQuicServerInfo() override;
 
   // QuicServerInfo implementation.
@@ -39,7 +38,7 @@
   void OnExternalCacheHit() override;
 
  private:
-  base::WeakPtr<HttpServerProperties> http_server_properties_;
+  HttpServerProperties* http_server_properties_;
 
   DISALLOW_COPY_AND_ASSIGN(PropertiesBasedQuicServerInfo);
 };
@@ -48,13 +47,13 @@
     : public QuicServerInfoFactory {
  public:
   explicit PropertiesBasedQuicServerInfoFactory(
-      base::WeakPtr<HttpServerProperties> http_server_properties);
+      HttpServerProperties* http_server_properties);
   ~PropertiesBasedQuicServerInfoFactory() override;
 
   QuicServerInfo* GetForServer(const QuicServerId& server_id) override;
 
  private:
-  base::WeakPtr<HttpServerProperties> http_server_properties_;
+  HttpServerProperties* http_server_properties_;
 
   DISALLOW_COPY_AND_ASSIGN(PropertiesBasedQuicServerInfoFactory);
 };
diff --git a/net/quic/crypto/properties_based_quic_server_info_test.cc b/net/quic/crypto/properties_based_quic_server_info_test.cc
index 0cab74b..497e88ce 100644
--- a/net/quic/crypto/properties_based_quic_server_info_test.cc
+++ b/net/quic/crypto/properties_based_quic_server_info_test.cc
@@ -28,7 +28,7 @@
  protected:
   PropertiesBasedQuicServerInfoTest()
       : server_id_("www.google.com", 443, PRIVACY_MODE_DISABLED),
-        server_info_(server_id_, http_server_properties_.GetWeakPtr()) {}
+        server_info_(server_id_, &http_server_properties_) {}
 
   // Initialize |server_info_| object and persist it.
   void InitializeAndPersist() {
@@ -71,8 +71,8 @@
   InitializeAndPersist();
 
   // Read the persisted data and verify we have read the data correctly.
-  PropertiesBasedQuicServerInfo server_info1(
-      server_id_, http_server_properties_.GetWeakPtr());
+  PropertiesBasedQuicServerInfo server_info1(server_id_,
+                                             &http_server_properties_);
   server_info1.Start();
   EXPECT_EQ(OK, server_info1.WaitForDataReady(callback_));  // Read the data.
   EXPECT_TRUE(server_info1.IsDataReady());
@@ -89,8 +89,8 @@
   server_info1.Persist();
 
   // Read the persisted data and verify we have read the data correctly.
-  PropertiesBasedQuicServerInfo server_info2(
-      server_id_, http_server_properties_.GetWeakPtr());
+  PropertiesBasedQuicServerInfo server_info2(server_id_,
+                                             &http_server_properties_);
   server_info2.Start();
   EXPECT_EQ(OK, server_info2.WaitForDataReady(callback_));  // Read the data.
   EXPECT_TRUE(server_info1.IsDataReady());
diff --git a/net/quic/quic_end_to_end_unittest.cc b/net/quic/quic_end_to_end_unittest.cc
index 612e48d6..6212e8d 100644
--- a/net/quic/quic_end_to_end_unittest.cc
+++ b/net/quic/quic_end_to_end_unittest.cc
@@ -121,7 +121,7 @@
     params_.proxy_service = proxy_service_.get();
     params_.ssl_config_service = ssl_config_service_.get();
     params_.http_auth_handler_factory = auth_handler_factory_.get();
-    params_.http_server_properties = http_server_properties.GetWeakPtr();
+    params_.http_server_properties = &http_server_properties_;
     channel_id_service_.reset(
         new ChannelIDService(new DefaultChannelIDStore(nullptr),
                              base::ThreadTaskRunnerHandle::Get()));
@@ -254,7 +254,7 @@
   scoped_refptr<SSLConfigServiceDefaults> ssl_config_service_;
   std::unique_ptr<ProxyService> proxy_service_;
   std::unique_ptr<HttpAuthHandlerFactory> auth_handler_factory_;
-  HttpServerPropertiesImpl http_server_properties;
+  HttpServerPropertiesImpl http_server_properties_;
   HttpNetworkSession::Params params_;
   std::unique_ptr<TestTransactionFactory> transaction_factory_;
   HttpRequestInfo request_;
diff --git a/net/quic/quic_network_transaction_unittest.cc b/net/quic/quic_network_transaction_unittest.cc
index 1d0128c..7be9d646 100644
--- a/net/quic/quic_network_transaction_unittest.cc
+++ b/net/quic/quic_network_transaction_unittest.cc
@@ -288,6 +288,7 @@
     PlatformTest::TearDown();
     NetworkChangeNotifier::NotifyObserversOfIPAddressChangeForTests();
     base::RunLoop().RunUntilIdle();
+    session_.reset();
   }
 
   std::unique_ptr<QuicEncryptedPacket> ConstructClientConnectionClosePacket(
@@ -515,7 +516,7 @@
     params_.proxy_service = proxy_service_.get();
     params_.ssl_config_service = ssl_config_service_.get();
     params_.http_auth_handler_factory = auth_handler_factory_.get();
-    params_.http_server_properties = http_server_properties_.GetWeakPtr();
+    params_.http_server_properties = &http_server_properties_;
     params_.quic_supported_versions = SupportedVersions(GetParam());
     for (const char* host :
          {kDefaultServerHostName, "www.example.org", "news.example.org",
@@ -1017,7 +1018,7 @@
   // header advertises alternative service for mail.example.org.
   request_.url = GURL("http://mail.example.org:443");
   SendRequestAndExpectHttpResponse("hello world");
-  base::WeakPtr<HttpServerProperties> http_server_properties =
+  HttpServerProperties* http_server_properties =
       session_->http_server_properties();
   url::SchemeHostPort http_server("http", "mail.example.org", 443);
   url::SchemeHostPort https_server("https", "mail.example.org", 443);
@@ -1049,7 +1050,7 @@
   // Send https request and set alternative services if response header
   // advertises alternative service for mail.example.org.
   SendRequestAndExpectHttpResponse("hello world");
-  base::WeakPtr<HttpServerProperties> http_server_properties =
+  HttpServerProperties* http_server_properties =
       session_->http_server_properties();
 
   const url::SchemeHostPort https_server(request_.url);
@@ -2190,7 +2191,7 @@
     params.ssl_config_service = ssl_config_service_.get();
     params.proxy_service = proxy_service_.get();
     params.http_auth_handler_factory = auth_handler_factory_.get();
-    params.http_server_properties = http_server_properties_.GetWeakPtr();
+    params.http_server_properties = &http_server_properties_;
     params.quic_supported_versions = SupportedVersions(version_);
     params.quic_host_whitelist.insert("news.example.org");
     params.quic_host_whitelist.insert("mail.example.org");
@@ -2209,6 +2210,7 @@
     PlatformTest::TearDown();
     NetworkChangeNotifier::NotifyObserversOfIPAddressChangeForTests();
     base::RunLoop().RunUntilIdle();
+    session_.reset();
   }
 
   void SetAlternativeService(const std::string& origin) {
diff --git a/net/quic/quic_stream_factory.cc b/net/quic/quic_stream_factory.cc
index ce63012..f72f56b 100644
--- a/net/quic/quic_stream_factory.cc
+++ b/net/quic/quic_stream_factory.cc
@@ -597,7 +597,7 @@
     NetLog* net_log,
     HostResolver* host_resolver,
     ClientSocketFactory* client_socket_factory,
-    base::WeakPtr<HttpServerProperties> http_server_properties,
+    HttpServerProperties* http_server_properties,
     CertVerifier* cert_verifier,
     CTPolicyEnforcer* ct_policy_enforcer,
     ChannelIDService* channel_id_service,
diff --git a/net/quic/quic_stream_factory.h b/net/quic/quic_stream_factory.h
index f56281f..4be260f 100644
--- a/net/quic/quic_stream_factory.h
+++ b/net/quic/quic_stream_factory.h
@@ -151,7 +151,7 @@
       NetLog* net_log,
       HostResolver* host_resolver,
       ClientSocketFactory* client_socket_factory,
-      base::WeakPtr<HttpServerProperties> http_server_properties,
+      HttpServerProperties* http_server_properties,
       CertVerifier* cert_verifier,
       CTPolicyEnforcer* ct_policy_enforcer,
       ChannelIDService* channel_id_service,
@@ -437,7 +437,7 @@
   NetLog* net_log_;
   HostResolver* host_resolver_;
   ClientSocketFactory* client_socket_factory_;
-  base::WeakPtr<HttpServerProperties> http_server_properties_;
+  HttpServerProperties* http_server_properties_;
   TransportSecurityState* transport_security_state_;
   CTVerifier* cert_transparency_verifier_;
   std::unique_ptr<QuicServerInfoFactory> quic_server_info_factory_;
diff --git a/net/quic/quic_stream_factory_test.cc b/net/quic/quic_stream_factory_test.cc
index 29b9e0e..16a61b3 100644
--- a/net/quic/quic_stream_factory_test.cc
+++ b/net/quic/quic_stream_factory_test.cc
@@ -312,7 +312,7 @@
     DCHECK(!factory_);
     factory_.reset(new QuicStreamFactory(
         net_log_.net_log(), &host_resolver_, &socket_factory_,
-        http_server_properties_.GetWeakPtr(), cert_verifier_.get(), nullptr,
+        &http_server_properties_, cert_verifier_.get(), nullptr,
         channel_id_service_.get(), &transport_security_state_,
         cert_transparency_verifier_.get(),
         /*SocketPerformanceWatcherFactory*/ nullptr,
@@ -3728,8 +3728,7 @@
   QuicServerId quic_server_id(kDefaultServerHostName, 80,
                               PRIVACY_MODE_DISABLED);
   QuicServerInfoFactory* quic_server_info_factory =
-      new PropertiesBasedQuicServerInfoFactory(
-          http_server_properties_.GetWeakPtr());
+      new PropertiesBasedQuicServerInfoFactory(&http_server_properties_);
   factory_->set_quic_server_info_factory(quic_server_info_factory);
 
   std::unique_ptr<QuicServerInfo> quic_server_info(
diff --git a/net/quic/spdy_utils.cc b/net/quic/spdy_utils.cc
index 230c3a76..9f12ef5 100644
--- a/net/quic/spdy_utils.cc
+++ b/net/quic/spdy_utils.cc
@@ -53,8 +53,8 @@
         base::SplitString(content_length_header, base::StringPiece("\0", 1),
                           base::TRIM_WHITESPACE, base::SPLIT_WANT_ALL);
     for (const string& value : values) {
-      int new_value;
-      if (!base::StringToInt(value, &new_value) || new_value < 0) {
+      int64_t new_value;
+      if (!base::StringToInt64(value, &new_value) || new_value < 0) {
         return false;
       }
       if (*content_length < 0) {
diff --git a/net/quic/spdy_utils_test.cc b/net/quic/spdy_utils_test.cc
index 12e66692..55ec43c 100644
--- a/net/quic/spdy_utils_test.cc
+++ b/net/quic/spdy_utils_test.cc
@@ -25,8 +25,37 @@
   input_headers[":pseudo1"] = "pseudo value1";
   input_headers[":pseudo2"] = "pseudo value2";
   input_headers["key1"] = "value1";
-  const int kContentLength = 1234;
-  input_headers["content-length"] = base::IntToString(kContentLength);
+  const int64_t kContentLength = 1234;
+  input_headers["content-length"] = base::Int64ToString(kContentLength);
+  input_headers["key2"] = "value2";
+
+  // Serialize the header block.
+  string serialized_headers =
+      SpdyUtils::SerializeUncompressedHeaders(input_headers);
+
+  // Take the serialized header block, and parse back into SpdyHeaderBlock.
+  SpdyHeaderBlock output_headers;
+  int64_t content_length = -1;
+  ASSERT_TRUE(SpdyUtils::ParseHeaders(serialized_headers.data(),
+                                      serialized_headers.size(),
+                                      &content_length, &output_headers));
+
+  // Should be back to the original headers.
+  EXPECT_EQ(content_length, kContentLength);
+  EXPECT_EQ(output_headers, input_headers);
+}
+
+TEST(SpdyUtilsTest, SerializeAndParseHeadersLargeContentLength) {
+  // Creates a SpdyHeaderBlock with some key->value pairs, serializes it, then
+  // parses the serialized output and verifies that the end result is the same
+  // as the headers that the test started with.
+
+  SpdyHeaderBlock input_headers;
+  input_headers[":pseudo1"] = "pseudo value1";
+  input_headers[":pseudo2"] = "pseudo value2";
+  input_headers["key1"] = "value1";
+  const int64_t kContentLength = 12345678900;
+  input_headers["content-length"] = base::Int64ToString(kContentLength);
   input_headers["key2"] = "value2";
 
   // Serialize the header block.
diff --git a/net/socket/ssl_client_socket_pool_unittest.cc b/net/socket/ssl_client_socket_pool_unittest.cc
index f3caaf54..92e0407 100644
--- a/net/socket/ssl_client_socket_pool_unittest.cc
+++ b/net/socket/ssl_client_socket_pool_unittest.cc
@@ -83,6 +83,7 @@
         ssl_config_service_(new SSLConfigServiceDefaults),
         http_auth_handler_factory_(
             HttpAuthHandlerFactory::CreateDefault(&host_resolver_)),
+        http_server_properties_(new HttpServerPropertiesImpl),
         session_(CreateNetworkSession()),
         direct_transport_socket_params_(new TransportSocketParams(
             HostPortPair("host", 443),
@@ -166,8 +167,7 @@
     params.client_socket_factory = &socket_factory_;
     params.ssl_config_service = ssl_config_service_.get();
     params.http_auth_handler_factory = http_auth_handler_factory_.get();
-    params.http_server_properties =
-        http_server_properties_.GetWeakPtr();
+    params.http_server_properties = http_server_properties_.get();
     params.spdy_default_protocol = GetParam();
     return new HttpNetworkSession(params);
   }
@@ -181,7 +181,7 @@
   const std::unique_ptr<ProxyService> proxy_service_;
   const scoped_refptr<SSLConfigService> ssl_config_service_;
   const std::unique_ptr<HttpAuthHandlerFactory> http_auth_handler_factory_;
-  HttpServerPropertiesImpl http_server_properties_;
+  const std::unique_ptr<HttpServerPropertiesImpl> http_server_properties_;
   const std::unique_ptr<HttpNetworkSession> session_;
 
   scoped_refptr<TransportSocketParams> direct_transport_socket_params_;
diff --git a/net/spdy/hpack/hpack_constants.h b/net/spdy/hpack/hpack_constants.h
index 39e63ff..27799ae 100644
--- a/net/spdy/hpack/hpack_constants.h
+++ b/net/spdy/hpack/hpack_constants.h
@@ -46,10 +46,6 @@
 // Defined in RFC 7540 section 6.5.2.
 const uint32_t kDefaultHeaderTableSizeSetting = 4096;
 
-// Largest string literal an HpackDecoder/HpackEncoder will attempt to process
-// before returning an error.
-const uint32_t kDefaultMaxStringLiteralSize = 256 * 1024;
-
 // Maximum amount of encoded header buffer HpackDecoder will retain before
 // returning an error.
 // TODO(rjshade): Remove when deprecating
diff --git a/net/spdy/hpack/hpack_decoder.cc b/net/spdy/hpack/hpack_decoder.cc
index f3b8c25..5d214268 100644
--- a/net/spdy/hpack/hpack_decoder.cc
+++ b/net/spdy/hpack/hpack_decoder.cc
@@ -22,8 +22,7 @@
 }  // namespace
 
 HpackDecoder::HpackDecoder()
-    : max_string_literal_size_(kDefaultMaxStringLiteralSize),
-      handler_(nullptr),
+    : handler_(nullptr),
       total_header_bytes_(0),
       regular_header_seen_(false),
       header_block_started_(false),
@@ -49,8 +48,7 @@
 
   // Parse as many data in buffer as possible. And remove the parsed data
   // from buffer.
-  HpackInputStream input_stream(max_string_literal_size_,
-                                headers_block_buffer_);
+  HpackInputStream input_stream(headers_block_buffer_);
 
   // If this is the start of the header block, process table size updates.
   if (!header_block_started_) {
diff --git a/net/spdy/hpack/hpack_decoder.h b/net/spdy/hpack/hpack_decoder.h
index 1b1c0d9..023dbd50 100644
--- a/net/spdy/hpack/hpack_decoder.h
+++ b/net/spdy/hpack/hpack_decoder.h
@@ -99,7 +99,6 @@
   bool HandleHeaderRepresentation(base::StringPiece name,
                                   base::StringPiece value);
 
-  const uint32_t max_string_literal_size_;
   HpackHeaderTable header_table_;
 
   // TODO(jgraettinger): Buffer for headers data, and storage for the last-
diff --git a/net/spdy/hpack/hpack_decoder_test.cc b/net/spdy/hpack/hpack_decoder_test.cc
index a4f9def88..91f32dd 100644
--- a/net/spdy/hpack/hpack_decoder_test.cc
+++ b/net/spdy/hpack/hpack_decoder_test.cc
@@ -62,8 +62,6 @@
 using testing::ElementsAre;
 using testing::Pair;
 
-const size_t kLiteralBound = 1024;
-
 class HpackDecoderTest : public ::testing::TestWithParam<bool> {
  protected:
   HpackDecoderTest() : decoder_(), decoder_peer_(&decoder_) {}
@@ -223,7 +221,7 @@
 
 // Decoding an encoded name with a valid string literal should work.
 TEST_P(HpackDecoderTest, DecodeNextNameLiteral) {
-  HpackInputStream input_stream(kLiteralBound, StringPiece("\x00\x04name", 6));
+  HpackInputStream input_stream(StringPiece("\x00\x04name", 6));
 
   StringPiece string_piece;
   EXPECT_TRUE(decoder_peer_.DecodeNextName(&input_stream, &string_piece));
@@ -236,8 +234,7 @@
 
 // Decoding an encoded name with an incomplete string literal.
 TEST_P(HpackDecoderTest, DecodeNextNameLiteralWithIncompleteHeader) {
-  HpackInputStream input_stream(kLiteralBound,
-                                StringPiece("\x00\x04name\x00\x02g", 9));
+  HpackInputStream input_stream(StringPiece("\x00\x04name\x00\x02g", 9));
 
   StringPiece string_piece;
   EXPECT_TRUE(decoder_peer_.DecodeNextName(&input_stream, &string_piece));
@@ -253,7 +250,7 @@
 
 TEST_P(HpackDecoderTest, DecodeNextNameLiteralWithHuffmanEncoding) {
   string input = a2b_hex("008825a849e95ba97d7f");
-  HpackInputStream input_stream(kLiteralBound, input);
+  HpackInputStream input_stream(input);
 
   StringPiece string_piece;
   EXPECT_TRUE(decoder_peer_.DecodeNextName(&input_stream, &string_piece));
@@ -271,7 +268,7 @@
   // Put two copies of the same huffman encoding into input.
   string input = a2b_hex("008825a849e95ba97d7f008825a849e95ba97d7f");
   input.resize(input.size() - 1);  // Remove the last byte.
-  HpackInputStream input_stream(kLiteralBound, input);
+  HpackInputStream input_stream(input);
 
   StringPiece string_piece;
   EXPECT_TRUE(decoder_peer_.DecodeNextName(&input_stream, &string_piece));
@@ -287,7 +284,7 @@
 
 // Decoding an encoded name with a valid index should work.
 TEST_P(HpackDecoderTest, DecodeNextNameIndexed) {
-  HpackInputStream input_stream(kLiteralBound, "\x01");
+  HpackInputStream input_stream("\x01");
 
   StringPiece string_piece;
   EXPECT_TRUE(decoder_peer_.DecodeNextName(&input_stream, &string_piece));
@@ -301,7 +298,7 @@
 // Decoding an encoded name with an invalid index should fail.
 TEST_P(HpackDecoderTest, DecodeNextNameInvalidIndex) {
   // One more than the number of static table entries.
-  HpackInputStream input_stream(kLiteralBound, "\x3e");
+  HpackInputStream input_stream("\x3e");
 
   StringPiece string_piece;
   EXPECT_FALSE(decoder_peer_.DecodeNextName(&input_stream, &string_piece));
@@ -549,7 +546,7 @@
 // Decode with incomplete string literal.
 TEST_P(HpackDecoderTest, StringLiteralIncomplete) {
   const char input[] = "\x0c/sample/path\x06:path2\x0e/sample/path/";
-  HpackInputStream input_stream(kLiteralBound, input);
+  HpackInputStream input_stream(input);
   StringPiece str;
   EXPECT_TRUE(
       decoder_peer_.DecodeNextStringLiteral(&input_stream, false, &str));
diff --git a/net/spdy/hpack/hpack_huffman_decoder.cc b/net/spdy/hpack/hpack_huffman_decoder.cc
index 926223f..30f4ee3 100644
--- a/net/spdy/hpack/hpack_huffman_decoder.cc
+++ b/net/spdy/hpack/hpack_huffman_decoder.cc
@@ -304,7 +304,6 @@
 // TODO(jamessynge): Determine if that is worth it by adding some counters to
 // measure the distribution of string sizes seen in practice.
 bool HpackHuffmanDecoder::DecodeString(HpackInputStream* in,
-                                       size_t out_capacity,
                                        std::string* out) {
   out->clear();
 
@@ -369,14 +368,6 @@
         peeked_success = in->PeekBits(&bits_available, &bits);
       } while (peeked_success && bits_available < 32);
     } else {
-      if (out->size() == out_capacity) {
-        // This code would cause us to overflow |out_capacity|.
-        // TODO(jamessynge) Avoid this case by pre-allocating out based on
-        // scaling up the encoded size by 8/5 (shortest codes are 5 bits).
-        DLOG(WARNING) << "Output size too large: " << out_capacity;
-        return false;
-      }
-
       // Convert from the prefix code of length |code_length| to the
       // canonical symbol (i.e. where the input symbols (bytes) are ordered by
       // increasing code length and then by their increasing uint8 value).
diff --git a/net/spdy/hpack/hpack_huffman_decoder.h b/net/spdy/hpack/hpack_huffman_decoder.h
index d63aa04..302e6c9 100644
--- a/net/spdy/hpack/hpack_huffman_decoder.h
+++ b/net/spdy/hpack/hpack_huffman_decoder.h
@@ -34,9 +34,8 @@
   // sufficient space in |*out| to hold decoded output.
   // DecodeString() halts when |in| runs out of input, in which case true is
   // returned. It also halts (returning false) if an invalid Huffman code
-  // prefix is read, or if |out_capacity| would otherwise be overflowed.
+  // prefix is read.
   static bool DecodeString(HpackInputStream* in,
-                           size_t out_capacity,
                            std::string* out);
 
  private:
diff --git a/net/spdy/hpack/hpack_huffman_decoder_test.cc b/net/spdy/hpack/hpack_huffman_decoder_test.cc
index 5b7b16cc..fa987704 100644
--- a/net/spdy/hpack/hpack_huffman_decoder_test.cc
+++ b/net/spdy/hpack/hpack_huffman_decoder_test.cc
@@ -179,43 +179,14 @@
   for (size_t i = 0; i != arraysize(test_table); i += 2) {
     const std::string& encodedFixture(test_table[i]);
     const std::string& decodedFixture(test_table[i + 1]);
-    HpackInputStream input_stream(std::numeric_limits<uint32_t>::max(),
-                                  encodedFixture);
-    EXPECT_TRUE(HpackHuffmanDecoder::DecodeString(
-        &input_stream, decodedFixture.size(), &buffer));
+    HpackInputStream input_stream(encodedFixture);
+    EXPECT_TRUE(HpackHuffmanDecoder::DecodeString(&input_stream, &buffer));
     EXPECT_EQ(decodedFixture, buffer);
     buffer = EncodeString(decodedFixture);
     EXPECT_EQ(encodedFixture, buffer);
   }
 }
 
-TEST_F(HpackHuffmanDecoderTest, TooLong) {
-  std::string buffer;
-  std::string test_table[] = {
-      a2b_hex("f1e3c2e5f23a6ba0ab90f4ff"),
-      "www.example.com",
-      a2b_hex("a8eb10649cbf"),
-      "no-cache",
-      a2b_hex("25a849e95ba97d7f"),
-      "custom-key",
-      a2b_hex("25a849e95bb8e8b4bf"),
-      "custom-value",
-  };
-  // Round-trip each test example, but with too small an output buffer.
-  for (size_t i = 0; i != arraysize(test_table); i += 2) {
-    const std::string& encodedFixture(test_table[i]);
-    const std::string& decodedFixture(test_table[i + 1]);
-    uint32_t limit = base::RandInt(0, decodedFixture.size() - 1);
-    HpackInputStream strm(std::numeric_limits<uint32_t>::max(), encodedFixture);
-    EXPECT_FALSE(HpackHuffmanDecoder::DecodeString(&strm, limit, &buffer));
-
-    // This is NOT a required test as it really tests an implementation detail,
-    // i.e. the fact that it writes the first |limit| values into |buffer|,
-    // then returns false leaving those chars in the buffer.
-    EXPECT_EQ(decodedFixture.substr(0, limit), buffer);
-  }
-}
-
 TEST_F(HpackHuffmanDecoderTest, SpecResponseExamples) {
   std::string buffer;
   // clang-format off
@@ -240,10 +211,8 @@
   for (size_t i = 0; i != arraysize(test_table); i += 2) {
     const std::string& encodedFixture(test_table[i]);
     const std::string& decodedFixture(test_table[i + 1]);
-    HpackInputStream input_stream(std::numeric_limits<uint32_t>::max(),
-                                  encodedFixture);
-    EXPECT_TRUE(HpackHuffmanDecoder::DecodeString(
-        &input_stream, decodedFixture.size(), &buffer));
+    HpackInputStream input_stream(encodedFixture);
+    EXPECT_TRUE(HpackHuffmanDecoder::DecodeString(&input_stream, &buffer));
     EXPECT_EQ(decodedFixture, buffer);
     buffer = EncodeString(decodedFixture);
     EXPECT_EQ(encodedFixture, buffer);
@@ -257,10 +226,8 @@
     StringPiece input(storage, arraysize(storage));
     std::string buffer_in = EncodeString(input);
     std::string buffer_out;
-    HpackInputStream input_stream(std::numeric_limits<uint32_t>::max(),
-                                  buffer_in);
-    EXPECT_TRUE(HpackHuffmanDecoder::DecodeString(&input_stream, input.size(),
-                                                  &buffer_out));
+    HpackInputStream input_stream(buffer_in);
+    EXPECT_TRUE(HpackHuffmanDecoder::DecodeString(&input_stream, &buffer_out));
     EXPECT_EQ(input, buffer_out);
   }
 }
@@ -280,10 +247,8 @@
       input.push_back(ic);
     }
     EncodeString(input, &encoded);
-    HpackInputStream input_stream(std::numeric_limits<uint32_t>::max(),
-                                  encoded);
-    EXPECT_TRUE(HpackHuffmanDecoder::DecodeString(&input_stream, input.size(),
-                                                  &decoded));
+    HpackInputStream input_stream(encoded);
+    EXPECT_TRUE(HpackHuffmanDecoder::DecodeString(&input_stream, &decoded));
     EXPECT_EQ(input, decoded);
   }
 }
diff --git a/net/spdy/hpack/hpack_huffman_table_test.cc b/net/spdy/hpack/hpack_huffman_table_test.cc
index 95ae765d..fda6c5e8 100644
--- a/net/spdy/hpack/hpack_huffman_table_test.cc
+++ b/net/spdy/hpack/hpack_huffman_table_test.cc
@@ -7,7 +7,6 @@
 #include <stdint.h>
 
 #include <bitset>
-#include <limits>
 #include <string>
 #include <utility>
 
@@ -240,8 +239,7 @@
   EXPECT_EQ(expect, buffer_in);
 
   string buffer_out;
-  HpackInputStream input_stream(std::numeric_limits<uint32_t>::max(),
-                                buffer_in);
+  HpackInputStream input_stream(buffer_in);
   EXPECT_TRUE(
       table_.GenericDecodeString(&input_stream, input.size(), &buffer_out));
   EXPECT_EQ(buffer_out, input);
@@ -307,7 +305,7 @@
     char input_storage[] = {bits8("00010001"), bits8("00110100")};
     StringPiece input(input_storage, arraysize(input_storage));
 
-    HpackInputStream input_stream(std::numeric_limits<uint32_t>::max(), input);
+    HpackInputStream input_stream(input);
     EXPECT_TRUE(table_.GenericDecodeString(&input_stream, capacity, &buffer));
     EXPECT_EQ(buffer, "\x02\x03\x02\x06");
   }
@@ -317,7 +315,7 @@
     char input_storage[] = {bits8("00010001"), bits8("01000111")};
     StringPiece input(input_storage, arraysize(input_storage));
 
-    HpackInputStream input_stream(std::numeric_limits<uint32_t>::max(), input);
+    HpackInputStream input_stream(input);
     EXPECT_FALSE(table_.GenericDecodeString(&input_stream, capacity, &buffer));
     EXPECT_EQ(buffer, "\x02\x03\x02");
   }
@@ -326,7 +324,7 @@
     std::vector<char> input_storage(1 + capacity / 4, '\0');
     StringPiece input(&input_storage[0], input_storage.size());
 
-    HpackInputStream input_stream(std::numeric_limits<uint32_t>::max(), input);
+    HpackInputStream input_stream(input);
     EXPECT_FALSE(table_.GenericDecodeString(&input_stream, capacity, &buffer));
 
     std::vector<char> expected(capacity, '\x02');
@@ -339,7 +337,7 @@
     char input_storage[] = {bits8("10011010"), bits8("01110000")};
     StringPiece input(input_storage, arraysize(input_storage));
 
-    HpackInputStream input_stream(std::numeric_limits<uint32_t>::max(), input);
+    HpackInputStream input_stream(input);
     EXPECT_FALSE(table_.GenericDecodeString(&input_stream, capacity, &buffer));
     EXPECT_EQ(buffer, "\x06");
   }
@@ -360,18 +358,15 @@
                          string* out) {
     // First decode with HpackHuffmanTable.
     {
-      HpackInputStream input_stream(std::numeric_limits<uint32_t>::max(),
-                                    encoded);
+      HpackInputStream input_stream(encoded);
       EXPECT_TRUE(table_.GenericDecodeString(&input_stream, out_capacity, out));
     }
     // And decode again with the fixed decoder, confirming that the result is
     // the same.
     {
-      HpackInputStream input_stream(std::numeric_limits<uint32_t>::max(),
-                                    encoded);
+      HpackInputStream input_stream(encoded);
       string buf;
-      EXPECT_TRUE(
-          HpackHuffmanDecoder::DecodeString(&input_stream, out_capacity, &buf));
+      EXPECT_TRUE(HpackHuffmanDecoder::DecodeString(&input_stream, &buf));
       EXPECT_EQ(*out, buf);
     }
   }
diff --git a/net/spdy/hpack/hpack_input_stream.cc b/net/spdy/hpack/hpack_input_stream.cc
index 79455e5..751f6c6 100644
--- a/net/spdy/hpack/hpack_input_stream.cc
+++ b/net/spdy/hpack/hpack_input_stream.cc
@@ -15,10 +15,8 @@
 using base::StringPiece;
 using std::string;
 
-HpackInputStream::HpackInputStream(uint32_t max_string_literal_size,
-                                   StringPiece buffer)
-    : max_string_literal_size_(max_string_literal_size),
-      buffer_(buffer),
+HpackInputStream::HpackInputStream(StringPiece buffer)
+    : buffer_(buffer),
       bit_offset_(0),
       parsed_bytes_(0),
       parsed_bytes_current_(0),
@@ -127,10 +125,6 @@
     return false;
   }
 
-  if (size > max_string_literal_size_) {
-    return false;
-  }
-
   if (size > buffer_.size()) {
     need_more_data_ = true;
     return false;
@@ -159,15 +153,11 @@
     return false;
   }
 
-  HpackInputStream bounded_reader(max_string_literal_size_,
-                                  StringPiece(buffer_.data(), encoded_size));
+  HpackInputStream bounded_reader(StringPiece(buffer_.data(), encoded_size));
   buffer_.remove_prefix(encoded_size);
   parsed_bytes_current_ += encoded_size;
 
-  // DecodeString will not append more than |max_string_literal_size_| chars
-  // to |str|.
-  return HpackHuffmanDecoder::DecodeString(&bounded_reader,
-                                           max_string_literal_size_, str);
+  return HpackHuffmanDecoder::DecodeString(&bounded_reader, str);
 }
 
 bool HpackInputStream::PeekBits(size_t* peeked_count, uint32_t* out) const {
diff --git a/net/spdy/hpack/hpack_input_stream.h b/net/spdy/hpack/hpack_input_stream.h
index b7ec8ef..af26c94 100644
--- a/net/spdy/hpack/hpack_input_stream.h
+++ b/net/spdy/hpack/hpack_input_stream.h
@@ -34,9 +34,7 @@
  public:
   friend class test::HpackInputStreamPeer;
 
-  // |max_string_literal_size| is the largest that any one string
-  // literal (header name or header value) can be.
-  HpackInputStream(uint32_t max_string_literal_size, base::StringPiece buffer);
+  explicit HpackInputStream(base::StringPiece buffer);
   ~HpackInputStream();
 
   // Returns whether or not there is more data to process.
@@ -92,7 +90,6 @@
   bool NeedMoreData() const;
 
  private:
-  const uint32_t max_string_literal_size_;
   base::StringPiece buffer_;
   size_t bit_offset_;
   // Total number of bytes parsed successfully. Only get updated when an
diff --git a/net/spdy/hpack/hpack_input_stream_test.cc b/net/spdy/hpack/hpack_input_stream_test.cc
index a923944..1f3627566 100644
--- a/net/spdy/hpack/hpack_input_stream_test.cc
+++ b/net/spdy/hpack/hpack_input_stream_test.cc
@@ -23,8 +23,6 @@
 using std::string;
 using test::a2b_hex;
 
-const size_t kLiteralBound = 1024;
-
 // Hex representation of encoded length and Huffman string.
 const char kEncodedHuffmanFixture[] =
     "2d"  // Length prefix.
@@ -55,7 +53,7 @@
 uint32_t DecodeValidUint32(uint8_t N, StringPiece str) {
   EXPECT_GT(N, 0);
   EXPECT_LE(N, 8);
-  HpackInputStream input_stream(kLiteralBound, str);
+  HpackInputStream input_stream(str);
   HpackInputStreamPeer input_stream_peer(&input_stream);
   input_stream_peer.SetBitOffsetForTest(8 - N);
   uint32_t I;
@@ -70,7 +68,7 @@
 void ExpectDecodeUint32Invalid(uint8_t N, StringPiece str) {
   EXPECT_GT(N, 0);
   EXPECT_LE(N, 8);
-  HpackInputStream input_stream(kLiteralBound, str);
+  HpackInputStream input_stream(str);
   HpackInputStreamPeer input_stream_peer(&input_stream);
   input_stream_peer.SetBitOffsetForTest(8 - N);
   uint32_t I;
@@ -496,7 +494,7 @@
 
 // Decoding a valid encoded string literal should work.
 TEST(HpackInputStreamTest, DecodeNextIdentityString) {
-  HpackInputStream input_stream(kLiteralBound, "\x0estring literal");
+  HpackInputStream input_stream("\x0estring literal");
   HpackInputStreamPeer input_stream_peer(&input_stream);
 
   EXPECT_TRUE(input_stream.HasMoreData());
@@ -508,22 +506,11 @@
   EXPECT_FALSE(input_stream.NeedMoreData());
 }
 
-// Decoding an encoded string literal with size larger than
-// |max_string_literal_size_| should fail.
-TEST(HpackInputStreamTest, DecodeNextIdentityStringSizeLimit) {
-  HpackInputStream input_stream(13, "\x0estring literal");
-
-  EXPECT_TRUE(input_stream.HasMoreData());
-  StringPiece string_piece;
-  EXPECT_FALSE(input_stream.DecodeNextIdentityString(&string_piece));
-  EXPECT_FALSE(input_stream.NeedMoreData());
-}
-
 // Decoding an encoded string literal with size larger than the
 // remainder of the buffer should fail.
 TEST(HpackInputStreamTest, DecodeNextIdentityStringNotEnoughInput) {
   // Set the length to be one more than it should be.
-  HpackInputStream input_stream(kLiteralBound, "\x0fstring literal");
+  HpackInputStream input_stream("\x0fstring literal");
 
   EXPECT_TRUE(input_stream.HasMoreData());
   StringPiece string_piece;
@@ -533,7 +520,7 @@
 
 TEST(HpackInputStreamTest, DecodeNextHuffmanString) {
   string output, input(a2b_hex(kEncodedHuffmanFixture));
-  HpackInputStream input_stream(arraysize(kDecodedHuffmanFixture) - 1, input);
+  HpackInputStream input_stream(input);
   HpackInputStreamPeer input_stream_peer(&input_stream);
 
   EXPECT_TRUE(input_stream.HasMoreData());
@@ -544,21 +531,10 @@
   EXPECT_EQ(46u, input_stream_peer.ParsedBytesCurrent());
 }
 
-TEST(HpackInputStreamTest, DecodeNextHuffmanStringSizeLimit) {
-  string output, input(a2b_hex(kEncodedHuffmanFixture));
-  // Max string literal is one byte shorter than the decoded fixture.
-  HpackInputStream input_stream(arraysize(kDecodedHuffmanFixture) - 2, input);
-
-  // Decoded string overflows the max string literal.
-  EXPECT_TRUE(input_stream.HasMoreData());
-  EXPECT_FALSE(input_stream.DecodeNextHuffmanString(&output));
-  EXPECT_FALSE(input_stream.NeedMoreData());
-}
-
 TEST(HpackInputStreamTest, DecodeNextHuffmanStringNotEnoughInput) {
   string output, input(a2b_hex(kEncodedHuffmanFixture));
   input[0]++;  // Input prefix is one byte larger than available input.
-  HpackInputStream input_stream(arraysize(kDecodedHuffmanFixture) - 1, input);
+  HpackInputStream input_stream(input);
 
   // Not enough buffer for declared encoded length.
   EXPECT_TRUE(input_stream.HasMoreData());
@@ -567,7 +543,7 @@
 }
 
 TEST(HpackInputStreamTest, PeekBitsAndConsume) {
-  HpackInputStream input_stream(kLiteralBound, "\xad\xab\xad\xab\xad");
+  HpackInputStream input_stream("\xad\xab\xad\xab\xad");
 
   uint32_t bits = 0;
   size_t peeked_count = 0;
@@ -631,7 +607,7 @@
 TEST(HpackInputStreamTest, InitializePeekBits) {
   {
     // Empty input, peeked_count == 0 and bits == 0.
-    HpackInputStream input_stream(kLiteralBound, "");
+    HpackInputStream input_stream("");
     auto peeked_count_and_bits = input_stream.InitializePeekBits();
     size_t peeked_count = peeked_count_and_bits.first;
     uint32_t bits = peeked_count_and_bits.second;
@@ -641,7 +617,7 @@
   {
     // One input byte, returns peeked_count == 8 and bits
     // has the input byte in its high order bits.
-    HpackInputStream input_stream(kLiteralBound, "\xfe");
+    HpackInputStream input_stream("\xfe");
     auto peeked_count_and_bits = input_stream.InitializePeekBits();
     size_t peeked_count = peeked_count_and_bits.first;
     uint32_t bits = peeked_count_and_bits.second;
@@ -653,7 +629,7 @@
   {
     // Two input bytes, returns peeked_count == 16 and bits
     // has the two input bytes in its high order bits.
-    HpackInputStream input_stream(kLiteralBound, "\xfe\xdc");
+    HpackInputStream input_stream("\xfe\xdc");
     auto peeked_count_and_bits = input_stream.InitializePeekBits();
     size_t peeked_count = peeked_count_and_bits.first;
     uint32_t bits = peeked_count_and_bits.second;
@@ -665,7 +641,7 @@
   {
     // Three input bytes, returns peeked_count == 24 and bits
     // has the three input bytes in its high order bits.
-    HpackInputStream input_stream(kLiteralBound, "\xab\xcd\xef");
+    HpackInputStream input_stream("\xab\xcd\xef");
     auto peeked_count_and_bits = input_stream.InitializePeekBits();
     size_t peeked_count = peeked_count_and_bits.first;
     uint32_t bits = peeked_count_and_bits.second;
@@ -677,7 +653,7 @@
   {
     // Four input bytes, returns peeked_count == 32 and bits
     // contains the four input bytes.
-    HpackInputStream input_stream(kLiteralBound, "\xfe\xed\xdc\xcb");
+    HpackInputStream input_stream("\xfe\xed\xdc\xcb");
     auto peeked_count_and_bits = input_stream.InitializePeekBits();
     size_t peeked_count = peeked_count_and_bits.first;
     uint32_t bits = peeked_count_and_bits.second;
@@ -689,7 +665,7 @@
   {
     // Five input bytes, returns peeked_count == 32 and bits
     // contains the first four input bytes.
-    HpackInputStream input_stream(kLiteralBound, "\xfe\xed\xdc\xcb\xba");
+    HpackInputStream input_stream("\xfe\xed\xdc\xcb\xba");
     auto peeked_count_and_bits = input_stream.InitializePeekBits();
     size_t peeked_count = peeked_count_and_bits.first;
     uint32_t bits = peeked_count_and_bits.second;
@@ -719,7 +695,7 @@
 }
 
 TEST(HpackInputStreamTest, ConsumeByteRemainder) {
-  HpackInputStream input_stream(kLiteralBound, "\xad\xab");
+  HpackInputStream input_stream("\xad\xab");
   // Does nothing.
   input_stream.ConsumeByteRemainder();
 
@@ -735,7 +711,7 @@
 }
 
 TEST(HpackInputStreamTest, IncompleteHeaderMatchPrefixAndConsume) {
-  HpackInputStream input_stream(kLiteralBound, "");
+  HpackInputStream input_stream("");
   HpackInputStreamPeer input_stream_peer(&input_stream);
   EXPECT_FALSE(input_stream.MatchPrefixAndConsume(kIndexedOpcode));
   EXPECT_EQ(0u, input_stream_peer.ParsedBytesCurrent());
@@ -744,7 +720,7 @@
 
 TEST(HpackInputStreamTest, IncompleteHeaderDecodeNextUint32) {
   // First byte only
-  HpackInputStream input_stream1(kLiteralBound, "\xff");
+  HpackInputStream input_stream1("\xff");
   HpackInputStreamPeer input_stream1_peer(&input_stream1);
   EXPECT_TRUE(input_stream1.MatchPrefixAndConsume(kIndexedOpcode));
   uint32_t result;
@@ -753,7 +729,7 @@
   EXPECT_EQ(1u, input_stream1_peer.ParsedBytesCurrent());
 
   // No last byte
-  HpackInputStream input_stream2(kLiteralBound, "\xff\x80\x80\x80");
+  HpackInputStream input_stream2("\xff\x80\x80\x80");
   HpackInputStreamPeer input_stream2_peer(&input_stream2);
   EXPECT_TRUE(input_stream2.MatchPrefixAndConsume(kIndexedOpcode));
   EXPECT_FALSE(input_stream2.DecodeNextUint32(&result));
@@ -761,7 +737,7 @@
   EXPECT_EQ(4u, input_stream2_peer.ParsedBytesCurrent());
 
   // Error happens before finishing parsing.
-  HpackInputStream input_stream3(kLiteralBound, "\xff\xff\xff\xff\xff\xff\xff");
+  HpackInputStream input_stream3("\xff\xff\xff\xff\xff\xff\xff");
   HpackInputStreamPeer input_stream3_peer(&input_stream3);
   EXPECT_TRUE(input_stream3.MatchPrefixAndConsume(kIndexedOpcode));
   EXPECT_FALSE(input_stream3.DecodeNextUint32(&result));
@@ -770,7 +746,7 @@
 }
 
 TEST(HpackInputStreamTest, IncompleteHeaderDecodeNextIdentityString) {
-  HpackInputStream input_stream1(kLiteralBound, "\x0estring litera");
+  HpackInputStream input_stream1("\x0estring litera");
   HpackInputStreamPeer input_stream1_peer(&input_stream1);
   StringPiece string_piece;
   EXPECT_FALSE(input_stream1.DecodeNextIdentityString(&string_piece));
@@ -778,7 +754,7 @@
   EXPECT_EQ(1u, input_stream1_peer.ParsedBytesCurrent());
   EXPECT_TRUE(input_stream1.NeedMoreData());
 
-  HpackInputStream input_stream2(kLiteralBound, "\x0e");
+  HpackInputStream input_stream2("\x0e");
   HpackInputStreamPeer input_stream2_peer(&input_stream2);
   EXPECT_FALSE(input_stream2.DecodeNextIdentityString(&string_piece));
   // Only parsed first byte.
@@ -789,14 +765,14 @@
 TEST(HpackInputStreamTest, IncompleteHeaderDecodeNextHuffmanString) {
   string output, input(a2b_hex(kEncodedHuffmanFixture));
   input.resize(input.size() - 1);  // Remove last byte.
-  HpackInputStream input_stream1(arraysize(kDecodedHuffmanFixture) - 1, input);
+  HpackInputStream input_stream1(input);
   HpackInputStreamPeer input_stream1_peer(&input_stream1);
   EXPECT_FALSE(input_stream1.DecodeNextHuffmanString(&output));
   EXPECT_EQ(1u, input_stream1_peer.ParsedBytesCurrent());
   EXPECT_TRUE(input_stream1.NeedMoreData());
 
   input.erase(1, input.size());  // Remove all bytes except the first one.
-  HpackInputStream input_stream2(arraysize(kDecodedHuffmanFixture) - 1, input);
+  HpackInputStream input_stream2(input);
   HpackInputStreamPeer input_stream2_peer(&input_stream2);
   EXPECT_FALSE(input_stream2.DecodeNextHuffmanString(&output));
   EXPECT_EQ(1u, input_stream2_peer.ParsedBytesCurrent());
diff --git a/net/spdy/spdy_network_transaction_unittest.cc b/net/spdy/spdy_network_transaction_unittest.cc
index cf86f69..af48614 100644
--- a/net/spdy/spdy_network_transaction_unittest.cc
+++ b/net/spdy/spdy_network_transaction_unittest.cc
@@ -111,7 +111,7 @@
   session_deps->enable_alternative_service_with_different_host = true;
   if (test_params.ssl_type == HTTP_SPDY_VIA_ALT_SVC) {
     base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1);
-    session_deps->http_server_properties.SetAlternativeService(
+    session_deps->http_server_properties->SetAlternativeService(
         url::SchemeHostPort("http", "www.example.org", 80),
         AlternativeService(AlternateProtocolFromNextProto(test_params.protocol),
                            "www.example.org", 443),
@@ -4588,7 +4588,7 @@
   ssl_provider1->SetNextProto(kProtoHTTP11);
   helper.AddDataWithSSLSocketDataProvider(&data1, std::move(ssl_provider1));
 
-  base::WeakPtr<HttpServerProperties> http_server_properties =
+  HttpServerProperties* http_server_properties =
       helper.session()->spdy_session_pool()->http_server_properties();
   const HostPortPair host_port_pair = HostPortPair::FromURL(GURL(url));
   EXPECT_FALSE(http_server_properties->RequiresHTTP11(host_port_pair));
@@ -4693,7 +4693,7 @@
   helper.session_deps()->socket_factory->AddSSLSocketDataProvider(
       ssl_provider2.get());
 
-  base::WeakPtr<HttpServerProperties> http_server_properties =
+  HttpServerProperties* http_server_properties =
       helper.session()->spdy_session_pool()->http_server_properties();
   const HostPortPair proxy_host_port_pair = HostPortPair("myproxy", 70);
   EXPECT_FALSE(http_server_properties->RequiresHTTP11(proxy_host_port_pair));
diff --git a/net/spdy/spdy_session.cc b/net/spdy/spdy_session.cc
index 0c97fa5..5b4530cc 100644
--- a/net/spdy/spdy_session.cc
+++ b/net/spdy/spdy_session.cc
@@ -670,20 +670,19 @@
   return true;
 }
 
-SpdySession::SpdySession(
-    const SpdySessionKey& spdy_session_key,
-    const base::WeakPtr<HttpServerProperties>& http_server_properties,
-    TransportSecurityState* transport_security_state,
-    bool verify_domain_authentication,
-    bool enable_sending_initial_data,
-    bool enable_ping_based_connection_checking,
-    bool enable_priority_dependencies,
-    NextProto default_protocol,
-    size_t session_max_recv_window_size,
-    size_t stream_max_recv_window_size,
-    TimeFunc time_func,
-    ProxyDelegate* proxy_delegate,
-    NetLog* net_log)
+SpdySession::SpdySession(const SpdySessionKey& spdy_session_key,
+                         HttpServerProperties* http_server_properties,
+                         TransportSecurityState* transport_security_state,
+                         bool verify_domain_authentication,
+                         bool enable_sending_initial_data,
+                         bool enable_ping_based_connection_checking,
+                         bool enable_priority_dependencies,
+                         NextProto default_protocol,
+                         size_t session_max_recv_window_size,
+                         size_t stream_max_recv_window_size,
+                         TimeFunc time_func,
+                         ProxyDelegate* proxy_delegate,
+                         NetLog* net_log)
     : in_io_loop_(false),
       spdy_session_key_(spdy_session_key),
       pool_(NULL),
diff --git a/net/spdy/spdy_session.h b/net/spdy/spdy_session.h
index ec98d3c..c5eb613 100644
--- a/net/spdy/spdy_session.h
+++ b/net/spdy/spdy_session.h
@@ -292,7 +292,7 @@
   // |session| is the HttpNetworkSession.  |net_log| is the NetLog that we log
   // network events to.
   SpdySession(const SpdySessionKey& spdy_session_key,
-              const base::WeakPtr<HttpServerProperties>& http_server_properties,
+              HttpServerProperties* http_server_properties,
               TransportSecurityState* transport_security_state,
               bool verify_domain_authentication,
               bool enable_sending_initial_data,
@@ -1026,7 +1026,7 @@
 
   // |pool_| owns us, therefore its lifetime must exceed ours.
   SpdySessionPool* pool_;
-  const base::WeakPtr<HttpServerProperties> http_server_properties_;
+  HttpServerProperties* http_server_properties_;
 
   TransportSecurityState* transport_security_state_;
 
diff --git a/net/spdy/spdy_session_pool.cc b/net/spdy/spdy_session_pool.cc
index 31565a9..dfac1108 100644
--- a/net/spdy/spdy_session_pool.cc
+++ b/net/spdy/spdy_session_pool.cc
@@ -34,7 +34,7 @@
 SpdySessionPool::SpdySessionPool(
     HostResolver* resolver,
     SSLConfigService* ssl_config_service,
-    const base::WeakPtr<HttpServerProperties>& http_server_properties,
+    HttpServerProperties* http_server_properties,
     TransportSecurityState* transport_security_state,
     bool enable_ping_based_connection_checking,
     bool enable_priority_dependencies,
diff --git a/net/spdy/spdy_session_pool.h b/net/spdy/spdy_session_pool.h
index 13664dc..bdcb03b 100644
--- a/net/spdy/spdy_session_pool.h
+++ b/net/spdy/spdy_session_pool.h
@@ -49,18 +49,17 @@
   // |default_protocol| may be kProtoUnknown (e.g., if SPDY is
   // disabled), in which case it's set to a default value. Otherwise,
   // it must be a SPDY protocol.
-  SpdySessionPool(
-      HostResolver* host_resolver,
-      SSLConfigService* ssl_config_service,
-      const base::WeakPtr<HttpServerProperties>& http_server_properties,
-      TransportSecurityState* transport_security_state,
-      bool enable_ping_based_connection_checking,
-      bool enable_priority_dependencies,
-      NextProto default_protocol,
-      size_t session_max_recv_window_size,
-      size_t stream_max_recv_window_size,
-      SpdySessionPool::TimeFunc time_func,
-      ProxyDelegate* proxy_delegate);
+  SpdySessionPool(HostResolver* host_resolver,
+                  SSLConfigService* ssl_config_service,
+                  HttpServerProperties* http_server_properties,
+                  TransportSecurityState* transport_security_state,
+                  bool enable_ping_based_connection_checking,
+                  bool enable_priority_dependencies,
+                  NextProto default_protocol,
+                  size_t session_max_recv_window_size,
+                  size_t stream_max_recv_window_size,
+                  SpdySessionPool::TimeFunc time_func,
+                  ProxyDelegate* proxy_delegate);
   ~SpdySessionPool() override;
 
   // In the functions below, a session is "available" if this pool has
@@ -133,7 +132,7 @@
   // Creates a Value summary of the state of the spdy session pool.
   std::unique_ptr<base::Value> SpdySessionPoolInfoToValue() const;
 
-  base::WeakPtr<HttpServerProperties> http_server_properties() {
+  HttpServerProperties* http_server_properties() {
     return http_server_properties_;
   }
 
@@ -197,7 +196,7 @@
       const std::string& description,
       bool idle_only);
 
-  const base::WeakPtr<HttpServerProperties> http_server_properties_;
+  HttpServerProperties* http_server_properties_;
 
   TransportSecurityState* transport_security_state_;
 
diff --git a/net/spdy/spdy_session_unittest.cc b/net/spdy/spdy_session_unittest.cc
index 2a0eab0..98abf0e 100644
--- a/net/spdy/spdy_session_unittest.cc
+++ b/net/spdy/spdy_session_unittest.cc
@@ -1698,7 +1698,7 @@
 TEST_P(SpdySessionTest, ClearSettingsStorageOnIPAddressChanged) {
   CreateNetworkSession();
 
-  base::WeakPtr<HttpServerProperties> test_http_server_properties =
+  HttpServerProperties* test_http_server_properties =
       spdy_session_pool_->http_server_properties();
   SettingsFlagsAndValue flags_and_value1(SETTINGS_FLAG_PLEASE_PERSIST, 2);
   test_http_server_properties->SetSpdySetting(test_server_,
diff --git a/net/spdy/spdy_test_util_common.cc b/net/spdy/spdy_test_util_common.cc
index 0554098..4a22b8f 100644
--- a/net/spdy/spdy_test_util_common.cc
+++ b/net/spdy/spdy_test_util_common.cc
@@ -340,6 +340,7 @@
       socket_factory(new MockClientSocketFactory),
       http_auth_handler_factory(
           HttpAuthHandlerFactory::CreateDefault(host_resolver.get())),
+      http_server_properties(new HttpServerPropertiesImpl),
       enable_ip_pooling(true),
       enable_ping(false),
       enable_user_alternate_protocol_ports(false),
@@ -379,6 +380,7 @@
       socket_factory(new MockClientSocketFactory),
       http_auth_handler_factory(
           HttpAuthHandlerFactory::CreateDefault(host_resolver.get())),
+      http_server_properties(new HttpServerPropertiesImpl),
       enable_ip_pooling(true),
       enable_ping(false),
       enable_user_alternate_protocol_ports(false),
@@ -428,8 +430,7 @@
   params.ssl_config_service = session_deps->ssl_config_service.get();
   params.http_auth_handler_factory =
       session_deps->http_auth_handler_factory.get();
-  params.http_server_properties =
-      session_deps->http_server_properties.GetWeakPtr();
+  params.http_server_properties = session_deps->http_server_properties.get();
   params.enable_spdy_ping_based_connection_checking = session_deps->enable_ping;
   params.enable_user_alternate_protocol_ports =
       session_deps->enable_user_alternate_protocol_ports;
diff --git a/net/spdy/spdy_test_util_common.h b/net/spdy/spdy_test_util_common.h
index a206cf2..d45c4d0 100644
--- a/net/spdy/spdy_test_util_common.h
+++ b/net/spdy/spdy_test_util_common.h
@@ -194,7 +194,7 @@
   scoped_refptr<SSLConfigService> ssl_config_service;
   std::unique_ptr<MockClientSocketFactory> socket_factory;
   std::unique_ptr<HttpAuthHandlerFactory> http_auth_handler_factory;
-  HttpServerPropertiesImpl http_server_properties;
+  std::unique_ptr<HttpServerPropertiesImpl> http_server_properties;
   bool enable_ip_pooling;
   bool enable_ping;
   bool enable_user_alternate_protocol_ports;
diff --git a/net/url_request/url_request.cc b/net/url_request/url_request.cc
index 3cd5e9a5..7fac9c7 100644
--- a/net/url_request/url_request.cc
+++ b/net/url_request/url_request.cc
@@ -1023,22 +1023,6 @@
   }
 }
 
-bool URLRequest::GetHSTSRedirect(GURL* redirect_url) const {
-  const GURL& url = this->url();
-  bool scheme_is_http = url.SchemeIs("http");
-  if (!scheme_is_http && !url.SchemeIs("ws"))
-    return false;
-  TransportSecurityState* state = context()->transport_security_state();
-  if (state && state->ShouldUpgradeToSSL(url.host())) {
-    GURL::Replacements replacements;
-    const char* new_scheme = scheme_is_http ? "https" : "wss";
-    replacements.SetSchemeStr(new_scheme);
-    *redirect_url = url.ReplaceComponents(replacements);
-    return true;
-  }
-  return false;
-}
-
 void URLRequest::NotifyAuthRequired(AuthChallengeInfo* auth_info) {
   NetworkDelegate::AuthRequiredResponse rv =
       NetworkDelegate::AUTH_REQUIRED_RESPONSE_NO_ACTION;
diff --git a/net/url_request/url_request.h b/net/url_request/url_request.h
index 1aa0dba74b..97cf291 100644
--- a/net/url_request/url_request.h
+++ b/net/url_request/url_request.h
@@ -628,10 +628,6 @@
   // MAXIMUM_PRIORITY if the IGNORE_LIMITS load flag is set.
   void SetPriority(RequestPriority priority);
 
-  // Returns true iff this request would be internally redirected to HTTPS
-  // due to HSTS. If so, |redirect_url| is rewritten to the new HTTPS URL.
-  bool GetHSTSRedirect(GURL* redirect_url) const;
-
   void set_received_response_content_length(int64_t received_content_length) {
     received_response_content_length_ = received_content_length;
   }
diff --git a/net/url_request/url_request_context.cc b/net/url_request/url_request_context.cc
index 1e69edd1..837e0744 100644
--- a/net/url_request/url_request_context.cc
+++ b/net/url_request/url_request_context.cc
@@ -24,6 +24,7 @@
       http_auth_handler_factory_(nullptr),
       proxy_service_(nullptr),
       network_delegate_(nullptr),
+      http_server_properties_(nullptr),
       http_user_agent_settings_(nullptr),
       cookie_store_(nullptr),
       transport_security_state_(nullptr),
diff --git a/net/url_request/url_request_context.h b/net/url_request/url_request_context.h
index 7aa3351..1b00b054 100644
--- a/net/url_request/url_request_context.h
+++ b/net/url_request/url_request_context.h
@@ -137,10 +137,10 @@
   NetworkDelegate* network_delegate() const { return network_delegate_; }
 
   void set_http_server_properties(
-      const base::WeakPtr<HttpServerProperties>& http_server_properties) {
+      HttpServerProperties* http_server_properties) {
     http_server_properties_ = http_server_properties;
   }
-  base::WeakPtr<HttpServerProperties> http_server_properties() const {
+  HttpServerProperties* http_server_properties() const {
     return http_server_properties_;
   }
 
@@ -255,7 +255,7 @@
   ProxyService* proxy_service_;
   scoped_refptr<SSLConfigService> ssl_config_service_;
   NetworkDelegate* network_delegate_;
-  base::WeakPtr<HttpServerProperties> http_server_properties_;
+  HttpServerProperties* http_server_properties_;
   HttpUserAgentSettings* http_user_agent_settings_;
   CookieStore* cookie_store_;
   TransportSecurityState* transport_security_state_;
diff --git a/net/url_request/url_request_context_storage.cc b/net/url_request/url_request_context_storage.cc
index 65cfba6..6865edb 100644
--- a/net/url_request/url_request_context_storage.cc
+++ b/net/url_request/url_request_context_storage.cc
@@ -88,8 +88,8 @@
 
 void URLRequestContextStorage::set_http_server_properties(
     std::unique_ptr<HttpServerProperties> http_server_properties) {
+  context_->set_http_server_properties(http_server_properties.get());
   http_server_properties_ = std::move(http_server_properties);
-  context_->set_http_server_properties(http_server_properties_->GetWeakPtr());
 }
 
 void URLRequestContextStorage::set_cookie_store(
diff --git a/net/url_request/url_request_http_job.cc b/net/url_request/url_request_http_job.cc
index 3fc81f7..73fe8fa0 100644
--- a/net/url_request/url_request_http_job.cc
+++ b/net/url_request/url_request_http_job.cc
@@ -158,6 +158,27 @@
                             EPHEMERALITY_MAX);
 }
 
+net::URLRequestRedirectJob* MaybeInternallyRedirect(
+    net::URLRequest* request,
+    net::NetworkDelegate* network_delegate) {
+  const GURL& url = request->url();
+  if (url.SchemeIsCryptographic())
+    return nullptr;
+
+  net::TransportSecurityState* hsts =
+      request->context()->transport_security_state();
+  if (!hsts || !hsts->ShouldUpgradeToSSL(url.host()))
+    return nullptr;
+
+  GURL::Replacements replacements;
+  replacements.SetSchemeStr(url.SchemeIs(url::kHttpScheme) ? url::kHttpsScheme
+                                                           : url::kWssScheme);
+  return new net::URLRequestRedirectJob(
+      request, network_delegate, url.ReplaceComponents(replacements),
+      // Use status code 307 to preserve the method, so POST requests work.
+      net::URLRequestRedirectJob::REDIRECT_307_TEMPORARY_REDIRECT, "HSTS");
+}
+
 }  // namespace
 
 namespace net {
@@ -258,13 +279,11 @@
         request, network_delegate, ERR_INVALID_ARGUMENT);
   }
 
-  GURL redirect_url;
-  if (request->GetHSTSRedirect(&redirect_url)) {
-    return new URLRequestRedirectJob(
-        request, network_delegate, redirect_url,
-        // Use status code 307 to preserve the method, so POST requests work.
-        URLRequestRedirectJob::REDIRECT_307_TEMPORARY_REDIRECT, "HSTS");
-  }
+  URLRequestRedirectJob* redirect =
+      MaybeInternallyRedirect(request, network_delegate);
+  if (redirect)
+    return redirect;
+
   return new URLRequestHttpJob(request,
                                network_delegate,
                                request->context()->http_user_agent_settings());
diff --git a/net/url_request/url_request_http_job_unittest.cc b/net/url_request/url_request_http_job_unittest.cc
index c12807f8..978fae63 100644
--- a/net/url_request/url_request_http_job_unittest.cc
+++ b/net/url_request/url_request_http_job_unittest.cc
@@ -21,6 +21,9 @@
 #include "net/cookies/cookie_store_test_helpers.h"
 #include "net/http/http_transaction_factory.h"
 #include "net/http/http_transaction_test_util.h"
+#include "net/log/test_net_log.h"
+#include "net/log/test_net_log_entry.h"
+#include "net/log/test_net_log_util.h"
 #include "net/socket/socket_test_util.h"
 #include "net/test/cert_test_util.h"
 #include "net/url_request/url_request.h"
@@ -64,7 +67,7 @@
     EXPECT_TRUE(test_job_factory_.SetProtocolHandler(
         url::kHttpScheme, base::WrapUnique(test_job_interceptor_)));
     context_.set_job_factory(&test_job_factory_);
-
+    context_.set_net_log(&net_log_);
     context_.Init();
 
     req_ = context_.CreateRequest(GURL("http://www.example.com"),
@@ -110,6 +113,7 @@
 
   TestURLRequestContext context_;
   TestDelegate delegate_;
+  TestNetLog net_log_;
   std::unique_ptr<URLRequest> req_;
 };
 
@@ -625,6 +629,69 @@
   EXPECT_FALSE(TransactionAcceptsSdchEncoding());
 }
 
+TEST_F(URLRequestHttpJobTest, HSTSInternalRedirectTest) {
+  // Setup HSTS state.
+  context_.transport_security_state()->AddHSTS(
+      "upgrade.test", base::Time::Now() + base::TimeDelta::FromSeconds(10),
+      true);
+  ASSERT_TRUE(
+      context_.transport_security_state()->ShouldUpgradeToSSL("upgrade.test"));
+  ASSERT_FALSE(context_.transport_security_state()->ShouldUpgradeToSSL(
+      "no-upgrade.test"));
+
+  struct TestCase {
+    const char* url;
+    bool upgrade_expected;
+    const char* url_expected;
+  } cases[] = {
+    {"http://upgrade.test/", true, "https://upgrade.test/"},
+    {"http://upgrade.test:123/", true, "https://upgrade.test:123/"},
+    {"http://no-upgrade.test/", false, "http://no-upgrade.test/"},
+    {"http://no-upgrade.test:123/", false, "http://no-upgrade.test:123/"},
+// iOS doesn't support websockets; see the comments above
+// URLRequestHttpJobWebSocketTest for detail.
+#if !defined(OS_IOS)
+    {"ws://upgrade.test/", true, "wss://upgrade.test/"},
+    {"ws://upgrade.test:123/", true, "wss://upgrade.test:123/"},
+    {"ws://no-upgrade.test/", false, "ws://no-upgrade.test/"},
+    {"ws://no-upgrade.test:123/", false, "ws://no-upgrade.test:123/"},
+#endif  // !defined(OS_IOS)
+  };
+
+  for (const auto& test : cases) {
+    SCOPED_TRACE(test.url);
+    TestDelegate d;
+    TestNetworkDelegate network_delegate;
+    std::unique_ptr<URLRequest> r(
+        context_.CreateRequest(GURL(test.url), DEFAULT_PRIORITY, &d));
+
+    net_log_.Clear();
+    r->Start();
+    base::RunLoop().Run();
+
+    if (test.upgrade_expected) {
+      net::TestNetLogEntry::List entries;
+      net_log_.GetEntries(&entries);
+      int redirects = 0;
+      for (const auto& entry : entries) {
+        if (entry.type == net::NetLog::TYPE_URL_REQUEST_REDIRECT_JOB) {
+          redirects++;
+          std::string value;
+          EXPECT_TRUE(entry.GetStringValue("reason", &value));
+          EXPECT_EQ("HSTS", value);
+        }
+      }
+      EXPECT_EQ(1, redirects);
+      EXPECT_EQ(1, d.received_redirect_count());
+      EXPECT_EQ(2u, r->url_chain().size());
+    } else {
+      EXPECT_EQ(0, d.received_redirect_count());
+      EXPECT_EQ(1u, r->url_chain().size());
+    }
+    EXPECT_EQ(GURL(test.url_expected), r->url());
+  }
+}
+
 class MockSdchObserver : public SdchObserver {
  public:
   MockSdchObserver() {}
diff --git a/net/url_request/url_request_unittest.cc b/net/url_request/url_request_unittest.cc
index f9d197c..91bca58a 100644
--- a/net/url_request/url_request_unittest.cc
+++ b/net/url_request/url_request_unittest.cc
@@ -8653,26 +8653,6 @@
   EXPECT_EQ(kOriginHeaderValue, received_cors_header);
 }
 
-// This just tests the behaviour of GetHSTSRedirect(). End-to-end tests of HSTS
-// are performed in net/websockets/websocket_end_to_end_test.cc.
-TEST(WebSocketURLRequestTest, HSTSApplied) {
-  TestNetworkDelegate network_delegate;
-  TransportSecurityState transport_security_state;
-  base::Time expiry = base::Time::Now() + base::TimeDelta::FromDays(1);
-  bool include_subdomains = false;
-  transport_security_state.AddHSTS("example.net", expiry, include_subdomains);
-  TestURLRequestContext context(true);
-  context.set_transport_security_state(&transport_security_state);
-  context.set_network_delegate(&network_delegate);
-  context.Init();
-  GURL ws_url("ws://example.net/echo");
-  TestDelegate delegate;
-  std::unique_ptr<URLRequest> request(
-      context.CreateRequest(ws_url, DEFAULT_PRIORITY, &delegate));
-  EXPECT_TRUE(request->GetHSTSRedirect(&ws_url));
-  EXPECT_TRUE(ws_url.SchemeIs("wss"));
-}
-
 namespace {
 
 class SSLClientAuthTestDelegate : public TestDelegate {
diff --git a/remoting/BUILD.gn b/remoting/BUILD.gn
index 8a41080..df173a1 100644
--- a/remoting/BUILD.gn
+++ b/remoting/BUILD.gn
@@ -155,12 +155,6 @@
     "//build/config/compiler:no_size_t_to_int_warning",
   ]
 
-  data = [
-    "//net/data/ssl/certificates/ok_cert.pem",
-    "//net/data/ssl/certificates/unittest.key.bin",
-    "//net/data/ssl/certificates/unittest.selfsigned.der",
-  ]
-
   deps = [
     ":test_support",
     "//base",
diff --git a/remoting/protocol/BUILD.gn b/remoting/protocol/BUILD.gn
index d271280..50f686e3 100644
--- a/remoting/protocol/BUILD.gn
+++ b/remoting/protocol/BUILD.gn
@@ -123,6 +123,7 @@
 
   deps = [
     ":test_support",
+    "//net:test_support",
     "//testing/gmock",
     "//testing/gtest",
   ]
diff --git a/skia/config/SkUserConfig.h b/skia/config/SkUserConfig.h
index caffb51..561e42d 100644
--- a/skia/config/SkUserConfig.h
+++ b/skia/config/SkUserConfig.h
@@ -238,9 +238,6 @@
 #   define SK_SUPPORT_LEGACY_COMPUTESAVELAYER_FLAG
 #endif
 
-#ifndef    SK_SUPPORT_LEGACY_TYPEFACE_PTR
-#   define SK_SUPPORT_LEGACY_TYPEFACE_PTR
-#endif
 ///////////////////////// Imported from BUILD.gn and skia_common.gypi
 
 /* In some places Skia can use static initializers for global initialization,
diff --git a/skia/ext/skia_utils_mac.mm b/skia/ext/skia_utils_mac.mm
index 0a6be68..1718551 100644
--- a/skia/ext/skia_utils_mac.mm
+++ b/skia/ext/skia_utils_mac.mm
@@ -312,6 +312,8 @@
 }
 
 CGContextRef SkiaBitLocker::cgContext() {
+  releaseIfNeeded(); // This flushes any prior bitmap use
+
   SkIRect clip_bounds;
   if (!canvas_->getClipDeviceBounds(&clip_bounds)) {
     // If the clip is empty, then there is nothing to draw. The caller may
@@ -321,8 +323,6 @@
     clip_bounds = SkIRect::MakeXYWH(0, 0, 1, 1);
   }
 
-  releaseIfNeeded(); // This flushes any prior bitmap use
-
   // remember the top/left, in case we need to compose this later
   bitmapOffset_.set(clip_bounds.x(), clip_bounds.y());
 
diff --git a/third_party/WebKit/LayoutTests/TestExpectations b/third_party/WebKit/LayoutTests/TestExpectations
index 6a0fae6..3355232 100644
--- a/third_party/WebKit/LayoutTests/TestExpectations
+++ b/third_party/WebKit/LayoutTests/TestExpectations
@@ -52,8 +52,6 @@
 
 crbug.com/617152 imported/wpt/mediacapture-streams/GUM-impossible-constraint.html [ Skip ]
 
-crbug.com/617799 crbug.com/619983 svg/repaint/rounded-rect-height-change.html [ NeedsRebaseline ]
-
 # Expected to fail until OffscreenCanvas can render on the gpu
 crbug.com/593514 virtual/gpu/fast/canvas/OffscreenCanvas-strokeRect-in-worker.html [ Failure ]
 crbug.com/593514 virtual/gpu/fast/canvas/OffscreenCanvas-paths-in-worker.html [ Failure ]
@@ -700,6 +698,9 @@
 crbug.com/537080 imported/csswg-test/css-writing-modes-3/vertical-alignment-003.xht [ Failure ]
 crbug.com/537080 imported/csswg-test/css-writing-modes-3/vertical-alignment-009.xht [ Failure ]
 
+# These tests fail / timeout until https://www.chromestatus.com/features/5643236399906816 ships
+crbug.com/621515 inspector/sources/debugger-async/async-await/async-callstack-async-await.html [ Failure Timeout ]
+
 # These tests pass but images do not match because of position: absolute in vertical flow bug
 crbug.com/492664 imported/csswg-test/css-writing-modes-3/block-flow-direction-vrl-009.xht [ Failure ]
 crbug.com/492664 imported/csswg-test/css-writing-modes-3/clip-rect-vlr-003.xht [ Failure ]
@@ -1192,9 +1193,6 @@
 crbug.com/445194 [ Debug ] fast/dom/shadow/focus-controller-recursion-crash.html [ Skip ]
 crbug.com/505387 [ Win ] virtual/prefer_compositing_to_lcd_text/scrollbars/rtl/overflow-scroll-rtl.html [ Failure ]
 
-# Failure on Mac 10.9, temporarily disabled.
-crbug.com/617799 crbug.com/621024 [ Mac10.9 ] svg/custom/pointer-events-image.svg [ NeedsRebaseline ]
-
 # Mac10.10-specific failures that still need triaging.
 # Form controls need rebaseline because of the default font change.
 # If you see wider INPUT elements or narrower TEXTAREA elements, you may do just
@@ -1211,8 +1209,8 @@
 crbug.com/509025 [ Mac10.10 ] virtual/rootlayerscrolls/scrollbars/rtl/overflow-scroll-rtl.html [ Failure ]
 crbug.com/509025 [ Mac10.10 ] virtual/rootlayerscrolls/scrollbars/short-scrollbar.html [ Failure ]
 
-crbug.com/619103 compositing/overflow/updating-scrolling-container-and-content.html [ Crash Timeout ]
-crbug.com/619103 virtual/prefer_compositing_to_lcd_text/compositing/overflow/updating-scrolling-container-and-content.html [ Crash Timeout ]
+crbug.com/619103 compositing/overflow/updating-scrolling-container-and-content.html [ Failure Crash Timeout ]
+crbug.com/619103 virtual/prefer_compositing_to_lcd_text/compositing/overflow/updating-scrolling-container-and-content.html [ Failure Crash Timeout ]
 crbug.com/619103 fast/repaint/background-resize-width.html [ Failure ]
 crbug.com/619103 fast/repaint/hover-invalidation-table.html [ Failure ]
 crbug.com/619103 fast/repaint/selected-replaced.html [ Failure ]
@@ -1353,9 +1351,6 @@
 
 crbug.com/587779 [ Linux Mac10.9 Mac10.10 Mac10.11 Retina ] fast/dynamic/window-resize-scrollbars-test.html [ Timeout Failure Pass ]
 
-crbug.com/617799 crbug.com/620141 css3/filters/effect-hue-rotate-hw.html [ NeedsRebaseline ]
-crbug.com/617799 crbug.com/620141 paint/selection/selection-drag-image-in-iframe.html [ NeedsRebaseline ]
-
 crbug.com/588103 fast/xmlhttprequest/xmlhttprequest-responsetype-arraybuffer.html [ Pass Failure ]
 
 crbug.com/594672 fast/events/iframe-object-onload.html [ Failure Pass ]
@@ -1379,126 +1374,9 @@
 
 crbug.com/594595 [ Linux ] http/tests/security/mixedContent/websocket/insecure-websocket-in-secure-page-worker-allowed.html [ Timeout Pass ]
 
-crbug.com/617799 crbug.com/619630 compositing/squashing/iframe-inside-squashed-layer.html [ NeedsRebaseline ]
-crbug.com/617799 crbug.com/619630 compositing/squashing/remove-squashed-layer-plus-move.html [ NeedsRebaseline ]
-crbug.com/617799 crbug.com/619630 css3/flexbox/repaint-on-layout.html [ NeedsRebaseline ]
-crbug.com/617799 crbug.com/619630 css3/flexbox/repaint.html [ NeedsRebaseline ]
-crbug.com/617799 crbug.com/619630 fast/repaint/block-no-inflow-children.html [ NeedsRebaseline ]
-crbug.com/617799 crbug.com/619630 fast/repaint/box-inline-resize.html [ NeedsRebaseline ]
-crbug.com/617799 crbug.com/619630 fast/repaint/bugzilla-3509.html [ NeedsRebaseline ]
-crbug.com/617799 crbug.com/619630 fast/repaint/bugzilla-5699.html [ NeedsRebaseline ]
-crbug.com/617799 crbug.com/619630 fast/repaint/bugzilla-6278.html [ NeedsRebaseline ]
-crbug.com/617799 crbug.com/619630 fast/repaint/bugzilla-7235.html [ NeedsRebaseline ]
-crbug.com/617799 crbug.com/619630 fast/repaint/change-text-content-and-background-color.html [ NeedsRebaseline ]
-crbug.com/617799 crbug.com/619630 fast/repaint/clip-with-layout-delta.html [ NeedsRebaseline ]
-crbug.com/617799 crbug.com/619630 fast/repaint/clipped-relative.html [ NeedsRebaseline ]
-crbug.com/617799 crbug.com/619630 fast/repaint/control-clip.html [ NeedsRebaseline ]
-crbug.com/617799 crbug.com/619630 fast/repaint/crbug-371640-4.html [ NeedsRebaseline ]
-crbug.com/617799 crbug.com/619630 fast/repaint/crbug-371640.html [ NeedsRebaseline ]
-crbug.com/617799 crbug.com/619630 fast/repaint/delete-into-nested-block.html [ NeedsRebaseline ]
-crbug.com/617799 crbug.com/619630 fast/repaint/gradients-em-stops-repaint.html [ NeedsRebaseline ]
-crbug.com/617799 crbug.com/619630 fast/repaint/inline-block-resize.html [ NeedsRebaseline ]
-crbug.com/617799 crbug.com/619630 fast/repaint/inline-focus.html [ NeedsRebaseline ]
-crbug.com/617799 crbug.com/619630 fast/repaint/inline-outline-repaint.html [ NeedsRebaseline ]
-crbug.com/617799 crbug.com/619630 fast/repaint/inline-reflow.html [ NeedsRebaseline ]
-crbug.com/617799 crbug.com/619630 fast/repaint/inline-relative-positioned.html [ NeedsRebaseline ]
-crbug.com/617799 crbug.com/619630 fast/repaint/invisible-objects.html [ NeedsRebaseline ]
-crbug.com/617799 crbug.com/619630 fast/repaint/layout-state-relative.html [ NeedsRebaseline ]
-crbug.com/617799 crbug.com/619630 fast/repaint/layout-state-scrolloffset.html [ NeedsRebaseline ]
-crbug.com/617799 crbug.com/619630 fast/repaint/layout-state-scrolloffset2.html [ NeedsRebaseline ]
-crbug.com/617799 crbug.com/619630 fast/repaint/layout-state-scrolloffset3.html [ NeedsRebaseline ]
-crbug.com/617799 crbug.com/619630 fast/repaint/layoutstate-invalid-invalidation-inline-relative-positioned.html [ NeedsRebaseline ]
-crbug.com/617799 crbug.com/619630 fast/repaint/line-flow-with-floats-1.html [ NeedsRebaseline ]
-crbug.com/617799 crbug.com/619630 fast/repaint/line-flow-with-floats-10.html [ NeedsRebaseline ]
-crbug.com/617799 crbug.com/619630 fast/repaint/line-flow-with-floats-2.html [ NeedsRebaseline ]
-crbug.com/617799 crbug.com/619630 fast/repaint/line-flow-with-floats-3.html [ NeedsRebaseline ]
-crbug.com/617799 crbug.com/619630 fast/repaint/line-flow-with-floats-4.html [ NeedsRebaseline ]
-crbug.com/617799 crbug.com/619630 fast/repaint/line-flow-with-floats-5.html [ NeedsRebaseline ]
-crbug.com/617799 crbug.com/619630 fast/repaint/line-flow-with-floats-6.html [ NeedsRebaseline ]
-crbug.com/617799 crbug.com/619630 fast/repaint/line-flow-with-floats-7.html [ NeedsRebaseline ]
-crbug.com/617799 crbug.com/619630 fast/repaint/line-flow-with-floats-8.html [ NeedsRebaseline ]
-crbug.com/617799 crbug.com/619630 fast/repaint/line-flow-with-floats-9.html [ NeedsRebaseline ]
-crbug.com/617799 crbug.com/619630 fast/repaint/line-in-scrolled-clipped-block.html [ NeedsRebaseline ]
-crbug.com/617799 crbug.com/619630 fast/repaint/line-overflow.html [ NeedsRebaseline ]
-crbug.com/617799 crbug.com/619630 fast/repaint/lines-with-layout-delta.html [ NeedsRebaseline ]
-crbug.com/617799 crbug.com/619630 fast/repaint/list-marker-2.html [ NeedsRebaseline ]
-crbug.com/617799 crbug.com/619630 fast/repaint/make-children-non-inline.html [ NeedsRebaseline ]
-crbug.com/617799 crbug.com/619630 fast/repaint/multi-layout-one-frame.html [ NeedsRebaseline ]
-crbug.com/617799 crbug.com/619630 fast/repaint/multicol-repaint.html [ NeedsRebaseline ]
-crbug.com/617799 crbug.com/619630 fast/repaint/multicol-with-text.html [ NeedsRebaseline ]
-crbug.com/617799 crbug.com/619630 fast/repaint/outline-continuations.html [ NeedsRebaseline ]
-crbug.com/617799 crbug.com/619630 fast/repaint/overflow-delete-line.html [ NeedsRebaseline ]
-crbug.com/617799 crbug.com/619630 fast/repaint/overflow-scroll-body-appear.html [ NeedsRebaseline ]
-crbug.com/617799 crbug.com/619630 fast/repaint/overflow-scroll-delete.html [ NeedsRebaseline ]
-crbug.com/617799 crbug.com/619630 fast/repaint/paint-invalidation-with-reparent-across-frame-boundaries.html [ NeedsRebaseline ]
-crbug.com/617799 crbug.com/619630 fast/repaint/positioned-document-element.html [ NeedsRebaseline ]
-crbug.com/617799 crbug.com/619630 fast/repaint/positioned-list-offset-change-repaint.html [ NeedsRebaseline ]
-crbug.com/617799 crbug.com/619630 fast/repaint/quotes.html [ NeedsRebaseline ]
-crbug.com/617799 crbug.com/619630 fast/repaint/reflection-repaint-test.html [ NeedsRebaseline ]
-crbug.com/617799 crbug.com/619630 fast/repaint/relative-inline-positioned-movement-repaint.html [ NeedsRebaseline ]
-crbug.com/617799 crbug.com/619630 fast/repaint/remove-block-after-layout.html [ NeedsRebaseline ]
-crbug.com/617799 crbug.com/619630 fast/repaint/remove-inline-after-layout.html [ NeedsRebaseline ]
-crbug.com/617799 crbug.com/619630 fast/repaint/remove-inline-block-descendant-of-flex.html [ NeedsRebaseline ]
-crbug.com/617799 crbug.com/619630 fast/repaint/remove-inline-layer-after-layout.html [ NeedsRebaseline ]
-crbug.com/617799 crbug.com/619630 fast/repaint/resize-scrollable-iframe.html [ NeedsRebaseline ]
-crbug.com/617799 crbug.com/619630 fast/repaint/selection-after-delete.html [ NeedsRebaseline ]
-crbug.com/617799 crbug.com/619630 fast/repaint/selection-after-remove.html [ NeedsRebaseline ]
-crbug.com/617799 crbug.com/619630 fast/repaint/selection-clear.html [ NeedsRebaseline ]
-crbug.com/617799 crbug.com/619630 fast/repaint/shift-relative-positioned-container-with-image-removal.html [ NeedsRebaseline ]
-crbug.com/617799 crbug.com/619630 fast/repaint/stacked-diacritics.html [ NeedsRebaseline ]
-crbug.com/617799 crbug.com/619630 fast/repaint/subtree-root-skipped.html [ NeedsRebaseline ]
-crbug.com/617799 crbug.com/619630 fast/repaint/table-collapsed-border.html [ NeedsRebaseline ]
-crbug.com/617799 crbug.com/619630 fast/repaint/text-append-dirty-lines.html [ NeedsRebaseline ]
-crbug.com/617799 crbug.com/619630 fast/repaint/text-in-relative-positioned-inline.html [ NeedsRebaseline ]
-crbug.com/617799 crbug.com/619630 fast/repaint/text-match-document-change.html [ NeedsRebaseline ]
-crbug.com/617799 crbug.com/619630 fast/repaint/transform-layout-repaint.html [ NeedsRebaseline ]
-crbug.com/617799 crbug.com/619630 fast/repaint/vertical-align-length1.html [ NeedsRebaseline ]
-crbug.com/617799 crbug.com/619630 fast/repaint/vertical-align-length2.html [ NeedsRebaseline ]
-crbug.com/617799 crbug.com/619630 fast/repaint/vertical-align1.html [ NeedsRebaseline ]
-crbug.com/617799 crbug.com/619630 fast/repaint/vertical-align2.html [ NeedsRebaseline ]
 crbug.com/619630 fast/repaint/window-resize-centered-inline-under-fixed-pos.html [ NeedsManualRebaseline ]
 crbug.com/619630 fast/repaint/window-resize-vertical-writing-mode.html [ NeedsManualRebaseline ]
-crbug.com/617799 crbug.com/619630 fast/table/border-collapsing/cached-change-cell-sl-border-color.html [ NeedsRebaseline ]
-crbug.com/617799 crbug.com/619630 fast/table/resize-table-repaint-percent-size-cell.html [ NeedsRebaseline ]
-crbug.com/617799 crbug.com/619630 fast/table/resize-table-repaint-vertical-align-cell.html [ NeedsRebaseline ]
-crbug.com/617799 crbug.com/619630 fast/table/resize-table-row-repaint.html [ NeedsRebaseline ]
-crbug.com/617799 crbug.com/619630 svg/as-image/svg-image-change-content-size.xhtml [ NeedsRebaseline ]
-crbug.com/617799 crbug.com/619630 svg/as-object/embedded-svg-size-changes-no-layout-triggers.html [ NeedsRebaseline ]
-crbug.com/617799 crbug.com/619630 svg/as-object/nested-embedded-svg-size-changes-no-layout-triggers-1.html [ NeedsRebaseline ]
-crbug.com/617799 crbug.com/619630 svg/as-object/nested-embedded-svg-size-changes-no-layout-triggers-2.html [ NeedsRebaseline ]
-crbug.com/617799 crbug.com/619630 svg/carto.net/tabgroup.svg [ NeedsRebaseline ]
-crbug.com/617799 crbug.com/619630 svg/custom/absolute-sized-content-with-resources.xhtml [ NeedsRebaseline ]
-crbug.com/617799 crbug.com/619630 svg/custom/js-late-gradient-creation.svg [ NeedsRebaseline ]
-crbug.com/617799 crbug.com/619630 svg/custom/js-late-pattern-creation.svg [ NeedsRebaseline ]
-crbug.com/617799 crbug.com/619630 svg/custom/object-sizing-no-width-height-change-content-box-size.xhtml [ NeedsRebaseline ]
-crbug.com/617799 crbug.com/619630 svg/custom/relative-sized-content-with-resources.xhtml [ NeedsRebaseline ]
-crbug.com/617799 crbug.com/619630 svg/custom/relative-sized-inner-svg.xhtml [ NeedsRebaseline ]
-crbug.com/617799 crbug.com/619630 svg/custom/relative-sized-shadow-tree-content-with-symbol.xhtml [ NeedsRebaseline ]
-crbug.com/617799 crbug.com/619630 svg/custom/relative-sized-use-on-symbol.xhtml [ NeedsRebaseline ]
-crbug.com/617799 crbug.com/619630 svg/custom/relative-sized-use-without-attributes-on-symbol.xhtml [ NeedsRebaseline ]
-crbug.com/617799 crbug.com/619630 svg/custom/scrolling-embedded-svg-file-image-repaint-problem.html [ NeedsRebaseline ]
-crbug.com/617799 crbug.com/619630 svg/custom/text-dom-removal.svg [ NeedsRebaseline ]
-crbug.com/617799 crbug.com/619630 svg/custom/text-repaint-including-stroke.svg [ NeedsRebaseline ]
-crbug.com/617799 crbug.com/619630 svg/custom/text-xy-updates-SVGList.xhtml [ NeedsRebaseline ]
-crbug.com/617799 crbug.com/619630 svg/custom/use-clipped-hit.svg [ NeedsRebaseline ]
-crbug.com/617799 crbug.com/619630 svg/custom/use-detach.svg [ NeedsRebaseline ]
-crbug.com/617799 crbug.com/619630 svg/custom/use-setAttribute-crash.svg [ NeedsRebaseline ]
-crbug.com/617799 crbug.com/619630 svg/repaint/add-outline-property-on-root.html [ NeedsRebaseline ]
-crbug.com/617799 crbug.com/619630 svg/repaint/inner-svg-change-viewPort-relative.svg [ NeedsRebaseline ]
-crbug.com/617799 crbug.com/619630 svg/repaint/modify-transferred-listitem-different-attr.html [ NeedsRebaseline ]
-crbug.com/617799 crbug.com/619630 svg/repaint/outline-offset-text.html [ NeedsRebaseline ]
-crbug.com/617799 crbug.com/619630 svg/repaint/remove-outline-property-on-root.html [ NeedsRebaseline ]
-crbug.com/617799 crbug.com/619630 svg/repaint/repaint-non-scaling-stroke-text-decoration.html [ NeedsRebaseline ]
-crbug.com/617799 crbug.com/619630 svg/repaint/repaint-non-scaling-stroke-text.html [ NeedsRebaseline ]
-crbug.com/617799 crbug.com/619630 svg/repaint/text-mask-update.svg [ NeedsRebaseline ]
-crbug.com/617799 crbug.com/619630 svg/repaint/transform-text-element.html [ NeedsRebaseline ]
-crbug.com/617799 crbug.com/619630 svg/text/append-text-node-to-tspan.html [ NeedsRebaseline ]
-crbug.com/617799 crbug.com/619630 svg/text/modify-text-node-in-tspan.html [ NeedsRebaseline ]
-crbug.com/617799 crbug.com/619630 svg/text/remove-text-node-from-tspan.html [ NeedsRebaseline ]
-crbug.com/617799 crbug.com/619630 svg/text/remove-tspan-from-text.html [ NeedsRebaseline ]
-crbug.com/617799 crbug.com/619630 svg/text/text-rescale.html [ NeedsRebaseline ]
 crbug.com/619630 svg/text/text-viewbox-rescale.html [ NeedsManualRebaseline ]
-crbug.com/617799 crbug.com/619630 svg/text/tspan-dynamic-positioning.svg [ NeedsRebaseline ]
 crbug.com/619630 svg/transforms/animated-path-inside-transformed-html.xhtml [ NeedsManualRebaseline ]
 
 crbug.com/453002 [ Win ] fast/text/international/text-combine-image-test.html [ Failure Pass ]
@@ -1510,9 +1388,6 @@
 
 crbug.com/599975 [ Android ] media/video-autoplay.html [ Crash Timeout ]
 
-crbug.com/617799 crbug.com/612874 [ Win ] tables/mozilla/marvin/backgr_simple-table-column-group.html [ NeedsRebaseline ]
-crbug.com/617799 crbug.com/612874 [ Win ] svg/wicd/test-scalable-background-image1.xhtml [ NeedsRebaseline ]
-
 # DocumentWriteEvaluator is still experimental
 crbug.com/599115 http/tests/preload/document-write [ Failure ]
 crbug.com/599115 http/tests/preload/document-write/document_write_no_preload.html [ Pass ]
@@ -1542,44 +1417,12 @@
 crbug.com/610464 [ Win7 Debug ] inspector/components/throttler.html [ Failure Pass ]
 crbug.com/606649 fast/dom/gc-dom-tree-lifetime.html [ Pass Timeout ]
 
-crbug.com/617799 crbug.com/620126 svg/custom/js-late-clipPath-and-object-creation.svg [ NeedsRebaseline ]
-crbug.com/617799 crbug.com/620126 svg/custom/js-late-clipPath-creation.svg [ NeedsRebaseline ]
-crbug.com/617799 crbug.com/620126 svg/custom/relative-sized-shadow-tree-content.xhtml [ NeedsRebaseline ]
-crbug.com/617799 crbug.com/620126 svg/custom/relative-sized-deep-shadow-tree-content.xhtml [ NeedsRebaseline ]
-crbug.com/617799 crbug.com/620126 svg/custom/relative-sized-content.xhtml [ NeedsRebaseline ]
-crbug.com/617799 crbug.com/620126 svg/custom/relative-sized-image.xhtml [ NeedsRebaseline ]
-
-# Failure on Linux Trusty, temporarily disabled.
-crbug.com/617799 crbug.com/621025 [ Linux ] svg/custom/text-match-highlight.html [ NeedsRebaseline ]
-
 # TODO(jlebel): Remove when methods are implemented.
 crbug.com/609065 [ Mac ] bluetooth/characteristicProperties.html [ Skip ]
-crbug.com/609064 [ Mac ] bluetooth/connect/connect-disconnected-connect.html [ Skip ]
-crbug.com/609064 [ Mac ] bluetooth/gattserverdisconnected-event/disconnected.html [ Skip ]
-crbug.com/609064 [ Mac ] bluetooth/gattserverdisconnected-event/disconnected_gc.html [ Skip ]
-crbug.com/609064 [ Mac ] bluetooth/gattserverdisconnected-event/one-event-per-disconnection.html [ Skip ]
-crbug.com/609064 [ Mac ] bluetooth/gattserverdisconnected-event/reconnect-during-disconnected-event.html [ Skip ]
-crbug.com/609064 [ Mac ] bluetooth/getCharacteristic/blacklisted-characteristic.html [ Skip ]
-crbug.com/609064 [ Mac ] bluetooth/getCharacteristic/characteristic-found.html [ Skip ]
-crbug.com/609064 [ Mac ] bluetooth/getCharacteristic/characteristic-not-found.html [ Skip ]
-crbug.com/609064 [ Mac ] bluetooth/getCharacteristic/device-goes-out-of-range.html [ Skip ]
-crbug.com/609064 [ Mac ] bluetooth/getCharacteristic/get-same-characteristic.html [ Skip ]
-crbug.com/609064 [ Mac ] bluetooth/getCharacteristic/invalid-characteristic-name.html [ Skip ]
-crbug.com/609064 [ Mac ] bluetooth/getCharacteristic/service-is-removed.html [ Skip ]
-crbug.com/609064 [ Mac ] bluetooth/getCharacteristics/blacklisted-characteristics-with-uuid.html [ Skip ]
-crbug.com/609064 [ Mac ] bluetooth/getCharacteristics/blacklisted-characteristics.html [ Skip ]
-crbug.com/609064 [ Mac ] bluetooth/getCharacteristics/characteristics-found-with-uuid.html [ Skip ]
-crbug.com/609064 [ Mac ] bluetooth/getCharacteristics/characteristics-found.html [ Skip ]
-crbug.com/609064 [ Mac ] bluetooth/getCharacteristics/characteristics-not-found-with-uuid.html [ Skip ]
-crbug.com/609064 [ Mac ] bluetooth/getCharacteristics/characteristics-not-found.html [ Skip ]
-crbug.com/609064 [ Mac ] bluetooth/getCharacteristics/correct-characteristics.html [ Skip ]
-crbug.com/609064 [ Mac ] bluetooth/getCharacteristics/device-goes-out-of-range-with-uuid.html [ Skip ]
-crbug.com/609064 [ Mac ] bluetooth/getCharacteristics/device-goes-out-of-range.html [ Skip ]
-crbug.com/609064 [ Mac ] bluetooth/getCharacteristics/get-same-characteristics.html [ Skip ]
-crbug.com/609064 [ Mac ] bluetooth/getCharacteristics/invalid-characteristic-name.html [ Skip ]
-crbug.com/609064 [ Mac ] bluetooth/getCharacteristics/service-is-removed-with-uuid.html [ Skip ]
-crbug.com/609064 [ Mac ] bluetooth/getCharacteristics/service-is-removed.html [ Skip ]
-crbug.com/609064 [ Mac ] bluetooth/getPrimaryServices/correct-services.html [ Skip ]
+crbug.com/609065 [ Mac ] bluetooth/connect/connect-disconnected-connect.html [ Skip ]
+crbug.com/609065 [ Mac ] bluetooth/gattserverdisconnected-event/disconnected.html [ Skip ]
+crbug.com/609065 [ Mac ] bluetooth/getCharacteristics/correct-characteristics.html [ Skip ]
+crbug.com/609065 [ Mac ] bluetooth/gattserverdisconnected-event/reconnect-during-disconnected-event.html [ Skip ]
 crbug.com/609068 [ Mac ] bluetooth/notifications/add-listener-after-promise.html [ Skip ]
 crbug.com/609068 [ Mac ] bluetooth/notifications/add-multiple-event-listeners.html [ Skip ]
 crbug.com/609068 [ Mac ] bluetooth/notifications/characteristic-does-not-support-notifications.html [ Skip ]
@@ -1618,754 +1461,9 @@
 crbug.com/609067 [ Mac ] bluetooth/writeValue/write-succeeds.html [ Skip ]
 crbug.com/609067 [ Mac ] bluetooth/writeValue/write-updates-value.html [ Skip ]
 
-crbug.com/617799 compositing/absolute-inside-out-of-view-fixed.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/clip-child-by-non-stacking-ancestor.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/columns/composited-in-paginated.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/contents-opaque/background-clip.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/contents-opaque/background-color.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/contents-opaque/body-background-painted.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/contents-opaque/body-background-skipped.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/contents-opaque/filter.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/contents-opaque/hidden-with-visible-child.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/contents-opaque/hidden-with-visible-text.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/contents-opaque/layer-opacity.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/contents-opaque/layer-transform.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/contents-opaque/overflow-hidden-child-layers.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/contents-opaque/visibility-hidden.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/draws-content/canvas-background-layer.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/draws-content/webgl-background-layer.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/filters/sw-layer-overlaps-hw-shadow.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/filters/sw-nested-shadow-overlaps-hw-nested-shadow.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/filters/sw-shadow-overlaps-hw-layer.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/filters/sw-shadow-overlaps-hw-shadow.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/fixed-body-background-positioned.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/fixed-position-changed-to-absolute.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/force-compositing-mode/force-composite-empty.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/force-compositing-mode/no-overflow-iframe-layer.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/force-compositing-mode/overflow-hidden-iframe-layer.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/force-compositing-mode/overflow-iframe-enter-compositing.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/force-compositing-mode/overflow-iframe-layer.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/geometry/ancestor-overflow-change.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/geometry/bounds-clipped-composited-child.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/geometry/bounds-ignores-hidden-composited-descendant.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/geometry/bounds-ignores-hidden-dynamic-negzindex.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/geometry/bounds-ignores-hidden-dynamic.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/geometry/bounds-ignores-hidden.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/geometry/clip-inside.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/geometry/clip-with-shadow.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/geometry/clip.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/geometry/composited-in-columns.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/geometry/flipped-writing-mode.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/geometry/foreground-layer.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/geometry/layer-due-to-layer-children-deep-switch.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/geometry/layer-due-to-layer-children-switch.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/geometry/limit-layer-bounds-opacity-transition.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/geometry/limit-layer-bounds-overflow-root.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/geometry/limit-layer-bounds-positioned-transition.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/geometry/limit-layer-bounds-positioned.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/geometry/limit-layer-bounds-transformed.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/geometry/preserve-3d-switching.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/iframes/become-composited-nested-iframes.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/iframes/become-overlapped-iframe.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/iframes/composited-parent-iframe.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/iframes/connect-compositing-iframe-delayed.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/iframes/connect-compositing-iframe.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/iframes/connect-compositing-iframe2.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/iframes/connect-compositing-iframe3.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/iframes/enter-compositing-iframe.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/iframes/iframe-resize.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/iframes/iframe-size-from-zero.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/iframes/invisible-nested-iframe-hide.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/iframes/invisible-nested-iframe-show.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/iframes/overlapped-iframe-iframe.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/iframes/overlapped-iframe.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/iframes/overlapped-nested-iframes.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/iframes/resizer.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/iframes/scrolling-iframe.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/iframes/visibility-hidden-transformed-content.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/images/clip-on-directly-composited-image.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/images/direct-image-dynamic-border-draws-content.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/layer-creation/animation-overlap-with-children.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/layer-creation/assumed-overlap-for-inline-transform.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/layer-creation/compositing-reason-removed.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/layer-creation/fixed-position-and-transform.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/layer-creation/fixed-position-change-out-of-view-in-view.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/layer-creation/fixed-position-in-fixed-overflow.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/layer-creation/fixed-position-no-content.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/layer-creation/fixed-position-nonscrollable-body-mismatch-containers.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/layer-creation/fixed-position-nonscrollable-body-overlap.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/layer-creation/fixed-position-nonscrollable-body.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/layer-creation/fixed-position-nonscrollable-iframes-in-scrollable-page.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/layer-creation/fixed-position-out-of-view-positioning.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/layer-creation/fixed-position-out-of-view-scaled-scroll.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/layer-creation/fixed-position-out-of-view-scaled.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/layer-creation/fixed-position-out-of-view-with-backdrop-filter.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/layer-creation/fixed-position-out-of-view.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/layer-creation/main-thread-scrolling-for-non-composited-fixed-position-if-overflow-hidden.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/layer-creation/main-thread-scrolling-for-non-composited-fixed-position.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/layer-creation/no-compositing-for-fixed-position-under-transform.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/layer-creation/no-compositing-for-preserve-3d.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/layer-creation/no-main-thread-scrolling-for-non-composited-fixed-position-without-scroll.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/layer-creation/overflow-scroll-overlap.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/layer-creation/overlap-animation-clipping.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/layer-creation/overlap-animation-container.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/layer-creation/overlap-animation.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/layer-creation/overlap-child-layer.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/layer-creation/overlap-clipping.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/layer-creation/overlap-transformed-3d.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/layer-creation/overlap-transformed-and-clipped.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/layer-creation/overlap-transformed-layer-with-transform-body.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/layer-creation/overlap-transformed-layer.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/layer-creation/overlap-transformed-preserved-3d.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/layer-creation/overlap-transforms.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/layer-creation/remove-clipping-layer-with-no-children.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/layer-creation/rotate3d-overlap.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/layer-creation/scroll-partial-update.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/layer-creation/should-invoke-deferred-compositing.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/layer-creation/spanOverlapsCanvas.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/layer-creation/squashing-into-ancestor-clipping-layer-change.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/layer-creation/stacking-context-overlap-nested.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/layer-creation/stacking-context-overlap.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/layer-creation/translatez-added.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/layer-creation/translatez-overlap.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/layer-creation/translatez-removed.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/masks/mask-layer-size.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/overflow-trumps-transform-style.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/overflow/accelerated-overflow-scroll-should-not-affect-perspective.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/overflow/clip-descendents.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/overflow/composited-scrolling-paint-phases.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/overflow/content-gains-scrollbars.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/overflow/content-loses-scrollbars.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/overflow/fixed-scroll-in-empty-root-layer.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/overflow/overflow-auto-with-touch-no-overflow.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/overflow/overflow-auto-with-touch-toggle.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/overflow/overflow-auto-with-touch.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/overflow/overflow-hidden-with-touch.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/overflow/overflow-overlay-with-touch-no-overflow.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/overflow/overflow-overlay-with-touch.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/overflow/overflow-scroll-with-touch-no-overflow.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/overflow/overflow-scrollbar-layers.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/overflow/overflow-visible-with-touch.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/overflow/reparented-scrollbars-non-sc-anc.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/overflow/resize-painting.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/overflow/scroll-parent-absolute-with-backdrop-filter.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/overflow/scroll-parent-absolute.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/overflow/scroll-parent-with-non-stacking-context-composited-ancestor.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/overflow/scrolling-content-clip-to-viewport.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/overflow/scrolling-without-painting.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/overflow/selection-gaps-after-removing-scrolling-contents.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/overflow/selection-gaps-toggling-with-scrolling-contents.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/overflow/selection-gaps-toggling.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/overflow/text-color-change.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/overflow/text-match-highlight.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/overflow/textarea-scroll-touch.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/overflow/universal-accelerated-overflow-scroll.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/overflow/updating-scrolling-container.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/overflow/updating-scrolling-content.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/overlap-test-with-filter.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/rendering-contexts.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/repaint/clipping-should-not-repaint-composited-descendants.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/repaint/fixed-pos-inside-composited-intermediate-layer.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/repaint/fixed-pos-with-abs-pos-child-scroll.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/repaint/invalidations-on-composited-layers.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/repaint/resize-repaint.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/repaint/scroll-fixed-layer-no-content.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/repaint/scroll-fixed-layer-out-of-view.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/repaint/scroll-fixed-squahed-layer.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/repaint/should-not-clip-composited-overflow-scrolling-layer.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/repaint/should-not-clip-composited-viewport-scrolling-layer.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/repaint/should-not-repaint-composited-descendants-on-overflow-change.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/repaint/should-not-repaint-composited-descendants.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/repaint/should-not-repaint-composited-filter.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/repaint/should-not-repaint-composited-opacity.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/repaint/should-not-repaint-composited-transform.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/repaint/should-not-repaint-composited-z-index.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/rtl/rtl-absolute-overflow-scrolled.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/rtl/rtl-absolute-overflow.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/rtl/rtl-absolute.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/rtl/rtl-fixed-overflow-scrolled.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/rtl/rtl-fixed-overflow.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/rtl/rtl-fixed.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/rtl/rtl-iframe-absolute-overflow-scrolled.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/rtl/rtl-iframe-absolute-overflow.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/rtl/rtl-iframe-absolute.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/rtl/rtl-iframe-fixed-overflow-scrolled.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/rtl/rtl-iframe-fixed-overflow.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/rtl/rtl-iframe-fixed.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/rtl/rtl-iframe-relative.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/rtl/rtl-relative.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/scrollbars/nested-overlay-scrollbars.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/squashing/add-remove-squashed-layers.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/squashing/clipping-ancestor.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/squashing/composited-bounds-for-negative-z.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/squashing/do-not-squash-non-self-painting-layer.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/squashing/dont-squash-into-iframes.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/squashing/dont-squash-into-videos.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/squashing/iframes-are-never-squashed.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/squashing/invalidate-when-leaving-squashed-layer.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/squashing/invalidation-for-subpixel-offset-of-squashed-layer.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/squashing/invalidations-with-large-negative-margin-inline-content.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/squashing/invalidations-with-large-negative-margin.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/squashing/invisible-layers-should-not-affect-geometry.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/squashing/move-squashing-layer.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/squashing/no-squashing-for-filters.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/squashing/no-squashing-into-another-clip-layer.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/squashing/no-squashing-into-fixed-position-that-clips.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/squashing/opacity-squashed-owner.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/squashing/repaint-child-of-squashed.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/squashing/repaint-overflow-scrolled-squashed-content.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/squashing/repaint-squashed-layer-in-rect.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/squashing/repaint-via-layout-offset.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/squashing/resize-squashing-layer-that-needs-full-repaint.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/squashing/selection-repaint-with-gaps.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/squashing/squash-above-fixed-1.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/squashing/squash-above-fixed-2.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/squashing/squash-above-fixed-3.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/squashing/squash-compositing-hover.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/squashing/squash-onto-distant-relative.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/squashing/squash-onto-nephew.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/squashing/squash-onto-transform-backing.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/squashing/squash-paint-invalidation-fixed-position.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/squashing/squash-partial-repaint-inside-squashed-layer.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/squashing/squash-same-transform-ancestor.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/squashing/squash-simple.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/squashing/squash-three-layers.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/squashing/squash-transform-repainting-child.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/squashing/squash-transform-repainting-transformed-child.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/squashing/squash-transform.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/squashing/squashed-layer-loses-graphicslayer.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/squashing/squashed-repaints.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/squashing/squashing-inside-perspective.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/squashing/squashing-inside-preserve-3d-element.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/squashing/squashing-sparsity-heuristic.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/squashing/tricky-element-removal-crash.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/tiled-layers-hidpi.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/update-paint-phases.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/video/video-poster.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/visibility/layer-visible-content.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/visibility/visibility-image-layers-dynamic.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/will-change/composited-layers.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/will-change/containing-block-added.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/will-change/containing-block-removed.html [ NeedsRebaseline ]
-crbug.com/617799 compositing/will-change/will-change-contents-suppresses-compositing.html [ NeedsRebaseline ]
-crbug.com/617799 css3/blending/mix-blend-mode-2nd-stacking-context-composited.html [ NeedsRebaseline ]
-crbug.com/617799 css3/blending/mix-blend-mode-composited-layers.html [ NeedsRebaseline ]
-crbug.com/617799 css3/blending/mix-blend-mode-composited-reason-children.html [ NeedsRebaseline ]
-crbug.com/617799 css3/blending/mix-blend-mode-isolation-2-stacking-contexts.html [ NeedsRebaseline ]
-crbug.com/617799 css3/blending/mix-blend-mode-isolation-layer.html [ NeedsRebaseline ]
-crbug.com/617799 css3/blending/mix-blend-mode-isolation-remove.html [ NeedsRebaseline ]
-crbug.com/617799 css3/filters/composited-during-transition-layertree.html [ NeedsRebaseline ]
-crbug.com/617799 css3/filters/composited-layer-bounds-after-sw-blur-animation.html [ NeedsRebaseline ]
-crbug.com/617799 css3/filters/composited-layer-bounds-with-composited-blur.html [ NeedsRebaseline ]
-crbug.com/617799 css3/filters/composited-layer-child-bounds-after-composited-to-sw-shadow-change.html [ NeedsRebaseline ]
-crbug.com/617799 css3/filters/composited-layer-promotion-after-outset-overlap-change-using-composited-shadow.html [ NeedsRebaseline ]
-crbug.com/617799 css3/filters/composited-layer-promotion-after-outset-overlap-change-using-sw-shadow.html [ NeedsRebaseline ]
-crbug.com/617799 css3/filters/effect-reference-repaint-gaussianblur-xonly.html [ NeedsRebaseline ]
-crbug.com/617799 css3/filters/effect-reference-repaint-gaussianblur-yonly.html [ NeedsRebaseline ]
-crbug.com/617799 css3/filters/effect-reference-repaint-gaussianblur.html [ NeedsRebaseline ]
-crbug.com/617799 css3/filters/effect-reference-repaint-merge.html [ NeedsRebaseline ]
-crbug.com/617799 css3/filters/effect-reference-repaint-morphology-xonly.html [ NeedsRebaseline ]
-crbug.com/617799 css3/filters/effect-reference-repaint-morphology-yonly.html [ NeedsRebaseline ]
-crbug.com/617799 css3/filters/effect-reference-repaint-morphology.html [ NeedsRebaseline ]
-crbug.com/617799 css3/filters/effect-reference-repaint-offset.html [ NeedsRebaseline ]
-crbug.com/617799 css3/filters/filtered-compositing-descendant.html [ NeedsRebaseline ]
-crbug.com/617799 css3/filters/should-not-have-compositing-layer.html [ NeedsRebaseline ]
-crbug.com/617799 css3/flexbox/repaint-column-reverse.html [ NeedsRebaseline ]
-crbug.com/617799 css3/flexbox/repaint-during-resize-no-flex.html [ NeedsRebaseline ]
-crbug.com/617799 css3/flexbox/repaint-on-margin-change.html [ NeedsRebaseline ]
-crbug.com/617799 css3/flexbox/repaint-opacity-change.html [ NeedsRebaseline ]
-crbug.com/617799 css3/flexbox/repaint-rtl-column.html [ NeedsRebaseline ]
-crbug.com/617799 editing/selection/repaint-rect-for-vertical-writing-mode-with-positioned-root.html [ NeedsRebaseline ]
-crbug.com/617799 fast/borders/overflow-hidden-border-radius-force-backing-store.html [ NeedsRebaseline ]
-crbug.com/617799 fast/box-shadow/negative-shadow-box-expand.html [ NeedsRebaseline ]
-crbug.com/617799 fast/box-shadow/negative-shadow-box-shrink.html [ NeedsRebaseline ]
-crbug.com/617799 fast/box-shadow/shadow-box-resize-writing-mode.html [ NeedsRebaseline ]
-crbug.com/617799 fast/box-shadow/shadow-box-resize.html [ NeedsRebaseline ]
-crbug.com/617799 fast/canvas/canvas-composite-repaint-by-all-imagesource.html [ NeedsRebaseline ]
-crbug.com/617799 fast/css-grid-layout/grid-element-change-columns-repaint.html [ NeedsRebaseline ]
-crbug.com/617799 fast/css-grid-layout/grid-element-change-rows-repaint.html [ NeedsRebaseline ]
-crbug.com/617799 fast/css-grid-layout/grid-item-change-column-repaint.html [ NeedsRebaseline ]
-crbug.com/617799 fast/css-grid-layout/grid-item-change-row-repaint.html [ NeedsRebaseline ]
-crbug.com/617799 fast/css-grid-layout/grid-item-z-index-change-repaint.html [ NeedsRebaseline ]
-crbug.com/617799 fast/forms/button/button-reset-focus-by-mouse-then-keydown.html [ NeedsRebaseline ]
-crbug.com/617799 fast/forms/checkbox/checkbox-focus-by-mouse-then-keydown.html [ NeedsRebaseline ]
-crbug.com/617799 fast/forms/radio/radio-focus-by-mouse-then-keydown.html [ NeedsRebaseline ]
-crbug.com/617799 fast/forms/range/range-focus-by-mouse-then-keydown.html [ NeedsRebaseline ]
-crbug.com/617799 fast/forms/submit/submit-focus-by-mouse-then-keydown.html [ NeedsRebaseline ]
-crbug.com/617799 fast/images/do-not-paint-below-image-baseline.html [ NeedsRebaseline ]
-crbug.com/617799 fast/images/fixed-img-src-change-after-scroll.html [ NeedsRebaseline ]
-crbug.com/617799 fast/images/repaint-subrect-grid.html [ NeedsRebaseline ]
-crbug.com/617799 fast/layers/scroll-descendant-with-cached-cliprects.html [ NeedsRebaseline ]
-crbug.com/617799 fast/multicol/composited-layer.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/4776765.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/absolute-display-block-to-none.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/absolute-margin-change-repaint.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/absolute-position-change-containing-block.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/absolute-position-changed.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/absolute-position-moved.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/abspos-shift-image-incorrect-repaint.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/add-table-overpaint.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/align-content-change-keeping-geometry.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/align-content-change-no-flex.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/align-content-change.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/align-content-distribution-change-grid.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/align-content-position-change-grid.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/align-self-change-grid.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/align-self-change-keeping-geometry.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/align-self-change-no-flex.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/align-self-change.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/align-self-overflow-change.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/background-currentColor-repaint.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/background-generated.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/background-image-paint-invalidation.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/background-misaligned.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/background-resize-height.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/background-shorthand-with-gradient-and-height-changes.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/background-size-auto-with-gradient-and-height-changes.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/backgroundSizeRepaint.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/block-layout-inline-children-float-positioned.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/block-shift-repaint.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/body-background-image.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/border-image-outset-add-repaint.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/border-image-outset-change-repaint.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/border-outline-0.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/border-radius-repaint-2.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/border-radius-repaint.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/border-radius-with-outline.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/border-radius-without-border.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/border-repaint-glitch.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/box-shadow-add-repaint.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/box-shadow-change-repaint.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/box-shadow-dynamic.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/box-shadow-inset-repaint.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/box-sizing-border-keeping-size.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/box-sizing-padding-keeping-size.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/box-sizing.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/bugzilla-6388.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/bugzilla-6473.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/button-checkbox-click-method-repaint.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/button-inner-no-repaint.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/button-spurious-layout-hint.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/canvas-putImageData.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/canvas-resize-no-full-invalidation.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/canvas-resize.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/caret-invalidation-in-overflow-scroll.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/caret-outside-block.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/caret-with-transformation.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/change-transform.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/child-of-sub-pixel-offset-composited-layer.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/clip-path-constant-repaint.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/clip-unclip-and-change.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/clipped-overflow-visible-subtree.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/composited-iframe-scroll-repaint.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/containing-block-position-change.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/content-into-overflow.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/crbug-371640-2.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/crbug-371640-3.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/create-layer-repaint.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/destroy-composited-scrollbar.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/destroy-overlay-scrollbar.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/destroy-scrollbar.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/details-open-repaint.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/dont-invalidate-root-layer-when-composited-layer-becomes-visible.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/dynamic-table-vertical-alignment-change.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/erase-overflow.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/filter-invalidation-after-display.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/filter-invalidation-positioned-child.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/filter-invalidation-with-composited-container-change.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/filter-repaint-accelerated-child-with-filter-child.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/filter-repaint-accelerated-on-accelerated-filter.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/filter-repaint-on-accelerated-layer.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/fixed-after-scroll.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/fixed-and-absolute-position-scrolled.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/fixed-child-move-after-scroll.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/fixed-child-of-fixed-move-after-scroll.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/fixed-child-of-transformed-move-after-scroll.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/fixed-child-of-transformed-scrolled.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/fixed-descendant-of-transformed-scrolled.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/fixed-element-repaint-after-compositing-update.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/fixed-margin-change-repaint.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/fixed-move-after-scroll.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/fixed-position-transparency-with-overflow.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/fixed-scale.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/fixed-scroll-simple.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/fixed-table-cell.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/fixed-table-overflow-zindex.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/fixed-table-overflow.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/fixed-to-relative-position-with-absolute-child.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/fixed-tranformed.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/fixed-under-composited-absolute-scrolled.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/fixed-under-composited-fixed-scrolled.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/fixed.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/float-in-new-block-with-layout-delta.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/float-move-during-layout.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/float-new-in-block.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/float-overflow-right.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/float-overflow.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/focus-continuations.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/focus-enable-continuations.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/focus-ring-on-child-move.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/focus-ring-on-continuation-move.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/full-viewport-repaint-for-background-attachment-fixed.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/hover-pseudo-borders-whitespace.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/hover-pseudo-borders.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/iframe-scroll-repaint.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/image-resize.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/in-scaled-iframe.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/inline-color-change.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/inline-outline-repaint-2.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/inline-overflow.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/inline-style-change-in-scrolled-view.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/inline-vertical-lr-overflow.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/inline-vertical-rl-overflow.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/intermediate-layout-position-clip.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/intermediate-layout-position.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/invalidate-invisible-element.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/invalidate-paint-for-fixed-pos-inside-iframe.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/invalidate-paint-in-iframe-in-composited-layer.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/invalidation-after-opacity-change-subtree.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/invalidation-with-zero-size-object.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/japanese-rl-selection-clear.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/japanese-rl-selection-repaint.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/justify-content-change.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/justify-content-distribution-change-grid.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/justify-content-position-change-grid.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/justify-content-position-change.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/justify-items-change.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/justify-items-legacy-change.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/justify-items-overflow-change.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/justify-self-change.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/justify-self-overflow-change.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/layer-full-repaint.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/layer-hide-when-needs-layout.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/layer-visibility.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/layout-state-only-positioned.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/margin.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/mix-blend-mode-separate-stacking-context.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/multicol-as-paint-container.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/multicol-relpos-with-abspos.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/multicol-with-abspos-in-relpos.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/multicol-with-abspos.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/multicol-with-block.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/multicol-with-inline.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/multicol-with-overflowing-block-rl.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/multicol-with-relpos.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/multiple-backgrounds-style-change.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/negative-text-indent-with-overflow-hidden.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/nested-fixed-iframe-scrolled.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/no-caret-repaint-in-non-content-editable-element.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/offset-change-wrong-invalidation-with-float.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/opacity-change-on-overflow-float.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/outline-add-repaint.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/outline-change-continuations.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/outline-change-invalidation.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/outline-change-offset.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/outline-change-repaint.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/outline-child-repaint.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/outline-clip-change.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/outline-inset.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/outline-repaint-glitch.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/outline-shrinking.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/overflow-auto-in-overflow-auto-scrolled.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/overflow-clip-subtree-layout.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/overflow-flipped-writing-mode-block.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/overflow-flipped-writing-mode-table.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/overflow-hidden-in-overflow-hidden-scrolled.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/overflow-hide.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/overflow-into-content.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/overflow-move-after-scroll.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/overflow-scroll-after-move.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/overflow-scroll-in-overflow-scroll-scrolled.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/overflow-show.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/overhanging-float-detach-repaint.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/padding-border-keeping-border-box-and-content-box.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/padding-keeping-content-size.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/padding-keeping-visual-size.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/paged-with-overflowing-block-rl.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/paint-caret-in-div-with-negative-indent.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/paint-invalidation-with-opacity.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/percent-size-image-resize-container.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/position-change-keeping-geometry.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/positioned-great-grandparent-change-location.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/push-block-with-first-line.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/reflection-invalidation-after-display.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/reflection-invalidation-positioned-child.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/reflection-redraw.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/rel-positioned-inline-with-overflow.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/relative-margin-change-repaint.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/relative-positioned-movement-repaint.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/repaint-across-writing-mode-boundary.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/repaint-composited-child-in-scrolled-container.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/repaint-descandant-on-ancestor-layer-move.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/repaint-during-scroll-with-zoom.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/repaint-in-iframe.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/repaint-on-style-change.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/repaint-resized-overflow.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/repaint-table-row-in-composited-document.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/replaced-clipped-positioned-not-wrong-incremental-repainting.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/requestAnimation-translation-leave-traces.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/resize-child-within-overflow.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/resize-scrollable-div.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/resize-skewed.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/resize-with-border-clipped.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/resize-with-border.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/scroll-absolute-layer-with-reflection.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/scroll-fixed-layer-with-no-visible-content.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/scroll-fixed-layer-with-reflection.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/scroll-fixed-layer-with-transformed-parent-layer.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/scroll-fixed-reflected-layer.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/scroll-in-clipped-layer.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/scroll-in-fixed-layer.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/scroll-in-transformed-layer.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/scroll-inside-table-cell.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/scroll-relative-table-inside-table-cell.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/scroll-stacking-context-backface-visiblity-leaves-traces.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/scroll-with-transformed-parent-layer.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/scrollbar-damage-and-full-viewport-repaint.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/scrollbar-invalidation-on-resize-with-border.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/scrollbar-invalidation-on-resize.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/scrollbar-parts.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/scrolled-iframe-scrollbar-change.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/search-field-cancel.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/select-option-background-color.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/selection-change-in-iframe-with-relative-parent.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/selection-clear-after-move.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/selection-partial-invalidation-between-blocks.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/selection-rl.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/set-text-content-same.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/shift-relative-positioned-container-with-image-addition.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/stacking-context-lost.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/static-to-positioned.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/subtree-layoutstate-transform.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/subtree-root-clip-2.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/subtree-root-clip-3.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/subtree-root-clip.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/table-cell-collapsed-border.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/table-cell-move.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/table-cell-overflow.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/table-col-background-offset.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/table-col-background.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/table-extra-bottom-grow.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/table-outer-border.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/table-overflow-auto-in-overflow-auto-scrolled.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/table-overflow-scroll-in-overflow-scroll-scrolled.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/table-row-bg-change.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/table-row.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/table-section-overflow.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/table-section-repaint.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/table-shrink-row-repaint.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/table-two-pass-layout-overpaint.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/table-with-padding-row-invalidation.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/text-selection-rect-in-overflow-2.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/text-selection-rect-in-overflow.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/textarea-appearance-none-resize-handle.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/textarea-resize-property-change.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/textarea-set-disabled.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/trailing-floats-root-line-box-overflow.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/transform-absolute-child.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/transform-absolute-in-positioned-container.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/transform-disable-layoutstate.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/transform-inline-layered-child.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/transform-relative-position.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/transform-repaint-descendants.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/transform-replaced-shadows.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/transform-rotate-and-remove.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/transform-translate.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/vertical-overflow-child.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/vertical-overflow-parent.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/vertical-overflow-same.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/vertical-rl-as-paint-container.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/video-mute-repaint.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/video-unmute-repaint.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/view-background-from-body-2.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/window-resize-background-image-fixed-centered-composited.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/window-resize-background-image-fixed-centered.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/window-resize-background-image-generated.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/window-resize-media-query.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/window-resize-no-layout-change1.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/window-resize-no-layout-change2.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/window-resize-percent-html.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/window-resize-percent-width-height.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/window-resize-positioned-bottom.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/window-resize-positioned-percent-top.html [ NeedsRebaseline ]
-crbug.com/617799 fast/repaint/window-resize-viewport-percent.html [ NeedsRebaseline ]
-crbug.com/617799 fast/sub-pixel/repaint-subpixel-layer-in-subpixel-composited-layer.html [ NeedsRebaseline ]
-crbug.com/617799 fast/sub-pixel/should-not-repaint-subpixel-composited-layer.html [ NeedsRebaseline ]
-crbug.com/617799 fast/table/border-collapsing/border-collapse-change-collapse-to-separate.html [ NeedsRebaseline ]
-crbug.com/617799 fast/table/border-collapsing/border-collapse-change-separate-to-collapse.html [ NeedsRebaseline ]
-crbug.com/617799 fast/table/border-collapsing/cached-change-cell-border-color.html [ NeedsRebaseline ]
-crbug.com/617799 fast/table/border-collapsing/cached-change-col-border-color.html [ NeedsRebaseline ]
-crbug.com/617799 fast/table/border-collapsing/cached-change-colgroup-border-color.html [ NeedsRebaseline ]
-crbug.com/617799 fast/table/border-collapsing/cached-change-row-border-width.html [ NeedsRebaseline ]
-crbug.com/617799 fast/table/border-collapsing/cached-change-table-border-color.html [ NeedsRebaseline ]
-crbug.com/617799 media/media-audio-no-spurious-repaints.html [ NeedsRebaseline ]
-crbug.com/617799 paint/invalidation/animated-gif-offscreen.html [ NeedsRebaseline ]
-crbug.com/617799 paint/invalidation/animated-gif-transformed-offscreen.html [ NeedsRebaseline ]
-crbug.com/617799 paint/invalidation/caret-with-composited-scroll.html [ NeedsRebaseline ]
-crbug.com/617799 paint/invalidation/iframe-rounding.html [ NeedsRebaseline ]
-crbug.com/617799 paint/invalidation/invalidate-after-composited-scroll.html [ NeedsRebaseline ]
-crbug.com/617799 paint/invalidation/invalidate-box-shadow-currentColor.html [ NeedsRebaseline ]
-crbug.com/617799 paint/invalidation/invalidate-descendants-when-receiving-paint-layer.html [ NeedsRebaseline ]
-crbug.com/617799 paint/invalidation/invalidation-on-foreground-graphics-layer.html [ NeedsRebaseline ]
-crbug.com/617799 paint/invalidation/non-text-link-invalidation-optimization.html [ NeedsRebaseline ]
-crbug.com/617799 paint/selection/invalidation-rect-includes-newline-for-rtl.html [ NeedsRebaseline ]
-crbug.com/617799 paint/selection/invalidation-rect-includes-newline-for-vertical-lr.html [ NeedsRebaseline ]
-crbug.com/617799 paint/selection/invalidation-rect-includes-newline-for-vertical-rl.html [ NeedsRebaseline ]
-crbug.com/617799 paint/selection/invalidation-rect-includes-newline.html [ NeedsRebaseline ]
-crbug.com/617799 paint/selection/invalidation-rect-with-br-includes-newline.html [ NeedsRebaseline ]
-crbug.com/617799 paint/selection/selection-within-composited-scroller.html [ NeedsRebaseline ]
-crbug.com/617799 svg/as-background-image/svg-background-partial-redraw.html [ NeedsRebaseline ]
-crbug.com/617799 svg/as-object/deep-nested-embedded-svg-size-changes-no-layout-triggers-1.html [ NeedsRebaseline ]
-crbug.com/617799 svg/as-object/deep-nested-embedded-svg-size-changes-no-layout-triggers-2.html [ NeedsRebaseline ]
-crbug.com/617799 svg/carto.net/window.svg [ NeedsRebaseline ]
-crbug.com/617799 svg/custom/animate-target-id-changed.svg [ NeedsRebaseline ]
-crbug.com/617799 svg/custom/circle-move-invalidation.svg [ NeedsRebaseline ]
-crbug.com/617799 svg/custom/clip-path-child-changes.svg [ NeedsRebaseline ]
-crbug.com/617799 svg/custom/clip-path-href-changes.svg [ NeedsRebaseline ]
-crbug.com/617799 svg/custom/clip-path-id-changes.svg [ NeedsRebaseline ]
-crbug.com/617799 svg/custom/clip-path-units-changes.svg [ NeedsRebaseline ]
-crbug.com/617799 svg/custom/deep-dynamic-updates.svg [ NeedsRebaseline ]
-crbug.com/617799 svg/custom/fill-opacity-update.svg [ NeedsRebaseline ]
-crbug.com/617799 svg/custom/foreignObject-crash-on-hover.xml [ NeedsRebaseline ]
-crbug.com/617799 svg/custom/gradient-add-stops.svg [ NeedsRebaseline ]
-crbug.com/617799 svg/custom/gradient-stop-style-change.svg [ NeedsRebaseline ]
-crbug.com/617799 svg/custom/js-late-gradient-and-object-creation.svg [ NeedsRebaseline ]
-crbug.com/617799 svg/custom/js-late-marker-and-object-creation.svg [ NeedsRebaseline ]
-crbug.com/617799 svg/custom/js-late-marker-creation.svg [ NeedsRebaseline ]
-crbug.com/617799 svg/custom/js-late-mask-and-object-creation.svg [ NeedsRebaseline ]
-crbug.com/617799 svg/custom/js-late-mask-creation.svg [ NeedsRebaseline ]
-crbug.com/617799 svg/custom/js-late-pattern-and-object-creation.svg [ NeedsRebaseline ]
-crbug.com/617799 svg/custom/js-repaint-rect-on-path-with-stroke.svg [ NeedsRebaseline ]
-crbug.com/617799 svg/custom/js-update-bounce.svg [ NeedsRebaseline ]
-crbug.com/617799 svg/custom/js-update-container.svg [ NeedsRebaseline ]
-crbug.com/617799 svg/custom/js-update-gradient.svg [ NeedsRebaseline ]
-crbug.com/617799 svg/custom/js-update-image.svg [ NeedsRebaseline ]
-crbug.com/617799 svg/custom/js-update-pattern-child.svg [ NeedsRebaseline ]
-crbug.com/617799 svg/custom/js-update-pattern.svg [ NeedsRebaseline ]
-crbug.com/617799 svg/custom/js-update-polygon-changes.svg [ NeedsRebaseline ]
-crbug.com/617799 svg/custom/js-update-polygon-removal.svg [ NeedsRebaseline ]
-crbug.com/617799 svg/custom/js-update-stop-linked-gradient.svg [ NeedsRebaseline ]
-crbug.com/617799 svg/custom/js-update-stop.svg [ NeedsRebaseline ]
-crbug.com/617799 svg/custom/js-update-style.svg [ NeedsRebaseline ]
-crbug.com/617799 svg/custom/js-update-transform-addition.svg [ NeedsRebaseline ]
-crbug.com/617799 svg/custom/js-update-transform-changes.svg [ NeedsRebaseline ]
-crbug.com/617799 svg/custom/marker-child-changes-css.svg [ NeedsRebaseline ]
-crbug.com/617799 svg/custom/marker-child-changes.svg [ NeedsRebaseline ]
-crbug.com/617799 svg/custom/marker-strokeWidth-changes.svg [ NeedsRebaseline ]
-crbug.com/617799 svg/custom/mask-child-changes.svg [ NeedsRebaseline ]
-crbug.com/617799 svg/custom/mask-invalidation.svg [ NeedsRebaseline ]
-crbug.com/617799 svg/custom/pending-resource-after-removal.xhtml [ NeedsRebaseline ]
-crbug.com/617799 svg/custom/repaint-moving-svg-and-div.xhtml [ NeedsRebaseline ]
-crbug.com/617799 svg/custom/repaint-on-image-bounds-change.svg [ NeedsRebaseline ]
-crbug.com/617799 svg/custom/repaint-stroke-width-changes.svg [ NeedsRebaseline ]
-crbug.com/617799 svg/custom/resource-client-removal.svg [ NeedsRebaseline ]
-crbug.com/617799 svg/custom/stroke-opacity-update.svg [ NeedsRebaseline ]
-crbug.com/617799 svg/custom/svg-absolute-children.svg [ NeedsRebaseline ]
-crbug.com/617799 svg/custom/svg-image-par-resize.html [ NeedsRebaseline ]
-crbug.com/617799 svg/custom/use-disappears-after-style-update.svg [ NeedsRebaseline ]
-crbug.com/617799 svg/custom/use-inherit-style.svg [ NeedsRebaseline ]
-crbug.com/617799 svg/dom/SVGRectElement/rect-modify-rx.svg [ NeedsRebaseline ]
-crbug.com/617799 svg/filters/animate-fill.svg [ NeedsRebaseline ]
-crbug.com/617799 svg/filters/feImage-change-target-id.svg [ NeedsRebaseline ]
-crbug.com/617799 svg/filters/feImage-multiple-targets-id-change.svg [ NeedsRebaseline ]
-crbug.com/617799 svg/filters/feImage-reference-invalidation.svg [ NeedsRebaseline ]
-crbug.com/617799 svg/filters/feImage-remove-target.svg [ NeedsRebaseline ]
-crbug.com/617799 svg/filters/feImage-target-add-to-document.svg [ NeedsRebaseline ]
-crbug.com/617799 svg/filters/feImage-target-attribute-change-with-use-indirection-2.svg [ NeedsRebaseline ]
-crbug.com/617799 svg/filters/feImage-target-attribute-change-with-use-indirection.svg [ NeedsRebaseline ]
-crbug.com/617799 svg/filters/feImage-target-attribute-change.svg [ NeedsRebaseline ]
-crbug.com/617799 svg/filters/feImage-target-changes-id.svg [ NeedsRebaseline ]
-crbug.com/617799 svg/filters/feImage-target-id-change.svg [ NeedsRebaseline ]
-crbug.com/617799 svg/filters/feImage-target-inline-style-change.svg [ NeedsRebaseline ]
-crbug.com/617799 svg/filters/feImage-target-property-change.svg [ NeedsRebaseline ]
-crbug.com/617799 svg/filters/feImage-target-reappend-to-document.svg [ NeedsRebaseline ]
-crbug.com/617799 svg/filters/feImage-target-remove-from-document.svg [ NeedsRebaseline ]
-crbug.com/617799 svg/filters/feImage-target-style-change.svg [ NeedsRebaseline ]
-crbug.com/617799 svg/filters/filter-refresh.svg [ NeedsRebaseline ]
-crbug.com/617799 svg/filters/filter-width-update.svg [ NeedsRebaseline ]
-crbug.com/617799 svg/filters/invalidate-on-child-layout.svg [ NeedsRebaseline ]
-crbug.com/617799 svg/repaint/add-background-property-on-root.html [ NeedsRebaseline ]
-crbug.com/617799 svg/repaint/add-border-property-on-root.html [ NeedsRebaseline ]
-crbug.com/617799 svg/repaint/change-background-color.html [ NeedsRebaseline ]
-crbug.com/617799 svg/repaint/color-fill-currentColor-and-css.html [ NeedsRebaseline ]
-crbug.com/617799 svg/repaint/container-repaint.svg [ NeedsRebaseline ]
-crbug.com/617799 svg/repaint/fecomponenttransfer-in1-change.svg [ NeedsRebaseline ]
-crbug.com/617799 svg/repaint/filter-child-repaint.svg [ NeedsRebaseline ]
-crbug.com/617799 svg/repaint/focus-element.html [ NeedsRebaseline ]
-crbug.com/617799 svg/repaint/foreign-object-repaint.svg [ NeedsRebaseline ]
-crbug.com/617799 svg/repaint/image-animation-with-zoom.html [ NeedsRebaseline ]
-crbug.com/617799 svg/repaint/image-href-change.svg [ NeedsRebaseline ]
-crbug.com/617799 svg/repaint/image-with-clip-path.svg [ NeedsRebaseline ]
-crbug.com/617799 svg/repaint/inner-svg-change-viewBox.svg [ NeedsRebaseline ]
-crbug.com/617799 svg/repaint/modify-inserted-listitem.html [ NeedsRebaseline ]
-crbug.com/617799 svg/repaint/modify-transferred-listitem.html [ NeedsRebaseline ]
-crbug.com/617799 svg/repaint/outline-offset-shape.html [ NeedsRebaseline ]
-crbug.com/617799 svg/repaint/paintorder-filtered.svg [ NeedsRebaseline ]
-crbug.com/617799 svg/repaint/path-pathlength-change.html [ NeedsRebaseline ]
-crbug.com/617799 svg/repaint/remove-background-property-on-root.html [ NeedsRebaseline ]
-crbug.com/617799 svg/repaint/remove-border-property-on-root.html [ NeedsRebaseline ]
-crbug.com/617799 svg/repaint/repaint-in-scrolled-view.html [ NeedsRebaseline ]
-crbug.com/617799 svg/repaint/repaint-paintorder.svg [ NeedsRebaseline ]
-crbug.com/617799 svg/repaint/shape-transform-change.html [ NeedsRebaseline ]
-crbug.com/617799 svg/repaint/shape-with-nested-outline.html [ NeedsRebaseline ]
-crbug.com/617799 svg/repaint/svgsvgelement-repaint-children.html [ NeedsRebaseline ]
-crbug.com/617799 svg/repaint/text-pattern-update-2.html [ NeedsRebaseline ]
-crbug.com/617799 svg/repaint/text-pattern-update.html [ NeedsRebaseline ]
-crbug.com/617799 svg/repaint/transform-changed-state.html [ NeedsRebaseline ]
-crbug.com/617799 svg/repaint/transform-foreign-object.html [ NeedsRebaseline ]
-crbug.com/617799 svg/repaint/tspan-pattern-update.html [ NeedsRebaseline ]
-crbug.com/617799 svg/text/ems-display-none.svg [ NeedsRebaseline ]
-crbug.com/617799 svg/text/exs-display-none.svg [ NeedsRebaseline ]
-crbug.com/617799 svg/text/text-selection-text-05-t.svg [ NeedsRebaseline ]
-crbug.com/617799 svg/zoom/page/absolute-sized-document-no-scrollbars.svg [ NeedsRebaseline ]
-crbug.com/617799 svg/zoom/page/relative-sized-document-scrollbars.svg [ NeedsRebaseline ]
-crbug.com/617799 transforms/transform-focus-ring-repaint.html [ NeedsRebaseline ]
-crbug.com/617799 virtual/display_list_2d_canvas/fast/canvas/canvas-composite-repaint-by-all-imagesource.html [ NeedsRebaseline ]
-crbug.com/617799 virtual/gpu-rasterization/fast/images/do-not-paint-below-image-baseline.html [ NeedsRebaseline ]
-crbug.com/617799 virtual/gpu-rasterization/fast/images/fixed-img-src-change-after-scroll.html [ NeedsRebaseline ]
-crbug.com/617799 virtual/gpu-rasterization/fast/images/repaint-subrect-grid.html [ NeedsRebaseline ]
-crbug.com/617799 virtual/gpu/fast/canvas/canvas-composite-repaint-by-all-imagesource.html [ NeedsRebaseline ]
-crbug.com/617799 virtual/prefer_compositing_to_lcd_text/compositing/overflow/accelerated-overflow-scroll-should-not-affect-perspective.html [ NeedsRebaseline ]
-crbug.com/617799 virtual/prefer_compositing_to_lcd_text/compositing/overflow/clip-descendents.html [ NeedsRebaseline ]
-crbug.com/617799 virtual/prefer_compositing_to_lcd_text/compositing/overflow/composited-scrolling-paint-phases.html [ NeedsRebaseline ]
-crbug.com/617799 virtual/prefer_compositing_to_lcd_text/compositing/overflow/content-gains-scrollbars.html [ NeedsRebaseline ]
-crbug.com/617799 virtual/prefer_compositing_to_lcd_text/compositing/overflow/content-loses-scrollbars.html [ NeedsRebaseline ]
-crbug.com/617799 virtual/prefer_compositing_to_lcd_text/compositing/overflow/fixed-scroll-in-empty-root-layer.html [ NeedsRebaseline ]
-crbug.com/617799 virtual/prefer_compositing_to_lcd_text/compositing/overflow/overflow-auto-with-touch-no-overflow.html [ NeedsRebaseline ]
-crbug.com/617799 virtual/prefer_compositing_to_lcd_text/compositing/overflow/overflow-auto-with-touch-toggle.html [ NeedsRebaseline ]
-crbug.com/617799 virtual/prefer_compositing_to_lcd_text/compositing/overflow/overflow-auto-with-touch.html [ NeedsRebaseline ]
-crbug.com/617799 virtual/prefer_compositing_to_lcd_text/compositing/overflow/overflow-hidden-with-touch.html [ NeedsRebaseline ]
-crbug.com/617799 virtual/prefer_compositing_to_lcd_text/compositing/overflow/overflow-overlay-with-touch-no-overflow.html [ NeedsRebaseline ]
-crbug.com/617799 virtual/prefer_compositing_to_lcd_text/compositing/overflow/overflow-overlay-with-touch.html [ NeedsRebaseline ]
-crbug.com/617799 virtual/prefer_compositing_to_lcd_text/compositing/overflow/overflow-scroll-with-touch-no-overflow.html [ NeedsRebaseline ]
-crbug.com/617799 virtual/prefer_compositing_to_lcd_text/compositing/overflow/overflow-scrollbar-layers.html [ NeedsRebaseline ]
-crbug.com/617799 virtual/prefer_compositing_to_lcd_text/compositing/overflow/overflow-visible-with-touch.html [ NeedsRebaseline ]
-crbug.com/617799 virtual/prefer_compositing_to_lcd_text/compositing/overflow/reparented-scrollbars-non-sc-anc.html [ NeedsRebaseline ]
-crbug.com/617799 virtual/prefer_compositing_to_lcd_text/compositing/overflow/resize-painting.html [ NeedsRebaseline ]
-crbug.com/617799 virtual/prefer_compositing_to_lcd_text/compositing/overflow/scroll-parent-absolute-with-backdrop-filter.html [ NeedsRebaseline ]
-crbug.com/617799 virtual/prefer_compositing_to_lcd_text/compositing/overflow/scroll-parent-absolute.html [ NeedsRebaseline ]
-crbug.com/617799 virtual/prefer_compositing_to_lcd_text/compositing/overflow/scroll-parent-with-non-stacking-context-composited-ancestor.html [ NeedsRebaseline ]
-crbug.com/617799 virtual/prefer_compositing_to_lcd_text/compositing/overflow/scrolling-content-clip-to-viewport.html [ NeedsRebaseline ]
-crbug.com/617799 virtual/prefer_compositing_to_lcd_text/compositing/overflow/scrolling-without-painting.html [ NeedsRebaseline ]
-crbug.com/617799 virtual/prefer_compositing_to_lcd_text/compositing/overflow/selection-gaps-after-removing-scrolling-contents.html [ NeedsRebaseline ]
-crbug.com/617799 virtual/prefer_compositing_to_lcd_text/compositing/overflow/selection-gaps-toggling-with-scrolling-contents.html [ NeedsRebaseline ]
-crbug.com/617799 virtual/prefer_compositing_to_lcd_text/compositing/overflow/selection-gaps-toggling.html [ NeedsRebaseline ]
-crbug.com/617799 virtual/prefer_compositing_to_lcd_text/compositing/overflow/text-color-change.html [ NeedsRebaseline ]
-crbug.com/617799 virtual/prefer_compositing_to_lcd_text/compositing/overflow/text-match-highlight.html [ NeedsRebaseline ]
-crbug.com/617799 virtual/prefer_compositing_to_lcd_text/compositing/overflow/textarea-scroll-touch.html [ NeedsRebaseline ]
-crbug.com/617799 virtual/prefer_compositing_to_lcd_text/compositing/overflow/universal-accelerated-overflow-scroll.html [ NeedsRebaseline ]
-crbug.com/617799 virtual/prefer_compositing_to_lcd_text/compositing/overflow/updating-scrolling-container.html [ NeedsRebaseline ]
-crbug.com/617799 virtual/prefer_compositing_to_lcd_text/compositing/overflow/updating-scrolling-content.html [ NeedsRebaseline ]
-crbug.com/617799 virtual/threaded/compositing/visibility/layer-visible-content.html [ NeedsRebaseline ]
-crbug.com/617799 virtual/threaded/compositing/visibility/visibility-image-layers-dynamic.html [ NeedsRebaseline ]
 crbug.com/617799 paint/invalidation/animated-gif.html [ NeedsManualRebaseline ]
 crbug.com/617799 paint/invalidation/animated-gif-background.html [ NeedsManualRebaseline ]
 crbug.com/617799 paint/invalidation/animated-gif-background-offscreen.html [ NeedsManualRebaseline ]
-crbug.com/617799 fast/repaint/obscured-background-no-repaint.html [ NeedsRebaseline ]
-crbug.com/617799 svg/custom/marker-viewBox-changes.svg [ NeedsRebaseline ]
-crbug.com/617799 svg/custom/resource-invalidate-on-target-update.svg [ NeedsRebaseline ]
-crbug.com/617799 svg/repaint/inner-svg-change-viewBox-contract.svg [ NeedsRebaseline ]
-crbug.com/617799 svg/repaint/mask-clip-target-transform.svg [ NeedsRebaseline ]
 crbug.com/617799 fast/repaint/window-resize-background-image-non-fixed.html [ NeedsManualRebaseline ]
 
 crbug.com/487344 compositing/video/video-controls-layer-creation.html [ Failure ]
diff --git a/third_party/WebKit/LayoutTests/VirtualTestSuites b/third_party/WebKit/LayoutTests/VirtualTestSuites
index 00c7176..b9933b8 100644
--- a/third_party/WebKit/LayoutTests/VirtualTestSuites
+++ b/third_party/WebKit/LayoutTests/VirtualTestSuites
@@ -262,5 +262,10 @@
     "prefix": "documentwriteevaluator",
     "base": "http/tests/preload/document-write",
     "args": ["--enable-blink-features=DocumentWriteEvaluator"]
+  },
+  {
+    "prefix": "asyncawait",
+    "base": "inspector/sources/debugger-async/async-await",
+    "args": ["--js-flags=--harmony-async-await"]
   }
 ]
diff --git a/third_party/WebKit/LayoutTests/compositing/absolute-inside-out-of-view-fixed-expected.txt b/third_party/WebKit/LayoutTests/compositing/absolute-inside-out-of-view-fixed-expected.txt
index ec3f630..0584e86 100644
--- a/third_party/WebKit/LayoutTests/compositing/absolute-inside-out-of-view-fixed-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/absolute-inside-out-of-view-fixed-expected.txt
@@ -1,12 +1,15 @@
 {
+  "name": "Content Root Layer",
   "bounds": [785, 2513],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [785, 2513],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow (positioned) DIV class='fixed'",
           "position": [0, 200],
           "bounds": [100, 100],
           "contentsOpaque": true,
diff --git a/third_party/WebKit/LayoutTests/compositing/clip-child-by-non-stacking-ancestor-expected.txt b/third_party/WebKit/LayoutTests/compositing/clip-child-by-non-stacking-ancestor-expected.txt
index 3d1dda3..0e5eb3c 100644
--- a/third_party/WebKit/LayoutTests/compositing/clip-child-by-non-stacking-ancestor-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/clip-child-by-non-stacking-ancestor-expected.txt
@@ -1,12 +1,15 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow DIV class='container'",
           "position": [8, 8],
           "bounds": [100, 100],
           "contentsOpaque": true,
diff --git a/third_party/WebKit/LayoutTests/compositing/columns/composited-in-paginated-expected.txt b/third_party/WebKit/LayoutTests/compositing/columns/composited-in-paginated-expected.txt
index e082c71..27f1754a 100644
--- a/third_party/WebKit/LayoutTests/compositing/columns/composited-in-paginated-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/columns/composited-in-paginated-expected.txt
@@ -1,12 +1,15 @@
 {
+  "name": "Content Root Layer",
   "bounds": [1600, 585],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [1600, 585],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow DIV class='composited box'",
           "position": [818, 145],
           "bounds": [100, 100],
           "contentsOpaque": true,
diff --git a/third_party/WebKit/LayoutTests/compositing/contents-opaque/background-clip-expected.txt b/third_party/WebKit/LayoutTests/compositing/contents-opaque/background-clip-expected.txt
index 2eff0f5e..1f49edc 100644
--- a/third_party/WebKit/LayoutTests/compositing/contents-opaque/background-clip-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/contents-opaque/background-clip-expected.txt
@@ -1,12 +1,15 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow DIV class='box composited'",
           "position": [13, 8],
           "bounds": [100, 100],
           "contentsOpaque": true,
@@ -14,12 +17,14 @@
           "backgroundColor": "#008000"
         },
         {
+          "name": "LayoutBlockFlow DIV class='box composited padding-clip'",
           "position": [13, 113],
           "bounds": [100, 100],
           "drawsContent": true,
           "backgroundColor": "#008000"
         },
         {
+          "name": "LayoutBlockFlow DIV class='box composited content-clip'",
           "position": [13, 218],
           "bounds": [100, 100],
           "drawsContent": true,
diff --git a/third_party/WebKit/LayoutTests/compositing/contents-opaque/background-color-expected.txt b/third_party/WebKit/LayoutTests/compositing/contents-opaque/background-color-expected.txt
index eee3abf9..79dc336 100644
--- a/third_party/WebKit/LayoutTests/compositing/contents-opaque/background-color-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/contents-opaque/background-color-expected.txt
@@ -1,22 +1,27 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow DIV class='box composited'",
           "position": [8, 8],
           "bounds": [100, 100]
         },
         {
+          "name": "LayoutBlockFlow DIV class='box translucent composited'",
           "position": [8, 108],
           "bounds": [100, 100],
           "drawsContent": true,
           "backgroundColor": "#00FF007F"
         },
         {
+          "name": "LayoutBlockFlow DIV class='box opaque composited'",
           "position": [8, 208],
           "bounds": [100, 100],
           "contentsOpaque": true,
diff --git a/third_party/WebKit/LayoutTests/compositing/contents-opaque/body-background-painted-expected.txt b/third_party/WebKit/LayoutTests/compositing/contents-opaque/body-background-painted-expected.txt
index 48a7456..1c52fb1 100644
--- a/third_party/WebKit/LayoutTests/compositing/contents-opaque/body-background-painted-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/contents-opaque/body-background-painted-expected.txt
@@ -1,18 +1,22 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "backgroundColor": "#D3D3D3",
       "children": [
         {
+          "name": "LayoutBlockFlow HTML",
           "bounds": [800, 600],
           "drawsContent": true,
           "backgroundColor": "#D3D3D3",
           "children": [
             {
+              "name": "LayoutBlockFlow (positioned) DIV id='underbody'",
               "position": [8, 8],
               "bounds": [200, 200],
               "contentsOpaque": true,
@@ -20,6 +24,7 @@
               "backgroundColor": "#008000"
             },
             {
+              "name": "LayoutBlockFlow HTML (foreground) Layer",
               "bounds": [800, 600],
               "drawsContent": true
             }
diff --git a/third_party/WebKit/LayoutTests/compositing/contents-opaque/body-background-skipped-expected.txt b/third_party/WebKit/LayoutTests/compositing/contents-opaque/body-background-skipped-expected.txt
index fe4acd9..ba8290f54 100644
--- a/third_party/WebKit/LayoutTests/compositing/contents-opaque/body-background-skipped-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/contents-opaque/body-background-skipped-expected.txt
@@ -1,17 +1,21 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "backgroundColor": "#0000FF",
       "children": [
         {
+          "name": "LayoutBlockFlow HTML",
           "bounds": [800, 600],
           "drawsContent": true,
           "children": [
             {
+              "name": "LayoutBlockFlow (positioned) DIV id='underbody'",
               "position": [8, 8],
               "bounds": [200, 200],
               "contentsOpaque": true,
@@ -19,6 +23,7 @@
               "backgroundColor": "#008000"
             },
             {
+              "name": "LayoutBlockFlow HTML (foreground) Layer",
               "bounds": [800, 600],
               "drawsContent": true
             }
diff --git a/third_party/WebKit/LayoutTests/compositing/contents-opaque/filter-expected.txt b/third_party/WebKit/LayoutTests/compositing/contents-opaque/filter-expected.txt
index 4e1017b..ee141c0 100644
--- a/third_party/WebKit/LayoutTests/compositing/contents-opaque/filter-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/contents-opaque/filter-expected.txt
@@ -1,17 +1,21 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow DIV class='composited container-box'",
           "position": [10, 10],
           "bounds": [100, 100],
           "drawsContent": true
         },
         {
+          "name": "LayoutBlockFlow DIV class='composited container-box'",
           "position": [10, 120],
           "bounds": [100, 100],
           "drawsContent": true
diff --git a/third_party/WebKit/LayoutTests/compositing/contents-opaque/hidden-with-visible-child-expected.txt b/third_party/WebKit/LayoutTests/compositing/contents-opaque/hidden-with-visible-child-expected.txt
index 52e87ab..30a42a3 100644
--- a/third_party/WebKit/LayoutTests/compositing/contents-opaque/hidden-with-visible-child-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/contents-opaque/hidden-with-visible-child-expected.txt
@@ -1,12 +1,15 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow (positioned) DIV id='caption'",
           "position": [8, 13],
           "bounds": [200, 100],
           "drawsContent": true,
diff --git a/third_party/WebKit/LayoutTests/compositing/contents-opaque/hidden-with-visible-text-expected.txt b/third_party/WebKit/LayoutTests/compositing/contents-opaque/hidden-with-visible-text-expected.txt
index 52e87ab..30a42a3 100644
--- a/third_party/WebKit/LayoutTests/compositing/contents-opaque/hidden-with-visible-text-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/contents-opaque/hidden-with-visible-text-expected.txt
@@ -1,12 +1,15 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow (positioned) DIV id='caption'",
           "position": [8, 13],
           "bounds": [200, 100],
           "drawsContent": true,
diff --git a/third_party/WebKit/LayoutTests/compositing/contents-opaque/layer-opacity-expected.txt b/third_party/WebKit/LayoutTests/compositing/contents-opaque/layer-opacity-expected.txt
index 94974d5..80645ae 100644
--- a/third_party/WebKit/LayoutTests/compositing/contents-opaque/layer-opacity-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/contents-opaque/layer-opacity-expected.txt
@@ -1,12 +1,15 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow DIV class='box opaque-background translucent composited'",
           "position": [8, 8],
           "bounds": [100, 100],
           "opacity": 0.5,
diff --git a/third_party/WebKit/LayoutTests/compositing/contents-opaque/layer-transform-expected.txt b/third_party/WebKit/LayoutTests/compositing/contents-opaque/layer-transform-expected.txt
index 9592974..d2925b5 100644
--- a/third_party/WebKit/LayoutTests/compositing/contents-opaque/layer-transform-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/contents-opaque/layer-transform-expected.txt
@@ -1,12 +1,15 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow DIV class='box'",
           "position": [8, 8],
           "bounds": [100, 100],
           "contentsOpaque": true,
diff --git a/third_party/WebKit/LayoutTests/compositing/contents-opaque/overflow-hidden-child-layers-expected.txt b/third_party/WebKit/LayoutTests/compositing/contents-opaque/overflow-hidden-child-layers-expected.txt
index 3b793fb..c6a81d6 100644
--- a/third_party/WebKit/LayoutTests/compositing/contents-opaque/overflow-hidden-child-layers-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/contents-opaque/overflow-hidden-child-layers-expected.txt
@@ -1,12 +1,15 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow DIV class='box'",
           "position": [38, 30],
           "bounds": [140, 140],
           "drawsContent": true,
diff --git a/third_party/WebKit/LayoutTests/compositing/contents-opaque/visibility-hidden-expected.txt b/third_party/WebKit/LayoutTests/compositing/contents-opaque/visibility-hidden-expected.txt
index e9f7954d..10aa3faf 100644
--- a/third_party/WebKit/LayoutTests/compositing/contents-opaque/visibility-hidden-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/contents-opaque/visibility-hidden-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true
diff --git a/third_party/WebKit/LayoutTests/compositing/draws-content/canvas-background-layer-expected.txt b/third_party/WebKit/LayoutTests/compositing/draws-content/canvas-background-layer-expected.txt
index e0e15a1..1dad370f 100644
--- a/third_party/WebKit/LayoutTests/compositing/draws-content/canvas-background-layer-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/draws-content/canvas-background-layer-expected.txt
@@ -1,12 +1,15 @@
  {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutHTMLCanvas CANVAS id='canvas-simple'",
           "position": [13, 8],
           "bounds": [50, 50],
           "contentsOpaque": true,
@@ -14,30 +17,35 @@
           "backgroundColor": "#008000"
         },
         {
+          "name": "LayoutHTMLCanvas CANVAS id='canvas-transparent-background'",
           "position": [13, 73],
           "bounds": [50, 50],
           "drawsContent": true,
           "backgroundColor": "#00FF007F"
         },
         {
+          "name": "LayoutHTMLCanvas CANVAS id='canvas-padding'",
           "position": [13, 138],
           "bounds": [60, 60],
           "drawsContent": true,
           "backgroundColor": "#008000"
         },
         {
+          "name": "LayoutHTMLCanvas CANVAS id='canvas-border'",
           "position": [13, 203],
           "bounds": [60, 60],
           "drawsContent": true,
           "backgroundColor": "#008000"
         },
         {
+          "name": "LayoutHTMLCanvas CANVAS id='canvas-image'",
           "position": [13, 268],
           "bounds": [50, 50],
           "drawsContent": true,
           "backgroundColor": "#008000"
         },
         {
+          "name": "LayoutHTMLCanvas CANVAS id='canvas-opaque'",
           "position": [13, 333],
           "bounds": [60, 60],
           "contentsOpaque": true,
diff --git a/third_party/WebKit/LayoutTests/compositing/draws-content/webgl-background-layer-expected.txt b/third_party/WebKit/LayoutTests/compositing/draws-content/webgl-background-layer-expected.txt
index 37f9b02..6b38a2e 100644
--- a/third_party/WebKit/LayoutTests/compositing/draws-content/webgl-background-layer-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/draws-content/webgl-background-layer-expected.txt
@@ -1,12 +1,15 @@
  {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutHTMLCanvas CANVAS id='canvas-simple'",
           "position": [13, 8],
           "bounds": [50, 50],
           "contentsOpaque": true,
@@ -14,24 +17,28 @@
           "backgroundColor": "#008000"
         },
         {
+          "name": "LayoutHTMLCanvas CANVAS id='canvas-padding'",
           "position": [13, 73],
           "bounds": [60, 60],
           "drawsContent": true,
           "backgroundColor": "#008000"
         },
         {
+          "name": "LayoutHTMLCanvas CANVAS id='canvas-border'",
           "position": [13, 138],
           "bounds": [60, 60],
           "drawsContent": true,
           "backgroundColor": "#008000"
         },
         {
+          "name": "LayoutHTMLCanvas CANVAS id='canvas-image'",
           "position": [13, 203],
           "bounds": [50, 50],
           "drawsContent": true,
           "backgroundColor": "#008000"
         },
         {
+          "name": "LayoutHTMLCanvas CANVAS id='canvas-transparent-background'",
           "position": [13, 268],
           "bounds": [50, 50],
           "drawsContent": true,
diff --git a/third_party/WebKit/LayoutTests/compositing/filters/sw-layer-overlaps-hw-shadow-expected.txt b/third_party/WebKit/LayoutTests/compositing/filters/sw-layer-overlaps-hw-shadow-expected.txt
index 34958e9..6266326 100644
--- a/third_party/WebKit/LayoutTests/compositing/filters/sw-layer-overlaps-hw-shadow-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/filters/sw-layer-overlaps-hw-shadow-expected.txt
@@ -1,15 +1,19 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "Squashing Containment Layer",
           "shouldFlattenTransform": false,
           "children": [
             {
+              "name": "LayoutBlockFlow (positioned) DIV id='composited'",
               "position": [105, 105],
               "bounds": [100, 100],
               "contentsOpaque": true,
@@ -17,6 +21,7 @@
               "backgroundColor": "#000000"
             },
             {
+              "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV id='software')",
               "bounds": [100, 100],
               "drawsContent": true
             }
diff --git a/third_party/WebKit/LayoutTests/compositing/filters/sw-nested-shadow-overlaps-hw-nested-shadow-expected.txt b/third_party/WebKit/LayoutTests/compositing/filters/sw-nested-shadow-overlaps-hw-nested-shadow-expected.txt
index fa914b42..cc6651e 100644
--- a/third_party/WebKit/LayoutTests/compositing/filters/sw-nested-shadow-overlaps-hw-nested-shadow-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/filters/sw-nested-shadow-overlaps-hw-nested-shadow-expected.txt
@@ -1,12 +1,15 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow (positioned) DIV id='composited-parent'",
           "position": [230, 230],
           "transformOrigin": [150, 150],
           "bounds": [200, 200],
@@ -14,6 +17,7 @@
           "backgroundColor": "#000000"
         },
         {
+          "name": "LayoutBlockFlow (positioned) DIV id='software-parent'",
           "bounds": [200, 200],
           "drawsContent": true,
           "backgroundColor": "#008000"
diff --git a/third_party/WebKit/LayoutTests/compositing/filters/sw-shadow-overlaps-hw-layer-expected.txt b/third_party/WebKit/LayoutTests/compositing/filters/sw-shadow-overlaps-hw-layer-expected.txt
index aaae1ed4..7e464510b 100644
--- a/third_party/WebKit/LayoutTests/compositing/filters/sw-shadow-overlaps-hw-layer-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/filters/sw-shadow-overlaps-hw-layer-expected.txt
@@ -1,12 +1,15 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow (positioned) DIV id='composited'",
           "position": [105, 105],
           "bounds": [100, 100],
           "contentsOpaque": true,
@@ -14,6 +17,7 @@
           "backgroundColor": "#000000"
         },
         {
+          "name": "LayoutBlockFlow (positioned) DIV id='software'",
           "bounds": [100, 100],
           "contentsOpaque": true,
           "drawsContent": true,
diff --git a/third_party/WebKit/LayoutTests/compositing/filters/sw-shadow-overlaps-hw-shadow-expected.txt b/third_party/WebKit/LayoutTests/compositing/filters/sw-shadow-overlaps-hw-shadow-expected.txt
index 6528642f..55758c6 100644
--- a/third_party/WebKit/LayoutTests/compositing/filters/sw-shadow-overlaps-hw-shadow-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/filters/sw-shadow-overlaps-hw-shadow-expected.txt
@@ -1,12 +1,15 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow (positioned) DIV id='composited'",
           "position": [130, 130],
           "bounds": [100, 100],
           "contentsOpaque": true,
@@ -14,6 +17,7 @@
           "backgroundColor": "#000000"
         },
         {
+          "name": "LayoutBlockFlow (positioned) DIV id='software'",
           "bounds": [100, 100],
           "contentsOpaque": true,
           "drawsContent": true,
diff --git a/third_party/WebKit/LayoutTests/compositing/fixed-body-background-positioned-expected.txt b/third_party/WebKit/LayoutTests/compositing/fixed-body-background-positioned-expected.txt
index bc6328a5..93d84a6 100644
--- a/third_party/WebKit/LayoutTests/compositing/fixed-body-background-positioned-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/fixed-body-background-positioned-expected.txt
@@ -1,21 +1,27 @@
 {
+  "name": "Frame Overflow Controls Host Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "Frame Clipping Layer",
       "bounds": [785, 600],
       "children": [
         {
+          "name": "LayoutView #document (background) Layer",
           "transformOrigin": [0, 0],
           "bounds": [785, 600],
           "contentsOpaque": true,
           "drawsContent": true
         },
         {
+          "name": "Frame Scrolling Layer",
           "children": [
             {
+              "name": "Content Root Layer",
               "bounds": [785, 3700],
               "children": [
                 {
+                  "name": "LayoutView #document",
                   "bounds": [785, 3700],
                   "drawsContent": true
                 }
diff --git a/third_party/WebKit/LayoutTests/compositing/fixed-position-changed-to-absolute-expected.txt b/third_party/WebKit/LayoutTests/compositing/fixed-position-changed-to-absolute-expected.txt
index aa81f353..1b4d1ce 100644
--- a/third_party/WebKit/LayoutTests/compositing/fixed-position-changed-to-absolute-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/fixed-position-changed-to-absolute-expected.txt
@@ -1,16 +1,20 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "backgroundColor": "#402B3C",
       "children": [
         {
+          "name": "Squashing Containment Layer",
           "shouldFlattenTransform": false,
           "children": [
             {
+              "name": "LayoutBlockFlow (positioned) DIV class='composited'",
               "position": [8, 13],
               "bounds": [150, 150],
               "contentsOpaque": true,
@@ -18,6 +22,7 @@
               "backgroundColor": "#D9CCA7"
             },
             {
+              "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV id='layer-A')",
               "position": [20, 20],
               "bounds": [226, 180],
               "drawsContent": true
diff --git a/third_party/WebKit/LayoutTests/compositing/force-compositing-mode/force-composite-empty-expected.txt b/third_party/WebKit/LayoutTests/compositing/force-compositing-mode/force-composite-empty-expected.txt
index e9f7954d..10aa3faf 100644
--- a/third_party/WebKit/LayoutTests/compositing/force-compositing-mode/force-composite-empty-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/force-compositing-mode/force-composite-empty-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true
diff --git a/third_party/WebKit/LayoutTests/compositing/force-compositing-mode/no-overflow-iframe-layer-expected.txt b/third_party/WebKit/LayoutTests/compositing/force-compositing-mode/no-overflow-iframe-layer-expected.txt
index 9f9c614a9..c9ae3d3e 100644
--- a/third_party/WebKit/LayoutTests/compositing/force-compositing-mode/no-overflow-iframe-layer-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/force-compositing-mode/no-overflow-iframe-layer-expected.txt
@@ -1,8 +1,10 @@
 
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true
diff --git a/third_party/WebKit/LayoutTests/compositing/force-compositing-mode/overflow-hidden-iframe-layer-expected.txt b/third_party/WebKit/LayoutTests/compositing/force-compositing-mode/overflow-hidden-iframe-layer-expected.txt
index 9f9c614a9..c9ae3d3e 100644
--- a/third_party/WebKit/LayoutTests/compositing/force-compositing-mode/overflow-hidden-iframe-layer-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/force-compositing-mode/overflow-hidden-iframe-layer-expected.txt
@@ -1,8 +1,10 @@
 
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true
diff --git a/third_party/WebKit/LayoutTests/compositing/force-compositing-mode/overflow-iframe-enter-compositing-expected.txt b/third_party/WebKit/LayoutTests/compositing/force-compositing-mode/overflow-iframe-enter-compositing-expected.txt
index 3b1727d..06849f3a 100644
--- a/third_party/WebKit/LayoutTests/compositing/force-compositing-mode/overflow-iframe-enter-compositing-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/force-compositing-mode/overflow-iframe-enter-compositing-expected.txt
@@ -1,30 +1,38 @@
 
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutIFrame IFRAME id='parent-iframe'",
           "position": [8, 8],
           "bounds": [154, 154],
           "drawsContent": true,
           "children": [
             {
+              "name": "Frame Overflow Controls Host Layer",
               "position": [2, 2],
               "bounds": [150, 150],
               "children": [
                 {
+                  "name": "Frame Clipping Layer",
                   "bounds": [135, 135],
                   "children": [
                     {
+                      "name": "Frame Scrolling Layer",
                       "children": [
                         {
+                          "name": "Content Root Layer",
                           "bounds": [508, 516],
                           "children": [
                             {
+                              "name": "LayoutView #document",
                               "bounds": [508, 516],
                               "drawsContent": true
                             }
@@ -35,14 +43,17 @@
                   ]
                 },
                 {
+                  "name": "Frame Horizontal Scrollbar Layer",
                   "position": [0, 135],
                   "bounds": [135, 15]
                 },
                 {
+                  "name": "Frame Vertical Scrollbar Layer",
                   "position": [135, 0],
                   "bounds": [15, 135]
                 },
                 {
+                  "name": "Frame Scroll Corner Layer",
                   "position": [135, 135],
                   "bounds": [15, 15],
                   "drawsContent": true
diff --git a/third_party/WebKit/LayoutTests/compositing/force-compositing-mode/overflow-iframe-layer-expected.txt b/third_party/WebKit/LayoutTests/compositing/force-compositing-mode/overflow-iframe-layer-expected.txt
index 3b1727d..46e04a7 100644
--- a/third_party/WebKit/LayoutTests/compositing/force-compositing-mode/overflow-iframe-layer-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/force-compositing-mode/overflow-iframe-layer-expected.txt
@@ -1,30 +1,38 @@
 
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutIFrame IFRAME id='iframe'",
           "position": [8, 8],
           "bounds": [154, 154],
           "drawsContent": true,
           "children": [
             {
+              "name": "Frame Overflow Controls Host Layer",
               "position": [2, 2],
               "bounds": [150, 150],
               "children": [
                 {
+                  "name": "Frame Clipping Layer",
                   "bounds": [135, 135],
                   "children": [
                     {
+                      "name": "Frame Scrolling Layer",
                       "children": [
                         {
+                          "name": "Content Root Layer",
                           "bounds": [508, 516],
                           "children": [
                             {
+                              "name": "LayoutView #document",
                               "bounds": [508, 516],
                               "drawsContent": true
                             }
@@ -35,14 +43,17 @@
                   ]
                 },
                 {
+                  "name": "Frame Horizontal Scrollbar Layer",
                   "position": [0, 135],
                   "bounds": [135, 15]
                 },
                 {
+                  "name": "Frame Vertical Scrollbar Layer",
                   "position": [135, 0],
                   "bounds": [15, 135]
                 },
                 {
+                  "name": "Frame Scroll Corner Layer",
                   "position": [135, 135],
                   "bounds": [15, 15],
                   "drawsContent": true
diff --git a/third_party/WebKit/LayoutTests/compositing/geometry/ancestor-overflow-change-expected.txt b/third_party/WebKit/LayoutTests/compositing/geometry/ancestor-overflow-change-expected.txt
index dd78556..593bc185d 100644
--- a/third_party/WebKit/LayoutTests/compositing/geometry/ancestor-overflow-change-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/geometry/ancestor-overflow-change-expected.txt
@@ -1,12 +1,15 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow DIV class='box'",
           "position": [8, 8],
           "bounds": [100, 100],
           "contentsOpaque": true,
diff --git a/third_party/WebKit/LayoutTests/compositing/geometry/bounds-clipped-composited-child-expected.txt b/third_party/WebKit/LayoutTests/compositing/geometry/bounds-clipped-composited-child-expected.txt
index 526ee2e..623dc28c 100644
--- a/third_party/WebKit/LayoutTests/compositing/geometry/bounds-clipped-composited-child-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/geometry/bounds-clipped-composited-child-expected.txt
@@ -1,12 +1,15 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow DIV class='container'",
           "position": [58, 8],
           "transformOrigin": [50, 50],
           "bounds": [200, 100],
diff --git a/third_party/WebKit/LayoutTests/compositing/geometry/bounds-ignores-hidden-composited-descendant-expected.txt b/third_party/WebKit/LayoutTests/compositing/geometry/bounds-ignores-hidden-composited-descendant-expected.txt
index 2b51c66..a6d41f6 100644
--- a/third_party/WebKit/LayoutTests/compositing/geometry/bounds-ignores-hidden-composited-descendant-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/geometry/bounds-ignores-hidden-composited-descendant-expected.txt
@@ -1,26 +1,31 @@
 
 
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow (positioned) DIV class='composited'",
           "position": [10, 10],
           "transformOrigin": [-10, -10],
           "bounds": [590, 208],
           "drawsContent": true
         },
         {
+          "name": "LayoutBlockFlow (positioned) DIV class='composited'",
           "position": [10, 260],
           "transformOrigin": [-10, -10],
           "bounds": [590, 208],
           "drawsContent": true,
           "children": [
             {
+              "name": "LayoutBlockFlow (relative positioned) DIV class='composited inner box'",
               "position": [490, 108],
               "bounds": [100, 100],
               "contentsOpaque": true,
diff --git a/third_party/WebKit/LayoutTests/compositing/geometry/bounds-ignores-hidden-dynamic-expected.txt b/third_party/WebKit/LayoutTests/compositing/geometry/bounds-ignores-hidden-dynamic-expected.txt
index a8da2d2..d0529af9 100644
--- a/third_party/WebKit/LayoutTests/compositing/geometry/bounds-ignores-hidden-dynamic-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/geometry/bounds-ignores-hidden-dynamic-expected.txt
@@ -1,19 +1,23 @@
 
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow (positioned) DIV class='composited'",
           "position": [10, 10],
           "transformOrigin": [-10, -10],
           "bounds": [540, 240],
           "drawsContent": true
         },
         {
+          "name": "LayoutBlockFlow (positioned) DIV class='composited'",
           "position": [10, 260],
           "transformOrigin": [-10, -10],
           "bounds": [50, 50],
diff --git a/third_party/WebKit/LayoutTests/compositing/geometry/bounds-ignores-hidden-dynamic-negzindex-expected.txt b/third_party/WebKit/LayoutTests/compositing/geometry/bounds-ignores-hidden-dynamic-negzindex-expected.txt
index 6fc34fe..6d6cae3 100644
--- a/third_party/WebKit/LayoutTests/compositing/geometry/bounds-ignores-hidden-dynamic-negzindex-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/geometry/bounds-ignores-hidden-dynamic-negzindex-expected.txt
@@ -1,34 +1,41 @@
 
 
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow (positioned) DIV class='composited'",
           "transformOrigin": [50, 50],
           "bounds": [500, 250],
           "drawsContent": true
         },
         {
+          "name": "Squashing Containment Layer",
           "shouldFlattenTransform": false,
           "children": [
             {
+              "name": "LayoutBlockFlow (positioned) DIV class='composited'",
               "position": [0, 250],
               "transformOrigin": [50, 50],
               "bounds": [150, 150],
               "drawsContent": true
             },
             {
+              "name": "Squashing Layer (first squashed layer: LayoutBlockFlow PRE id='layers')",
               "bounds": [792, 100],
               "drawsContent": true
             }
           ]
         },
         {
+          "name": "LayoutBlockFlow (positioned) DIV class='indicator box'",
           "position": [0, 250],
           "bounds": [100, 100],
           "contentsOpaque": true,
diff --git a/third_party/WebKit/LayoutTests/compositing/geometry/bounds-ignores-hidden-expected.txt b/third_party/WebKit/LayoutTests/compositing/geometry/bounds-ignores-hidden-expected.txt
index db88d00..c1ed141 100644
--- a/third_party/WebKit/LayoutTests/compositing/geometry/bounds-ignores-hidden-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/geometry/bounds-ignores-hidden-expected.txt
@@ -1,13 +1,16 @@
 
 {
+  "name": "Content Root Layer",
   "bounds": [44990, 15063],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [44990, 15063],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow (positioned) DIV class='composited'",
           "position": [10, 10],
           "transformOrigin": [-10, -10],
           "bounds": [50, 50],
diff --git a/third_party/WebKit/LayoutTests/compositing/geometry/clip-expected.txt b/third_party/WebKit/LayoutTests/compositing/geometry/clip-expected.txt
index cef1d5e8..c1445660 100644
--- a/third_party/WebKit/LayoutTests/compositing/geometry/clip-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/geometry/clip-expected.txt
@@ -1,14 +1,17 @@
 Test CSS clip with composited layers. Left and right sides should look the same.
 
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow (positioned) DIV class='composited box'",
           "position": [15, 15],
           "bounds": [110, 110],
           "drawsContent": true,
@@ -21,11 +24,13 @@
           ]
         },
         {
+          "name": "Ancestor Clipping Layer",
           "position": [215, 15],
           "bounds": [110, 110],
           "shouldFlattenTransform": false,
           "children": [
             {
+              "name": "LayoutBlockFlow (relative positioned) DIV class='composited inner'",
               "position": [-5, -5],
               "bounds": [120, 120],
               "drawsContent": true,
diff --git a/third_party/WebKit/LayoutTests/compositing/geometry/clip-inside-expected.txt b/third_party/WebKit/LayoutTests/compositing/geometry/clip-inside-expected.txt
index 1b64e82a..2113b2e2 100644
--- a/third_party/WebKit/LayoutTests/compositing/geometry/clip-inside-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/geometry/clip-inside-expected.txt
@@ -1,14 +1,17 @@
 Test CSS clip with composited layers. Left and right sides should look the same.
 
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow (positioned) DIV class='composited box'",
           "position": [25, 35],
           "transformOrigin": [45, 35],
           "bounds": [90, 80],
@@ -23,11 +26,13 @@
           ]
         },
         {
+          "name": "Ancestor Clipping Layer",
           "position": [225, 35],
           "bounds": [90, 80],
           "shouldFlattenTransform": false,
           "children": [
             {
+              "name": "LayoutBlockFlow (relative positioned) DIV class='composited inner'",
               "position": [-15, -25],
               "bounds": [120, 120],
               "drawsContent": true,
diff --git a/third_party/WebKit/LayoutTests/compositing/geometry/clip-with-shadow-expected.txt b/third_party/WebKit/LayoutTests/compositing/geometry/clip-with-shadow-expected.txt
index febf365..87447db 100644
--- a/third_party/WebKit/LayoutTests/compositing/geometry/clip-with-shadow-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/geometry/clip-with-shadow-expected.txt
@@ -1,12 +1,15 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow (positioned) DIV class='composited box'",
           "position": [15, 15],
           "bounds": [110, 110],
           "drawsContent": true,
@@ -19,11 +22,13 @@
           ]
         },
         {
+          "name": "Ancestor Clipping Layer",
           "position": [215, 15],
           "bounds": [110, 110],
           "shouldFlattenTransform": false,
           "children": [
             {
+              "name": "LayoutBlockFlow (relative positioned) DIV class='composited inner'",
               "position": [-5, -5],
               "bounds": [120, 120],
               "drawsContent": true,
diff --git a/third_party/WebKit/LayoutTests/compositing/geometry/composited-in-columns-expected.txt b/third_party/WebKit/LayoutTests/compositing/geometry/composited-in-columns-expected.txt
index dee9b64..090cab3 100644
--- a/third_party/WebKit/LayoutTests/compositing/geometry/composited-in-columns-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/geometry/composited-in-columns-expected.txt
@@ -1,18 +1,22 @@
  {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow DIV class='composited block'",
           "position": [14, 162],
           "bounds": [210, 60],
           "drawsContent": true,
           "backgroundColor": "#0000FF",
           "children": [
             {
+              "name": "LayoutBlockFlow DIV class='composited box'",
               "position": [5, 5],
               "bounds": [50, 50],
               "contentsOpaque": true,
@@ -22,12 +26,14 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow DIV class='composited block'",
           "position": [272, 88],
           "bounds": [210, 60],
           "drawsContent": true,
           "backgroundColor": "#0000FF",
           "children": [
             {
+              "name": "LayoutBlockFlow DIV class='composited box'",
               "position": [5, 5],
               "bounds": [50, 50],
               "contentsOpaque": true,
diff --git a/third_party/WebKit/LayoutTests/compositing/geometry/flipped-writing-mode-expected.txt b/third_party/WebKit/LayoutTests/compositing/geometry/flipped-writing-mode-expected.txt
index 73492c5..fac338a 100644
--- a/third_party/WebKit/LayoutTests/compositing/geometry/flipped-writing-mode-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/geometry/flipped-writing-mode-expected.txt
@@ -1,12 +1,15 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow DIV class='composited flipped'",
           "position": [18, 10],
           "bounds": [250, 200],
           "contentsOpaque": true,
@@ -14,6 +17,7 @@
           "backgroundColor": "#C0C0C0",
           "children": [
             {
+              "name": "LayoutBlockFlow DIV class='composited box'",
               "position": [35, 10],
               "transformOrigin": [145, 50],
               "bounds": [195, 100],
diff --git a/third_party/WebKit/LayoutTests/compositing/geometry/foreground-layer-expected.txt b/third_party/WebKit/LayoutTests/compositing/geometry/foreground-layer-expected.txt
index 01cf10f1..ea7e791f 100644
--- a/third_party/WebKit/LayoutTests/compositing/geometry/foreground-layer-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/geometry/foreground-layer-expected.txt
@@ -1,19 +1,23 @@
   
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow (relative positioned) DIV class='main box'",
           "position": [18, 88],
           "bounds": [320, 320],
           "drawsContent": true,
           "backgroundColor": "#FF0000",
           "children": [
             {
+              "name": "LayoutBlockFlow (positioned) DIV class='negative child'",
               "position": [60, 60],
               "bounds": [50, 50],
               "transform": [
@@ -24,22 +28,26 @@
               ]
             },
             {
+              "name": "LayoutBlockFlow (relative positioned) DIV class='main box' (foreground) Layer",
               "bounds": [320, 320],
               "drawsContent": true
             }
           ]
         },
         {
+          "name": "LayoutBlockFlow (relative positioned) DIV class='main box'",
           "position": [362, 18],
           "bounds": [320, 320],
           "drawsContent": true,
           "backgroundColor": "#FF0000",
           "children": [
             {
+              "name": "Child Containment Layer",
               "position": [60, 60],
               "bounds": [200, 200],
               "children": [
                 {
+                  "name": "LayoutBlockFlow (positioned) DIV class='negative child'",
                   "bounds": [50, 50],
                   "transform": [
                     [1, 0, 0, 0],
@@ -49,6 +57,7 @@
                   ]
                 },
                 {
+                  "name": "LayoutBlockFlow (relative positioned) DIV class='main box' (foreground) Layer",
                   "bounds": [200, 200],
                   "drawsContent": true
                 }
diff --git a/third_party/WebKit/LayoutTests/compositing/geometry/limit-layer-bounds-opacity-transition-expected.txt b/third_party/WebKit/LayoutTests/compositing/geometry/limit-layer-bounds-opacity-transition-expected.txt
index aed6172..5ca7536c 100644
--- a/third_party/WebKit/LayoutTests/compositing/geometry/limit-layer-bounds-opacity-transition-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/geometry/limit-layer-bounds-opacity-transition-expected.txt
@@ -1,21 +1,26 @@
 Test
 Fader
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "Squashing Containment Layer",
           "shouldFlattenTransform": false,
           "children": [
             {
+              "name": "LayoutBlockFlow DIV class='compositing'",
               "position": [8, 8],
               "bounds": [1, 1]
             },
             {
+              "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV class='test')",
               "position": [-9992, -1],
               "bounds": [10100, 100],
               "drawsContent": true
diff --git a/third_party/WebKit/LayoutTests/compositing/geometry/limit-layer-bounds-positioned-expected.txt b/third_party/WebKit/LayoutTests/compositing/geometry/limit-layer-bounds-positioned-expected.txt
index 5a4a490a..63a6a244 100644
--- a/third_party/WebKit/LayoutTests/compositing/geometry/limit-layer-bounds-positioned-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/geometry/limit-layer-bounds-positioned-expected.txt
@@ -1,20 +1,25 @@
 Text here
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "Squashing Containment Layer",
           "shouldFlattenTransform": false,
           "children": [
             {
+              "name": "LayoutBlockFlow (positioned) DIV class='compositing'",
               "position": [29, 29],
               "bounds": [100, 100]
             },
             {
+              "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV class='indicator')",
               "position": [-9971, 8],
               "bounds": [10121, 142],
               "drawsContent": true
diff --git a/third_party/WebKit/LayoutTests/compositing/geometry/limit-layer-bounds-positioned-transition-expected.txt b/third_party/WebKit/LayoutTests/compositing/geometry/limit-layer-bounds-positioned-transition-expected.txt
index 7d1cf22..4ab7c6b1 100644
--- a/third_party/WebKit/LayoutTests/compositing/geometry/limit-layer-bounds-positioned-transition-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/geometry/limit-layer-bounds-positioned-transition-expected.txt
@@ -1,20 +1,25 @@
 Text here
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "Squashing Containment Layer",
           "shouldFlattenTransform": false,
           "children": [
             {
+              "name": "LayoutBlockFlow (positioned) DIV class='compositing'",
               "position": [29, 29],
               "bounds": [100, 100]
             },
             {
+              "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV class='indicator')",
               "position": [-771, 8],
               "bounds": [1200, 142],
               "drawsContent": true
diff --git a/third_party/WebKit/LayoutTests/compositing/geometry/limit-layer-bounds-transformed-expected.txt b/third_party/WebKit/LayoutTests/compositing/geometry/limit-layer-bounds-transformed-expected.txt
index b64e7eee..30fcd7a 100644
--- a/third_party/WebKit/LayoutTests/compositing/geometry/limit-layer-bounds-transformed-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/geometry/limit-layer-bounds-transformed-expected.txt
@@ -1,20 +1,25 @@
 Text here
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "Squashing Containment Layer",
           "shouldFlattenTransform": false,
           "children": [
             {
+              "name": "LayoutBlockFlow (positioned) DIV class='compositing'",
               "position": [129, 29],
               "bounds": [100, 100]
             },
             {
+              "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV class='indicator')",
               "position": [-871, 8],
               "bounds": [1221, 142],
               "drawsContent": true
diff --git a/third_party/WebKit/LayoutTests/compositing/iframes/become-composited-nested-iframes-expected.txt b/third_party/WebKit/LayoutTests/compositing/iframes/become-composited-nested-iframes-expected.txt
index ce88aa5a..ac76155a 100644
--- a/third_party/WebKit/LayoutTests/compositing/iframes/become-composited-nested-iframes-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/iframes/become-composited-nested-iframes-expected.txt
@@ -1,56 +1,71 @@
 
 {
+  "name": "Content Root Layer",
   "bounds": [785, 1500],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [785, 1500],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutIFrame IFRAME",
           "position": [20, 120],
           "bounds": [284, 204],
           "drawsContent": true,
           "children": [
             {
+              "name": "Frame Overflow Controls Host Layer",
               "position": [2, 2],
               "bounds": [280, 200],
               "children": [
                 {
+                  "name": "Frame Clipping Layer",
                   "bounds": [280, 200],
                   "children": [
                     {
+                      "name": "Frame Scrolling Layer",
                       "children": [
                         {
+                          "name": "Content Root Layer",
                           "bounds": [280, 200],
                           "children": [
                             {
+                              "name": "LayoutView #document",
                               "bounds": [280, 200],
                               "drawsContent": true,
                               "children": [
                                 {
+                                  "name": "LayoutIFrame IFRAME",
                                   "position": [8, 8],
                                   "bounds": [252, 172],
                                   "drawsContent": true,
                                   "children": [
                                     {
+                                      "name": "Frame Overflow Controls Host Layer",
                                       "position": [1, 1],
                                       "bounds": [250, 170],
                                       "children": [
                                         {
+                                          "name": "Frame Clipping Layer",
                                           "bounds": [250, 170],
                                           "children": [
                                             {
+                                              "name": "Frame Scrolling Layer",
                                               "children": [
                                                 {
+                                                  "name": "Content Root Layer",
                                                   "bounds": [250, 230],
                                                   "children": [
                                                     {
+                                                      "name": "LayoutView #document",
                                                       "bounds": [250, 230],
                                                       "drawsContent": true,
                                                       "backgroundColor": "#C0C0C0",
                                                       "children": [
                                                         {
+                                                          "name": "LayoutBlockFlow DIV id='iframe-content' class='box'",
                                                           "position": [18, 10],
                                                           "bounds": [210, 210],
                                                           "contentsOpaque": true,
@@ -82,49 +97,62 @@
           ]
         },
         {
+          "name": "LayoutIFrame IFRAME",
           "position": [20, 344],
           "bounds": [284, 204],
           "drawsContent": true,
           "children": [
             {
+              "name": "Frame Overflow Controls Host Layer",
               "position": [2, 2],
               "bounds": [280, 200],
               "children": [
                 {
+                  "name": "Frame Clipping Layer",
                   "bounds": [280, 200],
                   "children": [
                     {
+                      "name": "Frame Scrolling Layer",
                       "children": [
                         {
+                          "name": "Content Root Layer",
                           "bounds": [280, 200],
                           "children": [
                             {
+                              "name": "LayoutView #document",
                               "bounds": [280, 200],
                               "drawsContent": true,
                               "children": [
                                 {
+                                  "name": "LayoutIFrame IFRAME",
                                   "position": [8, 8],
                                   "bounds": [252, 172],
                                   "drawsContent": true,
                                   "children": [
                                     {
+                                      "name": "Frame Overflow Controls Host Layer",
                                       "position": [1, 1],
                                       "bounds": [250, 170],
                                       "children": [
                                         {
+                                          "name": "Frame Clipping Layer",
                                           "bounds": [250, 170],
                                           "children": [
                                             {
+                                              "name": "Frame Scrolling Layer",
                                               "children": [
                                                 {
+                                                  "name": "Content Root Layer",
                                                   "bounds": [250, 230],
                                                   "children": [
                                                     {
+                                                      "name": "LayoutView #document",
                                                       "bounds": [250, 230],
                                                       "drawsContent": true,
                                                       "backgroundColor": "#C0C0C0",
                                                       "children": [
                                                         {
+                                                          "name": "LayoutBlockFlow DIV id='iframe-content' class='box'",
                                                           "position": [18, 10],
                                                           "bounds": [210, 210],
                                                           "contentsOpaque": true,
@@ -156,6 +184,7 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow DIV id='box' class='composited'",
           "bounds": [100, 100],
           "contentsOpaque": true,
           "drawsContent": true,
diff --git a/third_party/WebKit/LayoutTests/compositing/iframes/become-overlapped-iframe-expected.txt b/third_party/WebKit/LayoutTests/compositing/iframes/become-overlapped-iframe-expected.txt
index bf26c4d3..3d4fa5d 100644
--- a/third_party/WebKit/LayoutTests/compositing/iframes/become-overlapped-iframe-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/iframes/become-overlapped-iframe-expected.txt
@@ -1,35 +1,44 @@
 
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutIFrame (floating) IFRAME id='iframe'",
           "position": [58, 58],
           "bounds": [350, 200],
           "drawsContent": true,
           "children": [
             {
+              "name": "Frame Overflow Controls Host Layer",
               "position": [15, 15],
               "bounds": [320, 170],
               "children": [
                 {
+                  "name": "Frame Clipping Layer",
                   "bounds": [305, 170],
                   "children": [
                     {
+                      "name": "Frame Scrolling Layer",
                       "children": [
                         {
+                          "name": "Content Root Layer",
                           "bounds": [305, 230],
                           "children": [
                             {
+                              "name": "LayoutView #document",
                               "bounds": [305, 230],
                               "drawsContent": true,
                               "backgroundColor": "#C0C0C0",
                               "children": [
                                 {
+                                  "name": "LayoutBlockFlow DIV id='iframe-content' class='box'",
                                   "position": [18, 10],
                                   "bounds": [210, 210],
                                   "contentsOpaque": true,
@@ -45,6 +54,7 @@
                   ]
                 },
                 {
+                  "name": "Frame Vertical Scrollbar Layer",
                   "position": [305, 0],
                   "bounds": [15, 170]
                 }
@@ -53,6 +63,7 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow (positioned) DIV id='overlay'",
           "position": [5, 5],
           "bounds": [150, 150],
           "drawsContent": true,
diff --git a/third_party/WebKit/LayoutTests/compositing/iframes/composited-parent-iframe-expected.txt b/third_party/WebKit/LayoutTests/compositing/iframes/composited-parent-iframe-expected.txt
index e514691b..0353e22a 100644
--- a/third_party/WebKit/LayoutTests/compositing/iframes/composited-parent-iframe-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/iframes/composited-parent-iframe-expected.txt
@@ -1,35 +1,44 @@
 
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutIFrame IFRAME",
           "position": [-12, -12],
           "bounds": [370, 220],
           "drawsContent": true,
           "children": [
             {
+              "name": "Frame Overflow Controls Host Layer",
               "position": [35, 35],
               "bounds": [300, 150],
               "children": [
                 {
+                  "name": "Frame Clipping Layer",
                   "bounds": [285, 150],
                   "children": [
                     {
+                      "name": "Frame Scrolling Layer",
                       "children": [
                         {
+                          "name": "Content Root Layer",
                           "bounds": [285, 230],
                           "children": [
                             {
+                              "name": "LayoutView #document",
                               "bounds": [285, 230],
                               "drawsContent": true,
                               "backgroundColor": "#C0C0C0",
                               "children": [
                                 {
+                                  "name": "LayoutBlockFlow DIV id='iframe-content' class='box'",
                                   "position": [18, 10],
                                   "bounds": [210, 210],
                                   "contentsOpaque": true,
@@ -45,6 +54,7 @@
                   ]
                 },
                 {
+                  "name": "Frame Vertical Scrollbar Layer",
                   "position": [285, 0],
                   "bounds": [15, 150]
                 }
diff --git a/third_party/WebKit/LayoutTests/compositing/iframes/connect-compositing-iframe-delayed-expected.txt b/third_party/WebKit/LayoutTests/compositing/iframes/connect-compositing-iframe-delayed-expected.txt
index fda7c3a..255528bb 100644
--- a/third_party/WebKit/LayoutTests/compositing/iframes/connect-compositing-iframe-delayed-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/iframes/connect-compositing-iframe-delayed-expected.txt
@@ -2,36 +2,45 @@
 When the parent document becomes composited, the layer trees should get connected together.
 
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutIFrame IFRAME id='iframe'",
           "position": [8, 108],
           "bounds": [370, 220],
           "drawsContent": true,
           "children": [
             {
+              "name": "Frame Overflow Controls Host Layer",
               "position": [35, 35],
               "bounds": [300, 150],
               "children": [
                 {
+                  "name": "Frame Clipping Layer",
                   "bounds": [285, 150],
                   "children": [
                     {
+                      "name": "Frame Scrolling Layer",
                       "children": [
                         {
+                          "name": "Content Root Layer",
                           "bounds": [285, 230],
                           "children": [
                             {
+                              "name": "LayoutView #document",
                               "bounds": [285, 230],
                               "drawsContent": true,
                               "backgroundColor": "#C0C0C0",
                               "children": [
                                 {
+                                  "name": "LayoutBlockFlow DIV id='iframe-content' class='box'",
                                   "position": [18, 10],
                                   "bounds": [210, 210],
                                   "contentsOpaque": true,
@@ -47,6 +56,7 @@
                   ]
                 },
                 {
+                  "name": "Frame Vertical Scrollbar Layer",
                   "position": [285, 0],
                   "bounds": [15, 150]
                 }
@@ -55,6 +65,7 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow DIV id='box' class='composited'",
           "position": [8, 8],
           "bounds": [100, 100],
           "contentsOpaque": true,
diff --git a/third_party/WebKit/LayoutTests/compositing/iframes/connect-compositing-iframe-expected.txt b/third_party/WebKit/LayoutTests/compositing/iframes/connect-compositing-iframe-expected.txt
index a80e5498..8d96c672 100644
--- a/third_party/WebKit/LayoutTests/compositing/iframes/connect-compositing-iframe-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/iframes/connect-compositing-iframe-expected.txt
@@ -1,35 +1,44 @@
 
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutIFrame IFRAME id='parent-iframe'",
           "position": [8, 8],
           "bounds": [370, 220],
           "drawsContent": true,
           "children": [
             {
+              "name": "Frame Overflow Controls Host Layer",
               "position": [35, 35],
               "bounds": [300, 150],
               "children": [
                 {
+                  "name": "Frame Clipping Layer",
                   "bounds": [285, 150],
                   "children": [
                     {
+                      "name": "Frame Scrolling Layer",
                       "children": [
                         {
+                          "name": "Content Root Layer",
                           "bounds": [285, 230],
                           "children": [
                             {
+                              "name": "LayoutView #document",
                               "bounds": [285, 230],
                               "drawsContent": true,
                               "backgroundColor": "#C0C0C0",
                               "children": [
                                 {
+                                  "name": "LayoutBlockFlow DIV id='test' class='composited box'",
                                   "position": [18, 10],
                                   "bounds": [210, 210],
                                   "contentsOpaque": true,
@@ -45,6 +54,7 @@
                   ]
                 },
                 {
+                  "name": "Frame Vertical Scrollbar Layer",
                   "position": [285, 0],
                   "bounds": [15, 150]
                 }
@@ -53,6 +63,7 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow (positioned) DIV class='overlay'",
           "position": [5, 5],
           "bounds": [50, 50],
           "drawsContent": true,
diff --git a/third_party/WebKit/LayoutTests/compositing/iframes/connect-compositing-iframe2-expected.txt b/third_party/WebKit/LayoutTests/compositing/iframes/connect-compositing-iframe2-expected.txt
index a80e5498..7543194 100644
--- a/third_party/WebKit/LayoutTests/compositing/iframes/connect-compositing-iframe2-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/iframes/connect-compositing-iframe2-expected.txt
@@ -1,35 +1,44 @@
 
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutIFrame IFRAME id='iframe' class='composited'",
           "position": [8, 8],
           "bounds": [370, 220],
           "drawsContent": true,
           "children": [
             {
+              "name": "Frame Overflow Controls Host Layer",
               "position": [35, 35],
               "bounds": [300, 150],
               "children": [
                 {
+                  "name": "Frame Clipping Layer",
                   "bounds": [285, 150],
                   "children": [
                     {
+                      "name": "Frame Scrolling Layer",
                       "children": [
                         {
+                          "name": "Content Root Layer",
                           "bounds": [285, 230],
                           "children": [
                             {
+                              "name": "LayoutView #document",
                               "bounds": [285, 230],
                               "drawsContent": true,
                               "backgroundColor": "#C0C0C0",
                               "children": [
                                 {
+                                  "name": "LayoutBlockFlow DIV id='iframe-content' class='box'",
                                   "position": [18, 10],
                                   "bounds": [210, 210],
                                   "contentsOpaque": true,
@@ -45,6 +54,7 @@
                   ]
                 },
                 {
+                  "name": "Frame Vertical Scrollbar Layer",
                   "position": [285, 0],
                   "bounds": [15, 150]
                 }
@@ -53,6 +63,7 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow (positioned) DIV class='overlay'",
           "position": [5, 5],
           "bounds": [50, 50],
           "drawsContent": true,
diff --git a/third_party/WebKit/LayoutTests/compositing/iframes/connect-compositing-iframe3-expected.txt b/third_party/WebKit/LayoutTests/compositing/iframes/connect-compositing-iframe3-expected.txt
index c00f334..5839791 100644
--- a/third_party/WebKit/LayoutTests/compositing/iframes/connect-compositing-iframe3-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/iframes/connect-compositing-iframe3-expected.txt
@@ -1,35 +1,44 @@
 
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutIFrame IFRAME id='iframe' class='composited'",
           "position": [8, 8],
           "bounds": [370, 220],
           "drawsContent": true,
           "children": [
             {
+              "name": "Frame Overflow Controls Host Layer",
               "position": [35, 35],
               "bounds": [300, 150],
               "children": [
                 {
+                  "name": "Frame Clipping Layer",
                   "bounds": [285, 150],
                   "children": [
                     {
+                      "name": "Frame Scrolling Layer",
                       "children": [
                         {
+                          "name": "Content Root Layer",
                           "bounds": [285, 230],
                           "children": [
                             {
+                              "name": "LayoutView #document",
                               "bounds": [285, 230],
                               "drawsContent": true,
                               "backgroundColor": "#C0C0C0",
                               "children": [
                                 {
+                                  "name": "LayoutBlockFlow DIV id='iframe-content' class='box'",
                                   "position": [18, 10],
                                   "bounds": [210, 210],
                                   "contentsOpaque": true,
@@ -45,6 +54,7 @@
                   ]
                 },
                 {
+                  "name": "Frame Vertical Scrollbar Layer",
                   "position": [285, 0],
                   "bounds": [15, 150]
                 }
diff --git a/third_party/WebKit/LayoutTests/compositing/iframes/enter-compositing-iframe-expected.txt b/third_party/WebKit/LayoutTests/compositing/iframes/enter-compositing-iframe-expected.txt
index a80e5498..8d96c672 100644
--- a/third_party/WebKit/LayoutTests/compositing/iframes/enter-compositing-iframe-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/iframes/enter-compositing-iframe-expected.txt
@@ -1,35 +1,44 @@
 
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutIFrame IFRAME id='parent-iframe'",
           "position": [8, 8],
           "bounds": [370, 220],
           "drawsContent": true,
           "children": [
             {
+              "name": "Frame Overflow Controls Host Layer",
               "position": [35, 35],
               "bounds": [300, 150],
               "children": [
                 {
+                  "name": "Frame Clipping Layer",
                   "bounds": [285, 150],
                   "children": [
                     {
+                      "name": "Frame Scrolling Layer",
                       "children": [
                         {
+                          "name": "Content Root Layer",
                           "bounds": [285, 230],
                           "children": [
                             {
+                              "name": "LayoutView #document",
                               "bounds": [285, 230],
                               "drawsContent": true,
                               "backgroundColor": "#C0C0C0",
                               "children": [
                                 {
+                                  "name": "LayoutBlockFlow DIV id='test' class='composited box'",
                                   "position": [18, 10],
                                   "bounds": [210, 210],
                                   "contentsOpaque": true,
@@ -45,6 +54,7 @@
                   ]
                 },
                 {
+                  "name": "Frame Vertical Scrollbar Layer",
                   "position": [285, 0],
                   "bounds": [15, 150]
                 }
@@ -53,6 +63,7 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow (positioned) DIV class='overlay'",
           "position": [5, 5],
           "bounds": [50, 50],
           "drawsContent": true,
diff --git a/third_party/WebKit/LayoutTests/compositing/iframes/iframe-resize-expected.txt b/third_party/WebKit/LayoutTests/compositing/iframes/iframe-resize-expected.txt
index 89ecd0d6..3ae65e99 100644
--- a/third_party/WebKit/LayoutTests/compositing/iframes/iframe-resize-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/iframes/iframe-resize-expected.txt
@@ -1,35 +1,44 @@
 
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutIFrame IFRAME id='parent-iframe' class='bigger'",
           "position": [8, 8],
           "bounds": [470, 190],
           "drawsContent": true,
           "children": [
             {
+              "name": "Frame Overflow Controls Host Layer",
               "position": [35, 35],
               "bounds": [400, 120],
               "children": [
                 {
+                  "name": "Frame Clipping Layer",
                   "bounds": [385, 120],
                   "children": [
                     {
+                      "name": "Frame Scrolling Layer",
                       "children": [
                         {
+                          "name": "Content Root Layer",
                           "bounds": [385, 230],
                           "children": [
                             {
+                              "name": "LayoutView #document",
                               "bounds": [385, 230],
                               "drawsContent": true,
                               "backgroundColor": "#C0C0C0",
                               "children": [
                                 {
+                                  "name": "LayoutBlockFlow DIV id='iframe-content' class='box'",
                                   "position": [18, 10],
                                   "bounds": [210, 210],
                                   "contentsOpaque": true,
@@ -45,6 +54,7 @@
                   ]
                 },
                 {
+                  "name": "Frame Vertical Scrollbar Layer",
                   "position": [385, 0],
                   "bounds": [15, 120]
                 }
@@ -53,6 +63,7 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow (positioned) DIV class='overlay'",
           "position": [5, 5],
           "bounds": [50, 50],
           "drawsContent": true,
diff --git a/third_party/WebKit/LayoutTests/compositing/iframes/iframe-size-from-zero-expected.txt b/third_party/WebKit/LayoutTests/compositing/iframes/iframe-size-from-zero-expected.txt
index 58df3a24..f3d3291d 100644
--- a/third_party/WebKit/LayoutTests/compositing/iframes/iframe-size-from-zero-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/iframes/iframe-size-from-zero-expected.txt
@@ -1,35 +1,44 @@
 
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutIFrame IFRAME id='iframe' class='expanded'",
           "position": [28, 28],
           "bounds": [330, 180],
           "drawsContent": true,
           "children": [
             {
+              "name": "Frame Overflow Controls Host Layer",
               "position": [15, 15],
               "bounds": [300, 150],
               "children": [
                 {
+                  "name": "Frame Clipping Layer",
                   "bounds": [285, 150],
                   "children": [
                     {
+                      "name": "Frame Scrolling Layer",
                       "children": [
                         {
+                          "name": "Content Root Layer",
                           "bounds": [285, 230],
                           "children": [
                             {
+                              "name": "LayoutView #document",
                               "bounds": [285, 230],
                               "drawsContent": true,
                               "backgroundColor": "#C0C0C0",
                               "children": [
                                 {
+                                  "name": "LayoutBlockFlow DIV id='iframe-content' class='box'",
                                   "position": [18, 10],
                                   "bounds": [210, 210],
                                   "contentsOpaque": true,
@@ -45,6 +54,7 @@
                   ]
                 },
                 {
+                  "name": "Frame Vertical Scrollbar Layer",
                   "position": [285, 0],
                   "bounds": [15, 150]
                 }
@@ -53,6 +63,7 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow (positioned) DIV class='overlay'",
           "position": [5, 5],
           "bounds": [50, 50],
           "drawsContent": true,
diff --git a/third_party/WebKit/LayoutTests/compositing/iframes/invisible-nested-iframe-hide-expected.txt b/third_party/WebKit/LayoutTests/compositing/iframes/invisible-nested-iframe-hide-expected.txt
index d5fa8a49..88c72c2 100644
--- a/third_party/WebKit/LayoutTests/compositing/iframes/invisible-nested-iframe-hide-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/iframes/invisible-nested-iframe-hide-expected.txt
@@ -1,12 +1,15 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow DIV class='box'",
           "position": [18, 10],
           "bounds": [210, 210],
           "contentsOpaque": true,
diff --git a/third_party/WebKit/LayoutTests/compositing/iframes/invisible-nested-iframe-show-expected.txt b/third_party/WebKit/LayoutTests/compositing/iframes/invisible-nested-iframe-show-expected.txt
index 78f21d9a..3fd5ca4b 100644
--- a/third_party/WebKit/LayoutTests/compositing/iframes/invisible-nested-iframe-show-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/iframes/invisible-nested-iframe-show-expected.txt
@@ -1,56 +1,71 @@
 
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutIFrame IFRAME",
           "position": [-12, -12],
           "bounds": [370, 220],
           "drawsContent": true,
           "children": [
             {
+              "name": "Frame Overflow Controls Host Layer",
               "position": [35, 35],
               "bounds": [300, 150],
               "children": [
                 {
+                  "name": "Frame Clipping Layer",
                   "bounds": [285, 150],
                   "children": [
                     {
+                      "name": "Frame Scrolling Layer",
                       "children": [
                         {
+                          "name": "Content Root Layer",
                           "bounds": [285, 192],
                           "children": [
                             {
+                              "name": "LayoutView #document",
                               "bounds": [285, 192],
                               "drawsContent": true,
                               "children": [
                                 {
+                                  "name": "LayoutIFrame IFRAME",
                                   "position": [8, 8],
                                   "bounds": [252, 172],
                                   "drawsContent": true,
                                   "children": [
                                     {
+                                      "name": "Frame Overflow Controls Host Layer",
                                       "position": [1, 1],
                                       "bounds": [250, 170],
                                       "children": [
                                         {
+                                          "name": "Frame Clipping Layer",
                                           "bounds": [250, 170],
                                           "children": [
                                             {
+                                              "name": "Frame Scrolling Layer",
                                               "children": [
                                                 {
+                                                  "name": "Content Root Layer",
                                                   "bounds": [250, 230],
                                                   "children": [
                                                     {
+                                                      "name": "LayoutView #document",
                                                       "bounds": [250, 230],
                                                       "drawsContent": true,
                                                       "backgroundColor": "#C0C0C0",
                                                       "children": [
                                                         {
+                                                          "name": "LayoutBlockFlow DIV id='iframe-content' class='box'",
                                                           "position": [18, 10],
                                                           "bounds": [210, 210],
                                                           "contentsOpaque": true,
@@ -78,6 +93,7 @@
                   ]
                 },
                 {
+                  "name": "Frame Vertical Scrollbar Layer",
                   "position": [285, 0],
                   "bounds": [15, 150]
                 }
@@ -86,6 +102,7 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow DIV class='box'",
           "position": [18, 202],
           "bounds": [210, 210],
           "contentsOpaque": true,
diff --git a/third_party/WebKit/LayoutTests/compositing/iframes/overlapped-iframe-expected.txt b/third_party/WebKit/LayoutTests/compositing/iframes/overlapped-iframe-expected.txt
index a80e5498..509057ba 100644
--- a/third_party/WebKit/LayoutTests/compositing/iframes/overlapped-iframe-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/iframes/overlapped-iframe-expected.txt
@@ -1,35 +1,44 @@
 
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutIFrame IFRAME id='parent-iframe'",
           "position": [8, 8],
           "bounds": [370, 220],
           "drawsContent": true,
           "children": [
             {
+              "name": "Frame Overflow Controls Host Layer",
               "position": [35, 35],
               "bounds": [300, 150],
               "children": [
                 {
+                  "name": "Frame Clipping Layer",
                   "bounds": [285, 150],
                   "children": [
                     {
+                      "name": "Frame Scrolling Layer",
                       "children": [
                         {
+                          "name": "Content Root Layer",
                           "bounds": [285, 230],
                           "children": [
                             {
+                              "name": "LayoutView #document",
                               "bounds": [285, 230],
                               "drawsContent": true,
                               "backgroundColor": "#C0C0C0",
                               "children": [
                                 {
+                                  "name": "LayoutBlockFlow DIV id='iframe-content' class='box'",
                                   "position": [18, 10],
                                   "bounds": [210, 210],
                                   "contentsOpaque": true,
@@ -45,6 +54,7 @@
                   ]
                 },
                 {
+                  "name": "Frame Vertical Scrollbar Layer",
                   "position": [285, 0],
                   "bounds": [15, 150]
                 }
@@ -53,6 +63,7 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow (positioned) DIV class='overlay'",
           "position": [5, 5],
           "bounds": [50, 50],
           "drawsContent": true,
diff --git a/third_party/WebKit/LayoutTests/compositing/iframes/overlapped-iframe-iframe-expected.txt b/third_party/WebKit/LayoutTests/compositing/iframes/overlapped-iframe-iframe-expected.txt
index 3568e77..d496684 100644
--- a/third_party/WebKit/LayoutTests/compositing/iframes/overlapped-iframe-iframe-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/iframes/overlapped-iframe-iframe-expected.txt
@@ -1,33 +1,42 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutIFrame (positioned) IFRAME",
           "bounds": [304, 304],
           "drawsContent": true,
           "children": [
             {
+              "name": "Frame Overflow Controls Host Layer",
               "position": [2, 2],
               "bounds": [300, 300],
               "children": [
                 {
+                  "name": "Frame Clipping Layer",
                   "bounds": [300, 300],
                   "children": [
                     {
+                      "name": "Frame Scrolling Layer",
                       "children": [
                         {
+                          "name": "Content Root Layer",
                           "bounds": [300, 300],
                           "children": [
                             {
+                              "name": "LayoutView #document",
                               "bounds": [300, 300],
                               "drawsContent": true,
                               "backgroundColor": "#C0C0C0",
                               "children": [
                                 {
+                                  "name": "LayoutBlockFlow DIV id='iframe-content' class='box'",
                                   "position": [18, 10],
                                   "bounds": [210, 210],
                                   "contentsOpaque": true,
@@ -47,6 +56,7 @@
           ]
         },
         {
+          "name": "LayoutIFrame (positioned) IFRAME id='overlap'",
           "position": [250, 0],
           "bounds": [304, 304],
           "drawsContent": true
diff --git a/third_party/WebKit/LayoutTests/compositing/iframes/overlapped-nested-iframes-expected.txt b/third_party/WebKit/LayoutTests/compositing/iframes/overlapped-nested-iframes-expected.txt
index f917c856..3a870e1 100644
--- a/third_party/WebKit/LayoutTests/compositing/iframes/overlapped-nested-iframes-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/iframes/overlapped-nested-iframes-expected.txt
@@ -1,56 +1,71 @@
 
 {
+  "name": "Content Root Layer",
   "bounds": [785, 1650],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [785, 1650],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutIFrame IFRAME",
           "position": [20, 150],
           "bounds": [284, 204],
           "drawsContent": true,
           "children": [
             {
+              "name": "Frame Overflow Controls Host Layer",
               "position": [2, 2],
               "bounds": [280, 200],
               "children": [
                 {
+                  "name": "Frame Clipping Layer",
                   "bounds": [280, 200],
                   "children": [
                     {
+                      "name": "Frame Scrolling Layer",
                       "children": [
                         {
+                          "name": "Content Root Layer",
                           "bounds": [280, 200],
                           "children": [
                             {
+                              "name": "LayoutView #document",
                               "bounds": [280, 200],
                               "drawsContent": true,
                               "children": [
                                 {
+                                  "name": "LayoutIFrame IFRAME",
                                   "position": [8, 8],
                                   "bounds": [252, 172],
                                   "drawsContent": true,
                                   "children": [
                                     {
+                                      "name": "Frame Overflow Controls Host Layer",
                                       "position": [1, 1],
                                       "bounds": [250, 170],
                                       "children": [
                                         {
+                                          "name": "Frame Clipping Layer",
                                           "bounds": [250, 170],
                                           "children": [
                                             {
+                                              "name": "Frame Scrolling Layer",
                                               "children": [
                                                 {
+                                                  "name": "Content Root Layer",
                                                   "bounds": [250, 230],
                                                   "children": [
                                                     {
+                                                      "name": "LayoutView #document",
                                                       "bounds": [250, 230],
                                                       "drawsContent": true,
                                                       "backgroundColor": "#C0C0C0",
                                                       "children": [
                                                         {
+                                                          "name": "LayoutBlockFlow DIV id='iframe-content' class='box'",
                                                           "position": [18, 10],
                                                           "bounds": [210, 210],
                                                           "contentsOpaque": true,
@@ -82,49 +97,62 @@
           ]
         },
         {
+          "name": "LayoutIFrame IFRAME",
           "position": [20, 374],
           "bounds": [284, 204],
           "drawsContent": true,
           "children": [
             {
+              "name": "Frame Overflow Controls Host Layer",
               "position": [2, 2],
               "bounds": [280, 200],
               "children": [
                 {
+                  "name": "Frame Clipping Layer",
                   "bounds": [280, 200],
                   "children": [
                     {
+                      "name": "Frame Scrolling Layer",
                       "children": [
                         {
+                          "name": "Content Root Layer",
                           "bounds": [280, 200],
                           "children": [
                             {
+                              "name": "LayoutView #document",
                               "bounds": [280, 200],
                               "drawsContent": true,
                               "children": [
                                 {
+                                  "name": "LayoutIFrame IFRAME",
                                   "position": [8, 8],
                                   "bounds": [252, 172],
                                   "drawsContent": true,
                                   "children": [
                                     {
+                                      "name": "Frame Overflow Controls Host Layer",
                                       "position": [1, 1],
                                       "bounds": [250, 170],
                                       "children": [
                                         {
+                                          "name": "Frame Clipping Layer",
                                           "bounds": [250, 170],
                                           "children": [
                                             {
+                                              "name": "Frame Scrolling Layer",
                                               "children": [
                                                 {
+                                                  "name": "Content Root Layer",
                                                   "bounds": [250, 230],
                                                   "children": [
                                                     {
+                                                      "name": "LayoutView #document",
                                                       "bounds": [250, 230],
                                                       "drawsContent": true,
                                                       "backgroundColor": "#C0C0C0",
                                                       "children": [
                                                         {
+                                                          "name": "LayoutBlockFlow DIV id='iframe-content' class='box'",
                                                           "position": [18, 10],
                                                           "bounds": [210, 210],
                                                           "contentsOpaque": true,
@@ -156,6 +184,7 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow (positioned) DIV id='banner'",
           "position": [0, 100],
           "bounds": [785, 120],
           "drawsContent": true,
diff --git a/third_party/WebKit/LayoutTests/compositing/iframes/resizer-expected.txt b/third_party/WebKit/LayoutTests/compositing/iframes/resizer-expected.txt
index a7d61f2..c2cf05c0 100644
--- a/third_party/WebKit/LayoutTests/compositing/iframes/resizer-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/iframes/resizer-expected.txt
@@ -1,35 +1,44 @@
 
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutIFrame IFRAME class='container'",
           "position": [8, 8],
           "bounds": [304, 154],
           "drawsContent": true,
           "children": [
             {
+              "name": "Frame Overflow Controls Host Layer",
               "position": [2, 2],
               "bounds": [300, 150],
               "children": [
                 {
+                  "name": "Frame Clipping Layer",
                   "bounds": [285, 150],
                   "children": [
                     {
+                      "name": "Frame Scrolling Layer",
                       "children": [
                         {
+                          "name": "Content Root Layer",
                           "bounds": [285, 230],
                           "children": [
                             {
+                              "name": "LayoutView #document",
                               "bounds": [285, 230],
                               "drawsContent": true,
                               "backgroundColor": "#C0C0C0",
                               "children": [
                                 {
+                                  "name": "LayoutBlockFlow DIV id='iframe-content' class='box'",
                                   "position": [18, 10],
                                   "bounds": [210, 210],
                                   "contentsOpaque": true,
@@ -45,15 +54,18 @@
                   ]
                 },
                 {
+                  "name": "Frame Vertical Scrollbar Layer",
                   "position": [285, 0],
                   "bounds": [15, 150]
                 }
               ]
             },
             {
+              "name": "Overflow Controls Host Layer",
               "bounds": [304, 154],
               "children": [
                 {
+                  "name": "Scroll Corner Layer",
                   "position": [287, 137],
                   "bounds": [15, 15],
                   "drawsContent": true
diff --git a/third_party/WebKit/LayoutTests/compositing/iframes/scrolling-iframe-expected.txt b/third_party/WebKit/LayoutTests/compositing/iframes/scrolling-iframe-expected.txt
index 39584e012..225aa06d 100644
--- a/third_party/WebKit/LayoutTests/compositing/iframes/scrolling-iframe-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/iframes/scrolling-iframe-expected.txt
@@ -1,35 +1,44 @@
 
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutIFrame IFRAME id='parent-iframe'",
           "position": [8, 8],
           "bounds": [370, 220],
           "drawsContent": true,
           "children": [
             {
+              "name": "Frame Overflow Controls Host Layer",
               "position": [35, 35],
               "bounds": [300, 150],
               "children": [
                 {
+                  "name": "Frame Clipping Layer",
                   "bounds": [285, 135],
                   "children": [
                     {
+                      "name": "Frame Scrolling Layer",
                       "children": [
                         {
+                          "name": "Content Root Layer",
                           "bounds": [508, 608],
                           "children": [
                             {
+                              "name": "LayoutView #document",
                               "bounds": [508, 608],
                               "drawsContent": true,
                               "backgroundColor": "#C0C0C0",
                               "children": [
                                 {
+                                  "name": "LayoutBlockFlow DIV id='iframe-content' class='box'",
                                   "position": [108, 100],
                                   "bounds": [200, 200],
                                   "contentsOpaque": true,
@@ -45,14 +54,17 @@
                   ]
                 },
                 {
+                  "name": "Frame Horizontal Scrollbar Layer",
                   "position": [0, 135],
                   "bounds": [285, 15]
                 },
                 {
+                  "name": "Frame Vertical Scrollbar Layer",
                   "position": [285, 0],
                   "bounds": [15, 135]
                 },
                 {
+                  "name": "Frame Scroll Corner Layer",
                   "position": [285, 135],
                   "bounds": [15, 15],
                   "drawsContent": true
@@ -62,6 +74,7 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow (positioned) DIV class='overlay'",
           "position": [5, 5],
           "bounds": [50, 50],
           "drawsContent": true,
diff --git a/third_party/WebKit/LayoutTests/compositing/iframes/visibility-hidden-transformed-content-expected.txt b/third_party/WebKit/LayoutTests/compositing/iframes/visibility-hidden-transformed-content-expected.txt
index e9f7954d..10aa3faf 100644
--- a/third_party/WebKit/LayoutTests/compositing/iframes/visibility-hidden-transformed-content-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/iframes/visibility-hidden-transformed-content-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true
diff --git a/third_party/WebKit/LayoutTests/compositing/images/clip-on-directly-composited-image-expected.txt b/third_party/WebKit/LayoutTests/compositing/images/clip-on-directly-composited-image-expected.txt
index 26f7469..6b082be7 100644
--- a/third_party/WebKit/LayoutTests/compositing/images/clip-on-directly-composited-image-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/images/clip-on-directly-composited-image-expected.txt
@@ -1,13 +1,16 @@
 
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutImage (positioned) IMG class='composited'",
           "position": [210, 23],
           "transformOrigin": [90, 90],
           "bounds": [140, 140],
diff --git a/third_party/WebKit/LayoutTests/compositing/images/direct-image-dynamic-border-draws-content-expected.txt b/third_party/WebKit/LayoutTests/compositing/images/direct-image-dynamic-border-draws-content-expected.txt
index e029342..7cb6537 100644
--- a/third_party/WebKit/LayoutTests/compositing/images/direct-image-dynamic-border-draws-content-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/images/direct-image-dynamic-border-draws-content-expected.txt
@@ -2,14 +2,17 @@
 layer tree before image style change
 
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutImage IMG class='composited'",
           "position": [8, 8],
           "bounds": [256, 256]
         }
@@ -21,14 +24,17 @@
 layer tree after image style change
 
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutImage IMG class='composited border'",
           "position": [8, 8],
           "bounds": [260, 260],
           "drawsContent": true
diff --git a/third_party/WebKit/LayoutTests/compositing/layer-creation/animation-overlap-with-children-expected.txt b/third_party/WebKit/LayoutTests/compositing/layer-creation/animation-overlap-with-children-expected.txt
index 2f6bd47..c11eefd0 100644
--- a/third_party/WebKit/LayoutTests/compositing/layer-creation/animation-overlap-with-children-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/layer-creation/animation-overlap-with-children-expected.txt
@@ -1,22 +1,27 @@
 Should be compositedShould not be composited
 Should be composited
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow DIV id='to-animate' class='container animating'",
           "position": [8, 8],
           "bounds": [262, 212],
           "drawsContent": true,
           "children": [
             {
+              "name": "Squashing Containment Layer",
               "shouldFlattenTransform": false,
               "children": [
                 {
+                  "name": "LayoutBlockFlow DIV class='composited banner'",
                   "position": [6, 6],
                   "bounds": [250, 50],
                   "contentsOpaque": true,
@@ -24,6 +29,7 @@
                   "backgroundColor": "#C0C0C0"
                 },
                 {
+                  "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV class='test1 box')",
                   "position": [11, 21],
                   "bounds": [100, 100],
                   "drawsContent": true
@@ -33,6 +39,7 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow (relative positioned) DIV class='box'",
           "position": [18, 230],
           "bounds": [100, 100],
           "contentsOpaque": true,
diff --git a/third_party/WebKit/LayoutTests/compositing/layer-creation/assumed-overlap-for-inline-transform-expected.txt b/third_party/WebKit/LayoutTests/compositing/layer-creation/assumed-overlap-for-inline-transform-expected.txt
index db4b413..14b9b27 100644
--- a/third_party/WebKit/LayoutTests/compositing/layer-creation/assumed-overlap-for-inline-transform-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/layer-creation/assumed-overlap-for-inline-transform-expected.txt
@@ -1,15 +1,19 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "Squashing Containment Layer",
           "shouldFlattenTransform": false,
           "children": [
             {
+              "name": "LayoutBlockFlow (relative positioned) DIV class='box'",
               "position": [8, 8],
               "bounds": [100, 100],
               "contentsOpaque": true,
@@ -17,6 +21,7 @@
               "backgroundColor": "#0000FF"
             },
             {
+              "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV class='box')",
               "position": [8, 108],
               "bounds": [100, 100],
               "drawsContent": true
diff --git a/third_party/WebKit/LayoutTests/compositing/layer-creation/compositing-reason-removed-expected.txt b/third_party/WebKit/LayoutTests/compositing/layer-creation/compositing-reason-removed-expected.txt
index b1c21914..8bc14e4d 100644
--- a/third_party/WebKit/LayoutTests/compositing/layer-creation/compositing-reason-removed-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/layer-creation/compositing-reason-removed-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -13,6 +15,12 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (relative positioned) DIV id='square'",
+      "reason": "compositing update"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/compositing/layer-creation/fixed-position-and-transform-expected.txt b/third_party/WebKit/LayoutTests/compositing/layer-creation/fixed-position-and-transform-expected.txt
index e12589e3..31ad4f95 100644
--- a/third_party/WebKit/LayoutTests/compositing/layer-creation/fixed-position-and-transform-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/layer-creation/fixed-position-and-transform-expected.txt
@@ -1,12 +1,15 @@
 {
+  "name": "Content Root Layer",
   "bounds": [785, 5021],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [785, 5021],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow (positioned) DIV id='indicator'",
           "position": [100, 1100],
           "bounds": [256, 256],
           "contentsOpaque": true,
@@ -14,6 +17,7 @@
           "backgroundColor": "#FF0000"
         },
         {
+          "name": "LayoutBlockFlow (positioned) DIV id='overlap'",
           "position": [0, 1000],
           "bounds": [500, 500],
           "contentsOpaque": true,
diff --git a/third_party/WebKit/LayoutTests/compositing/layer-creation/fixed-position-change-out-of-view-in-view-expected.txt b/third_party/WebKit/LayoutTests/compositing/layer-creation/fixed-position-change-out-of-view-in-view-expected.txt
index 2d7bbf1..4416db5 100644
--- a/third_party/WebKit/LayoutTests/compositing/layer-creation/fixed-position-change-out-of-view-in-view-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/layer-creation/fixed-position-change-out-of-view-in-view-expected.txt
@@ -1,13 +1,16 @@
 Layer tree when the fixed elements are out-of-view (should have just a root layer):
 {
+  "name": "Content Root Layer",
   "bounds": [785, 4016],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [785, 4016],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow (positioned) DIV id='fixed1'",
           "position": [100, -100],
           "bounds": [10, 10],
           "contentsOpaque": true,
@@ -15,6 +18,7 @@
           "backgroundColor": "#C0C0C0"
         },
         {
+          "name": "LayoutBlockFlow (positioned) DIV id='fixed2'",
           "position": [100, 100],
           "bounds": [10, 0],
           "contentsOpaque": true,
@@ -27,14 +31,17 @@
 }
 Layer tree when the fixed elements are in-view (both fixed elements should have layers):
 {
+  "name": "Content Root Layer",
   "bounds": [785, 4016],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [785, 4016],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow (positioned) DIV id='fixed1'",
           "position": [100, 50],
           "bounds": [10, 10],
           "contentsOpaque": true,
@@ -42,6 +49,7 @@
           "backgroundColor": "#C0C0C0"
         },
         {
+          "name": "LayoutBlockFlow (positioned) DIV id='fixed2'",
           "position": [100, 100],
           "bounds": [10, 10],
           "contentsOpaque": true,
@@ -54,14 +62,17 @@
 }
 Layer tree when the fixed elements are out-of-view again (should have just a root layer):
 {
+  "name": "Content Root Layer",
   "bounds": [785, 4016],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [785, 4016],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow (positioned) DIV id='fixed1'",
           "position": [100, -100],
           "bounds": [10, 10],
           "contentsOpaque": true,
@@ -69,6 +80,7 @@
           "backgroundColor": "#C0C0C0"
         },
         {
+          "name": "LayoutBlockFlow (positioned) DIV id='fixed2'",
           "position": [100, 100],
           "bounds": [10, 0],
           "contentsOpaque": true,
diff --git a/third_party/WebKit/LayoutTests/compositing/layer-creation/fixed-position-in-fixed-overflow-expected.txt b/third_party/WebKit/LayoutTests/compositing/layer-creation/fixed-position-in-fixed-overflow-expected.txt
index 7117f5be..2e4671c 100644
--- a/third_party/WebKit/LayoutTests/compositing/layer-creation/fixed-position-in-fixed-overflow-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/layer-creation/fixed-position-in-fixed-overflow-expected.txt
@@ -1,26 +1,32 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow (positioned) DIV class='overflow fixed'",
           "position": [8, 13],
           "bounds": [800, 600],
           "shouldFlattenTransform": false,
           "drawsContent": true,
           "children": [
             {
+              "name": "Scrolling Layer",
               "bounds": [785, 600],
               "shouldFlattenTransform": false,
               "children": [
                 {
+                  "name": "Scrolling Contents Layer",
                   "bounds": [785, 1000],
                   "drawsContent": true,
                   "children": [
                     {
+                      "name": "LayoutBlockFlow (positioned) DIV class='yellow fixed'",
                       "position": [192, 0],
                       "bounds": [100, 100],
                       "contentsOpaque": true,
@@ -32,9 +38,11 @@
               ]
             },
             {
+              "name": "Overflow Controls Host Layer",
               "bounds": [800, 600],
               "children": [
                 {
+                  "name": "Vertical Scrollbar Layer",
                   "position": [785, 0],
                   "bounds": [15, 600]
                 }
diff --git a/third_party/WebKit/LayoutTests/compositing/layer-creation/fixed-position-no-content-expected.txt b/third_party/WebKit/LayoutTests/compositing/layer-creation/fixed-position-no-content-expected.txt
index f39addb..7fef2c3 100644
--- a/third_party/WebKit/LayoutTests/compositing/layer-creation/fixed-position-no-content-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/layer-creation/fixed-position-no-content-expected.txt
@@ -1,16 +1,20 @@
 {
+  "name": "Content Root Layer",
   "bounds": [785, 1021],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [785, 1021],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow (positioned) DIV class='fixed'",
           "position": [10, 10],
           "bounds": [50, 50]
         },
         {
+          "name": "LayoutBlockFlow (positioned) DIV class='absolute'",
           "position": [40, 40],
           "bounds": [100, 100],
           "contentsOpaque": true,
diff --git a/third_party/WebKit/LayoutTests/compositing/layer-creation/fixed-position-nonscrollable-body-expected.txt b/third_party/WebKit/LayoutTests/compositing/layer-creation/fixed-position-nonscrollable-body-expected.txt
index b59bec9..e17f804 100644
--- a/third_party/WebKit/LayoutTests/compositing/layer-creation/fixed-position-nonscrollable-body-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/layer-creation/fixed-position-nonscrollable-body-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 4021],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 4021],
       "contentsOpaque": true,
       "drawsContent": true
diff --git a/third_party/WebKit/LayoutTests/compositing/layer-creation/fixed-position-nonscrollable-body-mismatch-containers-expected.txt b/third_party/WebKit/LayoutTests/compositing/layer-creation/fixed-position-nonscrollable-body-mismatch-containers-expected.txt
index 89faca6..f8c9555 100644
--- a/third_party/WebKit/LayoutTests/compositing/layer-creation/fixed-position-nonscrollable-body-mismatch-containers-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/layer-creation/fixed-position-nonscrollable-body-mismatch-containers-expected.txt
@@ -1,42 +1,51 @@
 Even though the fixed-position element's container is nonscrollable, it should still be composited because one of its ancestors is scrolling.
 
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow DIV class='scrollable bigBox'",
           "position": [8, 68],
           "bounds": [302, 302],
           "shouldFlattenTransform": false,
           "drawsContent": true,
           "children": [
             {
+              "name": "Scrolling Layer",
               "position": [1, 1],
               "bounds": [285, 285],
               "shouldFlattenTransform": false,
               "children": [
                 {
+                  "name": "Scrolling Contents Layer",
                   "bounds": [285, 800],
                   "drawsContent": true
                 }
               ]
             },
             {
+              "name": "Overflow Controls Host Layer",
               "bounds": [302, 302],
               "children": [
                 {
+                  "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
@@ -46,6 +55,7 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow (positioned) DIV class='fixed lime box'",
           "position": [10, 100],
           "bounds": [100, 100],
           "contentsOpaque": true,
diff --git a/third_party/WebKit/LayoutTests/compositing/layer-creation/fixed-position-nonscrollable-body-overlap-expected.txt b/third_party/WebKit/LayoutTests/compositing/layer-creation/fixed-position-nonscrollable-body-overlap-expected.txt
index e7e21ff..8cb635f 100644
--- a/third_party/WebKit/LayoutTests/compositing/layer-creation/fixed-position-nonscrollable-body-overlap-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/layer-creation/fixed-position-nonscrollable-body-overlap-expected.txt
@@ -1,14 +1,17 @@
 Even though we can opt-out of fixed-position compositing for unscrollable fixed-position containers, we still need to composite fixed-position layers that need compositing for other reasons such as overlap.
 
 {
+  "name": "Content Root Layer",
   "bounds": [800, 4024],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 4024],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow (positioned) DIV class='absolute composited red box'",
           "position": [10, 100],
           "bounds": [100, 100],
           "contentsOpaque": true,
@@ -16,6 +19,7 @@
           "backgroundColor": "#FF0000"
         },
         {
+          "name": "LayoutBlockFlow (positioned) DIV class='fixed lime box'",
           "position": [10, 100],
           "bounds": [100, 100],
           "contentsOpaque": true,
diff --git a/third_party/WebKit/LayoutTests/compositing/layer-creation/fixed-position-nonscrollable-iframes-in-scrollable-page-expected.txt b/third_party/WebKit/LayoutTests/compositing/layer-creation/fixed-position-nonscrollable-iframes-in-scrollable-page-expected.txt
index 6773977..20ddbf3 100644
--- a/third_party/WebKit/LayoutTests/compositing/layer-creation/fixed-position-nonscrollable-iframes-in-scrollable-page-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/layer-creation/fixed-position-nonscrollable-iframes-in-scrollable-page-expected.txt
@@ -1,13 +1,16 @@
 In all iframes, the green fixed-position element should not be composited.
 {
+  "name": "Content Root Layer",
   "bounds": [785, 4016],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [785, 4016],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow (positioned) DIV class='composited box'",
           "position": [50, 360],
           "bounds": [300, 100],
           "contentsOpaque": true,
@@ -15,11 +18,13 @@
           "backgroundColor": "#00FFFF"
         },
         {
+          "name": "LayoutIFrame (positioned) IFRAME id='iframe2' class='composited'",
           "position": [10, 200],
           "bounds": [154, 154],
           "drawsContent": true
         },
         {
+          "name": "LayoutIFrame (positioned) IFRAME id='iframe3'",
           "position": [10, 380],
           "bounds": [154, 154],
           "drawsContent": true
diff --git a/third_party/WebKit/LayoutTests/compositing/layer-creation/fixed-position-out-of-view-expected.txt b/third_party/WebKit/LayoutTests/compositing/layer-creation/fixed-position-out-of-view-expected.txt
index e7be6b3..51195f38 100644
--- a/third_party/WebKit/LayoutTests/compositing/layer-creation/fixed-position-out-of-view-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/layer-creation/fixed-position-out-of-view-expected.txt
@@ -1,15 +1,19 @@
 {
+  "name": "Content Root Layer",
   "bounds": [785, 1021],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [785, 1021],
       "contentsOpaque": true,
       "children": [
         {
+          "name": "LayoutBlockFlow HTML",
           "bounds": [785, 1021],
           "drawsContent": true,
           "children": [
             {
+              "name": "LayoutBlockFlow (positioned) DIV class='fixed'",
               "position": [8, 1013],
               "bounds": [10, 10],
               "contentsOpaque": true,
@@ -17,6 +21,7 @@
               "backgroundColor": "#C0C0C0"
             },
             {
+              "name": "LayoutBlockFlow (positioned) DIV class='fixed'",
               "position": [8, -100],
               "bounds": [10, 10],
               "contentsOpaque": true,
@@ -24,6 +29,7 @@
               "backgroundColor": "#C0C0C0"
             },
             {
+              "name": "LayoutBlockFlow (positioned) DIV class='fixed'",
               "position": [1000, 0],
               "bounds": [10, 10],
               "contentsOpaque": true,
@@ -31,12 +37,14 @@
               "backgroundColor": "#C0C0C0"
             },
             {
+              "name": "LayoutBlockFlow (positioned) DIV class='fixed'",
               "bounds": [10, 10],
               "contentsOpaque": true,
               "drawsContent": true,
               "backgroundColor": "#C0C0C0"
             },
             {
+              "name": "LayoutBlockFlow HTML (foreground) Layer",
               "bounds": [785, 1021],
               "drawsContent": true
             }
diff --git a/third_party/WebKit/LayoutTests/compositing/layer-creation/fixed-position-out-of-view-positioning-expected.txt b/third_party/WebKit/LayoutTests/compositing/layer-creation/fixed-position-out-of-view-positioning-expected.txt
index 1a79f42..30bba4a0 100644
--- a/third_party/WebKit/LayoutTests/compositing/layer-creation/fixed-position-out-of-view-positioning-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/layer-creation/fixed-position-out-of-view-positioning-expected.txt
@@ -5,14 +5,17 @@
 The layer trees before and after should be the same, except for the position of the 50x50 sized composited fixed position layer.
 BEFORE:
 {
+  "name": "Content Root Layer",
   "bounds": [2008, 2016],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [2008, 2016],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow (positioned) DIV class='positionedAndTransformed fixed'",
           "position": [20, -80],
           "bounds": [50, 50],
           "contentsOpaque": true,
@@ -31,14 +34,17 @@
 }
 AFTER:
 {
+  "name": "Content Root Layer",
   "bounds": [2008, 2016],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [2008, 2016],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow (positioned) DIV class='positionedAndTransformed fixed'",
           "position": [20, -70],
           "bounds": [50, 50],
           "contentsOpaque": true,
diff --git a/third_party/WebKit/LayoutTests/compositing/layer-creation/fixed-position-out-of-view-scaled-expected.txt b/third_party/WebKit/LayoutTests/compositing/layer-creation/fixed-position-out-of-view-scaled-expected.txt
index bb4db32..cfff51d 100644
--- a/third_party/WebKit/LayoutTests/compositing/layer-creation/fixed-position-out-of-view-scaled-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/layer-creation/fixed-position-out-of-view-scaled-expected.txt
@@ -1,13 +1,16 @@
 Not scaled:
 {
+  "name": "Content Root Layer",
   "bounds": [4008, 4016],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [4008, 4016],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow (positioned) DIV class='fixed'",
           "position": [8, -100],
           "bounds": [10, 10],
           "contentsOpaque": true,
@@ -15,6 +18,7 @@
           "backgroundColor": "#C0C0C0"
         },
         {
+          "name": "LayoutBlockFlow (positioned) DIV class='fixed'",
           "position": [8, 1008],
           "bounds": [10, 10],
           "contentsOpaque": true,
@@ -22,6 +26,7 @@
           "backgroundColor": "#C0C0C0"
         },
         {
+          "name": "LayoutBlockFlow (positioned) DIV class='fixed'",
           "position": [1000, 0],
           "bounds": [10, 10],
           "contentsOpaque": true,
@@ -29,6 +34,7 @@
           "backgroundColor": "#C0C0C0"
         },
         {
+          "name": "LayoutBlockFlow (positioned) DIV class='fixed'",
           "position": [600, 0],
           "bounds": [10, 10],
           "contentsOpaque": true,
@@ -36,6 +42,7 @@
           "backgroundColor": "#C0C0C0"
         },
         {
+          "name": "LayoutBlockFlow (positioned) DIV class='fixed'",
           "bounds": [10, 10],
           "contentsOpaque": true,
           "drawsContent": true,
@@ -47,14 +54,17 @@
 }
 Scale=0.5:
 {
+  "name": "Content Root Layer",
   "bounds": [4008, 4016],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [4008, 4016],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow (positioned) DIV class='fixed'",
           "position": [8, -100],
           "bounds": [10, 10],
           "contentsOpaque": true,
@@ -62,6 +72,7 @@
           "backgroundColor": "#C0C0C0"
         },
         {
+          "name": "LayoutBlockFlow (positioned) DIV class='fixed'",
           "position": [8, 1008],
           "bounds": [10, 10],
           "contentsOpaque": true,
@@ -69,6 +80,7 @@
           "backgroundColor": "#C0C0C0"
         },
         {
+          "name": "LayoutBlockFlow (positioned) DIV class='fixed'",
           "position": [1000, 0],
           "bounds": [10, 10],
           "contentsOpaque": true,
@@ -76,6 +88,7 @@
           "backgroundColor": "#C0C0C0"
         },
         {
+          "name": "LayoutBlockFlow (positioned) DIV class='fixed'",
           "position": [600, 0],
           "bounds": [10, 10],
           "contentsOpaque": true,
@@ -83,6 +96,7 @@
           "backgroundColor": "#C0C0C0"
         },
         {
+          "name": "LayoutBlockFlow (positioned) DIV class='fixed'",
           "bounds": [10, 10],
           "contentsOpaque": true,
           "drawsContent": true,
@@ -94,14 +108,17 @@
 }
 Scale=1.5:
 {
+  "name": "Content Root Layer",
   "bounds": [4008, 4016],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [4008, 4016],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow (positioned) DIV class='fixed'",
           "position": [8, -100],
           "bounds": [10, 10],
           "contentsOpaque": true,
@@ -109,6 +126,7 @@
           "backgroundColor": "#C0C0C0"
         },
         {
+          "name": "LayoutBlockFlow (positioned) DIV class='fixed'",
           "position": [8, 1008],
           "bounds": [10, 10],
           "contentsOpaque": true,
@@ -116,6 +134,7 @@
           "backgroundColor": "#C0C0C0"
         },
         {
+          "name": "LayoutBlockFlow (positioned) DIV class='fixed'",
           "position": [1000, 0],
           "bounds": [10, 10],
           "contentsOpaque": true,
@@ -123,6 +142,7 @@
           "backgroundColor": "#C0C0C0"
         },
         {
+          "name": "LayoutBlockFlow (positioned) DIV class='fixed'",
           "position": [600, 0],
           "bounds": [10, 10],
           "contentsOpaque": true,
@@ -130,6 +150,7 @@
           "backgroundColor": "#C0C0C0"
         },
         {
+          "name": "LayoutBlockFlow (positioned) DIV class='fixed'",
           "bounds": [10, 10],
           "contentsOpaque": true,
           "drawsContent": true,
diff --git a/third_party/WebKit/LayoutTests/compositing/layer-creation/fixed-position-out-of-view-scaled-scroll-expected.txt b/third_party/WebKit/LayoutTests/compositing/layer-creation/fixed-position-out-of-view-scaled-scroll-expected.txt
index a59e8759..29ac591 100644
--- a/third_party/WebKit/LayoutTests/compositing/layer-creation/fixed-position-out-of-view-scaled-scroll-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/layer-creation/fixed-position-out-of-view-scaled-scroll-expected.txt
@@ -1,13 +1,16 @@
 Not scaled:
 {
+  "name": "Content Root Layer",
   "bounds": [4008, 4016],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [4008, 4016],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow (positioned) DIV class='fixed'",
           "position": [108, 0],
           "bounds": [10, 10],
           "contentsOpaque": true,
@@ -15,6 +18,7 @@
           "backgroundColor": "#C0C0C0"
         },
         {
+          "name": "LayoutBlockFlow (positioned) DIV class='fixed'",
           "position": [108, 1108],
           "bounds": [10, 10],
           "contentsOpaque": true,
@@ -22,6 +26,7 @@
           "backgroundColor": "#C0C0C0"
         },
         {
+          "name": "LayoutBlockFlow (positioned) DIV class='fixed'",
           "position": [1100, 100],
           "bounds": [10, 10],
           "contentsOpaque": true,
@@ -29,6 +34,7 @@
           "backgroundColor": "#C0C0C0"
         },
         {
+          "name": "LayoutBlockFlow (positioned) DIV class='fixed'",
           "position": [700, 100],
           "bounds": [10, 10],
           "contentsOpaque": true,
@@ -36,6 +42,7 @@
           "backgroundColor": "#C0C0C0"
         },
         {
+          "name": "LayoutBlockFlow (positioned) DIV class='fixed'",
           "position": [100, 100],
           "bounds": [10, 10],
           "contentsOpaque": true,
@@ -48,14 +55,17 @@
 }
 Scale=0.5:
 {
+  "name": "Content Root Layer",
   "bounds": [4008, 4016],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [4008, 4016],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow (positioned) DIV class='fixed'",
           "position": [108, 0],
           "bounds": [10, 10],
           "contentsOpaque": true,
@@ -63,6 +73,7 @@
           "backgroundColor": "#C0C0C0"
         },
         {
+          "name": "LayoutBlockFlow (positioned) DIV class='fixed'",
           "position": [108, 1108],
           "bounds": [10, 10],
           "contentsOpaque": true,
@@ -70,6 +81,7 @@
           "backgroundColor": "#C0C0C0"
         },
         {
+          "name": "LayoutBlockFlow (positioned) DIV class='fixed'",
           "position": [1100, 100],
           "bounds": [10, 10],
           "contentsOpaque": true,
@@ -77,6 +89,7 @@
           "backgroundColor": "#C0C0C0"
         },
         {
+          "name": "LayoutBlockFlow (positioned) DIV class='fixed'",
           "position": [700, 100],
           "bounds": [10, 10],
           "contentsOpaque": true,
@@ -84,6 +97,7 @@
           "backgroundColor": "#C0C0C0"
         },
         {
+          "name": "LayoutBlockFlow (positioned) DIV class='fixed'",
           "position": [100, 100],
           "bounds": [10, 10],
           "contentsOpaque": true,
@@ -96,14 +110,17 @@
 }
 Scale=1.5:
 {
+  "name": "Content Root Layer",
   "bounds": [4008, 4016],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [4008, 4016],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow (positioned) DIV class='fixed'",
           "position": [108, 0],
           "bounds": [10, 10],
           "contentsOpaque": true,
@@ -111,6 +128,7 @@
           "backgroundColor": "#C0C0C0"
         },
         {
+          "name": "LayoutBlockFlow (positioned) DIV class='fixed'",
           "position": [108, 1108],
           "bounds": [10, 10],
           "contentsOpaque": true,
@@ -118,6 +136,7 @@
           "backgroundColor": "#C0C0C0"
         },
         {
+          "name": "LayoutBlockFlow (positioned) DIV class='fixed'",
           "position": [1100, 100],
           "bounds": [10, 10],
           "contentsOpaque": true,
@@ -125,6 +144,7 @@
           "backgroundColor": "#C0C0C0"
         },
         {
+          "name": "LayoutBlockFlow (positioned) DIV class='fixed'",
           "position": [700, 100],
           "bounds": [10, 10],
           "contentsOpaque": true,
@@ -132,6 +152,7 @@
           "backgroundColor": "#C0C0C0"
         },
         {
+          "name": "LayoutBlockFlow (positioned) DIV class='fixed'",
           "position": [100, 100],
           "bounds": [10, 10],
           "contentsOpaque": true,
diff --git a/third_party/WebKit/LayoutTests/compositing/layer-creation/fixed-position-out-of-view-with-backdrop-filter-expected.txt b/third_party/WebKit/LayoutTests/compositing/layer-creation/fixed-position-out-of-view-with-backdrop-filter-expected.txt
index 3d6a98e7..7bae386 100644
--- a/third_party/WebKit/LayoutTests/compositing/layer-creation/fixed-position-out-of-view-with-backdrop-filter-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/layer-creation/fixed-position-out-of-view-with-backdrop-filter-expected.txt
@@ -1,34 +1,42 @@
 {
+  "name": "Content Root Layer",
   "bounds": [785, 1021],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [785, 1021],
       "contentsOpaque": true,
       "children": [
         {
+          "name": "LayoutBlockFlow HTML",
           "bounds": [785, 1021],
           "drawsContent": true,
           "children": [
             {
+              "name": "LayoutBlockFlow (positioned) DIV class='fixed'",
               "position": [8, 1013],
               "bounds": [10, 10],
               "drawsContent": true
             },
             {
+              "name": "LayoutBlockFlow (positioned) DIV class='fixed'",
               "position": [8, -100],
               "bounds": [10, 10],
               "drawsContent": true
             },
             {
+              "name": "LayoutBlockFlow (positioned) DIV class='fixed'",
               "position": [1000, 0],
               "bounds": [10, 10],
               "drawsContent": true
             },
             {
+              "name": "LayoutBlockFlow (positioned) DIV class='fixed'",
               "bounds": [10, 10],
               "drawsContent": true
             },
             {
+              "name": "LayoutBlockFlow HTML (foreground) Layer",
               "bounds": [785, 1021],
               "drawsContent": true
             }
diff --git a/third_party/WebKit/LayoutTests/compositing/layer-creation/main-thread-scrolling-for-non-composited-fixed-position-expected.txt b/third_party/WebKit/LayoutTests/compositing/layer-creation/main-thread-scrolling-for-non-composited-fixed-position-expected.txt
index e63b9c43..530646b 100644
--- a/third_party/WebKit/LayoutTests/compositing/layer-creation/main-thread-scrolling-for-non-composited-fixed-position-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/layer-creation/main-thread-scrolling-for-non-composited-fixed-position-expected.txt
@@ -1,8 +1,10 @@
 TEST
 {
+  "name": "Content Root Layer",
   "bounds": [785, 5021],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [785, 5021],
       "contentsOpaque": true,
       "drawsContent": true
diff --git a/third_party/WebKit/LayoutTests/compositing/layer-creation/main-thread-scrolling-for-non-composited-fixed-position-if-overflow-hidden-expected.txt b/third_party/WebKit/LayoutTests/compositing/layer-creation/main-thread-scrolling-for-non-composited-fixed-position-if-overflow-hidden-expected.txt
index 7567d76..f1412d6 100644
--- a/third_party/WebKit/LayoutTests/compositing/layer-creation/main-thread-scrolling-for-non-composited-fixed-position-if-overflow-hidden-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/layer-creation/main-thread-scrolling-for-non-composited-fixed-position-if-overflow-hidden-expected.txt
@@ -1,8 +1,10 @@
 TEST
 {
+  "name": "Content Root Layer",
   "bounds": [800, 5021],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 5021],
       "contentsOpaque": true,
       "drawsContent": true
diff --git a/third_party/WebKit/LayoutTests/compositing/layer-creation/no-compositing-for-fixed-position-under-transform-expected.txt b/third_party/WebKit/LayoutTests/compositing/layer-creation/no-compositing-for-fixed-position-under-transform-expected.txt
index ea70903..c06016d 100644
--- a/third_party/WebKit/LayoutTests/compositing/layer-creation/no-compositing-for-fixed-position-under-transform-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/layer-creation/no-compositing-for-fixed-position-under-transform-expected.txt
@@ -1,13 +1,16 @@
 TEST
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow DIV class='transform'",
           "position": [8, 8],
           "bounds": [100, 30],
           "drawsContent": true
diff --git a/third_party/WebKit/LayoutTests/compositing/layer-creation/no-main-thread-scrolling-for-non-composited-fixed-position-without-scroll-expected.txt b/third_party/WebKit/LayoutTests/compositing/layer-creation/no-main-thread-scrolling-for-non-composited-fixed-position-without-scroll-expected.txt
index 846d193..4792ed5d 100644
--- a/third_party/WebKit/LayoutTests/compositing/layer-creation/no-main-thread-scrolling-for-non-composited-fixed-position-without-scroll-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/layer-creation/no-main-thread-scrolling-for-non-composited-fixed-position-without-scroll-expected.txt
@@ -1,8 +1,10 @@
 TEST
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true
diff --git a/third_party/WebKit/LayoutTests/compositing/layer-creation/overflow-scroll-overlap-expected.txt b/third_party/WebKit/LayoutTests/compositing/layer-creation/overflow-scroll-overlap-expected.txt
index 5b666ed..6bce7be 100644
--- a/third_party/WebKit/LayoutTests/compositing/layer-creation/overflow-scroll-overlap-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/layer-creation/overflow-scroll-overlap-expected.txt
@@ -1,19 +1,24 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "Squashing Containment Layer",
           "shouldFlattenTransform": false,
           "children": [
             {
+              "name": "LayoutBlockFlow DIV class='composited'",
               "position": [8, 8],
               "bounds": [30, 30]
             },
             {
+              "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV id='scroller' class='overflow')",
               "position": [20, 20],
               "bounds": [306, 206],
               "drawsContent": true
@@ -21,11 +26,13 @@
           ]
         },
         {
+          "name": "Ancestor Clipping Layer",
           "position": [23, 23],
           "bounds": [285, 200],
           "shouldFlattenTransform": false,
           "children": [
             {
+              "name": "LayoutBlockFlow (relative positioned) DIV class='box'",
               "position": [20, 45],
               "bounds": [210, 100],
               "contentsOpaque": true,
diff --git a/third_party/WebKit/LayoutTests/compositing/layer-creation/overlap-animation-clipping-expected.txt b/third_party/WebKit/LayoutTests/compositing/layer-creation/overlap-animation-clipping-expected.txt
index bea12d0..10df6d6 100644
--- a/third_party/WebKit/LayoutTests/compositing/layer-creation/overlap-animation-clipping-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/layer-creation/overlap-animation-clipping-expected.txt
@@ -1,12 +1,15 @@
 {
+  "name": "Content Root Layer",
   "bounds": [785, 812],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [785, 812],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow (relative positioned) DIV id='to-animate1' class='box animating1'",
           "position": [18, 120],
           "bounds": [100, 100],
           "contentsOpaque": true,
@@ -20,6 +23,7 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow (relative positioned) DIV class='container'",
           "position": [58, 230],
           "bounds": [122, 462],
           "contentsOpaque": true,
@@ -27,10 +31,12 @@
           "backgroundColor": "#FFFFFF",
           "children": [
             {
+              "name": "Child Containment Layer",
               "position": [1, 1],
               "bounds": [120, 460],
               "children": [
                 {
+                  "name": "LayoutBlockFlow (relative positioned) DIV class='box gray force-layer'",
                   "position": [10, 10],
                   "bounds": [100, 100],
                   "contentsOpaque": true,
@@ -44,6 +50,7 @@
                   ]
                 },
                 {
+                  "name": "LayoutBlockFlow (relative positioned) DIV id='to-animate2' class='box animating2'",
                   "position": [10, 230],
                   "bounds": [100, 100],
                   "contentsOpaque": true,
@@ -57,6 +64,7 @@
                   ]
                 },
                 {
+                  "name": "LayoutBlockFlow (relative positioned) DIV class='box yellow'",
                   "position": [10, 340],
                   "bounds": [100, 100],
                   "contentsOpaque": true,
@@ -68,6 +76,7 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow (relative positioned) DIV class='box yellow'",
           "position": [18, 702],
           "bounds": [100, 100],
           "contentsOpaque": true,
diff --git a/third_party/WebKit/LayoutTests/compositing/layer-creation/overlap-animation-container-expected.txt b/third_party/WebKit/LayoutTests/compositing/layer-creation/overlap-animation-container-expected.txt
index 9386327..a9945d7e 100644
--- a/third_party/WebKit/LayoutTests/compositing/layer-creation/overlap-animation-container-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/layer-creation/overlap-animation-container-expected.txt
@@ -1,13 +1,16 @@
 Before:
 {
+  "name": "Content Root Layer",
   "bounds": [785, 802],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [785, 802],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow (relative positioned) DIV id='to-animate1' class='box animating1'",
           "position": [18, 120],
           "bounds": [100, 100],
           "contentsOpaque": true,
@@ -21,15 +24,18 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow (relative positioned) DIV class='container'",
           "position": [47, 230],
           "bounds": [144, 452],
           "drawsContent": true,
           "backgroundColor": "#FFFFFF",
           "children": [
             {
+              "name": "Squashing Containment Layer",
               "shouldFlattenTransform": false,
               "children": [
                 {
+                  "name": "LayoutBlockFlow (relative positioned) DIV class='box gray force-layer'",
                   "position": [22, 11],
                   "bounds": [100, 100],
                   "contentsOpaque": true,
@@ -43,6 +49,7 @@
                   ]
                 },
                 {
+                  "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV class='box yellow')",
                   "position": [-29, 462],
                   "bounds": [100, 100],
                   "drawsContent": true
@@ -58,14 +65,17 @@
 
 After:
 {
+  "name": "Content Root Layer",
   "bounds": [785, 802],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [785, 802],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow (relative positioned) DIV id='to-animate1' class='box animating1'",
           "position": [18, 120],
           "bounds": [100, 100],
           "contentsOpaque": true,
@@ -79,6 +89,7 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow (relative positioned) DIV class='container'",
           "position": [58, 230],
           "bounds": [122, 452],
           "contentsOpaque": true,
@@ -86,6 +97,7 @@
           "backgroundColor": "#FFFFFF",
           "children": [
             {
+              "name": "LayoutBlockFlow (relative positioned) DIV class='box gray force-layer'",
               "position": [11, 11],
               "bounds": [100, 100],
               "contentsOpaque": true,
@@ -99,6 +111,7 @@
               ]
             },
             {
+              "name": "LayoutBlockFlow (relative positioned) DIV id='first-green-box' class='box green rotate-45deg'",
               "position": [10, 120],
               "bounds": [102, 102],
               "drawsContent": true,
@@ -111,9 +124,11 @@
               ]
             },
             {
+              "name": "Squashing Containment Layer",
               "shouldFlattenTransform": false,
               "children": [
                 {
+                  "name": "LayoutBlockFlow (relative positioned) DIV class='box green rotate-45deg'",
                   "position": [10, 230],
                   "bounds": [102, 102],
                   "drawsContent": true,
@@ -126,6 +141,7 @@
                   ]
                 },
                 {
+                  "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV class='box green')",
                   "position": [-40, 340],
                   "bounds": [152, 222],
                   "drawsContent": true
diff --git a/third_party/WebKit/LayoutTests/compositing/layer-creation/overlap-animation-expected.txt b/third_party/WebKit/LayoutTests/compositing/layer-creation/overlap-animation-expected.txt
index 3ae4d2a5..92ba7ca 100644
--- a/third_party/WebKit/LayoutTests/compositing/layer-creation/overlap-animation-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/layer-creation/overlap-animation-expected.txt
@@ -1,21 +1,26 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow (relative positioned) DIV class='container'",
           "position": [8, 8],
           "bounds": [122, 242],
           "drawsContent": true,
           "children": [
             {
+              "name": "Child Containment Layer",
               "position": [1, 1],
               "bounds": [120, 240],
               "children": [
                 {
+                  "name": "LayoutBlockFlow (relative positioned) DIV id='to-animate' class='animating box'",
                   "position": [10, 10],
                   "bounds": [100, 100],
                   "contentsOpaque": true,
@@ -29,6 +34,7 @@
                   ]
                 },
                 {
+                  "name": "LayoutBlockFlow (relative positioned) DIV class='box'",
                   "position": [10, 120],
                   "bounds": [100, 100],
                   "contentsOpaque": true,
diff --git a/third_party/WebKit/LayoutTests/compositing/layer-creation/overlap-child-layer-expected.txt b/third_party/WebKit/LayoutTests/compositing/layer-creation/overlap-child-layer-expected.txt
index d82d0970..2796ba5 100644
--- a/third_party/WebKit/LayoutTests/compositing/layer-creation/overlap-child-layer-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/layer-creation/overlap-child-layer-expected.txt
@@ -1,21 +1,26 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "Squashing Containment Layer",
           "shouldFlattenTransform": false,
           "children": [
             {
+              "name": "LayoutBlockFlow (positioned) DIV id='container'",
               "transformOrigin": [400, 0],
               "bounds": [256, 256],
               "contentsOpaque": true,
               "drawsContent": true
             },
             {
+              "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV id='green')",
               "bounds": [300, 300],
               "drawsContent": true
             }
diff --git a/third_party/WebKit/LayoutTests/compositing/layer-creation/overlap-clipping-expected.txt b/third_party/WebKit/LayoutTests/compositing/layer-creation/overlap-clipping-expected.txt
index 625c078..16c78325 100644
--- a/third_party/WebKit/LayoutTests/compositing/layer-creation/overlap-clipping-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/layer-creation/overlap-clipping-expected.txt
@@ -1,17 +1,21 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "Ancestor Clipping Layer",
           "position": [50, 50],
           "bounds": [100, 100],
           "shouldFlattenTransform": false,
           "children": [
             {
+              "name": "LayoutBlockFlow DIV id='child'",
               "bounds": [500, 100],
               "contentsOpaque": true,
               "drawsContent": true,
@@ -20,9 +24,11 @@
           ]
         },
         {
+          "name": "Squashing Containment Layer",
           "shouldFlattenTransform": false,
           "children": [
             {
+              "name": "LayoutBlockFlow DIV id='child'",
               "position": [50, 200],
               "bounds": [500, 100],
               "contentsOpaque": true,
@@ -30,6 +36,7 @@
               "backgroundColor": "#008000"
             },
             {
+              "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV id='overlap')",
               "position": [450, 200],
               "bounds": [100, 100],
               "drawsContent": true
diff --git a/third_party/WebKit/LayoutTests/compositing/layer-creation/overlap-transformed-3d-expected.txt b/third_party/WebKit/LayoutTests/compositing/layer-creation/overlap-transformed-3d-expected.txt
index eeba34a9..092f90a 100644
--- a/third_party/WebKit/LayoutTests/compositing/layer-creation/overlap-transformed-3d-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/layer-creation/overlap-transformed-3d-expected.txt
@@ -1,13 +1,16 @@
 Before:
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow (positioned) DIV id='green-box' class='box green center composited'",
           "position": [108, 108],
           "bounds": [100, 100],
           "contentsOpaque": true,
@@ -27,17 +30,21 @@
 
 After:
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "Squashing Containment Layer",
           "shouldFlattenTransform": false,
           "children": [
             {
+              "name": "LayoutBlockFlow (positioned) DIV id='green-box' class='box green center composited rotated-3d'",
               "position": [108, 108],
               "bounds": [100, 100],
               "contentsOpaque": true,
@@ -51,6 +58,7 @@
               ]
             },
             {
+              "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV class='box top left')",
               "position": [8, 8],
               "bounds": [300, 300],
               "drawsContent": true
diff --git a/third_party/WebKit/LayoutTests/compositing/layer-creation/overlap-transformed-and-clipped-expected.txt b/third_party/WebKit/LayoutTests/compositing/layer-creation/overlap-transformed-and-clipped-expected.txt
index 0785da6..fc6256a6 100644
--- a/third_party/WebKit/LayoutTests/compositing/layer-creation/overlap-transformed-and-clipped-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/layer-creation/overlap-transformed-and-clipped-expected.txt
@@ -1,12 +1,15 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow (positioned) DIV class='container clips'",
           "bounds": [100, 100],
           "drawsContent": true,
           "transform": [
@@ -17,18 +20,22 @@
           ],
           "children": [
             {
+              "name": "Child Containment Layer",
               "bounds": [100, 100],
               "children": [
                 {
+                  "name": "Squashing Containment Layer",
                   "shouldFlattenTransform": false,
                   "children": [
                     {
+                      "name": "LayoutBlockFlow (positioned) DIV class='under composited'",
                       "bounds": [100, 100],
                       "contentsOpaque": true,
                       "drawsContent": true,
                       "backgroundColor": "#FF0000"
                     },
                     {
+                      "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV class='over')",
                       "bounds": [100, 100],
                       "drawsContent": true
                     }
diff --git a/third_party/WebKit/LayoutTests/compositing/layer-creation/overlap-transformed-layer-expected.txt b/third_party/WebKit/LayoutTests/compositing/layer-creation/overlap-transformed-layer-expected.txt
index 761ee7f..caa7e2ae 100644
--- a/third_party/WebKit/LayoutTests/compositing/layer-creation/overlap-transformed-layer-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/layer-creation/overlap-transformed-layer-expected.txt
@@ -1,12 +1,15 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow DIV id='container'",
           "position": [23, 8],
           "transformOrigin": [377, 0],
           "bounds": [256, 256],
@@ -20,11 +23,13 @@
           ],
           "children": [
             {
+              "name": "LayoutBlockFlow (positioned) DIV id='composited'",
               "position": [385, 0]
             }
           ]
         },
         {
+          "name": "LayoutBlockFlow (positioned) DIV id='green'",
           "bounds": [300, 300],
           "contentsOpaque": true,
           "drawsContent": true,
diff --git a/third_party/WebKit/LayoutTests/compositing/layer-creation/overlap-transformed-layer-with-transform-body-expected.txt b/third_party/WebKit/LayoutTests/compositing/layer-creation/overlap-transformed-layer-with-transform-body-expected.txt
index 099a7f1..d8802f42 100644
--- a/third_party/WebKit/LayoutTests/compositing/layer-creation/overlap-transformed-layer-with-transform-body-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/layer-creation/overlap-transformed-layer-with-transform-body-expected.txt
@@ -1,17 +1,21 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow BODY",
           "position": [8, 8],
           "bounds": [784, 584],
           "drawsContent": true,
           "children": [
             {
+              "name": "LayoutBlockFlow DIV id='container'",
               "position": [15, 0],
               "transformOrigin": [377, 0],
               "bounds": [256, 256],
@@ -25,11 +29,13 @@
               ],
               "children": [
                 {
+                  "name": "LayoutBlockFlow (positioned) DIV id='composited'",
                   "position": [385, 0]
                 }
               ]
             },
             {
+              "name": "LayoutBlockFlow (positioned) DIV id='green'",
               "bounds": [300, 300],
               "contentsOpaque": true,
               "drawsContent": true,
diff --git a/third_party/WebKit/LayoutTests/compositing/layer-creation/overlap-transformed-preserved-3d-expected.txt b/third_party/WebKit/LayoutTests/compositing/layer-creation/overlap-transformed-preserved-3d-expected.txt
index 1b13f90..9f71b9c 100644
--- a/third_party/WebKit/LayoutTests/compositing/layer-creation/overlap-transformed-preserved-3d-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/layer-creation/overlap-transformed-preserved-3d-expected.txt
@@ -1,16 +1,20 @@
 123456Before:
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow (positioned) DIV id='green-box' class='center box-container'",
           "position": [108, 108],
           "children": [
             {
+              "name": "Child Transform Layer",
               "transformOrigin": [50, 50],
               "shouldFlattenTransform": false,
               "transform": [
@@ -21,6 +25,7 @@
               ],
               "children": [
                 {
+                  "name": "LayoutBlockFlow DIV id='camera' class='rotate-3d-start'",
                   "transformOrigin": [50, 50],
                   "shouldFlattenTransform": false,
                   "3dRenderingContext": 1,
@@ -32,6 +37,7 @@
                   ],
                   "children": [
                     {
+                      "name": "LayoutBlockFlow (positioned) DIV class='side side-1'",
                       "bounds": [100, 100],
                       "3dRenderingContext": 1,
                       "drawsContent": true,
@@ -44,6 +50,7 @@
                       ]
                     },
                     {
+                      "name": "LayoutBlockFlow (positioned) DIV class='side side-2'",
                       "bounds": [100, 100],
                       "3dRenderingContext": 1,
                       "drawsContent": true,
@@ -56,6 +63,7 @@
                       ]
                     },
                     {
+                      "name": "LayoutBlockFlow (positioned) DIV class='side side-3'",
                       "bounds": [100, 100],
                       "3dRenderingContext": 1,
                       "drawsContent": true,
@@ -68,6 +76,7 @@
                       ]
                     },
                     {
+                      "name": "LayoutBlockFlow (positioned) DIV class='side side-4'",
                       "bounds": [100, 100],
                       "3dRenderingContext": 1,
                       "drawsContent": true,
@@ -80,6 +89,7 @@
                       ]
                     },
                     {
+                      "name": "LayoutBlockFlow (positioned) DIV class='side side-5'",
                       "bounds": [100, 100],
                       "3dRenderingContext": 1,
                       "drawsContent": true,
@@ -92,6 +102,7 @@
                       ]
                     },
                     {
+                      "name": "LayoutBlockFlow (positioned) DIV class='side side-6'",
                       "bounds": [100, 100],
                       "3dRenderingContext": 1,
                       "drawsContent": true,
@@ -116,17 +127,21 @@
 
 After:
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow (positioned) DIV id='green-box' class='center box-container'",
           "position": [108, 108],
           "children": [
             {
+              "name": "Child Transform Layer",
               "transformOrigin": [50, 50],
               "shouldFlattenTransform": false,
               "transform": [
@@ -137,6 +152,7 @@
               ],
               "children": [
                 {
+                  "name": "LayoutBlockFlow DIV id='camera' class='rotate-3d-start rotate-3d-end'",
                   "transformOrigin": [50, 50],
                   "shouldFlattenTransform": false,
                   "3dRenderingContext": 1,
@@ -148,6 +164,7 @@
                   ],
                   "children": [
                     {
+                      "name": "LayoutBlockFlow (positioned) DIV class='side side-1'",
                       "bounds": [100, 100],
                       "3dRenderingContext": 1,
                       "drawsContent": true,
@@ -160,6 +177,7 @@
                       ]
                     },
                     {
+                      "name": "LayoutBlockFlow (positioned) DIV class='side side-2'",
                       "bounds": [100, 100],
                       "3dRenderingContext": 1,
                       "drawsContent": true,
@@ -172,6 +190,7 @@
                       ]
                     },
                     {
+                      "name": "LayoutBlockFlow (positioned) DIV class='side side-3'",
                       "bounds": [100, 100],
                       "3dRenderingContext": 1,
                       "drawsContent": true,
@@ -184,6 +203,7 @@
                       ]
                     },
                     {
+                      "name": "LayoutBlockFlow (positioned) DIV class='side side-4'",
                       "bounds": [100, 100],
                       "3dRenderingContext": 1,
                       "drawsContent": true,
@@ -196,6 +216,7 @@
                       ]
                     },
                     {
+                      "name": "LayoutBlockFlow (positioned) DIV class='side side-5'",
                       "bounds": [100, 100],
                       "3dRenderingContext": 1,
                       "drawsContent": true,
@@ -208,6 +229,7 @@
                       ]
                     },
                     {
+                      "name": "LayoutBlockFlow (positioned) DIV class='side side-6'",
                       "bounds": [100, 100],
                       "3dRenderingContext": 1,
                       "drawsContent": true,
@@ -226,9 +248,11 @@
           ]
         },
         {
+          "name": "Squashing Containment Layer",
           "shouldFlattenTransform": false,
           "children": [
             {
+              "name": "LayoutBlockFlow (positioned) DIV class='box top left'",
               "position": [8, 8],
               "bounds": [100, 150],
               "contentsOpaque": true,
@@ -236,6 +260,7 @@
               "backgroundColor": "#808080"
             },
             {
+              "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV class='box top right')",
               "position": [8, 8],
               "bounds": [300, 300],
               "drawsContent": true
diff --git a/third_party/WebKit/LayoutTests/compositing/layer-creation/overlap-transforms-expected.txt b/third_party/WebKit/LayoutTests/compositing/layer-creation/overlap-transforms-expected.txt
index e062eda..aeb7a9ed 100644
--- a/third_party/WebKit/LayoutTests/compositing/layer-creation/overlap-transforms-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/layer-creation/overlap-transforms-expected.txt
@@ -1,21 +1,26 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow (relative positioned) DIV class='container'",
           "position": [8, 8],
           "bounds": [122, 242],
           "drawsContent": true,
           "children": [
             {
+              "name": "Child Containment Layer",
               "position": [1, 1],
               "bounds": [120, 240],
               "children": [
                 {
+                  "name": "LayoutBlockFlow (relative positioned) DIV class='transformed box'",
                   "position": [10, 10],
                   "bounds": [100, 100],
                   "contentsOpaque": true,
diff --git a/third_party/WebKit/LayoutTests/compositing/layer-creation/remove-clipping-layer-with-no-children-expected.txt b/third_party/WebKit/LayoutTests/compositing/layer-creation/remove-clipping-layer-with-no-children-expected.txt
index 00951626..702bdad 100644
--- a/third_party/WebKit/LayoutTests/compositing/layer-creation/remove-clipping-layer-with-no-children-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/layer-creation/remove-clipping-layer-with-no-children-expected.txt
@@ -1,12 +1,15 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow DIV id='parent' class='fade'",
           "position": [8, 8],
           "bounds": [400, 400],
           "contentsOpaque": true,
diff --git a/third_party/WebKit/LayoutTests/compositing/layer-creation/rotate3d-overlap-expected.txt b/third_party/WebKit/LayoutTests/compositing/layer-creation/rotate3d-overlap-expected.txt
index 1042880e..2adfdeb 100644
--- a/third_party/WebKit/LayoutTests/compositing/layer-creation/rotate3d-overlap-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/layer-creation/rotate3d-overlap-expected.txt
@@ -1,20 +1,24 @@
  
  
  {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow (relative positioned) DIV class='box translateZ'",
           "position": [25, 25],
           "bounds": [106, 106],
           "drawsContent": true,
           "backgroundColor": "#0000FF"
         },
         {
+          "name": "LayoutBlockFlow (relative positioned) DIV class='composited box rotate15'",
           "position": [169, 25],
           "bounds": [106, 106],
           "drawsContent": true,
@@ -27,9 +31,11 @@
           ]
         },
         {
+          "name": "Squashing Containment Layer",
           "shouldFlattenTransform": false,
           "children": [
             {
+              "name": "LayoutBlockFlow (relative positioned) DIV class='composited box rotate45'",
               "position": [313, 25],
               "bounds": [106, 106],
               "drawsContent": true,
@@ -42,6 +48,7 @@
               ]
             },
             {
+              "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV class='box')",
               "position": [313, 145],
               "bounds": [106, 106],
               "drawsContent": true
diff --git a/third_party/WebKit/LayoutTests/compositing/layer-creation/scroll-partial-update-expected.txt b/third_party/WebKit/LayoutTests/compositing/layer-creation/scroll-partial-update-expected.txt
index 143f329..1375a59 100644
--- a/third_party/WebKit/LayoutTests/compositing/layer-creation/scroll-partial-update-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/layer-creation/scroll-partial-update-expected.txt
@@ -1,20 +1,25 @@
 scroll me
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "Squashing Containment Layer",
           "shouldFlattenTransform": false,
           "children": [
             {
+              "name": "LayoutBlockFlow DIV id='composited'",
               "position": [8, 8],
               "bounds": [20, 20]
             },
             {
+              "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV id='overlay')",
               "position": [10, 8],
               "bounds": [400, 204],
               "drawsContent": true
diff --git a/third_party/WebKit/LayoutTests/compositing/layer-creation/should-invoke-deferred-compositing-expected.txt b/third_party/WebKit/LayoutTests/compositing/layer-creation/should-invoke-deferred-compositing-expected.txt
index 6352c87..2dc99db5 100644
--- a/third_party/WebKit/LayoutTests/compositing/layer-creation/should-invoke-deferred-compositing-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/layer-creation/should-invoke-deferred-compositing-expected.txt
@@ -1,15 +1,19 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow (positioned) DIV id='container' class='composited box'",
           "bounds": [300, 300],
           "children": [
             {
+              "name": "LayoutHTMLCanvas (positioned) CANVAS",
               "bounds": [200, 200],
               "drawsContent": true,
               "paintInvalidations": [
@@ -24,6 +28,16 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutHTMLCanvas (positioned) CANVAS",
+      "reason": "subtree"
+    },
+    {
+      "object": "LayoutHTMLCanvas (positioned) CANVAS",
+      "reason": "layoutObject insertion"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/compositing/layer-creation/spanOverlapsCanvas-expected.txt b/third_party/WebKit/LayoutTests/compositing/layer-creation/spanOverlapsCanvas-expected.txt
index c8e2677..6592122 100644
--- a/third_party/WebKit/LayoutTests/compositing/layer-creation/spanOverlapsCanvas-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/layer-creation/spanOverlapsCanvas-expected.txt
@@ -1,20 +1,25 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "Squashing Containment Layer",
           "shouldFlattenTransform": false,
           "children": [
             {
+              "name": "LayoutHTMLCanvas CANVAS id='world'",
               "position": [8, 8],
               "bounds": [100, 50],
               "drawsContent": true
             },
             {
+              "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV id='output')",
               "position": [8, 8],
               "bounds": [100, 50],
               "drawsContent": true
diff --git a/third_party/WebKit/LayoutTests/compositing/layer-creation/squashing-into-ancestor-clipping-layer-change-expected.txt b/third_party/WebKit/LayoutTests/compositing/layer-creation/squashing-into-ancestor-clipping-layer-change-expected.txt
index 3777f1c..2189e03 100644
--- a/third_party/WebKit/LayoutTests/compositing/layer-creation/squashing-into-ancestor-clipping-layer-change-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/layer-creation/squashing-into-ancestor-clipping-layer-change-expected.txt
@@ -1,17 +1,21 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "Ancestor Clipping Layer",
           "position": [8, 8],
           "bounds": [100, 100],
           "shouldFlattenTransform": false,
           "children": [
             {
+              "name": "LayoutBlockFlow (relative positioned) DIV id='composited'",
               "position": [0, 50],
               "bounds": [100, 100],
               "contentsOpaque": true,
@@ -19,6 +23,7 @@
               "backgroundColor": "#FA8072"
             },
             {
+              "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='squashed')",
               "position": [0, 50],
               "bounds": [100, 100],
               "drawsContent": true
diff --git a/third_party/WebKit/LayoutTests/compositing/layer-creation/stacking-context-overlap-expected.txt b/third_party/WebKit/LayoutTests/compositing/layer-creation/stacking-context-overlap-expected.txt
index 9eb2256..58c5e055 100644
--- a/third_party/WebKit/LayoutTests/compositing/layer-creation/stacking-context-overlap-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/layer-creation/stacking-context-overlap-expected.txt
@@ -1,15 +1,19 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "Squashing Containment Layer",
           "shouldFlattenTransform": false,
           "children": [
             {
+              "name": "LayoutBlockFlow DIV class='trigger'",
               "position": [8, 8],
               "bounds": [20, 20],
               "contentsOpaque": true,
@@ -17,6 +21,7 @@
               "backgroundColor": "#0000FF"
             },
             {
+              "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV class='container')",
               "position": [8, 18],
               "bounds": [142, 142],
               "drawsContent": true
diff --git a/third_party/WebKit/LayoutTests/compositing/layer-creation/stacking-context-overlap-nested-expected.txt b/third_party/WebKit/LayoutTests/compositing/layer-creation/stacking-context-overlap-nested-expected.txt
index 7c29d58..8310bdf 100644
--- a/third_party/WebKit/LayoutTests/compositing/layer-creation/stacking-context-overlap-nested-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/layer-creation/stacking-context-overlap-nested-expected.txt
@@ -1,18 +1,22 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow (positioned) DIV class='composited box'",
           "position": [10, 10],
           "bounds": [120, 120],
           "drawsContent": true,
           "backgroundColor": "#008000",
           "children": [
             {
+              "name": "LayoutBlockFlow (positioned) DIV class='composited box'",
               "position": [50, 50],
               "bounds": [220, 120],
               "drawsContent": true,
@@ -21,6 +25,7 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow (positioned) DIV id='indicator'",
           "position": [75, 75],
           "bounds": [56, 56],
           "contentsOpaque": true,
diff --git a/third_party/WebKit/LayoutTests/compositing/layer-creation/translatez-added-expected.txt b/third_party/WebKit/LayoutTests/compositing/layer-creation/translatez-added-expected.txt
index d5fa8a49..c2f80ac 100644
--- a/third_party/WebKit/LayoutTests/compositing/layer-creation/translatez-added-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/layer-creation/translatez-added-expected.txt
@@ -1,12 +1,15 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow DIV id='test' class='box composited'",
           "position": [18, 10],
           "bounds": [210, 210],
           "contentsOpaque": true,
diff --git a/third_party/WebKit/LayoutTests/compositing/layer-creation/translatez-overlap-expected.txt b/third_party/WebKit/LayoutTests/compositing/layer-creation/translatez-overlap-expected.txt
index a87f8f1..4c6c0a4 100644
--- a/third_party/WebKit/LayoutTests/compositing/layer-creation/translatez-overlap-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/layer-creation/translatez-overlap-expected.txt
@@ -1,12 +1,15 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow (relative positioned) DIV class='composited box'",
           "position": [18, 10],
           "bounds": [100, 100],
           "contentsOpaque": true,
diff --git a/third_party/WebKit/LayoutTests/compositing/layer-creation/translatez-removed-expected.txt b/third_party/WebKit/LayoutTests/compositing/layer-creation/translatez-removed-expected.txt
index e9f7954d..10aa3faf 100644
--- a/third_party/WebKit/LayoutTests/compositing/layer-creation/translatez-removed-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/layer-creation/translatez-removed-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true
diff --git a/third_party/WebKit/LayoutTests/compositing/masks/mask-layer-size-expected.txt b/third_party/WebKit/LayoutTests/compositing/masks/mask-layer-size-expected.txt
index 2aeec94..835768ae 100644
--- a/third_party/WebKit/LayoutTests/compositing/masks/mask-layer-size-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/masks/mask-layer-size-expected.txt
@@ -1,12 +1,15 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow DIV id='masked'",
           "position": [10, 10],
           "bounds": [400, 200],
           "contentsOpaque": true,
diff --git a/third_party/WebKit/LayoutTests/compositing/overflow-trumps-transform-style-expected.txt b/third_party/WebKit/LayoutTests/compositing/overflow-trumps-transform-style-expected.txt
index f9356c2..3e99c96 100644
--- a/third_party/WebKit/LayoutTests/compositing/overflow-trumps-transform-style-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/overflow-trumps-transform-style-expected.txt
@@ -1,14 +1,17 @@
 preserve-3d
 flat
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow DIV id='box1' class='box'",
           "position": [18, 10],
           "bounds": [100, 100],
           "contentsOpaque": true,
@@ -24,6 +27,7 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow DIV id='box2' class='box'",
           "position": [18, 120],
           "bounds": [100, 100],
           "contentsOpaque": true,
diff --git a/third_party/WebKit/LayoutTests/compositing/overflow/accelerated-overflow-scroll-should-not-affect-perspective-expected.txt b/third_party/WebKit/LayoutTests/compositing/overflow/accelerated-overflow-scroll-should-not-affect-perspective-expected.txt
index ad67ede..1685faa 100644
--- a/third_party/WebKit/LayoutTests/compositing/overflow/accelerated-overflow-scroll-should-not-affect-perspective-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/overflow/accelerated-overflow-scroll-should-not-affect-perspective-expected.txt
@@ -1,18 +1,22 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow (positioned) DIV class='container'",
           "position": [8, 8],
           "bounds": [200, 200],
           "shouldFlattenTransform": false,
           "drawsContent": true,
           "children": [
             {
+              "name": "Child Transform Layer",
               "bounds": [200, 200],
               "shouldFlattenTransform": false,
               "transform": [
@@ -23,14 +27,17 @@
               ],
               "children": [
                 {
+                  "name": "Scrolling Layer",
                   "bounds": [185, 185],
                   "shouldFlattenTransform": false,
                   "children": [
                     {
+                      "name": "Scrolling Contents Layer",
                       "bounds": [185, 265],
                       "shouldFlattenTransform": false,
                       "children": [
                         {
+                          "name": "LayoutBlockFlow (positioned) DIV class='child first'",
                           "position": [0, 65],
                           "bounds": [60, 200],
                           "contentsOpaque": true,
@@ -44,6 +51,7 @@
                           ]
                         },
                         {
+                          "name": "LayoutBlockFlow (positioned) DIV class='child second'",
                           "position": [65, 65],
                           "bounds": [60, 200],
                           "contentsOpaque": true,
@@ -63,17 +71,21 @@
               ]
             },
             {
+              "name": "Overflow Controls Host Layer",
               "bounds": [200, 200],
               "children": [
                 {
+                  "name": "Horizontal Scrollbar Layer",
                   "position": [0, 185],
                   "bounds": [185, 15]
                 },
                 {
+                  "name": "Vertical Scrollbar Layer",
                   "position": [185, 0],
                   "bounds": [15, 185]
                 },
                 {
+                  "name": "Scroll Corner Layer",
                   "position": [185, 185],
                   "bounds": [15, 15],
                   "drawsContent": true
diff --git a/third_party/WebKit/LayoutTests/compositing/overflow/clip-descendents-expected.txt b/third_party/WebKit/LayoutTests/compositing/overflow/clip-descendents-expected.txt
index 68ecea3e..1ee5c1f 100644
--- a/third_party/WebKit/LayoutTests/compositing/overflow/clip-descendents-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/overflow/clip-descendents-expected.txt
@@ -1,17 +1,21 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "Ancestor Clipping Layer",
           "position": [48, 38],
           "bounds": [60, 70],
           "shouldFlattenTransform": false,
           "children": [
             {
+              "name": "LayoutBlockFlow DIV class='box'",
               "position": [2, 12],
               "bounds": [100, 150],
               "contentsOpaque": true,
@@ -27,11 +31,13 @@
           ]
         },
         {
+          "name": "Ancestor Clipping Layer",
           "position": [240, 38],
           "bounds": [60, 70],
           "shouldFlattenTransform": false,
           "children": [
             {
+              "name": "LayoutBlockFlow DIV class='box'",
               "position": [2, 12],
               "bounds": [100, 150],
               "contentsOpaque": true,
@@ -47,14 +53,17 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow (positioned) DIV class='container'",
           "position": [48, 230],
           "bounds": [60, 70],
           "drawsContent": true,
           "children": [
             {
+              "name": "Child Containment Layer",
               "bounds": [60, 70],
               "children": [
                 {
+                  "name": "LayoutBlockFlow DIV class='box'",
                   "position": [2, 12],
                   "bounds": [100, 150],
                   "contentsOpaque": true,
@@ -72,14 +81,17 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow (positioned) DIV class='container'",
           "position": [240, 230],
           "bounds": [60, 70],
           "drawsContent": true,
           "children": [
             {
+              "name": "Child Containment Layer",
               "bounds": [60, 70],
               "children": [
                 {
+                  "name": "LayoutBlockFlow DIV class='box'",
                   "position": [2, 12],
                   "bounds": [100, 150],
                   "contentsOpaque": true,
diff --git a/third_party/WebKit/LayoutTests/compositing/overflow/composited-scrolling-paint-phases-expected.txt b/third_party/WebKit/LayoutTests/compositing/overflow/composited-scrolling-paint-phases-expected.txt
index 4013b92d..074f4b6 100644
--- a/third_party/WebKit/LayoutTests/compositing/overflow/composited-scrolling-paint-phases-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/overflow/composited-scrolling-paint-phases-expected.txt
@@ -1,4 +1,5 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "paintingPhases": [
     "GraphicsLayerPaintBackground",
@@ -7,6 +8,7 @@
   ],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "paintingPhases": [
@@ -16,6 +18,7 @@
       ],
       "children": [
         {
+          "name": "LayoutBlockFlow HTML",
           "bounds": [800, 242],
           "drawsContent": true,
           "paintingPhases": [
@@ -24,6 +27,7 @@
           ],
           "children": [
             {
+              "name": "LayoutBlockFlow (relative positioned) DIV class='composited'",
               "position": [29, 31],
               "bounds": [80, 10],
               "contentsOpaque": true,
@@ -36,6 +40,7 @@
               ]
             },
             {
+              "name": "LayoutBlockFlow HTML (foreground) Layer",
               "bounds": [800, 242],
               "drawsContent": true,
               "paintingPhases": [
@@ -43,6 +48,7 @@
               ]
             },
             {
+              "name": "LayoutBlockFlow DIV class='container'",
               "position": [28, 20],
               "bounds": [202, 202],
               "shouldFlattenTransform": false,
@@ -54,6 +60,7 @@
               ],
               "children": [
                 {
+                  "name": "Scrolling Layer",
                   "position": [1, 1],
                   "bounds": [185, 185],
                   "shouldFlattenTransform": false,
@@ -64,6 +71,7 @@
                   ],
                   "children": [
                     {
+                      "name": "Scrolling Contents Layer",
                       "bounds": [185, 715],
                       "drawsContent": true,
                       "paintingPhases": [
@@ -75,6 +83,7 @@
                   ]
                 },
                 {
+                  "name": "Overflow Controls Host Layer",
                   "bounds": [202, 202],
                   "paintingPhases": [
                     "GraphicsLayerPaintBackground",
@@ -83,6 +92,7 @@
                   ],
                   "children": [
                     {
+                      "name": "Horizontal Scrollbar Layer",
                       "position": [1, 186],
                       "bounds": [185, 15],
                       "paintingPhases": [
@@ -92,6 +102,7 @@
                       ]
                     },
                     {
+                      "name": "Vertical Scrollbar Layer",
                       "position": [186, 1],
                       "bounds": [15, 185],
                       "paintingPhases": [
@@ -101,6 +112,7 @@
                       ]
                     },
                     {
+                      "name": "Scroll Corner Layer",
                       "position": [186, 186],
                       "bounds": [15, 15],
                       "drawsContent": true,
diff --git a/third_party/WebKit/LayoutTests/compositing/overflow/content-gains-scrollbars-expected.txt b/third_party/WebKit/LayoutTests/compositing/overflow/content-gains-scrollbars-expected.txt
index 10f2551..ac01f9bb 100644
--- a/third_party/WebKit/LayoutTests/compositing/overflow/content-gains-scrollbars-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/overflow/content-gains-scrollbars-expected.txt
@@ -1,25 +1,31 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow (positioned) DIV class='container'",
           "position": [8, 13],
           "bounds": [100, 100],
           "shouldFlattenTransform": false,
           "drawsContent": true,
           "children": [
             {
+              "name": "Scrolling Layer",
               "bounds": [85, 100],
               "shouldFlattenTransform": false,
               "children": [
                 {
+                  "name": "Scrolling Contents Layer",
                   "bounds": [85, 200],
                   "children": [
                     {
+                      "name": "LayoutBlockFlow (positioned) DIV id='vertical' class='content tall'",
                       "bounds": [10, 200]
                     }
                   ]
@@ -27,9 +33,11 @@
               ]
             },
             {
+              "name": "Overflow Controls Host Layer",
               "bounds": [100, 100],
               "children": [
                 {
+                  "name": "Vertical Scrollbar Layer",
                   "position": [85, 0],
                   "bounds": [15, 100]
                 }
@@ -38,19 +46,23 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow (positioned) DIV class='container'",
           "position": [8, 13],
           "bounds": [100, 100],
           "shouldFlattenTransform": false,
           "drawsContent": true,
           "children": [
             {
+              "name": "Scrolling Layer",
               "bounds": [100, 85],
               "shouldFlattenTransform": false,
               "children": [
                 {
+                  "name": "Scrolling Contents Layer",
                   "bounds": [200, 85],
                   "children": [
                     {
+                      "name": "LayoutBlockFlow (positioned) DIV id='horizontal' class='content wide'",
                       "bounds": [200, 10]
                     }
                   ]
@@ -58,9 +70,11 @@
               ]
             },
             {
+              "name": "Overflow Controls Host Layer",
               "bounds": [100, 100],
               "children": [
                 {
+                  "name": "Horizontal Scrollbar Layer",
                   "position": [0, 85],
                   "bounds": [100, 15]
                 }
@@ -69,19 +83,23 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow (positioned) DIV class='container'",
           "position": [8, 13],
           "bounds": [100, 100],
           "shouldFlattenTransform": false,
           "drawsContent": true,
           "children": [
             {
+              "name": "Scrolling Layer",
               "bounds": [85, 85],
               "shouldFlattenTransform": false,
               "children": [
                 {
+                  "name": "Scrolling Contents Layer",
                   "bounds": [200, 200],
                   "children": [
                     {
+                      "name": "LayoutBlockFlow (positioned) DIV id='both' class='content wide tall'",
                       "bounds": [200, 200]
                     }
                   ]
@@ -89,17 +107,21 @@
               ]
             },
             {
+              "name": "Overflow Controls Host Layer",
               "bounds": [100, 100],
               "children": [
                 {
+                  "name": "Horizontal Scrollbar Layer",
                   "position": [0, 85],
                   "bounds": [85, 15]
                 },
                 {
+                  "name": "Vertical Scrollbar Layer",
                   "position": [85, 0],
                   "bounds": [15, 85]
                 },
                 {
+                  "name": "Scroll Corner Layer",
                   "position": [85, 85],
                   "bounds": [15, 15],
                   "drawsContent": true
@@ -109,22 +131,27 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow (positioned) DIV id='corner' class='container resizeWidget'",
           "position": [8, 13],
           "bounds": [100, 100],
           "drawsContent": true,
           "children": [
             {
+              "name": "Child Containment Layer",
               "bounds": [100, 100],
               "children": [
                 {
+                  "name": "LayoutBlockFlow (positioned) DIV class='content'",
                   "bounds": [10, 10]
                 }
               ]
             },
             {
+              "name": "Overflow Controls Host Layer",
               "bounds": [100, 100],
               "children": [
                 {
+                  "name": "Scroll Corner Layer",
                   "position": [85, 85],
                   "bounds": [15, 15],
                   "drawsContent": true
diff --git a/third_party/WebKit/LayoutTests/compositing/overflow/content-loses-scrollbars-expected.txt b/third_party/WebKit/LayoutTests/compositing/overflow/content-loses-scrollbars-expected.txt
index d6cac2f..5a1ec2e 100644
--- a/third_party/WebKit/LayoutTests/compositing/overflow/content-loses-scrollbars-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/overflow/content-loses-scrollbars-expected.txt
@@ -1,19 +1,24 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow (positioned) DIV class='container'",
           "position": [8, 13],
           "bounds": [100, 100],
           "children": [
             {
+              "name": "Child Containment Layer",
               "bounds": [100, 100],
               "children": [
                 {
+                  "name": "LayoutBlockFlow (positioned) DIV id='vertical' class='content'",
                   "bounds": [10, 10]
                 }
               ]
@@ -21,13 +26,16 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow (positioned) DIV class='container'",
           "position": [8, 13],
           "bounds": [100, 100],
           "children": [
             {
+              "name": "Child Containment Layer",
               "bounds": [100, 100],
               "children": [
                 {
+                  "name": "LayoutBlockFlow (positioned) DIV id='horizontal' class='content'",
                   "bounds": [10, 10]
                 }
               ]
@@ -35,13 +43,16 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow (positioned) DIV class='container'",
           "position": [8, 13],
           "bounds": [100, 100],
           "children": [
             {
+              "name": "Child Containment Layer",
               "bounds": [100, 100],
               "children": [
                 {
+                  "name": "LayoutBlockFlow (positioned) DIV id='both' class='content'",
                   "bounds": [10, 10]
                 }
               ]
@@ -49,13 +60,16 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow (positioned) DIV id='corner' class='container'",
           "position": [8, 13],
           "bounds": [100, 100],
           "children": [
             {
+              "name": "Child Containment Layer",
               "bounds": [100, 100],
               "children": [
                 {
+                  "name": "LayoutBlockFlow (positioned) DIV class='content'",
                   "bounds": [10, 10]
                 }
               ]
diff --git a/third_party/WebKit/LayoutTests/compositing/overflow/fixed-scroll-in-empty-root-layer-expected.txt b/third_party/WebKit/LayoutTests/compositing/overflow/fixed-scroll-in-empty-root-layer-expected.txt
index 8902afae..e52a472 100644
--- a/third_party/WebKit/LayoutTests/compositing/overflow/fixed-scroll-in-empty-root-layer-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/overflow/fixed-scroll-in-empty-root-layer-expected.txt
@@ -1,11 +1,14 @@
 {
+  "name": "Content Root Layer",
   "bounds": [785, 2016],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [785, 2016],
       "contentsOpaque": true,
       "children": [
         {
+          "name": "LayoutBlockFlow HTML",
           "bounds": [785, 2016],
           "drawsContent": true,
           "paintInvalidations": [
@@ -22,6 +25,7 @@
           ],
           "children": [
             {
+              "name": "LayoutBlockFlow (positioned) DIV",
               "position": [0, 250],
               "bounds": [100, 100],
               "contentsOpaque": true,
@@ -30,6 +34,7 @@
               "backgroundColor": "#FF0000"
             },
             {
+              "name": "LayoutBlockFlow HTML (foreground) Layer",
               "bounds": [785, 2016],
               "drawsContent": true,
               "paintInvalidations": [
@@ -49,6 +54,12 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (positioned) DIV",
+      "reason": "subtree"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/compositing/overflow/overflow-auto-with-touch-expected.txt b/third_party/WebKit/LayoutTests/compositing/overflow/overflow-auto-with-touch-expected.txt
index e9f7954d..10aa3faf 100644
--- a/third_party/WebKit/LayoutTests/compositing/overflow/overflow-auto-with-touch-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/overflow/overflow-auto-with-touch-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true
diff --git a/third_party/WebKit/LayoutTests/compositing/overflow/overflow-auto-with-touch-no-overflow-expected.txt b/third_party/WebKit/LayoutTests/compositing/overflow/overflow-auto-with-touch-no-overflow-expected.txt
index e9f7954d..10aa3faf 100644
--- a/third_party/WebKit/LayoutTests/compositing/overflow/overflow-auto-with-touch-no-overflow-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/overflow/overflow-auto-with-touch-no-overflow-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true
diff --git a/third_party/WebKit/LayoutTests/compositing/overflow/overflow-auto-with-touch-toggle-expected.txt b/third_party/WebKit/LayoutTests/compositing/overflow/overflow-auto-with-touch-toggle-expected.txt
index e9f7954d..10aa3faf 100644
--- a/third_party/WebKit/LayoutTests/compositing/overflow/overflow-auto-with-touch-toggle-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/overflow/overflow-auto-with-touch-toggle-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true
diff --git a/third_party/WebKit/LayoutTests/compositing/overflow/overflow-hidden-with-touch-expected.txt b/third_party/WebKit/LayoutTests/compositing/overflow/overflow-hidden-with-touch-expected.txt
index e9f7954d..10aa3faf 100644
--- a/third_party/WebKit/LayoutTests/compositing/overflow/overflow-hidden-with-touch-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/overflow/overflow-hidden-with-touch-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true
diff --git a/third_party/WebKit/LayoutTests/compositing/overflow/overflow-overlay-with-touch-expected.txt b/third_party/WebKit/LayoutTests/compositing/overflow/overflow-overlay-with-touch-expected.txt
index e9f7954d..10aa3faf 100644
--- a/third_party/WebKit/LayoutTests/compositing/overflow/overflow-overlay-with-touch-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/overflow/overflow-overlay-with-touch-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true
diff --git a/third_party/WebKit/LayoutTests/compositing/overflow/overflow-overlay-with-touch-no-overflow-expected.txt b/third_party/WebKit/LayoutTests/compositing/overflow/overflow-overlay-with-touch-no-overflow-expected.txt
index e9f7954d..10aa3faf 100644
--- a/third_party/WebKit/LayoutTests/compositing/overflow/overflow-overlay-with-touch-no-overflow-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/overflow/overflow-overlay-with-touch-no-overflow-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true
diff --git a/third_party/WebKit/LayoutTests/compositing/overflow/overflow-scroll-with-touch-no-overflow-expected.txt b/third_party/WebKit/LayoutTests/compositing/overflow/overflow-scroll-with-touch-no-overflow-expected.txt
index e9f7954d..10aa3faf 100644
--- a/third_party/WebKit/LayoutTests/compositing/overflow/overflow-scroll-with-touch-no-overflow-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/overflow/overflow-scroll-with-touch-no-overflow-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true
diff --git a/third_party/WebKit/LayoutTests/compositing/overflow/overflow-scrollbar-layers-expected.txt b/third_party/WebKit/LayoutTests/compositing/overflow/overflow-scrollbar-layers-expected.txt
index 10f2551..17971a30 100644
--- a/third_party/WebKit/LayoutTests/compositing/overflow/overflow-scrollbar-layers-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/overflow/overflow-scrollbar-layers-expected.txt
@@ -1,25 +1,31 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow (positioned) DIV class='container'",
           "position": [8, 13],
           "bounds": [100, 100],
           "shouldFlattenTransform": false,
           "drawsContent": true,
           "children": [
             {
+              "name": "Scrolling Layer",
               "bounds": [85, 100],
               "shouldFlattenTransform": false,
               "children": [
                 {
+                  "name": "Scrolling Contents Layer",
                   "bounds": [85, 200],
                   "children": [
                     {
+                      "name": "LayoutBlockFlow (positioned) DIV class='content tall'",
                       "bounds": [10, 200]
                     }
                   ]
@@ -27,9 +33,11 @@
               ]
             },
             {
+              "name": "Overflow Controls Host Layer",
               "bounds": [100, 100],
               "children": [
                 {
+                  "name": "Vertical Scrollbar Layer",
                   "position": [85, 0],
                   "bounds": [15, 100]
                 }
@@ -38,19 +46,23 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow (positioned) DIV class='container'",
           "position": [8, 13],
           "bounds": [100, 100],
           "shouldFlattenTransform": false,
           "drawsContent": true,
           "children": [
             {
+              "name": "Scrolling Layer",
               "bounds": [100, 85],
               "shouldFlattenTransform": false,
               "children": [
                 {
+                  "name": "Scrolling Contents Layer",
                   "bounds": [200, 85],
                   "children": [
                     {
+                      "name": "LayoutBlockFlow (positioned) DIV class='content wide'",
                       "bounds": [200, 10]
                     }
                   ]
@@ -58,9 +70,11 @@
               ]
             },
             {
+              "name": "Overflow Controls Host Layer",
               "bounds": [100, 100],
               "children": [
                 {
+                  "name": "Horizontal Scrollbar Layer",
                   "position": [0, 85],
                   "bounds": [100, 15]
                 }
@@ -69,19 +83,23 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow (positioned) DIV class='container'",
           "position": [8, 13],
           "bounds": [100, 100],
           "shouldFlattenTransform": false,
           "drawsContent": true,
           "children": [
             {
+              "name": "Scrolling Layer",
               "bounds": [85, 85],
               "shouldFlattenTransform": false,
               "children": [
                 {
+                  "name": "Scrolling Contents Layer",
                   "bounds": [200, 200],
                   "children": [
                     {
+                      "name": "LayoutBlockFlow (positioned) DIV class='content wide tall'",
                       "bounds": [200, 200]
                     }
                   ]
@@ -89,17 +107,21 @@
               ]
             },
             {
+              "name": "Overflow Controls Host Layer",
               "bounds": [100, 100],
               "children": [
                 {
+                  "name": "Horizontal Scrollbar Layer",
                   "position": [0, 85],
                   "bounds": [85, 15]
                 },
                 {
+                  "name": "Vertical Scrollbar Layer",
                   "position": [85, 0],
                   "bounds": [15, 85]
                 },
                 {
+                  "name": "Scroll Corner Layer",
                   "position": [85, 85],
                   "bounds": [15, 15],
                   "drawsContent": true
@@ -109,22 +131,27 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow (positioned) DIV class='container resizeWidget'",
           "position": [8, 13],
           "bounds": [100, 100],
           "drawsContent": true,
           "children": [
             {
+              "name": "Child Containment Layer",
               "bounds": [100, 100],
               "children": [
                 {
+                  "name": "LayoutBlockFlow (positioned) DIV class='content'",
                   "bounds": [10, 10]
                 }
               ]
             },
             {
+              "name": "Overflow Controls Host Layer",
               "bounds": [100, 100],
               "children": [
                 {
+                  "name": "Scroll Corner Layer",
                   "position": [85, 85],
                   "bounds": [15, 15],
                   "drawsContent": true
diff --git a/third_party/WebKit/LayoutTests/compositing/overflow/overflow-visible-with-touch-expected.txt b/third_party/WebKit/LayoutTests/compositing/overflow/overflow-visible-with-touch-expected.txt
index 45363138..30e6d64 100644
--- a/third_party/WebKit/LayoutTests/compositing/overflow/overflow-visible-with-touch-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/overflow/overflow-visible-with-touch-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [1008, 1008],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [1008, 1008],
       "contentsOpaque": true,
       "drawsContent": true
diff --git a/third_party/WebKit/LayoutTests/compositing/overflow/reparented-scrollbars-non-sc-anc-expected.txt b/third_party/WebKit/LayoutTests/compositing/overflow/reparented-scrollbars-non-sc-anc-expected.txt
index 5244c6e..954f46d 100644
--- a/third_party/WebKit/LayoutTests/compositing/overflow/reparented-scrollbars-non-sc-anc-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/overflow/reparented-scrollbars-non-sc-anc-expected.txt
@@ -1,37 +1,46 @@
 {
+  "name": "Content Root Layer",
   "bounds": [1208, 821],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [1208, 821],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "Ancestor Clipping Layer",
           "position": [8, 8],
           "bounds": [1200, 800],
           "shouldFlattenTransform": false,
           "children": [
             {
+              "name": "LayoutBlockFlow (relative positioned) DIV id='positioned'",
               "bounds": [1200, 800],
               "drawsContent": true,
               "children": [
                 {
+                  "name": "Child Containment Layer",
                   "bounds": [1200, 800],
                   "children": [
                     {
+                      "name": "Ancestor Clipping Layer",
                       "bounds": [1200, 1000],
                       "shouldFlattenTransform": false,
                       "children": [
                         {
+                          "name": "LayoutBlockFlow DIV id='scroller'",
                           "bounds": [1200, 1000],
                           "shouldFlattenTransform": false,
                           "drawsContent": true,
                           "children": [
                             {
+                              "name": "Scrolling Layer",
                               "bounds": [1200, 1000],
                               "shouldFlattenTransform": false,
                               "children": [
                                 {
+                                  "name": "Scrolling Contents Layer",
                                   "bounds": [1200, 10000],
                                   "drawsContent": true
                                 }
@@ -48,17 +57,21 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow (relative positioned) DIV id='foreground'",
           "position": [8, 10008],
           "bounds": [1200, 0]
         },
         {
+          "name": "Overflow Controls Ancestor Clipping Layer",
           "position": [8, 8],
           "bounds": [1200, 1000],
           "children": [
             {
+              "name": "Overflow Controls Host Layer",
               "bounds": [1200, 1000],
               "children": [
                 {
+                  "name": "Vertical Scrollbar Layer",
                   "position": [1193, 0],
                   "bounds": [7, 1000]
                 }
diff --git a/third_party/WebKit/LayoutTests/compositing/overflow/resize-painting-expected.txt b/third_party/WebKit/LayoutTests/compositing/overflow/resize-painting-expected.txt
index 7cd1352..65516bd 100644
--- a/third_party/WebKit/LayoutTests/compositing/overflow/resize-painting-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/overflow/resize-painting-expected.txt
@@ -1,20 +1,25 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow DIV class='resizable composited box'",
           "position": [18, 10],
           "bounds": [100, 100],
           "drawsContent": true,
           "children": [
             {
+              "name": "Overflow Controls Host Layer",
               "bounds": [100, 100],
               "children": [
                 {
+                  "name": "Scroll Corner Layer",
                   "position": [85, 85],
                   "bounds": [15, 15],
                   "drawsContent": true
diff --git a/third_party/WebKit/LayoutTests/compositing/overflow/scroll-parent-absolute-expected.txt b/third_party/WebKit/LayoutTests/compositing/overflow/scroll-parent-absolute-expected.txt
index 631b21d..34d70810 100644
--- a/third_party/WebKit/LayoutTests/compositing/overflow/scroll-parent-absolute-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/overflow/scroll-parent-absolute-expected.txt
@@ -1,15 +1,19 @@
 {
+  "name": "Content Root Layer",
   "bounds": [785, 5516],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [785, 5516],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "Squashing Containment Layer",
           "shouldFlattenTransform": false,
           "children": [
             {
+              "name": "LayoutBlockFlow DIV id='top'",
               "position": [8, 8],
               "bounds": [500, 500],
               "contentsOpaque": true,
@@ -18,27 +22,33 @@
               "backgroundColor": "#0000FF",
               "children": [
                 {
+                  "name": "Scrolling Layer",
                   "bounds": [485, 485],
                   "shouldFlattenTransform": false,
                   "children": [
                     {
+                      "name": "Scrolling Contents Layer",
                       "bounds": [485, 5000],
                       "drawsContent": true
                     }
                   ]
                 },
                 {
+                  "name": "Overflow Controls Host Layer",
                   "bounds": [500, 500],
                   "children": [
                     {
+                      "name": "Horizontal Scrollbar Layer",
                       "position": [0, 485],
                       "bounds": [485, 15]
                     },
                     {
+                      "name": "Vertical Scrollbar Layer",
                       "position": [485, 0],
                       "bounds": [15, 485]
                     },
                     {
+                      "name": "Scroll Corner Layer",
                       "position": [485, 485],
                       "bounds": [15, 15],
                       "drawsContent": true
@@ -48,6 +58,7 @@
               ]
             },
             {
+              "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV id='middle')",
               "position": [8, 8],
               "bounds": [400, 400],
               "drawsContent": true
@@ -55,6 +66,7 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow (relative positioned) DIV id='child'",
           "position": [8, 8],
           "bounds": [300, 300],
           "contentsOpaque": true,
@@ -63,6 +75,7 @@
           "backgroundColor": "#FFFF00"
         },
         {
+          "name": "LayoutBlockFlow (relative positioned) DIV id='tall'",
           "position": [8, 8],
           "bounds": [20, 5000],
           "contentsOpaque": true,
diff --git a/third_party/WebKit/LayoutTests/compositing/overflow/scroll-parent-absolute-with-backdrop-filter-expected.txt b/third_party/WebKit/LayoutTests/compositing/overflow/scroll-parent-absolute-with-backdrop-filter-expected.txt
index 595488f..6c04687f 100644
--- a/third_party/WebKit/LayoutTests/compositing/overflow/scroll-parent-absolute-with-backdrop-filter-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/overflow/scroll-parent-absolute-with-backdrop-filter-expected.txt
@@ -1,42 +1,52 @@
 {
+  "name": "Content Root Layer",
   "bounds": [785, 5516],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [785, 5516],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "Squashing Containment Layer",
           "shouldFlattenTransform": false,
           "children": [
             {
+              "name": "LayoutBlockFlow DIV id='top'",
               "position": [8, 8],
               "bounds": [500, 500],
               "shouldFlattenTransform": false,
               "drawsContent": true,
               "children": [
                 {
+                  "name": "Scrolling Layer",
                   "bounds": [485, 485],
                   "shouldFlattenTransform": false,
                   "children": [
                     {
+                      "name": "Scrolling Contents Layer",
                       "bounds": [485, 5000],
                       "drawsContent": true
                     }
                   ]
                 },
                 {
+                  "name": "Overflow Controls Host Layer",
                   "bounds": [500, 500],
                   "children": [
                     {
+                      "name": "Horizontal Scrollbar Layer",
                       "position": [0, 485],
                       "bounds": [485, 15]
                     },
                     {
+                      "name": "Vertical Scrollbar Layer",
                       "position": [485, 0],
                       "bounds": [15, 485]
                     },
                     {
+                      "name": "Scroll Corner Layer",
                       "position": [485, 485],
                       "bounds": [15, 15],
                       "drawsContent": true
@@ -46,6 +56,7 @@
               ]
             },
             {
+              "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV id='middle')",
               "position": [8, 8],
               "bounds": [400, 400],
               "drawsContent": true
@@ -53,6 +64,7 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow (relative positioned) DIV id='child'",
           "position": [8, 8],
           "bounds": [300, 300],
           "contentsOpaque": true,
@@ -61,6 +73,7 @@
           "backgroundColor": "#FFFF00"
         },
         {
+          "name": "LayoutBlockFlow (relative positioned) DIV id='tall'",
           "position": [8, 8],
           "bounds": [20, 5000],
           "contentsOpaque": true,
diff --git a/third_party/WebKit/LayoutTests/compositing/overflow/scroll-parent-with-non-stacking-context-composited-ancestor-expected.txt b/third_party/WebKit/LayoutTests/compositing/overflow/scroll-parent-with-non-stacking-context-composited-ancestor-expected.txt
index de97ec2..c1061fb 100644
--- a/third_party/WebKit/LayoutTests/compositing/overflow/scroll-parent-with-non-stacking-context-composited-ancestor-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/overflow/scroll-parent-with-non-stacking-context-composited-ancestor-expected.txt
@@ -1,12 +1,15 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow DIV id='intervening'",
           "position": [98, 90],
           "bounds": [300, 300],
           "contentsOpaque": true,
@@ -15,16 +18,19 @@
           "backgroundColor": "#FFEFD5",
           "children": [
             {
+              "name": "LayoutBlockFlow DIV id='scroller'",
               "bounds": [102, 102],
               "shouldFlattenTransform": false,
               "drawsContent": true,
               "children": [
                 {
+                  "name": "Scrolling Layer",
                   "position": [1, 1],
                   "bounds": [100, 100],
                   "shouldFlattenTransform": false,
                   "children": [
                     {
+                      "name": "Scrolling Contents Layer",
                       "bounds": [100, 180]
                     }
                   ]
@@ -34,6 +40,7 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow (positioned) DIV id='fixed'",
           "position": [60, 60],
           "bounds": [80, 80],
           "contentsOpaque": true,
@@ -41,9 +48,11 @@
           "backgroundColor": "#008000"
         },
         {
+          "name": "Squashing Containment Layer",
           "shouldFlattenTransform": false,
           "children": [
             {
+              "name": "LayoutBlockFlow (relative positioned) DIV class='scrolled'",
               "position": [103, 95],
               "bounds": [60, 40],
               "contentsOpaque": true,
@@ -51,6 +60,7 @@
               "backgroundColor": "#0000FF"
             },
             {
+              "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV class='scrolled')",
               "position": [103, 139],
               "bounds": [60, 128],
               "drawsContent": true
@@ -58,10 +68,12 @@
           ]
         },
         {
+          "name": "Overflow Controls Host Layer",
           "position": [98, 90],
           "bounds": [102, 102],
           "children": [
             {
+              "name": "Vertical Scrollbar Layer",
               "position": [94, 1],
               "bounds": [7, 100]
             }
diff --git a/third_party/WebKit/LayoutTests/compositing/overflow/scrolling-content-clip-to-viewport-expected.txt b/third_party/WebKit/LayoutTests/compositing/overflow/scrolling-content-clip-to-viewport-expected.txt
index e456a58..f20658431 100644
--- a/third_party/WebKit/LayoutTests/compositing/overflow/scrolling-content-clip-to-viewport-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/overflow/scrolling-content-clip-to-viewport-expected.txt
@@ -1,37 +1,46 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow DIV class='scroller'",
           "bounds": [320, 340],
           "shouldFlattenTransform": false,
           "drawsContent": true,
           "children": [
             {
+              "name": "Scrolling Layer",
               "bounds": [305, 325],
               "shouldFlattenTransform": false,
               "children": [
                 {
+                  "name": "Scrolling Contents Layer",
                   "bounds": [305, 1224]
                 }
               ]
             },
             {
+              "name": "Overflow Controls Host Layer",
               "bounds": [320, 340],
               "children": [
                 {
+                  "name": "Horizontal Scrollbar Layer",
                   "position": [0, 325],
                   "bounds": [305, 15]
                 },
                 {
+                  "name": "Vertical Scrollbar Layer",
                   "position": [305, 0],
                   "bounds": [15, 325]
                 },
                 {
+                  "name": "Scroll Corner Layer",
                   "position": [305, 325],
                   "bounds": [15, 15],
                   "drawsContent": true
@@ -41,6 +50,7 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow (relative positioned) DIV class='column'",
           "position": [10, 10],
           "bounds": [284, 1204],
           "contentsOpaque": true,
diff --git a/third_party/WebKit/LayoutTests/compositing/overflow/scrolling-without-painting-expected.txt b/third_party/WebKit/LayoutTests/compositing/overflow/scrolling-without-painting-expected.txt
index 50a714d..1d7eab2 100644
--- a/third_party/WebKit/LayoutTests/compositing/overflow/scrolling-without-painting-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/overflow/scrolling-without-painting-expected.txt
@@ -1,36 +1,44 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow DIV id='scroller'",
           "position": [8, 8],
           "bounds": [202, 202],
           "shouldFlattenTransform": false,
           "drawsContent": true,
           "children": [
             {
+              "name": "Scrolling Layer",
               "position": [1, 1],
               "bounds": [185, 185],
               "shouldFlattenTransform": false,
               "children": [
                 {
+                  "name": "Scrolling Contents Layer",
                   "bounds": [185, 1025],
                   "drawsContent": true
                 }
               ]
             },
             {
+              "name": "Overflow Controls Host Layer",
               "bounds": [202, 202],
               "children": [
                 {
+                  "name": "Horizontal Scrollbar Layer",
                   "position": [1, 186],
                   "bounds": [185, 15]
                 },
                 {
+                  "name": "Vertical Scrollbar Layer",
                   "position": [186, 1],
                   "bounds": [15, 185],
                   "paintInvalidations": [
@@ -42,6 +50,7 @@
                   ]
                 },
                 {
+                  "name": "Scroll Corner Layer",
                   "position": [186, 186],
                   "bounds": [15, 15],
                   "drawsContent": true
diff --git a/third_party/WebKit/LayoutTests/compositing/overflow/universal-accelerated-overflow-scroll-expected.txt b/third_party/WebKit/LayoutTests/compositing/overflow/universal-accelerated-overflow-scroll-expected.txt
index 6ca1829..5f3fe6d2 100644
--- a/third_party/WebKit/LayoutTests/compositing/overflow/universal-accelerated-overflow-scroll-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/overflow/universal-accelerated-overflow-scroll-expected.txt
@@ -1,43 +1,53 @@
 {
+  "name": "Content Root Layer",
   "bounds": [785, 2016],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [785, 2016],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "Squashing Containment Layer",
           "shouldFlattenTransform": false,
           "children": [
             {
+              "name": "LayoutBlockFlow DIV id='container-absolute-grandchildren-not-contained' class='overflow'",
               "position": [10, 10],
               "bounds": [104, 104],
               "shouldFlattenTransform": false,
               "drawsContent": true,
               "children": [
                 {
+                  "name": "Scrolling Layer",
                   "position": [2, 2],
                   "bounds": [85, 85],
                   "shouldFlattenTransform": false,
                   "children": [
                     {
+                      "name": "Scrolling Contents Layer",
                       "bounds": [85, 144],
                       "drawsContent": true
                     }
                   ]
                 },
                 {
+                  "name": "Overflow Controls Host Layer",
                   "bounds": [104, 104],
                   "children": [
                     {
+                      "name": "Horizontal Scrollbar Layer",
                       "position": [2, 87],
                       "bounds": [85, 15]
                     },
                     {
+                      "name": "Vertical Scrollbar Layer",
                       "position": [87, 2],
                       "bounds": [15, 85]
                     },
                     {
+                      "name": "Scroll Corner Layer",
                       "position": [87, 87],
                       "bounds": [15, 15],
                       "drawsContent": true
@@ -47,6 +57,7 @@
               ]
             },
             {
+              "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV id='positioned-absolute-grandchildren-not-contained' class='positionAbsolute positioned')",
               "position": [35, 75],
               "bounds": [80, 40],
               "drawsContent": true
@@ -54,9 +65,11 @@
           ]
         },
         {
+          "name": "Squashing Containment Layer",
           "shouldFlattenTransform": false,
           "children": [
             {
+              "name": "LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute-grandchildren-not-contained' class='scrolled'",
               "position": [16, -15],
               "bounds": [75, 24],
               "contentsOpaque": true,
@@ -64,6 +77,7 @@
               "backgroundColor": "#0000FF"
             },
             {
+              "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute-grandchildren-not-contained' class='scrolled')",
               "position": [16, 41],
               "bounds": [75, 24],
               "drawsContent": true
@@ -71,34 +85,41 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow (positioned) DIV id='container-absolute-grandchildren' class='positionAbsolute overflow'",
           "position": [130, 10],
           "bounds": [104, 104],
           "shouldFlattenTransform": false,
           "drawsContent": true,
           "children": [
             {
+              "name": "Scrolling Layer",
               "position": [2, 2],
               "bounds": [85, 85],
               "shouldFlattenTransform": false,
               "children": [
                 {
+                  "name": "Scrolling Contents Layer",
                   "bounds": [105, 144],
                   "drawsContent": true
                 }
               ]
             },
             {
+              "name": "Overflow Controls Host Layer",
               "bounds": [104, 104],
               "children": [
                 {
+                  "name": "Horizontal Scrollbar Layer",
                   "position": [2, 87],
                   "bounds": [85, 15]
                 },
                 {
+                  "name": "Vertical Scrollbar Layer",
                   "position": [87, 2],
                   "bounds": [15, 85]
                 },
                 {
+                  "name": "Scroll Corner Layer",
                   "position": [87, 87],
                   "bounds": [15, 15],
                   "drawsContent": true
@@ -108,9 +129,11 @@
           ]
         },
         {
+          "name": "Squashing Containment Layer",
           "shouldFlattenTransform": false,
           "children": [
             {
+              "name": "LayoutBlockFlow (positioned) DIV id='positioned-absolute-grandchildren' class='positionAbsolute positioned'",
               "position": [157, 18],
               "bounds": [80, 40],
               "contentsOpaque": true,
@@ -118,6 +141,7 @@
               "backgroundColor": "#800080"
             },
             {
+              "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute-grandchildren' class='scrolled')",
               "position": [136, -15],
               "bounds": [75, 80],
               "drawsContent": true
@@ -125,36 +149,44 @@
           ]
         },
         {
+          "name": "Squashing Containment Layer",
           "shouldFlattenTransform": false,
           "children": [
             {
+              "name": "LayoutBlockFlow DIV id='container-absolute-not-contained' class='overflow'",
               "position": [250, 10],
               "bounds": [104, 104],
               "shouldFlattenTransform": false,
               "drawsContent": true,
               "children": [
                 {
+                  "name": "Scrolling Layer",
                   "position": [2, 2],
                   "bounds": [85, 85],
                   "shouldFlattenTransform": false,
                   "children": [
                     {
+                      "name": "Scrolling Contents Layer",
                       "bounds": [85, 144]
                     }
                   ]
                 },
                 {
+                  "name": "Overflow Controls Host Layer",
                   "bounds": [104, 104],
                   "children": [
                     {
+                      "name": "Horizontal Scrollbar Layer",
                       "position": [2, 87],
                       "bounds": [85, 15]
                     },
                     {
+                      "name": "Vertical Scrollbar Layer",
                       "position": [87, 2],
                       "bounds": [15, 85]
                     },
                     {
+                      "name": "Scroll Corner Layer",
                       "position": [87, 87],
                       "bounds": [15, 15],
                       "drawsContent": true
@@ -164,6 +196,7 @@
               ]
             },
             {
+              "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV id='positioned-absolute-not-contained' class='positionAbsolute positioned')",
               "position": [275, 75],
               "bounds": [80, 40],
               "drawsContent": true
@@ -171,9 +204,11 @@
           ]
         },
         {
+          "name": "Squashing Containment Layer",
           "shouldFlattenTransform": false,
           "children": [
             {
+              "name": "LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute-not-contained' class='scrolled'",
               "position": [256, -15],
               "bounds": [75, 24],
               "contentsOpaque": true,
@@ -181,6 +216,7 @@
               "backgroundColor": "#0000FF"
             },
             {
+              "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute-not-contained' class='scrolled')",
               "position": [256, 41],
               "bounds": [75, 24],
               "drawsContent": true
@@ -188,37 +224,45 @@
           ]
         },
         {
+          "name": "Squashing Containment Layer",
           "shouldFlattenTransform": false,
           "children": [
             {
+              "name": "LayoutBlockFlow DIV id='container-absolute-sibling-grandchildren-not-contained' class='overflow'",
               "position": [370, 10],
               "bounds": [104, 104],
               "shouldFlattenTransform": false,
               "drawsContent": true,
               "children": [
                 {
+                  "name": "Scrolling Layer",
                   "position": [2, 2],
                   "bounds": [85, 85],
                   "shouldFlattenTransform": false,
                   "children": [
                     {
+                      "name": "Scrolling Contents Layer",
                       "bounds": [85, 144],
                       "drawsContent": true
                     }
                   ]
                 },
                 {
+                  "name": "Overflow Controls Host Layer",
                   "bounds": [104, 104],
                   "children": [
                     {
+                      "name": "Horizontal Scrollbar Layer",
                       "position": [2, 87],
                       "bounds": [85, 15]
                     },
                     {
+                      "name": "Vertical Scrollbar Layer",
                       "position": [87, 2],
                       "bounds": [15, 85]
                     },
                     {
+                      "name": "Scroll Corner Layer",
                       "position": [87, 87],
                       "bounds": [15, 15],
                       "drawsContent": true
@@ -228,6 +272,7 @@
               ]
             },
             {
+              "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV id='positioned-absolute-sibling-grandchildren-not-contained' class='positionAbsolute positioned')",
               "position": [395, 75],
               "bounds": [80, 40],
               "drawsContent": true
@@ -235,9 +280,11 @@
           ]
         },
         {
+          "name": "Squashing Containment Layer",
           "shouldFlattenTransform": false,
           "children": [
             {
+              "name": "LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute-sibling-grandchildren-not-contained' class='scrolled'",
               "position": [376, -15],
               "bounds": [75, 24],
               "contentsOpaque": true,
@@ -245,6 +292,7 @@
               "backgroundColor": "#0000FF"
             },
             {
+              "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute-sibling-grandchildren-not-contained' class='scrolled')",
               "position": [376, 41],
               "bounds": [75, 24],
               "drawsContent": true
@@ -252,34 +300,41 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow (positioned) DIV id='container-absolute-sibling-grandchildren' class='positionAbsolute overflow'",
           "position": [10, 130],
           "bounds": [104, 104],
           "shouldFlattenTransform": false,
           "drawsContent": true,
           "children": [
             {
+              "name": "Scrolling Layer",
               "position": [2, 2],
               "bounds": [85, 85],
               "shouldFlattenTransform": false,
               "children": [
                 {
+                  "name": "Scrolling Contents Layer",
                   "bounds": [105, 144],
                   "drawsContent": true
                 }
               ]
             },
             {
+              "name": "Overflow Controls Host Layer",
               "bounds": [104, 104],
               "children": [
                 {
+                  "name": "Horizontal Scrollbar Layer",
                   "position": [2, 87],
                   "bounds": [85, 15]
                 },
                 {
+                  "name": "Vertical Scrollbar Layer",
                   "position": [87, 2],
                   "bounds": [15, 85]
                 },
                 {
+                  "name": "Scroll Corner Layer",
                   "position": [87, 87],
                   "bounds": [15, 15],
                   "drawsContent": true
@@ -289,9 +344,11 @@
           ]
         },
         {
+          "name": "Squashing Containment Layer",
           "shouldFlattenTransform": false,
           "children": [
             {
+              "name": "LayoutBlockFlow (positioned) DIV id='positioned-absolute-sibling-grandchildren' class='positionAbsolute positioned'",
               "position": [37, 138],
               "bounds": [80, 40],
               "contentsOpaque": true,
@@ -299,6 +356,7 @@
               "backgroundColor": "#800080"
             },
             {
+              "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute-sibling-grandchildren' class='scrolled')",
               "position": [16, 105],
               "bounds": [75, 80],
               "drawsContent": true
@@ -306,36 +364,44 @@
           ]
         },
         {
+          "name": "Squashing Containment Layer",
           "shouldFlattenTransform": false,
           "children": [
             {
+              "name": "LayoutBlockFlow DIV id='container-absolute-sibling-not-contained' class='overflow'",
               "position": [130, 130],
               "bounds": [104, 104],
               "shouldFlattenTransform": false,
               "drawsContent": true,
               "children": [
                 {
+                  "name": "Scrolling Layer",
                   "position": [2, 2],
                   "bounds": [85, 85],
                   "shouldFlattenTransform": false,
                   "children": [
                     {
+                      "name": "Scrolling Contents Layer",
                       "bounds": [85, 144]
                     }
                   ]
                 },
                 {
+                  "name": "Overflow Controls Host Layer",
                   "bounds": [104, 104],
                   "children": [
                     {
+                      "name": "Horizontal Scrollbar Layer",
                       "position": [2, 87],
                       "bounds": [85, 15]
                     },
                     {
+                      "name": "Vertical Scrollbar Layer",
                       "position": [87, 2],
                       "bounds": [15, 85]
                     },
                     {
+                      "name": "Scroll Corner Layer",
                       "position": [87, 87],
                       "bounds": [15, 15],
                       "drawsContent": true
@@ -345,6 +411,7 @@
               ]
             },
             {
+              "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV id='positioned-absolute-sibling-not-contained' class='positionAbsolute positioned')",
               "position": [155, 195],
               "bounds": [80, 40],
               "drawsContent": true
@@ -352,9 +419,11 @@
           ]
         },
         {
+          "name": "Squashing Containment Layer",
           "shouldFlattenTransform": false,
           "children": [
             {
+              "name": "LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute-sibling-not-contained' class='scrolled'",
               "position": [136, 105],
               "bounds": [75, 24],
               "contentsOpaque": true,
@@ -362,6 +431,7 @@
               "backgroundColor": "#0000FF"
             },
             {
+              "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute-sibling-not-contained' class='scrolled')",
               "position": [136, 161],
               "bounds": [75, 24],
               "drawsContent": true
@@ -369,33 +439,40 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow (positioned) DIV id='container-absolute-sibling' class='positionAbsolute overflow'",
           "position": [250, 130],
           "bounds": [104, 104],
           "shouldFlattenTransform": false,
           "drawsContent": true,
           "children": [
             {
+              "name": "Scrolling Layer",
               "position": [2, 2],
               "bounds": [85, 85],
               "shouldFlattenTransform": false,
               "children": [
                 {
+                  "name": "Scrolling Contents Layer",
                   "bounds": [105, 144]
                 }
               ]
             },
             {
+              "name": "Overflow Controls Host Layer",
               "bounds": [104, 104],
               "children": [
                 {
+                  "name": "Horizontal Scrollbar Layer",
                   "position": [2, 87],
                   "bounds": [85, 15]
                 },
                 {
+                  "name": "Vertical Scrollbar Layer",
                   "position": [87, 2],
                   "bounds": [15, 85]
                 },
                 {
+                  "name": "Scroll Corner Layer",
                   "position": [87, 87],
                   "bounds": [15, 15],
                   "drawsContent": true
@@ -405,9 +482,11 @@
           ]
         },
         {
+          "name": "Squashing Containment Layer",
           "shouldFlattenTransform": false,
           "children": [
             {
+              "name": "LayoutBlockFlow (positioned) DIV id='positioned-absolute-sibling' class='positionAbsolute positioned'",
               "position": [277, 138],
               "bounds": [80, 40],
               "contentsOpaque": true,
@@ -415,6 +494,7 @@
               "backgroundColor": "#800080"
             },
             {
+              "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute-sibling' class='scrolled')",
               "position": [256, 105],
               "bounds": [75, 80],
               "drawsContent": true
@@ -422,33 +502,40 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow (positioned) DIV id='container-absolute' class='positionAbsolute overflow'",
           "position": [370, 130],
           "bounds": [104, 104],
           "shouldFlattenTransform": false,
           "drawsContent": true,
           "children": [
             {
+              "name": "Scrolling Layer",
               "position": [2, 2],
               "bounds": [85, 85],
               "shouldFlattenTransform": false,
               "children": [
                 {
+                  "name": "Scrolling Contents Layer",
                   "bounds": [105, 144]
                 }
               ]
             },
             {
+              "name": "Overflow Controls Host Layer",
               "bounds": [104, 104],
               "children": [
                 {
+                  "name": "Horizontal Scrollbar Layer",
                   "position": [2, 87],
                   "bounds": [85, 15]
                 },
                 {
+                  "name": "Vertical Scrollbar Layer",
                   "position": [87, 2],
                   "bounds": [15, 85]
                 },
                 {
+                  "name": "Scroll Corner Layer",
                   "position": [87, 87],
                   "bounds": [15, 15],
                   "drawsContent": true
@@ -458,9 +545,11 @@
           ]
         },
         {
+          "name": "Squashing Containment Layer",
           "shouldFlattenTransform": false,
           "children": [
             {
+              "name": "LayoutBlockFlow (positioned) DIV id='positioned-absolute' class='positionAbsolute positioned'",
               "position": [397, 138],
               "bounds": [80, 40],
               "contentsOpaque": true,
@@ -468,6 +557,7 @@
               "backgroundColor": "#800080"
             },
             {
+              "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute' class='scrolled')",
               "position": [376, 105],
               "bounds": [75, 80],
               "drawsContent": true
@@ -475,34 +565,41 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow (positioned) DIV id='container-fixed-sibling-grandchildren' class='positionAbsolute overflow'",
           "position": [10, 250],
           "bounds": [104, 104],
           "shouldFlattenTransform": false,
           "drawsContent": true,
           "children": [
             {
+              "name": "Scrolling Layer",
               "position": [2, 2],
               "bounds": [85, 85],
               "shouldFlattenTransform": false,
               "children": [
                 {
+                  "name": "Scrolling Contents Layer",
                   "bounds": [85, 144],
                   "drawsContent": true
                 }
               ]
             },
             {
+              "name": "Overflow Controls Host Layer",
               "bounds": [104, 104],
               "children": [
                 {
+                  "name": "Horizontal Scrollbar Layer",
                   "position": [2, 87],
                   "bounds": [85, 15]
                 },
                 {
+                  "name": "Vertical Scrollbar Layer",
                   "position": [87, 2],
                   "bounds": [15, 85]
                 },
                 {
+                  "name": "Scroll Corner Layer",
                   "position": [87, 87],
                   "bounds": [15, 15],
                   "drawsContent": true
@@ -512,6 +609,7 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow (positioned) DIV id='positioned-fixed-sibling-grandchildren' class='positionFixed positioned'",
           "position": [35, 315],
           "bounds": [80, 40],
           "contentsOpaque": true,
@@ -519,9 +617,11 @@
           "backgroundColor": "#800080"
         },
         {
+          "name": "Squashing Containment Layer",
           "shouldFlattenTransform": false,
           "children": [
             {
+              "name": "LayoutBlockFlow (relative positioned) DIV id='scrolled-fixed-sibling-grandchildren' class='scrolled'",
               "position": [16, 225],
               "bounds": [75, 24],
               "contentsOpaque": true,
@@ -529,6 +629,7 @@
               "backgroundColor": "#0000FF"
             },
             {
+              "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='scrolled-fixed-sibling-grandchildren' class='scrolled')",
               "position": [16, 281],
               "bounds": [75, 24],
               "drawsContent": true
@@ -536,33 +637,40 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow (positioned) DIV id='container-fixed-sibling' class='positionAbsolute overflow'",
           "position": [130, 250],
           "bounds": [104, 104],
           "shouldFlattenTransform": false,
           "drawsContent": true,
           "children": [
             {
+              "name": "Scrolling Layer",
               "position": [2, 2],
               "bounds": [85, 85],
               "shouldFlattenTransform": false,
               "children": [
                 {
+                  "name": "Scrolling Contents Layer",
                   "bounds": [85, 144]
                 }
               ]
             },
             {
+              "name": "Overflow Controls Host Layer",
               "bounds": [104, 104],
               "children": [
                 {
+                  "name": "Horizontal Scrollbar Layer",
                   "position": [2, 87],
                   "bounds": [85, 15]
                 },
                 {
+                  "name": "Vertical Scrollbar Layer",
                   "position": [87, 2],
                   "bounds": [15, 85]
                 },
                 {
+                  "name": "Scroll Corner Layer",
                   "position": [87, 87],
                   "bounds": [15, 15],
                   "drawsContent": true
@@ -572,6 +680,7 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow (positioned) DIV id='positioned-fixed-sibling' class='positionFixed positioned'",
           "position": [155, 315],
           "bounds": [80, 40],
           "contentsOpaque": true,
@@ -579,9 +688,11 @@
           "backgroundColor": "#800080"
         },
         {
+          "name": "Squashing Containment Layer",
           "shouldFlattenTransform": false,
           "children": [
             {
+              "name": "LayoutBlockFlow (relative positioned) DIV id='scrolled-fixed-sibling' class='scrolled'",
               "position": [136, 225],
               "bounds": [75, 24],
               "contentsOpaque": true,
@@ -589,6 +700,7 @@
               "backgroundColor": "#0000FF"
             },
             {
+              "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='scrolled-fixed-sibling' class='scrolled')",
               "position": [136, 281],
               "bounds": [75, 24],
               "drawsContent": true
@@ -596,34 +708,41 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow (positioned) DIV id='container-fixed-grandchildren' class='positionAbsolute overflow'",
           "position": [250, 250],
           "bounds": [104, 104],
           "shouldFlattenTransform": false,
           "drawsContent": true,
           "children": [
             {
+              "name": "Scrolling Layer",
               "position": [2, 2],
               "bounds": [85, 85],
               "shouldFlattenTransform": false,
               "children": [
                 {
+                  "name": "Scrolling Contents Layer",
                   "bounds": [85, 144],
                   "drawsContent": true
                 }
               ]
             },
             {
+              "name": "Overflow Controls Host Layer",
               "bounds": [104, 104],
               "children": [
                 {
+                  "name": "Horizontal Scrollbar Layer",
                   "position": [2, 87],
                   "bounds": [85, 15]
                 },
                 {
+                  "name": "Vertical Scrollbar Layer",
                   "position": [87, 2],
                   "bounds": [15, 85]
                 },
                 {
+                  "name": "Scroll Corner Layer",
                   "position": [87, 87],
                   "bounds": [15, 15],
                   "drawsContent": true
@@ -633,6 +752,7 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow (positioned) DIV id='positioned-fixed-grandchildren' class='positionFixed positioned'",
           "position": [275, 315],
           "bounds": [80, 40],
           "contentsOpaque": true,
@@ -640,9 +760,11 @@
           "backgroundColor": "#800080"
         },
         {
+          "name": "Squashing Containment Layer",
           "shouldFlattenTransform": false,
           "children": [
             {
+              "name": "LayoutBlockFlow (relative positioned) DIV id='scrolled-fixed-grandchildren' class='scrolled'",
               "position": [256, 225],
               "bounds": [75, 24],
               "contentsOpaque": true,
@@ -650,6 +772,7 @@
               "backgroundColor": "#0000FF"
             },
             {
+              "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='scrolled-fixed-grandchildren' class='scrolled')",
               "position": [256, 281],
               "bounds": [75, 24],
               "drawsContent": true
@@ -657,33 +780,40 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow (positioned) DIV id='container-fixed' class='positionAbsolute overflow'",
           "position": [370, 250],
           "bounds": [104, 104],
           "shouldFlattenTransform": false,
           "drawsContent": true,
           "children": [
             {
+              "name": "Scrolling Layer",
               "position": [2, 2],
               "bounds": [85, 85],
               "shouldFlattenTransform": false,
               "children": [
                 {
+                  "name": "Scrolling Contents Layer",
                   "bounds": [85, 144]
                 }
               ]
             },
             {
+              "name": "Overflow Controls Host Layer",
               "bounds": [104, 104],
               "children": [
                 {
+                  "name": "Horizontal Scrollbar Layer",
                   "position": [2, 87],
                   "bounds": [85, 15]
                 },
                 {
+                  "name": "Vertical Scrollbar Layer",
                   "position": [87, 2],
                   "bounds": [15, 85]
                 },
                 {
+                  "name": "Scroll Corner Layer",
                   "position": [87, 87],
                   "bounds": [15, 15],
                   "drawsContent": true
@@ -693,6 +823,7 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow (positioned) DIV id='positioned-fixed' class='positionFixed positioned'",
           "position": [395, 315],
           "bounds": [80, 40],
           "contentsOpaque": true,
@@ -700,9 +831,11 @@
           "backgroundColor": "#800080"
         },
         {
+          "name": "Squashing Containment Layer",
           "shouldFlattenTransform": false,
           "children": [
             {
+              "name": "LayoutBlockFlow (relative positioned) DIV id='scrolled-fixed' class='scrolled'",
               "position": [376, 225],
               "bounds": [75, 24],
               "contentsOpaque": true,
@@ -710,6 +843,7 @@
               "backgroundColor": "#0000FF"
             },
             {
+              "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='scrolled-fixed' class='scrolled')",
               "position": [376, 281],
               "bounds": [75, 24],
               "drawsContent": true
@@ -717,6 +851,7 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow (positioned) DIV id='sibling-absolute-sibling-grandchildren-not-contained' class='positionFixed sibling'",
           "position": [375, 20],
           "bounds": [50, 100],
           "contentsOpaque": true,
@@ -724,6 +859,7 @@
           "backgroundColor": "#008000"
         },
         {
+          "name": "LayoutBlockFlow (positioned) DIV id='sibling-absolute-sibling-grandchildren' class='positionFixed sibling'",
           "position": [15, 140],
           "bounds": [50, 100],
           "contentsOpaque": true,
@@ -731,6 +867,7 @@
           "backgroundColor": "#008000"
         },
         {
+          "name": "LayoutBlockFlow (positioned) DIV id='sibling-absolute-sibling-not-contained' class='positionFixed sibling'",
           "position": [135, 140],
           "bounds": [50, 100],
           "contentsOpaque": true,
@@ -738,6 +875,7 @@
           "backgroundColor": "#008000"
         },
         {
+          "name": "LayoutBlockFlow (positioned) DIV id='sibling-absolute-sibling' class='positionFixed sibling'",
           "position": [255, 140],
           "bounds": [50, 100],
           "contentsOpaque": true,
@@ -745,6 +883,7 @@
           "backgroundColor": "#008000"
         },
         {
+          "name": "LayoutBlockFlow (positioned) DIV id='sibling-fixed-sibling-grandchildren' class='positionFixed sibling'",
           "position": [15, 260],
           "bounds": [50, 100],
           "contentsOpaque": true,
@@ -752,6 +891,7 @@
           "backgroundColor": "#008000"
         },
         {
+          "name": "LayoutBlockFlow (positioned) DIV id='sibling-fixed-sibling' class='positionFixed sibling'",
           "position": [135, 260],
           "bounds": [50, 100],
           "contentsOpaque": true,
@@ -759,9 +899,11 @@
           "backgroundColor": "#008000"
         },
         {
+          "name": "Squashing Containment Layer",
           "shouldFlattenTransform": false,
           "children": [
             {
+              "name": "LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute-grandchildren-not-contained' class='scrolled onTop'",
               "position": [16, -43],
               "bounds": [75, 24],
               "contentsOpaque": true,
@@ -769,6 +911,7 @@
               "backgroundColor": "#0000FF"
             },
             {
+              "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute-grandchildren-not-contained' class='scrolled onTop')",
               "position": [16, 13],
               "bounds": [75, 80],
               "drawsContent": true
@@ -776,9 +919,11 @@
           ]
         },
         {
+          "name": "Squashing Containment Layer",
           "shouldFlattenTransform": false,
           "children": [
             {
+              "name": "LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute-grandchildren' class='scrolled onTop'",
               "position": [136, -43],
               "bounds": [75, 24],
               "contentsOpaque": true,
@@ -786,6 +931,7 @@
               "backgroundColor": "#0000FF"
             },
             {
+              "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute-grandchildren' class='scrolled onTop')",
               "position": [136, 13],
               "bounds": [75, 80],
               "drawsContent": true
@@ -793,9 +939,11 @@
           ]
         },
         {
+          "name": "Squashing Containment Layer",
           "shouldFlattenTransform": false,
           "children": [
             {
+              "name": "LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute-not-contained' class='scrolled onTop'",
               "position": [256, -43],
               "bounds": [75, 24],
               "contentsOpaque": true,
@@ -803,6 +951,7 @@
               "backgroundColor": "#0000FF"
             },
             {
+              "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute-not-contained' class='scrolled onTop')",
               "position": [256, 13],
               "bounds": [75, 80],
               "drawsContent": true
@@ -810,9 +959,11 @@
           ]
         },
         {
+          "name": "Squashing Containment Layer",
           "shouldFlattenTransform": false,
           "children": [
             {
+              "name": "LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute-sibling-grandchildren-not-contained' class='scrolled onTop'",
               "position": [376, -43],
               "bounds": [75, 24],
               "contentsOpaque": true,
@@ -820,6 +971,7 @@
               "backgroundColor": "#0000FF"
             },
             {
+              "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute-sibling-grandchildren-not-contained' class='scrolled onTop')",
               "position": [376, 13],
               "bounds": [75, 80],
               "drawsContent": true
@@ -827,9 +979,11 @@
           ]
         },
         {
+          "name": "Squashing Containment Layer",
           "shouldFlattenTransform": false,
           "children": [
             {
+              "name": "LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute-sibling-grandchildren' class='scrolled onTop'",
               "position": [16, 77],
               "bounds": [75, 24],
               "contentsOpaque": true,
@@ -837,6 +991,7 @@
               "backgroundColor": "#0000FF"
             },
             {
+              "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute-sibling-grandchildren' class='scrolled onTop')",
               "position": [16, 133],
               "bounds": [75, 80],
               "drawsContent": true
@@ -844,9 +999,11 @@
           ]
         },
         {
+          "name": "Squashing Containment Layer",
           "shouldFlattenTransform": false,
           "children": [
             {
+              "name": "LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute-sibling-not-contained' class='scrolled onTop'",
               "position": [136, 77],
               "bounds": [75, 24],
               "contentsOpaque": true,
@@ -854,6 +1011,7 @@
               "backgroundColor": "#0000FF"
             },
             {
+              "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute-sibling-not-contained' class='scrolled onTop')",
               "position": [136, 133],
               "bounds": [75, 80],
               "drawsContent": true
@@ -861,9 +1019,11 @@
           ]
         },
         {
+          "name": "Squashing Containment Layer",
           "shouldFlattenTransform": false,
           "children": [
             {
+              "name": "LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute-sibling' class='scrolled onTop'",
               "position": [256, 77],
               "bounds": [75, 24],
               "contentsOpaque": true,
@@ -871,6 +1031,7 @@
               "backgroundColor": "#0000FF"
             },
             {
+              "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute-sibling' class='scrolled onTop')",
               "position": [256, 133],
               "bounds": [75, 80],
               "drawsContent": true
@@ -878,9 +1039,11 @@
           ]
         },
         {
+          "name": "Squashing Containment Layer",
           "shouldFlattenTransform": false,
           "children": [
             {
+              "name": "LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute' class='scrolled onTop'",
               "position": [376, 77],
               "bounds": [75, 24],
               "contentsOpaque": true,
@@ -888,6 +1051,7 @@
               "backgroundColor": "#0000FF"
             },
             {
+              "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute' class='scrolled onTop')",
               "position": [376, 133],
               "bounds": [75, 80],
               "drawsContent": true
@@ -895,9 +1059,11 @@
           ]
         },
         {
+          "name": "Squashing Containment Layer",
           "shouldFlattenTransform": false,
           "children": [
             {
+              "name": "LayoutBlockFlow (relative positioned) DIV id='scrolled-fixed-sibling-grandchildren' class='scrolled onTop'",
               "position": [16, 197],
               "bounds": [75, 24],
               "contentsOpaque": true,
@@ -905,6 +1071,7 @@
               "backgroundColor": "#0000FF"
             },
             {
+              "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='scrolled-fixed-sibling-grandchildren' class='scrolled onTop')",
               "position": [16, 253],
               "bounds": [75, 80],
               "drawsContent": true
@@ -912,9 +1079,11 @@
           ]
         },
         {
+          "name": "Squashing Containment Layer",
           "shouldFlattenTransform": false,
           "children": [
             {
+              "name": "LayoutBlockFlow (relative positioned) DIV id='scrolled-fixed-sibling' class='scrolled onTop'",
               "position": [136, 197],
               "bounds": [75, 24],
               "contentsOpaque": true,
@@ -922,6 +1091,7 @@
               "backgroundColor": "#0000FF"
             },
             {
+              "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='scrolled-fixed-sibling' class='scrolled onTop')",
               "position": [136, 253],
               "bounds": [75, 80],
               "drawsContent": true
@@ -929,9 +1099,11 @@
           ]
         },
         {
+          "name": "Squashing Containment Layer",
           "shouldFlattenTransform": false,
           "children": [
             {
+              "name": "LayoutBlockFlow (relative positioned) DIV id='scrolled-fixed-grandchildren' class='scrolled onTop'",
               "position": [256, 197],
               "bounds": [75, 24],
               "contentsOpaque": true,
@@ -939,6 +1111,7 @@
               "backgroundColor": "#0000FF"
             },
             {
+              "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='scrolled-fixed-grandchildren' class='scrolled onTop')",
               "position": [256, 253],
               "bounds": [75, 80],
               "drawsContent": true
@@ -946,9 +1119,11 @@
           ]
         },
         {
+          "name": "Squashing Containment Layer",
           "shouldFlattenTransform": false,
           "children": [
             {
+              "name": "LayoutBlockFlow (relative positioned) DIV id='scrolled-fixed' class='scrolled onTop'",
               "position": [376, 197],
               "bounds": [75, 24],
               "contentsOpaque": true,
@@ -956,6 +1131,7 @@
               "backgroundColor": "#0000FF"
             },
             {
+              "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='scrolled-fixed' class='scrolled onTop')",
               "position": [376, 253],
               "bounds": [75, 80],
               "drawsContent": true
diff --git a/third_party/WebKit/LayoutTests/compositing/overflow/updating-scrolling-container-expected.txt b/third_party/WebKit/LayoutTests/compositing/overflow/updating-scrolling-container-expected.txt
index 8f4031f..037698e 100644
--- a/third_party/WebKit/LayoutTests/compositing/overflow/updating-scrolling-container-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/overflow/updating-scrolling-container-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -13,6 +15,12 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV id='container'",
+      "reason": "style change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/compositing/overflow/updating-scrolling-content-expected.txt b/third_party/WebKit/LayoutTests/compositing/overflow/updating-scrolling-content-expected.txt
index 7368f083..b06a918 100644
--- a/third_party/WebKit/LayoutTests/compositing/overflow/updating-scrolling-content-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/overflow/updating-scrolling-content-expected.txt
@@ -1,22 +1,27 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow DIV id='scroller'",
           "position": [8, 8],
           "bounds": [200, 200],
           "shouldFlattenTransform": false,
           "drawsContent": true,
           "children": [
             {
+              "name": "Scrolling Layer",
               "bounds": [185, 185],
               "shouldFlattenTransform": false,
               "children": [
                 {
+                  "name": "Scrolling Contents Layer",
                   "bounds": [185, 1200],
                   "drawsContent": true,
                   "paintInvalidations": [
@@ -30,13 +35,16 @@
               ]
             },
             {
+              "name": "Overflow Controls Host Layer",
               "bounds": [200, 200],
               "children": [
                 {
+                  "name": "Horizontal Scrollbar Layer",
                   "position": [0, 185],
                   "bounds": [185, 15]
                 },
                 {
+                  "name": "Vertical Scrollbar Layer",
                   "position": [185, 0],
                   "bounds": [15, 185],
                   "paintInvalidations": [
@@ -48,6 +56,7 @@
                   ]
                 },
                 {
+                  "name": "Scroll Corner Layer",
                   "position": [185, 185],
                   "bounds": [15, 15],
                   "drawsContent": true
@@ -58,6 +67,12 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV id='indicator'",
+      "reason": "style change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/compositing/overlap-test-with-filter-expected.txt b/third_party/WebKit/LayoutTests/compositing/overlap-test-with-filter-expected.txt
index 8cadbfe..08223bb 100644
--- a/third_party/WebKit/LayoutTests/compositing/overlap-test-with-filter-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/overlap-test-with-filter-expected.txt
@@ -1,32 +1,41 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutIFrame IFRAME",
           "bounds": [300, 100],
           "drawsContent": true,
           "children": [
             {
+              "name": "Frame Overflow Controls Host Layer",
               "bounds": [300, 100],
               "children": [
                 {
+                  "name": "Frame Clipping Layer",
                   "bounds": [300, 100],
                   "children": [
                     {
+                      "name": "Frame Scrolling Layer",
                       "children": [
                         {
+                          "name": "Content Root Layer",
                           "bounds": [300, 100],
                           "children": [
                             {
+                              "name": "LayoutView #document",
                               "bounds": [300, 100],
                               "drawsContent": true,
                               "backgroundColor": "#FFFF00",
                               "children": [
                                 {
+                                  "name": "LayoutBlockFlow BODY",
                                   "position": [8, 8],
                                   "bounds": [284, 84],
                                   "drawsContent": true,
@@ -45,6 +54,7 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow (positioned) DIV",
           "bounds": [300, 100],
           "contentsOpaque": true,
           "drawsContent": true,
diff --git a/third_party/WebKit/LayoutTests/compositing/rendering-contexts-expected.txt b/third_party/WebKit/LayoutTests/compositing/rendering-contexts-expected.txt
index b91552c..bb0468a 100644
--- a/third_party/WebKit/LayoutTests/compositing/rendering-contexts-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/rendering-contexts-expected.txt
@@ -1,12 +1,15 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow DIV id='grandparent' class='composited'",
           "position": [8, 8],
           "bounds": [100, 100],
           "contentsOpaque": true,
@@ -16,6 +19,7 @@
           "backgroundColor": "#008000",
           "children": [
             {
+              "name": "LayoutBlockFlow DIV id='parent' class='composited'",
               "bounds": [100, 100],
               "contentsOpaque": true,
               "3dRenderingContext": 1,
@@ -23,6 +27,7 @@
               "backgroundColor": "#008000",
               "children": [
                 {
+                  "name": "LayoutBlockFlow DIV id='child' class='composited'",
                   "bounds": [100, 100],
                   "contentsOpaque": true,
                   "shouldFlattenTransform": false,
diff --git a/third_party/WebKit/LayoutTests/compositing/repaint/clipping-should-not-repaint-composited-descendants-expected.txt b/third_party/WebKit/LayoutTests/compositing/repaint/clipping-should-not-repaint-composited-descendants-expected.txt
index 0be25f8d..b4415d88 100644
--- a/third_party/WebKit/LayoutTests/compositing/repaint/clipping-should-not-repaint-composited-descendants-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/repaint/clipping-should-not-repaint-composited-descendants-expected.txt
@@ -1,19 +1,24 @@
 {
+  "name": "Content Root Layer",
   "bounds": [785, 616],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [785, 616],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow (positioned) DIV class='clipping-container'",
           "position": [108, 108],
           "bounds": [100, 100],
           "children": [
             {
+              "name": "Child Containment Layer",
               "bounds": [100, 100],
               "children": [
                 {
+                  "name": "LayoutBlockFlow DIV class='clipped-composited-child'",
                   "position": [-100, -100],
                   "bounds": [252, 252],
                   "contentsOpaque": true,
@@ -25,13 +30,16 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow (positioned) DIV class='clipping-container with-initial-clipping'",
           "position": [108, 408],
           "bounds": [100, 100],
           "children": [
             {
+              "name": "Child Containment Layer",
               "bounds": [100, 100],
               "children": [
                 {
+                  "name": "LayoutBlockFlow DIV class='clipped-composited-child'",
                   "position": [-100, -100],
                   "bounds": [252, 252],
                   "contentsOpaque": true,
@@ -44,6 +52,16 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (positioned) DIV class='clipping-container'",
+      "reason": "subtree"
+    },
+    {
+      "object": "LayoutBlockFlow (positioned) DIV class='clipping-container with-initial-clipping'",
+      "reason": "subtree"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/compositing/repaint/fixed-pos-inside-composited-intermediate-layer-expected.txt b/third_party/WebKit/LayoutTests/compositing/repaint/fixed-pos-inside-composited-intermediate-layer-expected.txt
index 6199155..208356a 100644
--- a/third_party/WebKit/LayoutTests/compositing/repaint/fixed-pos-inside-composited-intermediate-layer-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/repaint/fixed-pos-inside-composited-intermediate-layer-expected.txt
@@ -1,15 +1,19 @@
 {
+  "name": "Content Root Layer",
   "bounds": [785, 30020],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [785, 30020],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "Squashing Containment Layer",
           "shouldFlattenTransform": false,
           "children": [
             {
+              "name": "LayoutBlockFlow DIV class='compositedBehind'",
               "position": [8, 8],
               "bounds": [500, 500],
               "contentsOpaque": true,
@@ -17,6 +21,7 @@
               "backgroundColor": "#00FFFF"
             },
             {
+              "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV class='containerOverlapsComposited')",
               "position": [20, 20],
               "bounds": [100, 30000],
               "drawsContent": true,
@@ -37,6 +42,12 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (positioned) DIV class='fixed'",
+      "reason": "subtree"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/compositing/repaint/invalidations-on-composited-layers-expected.txt b/third_party/WebKit/LayoutTests/compositing/repaint/invalidations-on-composited-layers-expected.txt
index d8a8645..2419376 100644
--- a/third_party/WebKit/LayoutTests/compositing/repaint/invalidations-on-composited-layers-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/repaint/invalidations-on-composited-layers-expected.txt
@@ -1,12 +1,15 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow DIV id='parent'",
           "position": [8, 8],
           "bounds": [400, 400],
           "contentsOpaque": true,
@@ -21,6 +24,7 @@
           ],
           "children": [
             {
+              "name": "LayoutBlockFlow (relative positioned) DIV id='child'",
               "position": [50, 50],
               "bounds": [75, 75],
               "contentsOpaque": true,
@@ -38,6 +42,16 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV id='parent'",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutBlockFlow (relative positioned) DIV id='child'",
+      "reason": "style change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/compositing/repaint/resize-repaint-expected.txt b/third_party/WebKit/LayoutTests/compositing/repaint/resize-repaint-expected.txt
index 9220120c1..d4bb6af 100644
--- a/third_party/WebKit/LayoutTests/compositing/repaint/resize-repaint-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/repaint/resize-repaint-expected.txt
@@ -1,12 +1,15 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow DIV id='resizing'",
           "position": [8, 8],
           "bounds": [402, 207],
           "drawsContent": true,
@@ -35,6 +38,20 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV id='resizing'",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "layoutObject insertion"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/compositing/repaint/scroll-fixed-layer-no-content-expected.txt b/third_party/WebKit/LayoutTests/compositing/repaint/scroll-fixed-layer-no-content-expected.txt
index f1dbf56a..3134ee6 100644
--- a/third_party/WebKit/LayoutTests/compositing/repaint/scroll-fixed-layer-no-content-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/repaint/scroll-fixed-layer-no-content-expected.txt
@@ -1,12 +1,15 @@
 {
+  "name": "Content Root Layer",
   "bounds": [785, 2016],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [785, 2016],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow (positioned) DIV",
           "position": [100, 200],
           "bounds": [200, 200]
         }
diff --git a/third_party/WebKit/LayoutTests/compositing/repaint/scroll-fixed-layer-out-of-view-expected.txt b/third_party/WebKit/LayoutTests/compositing/repaint/scroll-fixed-layer-out-of-view-expected.txt
index 0b8a03c..c77789ee 100644
--- a/third_party/WebKit/LayoutTests/compositing/repaint/scroll-fixed-layer-out-of-view-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/repaint/scroll-fixed-layer-out-of-view-expected.txt
@@ -1,12 +1,15 @@
 {
+  "name": "Content Root Layer",
   "bounds": [785, 2016],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [785, 2016],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow (positioned) DIV",
           "position": [100, -200],
           "bounds": [88, 88],
           "contentsOpaque": true,
@@ -14,6 +17,7 @@
           "backgroundColor": "#C0C0C0"
         },
         {
+          "name": "LayoutBlockFlow (positioned) DIV",
           "position": [100, 1100],
           "bounds": [99, 99],
           "contentsOpaque": true,
diff --git a/third_party/WebKit/LayoutTests/compositing/repaint/scroll-fixed-squahed-layer-expected.txt b/third_party/WebKit/LayoutTests/compositing/repaint/scroll-fixed-squahed-layer-expected.txt
index 79ba51f..9653a80c 100644
--- a/third_party/WebKit/LayoutTests/compositing/repaint/scroll-fixed-squahed-layer-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/repaint/scroll-fixed-squahed-layer-expected.txt
@@ -1,12 +1,15 @@
 {
+  "name": "Content Root Layer",
   "bounds": [785, 2016],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [785, 2016],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow (positioned) DIV class='main'",
           "position": [100, 200],
           "bounds": [200, 200],
           "contentsOpaque": true,
@@ -14,6 +17,7 @@
           "backgroundColor": "#ADD8E6"
         },
         {
+          "name": "LayoutBlockFlow (positioned) DIV class='squahed'",
           "position": [100, 250],
           "bounds": [200, 200],
           "contentsOpaque": true,
diff --git a/third_party/WebKit/LayoutTests/compositing/repaint/should-not-clip-composited-overflow-scrolling-layer-expected.txt b/third_party/WebKit/LayoutTests/compositing/repaint/should-not-clip-composited-overflow-scrolling-layer-expected.txt
index b23c986..0e43eba 100644
--- a/third_party/WebKit/LayoutTests/compositing/repaint/should-not-clip-composited-overflow-scrolling-layer-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/repaint/should-not-clip-composited-overflow-scrolling-layer-expected.txt
@@ -1,28 +1,27 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow DIV id='container'",
           "position": [8, 8],
           "bounds": [500, 500],
           "shouldFlattenTransform": false,
           "drawsContent": true,
-          "paintInvalidations": [
-            {
-              "object": "RootInlineBox",
-              "reason": "full"
-            }
-          ],
           "children": [
             {
+              "name": "Scrolling Layer",
               "bounds": [485, 485],
               "shouldFlattenTransform": false,
               "children": [
                 {
+                  "name": "Scrolling Contents Layer",
                   "bounds": [5000, 5000],
                   "drawsContent": true,
                   "paintInvalidations": [
@@ -30,19 +29,17 @@
                       "object": "LayoutBlockFlow DIV id='content'",
                       "rect": [0, 0, 5000, 5000],
                       "reason": "style change"
-                    },
-                    {
-                      "object": "RootInlineBox",
-                      "reason": "full"
                     }
                   ]
                 }
               ]
             },
             {
+              "name": "Overflow Controls Host Layer",
               "bounds": [500, 500],
               "children": [
                 {
+                  "name": "Horizontal Scrollbar Layer",
                   "position": [0, 485],
                   "bounds": [485, 15],
                   "paintInvalidations": [
@@ -54,6 +51,7 @@
                   ]
                 },
                 {
+                  "name": "Vertical Scrollbar Layer",
                   "position": [485, 0],
                   "bounds": [15, 485],
                   "paintInvalidations": [
@@ -65,6 +63,7 @@
                   ]
                 },
                 {
+                  "name": "Scroll Corner Layer",
                   "position": [485, 485],
                   "bounds": [15, 15],
                   "drawsContent": true
@@ -75,6 +74,16 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV id='content'",
+      "reason": "style change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "style change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/compositing/repaint/should-not-clip-composited-viewport-scrolling-layer-expected.txt b/third_party/WebKit/LayoutTests/compositing/repaint/should-not-clip-composited-viewport-scrolling-layer-expected.txt
index fc88bcd..c9dbf25 100644
--- a/third_party/WebKit/LayoutTests/compositing/repaint/should-not-clip-composited-viewport-scrolling-layer-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/repaint/should-not-clip-composited-viewport-scrolling-layer-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [5008, 5016],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [5008, 5016],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -10,13 +12,19 @@
           "object": "LayoutBlockFlow DIV id='content'",
           "rect": [8, 8, 5000, 5000],
           "reason": "style change"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV id='content'",
+      "reason": "style change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "style change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/compositing/repaint/should-not-repaint-composited-descendants-expected.txt b/third_party/WebKit/LayoutTests/compositing/repaint/should-not-repaint-composited-descendants-expected.txt
index 61d9e60..9070975 100644
--- a/third_party/WebKit/LayoutTests/compositing/repaint/should-not-repaint-composited-descendants-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/repaint/should-not-repaint-composited-descendants-expected.txt
@@ -1,12 +1,15 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow (positioned) DIV id='composited-box'",
           "position": [38, 38],
           "bounds": [90, 90],
           "drawsContent": true,
@@ -31,9 +34,11 @@
           ],
           "children": [
             {
+              "name": "Child Containment Layer",
               "bounds": [90, 90],
               "children": [
                 {
+                  "name": "LayoutBlockFlow DIV class='composited child'",
                   "position": [-30, 20],
                   "bounds": [50, 50],
                   "contentsOpaque": true,
@@ -47,6 +52,16 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='composited-box'",
+      "reason": "subtree"
+    },
+    {
+      "object": "LayoutBlockFlow DIV class='child'",
+      "reason": "subtree"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/compositing/repaint/should-not-repaint-composited-descendants-on-overflow-change-expected.txt b/third_party/WebKit/LayoutTests/compositing/repaint/should-not-repaint-composited-descendants-on-overflow-change-expected.txt
index fdfd8ca..17434a9 100644
--- a/third_party/WebKit/LayoutTests/compositing/repaint/should-not-repaint-composited-descendants-on-overflow-change-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/repaint/should-not-repaint-composited-descendants-on-overflow-change-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -19,6 +21,7 @@
       ],
       "children": [
         {
+          "name": "LayoutBlockFlow DIV class='composited-child'",
           "bounds": [100, 100],
           "contentsOpaque": true,
           "drawsContent": true,
@@ -26,11 +29,13 @@
           "backgroundColor": "#008000"
         },
         {
+          "name": "Ancestor Clipping Layer",
           "position": [0, 200],
           "bounds": [200, 200],
           "shouldFlattenTransform": false,
           "children": [
             {
+              "name": "LayoutBlockFlow DIV class='composited-child'",
               "bounds": [100, 100],
               "contentsOpaque": true,
               "drawsContent": true,
@@ -40,6 +45,7 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow (relative positioned) DIV class='composited-child overflow-child'",
           "position": [150, 150],
           "bounds": [100, 100],
           "contentsOpaque": true,
@@ -48,11 +54,13 @@
           "backgroundColor": "#008000"
         },
         {
+          "name": "Ancestor Clipping Layer",
           "position": [0, 200],
           "bounds": [200, 200],
           "shouldFlattenTransform": false,
           "children": [
             {
+              "name": "LayoutBlockFlow (relative positioned) DIV class='composited-child overflow-child'",
               "position": [150, 150],
               "bounds": [100, 100],
               "contentsOpaque": true,
@@ -64,6 +72,16 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV id='overflow1'",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='overflow2'",
+      "reason": "style change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/compositing/repaint/should-not-repaint-composited-filter-expected.txt b/third_party/WebKit/LayoutTests/compositing/repaint/should-not-repaint-composited-filter-expected.txt
index 61b7da0..545f1870 100644
--- a/third_party/WebKit/LayoutTests/compositing/repaint/should-not-repaint-composited-filter-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/repaint/should-not-repaint-composited-filter-expected.txt
@@ -1,12 +1,15 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow DIV id='composited-box'",
           "position": [8, 8],
           "bounds": [100, 100],
           "contentsOpaque": true,
diff --git a/third_party/WebKit/LayoutTests/compositing/repaint/should-not-repaint-composited-opacity-expected.txt b/third_party/WebKit/LayoutTests/compositing/repaint/should-not-repaint-composited-opacity-expected.txt
index b4a99103..011ca090 100644
--- a/third_party/WebKit/LayoutTests/compositing/repaint/should-not-repaint-composited-opacity-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/repaint/should-not-repaint-composited-opacity-expected.txt
@@ -1,12 +1,15 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow DIV id='composited-box'",
           "position": [8, 8],
           "bounds": [100, 100],
           "opacity": 0.5,
diff --git a/third_party/WebKit/LayoutTests/compositing/repaint/should-not-repaint-composited-transform-expected.txt b/third_party/WebKit/LayoutTests/compositing/repaint/should-not-repaint-composited-transform-expected.txt
index 862ad80..bc1fc6c1 100644
--- a/third_party/WebKit/LayoutTests/compositing/repaint/should-not-repaint-composited-transform-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/repaint/should-not-repaint-composited-transform-expected.txt
@@ -1,12 +1,15 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow DIV id='composited-box'",
           "position": [8, 8],
           "bounds": [102, 102],
           "drawsContent": true,
diff --git a/third_party/WebKit/LayoutTests/compositing/repaint/should-not-repaint-composited-z-index-expected.txt b/third_party/WebKit/LayoutTests/compositing/repaint/should-not-repaint-composited-z-index-expected.txt
index 61b7da0..545f1870 100644
--- a/third_party/WebKit/LayoutTests/compositing/repaint/should-not-repaint-composited-z-index-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/repaint/should-not-repaint-composited-z-index-expected.txt
@@ -1,12 +1,15 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow DIV id='composited-box'",
           "position": [8, 8],
           "bounds": [100, 100],
           "contentsOpaque": true,
diff --git a/third_party/WebKit/LayoutTests/compositing/rtl/rtl-absolute-expected.txt b/third_party/WebKit/LayoutTests/compositing/rtl/rtl-absolute-expected.txt
index f57621e..445953e 100644
--- a/third_party/WebKit/LayoutTests/compositing/rtl/rtl-absolute-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/rtl/rtl-absolute-expected.txt
@@ -1,13 +1,16 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "backgroundColor": "#FF0000",
       "children": [
         {
+          "name": "LayoutBlockFlow (positioned) DIV class='positioned layer'",
           "position": [50, 50],
           "bounds": [100, 100],
           "contentsOpaque": true,
diff --git a/third_party/WebKit/LayoutTests/compositing/rtl/rtl-absolute-overflow-expected.txt b/third_party/WebKit/LayoutTests/compositing/rtl/rtl-absolute-overflow-expected.txt
index 9e4342e..df0dfb4 100644
--- a/third_party/WebKit/LayoutTests/compositing/rtl/rtl-absolute-overflow-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/rtl/rtl-absolute-overflow-expected.txt
@@ -1,14 +1,17 @@
 {
+  "name": "Content Root Layer",
   "position": [-215, 0],
   "bounds": [1000, 1000],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [1000, 1000],
       "contentsOpaque": true,
       "drawsContent": true,
       "backgroundColor": "#FF0000",
       "children": [
         {
+          "name": "LayoutBlockFlow (positioned) DIV class='positioned layer'",
           "position": [265, 50],
           "bounds": [100, 100],
           "contentsOpaque": true,
diff --git a/third_party/WebKit/LayoutTests/compositing/rtl/rtl-absolute-overflow-scrolled-expected.txt b/third_party/WebKit/LayoutTests/compositing/rtl/rtl-absolute-overflow-scrolled-expected.txt
index d245cfa..f4349e1 100644
--- a/third_party/WebKit/LayoutTests/compositing/rtl/rtl-absolute-overflow-scrolled-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/rtl/rtl-absolute-overflow-scrolled-expected.txt
@@ -1,14 +1,17 @@
 {
+  "name": "Content Root Layer",
   "position": [-215, 0],
   "bounds": [1000, 1000],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [1000, 1000],
       "contentsOpaque": true,
       "drawsContent": true,
       "backgroundColor": "#FF0000",
       "children": [
         {
+          "name": "LayoutBlockFlow (positioned) DIV id='layer' class='positioned'",
           "position": [51, 50],
           "bounds": [100, 100],
           "contentsOpaque": true,
diff --git a/third_party/WebKit/LayoutTests/compositing/rtl/rtl-fixed-expected.txt b/third_party/WebKit/LayoutTests/compositing/rtl/rtl-fixed-expected.txt
index f57621e..445953e 100644
--- a/third_party/WebKit/LayoutTests/compositing/rtl/rtl-fixed-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/rtl/rtl-fixed-expected.txt
@@ -1,13 +1,16 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "backgroundColor": "#FF0000",
       "children": [
         {
+          "name": "LayoutBlockFlow (positioned) DIV class='positioned layer'",
           "position": [50, 50],
           "bounds": [100, 100],
           "contentsOpaque": true,
diff --git a/third_party/WebKit/LayoutTests/compositing/rtl/rtl-fixed-overflow-expected.txt b/third_party/WebKit/LayoutTests/compositing/rtl/rtl-fixed-overflow-expected.txt
index 9e4342e..df0dfb4 100644
--- a/third_party/WebKit/LayoutTests/compositing/rtl/rtl-fixed-overflow-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/rtl/rtl-fixed-overflow-expected.txt
@@ -1,14 +1,17 @@
 {
+  "name": "Content Root Layer",
   "position": [-215, 0],
   "bounds": [1000, 1000],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [1000, 1000],
       "contentsOpaque": true,
       "drawsContent": true,
       "backgroundColor": "#FF0000",
       "children": [
         {
+          "name": "LayoutBlockFlow (positioned) DIV class='positioned layer'",
           "position": [265, 50],
           "bounds": [100, 100],
           "contentsOpaque": true,
diff --git a/third_party/WebKit/LayoutTests/compositing/rtl/rtl-fixed-overflow-scrolled-expected.txt b/third_party/WebKit/LayoutTests/compositing/rtl/rtl-fixed-overflow-scrolled-expected.txt
index d245cfa..2213cb1 100644
--- a/third_party/WebKit/LayoutTests/compositing/rtl/rtl-fixed-overflow-scrolled-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/rtl/rtl-fixed-overflow-scrolled-expected.txt
@@ -1,14 +1,17 @@
 {
+  "name": "Content Root Layer",
   "position": [-215, 0],
   "bounds": [1000, 1000],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [1000, 1000],
       "contentsOpaque": true,
       "drawsContent": true,
       "backgroundColor": "#FF0000",
       "children": [
         {
+          "name": "LayoutBlockFlow (positioned) DIV class='positioned layer'",
           "position": [51, 50],
           "bounds": [100, 100],
           "contentsOpaque": true,
diff --git a/third_party/WebKit/LayoutTests/compositing/rtl/rtl-iframe-absolute-expected.txt b/third_party/WebKit/LayoutTests/compositing/rtl/rtl-iframe-absolute-expected.txt
index 59d38634..358dc52 100644
--- a/third_party/WebKit/LayoutTests/compositing/rtl/rtl-iframe-absolute-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/rtl/rtl-iframe-absolute-expected.txt
@@ -1,32 +1,41 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutIFrame (positioned) IFRAME",
           "bounds": [400, 400],
           "drawsContent": true,
           "children": [
             {
+              "name": "Frame Overflow Controls Host Layer",
               "bounds": [400, 400],
               "children": [
                 {
+                  "name": "Frame Clipping Layer",
                   "bounds": [400, 400],
                   "children": [
                     {
+                      "name": "Frame Scrolling Layer",
                       "children": [
                         {
+                          "name": "Content Root Layer",
                           "bounds": [400, 400],
                           "children": [
                             {
+                              "name": "LayoutView #document",
                               "bounds": [400, 400],
                               "drawsContent": true,
                               "backgroundColor": "#FF0000",
                               "children": [
                                 {
+                                  "name": "LayoutBlockFlow (positioned) DIV class='positioned layer'",
                                   "position": [50, 50],
                                   "bounds": [100, 100],
                                   "contentsOpaque": true,
diff --git a/third_party/WebKit/LayoutTests/compositing/rtl/rtl-iframe-absolute-overflow-expected.txt b/third_party/WebKit/LayoutTests/compositing/rtl/rtl-iframe-absolute-overflow-expected.txt
index 1bd8ff2e..16b136d 100644
--- a/third_party/WebKit/LayoutTests/compositing/rtl/rtl-iframe-absolute-overflow-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/rtl/rtl-iframe-absolute-overflow-expected.txt
@@ -1,34 +1,43 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutIFrame (positioned) IFRAME",
           "bounds": [400, 400],
           "drawsContent": true,
           "children": [
             {
+              "name": "Frame Overflow Controls Host Layer",
               "bounds": [400, 400],
               "children": [
                 {
+                  "name": "Frame Clipping Layer",
                   "bounds": [385, 385],
                   "children": [
                     {
+                      "name": "Frame Scrolling Layer",
                       "position": [615, 0],
                       "children": [
                         {
+                          "name": "Content Root Layer",
                           "position": [-615, 0],
                           "bounds": [1000, 1000],
                           "children": [
                             {
+                              "name": "LayoutView #document",
                               "bounds": [1000, 1000],
                               "drawsContent": true,
                               "backgroundColor": "#FF0000",
                               "children": [
                                 {
+                                  "name": "LayoutBlockFlow (positioned) DIV class='positioned layer'",
                                   "position": [665, 50],
                                   "bounds": [100, 100],
                                   "contentsOpaque": true,
@@ -44,14 +53,17 @@
                   ]
                 },
                 {
+                  "name": "Frame Horizontal Scrollbar Layer",
                   "position": [0, 385],
                   "bounds": [385, 15]
                 },
                 {
+                  "name": "Frame Vertical Scrollbar Layer",
                   "position": [385, 0],
                   "bounds": [15, 385]
                 },
                 {
+                  "name": "Frame Scroll Corner Layer",
                   "position": [385, 385],
                   "bounds": [15, 15],
                   "drawsContent": true
diff --git a/third_party/WebKit/LayoutTests/compositing/rtl/rtl-iframe-absolute-overflow-scrolled-expected.txt b/third_party/WebKit/LayoutTests/compositing/rtl/rtl-iframe-absolute-overflow-scrolled-expected.txt
index 68ec89d3..0c0e424 100644
--- a/third_party/WebKit/LayoutTests/compositing/rtl/rtl-iframe-absolute-overflow-scrolled-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/rtl/rtl-iframe-absolute-overflow-scrolled-expected.txt
@@ -1,34 +1,43 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutIFrame (positioned) IFRAME",
           "bounds": [400, 400],
           "drawsContent": true,
           "children": [
             {
+              "name": "Frame Overflow Controls Host Layer",
               "bounds": [400, 400],
               "children": [
                 {
+                  "name": "Frame Clipping Layer",
                   "bounds": [385, 385],
                   "children": [
                     {
+                      "name": "Frame Scrolling Layer",
                       "position": [615, 0],
                       "children": [
                         {
+                          "name": "Content Root Layer",
                           "position": [-615, 0],
                           "bounds": [1000, 1000],
                           "children": [
                             {
+                              "name": "LayoutView #document",
                               "bounds": [1000, 1000],
                               "drawsContent": true,
                               "backgroundColor": "#FF0000",
                               "children": [
                                 {
+                                  "name": "LayoutBlockFlow (positioned) DIV id='layer' class='positioned'",
                                   "position": [51, 50],
                                   "bounds": [100, 100],
                                   "contentsOpaque": true,
@@ -44,14 +53,17 @@
                   ]
                 },
                 {
+                  "name": "Frame Horizontal Scrollbar Layer",
                   "position": [0, 385],
                   "bounds": [385, 15]
                 },
                 {
+                  "name": "Frame Vertical Scrollbar Layer",
                   "position": [385, 0],
                   "bounds": [15, 385]
                 },
                 {
+                  "name": "Frame Scroll Corner Layer",
                   "position": [385, 385],
                   "bounds": [15, 15],
                   "drawsContent": true
diff --git a/third_party/WebKit/LayoutTests/compositing/rtl/rtl-iframe-fixed-expected.txt b/third_party/WebKit/LayoutTests/compositing/rtl/rtl-iframe-fixed-expected.txt
index 59d38634..358dc52 100644
--- a/third_party/WebKit/LayoutTests/compositing/rtl/rtl-iframe-fixed-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/rtl/rtl-iframe-fixed-expected.txt
@@ -1,32 +1,41 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutIFrame (positioned) IFRAME",
           "bounds": [400, 400],
           "drawsContent": true,
           "children": [
             {
+              "name": "Frame Overflow Controls Host Layer",
               "bounds": [400, 400],
               "children": [
                 {
+                  "name": "Frame Clipping Layer",
                   "bounds": [400, 400],
                   "children": [
                     {
+                      "name": "Frame Scrolling Layer",
                       "children": [
                         {
+                          "name": "Content Root Layer",
                           "bounds": [400, 400],
                           "children": [
                             {
+                              "name": "LayoutView #document",
                               "bounds": [400, 400],
                               "drawsContent": true,
                               "backgroundColor": "#FF0000",
                               "children": [
                                 {
+                                  "name": "LayoutBlockFlow (positioned) DIV class='positioned layer'",
                                   "position": [50, 50],
                                   "bounds": [100, 100],
                                   "contentsOpaque": true,
diff --git a/third_party/WebKit/LayoutTests/compositing/rtl/rtl-iframe-fixed-overflow-expected.txt b/third_party/WebKit/LayoutTests/compositing/rtl/rtl-iframe-fixed-overflow-expected.txt
index 1bd8ff2e..16b136d 100644
--- a/third_party/WebKit/LayoutTests/compositing/rtl/rtl-iframe-fixed-overflow-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/rtl/rtl-iframe-fixed-overflow-expected.txt
@@ -1,34 +1,43 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutIFrame (positioned) IFRAME",
           "bounds": [400, 400],
           "drawsContent": true,
           "children": [
             {
+              "name": "Frame Overflow Controls Host Layer",
               "bounds": [400, 400],
               "children": [
                 {
+                  "name": "Frame Clipping Layer",
                   "bounds": [385, 385],
                   "children": [
                     {
+                      "name": "Frame Scrolling Layer",
                       "position": [615, 0],
                       "children": [
                         {
+                          "name": "Content Root Layer",
                           "position": [-615, 0],
                           "bounds": [1000, 1000],
                           "children": [
                             {
+                              "name": "LayoutView #document",
                               "bounds": [1000, 1000],
                               "drawsContent": true,
                               "backgroundColor": "#FF0000",
                               "children": [
                                 {
+                                  "name": "LayoutBlockFlow (positioned) DIV class='positioned layer'",
                                   "position": [665, 50],
                                   "bounds": [100, 100],
                                   "contentsOpaque": true,
@@ -44,14 +53,17 @@
                   ]
                 },
                 {
+                  "name": "Frame Horizontal Scrollbar Layer",
                   "position": [0, 385],
                   "bounds": [385, 15]
                 },
                 {
+                  "name": "Frame Vertical Scrollbar Layer",
                   "position": [385, 0],
                   "bounds": [15, 385]
                 },
                 {
+                  "name": "Frame Scroll Corner Layer",
                   "position": [385, 385],
                   "bounds": [15, 15],
                   "drawsContent": true
diff --git a/third_party/WebKit/LayoutTests/compositing/rtl/rtl-iframe-fixed-overflow-scrolled-expected.txt b/third_party/WebKit/LayoutTests/compositing/rtl/rtl-iframe-fixed-overflow-scrolled-expected.txt
index 1bd8ff2e..16b136d 100644
--- a/third_party/WebKit/LayoutTests/compositing/rtl/rtl-iframe-fixed-overflow-scrolled-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/rtl/rtl-iframe-fixed-overflow-scrolled-expected.txt
@@ -1,34 +1,43 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutIFrame (positioned) IFRAME",
           "bounds": [400, 400],
           "drawsContent": true,
           "children": [
             {
+              "name": "Frame Overflow Controls Host Layer",
               "bounds": [400, 400],
               "children": [
                 {
+                  "name": "Frame Clipping Layer",
                   "bounds": [385, 385],
                   "children": [
                     {
+                      "name": "Frame Scrolling Layer",
                       "position": [615, 0],
                       "children": [
                         {
+                          "name": "Content Root Layer",
                           "position": [-615, 0],
                           "bounds": [1000, 1000],
                           "children": [
                             {
+                              "name": "LayoutView #document",
                               "bounds": [1000, 1000],
                               "drawsContent": true,
                               "backgroundColor": "#FF0000",
                               "children": [
                                 {
+                                  "name": "LayoutBlockFlow (positioned) DIV class='positioned layer'",
                                   "position": [665, 50],
                                   "bounds": [100, 100],
                                   "contentsOpaque": true,
@@ -44,14 +53,17 @@
                   ]
                 },
                 {
+                  "name": "Frame Horizontal Scrollbar Layer",
                   "position": [0, 385],
                   "bounds": [385, 15]
                 },
                 {
+                  "name": "Frame Vertical Scrollbar Layer",
                   "position": [385, 0],
                   "bounds": [15, 385]
                 },
                 {
+                  "name": "Frame Scroll Corner Layer",
                   "position": [385, 385],
                   "bounds": [15, 15],
                   "drawsContent": true
diff --git a/third_party/WebKit/LayoutTests/compositing/rtl/rtl-iframe-relative-expected.txt b/third_party/WebKit/LayoutTests/compositing/rtl/rtl-iframe-relative-expected.txt
index 5f7eaf8c..1c4dd69 100644
--- a/third_party/WebKit/LayoutTests/compositing/rtl/rtl-iframe-relative-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/rtl/rtl-iframe-relative-expected.txt
@@ -1,31 +1,40 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutIFrame (positioned) IFRAME",
           "bounds": [400, 400],
           "drawsContent": true,
           "children": [
             {
+              "name": "Frame Overflow Controls Host Layer",
               "bounds": [400, 400],
               "children": [
                 {
+                  "name": "Frame Clipping Layer",
                   "bounds": [400, 400],
                   "children": [
                     {
+                      "name": "Frame Scrolling Layer",
                       "children": [
                         {
+                          "name": "Content Root Layer",
                           "bounds": [400, 400],
                           "children": [
                             {
+                              "name": "LayoutView #document",
                               "bounds": [400, 400],
                               "drawsContent": true,
                               "children": [
                                 {
+                                  "name": "LayoutBlockFlow (relative positioned) DIV id='layer'",
                                   "position": [242, 58],
                                   "bounds": [100, 100],
                                   "contentsOpaque": true,
diff --git a/third_party/WebKit/LayoutTests/compositing/rtl/rtl-relative-expected.txt b/third_party/WebKit/LayoutTests/compositing/rtl/rtl-relative-expected.txt
index 2e62142d..3cb6d3ccb 100644
--- a/third_party/WebKit/LayoutTests/compositing/rtl/rtl-relative-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/rtl/rtl-relative-expected.txt
@@ -1,12 +1,15 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow (relative positioned) DIV id='layer'",
           "position": [642, 58],
           "bounds": [100, 100],
           "contentsOpaque": true,
diff --git a/third_party/WebKit/LayoutTests/compositing/scrollbars/nested-overlay-scrollbars-expected.txt b/third_party/WebKit/LayoutTests/compositing/scrollbars/nested-overlay-scrollbars-expected.txt
index fb3a8a1c..f518d0f 100644
--- a/third_party/WebKit/LayoutTests/compositing/scrollbars/nested-overlay-scrollbars-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/scrollbars/nested-overlay-scrollbars-expected.txt
@@ -1,38 +1,46 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow (positioned) DIV id='outer'",
           "position": [8, 8],
           "bounds": [404, 404],
           "shouldFlattenTransform": false,
           "drawsContent": true,
           "children": [
             {
+              "name": "Scrolling Layer",
               "position": [2, 2],
               "bounds": [400, 400],
               "shouldFlattenTransform": false,
               "children": [
                 {
+                  "name": "Scrolling Contents Layer",
                   "bounds": [400, 704],
                   "drawsContent": true,
                   "children": [
                     {
+                      "name": "LayoutBlockFlow (positioned) DIV id='inner'",
                       "position": [0, 500],
                       "bounds": [204, 204],
                       "shouldFlattenTransform": false,
                       "drawsContent": true,
                       "children": [
                         {
+                          "name": "Scrolling Layer",
                           "position": [2, 2],
                           "bounds": [200, 200],
                           "shouldFlattenTransform": false,
                           "children": [
                             {
+                              "name": "Scrolling Contents Layer",
                               "bounds": [5000, 9000],
                               "drawsContent": true
                             }
@@ -41,9 +49,11 @@
                       ]
                     },
                     {
+                      "name": "Squashing Containment Layer",
                       "shouldFlattenTransform": false,
                       "children": [
                         {
+                          "name": "LayoutBlockFlow (positioned) DIV id='grey'",
                           "position": [2, 502],
                           "bounds": [100, 800],
                           "contentsOpaque": true,
@@ -51,6 +61,7 @@
                           "backgroundColor": "#808080"
                         },
                         {
+                          "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV id='spacer')",
                           "position": [2, 2502],
                           "bounds": [5000, 1000],
                           "drawsContent": true
@@ -58,18 +69,22 @@
                       ]
                     },
                     {
+                      "name": "Overflow Controls Host Layer",
                       "position": [2, 502],
                       "bounds": [204, 204],
                       "children": [
                         {
+                          "name": "Horizontal Scrollbar Layer",
                           "position": [2, 195],
                           "bounds": [193, 7]
                         },
                         {
+                          "name": "Vertical Scrollbar Layer",
                           "position": [195, 2],
                           "bounds": [7, 193]
                         },
                         {
+                          "name": "Scroll Corner Layer",
                           "position": [195, 195],
                           "bounds": [7, 7],
                           "drawsContent": true
@@ -81,9 +96,11 @@
               ]
             },
             {
+              "name": "Overflow Controls Host Layer",
               "bounds": [404, 404],
               "children": [
                 {
+                  "name": "Vertical Scrollbar Layer",
                   "position": [395, 2],
                   "bounds": [7, 400]
                 }
diff --git a/third_party/WebKit/LayoutTests/compositing/squashing/add-remove-squashed-layers-expected.txt b/third_party/WebKit/LayoutTests/compositing/squashing/add-remove-squashed-layers-expected.txt
index e092d8de..914e0aa 100644
--- a/third_party/WebKit/LayoutTests/compositing/squashing/add-remove-squashed-layers-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/squashing/add-remove-squashed-layers-expected.txt
@@ -2,17 +2,21 @@
 
 CASE 1, original layer tree with overlap1 and overlap2:
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "Squashing Containment Layer",
           "shouldFlattenTransform": false,
           "children": [
             {
+              "name": "LayoutBlockFlow (positioned) DIV class='composited'",
               "position": [60, 60],
               "bounds": [400, 400],
               "contentsOpaque": true,
@@ -20,6 +24,7 @@
               "backgroundColor": "#808080"
             },
             {
+              "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV id='A' class='overlap1')",
               "position": [140, 140],
               "bounds": [180, 180],
               "drawsContent": true
@@ -32,23 +37,21 @@
 }
 CASE 2, overlap3 gets added:
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow (positioned) DIV id='C' class='overlap3'",
-          "reason": "subtree"
-        }
-      ],
       "children": [
         {
+          "name": "Squashing Containment Layer",
           "shouldFlattenTransform": false,
           "children": [
             {
+              "name": "LayoutBlockFlow (positioned) DIV class='composited'",
               "position": [60, 60],
               "bounds": [400, 400],
               "contentsOpaque": true,
@@ -56,6 +59,7 @@
               "backgroundColor": "#808080"
             },
             {
+              "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV id='A' class='overlap1')",
               "position": [140, 140],
               "bounds": [260, 260],
               "drawsContent": true,
@@ -71,21 +75,35 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='C' class='overlap3'",
+      "reason": "subtree"
+    },
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='C' class='overlap3'",
+      "reason": "layoutObject insertion"
+    }
   ]
 }
 CASE 3, overlap2 gets removed. Since this does not resize the layer, there should only be a repaint of overlap2:
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "Squashing Containment Layer",
           "shouldFlattenTransform": false,
           "children": [
             {
+              "name": "LayoutBlockFlow (positioned) DIV class='composited'",
               "position": [60, 60],
               "bounds": [400, 400],
               "contentsOpaque": true,
@@ -93,6 +111,7 @@
               "backgroundColor": "#808080"
             },
             {
+              "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV id='A' class='overlap1')",
               "position": [140, 140],
               "bounds": [260, 260],
               "drawsContent": true,
@@ -108,21 +127,31 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='B' class='overlap2'",
+      "reason": "layoutObject removal"
+    }
   ]
 }
 CASE 4, overlap1 gets removed:
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "Squashing Containment Layer",
           "shouldFlattenTransform": false,
           "children": [
             {
+              "name": "LayoutBlockFlow (positioned) DIV class='composited'",
               "position": [60, 60],
               "bounds": [400, 400],
               "contentsOpaque": true,
@@ -130,6 +159,7 @@
               "backgroundColor": "#808080"
             },
             {
+              "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV id='C' class='overlap3')",
               "position": [300, 300],
               "bounds": [100, 100],
               "drawsContent": true,
@@ -155,27 +185,39 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='A' class='overlap1'",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='C' class='overlap3'",
+      "reason": "subtree"
+    },
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='C' class='overlap3'",
+      "reason": "compositing update"
+    }
   ]
 }
 CASE 5, overlap2 gets added back:
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow (positioned) DIV id='B' class='overlap2'",
-          "reason": "subtree"
-        }
-      ],
       "children": [
         {
+          "name": "Squashing Containment Layer",
           "shouldFlattenTransform": false,
           "children": [
             {
+              "name": "LayoutBlockFlow (positioned) DIV class='composited'",
               "position": [60, 60],
               "bounds": [400, 400],
               "contentsOpaque": true,
@@ -183,6 +225,7 @@
               "backgroundColor": "#808080"
             },
             {
+              "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV id='B' class='overlap2')",
               "position": [220, 220],
               "bounds": [180, 180],
               "drawsContent": true,
@@ -208,27 +251,47 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='B' class='overlap2'",
+      "reason": "subtree"
+    },
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='C' class='overlap3'",
+      "reason": "subtree"
+    },
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='C' class='overlap3'",
+      "reason": "subtree"
+    },
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='B' class='overlap2'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='C' class='overlap3'",
+      "reason": "compositing update"
+    }
   ]
 }
 CASE 6, overlap1 gets added back, and overlap3 gets removed:
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow (positioned) DIV id='A' class='overlap1'",
-          "reason": "subtree"
-        }
-      ],
       "children": [
         {
+          "name": "Squashing Containment Layer",
           "shouldFlattenTransform": false,
           "children": [
             {
+              "name": "LayoutBlockFlow (positioned) DIV class='composited'",
               "position": [60, 60],
               "bounds": [400, 400],
               "contentsOpaque": true,
@@ -236,6 +299,7 @@
               "backgroundColor": "#808080"
             },
             {
+              "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV id='A' class='overlap1')",
               "position": [140, 140],
               "bounds": [180, 180],
               "drawsContent": true,
@@ -266,6 +330,32 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='C' class='overlap3'",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='A' class='overlap1'",
+      "reason": "subtree"
+    },
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='B' class='overlap2'",
+      "reason": "subtree"
+    },
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='B' class='overlap2'",
+      "reason": "subtree"
+    },
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='A' class='overlap1'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='B' class='overlap2'",
+      "reason": "compositing update"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/compositing/squashing/clipping-ancestor-expected.txt b/third_party/WebKit/LayoutTests/compositing/squashing/clipping-ancestor-expected.txt
index e5a4026..e833c0d 100644
--- a/third_party/WebKit/LayoutTests/compositing/squashing/clipping-ancestor-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/squashing/clipping-ancestor-expected.txt
@@ -1,17 +1,21 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "Ancestor Clipping Layer",
           "position": [8, 8],
           "bounds": [200, 10],
           "shouldFlattenTransform": false,
           "children": [
             {
+              "name": "LayoutBlockFlow DIV id='inner'",
               "bounds": [200, 10],
               "contentsOpaque": true,
               "drawsContent": true,
@@ -20,6 +24,7 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow (positioned) DIV class='hoverable'",
           "position": [8, 0],
           "bounds": [100, 100],
           "contentsOpaque": true,
diff --git a/third_party/WebKit/LayoutTests/compositing/squashing/composited-bounds-for-negative-z-expected.txt b/third_party/WebKit/LayoutTests/compositing/squashing/composited-bounds-for-negative-z-expected.txt
index 06ec77e6..2ac77f5 100644
--- a/third_party/WebKit/LayoutTests/compositing/squashing/composited-bounds-for-negative-z-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/squashing/composited-bounds-for-negative-z-expected.txt
@@ -1,15 +1,19 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "children": [
         {
+          "name": "LayoutBlockFlow HTML",
           "bounds": [800, 408],
           "drawsContent": true,
           "children": [
             {
+              "name": "LayoutBlockFlow (positioned) DIV",
               "position": [8, 100],
               "bounds": [10, 10],
               "contentsOpaque": true,
@@ -17,28 +21,34 @@
               "backgroundColor": "#FF0000"
             },
             {
+              "name": "LayoutBlockFlow HTML (foreground) Layer",
               "bounds": [800, 408],
               "drawsContent": true
             },
             {
+              "name": "LayoutBlockFlow DIV",
               "position": [108, 100],
               "bounds": [300, 300],
               "shouldFlattenTransform": false,
               "drawsContent": true,
               "children": [
                 {
+                  "name": "Scrolling Layer",
                   "bounds": [285, 300],
                   "shouldFlattenTransform": false,
                   "children": [
                     {
+                      "name": "Scrolling Contents Layer",
                       "bounds": [285, 1000]
                     }
                   ]
                 },
                 {
+                  "name": "Overflow Controls Host Layer",
                   "bounds": [300, 300],
                   "children": [
                     {
+                      "name": "Vertical Scrollbar Layer",
                       "position": [285, 0],
                       "bounds": [15, 300]
                     }
@@ -47,13 +57,16 @@
               ]
             },
             {
+              "name": "Squashing Containment Layer",
               "shouldFlattenTransform": false,
               "children": [
                 {
+                  "name": "LayoutBlockFlow (relative positioned) DIV",
                   "position": [108, 100],
                   "bounds": [285, 1000]
                 },
                 {
+                  "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV)",
                   "position": [108, 100],
                   "bounds": [285, 1000],
                   "drawsContent": true
diff --git a/third_party/WebKit/LayoutTests/compositing/squashing/do-not-squash-non-self-painting-layer-expected.txt b/third_party/WebKit/LayoutTests/compositing/squashing/do-not-squash-non-self-painting-layer-expected.txt
index 2c98031e..08403e4 100644
--- a/third_party/WebKit/LayoutTests/compositing/squashing/do-not-squash-non-self-painting-layer-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/squashing/do-not-squash-non-self-painting-layer-expected.txt
@@ -1,13 +1,16 @@
 Item 1
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow DIV id='composited-container'",
           "position": [8, 8],
           "bounds": [784, 0],
           "drawsContent": true,
diff --git a/third_party/WebKit/LayoutTests/compositing/squashing/dont-squash-into-iframes-expected.txt b/third_party/WebKit/LayoutTests/compositing/squashing/dont-squash-into-iframes-expected.txt
index 4b43014..68514767 100644
--- a/third_party/WebKit/LayoutTests/compositing/squashing/dont-squash-into-iframes-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/squashing/dont-squash-into-iframes-expected.txt
@@ -1,18 +1,22 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutIFrame (positioned) IFRAME",
           "bounds": [104, 104],
           "contentsOpaque": true,
           "drawsContent": true,
           "backgroundColor": "#ADD8E6"
         },
         {
+          "name": "LayoutBlockFlow (positioned) DIV",
           "position": [50, 50],
           "bounds": [200, 200],
           "contentsOpaque": true,
diff --git a/third_party/WebKit/LayoutTests/compositing/squashing/dont-squash-into-videos-expected.txt b/third_party/WebKit/LayoutTests/compositing/squashing/dont-squash-into-videos-expected.txt
index 47b684c..28ce9a7 100644
--- a/third_party/WebKit/LayoutTests/compositing/squashing/dont-squash-into-videos-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/squashing/dont-squash-into-videos-expected.txt
@@ -1,27 +1,33 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutVideo (positioned) VIDEO",
           "bounds": [100, 100],
           "contentsOpaque": true,
           "drawsContent": true,
           "backgroundColor": "#ADD8E6",
           "children": [
             {
+              "name": "LayoutFlexibleBox (relative positioned) DIV",
               "bounds": [100, 100],
               "drawsContent": true
             },
             {
+              "name": "LayoutFlexibleBox (relative positioned) DIV",
               "bounds": [100, 58]
             }
           ]
         },
         {
+          "name": "LayoutBlockFlow (positioned) DIV",
           "position": [50, 50],
           "bounds": [200, 200],
           "contentsOpaque": true,
diff --git a/third_party/WebKit/LayoutTests/compositing/squashing/iframes-are-never-squashed-expected.txt b/third_party/WebKit/LayoutTests/compositing/squashing/iframes-are-never-squashed-expected.txt
index 170979163..6ad1c59 100644
--- a/third_party/WebKit/LayoutTests/compositing/squashing/iframes-are-never-squashed-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/squashing/iframes-are-never-squashed-expected.txt
@@ -1,12 +1,15 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow DIV",
           "position": [8, 8],
           "bounds": [200, 200],
           "contentsOpaque": true,
@@ -14,6 +17,7 @@
           "backgroundColor": "#D3D3D3"
         },
         {
+          "name": "LayoutIFrame (positioned) IFRAME",
           "bounds": [104, 104],
           "contentsOpaque": true,
           "drawsContent": true,
diff --git a/third_party/WebKit/LayoutTests/compositing/squashing/invalidate-when-leaving-squashed-layer-expected.txt b/third_party/WebKit/LayoutTests/compositing/squashing/invalidate-when-leaving-squashed-layer-expected.txt
index 35e63e2..69d6247 100644
--- a/third_party/WebKit/LayoutTests/compositing/squashing/invalidate-when-leaving-squashed-layer-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/squashing/invalidate-when-leaving-squashed-layer-expected.txt
@@ -1,15 +1,19 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "Squashing Containment Layer",
           "shouldFlattenTransform": false,
           "children": [
             {
+              "name": "LayoutBlockFlow (positioned) DIV",
               "position": [8, 8],
               "bounds": [200, 200],
               "contentsOpaque": true,
@@ -17,6 +21,7 @@
               "backgroundColor": "#D3D3D3"
             },
             {
+              "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV)",
               "position": [50, 50],
               "bounds": [200, 200],
               "drawsContent": true,
@@ -31,6 +36,7 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow (positioned) DIV id='target'",
           "position": [50, 50],
           "bounds": [200, 200],
           "contentsOpaque": true,
@@ -46,6 +52,16 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='target'",
+      "reason": "subtree"
+    },
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='target'",
+      "reason": "subtree"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/compositing/squashing/invalidation-for-subpixel-offset-of-squashed-layer-expected.txt b/third_party/WebKit/LayoutTests/compositing/squashing/invalidation-for-subpixel-offset-of-squashed-layer-expected.txt
index d22c76a..ff5a305 100644
--- a/third_party/WebKit/LayoutTests/compositing/squashing/invalidation-for-subpixel-offset-of-squashed-layer-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/squashing/invalidation-for-subpixel-offset-of-squashed-layer-expected.txt
@@ -1,15 +1,19 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "Squashing Containment Layer",
           "shouldFlattenTransform": false,
           "children": [
             {
+              "name": "LayoutBlockFlow (positioned) DIV",
               "position": [8, 8],
               "bounds": [200, 200],
               "contentsOpaque": true,
@@ -17,6 +21,7 @@
               "backgroundColor": "#D3D3D3"
             },
             {
+              "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV)",
               "position": [50, 50],
               "bounds": [251, 251],
               "drawsContent": true,
@@ -32,6 +37,12 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='target'",
+      "reason": "style change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/compositing/squashing/invalidations-with-large-negative-margin-expected.txt b/third_party/WebKit/LayoutTests/compositing/squashing/invalidations-with-large-negative-margin-expected.txt
index 533fbd3..19f1f3f 100644
--- a/third_party/WebKit/LayoutTests/compositing/squashing/invalidations-with-large-negative-margin-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/squashing/invalidations-with-large-negative-margin-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -18,6 +20,12 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='chip'",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/compositing/squashing/invalidations-with-large-negative-margin-inline-content-expected.txt b/third_party/WebKit/LayoutTests/compositing/squashing/invalidations-with-large-negative-margin-inline-content-expected.txt
index 382c3c09..a9ec2e57 100644
--- a/third_party/WebKit/LayoutTests/compositing/squashing/invalidations-with-large-negative-margin-inline-content-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/squashing/invalidations-with-large-negative-margin-inline-content-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -13,6 +15,12 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV id='chip'",
+      "reason": "style change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/compositing/squashing/invisible-layers-should-not-affect-geometry-expected.txt b/third_party/WebKit/LayoutTests/compositing/squashing/invisible-layers-should-not-affect-geometry-expected.txt
index 3b329fb..9dcdf0698 100644
--- a/third_party/WebKit/LayoutTests/compositing/squashing/invisible-layers-should-not-affect-geometry-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/squashing/invisible-layers-should-not-affect-geometry-expected.txt
@@ -1,15 +1,19 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "Squashing Containment Layer",
           "shouldFlattenTransform": false,
           "children": [
             {
+              "name": "LayoutBlockFlow (positioned) DIV class='composited box'",
               "position": [10, 10],
               "bounds": [100, 100],
               "contentsOpaque": true,
@@ -17,6 +21,7 @@
               "backgroundColor": "#008000"
             },
             {
+              "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV class='box')",
               "position": [10, 10],
               "bounds": [100, 100],
               "drawsContent": true
diff --git a/third_party/WebKit/LayoutTests/compositing/squashing/move-squashing-layer-expected.txt b/third_party/WebKit/LayoutTests/compositing/squashing/move-squashing-layer-expected.txt
index e7323dc..8fc247ab 100644
--- a/third_party/WebKit/LayoutTests/compositing/squashing/move-squashing-layer-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/squashing/move-squashing-layer-expected.txt
@@ -1,14 +1,17 @@
 This tests that squashed layers' offset from renderer is updated properly. If not properly updated, the two divs will appear to be aligned vertically in the pixel results, while really the blue div ('squashed') should be offset 100px left of the green ('host').
 
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow (positioned) DIV id='background'",
           "position": [8, 50],
           "bounds": [100, 100],
           "contentsOpaque": true,
@@ -16,9 +19,11 @@
           "backgroundColor": "#FFFF00"
         },
         {
+          "name": "Squashing Containment Layer",
           "shouldFlattenTransform": false,
           "children": [
             {
+              "name": "LayoutBlockFlow (positioned) DIV id='host'",
               "position": [100, 100],
               "bounds": [100, 100],
               "contentsOpaque": true,
@@ -26,6 +31,7 @@
               "backgroundColor": "#008000"
             },
             {
+              "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='squashed')",
               "position": [8, 8],
               "bounds": [100, 100],
               "drawsContent": true
diff --git a/third_party/WebKit/LayoutTests/compositing/squashing/no-squashing-for-filters-expected.txt b/third_party/WebKit/LayoutTests/compositing/squashing/no-squashing-for-filters-expected.txt
index 205f651..3b0c3fe0 100644
--- a/third_party/WebKit/LayoutTests/compositing/squashing/no-squashing-for-filters-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/squashing/no-squashing-for-filters-expected.txt
@@ -1,12 +1,15 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow DIV",
           "position": [8, 8],
           "bounds": [100, 100],
           "contentsOpaque": true,
@@ -14,15 +17,18 @@
           "backgroundColor": "#ADD8E6"
         },
         {
+          "name": "Squashing Containment Layer",
           "shouldFlattenTransform": false,
           "children": [
             {
+              "name": "LayoutBlockFlow (positioned) DIV class='trysquashed'",
               "bounds": [50, 50],
               "contentsOpaque": true,
               "drawsContent": true,
               "backgroundColor": "#D3D3D3"
             },
             {
+              "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV class='trysquashed')",
               "position": [50, 50],
               "bounds": [50, 50],
               "drawsContent": true
diff --git a/third_party/WebKit/LayoutTests/compositing/squashing/no-squashing-into-fixed-position-that-clips-expected.txt b/third_party/WebKit/LayoutTests/compositing/squashing/no-squashing-into-fixed-position-that-clips-expected.txt
index 1b4e54f5..6304fc1 100644
--- a/third_party/WebKit/LayoutTests/compositing/squashing/no-squashing-into-fixed-position-that-clips-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/squashing/no-squashing-into-fixed-position-that-clips-expected.txt
@@ -1,12 +1,15 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow (positioned) DIV class='fixedpos'",
           "position": [0, 50],
           "bounds": [800, 550],
           "contentsOpaque": true,
@@ -14,9 +17,11 @@
           "backgroundColor": "#ADD8E6",
           "children": [
             {
+              "name": "Child Containment Layer",
               "bounds": [800, 550],
               "children": [
                 {
+                  "name": "LayoutBlockFlow (positioned) DIV class='compositedlayer'",
                   "position": [400, -10],
                   "bounds": [24, 100],
                   "contentsOpaque": true,
@@ -28,6 +33,7 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow (positioned) DIV class='notsquashedelement'",
           "bounds": [800, 60],
           "contentsOpaque": true,
           "drawsContent": true,
diff --git a/third_party/WebKit/LayoutTests/compositing/squashing/opacity-squashed-owner-expected.txt b/third_party/WebKit/LayoutTests/compositing/squashing/opacity-squashed-owner-expected.txt
index 5072536..4eb1877 100644
--- a/third_party/WebKit/LayoutTests/compositing/squashing/opacity-squashed-owner-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/squashing/opacity-squashed-owner-expected.txt
@@ -1,15 +1,19 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "Squashing Containment Layer",
           "shouldFlattenTransform": false,
           "children": [
             {
+              "name": "LayoutBlockFlow DIV id='target' class='composited box opaque'",
               "position": [8, 8],
               "bounds": [100, 100],
               "opacity": 0.5,
@@ -18,6 +22,7 @@
               "backgroundColor": "#ADD8E6"
             },
             {
+              "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV class='squashed')",
               "position": [16, 4],
               "bounds": [40, 90],
               "drawsContent": true
diff --git a/third_party/WebKit/LayoutTests/compositing/squashing/repaint-child-of-squashed-expected.txt b/third_party/WebKit/LayoutTests/compositing/squashing/repaint-child-of-squashed-expected.txt
index 70ecf90..5c68743 100644
--- a/third_party/WebKit/LayoutTests/compositing/squashing/repaint-child-of-squashed-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/squashing/repaint-child-of-squashed-expected.txt
@@ -1,16 +1,20 @@
 CASE 1, original layer tree
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "Squashing Containment Layer",
           "shouldFlattenTransform": false,
           "children": [
             {
+              "name": "LayoutBlockFlow (positioned) DIV class='composited box behind'",
               "position": [50, 50],
               "bounds": [100, 100],
               "contentsOpaque": true,
@@ -18,6 +22,7 @@
               "backgroundColor": "#0000FF"
             },
             {
+              "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV class='box top')",
               "position": [130, 130],
               "bounds": [100, 100],
               "drawsContent": true
@@ -30,17 +35,21 @@
 }
 CASE 2, change color of "inner" to red
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "Squashing Containment Layer",
           "shouldFlattenTransform": false,
           "children": [
             {
+              "name": "LayoutBlockFlow (positioned) DIV class='composited box behind'",
               "position": [50, 50],
               "bounds": [100, 100],
               "contentsOpaque": true,
@@ -48,6 +57,7 @@
               "backgroundColor": "#0000FF"
             },
             {
+              "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV class='box top')",
               "position": [130, 130],
               "bounds": [100, 100],
               "drawsContent": true,
@@ -63,6 +73,12 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='inner'",
+      "reason": "style change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/compositing/squashing/repaint-overflow-scrolled-squashed-content-expected.txt b/third_party/WebKit/LayoutTests/compositing/squashing/repaint-overflow-scrolled-squashed-content-expected.txt
index 94776475d..a6268ce6 100644
--- a/third_party/WebKit/LayoutTests/compositing/squashing/repaint-overflow-scrolled-squashed-content-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/squashing/repaint-overflow-scrolled-squashed-content-expected.txt
@@ -1,23 +1,28 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "Ancestor Clipping Layer",
           "position": [8, 8],
           "bounds": [185, 185],
           "shouldFlattenTransform": false,
           "children": [
             {
+              "name": "LayoutBlockFlow DIV id='foo2'",
               "bounds": [150, 1000],
               "contentsOpaque": true,
               "drawsContent": true,
               "backgroundColor": "#ADD8E6"
             },
             {
+              "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV id='foo')",
               "bounds": [100, 1000],
               "drawsContent": true,
               "paintInvalidations": [
@@ -32,6 +37,12 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='foo'",
+      "reason": "style change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/compositing/squashing/repaint-squashed-layer-in-rect-expected.txt b/third_party/WebKit/LayoutTests/compositing/squashing/repaint-squashed-layer-in-rect-expected.txt
index fa89af9..4de334a 100644
--- a/third_party/WebKit/LayoutTests/compositing/squashing/repaint-squashed-layer-in-rect-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/squashing/repaint-squashed-layer-in-rect-expected.txt
@@ -1,15 +1,19 @@
 {
+  "name": "Content Root Layer",
   "bounds": [808, 816],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [808, 816],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "Squashing Containment Layer",
           "shouldFlattenTransform": false,
           "children": [
             {
+              "name": "LayoutBlockFlow DIV",
               "position": [8, 8],
               "bounds": [800, 800],
               "contentsOpaque": true,
@@ -17,6 +21,7 @@
               "backgroundColor": "#D3D3D3"
             },
             {
+              "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV)",
               "position": [8, 0],
               "bounds": [592, 600],
               "drawsContent": true,
@@ -32,6 +37,12 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV id='imgElement'",
+      "reason": "style change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/compositing/squashing/repaint-via-layout-offset-expected.txt b/third_party/WebKit/LayoutTests/compositing/squashing/repaint-via-layout-offset-expected.txt
index 3a0f802..60bb1d3 100644
--- a/third_party/WebKit/LayoutTests/compositing/squashing/repaint-via-layout-offset-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/squashing/repaint-via-layout-offset-expected.txt
@@ -1,15 +1,19 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "Squashing Containment Layer",
           "shouldFlattenTransform": false,
           "children": [
             {
+              "name": "LayoutBlockFlow DIV",
               "position": [8, 8],
               "bounds": [200, 200],
               "contentsOpaque": true,
@@ -17,6 +21,7 @@
               "backgroundColor": "#ADD8E6"
             },
             {
+              "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV id='container')",
               "position": [50, 50],
               "bounds": [50, 50],
               "drawsContent": true,
@@ -32,6 +37,12 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (positioned) SPAN class='child embiggen'",
+      "reason": "style change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/compositing/squashing/resize-squashing-layer-that-needs-full-repaint-expected.txt b/third_party/WebKit/LayoutTests/compositing/squashing/resize-squashing-layer-that-needs-full-repaint-expected.txt
index 60df504586..3a17bbcd 100644
--- a/third_party/WebKit/LayoutTests/compositing/squashing/resize-squashing-layer-that-needs-full-repaint-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/squashing/resize-squashing-layer-that-needs-full-repaint-expected.txt
@@ -1,19 +1,24 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "Squashing Containment Layer",
           "shouldFlattenTransform": false,
           "children": [
             {
+              "name": "LayoutBlockFlow DIV",
               "position": [8, 8],
               "bounds": [500, 500]
             },
             {
+              "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV)",
               "position": [55, 55],
               "bounds": [500, 500],
               "drawsContent": true,
@@ -39,6 +44,20 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='to-be-removed'",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutBlockFlow (positioned) DIV",
+      "reason": "subtree"
+    },
+    {
+      "object": "LayoutBlockFlow (positioned) DIV",
+      "reason": "compositing update"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/compositing/squashing/squash-above-fixed-1-expected.txt b/third_party/WebKit/LayoutTests/compositing/squashing/squash-above-fixed-1-expected.txt
index d5d26f33..61ac07a 100644
--- a/third_party/WebKit/LayoutTests/compositing/squashing/squash-above-fixed-1-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/squashing/squash-above-fixed-1-expected.txt
@@ -4,14 +4,17 @@
 
 CASE 1, original layer tree:
 {
+  "name": "Content Root Layer",
   "bounds": [785, 1400],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [785, 1400],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow (positioned) DIV class='composited background'",
           "position": [100, 150],
           "bounds": [300, 300],
           "contentsOpaque": true,
@@ -19,9 +22,11 @@
           "backgroundColor": "#D3D3D3"
         },
         {
+          "name": "Squashing Containment Layer",
           "shouldFlattenTransform": false,
           "children": [
             {
+              "name": "LayoutBlockFlow (relative positioned) DIV id='paragraph-b' class='overlapping lime'",
               "position": [0, 100],
               "bounds": [200, 100],
               "contentsOpaque": true,
@@ -29,6 +34,7 @@
               "backgroundColor": "#00FF00"
             },
             {
+              "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='paragraph-c' class='overlapping cyan')",
               "position": [0, 200],
               "bounds": [200, 300],
               "drawsContent": true
@@ -41,9 +47,11 @@
 }
 CASE 2, scrolling y to 80, new layers will be squashed, so things repaint:
 {
+  "name": "Content Root Layer",
   "bounds": [785, 1400],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [785, 1400],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -76,6 +84,7 @@
       ],
       "children": [
         {
+          "name": "LayoutBlockFlow (positioned) DIV class='composited background'",
           "position": [100, 230],
           "bounds": [300, 300],
           "contentsOpaque": true,
@@ -83,9 +92,11 @@
           "backgroundColor": "#D3D3D3"
         },
         {
+          "name": "Squashing Containment Layer",
           "shouldFlattenTransform": false,
           "children": [
             {
+              "name": "LayoutBlockFlow (relative positioned) DIV id='paragraph-c' class='overlapping cyan'",
               "position": [0, 200],
               "bounds": [200, 100],
               "contentsOpaque": true,
@@ -100,6 +111,7 @@
               ]
             },
             {
+              "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='paragraph-d' class='overlapping lime')",
               "position": [0, 300],
               "bounds": [200, 300],
               "drawsContent": true,
@@ -125,18 +137,59 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (relative positioned) DIV id='paragraph-c' class='overlapping cyan'",
+      "reason": "subtree"
+    },
+    {
+      "object": "LayoutBlockFlow (relative positioned) DIV id='paragraph-d' class='overlapping lime'",
+      "reason": "subtree"
+    },
+    {
+      "object": "LayoutBlockFlow (relative positioned) DIV id='paragraph-e' class='overlapping cyan'",
+      "reason": "subtree"
+    },
+    {
+      "object": "LayoutBlockFlow (relative positioned) DIV id='paragraph-f' class='overlapping lime'",
+      "reason": "subtree"
+    },
+    {
+      "object": "LayoutBlockFlow (relative positioned) DIV id='paragraph-b' class='overlapping lime'",
+      "reason": "compositing update"
+    },
+    {
+      "object": "LayoutBlockFlow (relative positioned) DIV id='paragraph-c' class='overlapping cyan'",
+      "reason": "compositing update"
+    },
+    {
+      "object": "LayoutBlockFlow (relative positioned) DIV id='paragraph-d' class='overlapping lime'",
+      "reason": "compositing update"
+    },
+    {
+      "object": "LayoutBlockFlow (relative positioned) DIV id='paragraph-e' class='overlapping cyan'",
+      "reason": "compositing update"
+    },
+    {
+      "object": "LayoutBlockFlow (relative positioned) DIV id='paragraph-f' class='overlapping lime'",
+      "reason": "compositing update"
+    }
   ]
 }
 CASE 3, scrolling y to 120, no repaints expected:
 {
+  "name": "Content Root Layer",
   "bounds": [785, 1400],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [785, 1400],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow (positioned) DIV class='composited background'",
           "position": [100, 270],
           "bounds": [300, 300],
           "contentsOpaque": true,
@@ -144,9 +197,11 @@
           "backgroundColor": "#D3D3D3"
         },
         {
+          "name": "Squashing Containment Layer",
           "shouldFlattenTransform": false,
           "children": [
             {
+              "name": "LayoutBlockFlow (relative positioned) DIV id='paragraph-c' class='overlapping cyan'",
               "position": [0, 200],
               "bounds": [200, 100],
               "contentsOpaque": true,
@@ -154,6 +209,7 @@
               "backgroundColor": "#00FFFF"
             },
             {
+              "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='paragraph-d' class='overlapping lime')",
               "position": [0, 300],
               "bounds": [200, 300],
               "drawsContent": true
@@ -166,9 +222,11 @@
 }
 CASE 4, scrolling y to 170 new layers will be squashed, so things repaint:
 {
+  "name": "Content Root Layer",
   "bounds": [785, 1400],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [785, 1400],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -201,6 +259,7 @@
       ],
       "children": [
         {
+          "name": "LayoutBlockFlow (positioned) DIV class='composited background'",
           "position": [100, 320],
           "bounds": [300, 300],
           "contentsOpaque": true,
@@ -208,9 +267,11 @@
           "backgroundColor": "#D3D3D3"
         },
         {
+          "name": "Squashing Containment Layer",
           "shouldFlattenTransform": false,
           "children": [
             {
+              "name": "LayoutBlockFlow (relative positioned) DIV id='paragraph-d' class='overlapping lime'",
               "position": [0, 300],
               "bounds": [200, 100],
               "contentsOpaque": true,
@@ -225,6 +286,7 @@
               ]
             },
             {
+              "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='paragraph-e' class='overlapping cyan')",
               "position": [0, 400],
               "bounds": [200, 300],
               "drawsContent": true,
@@ -250,6 +312,44 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (relative positioned) DIV id='paragraph-d' class='overlapping lime'",
+      "reason": "subtree"
+    },
+    {
+      "object": "LayoutBlockFlow (relative positioned) DIV id='paragraph-e' class='overlapping cyan'",
+      "reason": "subtree"
+    },
+    {
+      "object": "LayoutBlockFlow (relative positioned) DIV id='paragraph-f' class='overlapping lime'",
+      "reason": "subtree"
+    },
+    {
+      "object": "LayoutBlockFlow (relative positioned) DIV id='paragraph-g' class='overlapping cyan'",
+      "reason": "subtree"
+    },
+    {
+      "object": "LayoutBlockFlow (relative positioned) DIV id='paragraph-c' class='overlapping cyan'",
+      "reason": "compositing update"
+    },
+    {
+      "object": "LayoutBlockFlow (relative positioned) DIV id='paragraph-d' class='overlapping lime'",
+      "reason": "compositing update"
+    },
+    {
+      "object": "LayoutBlockFlow (relative positioned) DIV id='paragraph-e' class='overlapping cyan'",
+      "reason": "compositing update"
+    },
+    {
+      "object": "LayoutBlockFlow (relative positioned) DIV id='paragraph-f' class='overlapping lime'",
+      "reason": "compositing update"
+    },
+    {
+      "object": "LayoutBlockFlow (relative positioned) DIV id='paragraph-g' class='overlapping cyan'",
+      "reason": "compositing update"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/compositing/squashing/squash-above-fixed-2-expected.txt b/third_party/WebKit/LayoutTests/compositing/squashing/squash-above-fixed-2-expected.txt
index 3646c3f..414009b 100644
--- a/third_party/WebKit/LayoutTests/compositing/squashing/squash-above-fixed-2-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/squashing/squash-above-fixed-2-expected.txt
@@ -2,14 +2,17 @@
 
 CASE 1, original layer tree:
 {
+  "name": "Content Root Layer",
   "bounds": [785, 4050],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [785, 4050],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow (positioned) DIV id='fixed'",
           "bounds": [400, 200],
           "contentsOpaque": true,
           "drawsContent": true,
@@ -17,6 +20,7 @@
           "backgroundColor": "#0000FF",
           "children": [
             {
+              "name": "LayoutBlockFlow DIV id='compositedInsideFixed'",
               "bounds": [50, 50],
               "contentsOpaque": true,
               "drawsContent": true,
@@ -26,6 +30,7 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow (positioned) DIV id='container'",
           "position": [100, 50],
           "bounds": [200, 4000],
           "contentsOpaque": true,
@@ -38,14 +43,17 @@
 }
 CASE 2, scrolling y to 80, the "container" element should remain positioned with respect to the scrolled document, the fixed-pos layer compensates for the new scroll position:
 {
+  "name": "Content Root Layer",
   "bounds": [785, 4050],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [785, 4050],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow (positioned) DIV id='fixed'",
           "position": [0, 80],
           "bounds": [400, 200],
           "contentsOpaque": true,
@@ -54,6 +62,7 @@
           "backgroundColor": "#0000FF",
           "children": [
             {
+              "name": "LayoutBlockFlow DIV id='compositedInsideFixed'",
               "bounds": [50, 50],
               "contentsOpaque": true,
               "drawsContent": true,
@@ -63,6 +72,7 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow (positioned) DIV id='container'",
           "position": [100, 50],
           "bounds": [200, 4000],
           "contentsOpaque": true,
diff --git a/third_party/WebKit/LayoutTests/compositing/squashing/squash-above-fixed-3-expected.txt b/third_party/WebKit/LayoutTests/compositing/squashing/squash-above-fixed-3-expected.txt
index 0e4b6dd..0125fb9f 100644
--- a/third_party/WebKit/LayoutTests/compositing/squashing/squash-above-fixed-3-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/squashing/squash-above-fixed-3-expected.txt
@@ -4,20 +4,24 @@
 
 CASE 1, original layer tree:
 {
+  "name": "Content Root Layer",
   "bounds": [785, 4100],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [785, 4100],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow (positioned) DIV id='backgroundFixed'",
           "bounds": [400, 400],
           "contentsOpaque": true,
           "drawsContent": true,
           "backgroundColor": "#808080"
         },
         {
+          "name": "LayoutBlockFlow (positioned) DIV id='container'",
           "position": [100, 100],
           "bounds": [100, 4000],
           "contentsOpaque": true,
@@ -25,6 +29,7 @@
           "backgroundColor": "#008000",
           "children": [
             {
+              "name": "LayoutBlockFlow (positioned) DIV id='innerFixed'",
               "position": [0, 50],
               "bounds": [200, 100],
               "contentsOpaque": true,
@@ -32,6 +37,7 @@
               "backgroundColor": "#0000FF"
             },
             {
+              "name": "LayoutBlockFlow (positioned) DIV id='innerScrolling'",
               "position": [100, 0],
               "bounds": [100, 100],
               "contentsOpaque": true,
@@ -46,14 +52,17 @@
 }
 CASE 2, scrolling y by 10 pixels, both the "container" and "inner" should scroll properly.
 {
+  "name": "Content Root Layer",
   "bounds": [785, 4100],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [785, 4100],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow (positioned) DIV id='backgroundFixed'",
           "position": [0, 10],
           "bounds": [400, 400],
           "contentsOpaque": true,
@@ -61,6 +70,7 @@
           "backgroundColor": "#808080"
         },
         {
+          "name": "LayoutBlockFlow (positioned) DIV id='container'",
           "position": [100, 100],
           "bounds": [100, 4000],
           "contentsOpaque": true,
@@ -68,6 +78,7 @@
           "backgroundColor": "#008000",
           "children": [
             {
+              "name": "LayoutBlockFlow (positioned) DIV id='innerFixed'",
               "position": [0, 60],
               "bounds": [200, 100],
               "contentsOpaque": true,
@@ -75,6 +86,7 @@
               "backgroundColor": "#0000FF"
             },
             {
+              "name": "LayoutBlockFlow (positioned) DIV id='innerScrolling'",
               "position": [100, 0],
               "bounds": [100, 100],
               "contentsOpaque": true,
@@ -89,14 +101,17 @@
 }
 CASE 3, scrolling y further so that "inner" no longer overlaps the fixed-pos layer, then the stacking context of "container" includes the "innerScrolling" layer, and doubles in width:
 {
+  "name": "Content Root Layer",
   "bounds": [785, 4100],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [785, 4100],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow (positioned) DIV id='backgroundFixed'",
           "position": [0, 110],
           "bounds": [400, 400],
           "contentsOpaque": true,
@@ -104,6 +119,7 @@
           "backgroundColor": "#808080"
         },
         {
+          "name": "LayoutBlockFlow (positioned) DIV id='container'",
           "position": [100, 100],
           "bounds": [200, 4000],
           "drawsContent": true,
@@ -117,6 +133,7 @@
           ],
           "children": [
             {
+              "name": "LayoutBlockFlow (positioned) DIV id='innerFixed'",
               "position": [0, 160],
               "bounds": [200, 100],
               "contentsOpaque": true,
@@ -127,6 +144,12 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='innerScrolling'",
+      "reason": "compositing update"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/compositing/squashing/squash-compositing-hover-expected.txt b/third_party/WebKit/LayoutTests/compositing/squashing/squash-compositing-hover-expected.txt
index fe5c0261..ccd0b69e 100644
--- a/third_party/WebKit/LayoutTests/compositing/squashing/squash-compositing-hover-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/squashing/squash-compositing-hover-expected.txt
@@ -2,21 +2,26 @@
 
 Case 1, original layer tree:
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow DIV class='composited'",
           "position": [8, 8],
           "bounds": [784, 0]
         },
         {
+          "name": "Squashing Containment Layer",
           "shouldFlattenTransform": false,
           "children": [
             {
+              "name": "LayoutBlockFlow (positioned) DIV class='composited box behind'",
               "position": [100, 100],
               "bounds": [100, 100],
               "contentsOpaque": true,
@@ -24,6 +29,7 @@
               "backgroundColor": "#0000FF"
             },
             {
+              "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV class='box middle')",
               "position": [180, 180],
               "bounds": [260, 260],
               "drawsContent": true
@@ -36,18 +42,22 @@
 }
 Case 2: hovering over the "middle" element (causes that div to become its own composited layer)
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow DIV class='composited'",
           "position": [8, 8],
           "bounds": [784, 0]
         },
         {
+          "name": "LayoutBlockFlow (positioned) DIV class='composited box behind'",
           "position": [100, 100],
           "bounds": [100, 100],
           "contentsOpaque": true,
@@ -55,9 +65,11 @@
           "backgroundColor": "#0000FF"
         },
         {
+          "name": "Squashing Containment Layer",
           "shouldFlattenTransform": false,
           "children": [
             {
+              "name": "LayoutBlockFlow (positioned) DIV class='box middle'",
               "position": [180, 180],
               "bounds": [100, 100],
               "contentsOpaque": true,
@@ -65,6 +77,7 @@
               "backgroundColor": "#008000"
             },
             {
+              "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV class='box middle2')",
               "position": [260, 260],
               "bounds": [180, 180],
               "drawsContent": true
@@ -77,21 +90,26 @@
 }
 Case 3: hovering over the "middle2" element (causes that div to become its own composited layer)
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow DIV class='composited'",
           "position": [8, 8],
           "bounds": [784, 0]
         },
         {
+          "name": "Squashing Containment Layer",
           "shouldFlattenTransform": false,
           "children": [
             {
+              "name": "LayoutBlockFlow (positioned) DIV class='composited box behind'",
               "position": [100, 100],
               "bounds": [100, 100],
               "contentsOpaque": true,
@@ -99,6 +117,7 @@
               "backgroundColor": "#0000FF"
             },
             {
+              "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV class='box middle')",
               "position": [180, 180],
               "bounds": [100, 100],
               "drawsContent": true
@@ -106,9 +125,11 @@
           ]
         },
         {
+          "name": "Squashing Containment Layer",
           "shouldFlattenTransform": false,
           "children": [
             {
+              "name": "LayoutBlockFlow (positioned) DIV class='box middle2'",
               "position": [260, 260],
               "bounds": [100, 100],
               "contentsOpaque": true,
@@ -116,6 +137,7 @@
               "backgroundColor": "#008000"
             },
             {
+              "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV class='box top')",
               "position": [340, 340],
               "bounds": [100, 100],
               "drawsContent": true
@@ -128,21 +150,26 @@
 }
 Case 4: hovering over the "top" element (causes that div to become its own composited layer)
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow DIV class='composited'",
           "position": [8, 8],
           "bounds": [784, 0]
         },
         {
+          "name": "Squashing Containment Layer",
           "shouldFlattenTransform": false,
           "children": [
             {
+              "name": "LayoutBlockFlow (positioned) DIV class='composited box behind'",
               "position": [100, 100],
               "bounds": [100, 100],
               "contentsOpaque": true,
@@ -150,6 +177,7 @@
               "backgroundColor": "#0000FF"
             },
             {
+              "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV class='box middle')",
               "position": [180, 180],
               "bounds": [180, 180],
               "drawsContent": true
@@ -157,6 +185,7 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow (positioned) DIV class='box top'",
           "position": [340, 340],
           "bounds": [100, 100],
           "contentsOpaque": true,
@@ -169,21 +198,26 @@
 }
 Case 5: back to situation in case 1
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow DIV class='composited'",
           "position": [8, 8],
           "bounds": [784, 0]
         },
         {
+          "name": "Squashing Containment Layer",
           "shouldFlattenTransform": false,
           "children": [
             {
+              "name": "LayoutBlockFlow (positioned) DIV class='composited box behind'",
               "position": [100, 100],
               "bounds": [100, 100],
               "contentsOpaque": true,
@@ -191,6 +225,7 @@
               "backgroundColor": "#0000FF"
             },
             {
+              "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV class='box middle')",
               "position": [180, 180],
               "bounds": [260, 260],
               "drawsContent": true
diff --git a/third_party/WebKit/LayoutTests/compositing/squashing/squash-onto-distant-relative-expected.txt b/third_party/WebKit/LayoutTests/compositing/squashing/squash-onto-distant-relative-expected.txt
index 3ac81e9..fc211f1 100644
--- a/third_party/WebKit/LayoutTests/compositing/squashing/squash-onto-distant-relative-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/squashing/squash-onto-distant-relative-expected.txt
@@ -1,15 +1,19 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "Squashing Containment Layer",
           "shouldFlattenTransform": false,
           "children": [
             {
+              "name": "LayoutBlockFlow (positioned) DIV id='squashing'",
               "position": [-33554430, 0],
               "bounds": [1, 1],
               "contentsOpaque": true,
@@ -17,6 +21,7 @@
               "backgroundColor": "#FFFFFF"
             },
             {
+              "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV id='squashed')",
               "position": [600, 0],
               "bounds": [200, 200],
               "drawsContent": true
diff --git a/third_party/WebKit/LayoutTests/compositing/squashing/squash-onto-nephew-expected.txt b/third_party/WebKit/LayoutTests/compositing/squashing/squash-onto-nephew-expected.txt
index e7ba0f0..2adae9f 100644
--- a/third_party/WebKit/LayoutTests/compositing/squashing/squash-onto-nephew-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/squashing/squash-onto-nephew-expected.txt
@@ -1,15 +1,19 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "Squashing Containment Layer",
           "shouldFlattenTransform": false,
           "children": [
             {
+              "name": "LayoutBlockFlow (positioned) DIV class='composited box behind'",
               "position": [125, 125],
               "bounds": [100, 100],
               "contentsOpaque": true,
@@ -17,6 +21,7 @@
               "backgroundColor": "#0000FF"
             },
             {
+              "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV class='box middle')",
               "position": [40, 40],
               "bounds": [180, 190],
               "drawsContent": true
diff --git a/third_party/WebKit/LayoutTests/compositing/squashing/squash-onto-transform-backing-expected.txt b/third_party/WebKit/LayoutTests/compositing/squashing/squash-onto-transform-backing-expected.txt
index c3dac07..3e7a91d6 100644
--- a/third_party/WebKit/LayoutTests/compositing/squashing/squash-onto-transform-backing-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/squashing/squash-onto-transform-backing-expected.txt
@@ -1,15 +1,19 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "Squashing Containment Layer",
           "shouldFlattenTransform": false,
           "children": [
             {
+              "name": "LayoutBlockFlow (positioned) DIV class='compositedAndRotated box behind'",
               "position": [100, 100],
               "bounds": [100, 100],
               "contentsOpaque": true,
@@ -23,6 +27,7 @@
               ]
             },
             {
+              "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV class='box middle')",
               "position": [20, 20],
               "bounds": [260, 260],
               "drawsContent": true
diff --git a/third_party/WebKit/LayoutTests/compositing/squashing/squash-paint-invalidation-fixed-position-expected.txt b/third_party/WebKit/LayoutTests/compositing/squashing/squash-paint-invalidation-fixed-position-expected.txt
index c49aa20..1cd061b 100644
--- a/third_party/WebKit/LayoutTests/compositing/squashing/squash-paint-invalidation-fixed-position-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/squashing/squash-paint-invalidation-fixed-position-expected.txt
@@ -1,12 +1,15 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow (positioned) DIV",
           "position": [8, 8],
           "bounds": [100, 5000],
           "contentsOpaque": true,
@@ -14,6 +17,7 @@
           "backgroundColor": "#ADD8E6"
         },
         {
+          "name": "LayoutBlockFlow (positioned) DIV",
           "position": [8, 25],
           "bounds": [100, 100],
           "contentsOpaque": true,
@@ -21,6 +25,7 @@
           "backgroundColor": "#D3D3D3"
         },
         {
+          "name": "LayoutBlockFlow (positioned) DIV id='foo'",
           "position": [8, 50],
           "bounds": [100, 100],
           "contentsOpaque": true,
@@ -36,17 +41,26 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='foo'",
+      "reason": "style change"
+    }
   ]
 }
  {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow (positioned) DIV",
           "position": [8, 8],
           "bounds": [100, 5000],
           "contentsOpaque": true,
@@ -54,6 +68,7 @@
           "backgroundColor": "#ADD8E6"
         },
         {
+          "name": "LayoutBlockFlow (positioned) DIV",
           "position": [8, 25],
           "bounds": [100, 100],
           "contentsOpaque": true,
@@ -61,6 +76,7 @@
           "backgroundColor": "#D3D3D3"
         },
         {
+          "name": "LayoutBlockFlow (positioned) DIV id='foo'",
           "position": [8, 50],
           "bounds": [100, 100],
           "contentsOpaque": true,
@@ -76,6 +92,12 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='foo'",
+      "reason": "style change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/compositing/squashing/squash-partial-repaint-inside-squashed-layer-expected.txt b/third_party/WebKit/LayoutTests/compositing/squashing/squash-partial-repaint-inside-squashed-layer-expected.txt
index e19b90ba..5da2d9c 100644
--- a/third_party/WebKit/LayoutTests/compositing/squashing/squash-partial-repaint-inside-squashed-layer-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/squashing/squash-partial-repaint-inside-squashed-layer-expected.txt
@@ -1,15 +1,19 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "Squashing Containment Layer",
           "shouldFlattenTransform": false,
           "children": [
             {
+              "name": "LayoutBlockFlow (positioned) DIV class='composited box behind'",
               "position": [100, 100],
               "bounds": [100, 100],
               "contentsOpaque": true,
@@ -17,6 +21,7 @@
               "backgroundColor": "#0000FF"
             },
             {
+              "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV class='box middle')",
               "position": [180, 180],
               "bounds": [262, 200],
               "drawsContent": true,
@@ -32,6 +37,12 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutImage (positioned) IMG id='repaintdiv' class='repaintdiv'",
+      "reason": "style change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/compositing/squashing/squash-same-transform-ancestor-expected.txt b/third_party/WebKit/LayoutTests/compositing/squashing/squash-same-transform-ancestor-expected.txt
index 58270cb..d234530 100644
--- a/third_party/WebKit/LayoutTests/compositing/squashing/squash-same-transform-ancestor-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/squashing/squash-same-transform-ancestor-expected.txt
@@ -1,12 +1,15 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow DIV id='transform-parent'",
           "position": [8, 8],
           "bounds": [100, 100],
           "contentsOpaque": true,
@@ -20,15 +23,18 @@
           ],
           "children": [
             {
+              "name": "Squashing Containment Layer",
               "shouldFlattenTransform": false,
               "children": [
                 {
+                  "name": "LayoutBlockFlow (positioned) DIV id='squashing'",
                   "bounds": [1, 1],
                   "contentsOpaque": true,
                   "drawsContent": true,
                   "backgroundColor": "#FFFFFF"
                 },
                 {
+                  "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV id='squashed')",
                   "position": [-100, 0],
                   "bounds": [200, 200],
                   "drawsContent": true
diff --git a/third_party/WebKit/LayoutTests/compositing/squashing/squash-simple-expected.txt b/third_party/WebKit/LayoutTests/compositing/squashing/squash-simple-expected.txt
index 53b499b0..b13a303 100644
--- a/third_party/WebKit/LayoutTests/compositing/squashing/squash-simple-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/squashing/squash-simple-expected.txt
@@ -1,15 +1,19 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "Squashing Containment Layer",
           "shouldFlattenTransform": false,
           "children": [
             {
+              "name": "LayoutBlockFlow (positioned) DIV class='composited box behind'",
               "position": [100, 100],
               "bounds": [100, 100],
               "contentsOpaque": true,
@@ -17,6 +21,7 @@
               "backgroundColor": "#0000FF"
             },
             {
+              "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV class='box middle')",
               "position": [20, 20],
               "bounds": [260, 260],
               "drawsContent": true
diff --git a/third_party/WebKit/LayoutTests/compositing/squashing/squash-three-layers-expected.txt b/third_party/WebKit/LayoutTests/compositing/squashing/squash-three-layers-expected.txt
index 0a9404fd..b9118906 100644
--- a/third_party/WebKit/LayoutTests/compositing/squashing/squash-three-layers-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/squashing/squash-three-layers-expected.txt
@@ -1,15 +1,19 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "Squashing Containment Layer",
           "shouldFlattenTransform": false,
           "children": [
             {
+              "name": "LayoutBlockFlow (positioned) DIV class='composited box behind'",
               "position": [100, 100],
               "bounds": [100, 100],
               "contentsOpaque": true,
@@ -17,6 +21,7 @@
               "backgroundColor": "#0000FF"
             },
             {
+              "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV class='box middle')",
               "position": [40, 40],
               "bounds": [180, 190],
               "drawsContent": true
diff --git a/third_party/WebKit/LayoutTests/compositing/squashing/squash-transform-expected.txt b/third_party/WebKit/LayoutTests/compositing/squashing/squash-transform-expected.txt
index e4ab8e9..1a6ac64 100644
--- a/third_party/WebKit/LayoutTests/compositing/squashing/squash-transform-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/squashing/squash-transform-expected.txt
@@ -1,12 +1,15 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow (positioned) DIV class='composited box behind'",
           "position": [100, 100],
           "bounds": [100, 100],
           "contentsOpaque": true,
@@ -14,9 +17,11 @@
           "backgroundColor": "#0000FF"
         },
         {
+          "name": "Squashing Containment Layer",
           "shouldFlattenTransform": false,
           "children": [
             {
+              "name": "LayoutBlockFlow (positioned) DIV class='box middle'",
               "position": [20, 20],
               "bounds": [100, 100],
               "contentsOpaque": true,
@@ -30,6 +35,7 @@
               ]
             },
             {
+              "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV class='box top')",
               "position": [180, 180],
               "bounds": [100, 100],
               "drawsContent": true
diff --git a/third_party/WebKit/LayoutTests/compositing/squashing/squash-transform-repainting-child-expected.txt b/third_party/WebKit/LayoutTests/compositing/squashing/squash-transform-repainting-child-expected.txt
index 9a1cf96..625daa3 100644
--- a/third_party/WebKit/LayoutTests/compositing/squashing/squash-transform-repainting-child-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/squashing/squash-transform-repainting-child-expected.txt
@@ -1,13 +1,16 @@
 CASE 1, original layer tree
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow (positioned) DIV class='composited box behind'",
           "position": [100, 100],
           "bounds": [100, 100],
           "contentsOpaque": true,
@@ -15,9 +18,11 @@
           "backgroundColor": "#0000FF"
         },
         {
+          "name": "Squashing Containment Layer",
           "shouldFlattenTransform": false,
           "children": [
             {
+              "name": "LayoutBlockFlow (positioned) DIV class='box middle'",
               "position": [20, 20],
               "bounds": [100, 100],
               "contentsOpaque": true,
@@ -31,6 +36,7 @@
               ]
             },
             {
+              "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV class='box top')",
               "position": [180, 180],
               "bounds": [100, 100],
               "drawsContent": true
@@ -43,14 +49,17 @@
 }
 CASE 2, hovering over the outer div
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow (positioned) DIV class='composited box behind'",
           "position": [100, 100],
           "bounds": [100, 100],
           "contentsOpaque": true,
@@ -58,9 +67,11 @@
           "backgroundColor": "#0000FF"
         },
         {
+          "name": "Squashing Containment Layer",
           "shouldFlattenTransform": false,
           "children": [
             {
+              "name": "LayoutBlockFlow (positioned) DIV class='box middle'",
               "position": [20, 20],
               "bounds": [100, 100],
               "contentsOpaque": true,
@@ -81,6 +92,7 @@
               ]
             },
             {
+              "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV class='box top')",
               "position": [180, 180],
               "bounds": [100, 100],
               "drawsContent": true
@@ -89,18 +101,27 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (positioned) DIV class='box middle'",
+      "reason": "style change"
+    }
   ]
 }
 CASE 3, hovering over the inner div
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow (positioned) DIV class='composited box behind'",
           "position": [100, 100],
           "bounds": [100, 100],
           "contentsOpaque": true,
@@ -108,9 +129,11 @@
           "backgroundColor": "#0000FF"
         },
         {
+          "name": "Squashing Containment Layer",
           "shouldFlattenTransform": false,
           "children": [
             {
+              "name": "LayoutBlockFlow (positioned) DIV class='box middle'",
               "position": [20, 20],
               "bounds": [100, 100],
               "contentsOpaque": true,
@@ -136,6 +159,7 @@
               ]
             },
             {
+              "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV class='box top')",
               "position": [180, 180],
               "bounds": [100, 100],
               "drawsContent": true
@@ -144,6 +168,16 @@
         }
       ]
     }
+  ],
+  "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/compositing/squashing/squash-transform-repainting-transformed-child-expected.txt b/third_party/WebKit/LayoutTests/compositing/squashing/squash-transform-repainting-transformed-child-expected.txt
index 74aefc2..a281ba92 100644
--- a/third_party/WebKit/LayoutTests/compositing/squashing/squash-transform-repainting-transformed-child-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/squashing/squash-transform-repainting-transformed-child-expected.txt
@@ -1,13 +1,16 @@
 CASE 1, original layer tree
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow (positioned) DIV class='composited box behind'",
           "position": [100, 100],
           "bounds": [100, 100],
           "contentsOpaque": true,
@@ -15,9 +18,11 @@
           "backgroundColor": "#0000FF"
         },
         {
+          "name": "Squashing Containment Layer",
           "shouldFlattenTransform": false,
           "children": [
             {
+              "name": "LayoutBlockFlow (positioned) DIV class='box middle'",
               "position": [20, 20],
               "bounds": [100, 100],
               "contentsOpaque": true,
@@ -31,6 +36,7 @@
               ]
             },
             {
+              "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV class='box top')",
               "position": [180, 180],
               "bounds": [100, 100],
               "drawsContent": true
@@ -43,14 +49,17 @@
 }
 CASE 2, hovering over the outer div
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow (positioned) DIV class='composited box behind'",
           "position": [100, 100],
           "bounds": [100, 100],
           "contentsOpaque": true,
@@ -58,9 +67,11 @@
           "backgroundColor": "#0000FF"
         },
         {
+          "name": "Squashing Containment Layer",
           "shouldFlattenTransform": false,
           "children": [
             {
+              "name": "LayoutBlockFlow (positioned) DIV class='box middle'",
               "position": [20, 20],
               "bounds": [100, 100],
               "contentsOpaque": true,
@@ -81,6 +92,7 @@
               ]
             },
             {
+              "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV class='box top')",
               "position": [180, 180],
               "bounds": [100, 100],
               "drawsContent": true
@@ -89,18 +101,27 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (positioned) DIV class='box middle'",
+      "reason": "style change"
+    }
   ]
 }
 CASE 3, hovering over the inner div
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow (positioned) DIV class='composited box behind'",
           "position": [100, 100],
           "bounds": [100, 100],
           "contentsOpaque": true,
@@ -108,9 +129,11 @@
           "backgroundColor": "#0000FF"
         },
         {
+          "name": "Squashing Containment Layer",
           "shouldFlattenTransform": false,
           "children": [
             {
+              "name": "LayoutBlockFlow (positioned) DIV class='box middle'",
               "position": [20, 20],
               "bounds": [100, 100],
               "contentsOpaque": true,
@@ -136,6 +159,7 @@
               ]
             },
             {
+              "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV class='box top')",
               "position": [180, 180],
               "bounds": [100, 100],
               "drawsContent": true
@@ -144,6 +168,16 @@
         }
       ]
     }
+  ],
+  "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/compositing/squashing/squashed-layer-loses-graphicslayer-expected.txt b/third_party/WebKit/LayoutTests/compositing/squashing/squashed-layer-loses-graphicslayer-expected.txt
index 78dc63e5..5a4fe27 100644
--- a/third_party/WebKit/LayoutTests/compositing/squashing/squashed-layer-loses-graphicslayer-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/squashing/squashed-layer-loses-graphicslayer-expected.txt
@@ -2,17 +2,21 @@
 
 CASE 1, original layer tree:
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "Squashing Containment Layer",
           "shouldFlattenTransform": false,
           "children": [
             {
+              "name": "LayoutBlockFlow (positioned) DIV id='forceComposited' class='composited underneath'",
               "position": [60, 60],
               "bounds": [100, 100],
               "contentsOpaque": true,
@@ -20,6 +24,7 @@
               "backgroundColor": "#808080"
             },
             {
+              "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV id='A' class='overlap1')",
               "position": [140, 140],
               "bounds": [260, 260],
               "drawsContent": true
@@ -32,9 +37,11 @@
 }
 CASE 2, The original composited layer is no longer composited, which then also removes all squashing layers. The important point is that there should be an appropriate repaint to the root GraphicsLayer:
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -61,6 +68,24 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='forceComposited' class='underneath'",
+      "reason": "subtree"
+    },
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='A' class='overlap1'",
+      "reason": "compositing update"
+    },
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='B' class='overlap2'",
+      "reason": "compositing update"
+    },
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='C' class='overlap3'",
+      "reason": "compositing update"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/compositing/squashing/squashed-repaints-expected.txt b/third_party/WebKit/LayoutTests/compositing/squashing/squashed-repaints-expected.txt
index 4c2ce55a..2d94359 100644
--- a/third_party/WebKit/LayoutTests/compositing/squashing/squashed-repaints-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/squashing/squashed-repaints-expected.txt
@@ -2,17 +2,21 @@
 
 CASE 1, original layer tree:
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "Squashing Containment Layer",
           "shouldFlattenTransform": false,
           "children": [
             {
+              "name": "LayoutBlockFlow (positioned) DIV class='composited'",
               "position": [60, 60],
               "bounds": [100, 100],
               "contentsOpaque": true,
@@ -20,6 +24,7 @@
               "backgroundColor": "#808080"
             },
             {
+              "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV id='A' class='overlap1')",
               "position": [140, 140],
               "bounds": [260, 260],
               "drawsContent": true
@@ -32,17 +37,21 @@
 }
 CASE 2, overlap1 changes color:
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "Squashing Containment Layer",
           "shouldFlattenTransform": false,
           "children": [
             {
+              "name": "LayoutBlockFlow (positioned) DIV class='composited'",
               "position": [60, 60],
               "bounds": [100, 100],
               "contentsOpaque": true,
@@ -50,6 +59,7 @@
               "backgroundColor": "#808080"
             },
             {
+              "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV id='A' class='overlap1')",
               "position": [140, 140],
               "bounds": [260, 260],
               "drawsContent": true,
@@ -65,21 +75,31 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='A' class='overlap1'",
+      "reason": "style change"
+    }
   ]
 }
 CASE 3, overlap1 and overlap2 change color:
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "Squashing Containment Layer",
           "shouldFlattenTransform": false,
           "children": [
             {
+              "name": "LayoutBlockFlow (positioned) DIV class='composited'",
               "position": [60, 60],
               "bounds": [100, 100],
               "contentsOpaque": true,
@@ -87,6 +107,7 @@
               "backgroundColor": "#808080"
             },
             {
+              "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV id='A' class='overlap1')",
               "position": [140, 140],
               "bounds": [260, 260],
               "drawsContent": true,
@@ -107,21 +128,35 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='A' class='overlap1'",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='B' class='overlap2'",
+      "reason": "style change"
+    }
   ]
 }
 CASE 4, overlap2 and overlap3 change color:
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "Squashing Containment Layer",
           "shouldFlattenTransform": false,
           "children": [
             {
+              "name": "LayoutBlockFlow (positioned) DIV class='composited'",
               "position": [60, 60],
               "bounds": [100, 100],
               "contentsOpaque": true,
@@ -129,6 +164,7 @@
               "backgroundColor": "#808080"
             },
             {
+              "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV id='A' class='overlap1')",
               "position": [140, 140],
               "bounds": [260, 260],
               "drawsContent": true,
@@ -149,21 +185,35 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='B' class='overlap2'",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='C' class='overlap3'",
+      "reason": "style change"
+    }
   ]
 }
 CASE 5, overlap3 and overlap1 change color:
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "Squashing Containment Layer",
           "shouldFlattenTransform": false,
           "children": [
             {
+              "name": "LayoutBlockFlow (positioned) DIV class='composited'",
               "position": [60, 60],
               "bounds": [100, 100],
               "contentsOpaque": true,
@@ -171,6 +221,7 @@
               "backgroundColor": "#808080"
             },
             {
+              "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV id='A' class='overlap1')",
               "position": [140, 140],
               "bounds": [260, 260],
               "drawsContent": true,
@@ -191,6 +242,16 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='A' class='overlap1'",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='C' class='overlap3'",
+      "reason": "style change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/compositing/squashing/squashing-inside-perspective-expected.txt b/third_party/WebKit/LayoutTests/compositing/squashing/squashing-inside-perspective-expected.txt
index df52f65..91a1219 100644
--- a/third_party/WebKit/LayoutTests/compositing/squashing/squashing-inside-perspective-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/squashing/squashing-inside-perspective-expected.txt
@@ -1,15 +1,19 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow (positioned) DIV",
           "position": [8, 8],
           "children": [
             {
+              "name": "Child Transform Layer",
               "shouldFlattenTransform": false,
               "transform": [
                 [1, 0, 0, 0],
@@ -19,9 +23,11 @@
               ],
               "children": [
                 {
+                  "name": "Squashing Containment Layer",
                   "shouldFlattenTransform": false,
                   "children": [
                     {
+                      "name": "LayoutBlockFlow (positioned) DIV",
                       "bounds": [200, 200],
                       "contentsOpaque": true,
                       "drawsContent": true,
@@ -34,6 +40,7 @@
                       ]
                     },
                     {
+                      "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV)",
                       "drawsContent": true
                     }
                   ]
diff --git a/third_party/WebKit/LayoutTests/compositing/squashing/squashing-inside-preserve-3d-element-expected.txt b/third_party/WebKit/LayoutTests/compositing/squashing/squashing-inside-preserve-3d-element-expected.txt
index 0568e68d1..cfa120a6 100644
--- a/third_party/WebKit/LayoutTests/compositing/squashing/squashing-inside-preserve-3d-element-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/squashing/squashing-inside-preserve-3d-element-expected.txt
@@ -1,15 +1,19 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "Squashing Containment Layer",
           "shouldFlattenTransform": false,
           "children": [
             {
+              "name": "LayoutBlockFlow DIV",
               "position": [8, 8],
               "bounds": [100, 100],
               "contentsOpaque": true,
@@ -18,6 +22,7 @@
               "backgroundColor": "#D3D3D3"
             },
             {
+              "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV id='target')",
               "position": [28, 28],
               "bounds": [100, 100],
               "3dRenderingContext": 1,
@@ -34,6 +39,12 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='target'",
+      "reason": "style change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/compositing/squashing/squashing-sparsity-heuristic-expected.txt b/third_party/WebKit/LayoutTests/compositing/squashing/squashing-sparsity-heuristic-expected.txt
index bde1acc..39233195 100644
--- a/third_party/WebKit/LayoutTests/compositing/squashing/squashing-sparsity-heuristic-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/squashing/squashing-sparsity-heuristic-expected.txt
@@ -1,15 +1,19 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "Squashing Containment Layer",
           "shouldFlattenTransform": false,
           "children": [
             {
+              "name": "LayoutBlockFlow (positioned) DIV class='composited'",
               "position": [60, 60],
               "bounds": [400, 400],
               "contentsOpaque": true,
@@ -17,6 +21,7 @@
               "backgroundColor": "#808080"
             },
             {
+              "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV id='A' class='overlap1')",
               "position": [140, 140],
               "bounds": [10, 10],
               "drawsContent": true
@@ -24,9 +29,11 @@
           ]
         },
         {
+          "name": "Squashing Containment Layer",
           "shouldFlattenTransform": false,
           "children": [
             {
+              "name": "LayoutBlockFlow (positioned) DIV id='B' class='overlap2'",
               "position": [220, 220],
               "bounds": [10, 10],
               "contentsOpaque": true,
@@ -34,6 +41,7 @@
               "backgroundColor": "#00FF00"
             },
             {
+              "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV id='C' class='overlap3')",
               "position": [220, 300],
               "bounds": [25, 10],
               "drawsContent": true
diff --git a/third_party/WebKit/LayoutTests/compositing/squashing/tricky-element-removal-crash-expected.txt b/third_party/WebKit/LayoutTests/compositing/squashing/tricky-element-removal-crash-expected.txt
index 542f8847..7ecc20a 100644
--- a/third_party/WebKit/LayoutTests/compositing/squashing/tricky-element-removal-crash-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/squashing/tricky-element-removal-crash-expected.txt
@@ -1,15 +1,19 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "Squashing Containment Layer",
           "shouldFlattenTransform": false,
           "children": [
             {
+              "name": "LayoutBlockFlow DIV",
               "position": [8, 8],
               "bounds": [200, 200],
               "contentsOpaque": true,
@@ -17,6 +21,7 @@
               "backgroundColor": "#FA8072"
             },
             {
+              "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV)",
               "position": [8, 8],
               "bounds": [100, 100],
               "drawsContent": true
@@ -25,6 +30,12 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV id='target'",
+      "reason": "layoutObject removal"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/compositing/tiled-layers-hidpi-expected.txt b/third_party/WebKit/LayoutTests/compositing/tiled-layers-hidpi-expected.txt
index 9a561b67..702643f 100644
--- a/third_party/WebKit/LayoutTests/compositing/tiled-layers-hidpi-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/tiled-layers-hidpi-expected.txt
@@ -1,12 +1,15 @@
 {
+  "name": "Content Root Layer",
   "bounds": [1808, 585],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [1808, 585],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow DIV id='composited'",
           "position": [8, 8],
           "bounds": [1800, 10],
           "contentsOpaque": true,
diff --git a/third_party/WebKit/LayoutTests/compositing/update-paint-phases-expected.txt b/third_party/WebKit/LayoutTests/compositing/update-paint-phases-expected.txt
index 66ab0ee..4f9f69f 100644
--- a/third_party/WebKit/LayoutTests/compositing/update-paint-phases-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/update-paint-phases-expected.txt
@@ -1,4 +1,5 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "paintingPhases": [
     "GraphicsLayerPaintBackground",
@@ -7,6 +8,7 @@
   ],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -17,6 +19,7 @@
       ],
       "children": [
         {
+          "name": "LayoutBlockFlow DIV class='scroller'",
           "position": [8, 8],
           "bounds": [102, 102],
           "shouldFlattenTransform": false,
@@ -28,6 +31,7 @@
           ],
           "children": [
             {
+              "name": "Scrolling Layer",
               "position": [1, 1],
               "bounds": [85, 85],
               "shouldFlattenTransform": false,
@@ -38,6 +42,7 @@
               ],
               "children": [
                 {
+                  "name": "Scrolling Contents Layer",
                   "bounds": [85, 120],
                   "drawsContent": true,
                   "paintingPhases": [
@@ -49,6 +54,7 @@
               ]
             },
             {
+              "name": "Overflow Controls Host Layer",
               "bounds": [102, 102],
               "paintingPhases": [
                 "GraphicsLayerPaintBackground",
@@ -57,6 +63,7 @@
               ],
               "children": [
                 {
+                  "name": "Horizontal Scrollbar Layer",
                   "position": [1, 86],
                   "bounds": [85, 15],
                   "paintingPhases": [
@@ -66,6 +73,7 @@
                   ]
                 },
                 {
+                  "name": "Vertical Scrollbar Layer",
                   "position": [86, 1],
                   "bounds": [15, 85],
                   "paintingPhases": [
@@ -75,6 +83,7 @@
                   ]
                 },
                 {
+                  "name": "Scroll Corner Layer",
                   "position": [86, 86],
                   "bounds": [15, 15],
                   "drawsContent": true,
diff --git a/third_party/WebKit/LayoutTests/compositing/visibility/layer-visible-content-expected.txt b/third_party/WebKit/LayoutTests/compositing/visibility/layer-visible-content-expected.txt
index 6cc2293..5bb50d264 100644
--- a/third_party/WebKit/LayoutTests/compositing/visibility/layer-visible-content-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/visibility/layer-visible-content-expected.txt
@@ -1,19 +1,24 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow (positioned) DIV class='container'",
           "bounds": [200, 200],
           "drawsContent": true,
           "children": [
             {
+              "name": "Child Containment Layer",
               "bounds": [200, 200],
               "children": [
                 {
+                  "name": "LayoutBlockFlow DIV class='composited box'",
                   "bounds": [10, 10]
                 }
               ]
@@ -21,6 +26,7 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow PRE id='layer-tree'",
           "bounds": [800, 16],
           "opacity": 0,
           "drawsContent": true
diff --git a/third_party/WebKit/LayoutTests/compositing/will-change/composited-layers-expected.txt b/third_party/WebKit/LayoutTests/compositing/will-change/composited-layers-expected.txt
index 65d45543..5a270c8 100644
--- a/third_party/WebKit/LayoutTests/compositing/will-change/composited-layers-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/will-change/composited-layers-expected.txt
@@ -1,12 +1,15 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow DIV id='willChangeOpacity' class='shouldComposite'",
           "position": [12, 42],
           "bounds": [30, 30],
           "contentsOpaque": true,
@@ -14,6 +17,7 @@
           "backgroundColor": "#008000"
         },
         {
+          "name": "LayoutBlockFlow DIV id='willChangeTransform' class='shouldComposite'",
           "position": [12, 76],
           "bounds": [30, 30],
           "contentsOpaque": true,
@@ -21,6 +25,7 @@
           "backgroundColor": "#008000"
         },
         {
+          "name": "LayoutBlockFlow (relative positioned) DIV id='willChangeLeft' class='positioned shouldComposite'",
           "position": [12, 144],
           "bounds": [30, 30],
           "contentsOpaque": true,
@@ -28,6 +33,7 @@
           "backgroundColor": "#008000"
         },
         {
+          "name": "LayoutBlockFlow (relative positioned) DIV id='willChangeRight' class='positioned shouldComposite'",
           "position": [12, 212],
           "bounds": [30, 30],
           "contentsOpaque": true,
@@ -35,6 +41,7 @@
           "backgroundColor": "#008000"
         },
         {
+          "name": "LayoutBlockFlow (relative positioned) DIV id='willChangeTop' class='positioned shouldComposite'",
           "position": [12, 280],
           "bounds": [30, 30],
           "contentsOpaque": true,
@@ -42,6 +49,7 @@
           "backgroundColor": "#008000"
         },
         {
+          "name": "LayoutBlockFlow (relative positioned) DIV id='willChangeBottom' class='positioned shouldComposite'",
           "position": [12, 348],
           "bounds": [30, 30],
           "contentsOpaque": true,
@@ -49,6 +57,7 @@
           "backgroundColor": "#008000"
         },
         {
+          "name": "LayoutBlockFlow DIV id='willChangeCombinationThatComposites' class='shouldComposite'",
           "position": [12, 416],
           "bounds": [30, 30],
           "contentsOpaque": true,
diff --git a/third_party/WebKit/LayoutTests/compositing/will-change/containing-block-added-expected.txt b/third_party/WebKit/LayoutTests/compositing/will-change/containing-block-added-expected.txt
index 5742882..56d9495 100644
--- a/third_party/WebKit/LayoutTests/compositing/will-change/containing-block-added-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/will-change/containing-block-added-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -14,6 +16,7 @@
       ],
       "children": [
         {
+          "name": "LayoutBlockFlow (positioned) DIV id='container'",
           "position": [200, 100],
           "transformOrigin": [50, 50],
           "bounds": [125, 125],
@@ -29,6 +32,16 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (positioned) DIV class='fixed'",
+      "reason": "subtree"
+    },
+    {
+      "object": "LayoutBlockFlow (positioned) DIV class='fixed'",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/compositing/will-change/containing-block-removed-expected.txt b/third_party/WebKit/LayoutTests/compositing/will-change/containing-block-removed-expected.txt
index ea5a6b9..af8fb38 100644
--- a/third_party/WebKit/LayoutTests/compositing/will-change/containing-block-removed-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/will-change/containing-block-removed-expected.txt
@@ -1,8 +1,10 @@
 CONSOLE MESSAGE: line 30: debug
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -15,6 +17,7 @@
       ],
       "children": [
         {
+          "name": "LayoutBlockFlow (positioned) DIV id='container'",
           "position": [200, 100],
           "bounds": [100, 100],
           "contentsOpaque": true,
@@ -35,15 +38,33 @@
               "object": "LayoutBlockFlow (positioned) DIV class='fixed'",
               "rect": [50, 50, 75, 75],
               "reason": "subtree"
-            },
-            {
-              "object": "LayoutBlockFlow (positioned) DIV class='fixed'",
-              "reason": "subtree"
             }
           ]
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (positioned) DIV class='fixed'",
+      "reason": "subtree"
+    },
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='container'",
+      "reason": "subtree"
+    },
+    {
+      "object": "LayoutBlockFlow (positioned) DIV class='fixed'",
+      "reason": "subtree"
+    },
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='container'",
+      "reason": "became visible"
+    },
+    {
+      "object": "LayoutBlockFlow (positioned) DIV class='fixed'",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/compositing/will-change/will-change-contents-suppresses-compositing-expected.txt b/third_party/WebKit/LayoutTests/compositing/will-change/will-change-contents-suppresses-compositing-expected.txt
index e9f7954d..10aa3faf 100644
--- a/third_party/WebKit/LayoutTests/compositing/will-change/will-change-contents-suppresses-compositing-expected.txt
+++ b/third_party/WebKit/LayoutTests/compositing/will-change/will-change-contents-suppresses-compositing-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true
diff --git a/third_party/WebKit/LayoutTests/css3/blending/mix-blend-mode-2nd-stacking-context-composited-expected.txt b/third_party/WebKit/LayoutTests/css3/blending/mix-blend-mode-2nd-stacking-context-composited-expected.txt
index 36fc103..fdf8805 100644
--- a/third_party/WebKit/LayoutTests/css3/blending/mix-blend-mode-2nd-stacking-context-composited-expected.txt
+++ b/third_party/WebKit/LayoutTests/css3/blending/mix-blend-mode-2nd-stacking-context-composited-expected.txt
@@ -1,15 +1,19 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "children": [
         {
+          "name": "LayoutBlockFlow HTML",
           "bounds": [800, 600],
           "drawsContent": true,
           "children": [
             {
+              "name": "LayoutBlockFlow (positioned) DIV class='accelerated stacking-context'",
               "position": [8, 8],
               "transformOrigin": [0, 0],
               "bounds": [160, 90],
@@ -18,6 +22,7 @@
               "backgroundColor": "#FF0000"
             },
             {
+              "name": "LayoutBlockFlow HTML (foreground) Layer",
               "bounds": [800, 600],
               "drawsContent": true
             }
diff --git a/third_party/WebKit/LayoutTests/css3/blending/mix-blend-mode-composited-reason-children-expected.txt b/third_party/WebKit/LayoutTests/css3/blending/mix-blend-mode-composited-reason-children-expected.txt
index c3855fc..9338f9b 100644
--- a/third_party/WebKit/LayoutTests/css3/blending/mix-blend-mode-composited-reason-children-expected.txt
+++ b/third_party/WebKit/LayoutTests/css3/blending/mix-blend-mode-composited-reason-children-expected.txt
@@ -1,21 +1,26 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "children": [
         {
+          "name": "LayoutBlockFlow HTML",
           "bounds": [800, 600],
           "drawsContent": true,
           "children": [
             {
+              "name": "LayoutBlockFlow (positioned) DIV class='stacking-context'",
               "position": [8, 8],
               "contentsOpaque": true,
               "drawsContent": true,
               "backgroundColor": "#FF0000",
               "children": [
                 {
+                  "name": "LayoutBlockFlow (positioned) DIV class='stacking-context'",
                   "bounds": [160, 90],
                   "isolate": true,
                   "contentsOpaque": true,
@@ -23,6 +28,7 @@
                   "backgroundColor": "#008000",
                   "children": [
                     {
+                      "name": "LayoutBlockFlow DIV class='blended'",
                       "bounds": [160, 90],
                       "blendMode": "multiply",
                       "contentsOpaque": true,
@@ -30,6 +36,7 @@
                       "backgroundColor": "#0000FF",
                       "children": [
                         {
+                          "name": "LayoutImage IMG class='accelerated'",
                           "bounds": [160, 90]
                         }
                       ]
@@ -37,11 +44,13 @@
                   ]
                 },
                 {
+                  "name": "LayoutBlockFlow (positioned) DIV class='stacking-context' (foreground) Layer",
                   "drawsContent": true
                 }
               ]
             },
             {
+              "name": "LayoutBlockFlow HTML (foreground) Layer",
               "bounds": [800, 600],
               "drawsContent": true
             }
diff --git a/third_party/WebKit/LayoutTests/css3/blending/mix-blend-mode-isolation-2-stacking-contexts-expected.txt b/third_party/WebKit/LayoutTests/css3/blending/mix-blend-mode-isolation-2-stacking-contexts-expected.txt
index 038b04a..95afd56b 100644
--- a/third_party/WebKit/LayoutTests/css3/blending/mix-blend-mode-isolation-2-stacking-contexts-expected.txt
+++ b/third_party/WebKit/LayoutTests/css3/blending/mix-blend-mode-isolation-2-stacking-contexts-expected.txt
@@ -1,21 +1,26 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "children": [
         {
+          "name": "LayoutBlockFlow HTML",
           "bounds": [800, 600],
           "drawsContent": true,
           "children": [
             {
+              "name": "LayoutBlockFlow (positioned) DIV class='stacking-context'",
               "position": [8, 8],
               "contentsOpaque": true,
               "drawsContent": true,
               "backgroundColor": "#FF0000",
               "children": [
                 {
+                  "name": "LayoutBlockFlow (positioned) DIV class='stacking-context'",
                   "bounds": [160, 90],
                   "isolate": true,
                   "contentsOpaque": true,
@@ -23,23 +28,27 @@
                   "backgroundColor": "#008000",
                   "children": [
                     {
+                      "name": "LayoutImage IMG class='accelerated blended'",
                       "bounds": [160, 90],
                       "blendMode": "multiply"
                     }
                   ]
                 },
                 {
+                  "name": "LayoutBlockFlow (positioned) DIV class='stacking-context' (foreground) Layer",
                   "drawsContent": true
                 }
               ]
             },
             {
+              "name": "LayoutBlockFlow (positioned) DIV class='accelerated stacking-context'",
               "position": [8, 8],
               "contentsOpaque": true,
               "drawsContent": true,
               "backgroundColor": "#FF0000",
               "children": [
                 {
+                  "name": "LayoutBlockFlow (positioned) DIV class='stacking-context'",
                   "bounds": [160, 90],
                   "isolate": true,
                   "contentsOpaque": true,
@@ -47,17 +56,20 @@
                   "backgroundColor": "#008000",
                   "children": [
                     {
+                      "name": "LayoutImage IMG class='accelerated blended'",
                       "bounds": [160, 90],
                       "blendMode": "multiply"
                     }
                   ]
                 },
                 {
+                  "name": "LayoutBlockFlow (positioned) DIV class='accelerated stacking-context' (foreground) Layer",
                   "drawsContent": true
                 }
               ]
             },
             {
+              "name": "LayoutBlockFlow HTML (foreground) Layer",
               "bounds": [800, 600],
               "drawsContent": true
             }
diff --git a/third_party/WebKit/LayoutTests/css3/blending/mix-blend-mode-isolation-layer-expected.txt b/third_party/WebKit/LayoutTests/css3/blending/mix-blend-mode-isolation-layer-expected.txt
index faf9d411..f40c8ef 100644
--- a/third_party/WebKit/LayoutTests/css3/blending/mix-blend-mode-isolation-layer-expected.txt
+++ b/third_party/WebKit/LayoutTests/css3/blending/mix-blend-mode-isolation-layer-expected.txt
@@ -1,15 +1,19 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "children": [
         {
+          "name": "LayoutBlockFlow HTML",
           "bounds": [800, 600],
           "drawsContent": true,
           "children": [
             {
+              "name": "LayoutBlockFlow (positioned) DIV class='stacking-context'",
               "position": [8, 8],
               "bounds": [160, 90],
               "isolate": true,
@@ -18,12 +22,14 @@
               "backgroundColor": "#008000",
               "children": [
                 {
+                  "name": "LayoutImage IMG class='accelerated blended'",
                   "bounds": [160, 90],
                   "blendMode": "multiply"
                 }
               ]
             },
             {
+              "name": "LayoutBlockFlow HTML (foreground) Layer",
               "bounds": [800, 600],
               "drawsContent": true
             }
diff --git a/third_party/WebKit/LayoutTests/css3/blending/mix-blend-mode-isolation-remove-expected.txt b/third_party/WebKit/LayoutTests/css3/blending/mix-blend-mode-isolation-remove-expected.txt
index 3f757f8..3d3ee39a 100644
--- a/third_party/WebKit/LayoutTests/css3/blending/mix-blend-mode-isolation-remove-expected.txt
+++ b/third_party/WebKit/LayoutTests/css3/blending/mix-blend-mode-isolation-remove-expected.txt
@@ -1,12 +1,15 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow DIV class='accelerated-stacking-context'",
           "position": [8, 8],
           "bounds": [784, 90],
           "isolate": true,
@@ -15,6 +18,7 @@
           "backgroundColor": "#0000FF",
           "children": [
             {
+              "name": "LayoutBlockFlow DIV id='intermediary' class='accelerated-no-stacking-context'",
               "bounds": [784, 90],
               "contentsOpaque": true,
               "drawsContent": true,
@@ -22,6 +26,7 @@
               "backgroundColor": "#008000"
             },
             {
+              "name": "LayoutImage IMG class='accelerated blended'",
               "bounds": [160, 90],
               "blendMode": "multiply"
             }
diff --git a/third_party/WebKit/LayoutTests/css3/filters/composited-during-transition-layertree-expected.txt b/third_party/WebKit/LayoutTests/css3/filters/composited-during-transition-layertree-expected.txt
index 78cccae89..fa3724f 100644
--- a/third_party/WebKit/LayoutTests/css3/filters/composited-during-transition-layertree-expected.txt
+++ b/third_party/WebKit/LayoutTests/css3/filters/composited-during-transition-layertree-expected.txt
@@ -3,29 +3,35 @@
    
   
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutImage IMG id='grayscale-box'",
           "position": [18, 18],
           "bounds": [160, 90],
           "drawsContent": true
         },
         {
+          "name": "LayoutImage IMG id='saturate-box'",
           "position": [18, 132],
           "bounds": [160, 90],
           "drawsContent": true
         },
         {
+          "name": "LayoutImage IMG id='invert-box'",
           "position": [18, 246],
           "bounds": [160, 90],
           "drawsContent": true
         },
         {
+          "name": "LayoutImage IMG id='brightness-box'",
           "position": [18, 360],
           "bounds": [160, 90],
           "drawsContent": true
diff --git a/third_party/WebKit/LayoutTests/css3/filters/composited-layer-bounds-after-sw-blur-animation-expected.txt b/third_party/WebKit/LayoutTests/css3/filters/composited-layer-bounds-after-sw-blur-animation-expected.txt
index 842feacc..44e05c1 100644
--- a/third_party/WebKit/LayoutTests/css3/filters/composited-layer-bounds-after-sw-blur-animation-expected.txt
+++ b/third_party/WebKit/LayoutTests/css3/filters/composited-layer-bounds-after-sw-blur-animation-expected.txt
@@ -1,12 +1,15 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow (positioned) DIV id='composited-layer' class='final-drop-shadow'",
           "position": [100, 100],
           "bounds": [100, 100],
           "contentsOpaque": true,
diff --git a/third_party/WebKit/LayoutTests/css3/filters/composited-layer-bounds-with-composited-blur-expected.txt b/third_party/WebKit/LayoutTests/css3/filters/composited-layer-bounds-with-composited-blur-expected.txt
index 842feacc..85b80828 100644
--- a/third_party/WebKit/LayoutTests/css3/filters/composited-layer-bounds-with-composited-blur-expected.txt
+++ b/third_party/WebKit/LayoutTests/css3/filters/composited-layer-bounds-with-composited-blur-expected.txt
@@ -1,12 +1,15 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow (positioned) DIV id='composited'",
           "position": [100, 100],
           "bounds": [100, 100],
           "contentsOpaque": true,
diff --git a/third_party/WebKit/LayoutTests/css3/filters/composited-layer-promotion-after-outset-overlap-change-using-composited-shadow-expected.txt b/third_party/WebKit/LayoutTests/css3/filters/composited-layer-promotion-after-outset-overlap-change-using-composited-shadow-expected.txt
index 0c8ec75..342fa17 100644
--- a/third_party/WebKit/LayoutTests/css3/filters/composited-layer-promotion-after-outset-overlap-change-using-composited-shadow-expected.txt
+++ b/third_party/WebKit/LayoutTests/css3/filters/composited-layer-promotion-after-outset-overlap-change-using-composited-shadow-expected.txt
@@ -1,12 +1,15 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow (positioned) DIV id='composited-layer-to-overlap'",
           "position": [250, 250],
           "bounds": [100, 100],
           "contentsOpaque": true,
@@ -18,14 +21,17 @@
   ]
 }
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow (positioned) DIV id='composited-layer-to-overlap'",
           "position": [250, 250],
           "bounds": [100, 100],
           "contentsOpaque": true,
@@ -33,6 +39,7 @@
           "backgroundColor": "#0000FF"
         },
         {
+          "name": "LayoutBlockFlow (positioned) DIV id='software-layer-to-promote' class='final-drop-shadow'",
           "position": [100, 100],
           "bounds": [100, 100],
           "contentsOpaque": true,
diff --git a/third_party/WebKit/LayoutTests/css3/filters/composited-layer-promotion-after-outset-overlap-change-using-sw-shadow-expected.txt b/third_party/WebKit/LayoutTests/css3/filters/composited-layer-promotion-after-outset-overlap-change-using-sw-shadow-expected.txt
index 0c8ec75..342fa17 100644
--- a/third_party/WebKit/LayoutTests/css3/filters/composited-layer-promotion-after-outset-overlap-change-using-sw-shadow-expected.txt
+++ b/third_party/WebKit/LayoutTests/css3/filters/composited-layer-promotion-after-outset-overlap-change-using-sw-shadow-expected.txt
@@ -1,12 +1,15 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow (positioned) DIV id='composited-layer-to-overlap'",
           "position": [250, 250],
           "bounds": [100, 100],
           "contentsOpaque": true,
@@ -18,14 +21,17 @@
   ]
 }
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow (positioned) DIV id='composited-layer-to-overlap'",
           "position": [250, 250],
           "bounds": [100, 100],
           "contentsOpaque": true,
@@ -33,6 +39,7 @@
           "backgroundColor": "#0000FF"
         },
         {
+          "name": "LayoutBlockFlow (positioned) DIV id='software-layer-to-promote' class='final-drop-shadow'",
           "position": [100, 100],
           "bounds": [100, 100],
           "contentsOpaque": true,
diff --git a/third_party/WebKit/LayoutTests/css3/filters/effect-reference-repaint-gaussianblur-expected.txt b/third_party/WebKit/LayoutTests/css3/filters/effect-reference-repaint-gaussianblur-expected.txt
index 4808736..8954704 100644
--- a/third_party/WebKit/LayoutTests/css3/filters/effect-reference-repaint-gaussianblur-expected.txt
+++ b/third_party/WebKit/LayoutTests/css3/filters/effect-reference-repaint-gaussianblur-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -13,6 +15,12 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV class='box'",
+      "reason": "style change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/css3/filters/effect-reference-repaint-gaussianblur-xonly-expected.txt b/third_party/WebKit/LayoutTests/css3/filters/effect-reference-repaint-gaussianblur-xonly-expected.txt
index ecdf8b6..7a7fb95 100644
--- a/third_party/WebKit/LayoutTests/css3/filters/effect-reference-repaint-gaussianblur-xonly-expected.txt
+++ b/third_party/WebKit/LayoutTests/css3/filters/effect-reference-repaint-gaussianblur-xonly-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -13,6 +15,12 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV class='box'",
+      "reason": "style change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/css3/filters/effect-reference-repaint-gaussianblur-yonly-expected.txt b/third_party/WebKit/LayoutTests/css3/filters/effect-reference-repaint-gaussianblur-yonly-expected.txt
index aad5e60..2766d99 100644
--- a/third_party/WebKit/LayoutTests/css3/filters/effect-reference-repaint-gaussianblur-yonly-expected.txt
+++ b/third_party/WebKit/LayoutTests/css3/filters/effect-reference-repaint-gaussianblur-yonly-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -13,6 +15,12 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV class='box'",
+      "reason": "style change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/css3/filters/effect-reference-repaint-merge-expected.txt b/third_party/WebKit/LayoutTests/css3/filters/effect-reference-repaint-merge-expected.txt
index 73b0023..3696c372 100644
--- a/third_party/WebKit/LayoutTests/css3/filters/effect-reference-repaint-merge-expected.txt
+++ b/third_party/WebKit/LayoutTests/css3/filters/effect-reference-repaint-merge-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -13,6 +15,12 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV class='box'",
+      "reason": "style change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/css3/filters/effect-reference-repaint-morphology-expected.txt b/third_party/WebKit/LayoutTests/css3/filters/effect-reference-repaint-morphology-expected.txt
index 566575e8..616bede 100644
--- a/third_party/WebKit/LayoutTests/css3/filters/effect-reference-repaint-morphology-expected.txt
+++ b/third_party/WebKit/LayoutTests/css3/filters/effect-reference-repaint-morphology-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -13,6 +15,12 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV class='box'",
+      "reason": "style change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/css3/filters/effect-reference-repaint-morphology-xonly-expected.txt b/third_party/WebKit/LayoutTests/css3/filters/effect-reference-repaint-morphology-xonly-expected.txt
index 70919a7..5fba802 100644
--- a/third_party/WebKit/LayoutTests/css3/filters/effect-reference-repaint-morphology-xonly-expected.txt
+++ b/third_party/WebKit/LayoutTests/css3/filters/effect-reference-repaint-morphology-xonly-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -13,6 +15,12 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV class='box'",
+      "reason": "style change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/css3/filters/effect-reference-repaint-morphology-yonly-expected.txt b/third_party/WebKit/LayoutTests/css3/filters/effect-reference-repaint-morphology-yonly-expected.txt
index d41305c2..0b91310 100644
--- a/third_party/WebKit/LayoutTests/css3/filters/effect-reference-repaint-morphology-yonly-expected.txt
+++ b/third_party/WebKit/LayoutTests/css3/filters/effect-reference-repaint-morphology-yonly-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -13,6 +15,12 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV class='box'",
+      "reason": "style change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/css3/filters/effect-reference-repaint-offset-expected.txt b/third_party/WebKit/LayoutTests/css3/filters/effect-reference-repaint-offset-expected.txt
index d5675f9..7087c3a 100644
--- a/third_party/WebKit/LayoutTests/css3/filters/effect-reference-repaint-offset-expected.txt
+++ b/third_party/WebKit/LayoutTests/css3/filters/effect-reference-repaint-offset-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -13,6 +15,12 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV class='box'",
+      "reason": "style change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/css3/filters/filtered-compositing-descendant-expected.txt b/third_party/WebKit/LayoutTests/css3/filters/filtered-compositing-descendant-expected.txt
index 480fce0..6e6899b1 100644
--- a/third_party/WebKit/LayoutTests/css3/filters/filtered-compositing-descendant-expected.txt
+++ b/third_party/WebKit/LayoutTests/css3/filters/filtered-compositing-descendant-expected.txt
@@ -1,17 +1,21 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow DIV class='filtered box'",
           "position": [8, 8],
           "bounds": [144, 144],
           "drawsContent": true,
           "children": [
             {
+              "name": "LayoutBlockFlow DIV class='compositing box'",
               "position": [22, 22],
               "bounds": [100, 100],
               "contentsOpaque": true,
diff --git a/third_party/WebKit/LayoutTests/css3/filters/should-not-have-compositing-layer-expected.txt b/third_party/WebKit/LayoutTests/css3/filters/should-not-have-compositing-layer-expected.txt
index 9f9c614a9..c9ae3d3e 100644
--- a/third_party/WebKit/LayoutTests/css3/filters/should-not-have-compositing-layer-expected.txt
+++ b/third_party/WebKit/LayoutTests/css3/filters/should-not-have-compositing-layer-expected.txt
@@ -1,8 +1,10 @@
 
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true
diff --git a/third_party/WebKit/LayoutTests/css3/flexbox/repaint-column-reverse-expected.txt b/third_party/WebKit/LayoutTests/css3/flexbox/repaint-column-reverse-expected.txt
index c84d39a..424f35b 100644
--- a/third_party/WebKit/LayoutTests/css3/flexbox/repaint-column-reverse-expected.txt
+++ b/third_party/WebKit/LayoutTests/css3/flexbox/repaint-column-reverse-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -18,6 +20,12 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV id='blue' class='flex-item'",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/css3/flexbox/repaint-during-resize-no-flex-expected.txt b/third_party/WebKit/LayoutTests/css3/flexbox/repaint-during-resize-no-flex-expected.txt
index c7240ee..2aecc9b5 100644
--- a/third_party/WebKit/LayoutTests/css3/flexbox/repaint-during-resize-no-flex-expected.txt
+++ b/third_party/WebKit/LayoutTests/css3/flexbox/repaint-during-resize-no-flex-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -33,6 +35,20 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV id='flex-item-1' class='flex-item width'",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutBlockFlow DIV class='flex-item'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV class='flex-item'",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/css3/flexbox/repaint-on-layout-expected.txt b/third_party/WebKit/LayoutTests/css3/flexbox/repaint-on-layout-expected.txt
index 8b51b73..25c2c0f 100644
--- a/third_party/WebKit/LayoutTests/css3/flexbox/repaint-on-layout-expected.txt
+++ b/third_party/WebKit/LayoutTests/css3/flexbox/repaint-on-layout-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -15,21 +17,23 @@
           "object": "LayoutBlockFlow DIV id='badge'",
           "rect": [712, 8, 80, 20],
           "reason": "layoutObject removal"
-        },
-        {
-          "object": "InlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "LayoutText #text",
-          "reason": "bounds change"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV id='badge'",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutBlockFlow (floating) DIV class='state'",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/css3/flexbox/repaint-on-margin-change-expected.txt b/third_party/WebKit/LayoutTests/css3/flexbox/repaint-on-margin-change-expected.txt
index 73d718d..a824eacb 100644
--- a/third_party/WebKit/LayoutTests/css3/flexbox/repaint-on-margin-change-expected.txt
+++ b/third_party/WebKit/LayoutTests/css3/flexbox/repaint-on-margin-change-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -18,6 +20,12 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV id='child-to-grow' class='child'",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/css3/flexbox/repaint-opacity-change-expected.txt b/third_party/WebKit/LayoutTests/css3/flexbox/repaint-opacity-change-expected.txt
index 8395eae0..365f592 100644
--- a/third_party/WebKit/LayoutTests/css3/flexbox/repaint-opacity-change-expected.txt
+++ b/third_party/WebKit/LayoutTests/css3/flexbox/repaint-opacity-change-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -18,6 +20,16 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV id='target' class='item'",
+      "reason": "subtree"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='target' class='item'",
+      "reason": "subtree"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/css3/flexbox/repaint-rtl-column-expected.txt b/third_party/WebKit/LayoutTests/css3/flexbox/repaint-rtl-column-expected.txt
index d614440..4b97af28 100644
--- a/third_party/WebKit/LayoutTests/css3/flexbox/repaint-rtl-column-expected.txt
+++ b/third_party/WebKit/LayoutTests/css3/flexbox/repaint-rtl-column-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -48,6 +50,32 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV id='left'",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='content'",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='left'",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='content'",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/borders/overflow-hidden-border-radius-force-backing-store-expected.txt b/third_party/WebKit/LayoutTests/fast/borders/overflow-hidden-border-radius-force-backing-store-expected.txt
index 015f3ad..5c963f3 100644
--- a/third_party/WebKit/LayoutTests/fast/borders/overflow-hidden-border-radius-force-backing-store-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/borders/overflow-hidden-border-radius-force-backing-store-expected.txt
@@ -1,24 +1,30 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow (positioned) DIV id='outer'",
           "position": [50, 50],
           "bounds": [300, 300],
           "drawsContent": true,
           "children": [
             {
+              "name": "Child Containment Layer",
               "bounds": [300, 300],
               "children": [
                 {
+                  "name": "Ancestor Clipping Layer",
                   "bounds": [285, 300],
                   "shouldFlattenTransform": false,
                   "children": [
                     {
+                      "name": "LayoutBlockFlow DIV id='content'",
                       "bounds": [285, 1000]
                     }
                   ]
diff --git a/third_party/WebKit/LayoutTests/fast/box-shadow/negative-shadow-box-expand-expected.txt b/third_party/WebKit/LayoutTests/fast/box-shadow/negative-shadow-box-expand-expected.txt
index 097dcb3..15601a2 100644
--- a/third_party/WebKit/LayoutTests/fast/box-shadow/negative-shadow-box-expand-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/box-shadow/negative-shadow-box-expand-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -18,6 +20,16 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV id='outer'",
+      "reason": "border box change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='inner2'",
+      "reason": "layoutObject insertion"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/box-shadow/negative-shadow-box-shrink-expected.txt b/third_party/WebKit/LayoutTests/fast/box-shadow/negative-shadow-box-shrink-expected.txt
index ef3be76b..2d90859 100644
--- a/third_party/WebKit/LayoutTests/fast/box-shadow/negative-shadow-box-shrink-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/box-shadow/negative-shadow-box-shrink-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -18,6 +20,16 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV id='inner2'",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='outer'",
+      "reason": "border box change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/box-shadow/shadow-box-resize-expected.txt b/third_party/WebKit/LayoutTests/fast/box-shadow/shadow-box-resize-expected.txt
index 8874154b..fc05723 100644
--- a/third_party/WebKit/LayoutTests/fast/box-shadow/shadow-box-resize-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/box-shadow/shadow-box-resize-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -28,6 +30,24 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='target1'",
+      "reason": "border box change"
+    },
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='target2'",
+      "reason": "border box change"
+    },
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='target3'",
+      "reason": "border box change"
+    },
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='target4'",
+      "reason": "border box change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/box-shadow/shadow-box-resize-writing-mode-expected.txt b/third_party/WebKit/LayoutTests/fast/box-shadow/shadow-box-resize-writing-mode-expected.txt
index 8874154b..fc05723 100644
--- a/third_party/WebKit/LayoutTests/fast/box-shadow/shadow-box-resize-writing-mode-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/box-shadow/shadow-box-resize-writing-mode-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -28,6 +30,24 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='target1'",
+      "reason": "border box change"
+    },
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='target2'",
+      "reason": "border box change"
+    },
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='target3'",
+      "reason": "border box change"
+    },
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='target4'",
+      "reason": "border box change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/canvas/canvas-composite-repaint-by-all-imagesource-expected.txt b/third_party/WebKit/LayoutTests/fast/canvas/canvas-composite-repaint-by-all-imagesource-expected.txt
index dd70329..fa45300 100644
--- a/third_party/WebKit/LayoutTests/fast/canvas/canvas-composite-repaint-by-all-imagesource-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/canvas/canvas-composite-repaint-by-all-imagesource-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [785, 928],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [785, 928],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -230,18 +232,22 @@
       ],
       "children": [
         {
+          "name": "LayoutVideo VIDEO id='video'",
           "position": [15, 854],
           "bounds": [150, 60]
         },
         {
+          "name": "Squashing Containment Layer",
           "shouldFlattenTransform": false,
           "children": [
             {
+              "name": "LayoutFlexibleBox (relative positioned) DIV",
               "position": [15, 854],
               "bounds": [150, 60],
               "drawsContent": true
             },
             {
+              "name": "Squashing Layer (first squashed layer: LayoutFlexibleBox (relative positioned) DIV)",
               "position": [15, 854],
               "bounds": [150, 18],
               "drawsContent": true
@@ -250,6 +256,184 @@
         }
       ]
     }
+  ],
+  "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/fast/css-grid-layout/grid-element-change-columns-repaint-expected.txt b/third_party/WebKit/LayoutTests/fast/css-grid-layout/grid-element-change-columns-repaint-expected.txt
index 3b6f83b..926a012 100644
--- a/third_party/WebKit/LayoutTests/fast/css-grid-layout/grid-element-change-columns-repaint-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/css-grid-layout/grid-element-change-columns-repaint-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -18,6 +20,16 @@
         }
       ]
     }
+  ],
+  "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/fast/css-grid-layout/grid-element-change-rows-repaint-expected.txt b/third_party/WebKit/LayoutTests/fast/css-grid-layout/grid-element-change-rows-repaint-expected.txt
index d18aaf5..a26358ae 100644
--- a/third_party/WebKit/LayoutTests/fast/css-grid-layout/grid-element-change-rows-repaint-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/css-grid-layout/grid-element-change-rows-repaint-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -18,6 +20,16 @@
         }
       ]
     }
+  ],
+  "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/fast/css-grid-layout/grid-item-change-column-repaint-expected.txt b/third_party/WebKit/LayoutTests/fast/css-grid-layout/grid-item-change-column-repaint-expected.txt
index f9cc3ce0..73bef46 100644
--- a/third_party/WebKit/LayoutTests/fast/css-grid-layout/grid-item-change-column-repaint-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/css-grid-layout/grid-item-change-column-repaint-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -18,6 +20,12 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV class='sizedToGridArea'",
+      "reason": "style change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/css-grid-layout/grid-item-change-row-repaint-expected.txt b/third_party/WebKit/LayoutTests/fast/css-grid-layout/grid-item-change-row-repaint-expected.txt
index d24eef6..e9469c4 100644
--- a/third_party/WebKit/LayoutTests/fast/css-grid-layout/grid-item-change-row-repaint-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/css-grid-layout/grid-item-change-row-repaint-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -18,6 +20,12 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV class='sizedToGridArea'",
+      "reason": "style change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/css-grid-layout/grid-item-z-index-change-repaint-expected.txt b/third_party/WebKit/LayoutTests/fast/css-grid-layout/grid-item-z-index-change-repaint-expected.txt
index 2ebce0e..d48eb08e 100644
--- a/third_party/WebKit/LayoutTests/fast/css-grid-layout/grid-item-z-index-change-repaint-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/css-grid-layout/grid-item-z-index-change-repaint-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -18,6 +20,16 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV id='item1' class='sizedToGridArea green negativeZIndex'",
+      "reason": "subtree"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='item2' class='sizedToGridArea green'",
+      "reason": "subtree"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/images/do-not-paint-below-image-baseline-expected.txt b/third_party/WebKit/LayoutTests/fast/images/do-not-paint-below-image-baseline-expected.txt
index b322389..6132ff95 100644
--- a/third_party/WebKit/LayoutTests/fast/images/do-not-paint-below-image-baseline-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/images/do-not-paint-below-image-baseline-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -13,6 +15,12 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutImage IMG",
+      "reason": "style change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/images/fixed-img-src-change-after-scroll-expected.txt b/third_party/WebKit/LayoutTests/fast/images/fixed-img-src-change-after-scroll-expected.txt
index 7114806..9c6158a 100644
--- a/third_party/WebKit/LayoutTests/fast/images/fixed-img-src-change-after-scroll-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/images/fixed-img-src-change-after-scroll-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [785, 2016],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [785, 2016],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -18,6 +20,12 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutImage (positioned) IMG id='img'",
+      "reason": "subtree"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/images/repaint-subrect-grid-expected.txt b/third_party/WebKit/LayoutTests/fast/images/repaint-subrect-grid-expected.txt
index b668340..a73c870c 100644
--- a/third_party/WebKit/LayoutTests/fast/images/repaint-subrect-grid-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/images/repaint-subrect-grid-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -118,6 +120,52 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='mask'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='mask'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='mask'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='mask'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='mask'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='mask'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='mask'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='mask'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='mask'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='mask'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='mask'",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/layers/scroll-descendant-with-cached-cliprects-expected.txt b/third_party/WebKit/LayoutTests/fast/layers/scroll-descendant-with-cached-cliprects-expected.txt
index bac87a2..247da29 100644
--- a/third_party/WebKit/LayoutTests/fast/layers/scroll-descendant-with-cached-cliprects-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/layers/scroll-descendant-with-cached-cliprects-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [785, 1893],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [785, 1893],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -45,25 +47,43 @@
           "object": "LayoutBlockFlow DIV",
           "rect": [677, 50, 100, 100],
           "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"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "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/fast/multicol/composited-layer-expected.txt b/third_party/WebKit/LayoutTests/fast/multicol/composited-layer-expected.txt
index 437ed8a..d6d5ea6 100644
--- a/third_party/WebKit/LayoutTests/fast/multicol/composited-layer-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/multicol/composited-layer-expected.txt
@@ -1,12 +1,15 @@
 {
+"name": "Content Root Layer",
 "bounds": [800, 600],
 "children": [
 {
+"name": "LayoutView #document",
 "bounds": [800, 600],
 "contentsOpaque": true,
 "drawsContent": true,
 "children": [
 {
+"name": "LayoutBlockFlow DIV id='multicol'",
 "position": [8, 8],
 "bounds": [200, 100],
 "drawsContent": true
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/absolute-display-block-to-none-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/absolute-display-block-to-none-expected.txt
index fa1cf75e..f327902 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/absolute-display-block-to-none-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/absolute-display-block-to-none-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -13,6 +15,12 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='absolute'",
+      "reason": "layoutObject removal"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/absolute-margin-change-repaint-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/absolute-margin-change-repaint-expected.txt
index f9209664..353a309 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/absolute-margin-change-repaint-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/absolute-margin-change-repaint-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -18,6 +20,12 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='test'",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/absolute-position-change-containing-block-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/absolute-position-change-containing-block-expected.txt
index 6b3066ef..3fa9ddc 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/absolute-position-change-containing-block-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/absolute-position-change-containing-block-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 2016],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 2016],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -30,21 +32,43 @@
           "object": "LayoutBlockFlow DIV id='container' class='fixed blue'",
           "rect": [8, 8, 100, 100],
           "reason": "subtree"
-        },
-        {
-          "object": "LayoutBlockFlow (positioned) DIV class='absolute green'",
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutBlockFlow (positioned) DIV class='absolute green'",
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='container' class='fixed blue'",
-          "reason": "style change"
         }
       ]
     }
+  ],
+  "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/fast/repaint/absolute-position-changed-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/absolute-position-changed-expected.txt
index aa27b35..423ccf3 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/absolute-position-changed-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/absolute-position-changed-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 2016],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 2016],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -18,6 +20,12 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='absoluteDiv' class='absolute green'",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/absolute-position-moved-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/absolute-position-moved-expected.txt
index 3c6b1e9..2ba77e94 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/absolute-position-moved-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/absolute-position-moved-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 2016],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 2016],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -18,6 +20,16 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='absoluteDiv' class='absolute green'",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='absoluteDiv' class='absolute green'",
+      "reason": "layoutObject insertion"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/add-table-overpaint-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/add-table-overpaint-expected.txt
index dbd47f04..7a63c3a3 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/add-table-overpaint-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/add-table-overpaint-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -33,6 +35,28 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutTable TABLE",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutTableSection TBODY",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutTableRow TR",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutTableCell TD",
+      "reason": "layoutObject insertion"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/align-content-change-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/align-content-change-expected.txt
index 2c46b9d..01a16a2b 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/align-content-change-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/align-content-change-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -38,6 +40,24 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV class='item'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV class='item'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/align-content-change-keeping-geometry-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/align-content-change-keeping-geometry-expected.txt
index e9f7954d..10aa3faf 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/align-content-change-keeping-geometry-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/align-content-change-keeping-geometry-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/align-content-change-no-flex-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/align-content-change-no-flex-expected.txt
index e9f7954d..10aa3faf 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/align-content-change-no-flex-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/align-content-change-no-flex-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/align-content-distribution-change-grid-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/align-content-distribution-change-grid-expected.txt
index a1a8597..c1ab380 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/align-content-distribution-change-grid-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/align-content-distribution-change-grid-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -58,6 +60,36 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutGrid DIV id='container'",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV class='item'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV class='item'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV class='item'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/align-content-position-change-grid-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/align-content-position-change-grid-expected.txt
index a32de8e..ee7f9a5 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/align-content-position-change-grid-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/align-content-position-change-grid-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -73,6 +75,36 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutGrid DIV id='container'",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV class='item'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV class='item'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV class='item'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/align-self-change-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/align-self-change-expected.txt
index 251ad9b0..7637bde6 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/align-self-change-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/align-self-change-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -28,6 +30,16 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV class='item'",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutBlockFlow DIV class='item'",
+      "reason": "incremental"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/align-self-change-grid-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/align-self-change-grid-expected.txt
index e706d78..0833fc6 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/align-self-change-grid-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/align-self-change-grid-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -28,6 +30,20 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV class='item1'",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV class='item2'",
+      "reason": "style change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/align-self-change-keeping-geometry-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/align-self-change-keeping-geometry-expected.txt
index e9f7954d..10aa3faf 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/align-self-change-keeping-geometry-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/align-self-change-keeping-geometry-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/align-self-change-no-flex-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/align-self-change-no-flex-expected.txt
index e9f7954d..10aa3faf 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/align-self-change-no-flex-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/align-self-change-no-flex-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/align-self-overflow-change-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/align-self-overflow-change-expected.txt
index 907892d..956a998 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/align-self-overflow-change-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/align-self-overflow-change-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -33,6 +35,20 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV class='item1'",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV class='item2'",
+      "reason": "style change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/background-currentColor-repaint-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/background-currentColor-repaint-expected.txt
index 0a1965d..d21c144 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/background-currentColor-repaint-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/background-currentColor-repaint-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -18,6 +20,16 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV id='div1'",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='div2'",
+      "reason": "style change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/background-generated-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/background-generated-expected.txt
index 2154613..d4ef295 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/background-generated-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/background-generated-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -18,6 +20,16 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "border box change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='target'",
+      "reason": "incremental"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/background-image-paint-invalidation-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/background-image-paint-invalidation-expected.txt
index 5d04cc5..9ba3fae6 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/background-image-paint-invalidation-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/background-image-paint-invalidation-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [808, 2016],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [808, 2016],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -18,6 +20,16 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutView #document",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutBlockFlow BODY",
+      "reason": "style change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/background-misaligned-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/background-misaligned-expected.txt
index 1331e86b..9b4a02d 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/background-misaligned-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/background-misaligned-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -13,6 +15,12 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='target'",
+      "reason": "layoutObject removal"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/background-resize-height-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/background-resize-height-expected.txt
index 91b7850..2b183fd 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/background-resize-height-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/background-resize-height-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -14,6 +16,7 @@
       ],
       "children": [
         {
+          "name": "LayoutBlockFlow (positioned) DIV class='test image'",
           "position": [8, 8],
           "bounds": [60, 44],
           "drawsContent": true,
@@ -27,6 +30,7 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow (positioned) DIV class='test image size-cover'",
           "position": [58, 8],
           "bounds": [60, 44],
           "drawsContent": true,
@@ -40,6 +44,7 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow (positioned) DIV class='test image size-contain'",
           "position": [108, 8],
           "bounds": [60, 44],
           "drawsContent": true,
@@ -53,6 +58,7 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow (positioned) DIV class='test image fixed-height'",
           "position": [158, 8],
           "bounds": [60, 44],
           "drawsContent": true,
@@ -66,6 +72,7 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow (positioned) DIV class='test image percent-height'",
           "position": [208, 8],
           "bounds": [60, 44],
           "drawsContent": true,
@@ -79,6 +86,7 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow (positioned) DIV class='test image top'",
           "position": [258, 8],
           "bounds": [60, 44],
           "drawsContent": true,
@@ -92,6 +100,7 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow (positioned) DIV class='test image bottom'",
           "position": [308, 8],
           "bounds": [60, 44],
           "drawsContent": true,
@@ -105,6 +114,7 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow (positioned) DIV class='test image center'",
           "position": [358, 8],
           "bounds": [60, 44],
           "drawsContent": true,
@@ -118,6 +128,7 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow (positioned) DIV class='test image no-repeat'",
           "position": [408, 8],
           "bounds": [60, 44],
           "drawsContent": true,
@@ -131,6 +142,7 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow (positioned) DIV class='test image repeat-space'",
           "position": [458, 8],
           "bounds": [60, 44],
           "drawsContent": true,
@@ -144,6 +156,7 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow (positioned) DIV class='test image repeat-round'",
           "position": [508, 8],
           "bounds": [60, 44],
           "drawsContent": true,
@@ -157,6 +170,7 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow (positioned) DIV class='test generated'",
           "position": [8, 108],
           "bounds": [60, 44],
           "drawsContent": true,
@@ -170,6 +184,7 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow (positioned) DIV class='test generated cover'",
           "position": [8, 108],
           "bounds": [60, 44],
           "drawsContent": true,
@@ -183,6 +198,7 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow (positioned) DIV class='test generated contain'",
           "position": [8, 108],
           "bounds": [60, 44],
           "drawsContent": true,
@@ -196,6 +212,7 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow (positioned) DIV class='test generated fixed-height'",
           "position": [158, 108],
           "bounds": [60, 44],
           "drawsContent": true,
@@ -209,6 +226,7 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow (positioned) DIV class='test generated percent-height'",
           "position": [208, 108],
           "bounds": [60, 44],
           "drawsContent": true,
@@ -222,6 +240,7 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow (positioned) DIV class='test generated top'",
           "position": [258, 108],
           "bounds": [60, 44],
           "drawsContent": true,
@@ -235,6 +254,7 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow (positioned) DIV class='test generated bottom'",
           "position": [308, 108],
           "bounds": [60, 44],
           "drawsContent": true,
@@ -248,6 +268,7 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow (positioned) DIV class='test generated center'",
           "position": [358, 108],
           "bounds": [60, 44],
           "drawsContent": true,
@@ -261,6 +282,7 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow (positioned) DIV class='test generated no-repeat'",
           "position": [408, 108],
           "bounds": [60, 44],
           "drawsContent": true,
@@ -274,6 +296,7 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow (positioned) DIV class='test generated repeat-space'",
           "position": [458, 108],
           "bounds": [60, 44],
           "drawsContent": true,
@@ -287,6 +310,7 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow (positioned) DIV class='test generated repeat-round'",
           "position": [508, 108],
           "bounds": [60, 44],
           "drawsContent": true,
@@ -301,6 +325,100 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='container'",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutBlockFlow (positioned) DIV class='test image'",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutBlockFlow (positioned) DIV class='test image size-cover'",
+      "reason": "border box change"
+    },
+    {
+      "object": "LayoutBlockFlow (positioned) DIV class='test image size-contain'",
+      "reason": "border box change"
+    },
+    {
+      "object": "LayoutBlockFlow (positioned) DIV class='test image fixed-height'",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutBlockFlow (positioned) DIV class='test image percent-height'",
+      "reason": "border box change"
+    },
+    {
+      "object": "LayoutBlockFlow (positioned) DIV class='test image top'",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutBlockFlow (positioned) DIV class='test image bottom'",
+      "reason": "border box change"
+    },
+    {
+      "object": "LayoutBlockFlow (positioned) DIV class='test image center'",
+      "reason": "border box change"
+    },
+    {
+      "object": "LayoutBlockFlow (positioned) DIV class='test image no-repeat'",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutBlockFlow (positioned) DIV class='test image repeat-space'",
+      "reason": "border box change"
+    },
+    {
+      "object": "LayoutBlockFlow (positioned) DIV class='test image repeat-round'",
+      "reason": "border box change"
+    },
+    {
+      "object": "LayoutBlockFlow (positioned) DIV class='test generated'",
+      "reason": "border box change"
+    },
+    {
+      "object": "LayoutBlockFlow (positioned) DIV class='test generated cover'",
+      "reason": "border box change"
+    },
+    {
+      "object": "LayoutBlockFlow (positioned) DIV class='test generated contain'",
+      "reason": "border box change"
+    },
+    {
+      "object": "LayoutBlockFlow (positioned) DIV class='test generated fixed-height'",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutBlockFlow (positioned) DIV class='test generated percent-height'",
+      "reason": "border box change"
+    },
+    {
+      "object": "LayoutBlockFlow (positioned) DIV class='test generated top'",
+      "reason": "border box change"
+    },
+    {
+      "object": "LayoutBlockFlow (positioned) DIV class='test generated bottom'",
+      "reason": "border box change"
+    },
+    {
+      "object": "LayoutBlockFlow (positioned) DIV class='test generated center'",
+      "reason": "border box change"
+    },
+    {
+      "object": "LayoutBlockFlow (positioned) DIV class='test generated no-repeat'",
+      "reason": "border box change"
+    },
+    {
+      "object": "LayoutBlockFlow (positioned) DIV class='test generated repeat-space'",
+      "reason": "border box change"
+    },
+    {
+      "object": "LayoutBlockFlow (positioned) DIV class='test generated repeat-round'",
+      "reason": "border box change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/background-shorthand-with-gradient-and-height-changes-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/background-shorthand-with-gradient-and-height-changes-expected.txt
index f529d60..e2c540fe 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/background-shorthand-with-gradient-and-height-changes-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/background-shorthand-with-gradient-and-height-changes-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -18,6 +20,16 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV id='outer'",
+      "reason": "border box change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='inner'",
+      "reason": "incremental"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/background-size-auto-with-gradient-and-height-changes-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/background-size-auto-with-gradient-and-height-changes-expected.txt
index f529d60..e2c540fe 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/background-size-auto-with-gradient-and-height-changes-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/background-size-auto-with-gradient-and-height-changes-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -18,6 +20,16 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV id='outer'",
+      "reason": "border box change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='inner'",
+      "reason": "incremental"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/backgroundSizeRepaint-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/backgroundSizeRepaint-expected.txt
index 389d6cd7..fc4ecdc 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/backgroundSizeRepaint-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/backgroundSizeRepaint-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -28,6 +30,24 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "border box change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='a'",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "border box change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='b'",
+      "reason": "incremental"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/block-layout-inline-children-float-positioned-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/block-layout-inline-children-float-positioned-expected.txt
deleted file mode 100644
index 4fa210c5..0000000
--- a/third_party/WebKit/LayoutTests/fast/repaint/block-layout-inline-children-float-positioned-expected.txt
+++ /dev/null
@@ -1,49 +0,0 @@
-{
-  "bounds": [800, 600],
-  "children": [
-    {
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutText #text",
-          "rect": [305, 35, 297, 18],
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [153, 35, 297, 18],
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) SPAN",
-          "rect": [305, 35, 296, 18],
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "LayoutBlockFlow (positioned) SPAN",
-          "rect": [153, 35, 296, 18],
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'the quick brown fox jumped over the lazy dog'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'the quick brown fox jumped over the lazy dog'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        }
-      ]
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/block-shift-repaint-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/block-shift-repaint-expected.txt
index a321eb1..fe7c2435 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/block-shift-repaint-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/block-shift-repaint-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -108,6 +110,56 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV id='div1' class='blue half'",
+      "reason": "became invisible"
+    },
+    {
+      "object": "LayoutBlockFlow DIV class='red half'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV class='green half'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='top' class='blue half'",
+      "reason": "became invisible"
+    },
+    {
+      "object": "LayoutBlockFlow DIV class='red half'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV class='green half'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='div2' class='zero'",
+      "reason": "became visible"
+    },
+    {
+      "object": "LayoutBlockFlow DIV class='green half'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV class='red half'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='innerDiv'",
+      "reason": "became visible"
+    },
+    {
+      "object": "LayoutBlockFlow DIV class='half'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV class='half'",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/body-background-image-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/body-background-image-expected.txt
index 7cfb28c..095c411 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/body-background-image-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/body-background-image-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -19,6 +21,16 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutView #document",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutBlockFlow BODY",
+      "reason": "style change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/border-image-outset-add-repaint-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/border-image-outset-add-repaint-expected.txt
index cc100b2..eafdfd10 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/border-image-outset-add-repaint-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/border-image-outset-add-repaint-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -13,6 +15,12 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV id='test'",
+      "reason": "style change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/border-image-outset-change-repaint-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/border-image-outset-change-repaint-expected.txt
index cc100b2..eafdfd10 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/border-image-outset-change-repaint-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/border-image-outset-change-repaint-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -13,6 +15,12 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV id='test'",
+      "reason": "style change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/border-outline-0-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/border-outline-0-expected.txt
index ad4c8148..21e4dd8 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/border-outline-0-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/border-outline-0-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -13,6 +15,12 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='border-image'",
+      "reason": "style change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/border-radius-repaint-2-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/border-radius-repaint-2-expected.txt
index 9701b00..8b0d92d 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/border-radius-repaint-2-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/border-radius-repaint-2-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [874, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [874, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -44,6 +46,32 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutView #document",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutBlockFlow HTML",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutBlockFlow BODY",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "border box change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='target'",
+      "reason": "incremental"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/border-radius-repaint-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/border-radius-repaint-expected.txt
index bfdb86e99..67a9f4d 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/border-radius-repaint-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/border-radius-repaint-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -38,6 +40,24 @@
         }
       ]
     }
+  ],
+  "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/fast/repaint/border-radius-with-outline-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/border-radius-with-outline-expected.txt
index ef517efa..1e6a173 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/border-radius-with-outline-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/border-radius-with-outline-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -13,6 +15,12 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='target'",
+      "reason": "outline"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/border-radius-without-border-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/border-radius-without-border-expected.txt
index 0b01cad7..0041e1f 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/border-radius-without-border-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/border-radius-without-border-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -28,6 +30,16 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='target1'",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='target2'",
+      "reason": "incremental"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/border-repaint-glitch-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/border-repaint-glitch-expected.txt
index 5e31701..7b9e306 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/border-repaint-glitch-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/border-repaint-glitch-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -38,6 +40,24 @@
         }
       ]
     }
+  ],
+  "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/fast/repaint/box-shadow-add-repaint-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/box-shadow-add-repaint-expected.txt
index 7379aa2..9c13d858 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/box-shadow-add-repaint-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/box-shadow-add-repaint-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -13,6 +15,12 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV id='test'",
+      "reason": "style change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/box-shadow-change-repaint-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/box-shadow-change-repaint-expected.txt
index f0f4e2e..999c7fc 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/box-shadow-change-repaint-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/box-shadow-change-repaint-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -13,6 +15,12 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV id='test'",
+      "reason": "style change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/box-shadow-dynamic-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/box-shadow-dynamic-expected.txt
index 845d886..6dcd254 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/box-shadow-dynamic-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/box-shadow-dynamic-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -28,6 +30,24 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "border box change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='a'",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "border box change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='b'",
+      "reason": "incremental"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/box-shadow-inset-repaint-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/box-shadow-inset-repaint-expected.txt
index 1dadf041e..962382e9 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/box-shadow-inset-repaint-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/box-shadow-inset-repaint-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -18,6 +20,16 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV id='container'",
+      "reason": "border box change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "layoutObject insertion"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/box-sizing-border-keeping-size-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/box-sizing-border-keeping-size-expected.txt
index 1e6a886..7faef4b 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/box-sizing-border-keeping-size-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/box-sizing-border-keeping-size-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -18,6 +20,16 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='target1' class='content-box'",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='target2' class='border-box'",
+      "reason": "style change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/box-sizing-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/box-sizing-expected.txt
index 130507f..f2b2df5 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/box-sizing-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/box-sizing-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -33,6 +35,16 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='target1' class='content-box'",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='target2' class='border-box'",
+      "reason": "content box change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/box-sizing-padding-keeping-size-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/box-sizing-padding-keeping-size-expected.txt
index fbbcb6cc..3cb20e3 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/box-sizing-padding-keeping-size-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/box-sizing-padding-keeping-size-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -13,6 +15,12 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='target2' class='border-box'",
+      "reason": "content box change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/bugzilla-3509-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/bugzilla-3509-expected.txt
index 80c5d3f5..562b99a 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/bugzilla-3509-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/bugzilla-3509-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -10,21 +12,19 @@
           "object": "LayoutBlockFlow DIV id='im'",
           "rect": [11, 125, 100, 100],
           "reason": "forced by layout"
-        },
-        {
-          "object": "InlineTextBox '\u00A0'",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV id='im'",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "forced by layout"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/bugzilla-6388-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/bugzilla-6388-expected.txt
index fbdca7e..e2f73e8 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/bugzilla-6388-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/bugzilla-6388-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -18,6 +20,16 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (positioned) DIV",
+      "reason": "location change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/button-inner-no-repaint-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/button-inner-no-repaint-expected.txt
index e9f7954d..10aa3faf 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/button-inner-no-repaint-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/button-inner-no-repaint-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/button-spurious-layout-hint-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/button-spurious-layout-hint-expected.txt
index aea9fd34..99ed7bf 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/button-spurious-layout-hint-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/button-spurious-layout-hint-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -13,6 +15,12 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutButton BUTTON id='target'",
+      "reason": "style change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/canvas-putImageData-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/canvas-putImageData-expected.txt
index ce79f00..c2df2df 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/canvas-putImageData-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/canvas-putImageData-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -13,6 +15,12 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutHTMLCanvas CANVAS id='canvas'",
+      "reason": "invalidate paint rectangle"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/canvas-resize-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/canvas-resize-expected.txt
index 8615583c..8db60a8 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/canvas-resize-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/canvas-resize-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -13,6 +15,12 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutHTMLCanvas (positioned) CANVAS id='canvas'",
+      "reason": "forced by layout"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/canvas-resize-no-full-invalidation-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/canvas-resize-no-full-invalidation-expected.txt
index 4e587c7..10abbd8 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/canvas-resize-no-full-invalidation-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/canvas-resize-no-full-invalidation-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -13,6 +15,12 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutHTMLCanvas (positioned) CANVAS id='canvas'",
+      "reason": "incremental"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/change-transform-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/change-transform-expected.txt
index ca7246e..073e0cd 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/change-transform-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/change-transform-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -13,6 +15,12 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV id='square'",
+      "reason": "subtree"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/child-of-sub-pixel-offset-composited-layer-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/child-of-sub-pixel-offset-composited-layer-expected.txt
index cd1020b..0475953c 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/child-of-sub-pixel-offset-composited-layer-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/child-of-sub-pixel-offset-composited-layer-expected.txt
@@ -1,12 +1,15 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow (positioned) DIV class='container'",
           "position": [101, 100],
           "transformOrigin": [0, 0],
           "bounds": [14, 14],
@@ -22,6 +25,12 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='target' class='green'",
+      "reason": "style change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/clip-path-constant-repaint-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/clip-path-constant-repaint-expected.txt
index 9fad0336..4580327 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/clip-path-constant-repaint-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/clip-path-constant-repaint-expected.txt
@@ -1,12 +1,15 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow (positioned) DIV id='clip'",
           "position": [8, 8],
           "bounds": [800, 300],
           "drawsContent": true,
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/clip-unclip-and-change-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/clip-unclip-and-change-expected.txt
index 3ffb3de0..0c6162d 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/clip-unclip-and-change-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/clip-unclip-and-change-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -13,6 +15,12 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV id='content'",
+      "reason": "style change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/clipped-overflow-visible-subtree-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/clipped-overflow-visible-subtree-expected.txt
index 85212ad..eb9b5dc 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/clipped-overflow-visible-subtree-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/clipped-overflow-visible-subtree-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -15,25 +17,31 @@
           "object": "LayoutBlockFlow DIV",
           "rect": [8, 8, 100, 100],
           "reason": "bounds change"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV",
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV",
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV id='node'",
-          "reason": "layoutObject removal"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "reason": "bounds change"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (floating) DIV id='node'",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutBlockFlow (floating) DIV",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow (floating) DIV",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/clipped-relative-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/clipped-relative-expected.txt
index 1d70777..e353202 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/clipped-relative-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/clipped-relative-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -15,25 +17,27 @@
           "object": "LayoutImage IMG",
           "rect": [8, 70, 204, 232],
           "reason": "location change"
-        },
-        {
-          "object": "InlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "LayoutText #text",
-          "reason": "none"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='inner'",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutImage IMG",
+      "reason": "location change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "none"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/composited-iframe-scroll-repaint-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/composited-iframe-scroll-repaint-expected.txt
index 2bea989..979f12b5 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/composited-iframe-scroll-repaint-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/composited-iframe-scroll-repaint-expected.txt
@@ -1,12 +1,15 @@
 {
+  "name": "Content Root Layer",
   "bounds": [300, 516],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [300, 516],
       "drawsContent": true,
       "backgroundColor": "#EEEEEE",
       "children": [
         {
+          "name": "LayoutBlockFlow BODY",
           "position": [8, 8],
           "bounds": [284, 500],
           "drawsContent": true
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/containing-block-position-change-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/containing-block-position-change-expected.txt
index 06805c25..c54e5134 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/containing-block-position-change-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/containing-block-position-change-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -15,13 +17,23 @@
           "object": "LayoutBlockFlow (positioned) DIV",
           "rect": [100, 70, 50, 50],
           "reason": "subtree"
-        },
-        {
-          "object": "LayoutBlockFlow (relative positioned) DIV id='t'",
-          "reason": "style change"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (positioned) DIV",
+      "reason": "subtree"
+    },
+    {
+      "object": "LayoutBlockFlow (relative positioned) DIV id='t'",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutBlockFlow (positioned) DIV",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/content-into-overflow-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/content-into-overflow-expected.txt
index a7eed6282..38ce6be 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/content-into-overflow-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/content-into-overflow-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -48,6 +50,32 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (positioned) DIV",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='target1' class='narrow'",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutBlockFlow (positioned) DIV",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='target2' class='short'",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "became visible"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='target3'",
+      "reason": "layoutObject insertion"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/crbug-371640-2-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/crbug-371640-2-expected.txt
index dc64ac9..00a6a0a 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/crbug-371640-2-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/crbug-371640-2-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -20,37 +22,47 @@
           "object": "LayoutBlockFlow DIV id='keep' class='item'",
           "rect": [88, 84, 100, 100],
           "reason": "bounds change"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV id='container'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV id='keep_outer' class='outer'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV id='node' class='outer'",
-          "reason": "layoutObject removal"
-        },
-        {
-          "object": "LayoutBlockFlow (positioned) DIV class='abs_pos'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutBlockFlow (relative positioned) (floating) DIV id='keep_inner' class='inner'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutBlockFlow (relative positioned) (floating) DIV id='to_remove_inner' class='inner'",
-          "reason": "layoutObject removal"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "reason": "bounds change"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV id='to_remove' class='item'",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutBlockFlow (relative positioned) (floating) DIV id='to_remove_inner' class='inner'",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutBlockFlow (floating) DIV id='node' class='outer'",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutBlockFlow (floating) DIV id='container'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow (floating) DIV id='keep_outer' class='outer'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow (relative positioned) (floating) DIV id='keep_inner' class='inner'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow (positioned) DIV class='abs_pos'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='keep' class='item'",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/crbug-371640-3-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/crbug-371640-3-expected.txt
index 5ae954fc..669efe3 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/crbug-371640-3-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/crbug-371640-3-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -20,29 +22,39 @@
           "object": "LayoutBlockFlow DIV id='keep_child'",
           "rect": [408, 204, 100, 100],
           "reason": "bounds change"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV id='container'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV id='keep_outer' class='outer'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV id='remove' class='outer'",
-          "reason": "layoutObject removal"
-        },
-        {
-          "object": "LayoutBlockFlow (positioned) DIV id='abs_pos'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutBlockFlow (relative positioned) DIV id='keep_inner'",
-          "reason": "bounds change"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='remove_child'",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutBlockFlow (floating) DIV id='remove' class='outer'",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutBlockFlow (floating) DIV id='container'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow (floating) DIV id='keep_outer' class='outer'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow (relative positioned) DIV id='keep_inner'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='abs_pos'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='keep_child'",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/create-layer-repaint-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/create-layer-repaint-expected.txt
index 80dbed9..1f5c325 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/create-layer-repaint-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/create-layer-repaint-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -13,6 +15,12 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV id='test' class='stretchy'",
+      "reason": "subtree"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/destroy-composited-scrollbar-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/destroy-composited-scrollbar-expected.txt
index 1671f92..568cb6c 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/destroy-composited-scrollbar-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/destroy-composited-scrollbar-expected.txt
@@ -1,12 +1,15 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow (positioned) DIV",
           "position": [0, 100],
           "bounds": [200, 200],
           "contentsOpaque": true,
@@ -22,15 +25,17 @@
               "object": "LayoutBlockFlow (positioned) DIV",
               "rect": [185, 0, 15, 200],
               "reason": "scroll"
-            },
-            {
-              "object": "LayoutBlockFlow (positioned) DIV",
-              "reason": "scroll"
             }
           ]
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (positioned) DIV",
+      "reason": "scroll"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/destroy-overlay-scrollbar-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/destroy-overlay-scrollbar-expected.txt
index 4660fe84..d03ce5a 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/destroy-overlay-scrollbar-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/destroy-overlay-scrollbar-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -10,13 +12,15 @@
           "object": "LayoutBlockFlow (positioned) DIV",
           "rect": [193, 100, 7, 200],
           "reason": "scroll"
-        },
-        {
-          "object": "VerticalScrollbar",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "VerticalScrollbar",
+      "reason": "scroll"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/destroy-scrollbar-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/destroy-scrollbar-expected.txt
index eb1e469..98b5d5e3 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/destroy-scrollbar-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/destroy-scrollbar-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -10,17 +12,19 @@
           "object": "LayoutBlockFlow (positioned) DIV",
           "rect": [185, 100, 15, 200],
           "reason": "scroll"
-        },
-        {
-          "object": "LayoutBlockFlow (positioned) DIV",
-          "reason": "scroll"
-        },
-        {
-          "object": "VerticalScrollbar",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "VerticalScrollbar",
+      "reason": "scroll"
+    },
+    {
+      "object": "LayoutBlockFlow (positioned) DIV",
+      "reason": "scroll"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/dont-invalidate-root-layer-when-composited-layer-becomes-visible-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/dont-invalidate-root-layer-when-composited-layer-becomes-visible-expected.txt
index 80d8484c..bdc8d6c9 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/dont-invalidate-root-layer-when-composited-layer-becomes-visible-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/dont-invalidate-root-layer-when-composited-layer-becomes-visible-expected.txt
@@ -1,23 +1,30 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow (positioned) DIV id='target'",
-          "reason": "subtree"
-        }
-      ],
       "children": [
         {
+          "name": "LayoutBlockFlow (positioned) DIV id='target'",
           "position": [200, 200],
           "bounds": [200, 200]
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='target'",
+      "reason": "subtree"
+    },
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='target'",
+      "reason": "style change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/dynamic-table-vertical-alignment-change-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/dynamic-table-vertical-alignment-change-expected.txt
index 9fef4ea2..632d2a2 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/dynamic-table-vertical-alignment-change-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/dynamic-table-vertical-alignment-change-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [808, 585],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [808, 585],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -30,21 +32,35 @@
           "object": "LayoutTableCell TD",
           "rect": [14, 70, 2, 3],
           "reason": "bounds change"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "reason": "bounds change"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutTableCell TD",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutBlockFlow (floating) DIV id='target'",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutTableCell TD",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/erase-overflow-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/erase-overflow-expected.txt
index cb3f3c2..2ef7a72 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/erase-overflow-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/erase-overflow-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -15,13 +17,23 @@
           "object": "LayoutBlockFlow DIV id='target' class='square'",
           "rect": [8, 8, 100, 100],
           "reason": "style change"
-        },
-        {
-          "object": "LayoutBlockFlow DIV class='square'",
-          "reason": "none"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV id='target' class='square'",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV class='square'",
+      "reason": "none"
+    },
+    {
+      "object": "LayoutBlockFlow DIV class='square'",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/filter-invalidation-after-display-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/filter-invalidation-after-display-expected.txt
index 0ae4a591..dcc5a95 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/filter-invalidation-after-display-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/filter-invalidation-after-display-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -18,6 +20,16 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='box' class='green box'",
+      "reason": "subtree"
+    },
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='box' class='green box'",
+      "reason": "subtree"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/filter-invalidation-positioned-child-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/filter-invalidation-positioned-child-expected.txt
index 4e50012..a2c74207 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/filter-invalidation-positioned-child-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/filter-invalidation-positioned-child-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -18,6 +20,16 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV id='box'",
+      "reason": "subtree"
+    },
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='positioned'",
+      "reason": "subtree"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/filter-invalidation-with-composited-container-change-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/filter-invalidation-with-composited-container-change-expected.txt
index b07af3d..12987b10 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/filter-invalidation-with-composited-container-change-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/filter-invalidation-with-composited-container-change-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -14,6 +16,7 @@
       ],
       "children": [
         {
+          "name": "LayoutBlockFlow DIV id='box' class='green box blurry'",
           "position": [8, 8],
           "bounds": [200, 200],
           "contentsOpaque": true,
@@ -29,6 +32,16 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV id='box' class='green box blurry'",
+      "reason": "subtree"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='box' class='green box blurry'",
+      "reason": "subtree"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/filter-repaint-accelerated-child-with-filter-child-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/filter-repaint-accelerated-child-with-filter-child-expected.txt
index 002ab95..61afe05 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/filter-repaint-accelerated-child-with-filter-child-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/filter-repaint-accelerated-child-with-filter-child-expected.txt
@@ -1,17 +1,21 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow DIV class='blur'",
           "position": [8, 8],
           "bounds": [200, 200],
           "drawsContent": true,
           "children": [
             {
+              "name": "LayoutBlockFlow DIV class='accelerated'",
               "position": [-12, -12],
               "transformOrigin": [112, 112],
               "bounds": [212, 257],
@@ -28,6 +32,12 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV id='resize' class='drop-shadow'",
+      "reason": "border box change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/filter-repaint-accelerated-on-accelerated-filter-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/filter-repaint-accelerated-on-accelerated-filter-expected.txt
index bd7551f..ef9b6fae8 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/filter-repaint-accelerated-on-accelerated-filter-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/filter-repaint-accelerated-on-accelerated-filter-expected.txt
@@ -1,17 +1,21 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow DIV class='blur accelerated'",
           "position": [8, 8],
           "bounds": [200, 200],
           "drawsContent": true,
           "children": [
             {
+              "name": "LayoutBlockFlow DIV id='resize' class='drop-shadow accelerated'",
               "bounds": [100, 200],
               "contentsOpaque": true,
               "drawsContent": true,
@@ -28,6 +32,12 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV id='resize' class='drop-shadow accelerated'",
+      "reason": "border box change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/filter-repaint-on-accelerated-layer-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/filter-repaint-on-accelerated-layer-expected.txt
index ca267fa..35f2dd8 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/filter-repaint-on-accelerated-layer-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/filter-repaint-on-accelerated-layer-expected.txt
@@ -1,17 +1,21 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow DIV class='blur'",
           "position": [8, 8],
           "bounds": [200, 200],
           "drawsContent": true,
           "children": [
             {
+              "name": "LayoutBlockFlow DIV id='resize' class='accelerated'",
               "bounds": [100, 200],
               "contentsOpaque": true,
               "drawsContent": true,
@@ -28,6 +32,12 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV id='resize' class='accelerated'",
+      "reason": "incremental"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/fixed-after-scroll-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/fixed-after-scroll-expected.txt
index 720fe457..1f3e894 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/fixed-after-scroll-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/fixed-after-scroll-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 2016],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 2016],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -15,13 +17,19 @@
           "object": "LayoutBlockFlow (positioned) DIV id='t' class='green absolute'",
           "rect": [8, 200, 100, 100],
           "reason": "subtree"
-        },
-        {
-          "object": "LayoutBlockFlow (positioned) DIV id='t' class='green absolute'",
-          "reason": "style change"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='t' class='green absolute'",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='t' class='green absolute'",
+      "reason": "subtree"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/fixed-and-absolute-position-scrolled-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/fixed-and-absolute-position-scrolled-expected.txt
index 8957e4a3..a2e7d8756 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/fixed-and-absolute-position-scrolled-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/fixed-and-absolute-position-scrolled-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 2016],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 2016],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -38,6 +40,28 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='absoluteDiv' class='absolute green'",
+      "reason": "subtree"
+    },
+    {
+      "object": "LayoutView #document",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutBlockFlow HTML",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='container' class='relative'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='absoluteDiv' class='absolute green'",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/fixed-child-move-after-scroll-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/fixed-child-move-after-scroll-expected.txt
index b94a463..1cab4db0 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/fixed-child-move-after-scroll-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/fixed-child-move-after-scroll-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [785, 3016],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [785, 3016],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -18,6 +20,12 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='toMove'",
+      "reason": "style change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/fixed-child-of-fixed-move-after-scroll-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/fixed-child-of-fixed-move-after-scroll-expected.txt
index b94a463..1cab4db0 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/fixed-child-of-fixed-move-after-scroll-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/fixed-child-of-fixed-move-after-scroll-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [785, 3016],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [785, 3016],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -18,6 +20,12 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='toMove'",
+      "reason": "style change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/fixed-child-of-transformed-move-after-scroll-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/fixed-child-of-transformed-move-after-scroll-expected.txt
index 1d5b136..763b217 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/fixed-child-of-transformed-move-after-scroll-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/fixed-child-of-transformed-move-after-scroll-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [785, 3016],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [785, 3016],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -18,6 +20,12 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='toMove'",
+      "reason": "style change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/fixed-child-of-transformed-scrolled-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/fixed-child-of-transformed-scrolled-expected.txt
index 7874400..2e628e0 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/fixed-child-of-transformed-scrolled-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/fixed-child-of-transformed-scrolled-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -13,6 +15,12 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='fixed'",
+      "reason": "style change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/fixed-descendant-of-transformed-scrolled-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/fixed-descendant-of-transformed-scrolled-expected.txt
index 7874400..2e628e0 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/fixed-descendant-of-transformed-scrolled-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/fixed-descendant-of-transformed-scrolled-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -13,6 +15,12 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='fixed'",
+      "reason": "style change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/fixed-element-repaint-after-compositing-update-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/fixed-element-repaint-after-compositing-update-expected.txt
index ddcf6ad..c714271 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/fixed-element-repaint-after-compositing-update-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/fixed-element-repaint-after-compositing-update-expected.txt
@@ -1,19 +1,24 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow (positioned) DIV id='fixedTransformed'",
           "position": [8, 102]
         },
         {
+          "name": "LayoutBlockFlow (positioned) DIV id='fixedOverlapping'",
           "position": [8, 102],
           "bounds": [800, 600]
         },
         {
+          "name": "LayoutBlockFlow (positioned) DIV id='moveMe'",
           "position": [150, 150],
           "bounds": [100, 100],
           "contentsOpaque": true,
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/fixed-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/fixed-expected.txt
index 53b6738..f03184d 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/fixed-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/fixed-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [785, 2016],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [785, 2016],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -13,6 +15,12 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='t'",
+      "reason": "style change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/fixed-margin-change-repaint-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/fixed-margin-change-repaint-expected.txt
index 113885b8..e17cf93 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/fixed-margin-change-repaint-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/fixed-margin-change-repaint-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -18,6 +20,12 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='test'",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/fixed-move-after-scroll-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/fixed-move-after-scroll-expected.txt
index b94a463..1cab4db0 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/fixed-move-after-scroll-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/fixed-move-after-scroll-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [785, 3016],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [785, 3016],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -18,6 +20,12 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='toMove'",
+      "reason": "style change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/fixed-position-transparency-with-overflow-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/fixed-position-transparency-with-overflow-expected.txt
index 9c9b5632..43ab9f1e 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/fixed-position-transparency-with-overflow-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/fixed-position-transparency-with-overflow-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 2016],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 2016],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -18,6 +20,16 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (relative positioned) DIV id='container' class='relative blue'",
+      "reason": "subtree"
+    },
+    {
+      "object": "LayoutBlockFlow (positioned) DIV class='absolute green'",
+      "reason": "subtree"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/fixed-scale-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/fixed-scale-expected.txt
index e446e3f..22ad037 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/fixed-scale-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/fixed-scale-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 2016],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 2016],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -13,6 +15,12 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='t' class='green translated'",
+      "reason": "subtree"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/fixed-scroll-simple-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/fixed-scroll-simple-expected.txt
index f5e9364..3ae06fc 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/fixed-scroll-simple-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/fixed-scroll-simple-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 2016],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 2016],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -18,6 +20,12 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (positioned) DIV class='green'",
+      "reason": "subtree"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/fixed-table-cell-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/fixed-table-cell-expected.txt
index a7f6c464..faff408 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/fixed-table-cell-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/fixed-table-cell-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 2016],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 2016],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -33,6 +35,28 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutTableCell TD id='moveMe' class='fixed'",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutTable (positioned) TABLE",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutTableSection TBODY",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutTableCell (anonymous)",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutBlockFlow (positioned) TD id='moveMe' class='fixed'",
+      "reason": "layoutObject insertion"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/fixed-table-overflow-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/fixed-table-overflow-expected.txt
index 9932b0f..f9c9f00 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/fixed-table-overflow-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/fixed-table-overflow-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 2016],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 2016],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -43,6 +45,36 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (relative positioned) DIV class='green'",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutTableCell TD id='moveMe' class='fixed'",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutTable (positioned) TABLE",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutTableSection TBODY",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutTableCell (anonymous)",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutBlockFlow (positioned) TD id='moveMe' class='fixed'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutBlockFlow (relative positioned) DIV class='green'",
+      "reason": "layoutObject insertion"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/fixed-table-overflow-zindex-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/fixed-table-overflow-zindex-expected.txt
index 3e36e57..d5defd8 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/fixed-table-overflow-zindex-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/fixed-table-overflow-zindex-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 2016],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 2016],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -33,6 +35,28 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutTableCell TD id='moveMe' class='fixed'",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutTable (positioned) TABLE",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutTableSection TBODY",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutTableCell (anonymous)",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutBlockFlow (positioned) TD id='moveMe' class='fixed'",
+      "reason": "layoutObject insertion"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/fixed-to-relative-position-with-absolute-child-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/fixed-to-relative-position-with-absolute-child-expected.txt
index 1956b37c..460dc80 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/fixed-to-relative-position-with-absolute-child-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/fixed-to-relative-position-with-absolute-child-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 2016],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 2016],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -30,17 +32,39 @@
           "object": "LayoutBlockFlow (positioned) DIV id='container' class='fixed blue'",
           "rect": [8, 200, 100, 100],
           "reason": "subtree"
-        },
-        {
-          "object": "LayoutBlockFlow (positioned) DIV class='absolute green'",
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutBlockFlow (relative positioned) DIV id='container' class='fixed blue'",
-          "reason": "style change"
         }
       ]
     }
+  ],
+  "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/fast/repaint/fixed-tranformed-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/fixed-tranformed-expected.txt
index 2baa97a..02fc78dd 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/fixed-tranformed-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/fixed-tranformed-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [785, 1000],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [785, 1000],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -13,6 +15,12 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='test'",
+      "reason": "style change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/fixed-under-composited-absolute-scrolled-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/fixed-under-composited-absolute-scrolled-expected.txt
index 0dd64fd..891ebc4 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/fixed-under-composited-absolute-scrolled-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/fixed-under-composited-absolute-scrolled-expected.txt
@@ -1,12 +1,15 @@
 {
+  "name": "Content Root Layer",
   "bounds": [785, 2001],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [785, 2001],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow (positioned) DIV id='absolute'",
           "position": [0, 400],
           "bounds": [100, 1601],
           "drawsContent": true,
@@ -22,6 +25,12 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='fixed'",
+      "reason": "incremental"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/fixed-under-composited-fixed-scrolled-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/fixed-under-composited-fixed-scrolled-expected.txt
index 8ad9040..f0f702f41 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/fixed-under-composited-fixed-scrolled-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/fixed-under-composited-fixed-scrolled-expected.txt
@@ -1,12 +1,15 @@
 {
+  "name": "Content Root Layer",
   "bounds": [785, 2016],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [785, 2016],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow (positioned) DIV id='fixed-container'",
           "position": [0, 400],
           "bounds": [785, 600],
           "contentsOpaque": true,
@@ -23,6 +26,12 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='fixed'",
+      "reason": "layoutObject removal"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/float-in-new-block-with-layout-delta-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/float-in-new-block-with-layout-delta-expected.txt
index ab07351..176cd57 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/float-in-new-block-with-layout-delta-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/float-in-new-block-with-layout-delta-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -10,13 +12,19 @@
           "object": "LayoutBlockFlow (floating) DIV",
           "rect": [8, 108, 100, 100],
           "reason": "layoutObject insertion"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='target'",
-          "reason": "layoutObject insertion"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV id='target'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutBlockFlow (floating) DIV",
+      "reason": "layoutObject insertion"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/float-move-during-layout-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/float-move-during-layout-expected.txt
index 0d0d6c3..c6288bf2 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/float-move-during-layout-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/float-move-during-layout-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -20,13 +22,23 @@
           "object": "LayoutBlockFlow (floating) DIV",
           "rect": [8, 104, 100, 100],
           "reason": "forced by layout"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='s'",
-          "reason": "bounds change"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV id='t'",
+      "reason": "became visible"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='s'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow (floating) DIV",
+      "reason": "forced by layout"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/float-new-in-block-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/float-new-in-block-expected.txt
index 6597ae2..c2a5d1e 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/float-new-in-block-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/float-new-in-block-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -13,6 +15,12 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (floating) DIV id='target'",
+      "reason": "layoutObject insertion"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/float-overflow-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/float-overflow-expected.txt
index 177fb34..055305e 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/float-overflow-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/float-overflow-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -775,305 +777,615 @@
           "object": "LayoutText #text",
           "rect": [57, 55, 16, 17],
           "reason": "bounds change"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'x'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'x'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'x'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'x'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'x'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'x'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'x'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'x'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'x'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'x'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'x'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'x'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'x'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'x'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='spacer1' class='spacer'",
-          "reason": "became visible"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='spacer10' class='spacer'",
-          "reason": "became visible"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='spacer11' class='spacer'",
-          "reason": "became visible"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='spacer12' class='spacer'",
-          "reason": "became visible"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='spacer13' class='spacer'",
-          "reason": "became visible"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='spacer14' class='spacer'",
-          "reason": "became visible"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='spacer2' class='spacer'",
-          "reason": "became visible"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='spacer3' class='spacer'",
-          "reason": "became visible"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='spacer4' class='spacer'",
-          "reason": "became visible"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='spacer5' class='spacer'",
-          "reason": "became visible"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='spacer6' class='spacer'",
-          "reason": "became visible"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='spacer7' class='spacer'",
-          "reason": "became visible"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='spacer8' class='spacer'",
-          "reason": "became visible"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='spacer9' class='spacer'",
-          "reason": "became visible"
-        },
-        {
-          "object": "LayoutText #text",
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutText #text",
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutText #text",
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutText #text",
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutText #text",
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutText #text",
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutText #text",
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutText #text",
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutText #text",
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutText #text",
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutText #text",
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutText #text",
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutText #text",
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutText #text",
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutText #text",
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutText #text",
-          "reason": "bounds change"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV id='spacer1' class='spacer'",
+      "reason": "became visible"
+    },
+    {
+      "object": "LayoutBlockFlow DIV class='outer'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow (floating) DIV",
+      "reason": "bounds change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutInline SPAN",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox 'x'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='spacer2' class='spacer'",
+      "reason": "became visible"
+    },
+    {
+      "object": "LayoutBlockFlow DIV class='outer'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow (floating) DIV",
+      "reason": "bounds change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutInline SPAN",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox 'x'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='spacer3' class='spacer'",
+      "reason": "became visible"
+    },
+    {
+      "object": "LayoutBlockFlow DIV class='outer'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow (floating) DIV",
+      "reason": "bounds change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutInline SPAN",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox 'x'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='spacer4' class='spacer'",
+      "reason": "became visible"
+    },
+    {
+      "object": "LayoutBlockFlow DIV class='outer'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow (floating) DIV",
+      "reason": "bounds change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutInline SPAN",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox 'x'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='spacer5' class='spacer'",
+      "reason": "became visible"
+    },
+    {
+      "object": "LayoutBlockFlow DIV class='outer'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow (floating) DIV",
+      "reason": "bounds change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutInline SPAN",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox 'x'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='spacer6' class='spacer'",
+      "reason": "became visible"
+    },
+    {
+      "object": "LayoutDeprecatedFlexibleBox DIV class='outer box'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow (floating) DIV",
+      "reason": "bounds change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutInline SPAN",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox 'x'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='spacer12' class='spacer'",
+      "reason": "became visible"
+    },
+    {
+      "object": "LayoutDeprecatedFlexibleBox DIV class='outer box'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow (floating) DIV",
+      "reason": "bounds change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutInline SPAN",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox 'x'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='spacer7' class='spacer'",
+      "reason": "became visible"
+    },
+    {
+      "object": "LayoutTable TABLE class='outer'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutTableSection TBODY",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutTableRow TR",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutTableCell TD",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow (floating) DIV",
+      "reason": "bounds change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutInline SPAN",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox 'x'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='spacer8' class='spacer'",
+      "reason": "became visible"
+    },
+    {
+      "object": "LayoutTable TABLE class='outer'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutTableSection TBODY",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutTableRow TR",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutTableCell TD",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow (floating) DIV",
+      "reason": "bounds change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutInline SPAN",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox 'x'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='spacer14' class='spacer'",
+      "reason": "became visible"
+    },
+    {
+      "object": "LayoutBlockFlow (anonymous)",
+      "reason": "bounds change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutTable TABLE class='outer'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutTableSection TBODY",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutTableRow TR",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutTableCell TD",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow (floating) DIV",
+      "reason": "bounds change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutInline SPAN",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox 'x'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='spacer9' class='spacer'",
+      "reason": "became visible"
+    },
+    {
+      "object": "LayoutBlockFlow DIV class='outer'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow (floating) DIV",
+      "reason": "bounds change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutInline SPAN",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox 'x'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='spacer10' class='spacer'",
+      "reason": "became visible"
+    },
+    {
+      "object": "LayoutBlockFlow DIV class='outer'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow (floating) DIV",
+      "reason": "bounds change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutInline SPAN",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox 'x'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='spacer11' class='spacer'",
+      "reason": "became visible"
+    },
+    {
+      "object": "LayoutBlockFlow DIV class='outer'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow (floating) DIV",
+      "reason": "bounds change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutInline SPAN",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox 'x'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='spacer13' class='spacer'",
+      "reason": "became visible"
+    },
+    {
+      "object": "LayoutBlockFlow DIV class='outer'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow (floating) DIV",
+      "reason": "bounds change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutInline SPAN",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox 'x'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/float-overflow-right-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/float-overflow-right-expected.txt
index 800c509..7602c404 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/float-overflow-right-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/float-overflow-right-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -775,305 +777,615 @@
           "object": "LayoutText #text",
           "rect": [718, 292, 16, 17],
           "reason": "bounds change"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'x'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'x'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'x'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'x'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'x'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'x'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'x'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'x'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'x'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'x'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'x'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'x'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'x'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'x'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='spacer1' class='spacer'",
-          "reason": "became visible"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='spacer10' class='spacer'",
-          "reason": "became visible"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='spacer11' class='spacer'",
-          "reason": "became visible"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='spacer12' class='spacer'",
-          "reason": "became visible"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='spacer13' class='spacer'",
-          "reason": "became visible"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='spacer14' class='spacer'",
-          "reason": "became visible"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='spacer2' class='spacer'",
-          "reason": "became visible"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='spacer3' class='spacer'",
-          "reason": "became visible"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='spacer4' class='spacer'",
-          "reason": "became visible"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='spacer5' class='spacer'",
-          "reason": "became visible"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='spacer6' class='spacer'",
-          "reason": "became visible"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='spacer7' class='spacer'",
-          "reason": "became visible"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='spacer8' class='spacer'",
-          "reason": "became visible"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='spacer9' class='spacer'",
-          "reason": "became visible"
-        },
-        {
-          "object": "LayoutText #text",
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutText #text",
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutText #text",
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutText #text",
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutText #text",
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutText #text",
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutText #text",
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutText #text",
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutText #text",
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutText #text",
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutText #text",
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutText #text",
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutText #text",
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutText #text",
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutText #text",
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutText #text",
-          "reason": "bounds change"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV id='spacer1' class='spacer'",
+      "reason": "became visible"
+    },
+    {
+      "object": "LayoutBlockFlow DIV class='outer'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow (floating) DIV",
+      "reason": "bounds change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutInline SPAN",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox 'x'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='spacer2' class='spacer'",
+      "reason": "became visible"
+    },
+    {
+      "object": "LayoutBlockFlow DIV class='outer'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow (floating) DIV",
+      "reason": "bounds change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutInline SPAN",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox 'x'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='spacer3' class='spacer'",
+      "reason": "became visible"
+    },
+    {
+      "object": "LayoutBlockFlow DIV class='outer'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow (floating) DIV",
+      "reason": "bounds change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutInline SPAN",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox 'x'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='spacer4' class='spacer'",
+      "reason": "became visible"
+    },
+    {
+      "object": "LayoutBlockFlow DIV class='outer'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow (floating) DIV",
+      "reason": "bounds change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutInline SPAN",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox 'x'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='spacer5' class='spacer'",
+      "reason": "became visible"
+    },
+    {
+      "object": "LayoutBlockFlow DIV class='outer'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow (floating) DIV",
+      "reason": "bounds change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutInline SPAN",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox 'x'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='spacer6' class='spacer'",
+      "reason": "became visible"
+    },
+    {
+      "object": "LayoutDeprecatedFlexibleBox DIV class='outer box'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow (floating) DIV",
+      "reason": "bounds change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutInline SPAN",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox 'x'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='spacer12' class='spacer'",
+      "reason": "became visible"
+    },
+    {
+      "object": "LayoutDeprecatedFlexibleBox DIV class='outer box'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow (floating) DIV",
+      "reason": "bounds change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutInline SPAN",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox 'x'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='spacer7' class='spacer'",
+      "reason": "became visible"
+    },
+    {
+      "object": "LayoutTable TABLE class='outer'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutTableSection TBODY",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutTableRow TR",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutTableCell TD",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow (floating) DIV",
+      "reason": "bounds change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutInline SPAN",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox 'x'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='spacer8' class='spacer'",
+      "reason": "became visible"
+    },
+    {
+      "object": "LayoutTable TABLE class='outer'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutTableSection TBODY",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutTableRow TR",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutTableCell TD",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow (floating) DIV",
+      "reason": "bounds change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutInline SPAN",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox 'x'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='spacer14' class='spacer'",
+      "reason": "became visible"
+    },
+    {
+      "object": "LayoutBlockFlow (anonymous)",
+      "reason": "bounds change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutTable TABLE class='outer'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutTableSection TBODY",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutTableRow TR",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutTableCell TD",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow (floating) DIV",
+      "reason": "bounds change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutInline SPAN",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox 'x'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='spacer9' class='spacer'",
+      "reason": "became visible"
+    },
+    {
+      "object": "LayoutBlockFlow DIV class='outer'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow (floating) DIV",
+      "reason": "bounds change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutInline SPAN",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox 'x'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='spacer10' class='spacer'",
+      "reason": "became visible"
+    },
+    {
+      "object": "LayoutBlockFlow DIV class='outer'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow (floating) DIV",
+      "reason": "bounds change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutInline SPAN",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox 'x'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='spacer11' class='spacer'",
+      "reason": "became visible"
+    },
+    {
+      "object": "LayoutBlockFlow DIV class='outer'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow (floating) DIV",
+      "reason": "bounds change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutInline SPAN",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox 'x'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='spacer13' class='spacer'",
+      "reason": "became visible"
+    },
+    {
+      "object": "LayoutBlockFlow DIV class='outer'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow (floating) DIV",
+      "reason": "bounds change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutInline SPAN",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox 'x'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/focus-ring-on-continuation-move-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/focus-ring-on-continuation-move-expected.txt
index 50bd042e..6ef760b 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/focus-ring-on-continuation-move-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/focus-ring-on-continuation-move-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -18,6 +20,12 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (relative positioned) DIV id='block'",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/full-viewport-repaint-for-background-attachment-fixed-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/full-viewport-repaint-for-background-attachment-fixed-expected.txt
index b26573f..53e467e 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/full-viewport-repaint-for-background-attachment-fixed-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/full-viewport-repaint-for-background-attachment-fixed-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [785, 5000],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [785, 5000],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -13,6 +15,12 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutView #document",
+      "reason": "full"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/hover-pseudo-borders-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/hover-pseudo-borders-expected.txt
index 02d404c6..a013d4c1 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/hover-pseudo-borders-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/hover-pseudo-borders-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -15,13 +17,23 @@
           "object": "LayoutBlockFlow DIV class='hitregion'",
           "rect": [8, 8, 100, 100],
           "reason": "style change"
-        },
-        {
-          "object": "LayoutTextFragment (anonymous)",
-          "reason": "style change"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV class='hitregion'",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutBlockFlow (positioned) \u003Cpseudo:after\u003E",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutTextFragment (anonymous)",
+      "reason": "style change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/hover-pseudo-borders-whitespace-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/hover-pseudo-borders-whitespace-expected.txt
index 82d54e6..22d22f94 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/hover-pseudo-borders-whitespace-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/hover-pseudo-borders-whitespace-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -18,6 +20,16 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV id='div_border'",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='div_outline'",
+      "reason": "style change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/iframe-scroll-repaint-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/iframe-scroll-repaint-expected.txt
index 8b13789..6875765 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/iframe-scroll-repaint-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/iframe-scroll-repaint-expected.txt
@@ -1 +1,21 @@
+{
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutView #document",
+      "reason": "subtree"
+    },
+    {
+      "object": "LayoutBlockFlow HTML",
+      "reason": "subtree"
+    },
+    {
+      "object": "LayoutBlockFlow BODY",
+      "reason": "subtree"
+    },
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "subtree"
+    }
+  ]
+}
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/image-resize-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/image-resize-expected.txt
index 64de1487..0208061 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/image-resize-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/image-resize-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -18,6 +20,12 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutImage (positioned) IMG",
+      "reason": "forced by layout"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/in-scaled-iframe-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/in-scaled-iframe-expected.txt
index 53e1cf5..ee570df 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/in-scaled-iframe-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/in-scaled-iframe-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [785, 824],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [785, 824],
       "contentsOpaque": true,
       "drawsContent": true,
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/inline-block-resize-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/inline-block-resize-expected.txt
index f49d4f5..de26c7a 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/inline-block-resize-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/inline-block-resize-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -10,25 +12,23 @@
           "object": "LayoutBlockFlow DIV id='target'",
           "rect": [8, 8, 100, 100],
           "reason": "bounds change"
-        },
-        {
-          "object": "InlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "LayoutBlockFlow (positioned) DIV",
-          "reason": "forced by layout"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (positioned) DIV",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='target'",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/inline-outline-repaint-2-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/inline-outline-repaint-2-expected.txt
index e2a4f77..5e27091 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/inline-outline-repaint-2-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/inline-outline-repaint-2-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -15,17 +17,27 @@
           "object": "LayoutText #text",
           "rect": [215, 0, 40, 10],
           "reason": "style change"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox 'Test'",
-          "reason": "style change"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutInline SPAN",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox 'Test'",
+      "reason": "style change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/inline-overflow-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/inline-overflow-expected.txt
index e885de6..182d48f 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/inline-overflow-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/inline-overflow-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -10,13 +12,19 @@
           "object": "LayoutText #text",
           "rect": [33, 33, 250, 100],
           "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox 'A\u00A0\u00A0B'",
-          "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/fast/repaint/inline-reflow-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/inline-reflow-expected.txt
index 22ce9770..ce336b8 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/inline-reflow-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/inline-reflow-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -30,185 +32,71 @@
           "object": "LayoutText #text",
           "rect": [200, 0, 100, 200],
           "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'A A A A A AA AA'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'A A A A A'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'A A A A A'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'A A A A'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'A A'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'AA AA AA A A A'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'AA AA AA A'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'AA AA AA'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'AA AA AAA AAA'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'AA AAA AAA'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'AAA AAA AA'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'AAA AAA AAA AA'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'AAA AAAA AAAA'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'AAA AAAA'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'AAAA AAA'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'AAAA AAAAA'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'AAAAA AAAA AAAA'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'AAAAA AAAA'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'AAAAA AAAAA'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'AAAAA'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'AAAAA'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'AAAAAA AAAAA'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'AAAAAA AAAAAAA'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'AAAAAA'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'AAAAAA'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'AAAAAAA'",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='div1' class='container'",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "incremental"
+    },
+    {
+      "object": "InlineTextBox 'A A A A A AA AA'",
+      "reason": "incremental"
+    },
+    {
+      "object": "InlineTextBox 'AA AA AAA AAA'",
+      "reason": "incremental"
+    },
+    {
+      "object": "InlineTextBox 'AAA AAAA AAAA'",
+      "reason": "incremental"
+    },
+    {
+      "object": "InlineTextBox 'AAAAA AAAAA'",
+      "reason": "incremental"
+    },
+    {
+      "object": "InlineTextBox 'AAAAAA AAAAAAA'",
+      "reason": "incremental"
+    },
+    {
+      "object": "InlineTextBox 'AAAAAA AAAAA'",
+      "reason": "incremental"
+    },
+    {
+      "object": "InlineTextBox 'AAAAA AAAA AAAA'",
+      "reason": "incremental"
+    },
+    {
+      "object": "InlineTextBox 'AAA AAA AAA AA'",
+      "reason": "incremental"
+    },
+    {
+      "object": "InlineTextBox 'AA AA AA A A A'",
+      "reason": "incremental"
+    },
+    {
+      "object": "InlineTextBox 'A A'",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='div2' class='container'",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "forced by layout"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/inline-relative-positioned-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/inline-relative-positioned-expected.txt
index 67500a5..9f4259b2 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/inline-relative-positioned-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/inline-relative-positioned-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -15,21 +17,23 @@
           "object": "LayoutText #text",
           "rect": [8, 88, 100, 100],
           "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ''",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'a'",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV id='target'",
+      "reason": "invalidate paint rectangle"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "full"
+    },
+    {
+      "object": "InlineTextBox 'a'",
+      "reason": "full"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/inline-vertical-lr-overflow-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/inline-vertical-lr-overflow-expected.txt
index 07d93b6b..4af9026 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/inline-vertical-lr-overflow-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/inline-vertical-lr-overflow-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -10,13 +12,19 @@
           "object": "LayoutText #text",
           "rect": [33, 33, 100, 250],
           "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox 'A\u00A0\u00A0B'",
-          "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/fast/repaint/inline-vertical-rl-overflow-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/inline-vertical-rl-overflow-expected.txt
index 47ba9b2..0d1b5b3 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/inline-vertical-rl-overflow-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/inline-vertical-rl-overflow-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -10,13 +12,19 @@
           "object": "LayoutText #text",
           "rect": [667, 33, 100, 250],
           "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox 'A\u00A0\u00A0B'",
-          "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/fast/repaint/intermediate-layout-position-clip-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/intermediate-layout-position-clip-expected.txt
index 9e0b0b749..77b15c9 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/intermediate-layout-position-clip-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/intermediate-layout-position-clip-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -13,6 +15,12 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV id='target'",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/intermediate-layout-position-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/intermediate-layout-position-expected.txt
index 6399d39..54a729db 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/intermediate-layout-position-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/intermediate-layout-position-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -20,13 +22,27 @@
           "object": "LayoutTableCell TD id='cell'",
           "rect": [10, 170, 42, 20],
           "reason": "incremental"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='target'",
-          "reason": "became visible"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='target'",
+      "reason": "became visible"
+    },
+    {
+      "object": "LayoutTable TABLE",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutTableCell TD id='cell'",
+      "reason": "incremental"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/invalidate-invisible-element-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/invalidate-invisible-element-expected.txt
index aab30caf..7937e114 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/invalidate-invisible-element-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/invalidate-invisible-element-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -13,6 +15,12 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='target'",
+      "reason": "style change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/invalidate-paint-for-fixed-pos-inside-iframe-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/invalidate-paint-for-fixed-pos-inside-iframe-expected.txt
index 6c9a065e..3f8c546c 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/invalidate-paint-for-fixed-pos-inside-iframe-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/invalidate-paint-for-fixed-pos-inside-iframe-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/invalidate-paint-in-iframe-in-composited-layer-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/invalidate-paint-in-iframe-in-composited-layer-expected.txt
index f38b761..a1a93d1 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/invalidate-paint-in-iframe-in-composited-layer-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/invalidate-paint-in-iframe-in-composited-layer-expected.txt
@@ -1,12 +1,15 @@
 {
+  "name": "Content Root Layer",
   "bounds": [785, 616],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [785, 616],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow DIV",
           "position": [8, 408],
           "transformOrigin": [100, 100],
           "bounds": [304, 200],
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/invalidation-with-zero-size-object-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/invalidation-with-zero-size-object-expected.txt
index f81e642..1a59c116 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/invalidation-with-zero-size-object-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/invalidation-with-zero-size-object-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -13,6 +15,12 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV id='element'",
+      "reason": "became invisible"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/invisible-objects-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/invisible-objects-expected.txt
index 5dcb7184..96f18d42 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/invisible-objects-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/invisible-objects-expected.txt
@@ -1,28 +1,22 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "InlineTextBox ''",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'is invisible'",
-          "reason": "full"
-        },
-        {
-          "object": "LayoutText #text",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        }
-      ]
+      "drawsContent": true
+    }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutText #text",
+      "reason": "full"
+    },
+    {
+      "object": "InlineTextBox 'is invisible'",
+      "reason": "full"
     }
   ]
 }
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/justify-content-change-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/justify-content-change-expected.txt
index ac47a278..504124b 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/justify-content-change-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/justify-content-change-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -48,6 +50,24 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV class='item'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV class='item'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/justify-content-distribution-change-grid-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/justify-content-distribution-change-grid-expected.txt
index b2ec12d..4bb8dba 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/justify-content-distribution-change-grid-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/justify-content-distribution-change-grid-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -25,21 +27,39 @@
           "object": "LayoutBlockFlow DIV class='item'",
           "rect": [0, 52, 100, 200],
           "reason": "bounds change"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "reason": "bounds change"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutGrid DIV id='container'",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV class='item'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV class='item'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV class='item'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/justify-content-position-change-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/justify-content-position-change-expected.txt
index 037488a..af88a76 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/justify-content-position-change-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/justify-content-position-change-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -48,6 +50,24 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV class='item'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV class='item'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/justify-content-position-change-grid-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/justify-content-position-change-grid-expected.txt
index 2d21ed1..13b427b 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/justify-content-position-change-grid-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/justify-content-position-change-grid-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -40,21 +42,39 @@
           "object": "LayoutBlockFlow DIV class='item'",
           "rect": [0, 52, 50, 200],
           "reason": "bounds change"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "reason": "bounds change"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutGrid DIV id='container'",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV class='item'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV class='item'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV class='item'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/justify-items-change-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/justify-items-change-expected.txt
index 6400fb50..867a1cc 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/justify-items-change-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/justify-items-change-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -38,6 +40,32 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutBlockFlow DIV class='item'",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutGrid DIV id='container'",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutGrid DIV id='container'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutBlockFlow DIV class='item'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "layoutObject insertion"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/justify-items-legacy-change-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/justify-items-legacy-change-expected.txt
index 0ec6aaa..73fb852 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/justify-items-legacy-change-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/justify-items-legacy-change-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -68,6 +70,56 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutBlockFlow DIV class='item1'",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutBlockFlow DIV class='item2'",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutGrid DIV id='container'",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='parentContainer'",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='parentContainer'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutGrid DIV id='container'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutBlockFlow DIV class='item1'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutBlockFlow DIV class='item2'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "layoutObject insertion"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/justify-items-overflow-change-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/justify-items-overflow-change-expected.txt
index b0b6022f..0e338ea 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/justify-items-overflow-change-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/justify-items-overflow-change-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -58,6 +60,48 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutBlockFlow DIV class='item1'",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutBlockFlow DIV class='item2'",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutGrid DIV id='container'",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutGrid DIV id='container'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutBlockFlow DIV class='item1'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutBlockFlow DIV class='item2'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "layoutObject insertion"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/justify-self-change-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/justify-self-change-expected.txt
index cfa06250..f08f11dd 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/justify-self-change-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/justify-self-change-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -48,6 +50,24 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV class='item1'",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV class='item2'",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/justify-self-overflow-change-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/justify-self-overflow-change-expected.txt
index 6ef3a5c..74670ae 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/justify-self-overflow-change-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/justify-self-overflow-change-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -33,6 +35,20 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV class='item1'",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV class='item2'",
+      "reason": "style change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/layer-full-repaint-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/layer-full-repaint-expected.txt
index 622548a..38e79f6 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/layer-full-repaint-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/layer-full-repaint-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -13,6 +15,12 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (relative positioned) DIV id='test' class='selected'",
+      "reason": "style change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/layer-hide-when-needs-layout-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/layer-hide-when-needs-layout-expected.txt
index 7901838..6925e51 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/layer-hide-when-needs-layout-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/layer-hide-when-needs-layout-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -13,6 +15,12 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='target'",
+      "reason": "style change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/layer-visibility-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/layer-visibility-expected.txt
index 7527fcce..0bc8632 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/layer-visibility-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/layer-visibility-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -18,6 +20,12 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='target'",
+      "reason": "style change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/layout-state-only-positioned-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/layout-state-only-positioned-expected.txt
index 1be9e79..da4bc2e8 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/layout-state-only-positioned-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/layout-state-only-positioned-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -15,17 +17,23 @@
           "object": "LayoutBlockFlow (positioned) DIV id='q'",
           "rect": [3, 103, 10, 50],
           "reason": "incremental"
-        },
-        {
-          "object": "LayoutBlockFlow (positioned) DIV",
-          "reason": "scroll"
-        },
-        {
-          "object": "VerticalScrollbar",
-          "reason": "scroll"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (positioned) DIV",
+      "reason": "scroll"
+    },
+    {
+      "object": "VerticalScrollbar",
+      "reason": "scroll"
+    },
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='q'",
+      "reason": "incremental"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/line-flow-with-floats-7-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/line-flow-with-floats-7-expected.txt
deleted file mode 100644
index 62ffede5..0000000
--- a/third_party/WebKit/LayoutTests/fast/repaint/line-flow-with-floats-7-expected.txt
+++ /dev/null
@@ -1,79 +0,0 @@
-{
-  "bounds": [800, 600],
-  "children": [
-    {
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow P",
-          "rect": [8, 386, 418, 54],
-          "reason": "invalidate paint rectangle"
-        },
-        {
-          "object": "LayoutText #text",
-          "rect": [14, 404, 355, 36],
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox ' was in a furious passion, and went\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ''",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ''",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Queen'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox 'a very short time '",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'for the hedgehogs; and in\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'for turns,\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'quarrelling all the while, and fighting'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'stamping'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'the'",
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutInline SPAN id='theQueen'",
-          "reason": "style change"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        }
-      ]
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/margin-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/margin-expected.txt
index 321ec7aa..f3488cf 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/margin-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/margin-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -18,6 +20,12 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='target'",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/mix-blend-mode-separate-stacking-context-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/mix-blend-mode-separate-stacking-context-expected.txt
index 057278b..6921028d 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/mix-blend-mode-separate-stacking-context-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/mix-blend-mode-separate-stacking-context-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -38,6 +40,32 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (floating) DIV id='second'",
+      "reason": "subtree"
+    },
+    {
+      "object": "LayoutBlockFlow (floating) DIV id='first'",
+      "reason": "subtree"
+    },
+    {
+      "object": "LayoutBlockFlow (floating) DIV id='second'",
+      "reason": "subtree"
+    },
+    {
+      "object": "LayoutBlockFlow (floating) DIV id='third'",
+      "reason": "subtree"
+    },
+    {
+      "object": "LayoutBlockFlow (relative positioned) (floating) DIV id='fourth'",
+      "reason": "subtree"
+    },
+    {
+      "object": "LayoutBlockFlow (floating) DIV",
+      "reason": "subtree"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/multicol-as-paint-container-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/multicol-as-paint-container-expected.txt
index d8b98c9e..cea788e 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/multicol-as-paint-container-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/multicol-as-paint-container-expected.txt
@@ -1,12 +1,15 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow DIV id='target'",
           "position": [8, 8],
           "bounds": [630, 180],
           "drawsContent": true,
@@ -21,79 +24,89 @@
               "object": "LayoutText #text",
               "rect": [0, 0, 625, 180],
               "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox 'Lorem ipsum'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox 'adipiscing'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox 'consectetur'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox 'dolor sit amet,'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox 'eget, dapibus'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox 'elit. Fusce'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox 'eu fringilla'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox 'libero,'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox 'non condimentum'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox 'pulvinar, ipsum'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox 'purus. Ut nisl'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox 'quam est eu'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox 'sapien'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox 'suscipit ut leo'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox 'ultrices dolor.'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox 'ultricies arcu,'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox 'varius, metus'",
-              "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/fast/repaint/multicol-relpos-with-abspos-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/multicol-relpos-with-abspos-expected.txt
index a423e3f9..fcbd569e 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/multicol-relpos-with-abspos-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/multicol-relpos-with-abspos-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -13,6 +15,12 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='target'",
+      "reason": "style change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/multicol-repaint-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/multicol-repaint-expected.txt
index ebd9bb38d..da6019b 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/multicol-repaint-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/multicol-repaint-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -15,41 +17,27 @@
           "object": "LayoutText #text",
           "rect": [234, 15, 300, 50],
           "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ''",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'XXXXXX'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox '\u00A0'",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutMultiColumnFlowThread (anonymous)",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "full"
+    },
+    {
+      "object": "InlineTextBox 'XXXXXX'",
+      "reason": "full"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/multicol-with-abspos-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/multicol-with-abspos-expected.txt
index 0c3a5fc..d310f9a 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/multicol-with-abspos-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/multicol-with-abspos-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -15,17 +17,27 @@
           "object": "LayoutText #text",
           "rect": [0, 580, 80, 20],
           "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox 'PASS'",
-          "reason": "style change"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "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/fast/repaint/multicol-with-abspos-in-relpos-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/multicol-with-abspos-in-relpos-expected.txt
index 845e09a..c64124ed 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/multicol-with-abspos-in-relpos-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/multicol-with-abspos-in-relpos-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -15,17 +17,27 @@
           "object": "LayoutText #text",
           "rect": [508, 28, 80, 20],
           "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox 'PASS'",
-          "reason": "style change"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "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/fast/repaint/multicol-with-block-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/multicol-with-block-expected.txt
index bc74159..c4e33c4f 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/multicol-with-block-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/multicol-with-block-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -15,17 +17,27 @@
           "object": "LayoutText #text",
           "rect": [488, 8, 80, 20],
           "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox 'PASS'",
-          "reason": "style change"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "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/fast/repaint/multicol-with-inline-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/multicol-with-inline-expected.txt
index a10953c..a711a77d4 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/multicol-with-inline-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/multicol-with-inline-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -10,17 +12,23 @@
           "object": "LayoutText #text",
           "rect": [488, 8, 80, 20],
           "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox 'PASS'",
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutInline SPAN id='target'",
-          "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/fast/repaint/multicol-with-overflowing-block-rl-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/multicol-with-overflowing-block-rl-expected.txt
index efa67ce..91131e6 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/multicol-with-overflowing-block-rl-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/multicol-with-overflowing-block-rl-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -13,6 +15,12 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV id='elm'",
+      "reason": "style change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/multicol-with-relpos-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/multicol-with-relpos-expected.txt
index f8714312..a70fd94 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/multicol-with-relpos-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/multicol-with-relpos-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -13,6 +15,12 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (relative positioned) DIV id='target'",
+      "reason": "style change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/multicol-with-text-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/multicol-with-text-expected.txt
index 089630a5..c0a3995 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/multicol-with-text-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/multicol-with-text-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -15,41 +17,27 @@
           "object": "LayoutText #text",
           "rect": [488, 8, 80, 20],
           "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'PASS'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutMultiColumnFlowThread (anonymous)",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'PASS'",
+      "reason": "layoutObject insertion"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/multiple-backgrounds-style-change-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/multiple-backgrounds-style-change-expected.txt
index b8a8dcc..f3c4d82 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/multiple-backgrounds-style-change-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/multiple-backgrounds-style-change-expected.txt
@@ -1,12 +1,15 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow DIV id='test' class='composited box changed'",
           "position": [8, 8],
           "bounds": [202, 202],
           "drawsContent": true,
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/negative-text-indent-with-overflow-hidden-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/negative-text-indent-with-overflow-hidden-expected.txt
index 6ef2ab9..d45b46f3 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/negative-text-indent-with-overflow-hidden-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/negative-text-indent-with-overflow-hidden-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -10,13 +12,19 @@
           "object": "LayoutBlockFlow DIV id='target' class='changed'",
           "rect": [550, 8, 200, 50],
           "reason": "style change"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV id='target' class='changed'",
+      "reason": "style change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "style change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/nested-fixed-iframe-scrolled-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/nested-fixed-iframe-scrolled-expected.txt
index 3884957..ad93ee2 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/nested-fixed-iframe-scrolled-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/nested-fixed-iframe-scrolled-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [785, 2016],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [785, 2016],
       "contentsOpaque": true,
       "drawsContent": true,
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/no-caret-repaint-in-non-content-editable-element-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/no-caret-repaint-in-non-content-editable-element-expected.txt
index e9f7954d..10aa3faf 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/no-caret-repaint-in-non-content-editable-element-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/no-caret-repaint-in-non-content-editable-element-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/obscured-background-no-repaint-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/obscured-background-no-repaint-expected.txt
index 58f94752..d560c3eb 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/obscured-background-no-repaint-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/obscured-background-no-repaint-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [785, 672],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [785, 672],
       "contentsOpaque": true,
       "drawsContent": true
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/opacity-change-on-overflow-float-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/opacity-change-on-overflow-float-expected.txt
index 616f625..208387a 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/opacity-change-on-overflow-float-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/opacity-change-on-overflow-float-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -23,6 +25,20 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (floating) DIV class='green'",
+      "reason": "subtree"
+    },
+    {
+      "object": "LayoutBlockFlow (floating) DIV class='red'",
+      "reason": "background obscuration change"
+    },
+    {
+      "object": "LayoutBlockFlow (floating) DIV class='green'",
+      "reason": "subtree"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/outline-add-repaint-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/outline-add-repaint-expected.txt
index c145703..87a3dc0 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/outline-add-repaint-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/outline-add-repaint-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -13,6 +15,12 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV id='test'",
+      "reason": "style change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/outline-change-continuations-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/outline-change-continuations-expected.txt
index 2280a255..84676b4 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/outline-change-continuations-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/outline-change-continuations-expected.txt
@@ -1,32 +1,34 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow (anonymous)",
-          "reason": "forced by layout"
-        },
-        {
-          "object": "LayoutBlockFlow (anonymous)",
-          "reason": "forced by layout"
-        },
-        {
-          "object": "LayoutInline SPAN id='outer'",
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutInline SPAN id='outer'",
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutText #text",
-          "reason": "outline"
-        }
-      ]
+      "drawsContent": true
+    }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (anonymous)",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutInline SPAN id='outer'",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "outline"
+    },
+    {
+      "object": "LayoutBlockFlow (anonymous)",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutInline SPAN id='outer'",
+      "reason": "style change"
     }
   ]
 }
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/outline-change-invalidation-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/outline-change-invalidation-expected.txt
index ba3f646..09a0857 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/outline-change-invalidation-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/outline-change-invalidation-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -10,13 +12,19 @@
           "object": "LayoutBlockFlow A id='link'",
           "rect": [43, 79, 754, 28],
           "reason": "style change"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow A id='link'",
+      "reason": "style change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "style change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/outline-change-offset-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/outline-change-offset-expected.txt
index 995270b..6090e18 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/outline-change-offset-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/outline-change-offset-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -13,6 +15,12 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='target'",
+      "reason": "style change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/outline-change-repaint-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/outline-change-repaint-expected.txt
index c145703..87a3dc0 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/outline-change-repaint-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/outline-change-repaint-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -13,6 +15,12 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV id='test'",
+      "reason": "style change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/outline-child-repaint-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/outline-child-repaint-expected.txt
index 6e46fd60..5304f41 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/outline-child-repaint-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/outline-child-repaint-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -28,6 +30,16 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='container'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV class='outlined'",
+      "reason": "outline"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/outline-clip-change-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/outline-clip-change-expected.txt
index ad63ce20..d7957b84 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/outline-clip-change-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/outline-clip-change-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -15,17 +17,27 @@
           "object": "LayoutText #text",
           "rect": [48, 102, 87, 18],
           "reason": "subtree"
-        },
-        {
-          "object": "InlineTextBox 'Lorem Ipsum'",
-          "reason": "subtree"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "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/fast/repaint/outline-inset-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/outline-inset-expected.txt
index 9cc6eb67..adcbe51 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/outline-inset-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/outline-inset-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -28,6 +30,24 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "outline"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='a'",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "outline"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='b'",
+      "reason": "incremental"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/outline-repaint-glitch-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/outline-repaint-glitch-expected.txt
index 15763f1..c1c9ed7 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/outline-repaint-glitch-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/outline-repaint-glitch-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -28,6 +30,24 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "outline"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='a'",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "outline"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='b'",
+      "reason": "incremental"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/outline-shrinking-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/outline-shrinking-expected.txt
index bf44919..98f60f70 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/outline-shrinking-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/outline-shrinking-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -13,6 +15,12 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV id='t'",
+      "reason": "style change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/overflow-auto-in-overflow-auto-scrolled-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/overflow-auto-in-overflow-auto-scrolled-expected.txt
index 4c316c8..3d6a6ea 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/overflow-auto-in-overflow-auto-scrolled-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/overflow-auto-in-overflow-auto-scrolled-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -25,13 +27,27 @@
           "object": "LayoutBlockFlow DIV id='innerDiv'",
           "rect": [762, 8, 15, 300],
           "reason": "scroll"
-        },
-        {
-          "object": "VerticalScrollbar",
-          "reason": "scroll"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV id='innerDiv'",
+      "reason": "subtree"
+    },
+    {
+      "object": "VerticalScrollbar",
+      "reason": "scroll"
+    },
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "subtree"
+    },
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "subtree"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/overflow-clip-subtree-layout-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/overflow-clip-subtree-layout-expected.txt
index 713fd97..9f11891 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/overflow-clip-subtree-layout-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/overflow-clip-subtree-layout-expected.txt
@@ -1,16 +1,18 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow DIV",
-          "reason": "layoutObject insertion"
-        }
-      ]
+      "drawsContent": true
+    }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "layoutObject insertion"
     }
   ]
 }
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/overflow-delete-line-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/overflow-delete-line-expected.txt
index 15ed2559..283c430f 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/overflow-delete-line-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/overflow-delete-line-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -20,33 +22,23 @@
           "object": "LayoutText #text",
           "rect": [8, 70, 47, 36],
           "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ''",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ''",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ''",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Lorem ipsu'",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV id='dv'",
+      "reason": "invalidate paint rectangle"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "full"
+    },
+    {
+      "object": "InlineTextBox 'Lorem ipsu'",
+      "reason": "full"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/overflow-flipped-writing-mode-block-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/overflow-flipped-writing-mode-block-expected.txt
index 88e50926..cf652a7 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/overflow-flipped-writing-mode-block-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/overflow-flipped-writing-mode-block-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -13,6 +15,12 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV id='target'",
+      "reason": "style change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/overflow-flipped-writing-mode-table-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/overflow-flipped-writing-mode-table-expected.txt
index 88e50926..cf652a7 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/overflow-flipped-writing-mode-table-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/overflow-flipped-writing-mode-table-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -13,6 +15,12 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV id='target'",
+      "reason": "style change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/overflow-hidden-in-overflow-hidden-scrolled-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/overflow-hidden-in-overflow-hidden-scrolled-expected.txt
index 3f4df98..35923a3 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/overflow-hidden-in-overflow-hidden-scrolled-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/overflow-hidden-in-overflow-hidden-scrolled-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -23,6 +25,20 @@
         }
       ]
     }
+  ],
+  "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/fast/repaint/overflow-hide-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/overflow-hide-expected.txt
index e0f8caa0..e5d1d405 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/overflow-hide-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/overflow-hide-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 2016],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 2016],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -18,6 +20,16 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='overflowParent' class='absolute green'",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutBlockFlow (relative positioned) DIV class='relative red'",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/overflow-into-content-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/overflow-into-content-expected.txt
index cfc3a57..9c90e7f 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/overflow-into-content-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/overflow-into-content-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -48,6 +50,32 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV id='target3'",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutBlockFlow (positioned) DIV",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='target1' class='narrow'",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutBlockFlow (positioned) DIV",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='target2' class='short'",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "became invisible"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/overflow-move-after-scroll-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/overflow-move-after-scroll-expected.txt
index 09142e9..8973100 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/overflow-move-after-scroll-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/overflow-move-after-scroll-expected.txt
@@ -1,22 +1,27 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow (positioned) DIV id='scroller' class='scroller'",
           "position": [10, 60],
           "bounds": [700, 400],
           "shouldFlattenTransform": false,
           "drawsContent": true,
           "children": [
             {
+              "name": "Scrolling Layer",
               "bounds": [685, 385],
               "shouldFlattenTransform": false,
               "children": [
                 {
+                  "name": "Scrolling Contents Layer",
                   "bounds": [685, 600],
                   "drawsContent": true,
                   "paintInvalidations": [
@@ -35,13 +40,16 @@
               ]
             },
             {
+              "name": "Overflow Controls Host Layer",
               "bounds": [700, 400],
               "children": [
                 {
+                  "name": "Horizontal Scrollbar Layer",
                   "position": [0, 385],
                   "bounds": [685, 15]
                 },
                 {
+                  "name": "Vertical Scrollbar Layer",
                   "position": [685, 0],
                   "bounds": [15, 385],
                   "paintInvalidations": [
@@ -53,6 +61,7 @@
                   ]
                 },
                 {
+                  "name": "Scroll Corner Layer",
                   "position": [685, 385],
                   "bounds": [15, 15],
                   "drawsContent": true
@@ -63,6 +72,12 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='block'",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/overflow-scroll-after-move-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/overflow-scroll-after-move-expected.txt
index 9cd5087..a1f8d67 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/overflow-scroll-after-move-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/overflow-scroll-after-move-expected.txt
@@ -1,22 +1,27 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow (positioned) DIV id='scroller'",
           "position": [10, 60],
           "bounds": [300, 400],
           "shouldFlattenTransform": false,
           "drawsContent": true,
           "children": [
             {
+              "name": "Scrolling Layer",
               "bounds": [285, 385],
               "shouldFlattenTransform": false,
               "children": [
                 {
+                  "name": "Scrolling Contents Layer",
                   "bounds": [285, 900],
                   "drawsContent": true,
                   "paintInvalidations": [
@@ -35,13 +40,16 @@
               ]
             },
             {
+              "name": "Overflow Controls Host Layer",
               "bounds": [300, 400],
               "children": [
                 {
+                  "name": "Horizontal Scrollbar Layer",
                   "position": [0, 385],
                   "bounds": [285, 15]
                 },
                 {
+                  "name": "Vertical Scrollbar Layer",
                   "position": [285, 0],
                   "bounds": [15, 385],
                   "paintInvalidations": [
@@ -53,6 +61,7 @@
                   ]
                 },
                 {
+                  "name": "Scroll Corner Layer",
                   "position": [285, 385],
                   "bounds": [15, 15],
                   "drawsContent": true
@@ -63,6 +72,12 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='block'",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/overflow-scroll-body-appear-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/overflow-scroll-body-appear-expected.txt
index 6997c923..e74e673 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/overflow-scroll-body-appear-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/overflow-scroll-body-appear-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [2008, 2092],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [2008, 2092],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -45,45 +47,47 @@
           "object": "LayoutView #document",
           "rect": [785, 585, 15, 15],
           "reason": "scroll"
-        },
-        {
-          "object": "InlineTextBox '.'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Bug 36461 - No vertical scrollbar after the CSS class change'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'This is the test for '",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'You should see both vertical and horizontal scrollbars.'",
-          "reason": "full"
-        },
-        {
-          "object": "LayoutView #document",
-          "reason": "scroll"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutView #document",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutView #document",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutBlockFlow BODY",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutBlockFlow P",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutBlockFlow P",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutView #document",
+      "reason": "scroll"
+    },
+    {
+      "object": "LayoutView #document",
+      "reason": "scroll"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/overflow-scroll-delete-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/overflow-scroll-delete-expected.txt
index 3a34ea7..fb12f5e 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/overflow-scroll-delete-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/overflow-scroll-delete-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -15,33 +17,27 @@
           "object": "LayoutText #text",
           "rect": [8, 112, 44, 35],
           "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ''",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ''",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Passed'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Test'",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV id='t'",
+      "reason": "invalidate paint rectangle"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "full"
+    },
+    {
+      "object": "InlineTextBox 'Passed'",
+      "reason": "full"
+    },
+    {
+      "object": "InlineTextBox 'Test'",
+      "reason": "full"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/overflow-scroll-in-overflow-scroll-scrolled-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/overflow-scroll-in-overflow-scroll-scrolled-expected.txt
index 4c316c8..3d6a6ea 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/overflow-scroll-in-overflow-scroll-scrolled-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/overflow-scroll-in-overflow-scroll-scrolled-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -25,13 +27,27 @@
           "object": "LayoutBlockFlow DIV id='innerDiv'",
           "rect": [762, 8, 15, 300],
           "reason": "scroll"
-        },
-        {
-          "object": "VerticalScrollbar",
-          "reason": "scroll"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV id='innerDiv'",
+      "reason": "subtree"
+    },
+    {
+      "object": "VerticalScrollbar",
+      "reason": "scroll"
+    },
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "subtree"
+    },
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "subtree"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/overflow-show-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/overflow-show-expected.txt
index 68e3837..d986ba6 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/overflow-show-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/overflow-show-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 2016],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 2016],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -18,6 +20,16 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='overflowParent' class='absolute green'",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutBlockFlow (relative positioned) DIV class='relative green'",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/overhanging-float-detach-repaint-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/overhanging-float-detach-repaint-expected.txt
index 6ce859d..236a080 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/overhanging-float-detach-repaint-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/overhanging-float-detach-repaint-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -10,13 +12,19 @@
           "object": "LayoutBlockFlow (floating) DIV class='float'",
           "rect": [8, 62, 100, 100],
           "reason": "layoutObject removal"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='floatContainer'",
-          "reason": "layoutObject removal"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (floating) DIV class='float'",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='floatContainer'",
+      "reason": "layoutObject removal"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/padding-border-keeping-border-box-and-content-box-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/padding-border-keeping-border-box-and-content-box-expected.txt
index 0f9c5c5..5e5f0d88 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/padding-border-keeping-border-box-and-content-box-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/padding-border-keeping-border-box-and-content-box-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -13,6 +15,12 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='target'",
+      "reason": "style change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/padding-keeping-content-size-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/padding-keeping-content-size-expected.txt
index 65450935..40b0280 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/padding-keeping-content-size-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/padding-keeping-content-size-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -33,6 +35,20 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='target1' class='outer'",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='target2' class='outer'",
+      "reason": "background obscuration change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV class='inner'",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/padding-keeping-visual-size-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/padding-keeping-visual-size-expected.txt
index a2a5f1c..6c972457a 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/padding-keeping-visual-size-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/padding-keeping-visual-size-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -18,6 +20,16 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='target2' class='outer'",
+      "reason": "background obscuration change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV class='inner'",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/paged-with-overflowing-block-rl-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/paged-with-overflowing-block-rl-expected.txt
index 1d145a16..07a4aa4 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/paged-with-overflowing-block-rl-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/paged-with-overflowing-block-rl-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -13,6 +15,12 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV id='elm'",
+      "reason": "style change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/paint-caret-in-div-with-negative-indent-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/paint-caret-in-div-with-negative-indent-expected.txt
index 2a39b78..3439cf9 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/paint-caret-in-div-with-negative-indent-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/paint-caret-in-div-with-negative-indent-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -13,6 +15,12 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV id='editable'",
+      "reason": "invalidate paint rectangle"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/paint-invalidation-with-opacity-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/paint-invalidation-with-opacity-expected.txt
index 72581a0..2a0ed69 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/paint-invalidation-with-opacity-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/paint-invalidation-with-opacity-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -13,6 +15,12 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV id='target'",
+      "reason": "subtree"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/percent-size-image-resize-container-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/percent-size-image-resize-container-expected.txt
index 7f12086..ff615d5 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/percent-size-image-resize-container-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/percent-size-image-resize-container-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -28,6 +30,16 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (positioned) DIV",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutImage (positioned) IMG",
+      "reason": "forced by layout"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/position-change-keeping-geometry-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/position-change-keeping-geometry-expected.txt
index bb7ecc4f..f9ac4ee 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/position-change-keeping-geometry-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/position-change-keeping-geometry-expected.txt
@@ -1,20 +1,22 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow (positioned) DIV id='target2'",
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutBlockFlow (positioned) DIV id='target3'",
-          "reason": "style change"
-        }
-      ]
+      "drawsContent": true
+    }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='target2'",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='target3'",
+      "reason": "style change"
     }
   ]
 }
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/positioned-great-grandparent-change-location-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/positioned-great-grandparent-change-location-expected.txt
index 08b4a36..ac6e33b 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/positioned-great-grandparent-change-location-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/positioned-great-grandparent-change-location-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -25,29 +27,39 @@
           "object": "LayoutText #text",
           "rect": [100, 100, 41, 18],
           "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'Target'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutBlockFlow (positioned) DIV",
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutBlockFlow (positioned) DIV",
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutBlockFlow (positioned) DIV id='great-grandparent'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='great-grandparent'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow (positioned) DIV",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow (positioned) DIV",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow (positioned) DIV",
+      "reason": "bounds change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox 'Target'",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/positioned-list-offset-change-repaint-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/positioned-list-offset-change-repaint-expected.txt
index d0b0206..b5ee506 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/positioned-list-offset-change-repaint-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/positioned-list-offset-change-repaint-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -15,33 +17,31 @@
           "object": "LayoutImage IMG",
           "rect": [8, 60, 214, 232],
           "reason": "location change"
-        },
-        {
-          "object": "InlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "LayoutListMarker (anonymous)",
-          "reason": "none"
-        },
-        {
-          "object": "LayoutText #text",
-          "reason": "none"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutListItem (positioned) LI",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutListMarker (anonymous)",
+      "reason": "none"
+    },
+    {
+      "object": "LayoutImage IMG",
+      "reason": "location change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "none"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/push-block-with-first-line-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/push-block-with-first-line-expected.txt
index 73d5d3e..fdf3bd3 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/push-block-with-first-line-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/push-block-with-first-line-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -30,17 +32,31 @@
           "object": "LayoutText #text",
           "rect": [8, 8, 140, 20],
           "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'JOCULAR'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV id='spacer'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutBlockFlow DIV class='test'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox 'JOCULAR'",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/reflection-invalidation-after-display-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/reflection-invalidation-after-display-expected.txt
index 5b54b87c..23d918e 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/reflection-invalidation-after-display-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/reflection-invalidation-after-display-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -18,6 +20,16 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='box' class='green box'",
+      "reason": "subtree"
+    },
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='box' class='green box'",
+      "reason": "subtree"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/reflection-invalidation-positioned-child-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/reflection-invalidation-positioned-child-expected.txt
index 7f42334f..f115853 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/reflection-invalidation-positioned-child-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/reflection-invalidation-positioned-child-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -23,6 +25,20 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV id='box'",
+      "reason": "subtree"
+    },
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='positioned'",
+      "reason": "subtree"
+    },
+    {
+      "object": "LayoutReplica (anonymous)",
+      "reason": "subtree"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/reflection-redraw-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/reflection-redraw-expected.txt
index ca1018e..bebe276 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/reflection-redraw-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/reflection-redraw-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -25,73 +27,91 @@
           "object": "LayoutText #text",
           "rect": [304, 377, 128, 156],
           "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox 'The color of this'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox 'The color of this'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox 'The color of this'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox 'The color of this'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox 'green'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox 'green'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox 'green'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox 'green'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox 'reflection should be'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox 'reflection should be'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox 'reflection should be'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox 'reflection should be'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox 'text in the'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox 'text in the'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox 'text in the'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox 'text in the'",
-          "reason": "style change"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutText #text",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox 'The color of this'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox 'text in the'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox 'reflection should be'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox 'green'",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox 'The color of this'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox 'text in the'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox 'reflection should be'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox 'green'",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox 'The color of this'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox 'text in the'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox 'reflection should be'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox 'green'",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox 'The color of this'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox 'text in the'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox 'reflection should be'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox 'green'",
+      "reason": "style change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/reflection-repaint-test-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/reflection-repaint-test-expected.txt
index 8f863b2..5fbf4ba 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/reflection-repaint-test-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/reflection-repaint-test-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -20,21 +22,27 @@
           "object": "LayoutText #text",
           "rect": [23, 51, 71, 109],
           "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ''",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'PASS'",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV id='target'",
+      "reason": "invalidate paint rectangle"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='target'",
+      "reason": "invalidate paint rectangle"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "full"
+    },
+    {
+      "object": "InlineTextBox 'PASS'",
+      "reason": "full"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/rel-positioned-inline-with-overflow-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/rel-positioned-inline-with-overflow-expected.txt
index 5e9290f9..3cf744a 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/rel-positioned-inline-with-overflow-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/rel-positioned-inline-with-overflow-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -13,6 +15,12 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV id='target'",
+      "reason": "style change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/relative-margin-change-repaint-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/relative-margin-change-repaint-expected.txt
index f4614d3..3528b0e 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/relative-margin-change-repaint-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/relative-margin-change-repaint-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -38,6 +40,20 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow BODY",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow (relative positioned) DIV id='container'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow (relative positioned) DIV id='test'",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/relative-positioned-movement-repaint-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/relative-positioned-movement-repaint-expected.txt
index b30ecc3..c911c27 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/relative-positioned-movement-repaint-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/relative-positioned-movement-repaint-expected.txt
@@ -1,12 +1,15 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow (relative positioned) DIV id='block'",
           "position": [68, 10],
           "bounds": [402, 62],
           "drawsContent": true,
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/remove-block-after-layout-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/remove-block-after-layout-expected.txt
index 1d3fdd4..c705d2d 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/remove-block-after-layout-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/remove-block-after-layout-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -15,25 +17,19 @@
           "object": "LayoutText #text",
           "rect": [8, 108, 100, 36],
           "reason": "layoutObject removal"
-        },
-        {
-          "object": "InlineTextBox 'This div should'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'disappear.'",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutText #text",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='target'",
+      "reason": "layoutObject removal"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/remove-inline-block-descendant-of-flex-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/remove-inline-block-descendant-of-flex-expected.txt
index 2d654e9..427cee0 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/remove-inline-block-descendant-of-flex-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/remove-inline-block-descendant-of-flex-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -25,57 +27,39 @@
           "object": "LayoutBlockFlow DIV id='inline-block-2' class='item'",
           "rect": [0, 100, 100, 100],
           "reason": "bounds change"
-        },
-        {
-          "object": "InlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutBR BR",
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutBR BR",
-          "reason": "layoutObject removal"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBR BR",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='inline-block-1' class='item'",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "invalidate paint rectangle"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='inline-block-2' class='item'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBR BR",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/repaint-composited-child-in-scrolled-container-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/repaint-composited-child-in-scrolled-container-expected.txt
index a5c3ab8..48d792ef 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/repaint-composited-child-in-scrolled-container-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/repaint-composited-child-in-scrolled-container-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -10,19 +12,17 @@
           "object": "LayoutBlockFlow (positioned) DIV id='outer'",
           "rect": [8, 293, 285, 15],
           "reason": "scroll"
-        },
-        {
-          "object": "HorizontalScrollbar",
-          "reason": "scroll"
         }
       ],
       "children": [
         {
+          "name": "Ancestor Clipping Layer",
           "position": [8, 8],
           "bounds": [285, 285],
           "shouldFlattenTransform": false,
           "children": [
             {
+              "name": "LayoutBlockFlow (positioned) DIV id='container'",
               "position": [-315, 0],
               "bounds": [600, 600],
               "contentsOpaque": true,
@@ -40,6 +40,16 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "HorizontalScrollbar",
+      "reason": "scroll"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='inner'",
+      "reason": "style change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/repaint-descandant-on-ancestor-layer-move-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/repaint-descandant-on-ancestor-layer-move-expected.txt
index 5b11d8f5..d28c942 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/repaint-descandant-on-ancestor-layer-move-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/repaint-descandant-on-ancestor-layer-move-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -35,25 +37,39 @@
           "object": "LayoutText #text",
           "rect": [28, 38, 275, 18],
           "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'There should only be one copy of this text.'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutText #text",
-          "reason": "bounds change"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='container'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow (relative positioned) DIV",
+      "reason": "bounds change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox 'There should only be one copy of this text.'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/repaint-in-iframe-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/repaint-in-iframe-expected.txt
index 2bf771e..6bc4395 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/repaint-in-iframe-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/repaint-in-iframe-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/repaint-on-style-change-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/repaint-on-style-change-expected.txt
index bd4ccd5..9bc9efacd 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/repaint-on-style-change-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/repaint-on-style-change-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -13,6 +15,12 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='box'",
+      "reason": "style change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/repaint-resized-overflow-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/repaint-resized-overflow-expected.txt
index 150d6f5a..d7bd7f8 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/repaint-resized-overflow-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/repaint-resized-overflow-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -23,6 +25,16 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV id='s'",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='t'",
+      "reason": "incremental"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/repaint-table-row-in-composited-document-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/repaint-table-row-in-composited-document-expected.txt
index 64d2a53..3ab5f5d3 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/repaint-table-row-in-composited-document-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/repaint-table-row-in-composited-document-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -43,6 +45,24 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutTableCell TD id='target'",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutTableRow TR",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutTableCell TD",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutTableCell TD",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/replaced-clipped-positioned-not-wrong-incremental-repainting-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/replaced-clipped-positioned-not-wrong-incremental-repainting-expected.txt
index 3086682..05e1d1f 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/replaced-clipped-positioned-not-wrong-incremental-repainting-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/replaced-clipped-positioned-not-wrong-incremental-repainting-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -15,17 +17,27 @@
           "object": "LayoutImage IMG",
           "rect": [8, 8, 194, 232],
           "reason": "location change"
-        },
-        {
-          "object": "LayoutText #text",
-          "reason": "none"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (relative positioned) (floating) DIV class='imgContainer'",
+      "reason": "location change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "location change"
+    },
+    {
+      "object": "LayoutImage IMG",
+      "reason": "location change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "none"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/requestAnimation-translation-leave-traces-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/requestAnimation-translation-leave-traces-expected.txt
index fa3d37d..e3be962 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/requestAnimation-translation-leave-traces-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/requestAnimation-translation-leave-traces-expected.txt
@@ -2,9 +2,11 @@
 The paint invalidations below should match the transformed element's coordinates.
 Tested locations: 1200,1500
 {
+  "name": "Content Root Layer",
   "bounds": [1600, 585],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [1600, 585],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -41,6 +43,24 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutView #document",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='box'",
+      "reason": "subtree"
+    },
+    {
+      "object": "LayoutView #document",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='box'",
+      "reason": "subtree"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/resize-child-within-overflow-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/resize-child-within-overflow-expected.txt
index 046597fe3..b3323224 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/resize-child-within-overflow-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/resize-child-within-overflow-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 1000],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 1000],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -18,6 +20,16 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (positioned) DIV class='container'",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='child'",
+      "reason": "incremental"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/resize-scrollable-div-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/resize-scrollable-div-expected.txt
index 39b48b9f..ab7b728 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/resize-scrollable-div-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/resize-scrollable-div-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -40,21 +42,31 @@
           "object": "LayoutBlockFlow DIV id='div'",
           "rect": [93, 193, 15, 15],
           "reason": "scroll"
-        },
-        {
-          "object": "HorizontalScrollbar",
-          "reason": "scroll"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='div'",
-          "reason": "scroll"
-        },
-        {
-          "object": "VerticalScrollbar",
-          "reason": "scroll"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV id='div'",
+      "reason": "border box change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='div'",
+      "reason": "scroll"
+    },
+    {
+      "object": "HorizontalScrollbar",
+      "reason": "scroll"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='div'",
+      "reason": "scroll"
+    },
+    {
+      "object": "VerticalScrollbar",
+      "reason": "scroll"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/resize-skewed-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/resize-skewed-expected.txt
index c2418bc..cb240c0 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/resize-skewed-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/resize-skewed-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -13,6 +15,12 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='skewed'",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/resize-with-border-clipped-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/resize-with-border-clipped-expected.txt
index 3e34fca..b83162b 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/resize-with-border-clipped-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/resize-with-border-clipped-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -28,6 +30,12 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV id='target'",
+      "reason": "incremental"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/resize-with-border-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/resize-with-border-expected.txt
index 9a26d1c8..58d38f5 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/resize-with-border-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/resize-with-border-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -18,6 +20,12 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='div'",
+      "reason": "incremental"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/scroll-absolute-layer-with-reflection-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/scroll-absolute-layer-with-reflection-expected.txt
index 29f46ea..682de24c 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/scroll-absolute-layer-with-reflection-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/scroll-absolute-layer-with-reflection-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 2016],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 2016],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -33,6 +35,28 @@
         }
       ]
     }
+  ],
+  "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": "LayoutReplica (anonymous)",
+      "reason": "subtree"
+    },
+    {
+      "object": "LayoutBlockFlow (positioned) DIV class='absolute red'",
+      "reason": "subtree"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/scroll-fixed-layer-with-no-visible-content-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/scroll-fixed-layer-with-no-visible-content-expected.txt
index 88ecef60..354620d 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/scroll-fixed-layer-with-no-visible-content-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/scroll-fixed-layer-with-no-visible-content-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 2016],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 2016],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -18,6 +20,16 @@
         }
       ]
     }
+  ],
+  "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/fast/repaint/scroll-fixed-layer-with-reflection-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/scroll-fixed-layer-with-reflection-expected.txt
index c37d4e5..a78292f 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/scroll-fixed-layer-with-reflection-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/scroll-fixed-layer-with-reflection-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 2016],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 2016],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -28,6 +30,24 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='moveMe' class='fixed clipped'",
+      "reason": "subtree"
+    },
+    {
+      "object": "LayoutBlockFlow (positioned) DIV class='absolute green reflected'",
+      "reason": "subtree"
+    },
+    {
+      "object": "LayoutReplica (anonymous)",
+      "reason": "subtree"
+    },
+    {
+      "object": "LayoutBlockFlow (positioned) DIV class='absolute red'",
+      "reason": "subtree"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/scroll-fixed-layer-with-transformed-parent-layer-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/scroll-fixed-layer-with-transformed-parent-layer-expected.txt
index e285694..44027a7 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/scroll-fixed-layer-with-transformed-parent-layer-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/scroll-fixed-layer-with-transformed-parent-layer-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 2016],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 2016],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -23,6 +25,20 @@
         }
       ]
     }
+  ],
+  "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/fast/repaint/scroll-fixed-reflected-layer-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/scroll-fixed-reflected-layer-expected.txt
index b2fe72c..83381e3bf 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/scroll-fixed-reflected-layer-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/scroll-fixed-reflected-layer-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 2016],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 2016],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -13,6 +15,12 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='hideMe' class='absolute red'",
+      "reason": "subtree"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/scroll-in-clipped-layer-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/scroll-in-clipped-layer-expected.txt
index 710733f..43d3b76 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/scroll-in-clipped-layer-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/scroll-in-clipped-layer-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 2016],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 2016],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -23,6 +25,20 @@
         }
       ]
     }
+  ],
+  "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/fast/repaint/scroll-in-fixed-layer-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/scroll-in-fixed-layer-expected.txt
index e1bb6ef..e2887f70 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/scroll-in-fixed-layer-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/scroll-in-fixed-layer-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 2016],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 2016],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -23,6 +25,20 @@
         }
       ]
     }
+  ],
+  "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/fast/repaint/scroll-in-transformed-layer-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/scroll-in-transformed-layer-expected.txt
index 4cc4549..d7ad286 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/scroll-in-transformed-layer-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/scroll-in-transformed-layer-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 2016],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 2016],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -23,6 +25,20 @@
         }
       ]
     }
+  ],
+  "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"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/scroll-inside-table-cell-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/scroll-inside-table-cell-expected.txt
index e064d0b..7e41025 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/scroll-inside-table-cell-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/scroll-inside-table-cell-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -25,13 +27,27 @@
           "object": "LayoutTableCell (relative positioned) TD id='cellToScroll' class='relative'",
           "rect": [314, 564, 435, 15],
           "reason": "scroll"
-        },
-        {
-          "object": "HorizontalScrollbar",
-          "reason": "scroll"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutTableCell (relative positioned) TD id='cellToScroll' class='relative'",
+      "reason": "subtree"
+    },
+    {
+      "object": "HorizontalScrollbar",
+      "reason": "scroll"
+    },
+    {
+      "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/fast/repaint/scroll-relative-table-inside-table-cell-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/scroll-relative-table-inside-table-cell-expected.txt
index 94db395..beadde3 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/scroll-relative-table-inside-table-cell-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/scroll-relative-table-inside-table-cell-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [1566, 1781],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [1566, 1781],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -25,13 +27,27 @@
           "object": "LayoutTableCell (relative positioned) TD id='cellToScroll' class='relative'",
           "rect": [1114, 1764, 435, 15],
           "reason": "scroll"
-        },
-        {
-          "object": "HorizontalScrollbar",
-          "reason": "scroll"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutTableCell (relative positioned) TD id='cellToScroll' class='relative'",
+      "reason": "subtree"
+    },
+    {
+      "object": "HorizontalScrollbar",
+      "reason": "scroll"
+    },
+    {
+      "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/fast/repaint/scroll-stacking-context-backface-visiblity-leaves-traces-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/scroll-stacking-context-backface-visiblity-leaves-traces-expected.txt
index dc5c611a..eda3133d 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/scroll-stacking-context-backface-visiblity-leaves-traces-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/scroll-stacking-context-backface-visiblity-leaves-traces-expected.txt
@@ -1,12 +1,15 @@
 {
+  "name": "Content Root Layer",
   "bounds": [785, 5054],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [785, 5054],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow (relative positioned) HEADER",
           "position": [8, 26],
           "bounds": [769, 1974],
           "drawsContent": true,
@@ -36,6 +39,16 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='searchbar'",
+      "reason": "subtree"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='recentlink'",
+      "reason": "subtree"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/scroll-with-transformed-parent-layer-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/scroll-with-transformed-parent-layer-expected.txt
index fc660d7..5deb2b1e 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/scroll-with-transformed-parent-layer-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/scroll-with-transformed-parent-layer-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 2016],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 2016],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -23,6 +25,20 @@
         }
       ]
     }
+  ],
+  "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/fast/repaint/scrollbar-damage-and-full-viewport-repaint-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/scrollbar-damage-and-full-viewport-repaint-expected.txt
index 4873a11..9c7a8d3 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/scrollbar-damage-and-full-viewport-repaint-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/scrollbar-damage-and-full-viewport-repaint-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [1000, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [1000, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -15,13 +17,19 @@
           "object": "LayoutBlockFlow DIV id='child'",
           "rect": [101, 51, 85, 185],
           "reason": "incremental"
-        },
-        {
-          "object": "HorizontalScrollbar",
-          "reason": "scroll"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "HorizontalScrollbar",
+      "reason": "scroll"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='child'",
+      "reason": "incremental"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/scrollbar-invalidation-on-resize-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/scrollbar-invalidation-on-resize-expected.txt
index 6e51185..3f3d27f2e 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/scrollbar-invalidation-on-resize-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/scrollbar-invalidation-on-resize-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -40,17 +42,27 @@
           "object": "LayoutBlockFlow (positioned) DIV id='scrollable'",
           "rect": [93, 135, 15, 15],
           "reason": "scroll"
-        },
-        {
-          "object": "HorizontalScrollbar",
-          "reason": "scroll"
-        },
-        {
-          "object": "VerticalScrollbar",
-          "reason": "scroll"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='scrollable'",
+      "reason": "border box change"
+    },
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='scrollable'",
+      "reason": "scroll"
+    },
+    {
+      "object": "HorizontalScrollbar",
+      "reason": "scroll"
+    },
+    {
+      "object": "VerticalScrollbar",
+      "reason": "scroll"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/scrollbar-invalidation-on-resize-with-border-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/scrollbar-invalidation-on-resize-with-border-expected.txt
index 685f04808..8ed0b41 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/scrollbar-invalidation-on-resize-with-border-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/scrollbar-invalidation-on-resize-with-border-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -40,17 +42,27 @@
           "object": "LayoutBlockFlow (positioned) DIV id='scrollable'",
           "rect": [103, 145, 15, 15],
           "reason": "scroll"
-        },
-        {
-          "object": "HorizontalScrollbar",
-          "reason": "scroll"
-        },
-        {
-          "object": "VerticalScrollbar",
-          "reason": "scroll"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='scrollable'",
+      "reason": "border box change"
+    },
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='scrollable'",
+      "reason": "scroll"
+    },
+    {
+      "object": "HorizontalScrollbar",
+      "reason": "scroll"
+    },
+    {
+      "object": "VerticalScrollbar",
+      "reason": "scroll"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/scrollbar-parts-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/scrollbar-parts-expected.txt
index 01a5efb..b1c8282 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/scrollbar-parts-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/scrollbar-parts-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -15,17 +17,19 @@
           "object": "LayoutBlockFlow DIV",
           "rect": [93, 8, 15, 85],
           "reason": "scroll"
-        },
-        {
-          "object": "HorizontalScrollbar",
-          "reason": "scroll"
-        },
-        {
-          "object": "VerticalScrollbar",
-          "reason": "scroll"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "HorizontalScrollbar",
+      "reason": "scroll"
+    },
+    {
+      "object": "VerticalScrollbar",
+      "reason": "scroll"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/scrolled-iframe-scrollbar-change-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/scrolled-iframe-scrollbar-change-expected.txt
index 8b13789..57d46c4 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/scrolled-iframe-scrollbar-change-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/scrolled-iframe-scrollbar-change-expected.txt
@@ -1 +1,37 @@
+{
+  "objectPaintInvalidations": [
+    {
+      "object": "VerticalScrollbar",
+      "reason": "scroll"
+    },
+    {
+      "object": "LayoutView #document",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutView #document",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutBlockFlow HTML",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutBlockFlow BODY class='noScroll'",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='container'",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='overlay'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutView #document",
+      "reason": "scroll"
+    }
+  ]
+}
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/selection-change-in-iframe-with-relative-parent-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/selection-change-in-iframe-with-relative-parent-expected.txt
index 92af3416..bcf23c6 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/selection-change-in-iframe-with-relative-parent-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/selection-change-in-iframe-with-relative-parent-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -45,86 +47,6 @@
           "object": "LayoutBR BR",
           "rect": [18, 208, 10, 10],
           "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox 'Bar'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox 'Bazz'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox 'Foo'",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutBR BR",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutBR BR",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutBR BR",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutBR BR",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutBR BR",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutBlockFlow BODY",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutBlockFlow HTML",
-          "reason": "selection"
         }
       ]
     }
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/selection-clear-after-move-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/selection-clear-after-move-expected.txt
index ee60b170..29cf5ff 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/selection-clear-after-move-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/selection-clear-after-move-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -13,6 +15,12 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutImage IMG",
+      "reason": "selection"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/set-text-content-same-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/set-text-content-same-expected.txt
index e9f7954d..10aa3faf 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/set-text-content-same-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/set-text-content-same-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/shift-relative-positioned-container-with-image-addition-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/shift-relative-positioned-container-with-image-addition-expected.txt
index 4c516be1..6b11f5a 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/shift-relative-positioned-container-with-image-addition-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/shift-relative-positioned-container-with-image-addition-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [785, 829],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [785, 829],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -70,25 +72,43 @@
           "object": "LayoutImage IMG",
           "rect": [58, 136, 489, 537],
           "reason": "bounds change"
-        },
-        {
-          "object": "LayoutText #text",
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutView #document",
-          "reason": "scroll"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "VerticalScrollbar",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutView #document",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutBlockFlow HTML",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutIFrame IFRAME id='iframe'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutBlockFlow (relative positioned) DIV class='relative'",
+      "reason": "bounds change"
+    },
+    {
+      "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": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/shift-relative-positioned-container-with-image-removal-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/shift-relative-positioned-container-with-image-removal-expected.txt
index 669cced..7b7fb06 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/shift-relative-positioned-container-with-image-removal-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/shift-relative-positioned-container-with-image-removal-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [785, 735],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [785, 735],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -55,29 +57,51 @@
           "object": "LayoutImage IMG",
           "rect": [58, 136, 489, 537],
           "reason": "bounds change"
-        },
-        {
-          "object": "InlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "LayoutText #text",
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutText #text",
-          "reason": "layoutObject removal"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "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 HTML",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutBlockFlow (relative positioned) DIV class='relative'",
+      "reason": "bounds change"
+    },
+    {
+      "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": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/stacking-context-lost-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/stacking-context-lost-expected.txt
index 41352d0..a208f96 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/stacking-context-lost-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/stacking-context-lost-expected.txt
@@ -1,18 +1,15 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow (relative positioned) DIV id='inner'",
-          "reason": "layoutObject removal"
-        }
-      ],
       "children": [
         {
+          "name": "LayoutBlockFlow (relative positioned) DIV id='outer'",
           "position": [278, 278],
           "bounds": [100, 100],
           "contentsOpaque": true,
@@ -39,6 +36,24 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (relative positioned) DIV id='outer'",
+      "reason": "subtree"
+    },
+    {
+      "object": "LayoutBlockFlow (relative positioned) DIV id='inner'",
+      "reason": "subtree"
+    },
+    {
+      "object": "LayoutBlockFlow (relative positioned) DIV id='inner'",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutBlockFlow (relative positioned) DIV id='outer'",
+      "reason": "became visible"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/static-to-positioned-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/static-to-positioned-expected.txt
index ba87f75..81431c9 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/static-to-positioned-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/static-to-positioned-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -28,6 +30,16 @@
         }
       ]
     }
+  ],
+  "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/fast/repaint/subtree-layoutstate-transform-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/subtree-layoutstate-transform-expected.txt
index 9dbc644..c1388fad 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/subtree-layoutstate-transform-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/subtree-layoutstate-transform-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -23,6 +25,16 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV class='layoutroot'",
+      "reason": "background obscuration change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='target'",
+      "reason": "incremental"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/subtree-root-clip-2-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/subtree-root-clip-2-expected.txt
index 6b8031b..3bc18e0 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/subtree-root-clip-2-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/subtree-root-clip-2-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -18,6 +20,16 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (floating) DIV",
+      "reason": "background obscuration change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='target'",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/subtree-root-clip-3-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/subtree-root-clip-3-expected.txt
index 214c38d..e169c95 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/subtree-root-clip-3-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/subtree-root-clip-3-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -18,6 +20,16 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "background obscuration change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='target'",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/subtree-root-clip-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/subtree-root-clip-expected.txt
index ce1be2e..3b9e163 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/subtree-root-clip-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/subtree-root-clip-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -18,6 +20,16 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (floating) DIV",
+      "reason": "background obscuration change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='inner'",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/table-cell-collapsed-border-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/table-cell-collapsed-border-expected.txt
index 6c685f39..bfb18830 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/table-cell-collapsed-border-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/table-cell-collapsed-border-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -20,53 +22,67 @@
           "object": "LayoutTableCell TD id='t2'",
           "rect": [3, 260, 118, 110],
           "reason": "style change"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "reason": "full"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "reason": "full"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "reason": "full"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "reason": "full"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "reason": "full"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "reason": "full"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "reason": "full"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "reason": "full"
-        },
-        {
-          "object": "LayoutTableCell TD id='t1'",
-          "reason": "full"
-        },
-        {
-          "object": "LayoutTableCell TD id='t2'",
-          "reason": "full"
-        },
-        {
-          "object": "LayoutTableCell TD id='t3'",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutTableCell TD",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutTableCell TD id='t1'",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutTableCell TD",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutTableCell TD",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutTableCell TD",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutTableCell TD id='t2'",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutTableCell TD",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutTableCell TD id='t3'",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutTableCell TD",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutTableCell TD",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutTableCell TD",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutTableCell TD id='t1'",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutTableCell TD id='t2'",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutTableCell TD id='t3'",
+      "reason": "style change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/table-cell-move-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/table-cell-move-expected.txt
index 7c8bcd84..2b6b756f 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/table-cell-move-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/table-cell-move-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -50,21 +52,47 @@
           "object": "LayoutTableCell TD",
           "rect": [8, 140, 60, 60],
           "reason": "became visible"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutTableCell TD id='s'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutTableCell TD id='t'",
-          "reason": "became visible"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutTableCell TD",
+      "reason": "became visible"
+    },
+    {
+      "object": "LayoutTableCell TD id='t'",
+      "reason": "became visible"
+    },
+    {
+      "object": "LayoutTableRow TR",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutTableCell TD",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutTableCell TD",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutTableRow TR",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutTableCell TD",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutTableCell TD id='s'",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/table-cell-overflow-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/table-cell-overflow-expected.txt
index e093e494..649799d 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/table-cell-overflow-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/table-cell-overflow-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -13,6 +15,12 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV id='target'",
+      "reason": "style change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/table-col-background-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/table-col-background-expected.txt
index 394cc8dc..8478752 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/table-col-background-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/table-col-background-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -10,13 +12,19 @@
           "object": "LayoutTableCol COL id='col'",
           "rect": [8, 108, 106, 104],
           "reason": "style change"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutTableCell TD",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutTableCol COL id='col'",
+      "reason": "style change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/table-col-background-offset-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/table-col-background-offset-expected.txt
index b0d385fd..f95c90ef 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/table-col-background-offset-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/table-col-background-offset-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -10,13 +12,19 @@
           "object": "LayoutTableCol COL id='col'",
           "rect": [8, 108, 210, 104],
           "reason": "style change"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutTableCell TD",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutTableCol COL id='col'",
+      "reason": "style change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/table-extra-bottom-grow-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/table-extra-bottom-grow-expected.txt
index e9f7954d..10aa3faf 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/table-extra-bottom-grow-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/table-extra-bottom-grow-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/table-outer-border-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/table-outer-border-expected.txt
index 1ea6ff3e..d66c2f3 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/table-outer-border-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/table-outer-border-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -65,17 +67,67 @@
           "object": "LayoutTableRow TR",
           "rect": [15, 15, 117, 67],
           "reason": "layoutObject removal"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "reason": "full"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutTableCell TD",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutTableRow TR",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutTableCell TD",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutTableRow TR",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutTableSection TBODY",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutTable TABLE id='table'",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutTableCell TD",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutTableCell TD",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutTable TABLE id='table' class='green'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutTableSection TBODY",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutTableRow TR",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutTableCell TD",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutTableRow TR",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutTableCell TD",
+      "reason": "layoutObject insertion"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/table-overflow-auto-in-overflow-auto-scrolled-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/table-overflow-auto-in-overflow-auto-scrolled-expected.txt
index c2d11df..e229acd 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/table-overflow-auto-in-overflow-auto-scrolled-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/table-overflow-auto-in-overflow-auto-scrolled-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -45,13 +47,43 @@
           "object": "LayoutBlockFlow DIV id='innerDiv'",
           "rect": [762, 8, 15, 300],
           "reason": "scroll"
-        },
-        {
-          "object": "VerticalScrollbar",
-          "reason": "scroll"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV id='innerDiv'",
+      "reason": "subtree"
+    },
+    {
+      "object": "VerticalScrollbar",
+      "reason": "scroll"
+    },
+    {
+      "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/fast/repaint/table-overflow-scroll-in-overflow-scroll-scrolled-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/table-overflow-scroll-in-overflow-scroll-scrolled-expected.txt
index c2d11df..e229acd 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/table-overflow-scroll-in-overflow-scroll-scrolled-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/table-overflow-scroll-in-overflow-scroll-scrolled-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -45,13 +47,43 @@
           "object": "LayoutBlockFlow DIV id='innerDiv'",
           "rect": [762, 8, 15, 300],
           "reason": "scroll"
-        },
-        {
-          "object": "VerticalScrollbar",
-          "reason": "scroll"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV id='innerDiv'",
+      "reason": "subtree"
+    },
+    {
+      "object": "VerticalScrollbar",
+      "reason": "scroll"
+    },
+    {
+      "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/fast/repaint/table-row-bg-change-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/table-row-bg-change-expected.txt
index d964cbf..1107e94a 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/table-row-bg-change-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/table-row-bg-change-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -10,21 +12,27 @@
           "object": "LayoutTableRow TR id='first'",
           "rect": [8, 10, 200, 97],
           "reason": "style change"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "reason": "full"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "reason": "full"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutTableCell TD",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutTableCell TD",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutTableCell TD",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutTableRow TR id='first'",
+      "reason": "style change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/table-row-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/table-row-expected.txt
index 944957d..06d96c8d 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/table-row-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/table-row-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -15,13 +17,23 @@
           "object": "LayoutTableCell TD",
           "rect": [10, 10, 102, 100],
           "reason": "forced by layout"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutTableCell TD",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutTableRow TR id='target' class='green'",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutTableCell TD",
+      "reason": "forced by layout"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/table-section-overflow-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/table-section-overflow-expected.txt
index 6755727..b2391b62 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/table-section-overflow-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/table-section-overflow-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -65,13 +67,39 @@
           "object": "LayoutTableSection TBODY",
           "rect": [58, 8, 50, 100],
           "reason": "bounds change"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='spacer'",
-          "reason": "became visible"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV id='spacer'",
+      "reason": "became visible"
+    },
+    {
+      "object": "LayoutTable TABLE",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutTableSection TBODY",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutTableRow TR",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutTableCell TD",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/table-section-repaint-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/table-section-repaint-expected.txt
index 3a9cd82..cb8aa53 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/table-section-repaint-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/table-section-repaint-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -243,6 +245,112 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow CAPTION id='caption1' class='blue half'",
+      "reason": "became invisible"
+    },
+    {
+      "object": "LayoutTableSection TBODY",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutTableRow TR",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutTableCell TD class='red half'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutTableRow TR",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutTableCell TD class='green half'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutTableCell TD",
+      "reason": "became invisible"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='top' class='blue half'",
+      "reason": "became invisible"
+    },
+    {
+      "object": "LayoutTableSection TBODY",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutTableRow TR",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutTableCell TD class='red half'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutTableRow TR",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutTableCell TD class='green half'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow CAPTION id='caption2' class='zero'",
+      "reason": "became visible"
+    },
+    {
+      "object": "LayoutTableSection TBODY",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutTableRow TR",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutTableCell TD class='green half'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutTableRow TR",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutTableCell TD class='red half'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutTable TABLE",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='innerDiv'",
+      "reason": "became visible"
+    },
+    {
+      "object": "LayoutTableSection TBODY",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutTableRow TR",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutTableCell TD class='half'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutTableRow TR",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutTableCell TD class='half'",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/table-two-pass-layout-overpaint-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/table-two-pass-layout-overpaint-expected.txt
index 6ea998e..afcbb7d 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/table-two-pass-layout-overpaint-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/table-two-pass-layout-overpaint-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -13,6 +15,12 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV id='target'",
+      "reason": "incremental"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/table-with-padding-row-invalidation-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/table-with-padding-row-invalidation-expected.txt
index d4885f8..15505741 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/table-with-padding-row-invalidation-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/table-with-padding-row-invalidation-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -10,13 +12,19 @@
           "object": "LayoutTableRow TR",
           "rect": [0, 0, 260, 50],
           "reason": "style change"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutTableCell TD",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutTableRow TR",
+      "reason": "style change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/text-in-relative-positioned-inline-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/text-in-relative-positioned-inline-expected.txt
index a3a80634..2df26eb 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/text-in-relative-positioned-inline-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/text-in-relative-positioned-inline-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -20,21 +22,23 @@
           "object": "LayoutText #text",
           "rect": [8, 8, 200, 100],
           "reason": "layoutObject removal"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'ab'",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutText #text",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutInline (relative positioned) SPAN id='target'",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "invalidate paint rectangle"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/textarea-appearance-none-resize-handle-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/textarea-appearance-none-resize-handle-expected.txt
index a5da695..944aac8 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/textarea-appearance-none-resize-handle-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/textarea-appearance-none-resize-handle-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -23,6 +25,12 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutTextControl (positioned) TEXTAREA id='textarea'",
+      "reason": "border box change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/textarea-resize-property-change-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/textarea-resize-property-change-expected.txt
index 974894f7..f3e47cf 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/textarea-resize-property-change-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/textarea-resize-property-change-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -18,6 +20,12 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutTextControl (positioned) TEXTAREA id='textarea'",
+      "reason": "style change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/textarea-set-disabled-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/textarea-set-disabled-expected.txt
index 293fdbdb..78342c91 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/textarea-set-disabled-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/textarea-set-disabled-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -18,6 +20,16 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutTextControl TEXTAREA",
+      "reason": "subtree"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='inner-editor'",
+      "reason": "subtree"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/trailing-floats-root-line-box-overflow-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/trailing-floats-root-line-box-overflow-expected.txt
index 614fee0..3fa39fffa 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/trailing-floats-root-line-box-overflow-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/trailing-floats-root-line-box-overflow-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -13,6 +15,12 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='target'",
+      "reason": "layoutObject removal"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/transform-absolute-child-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/transform-absolute-child-expected.txt
index 5f903f0..e31fb11 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/transform-absolute-child-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/transform-absolute-child-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -23,6 +25,16 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (relative positioned) DIV id='box' class='rotated'",
+      "reason": "subtree"
+    },
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='child'",
+      "reason": "subtree"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/transform-absolute-in-positioned-container-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/transform-absolute-in-positioned-container-expected.txt
index c388169..ce58ed70 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/transform-absolute-in-positioned-container-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/transform-absolute-in-positioned-container-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [802, 585],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [802, 585],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -13,6 +15,12 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (relative positioned) DIV id='box' class='rotated'",
+      "reason": "subtree"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/transform-disable-layoutstate-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/transform-disable-layoutstate-expected.txt
index 20b8ff91..b8cb989 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/transform-disable-layoutstate-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/transform-disable-layoutstate-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -28,6 +30,20 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='target'",
+      "reason": "incremental"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/transform-inline-layered-child-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/transform-inline-layered-child-expected.txt
index 8206ea2..f8d9ab9 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/transform-inline-layered-child-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/transform-inline-layered-child-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -35,85 +37,103 @@
           "object": "LayoutText #text",
           "rect": [147, 85, 1, 1],
           "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": "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": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "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"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/transform-relative-position-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/transform-relative-position-expected.txt
index 83d7aa9..2be386f 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/transform-relative-position-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/transform-relative-position-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -13,6 +15,12 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (relative positioned) DIV id='box' class='rotated'",
+      "reason": "subtree"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/transform-repaint-descendants-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/transform-repaint-descendants-expected.txt
index d387a85..3a95fa5 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/transform-repaint-descendants-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/transform-repaint-descendants-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -23,6 +25,16 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (relative positioned) DIV id='box'",
+      "reason": "subtree"
+    },
+    {
+      "object": "LayoutBlockFlow (positioned) DIV",
+      "reason": "subtree"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/transform-replaced-shadows-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/transform-replaced-shadows-expected.txt
index 6b4980d8c..6edfb4b 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/transform-replaced-shadows-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/transform-replaced-shadows-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -13,6 +15,12 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutImage IMG id='box' class='smaller'",
+      "reason": "subtree"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/transform-rotate-and-remove-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/transform-rotate-and-remove-expected.txt
index 6ed4f07..5a849ea8 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/transform-rotate-and-remove-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/transform-rotate-and-remove-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -18,6 +20,16 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV id='rel'",
+      "reason": "subtree"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='rel'",
+      "reason": "subtree"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/transform-translate-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/transform-translate-expected.txt
index 5afcbae..de0f34cf 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/transform-translate-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/transform-translate-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -18,6 +20,12 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV id='target'",
+      "reason": "subtree"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/vertical-align2-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/vertical-align2-expected.txt
index dd0d3b8..3ac949f 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/vertical-align2-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/vertical-align2-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -25,29 +27,27 @@
           "object": "LayoutBlockFlow DIV id='target'",
           "rect": [200, 100, 100, 100],
           "reason": "bounds change"
-        },
-        {
-          "object": "InlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow BODY",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutBlockFlow BODY",
+      "reason": "invalidate paint rectangle"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='target'",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/vertical-overflow-child-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/vertical-overflow-child-expected.txt
index 73d0fb4..2f34356 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/vertical-overflow-child-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/vertical-overflow-child-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -13,6 +15,12 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV class='target'",
+      "reason": "style change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/vertical-overflow-parent-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/vertical-overflow-parent-expected.txt
index 999c66a..7333443 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/vertical-overflow-parent-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/vertical-overflow-parent-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -13,6 +15,12 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV class='target'",
+      "reason": "style change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/vertical-overflow-same-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/vertical-overflow-same-expected.txt
index 2505b50..7e2fdbd9 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/vertical-overflow-same-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/vertical-overflow-same-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -13,6 +15,12 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV class='target'",
+      "reason": "style change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/vertical-rl-as-paint-container-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/vertical-rl-as-paint-container-expected.txt
index ca424247..03ac3e2 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/vertical-rl-as-paint-container-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/vertical-rl-as-paint-container-expected.txt
@@ -1,12 +1,15 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow DIV id='target'",
           "position": [8, 8],
           "bounds": [600, 400],
           "drawsContent": true,
@@ -16,27 +19,33 @@
               "object": "LayoutText #text",
               "rect": [520, 0, 80, 340],
               "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox 'Lorem ipsum dolor'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox 'adipiscing elit.'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox 'consectetur'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox 'sit amet,'",
-              "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/fast/repaint/video-mute-repaint-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/video-mute-repaint-expected.txt
index d85462a..84099f2 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/video-mute-repaint-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/video-mute-repaint-expected.txt
@@ -1,24 +1,30 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutVideo VIDEO id='v'",
           "position": [8, 8],
           "bounds": [700, 525]
         },
         {
+          "name": "Squashing Containment Layer",
           "shouldFlattenTransform": false,
           "children": [
             {
+              "name": "LayoutFlexibleBox (relative positioned) DIV",
               "position": [8, 8],
               "bounds": [700, 525],
               "drawsContent": true
             },
             {
+              "name": "Squashing Layer (first squashed layer: LayoutFlexibleBox (relative positioned) DIV)",
               "position": [8, 8],
               "bounds": [700, 525],
               "drawsContent": true,
@@ -54,6 +60,24 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutButton INPUT",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutSlider INPUT",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutFlexibleBox DIV",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='thumb'",
+      "reason": "full"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/video-unmute-repaint-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/video-unmute-repaint-expected.txt
index 439d2d3..9880e487 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/video-unmute-repaint-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/video-unmute-repaint-expected.txt
@@ -1,24 +1,30 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutVideo VIDEO id='v'",
           "position": [8, 8],
           "bounds": [700, 525]
         },
         {
+          "name": "Squashing Containment Layer",
           "shouldFlattenTransform": false,
           "children": [
             {
+              "name": "LayoutFlexibleBox (relative positioned) DIV",
               "position": [8, 8],
               "bounds": [700, 525],
               "drawsContent": true
             },
             {
+              "name": "Squashing Layer (first squashed layer: LayoutFlexibleBox (relative positioned) DIV)",
               "position": [8, 8],
               "bounds": [700, 525],
               "drawsContent": true,
@@ -54,6 +60,24 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutButton INPUT",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutSlider INPUT",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutFlexibleBox DIV",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='thumb'",
+      "reason": "full"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/view-background-from-body-2-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/view-background-from-body-2-expected.txt
index 39348aa..4eaff66 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/view-background-from-body-2-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/view-background-from-body-2-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -19,6 +21,16 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutView #document",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutBlockFlow BODY",
+      "reason": "layoutObject insertion"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/window-resize-background-image-fixed-centered-composited-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/window-resize-background-image-fixed-centered-composited-expected.txt
deleted file mode 100644
index 1be09d350..0000000
--- a/third_party/WebKit/LayoutTests/fast/repaint/window-resize-background-image-fixed-centered-composited-expected.txt
+++ /dev/null
@@ -1,108 +0,0 @@
-{
-  "bounds": [600, 250],
-  "children": [
-    {
-      "bounds": [600, 250],
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutView #document",
-          "rect": [0, 250, 600, 250],
-          "reason": "incremental"
-        },
-        {
-          "object": "LayoutBlockFlow HTML",
-          "rect": [0, 0, 600, 8],
-          "reason": "forced by layout"
-        }
-      ]
-    }
-  ]
-}
-{
-  "bounds": [400, 250],
-  "children": [
-    {
-      "bounds": [400, 250],
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow HTML",
-          "rect": [0, 0, 600, 8],
-          "reason": "forced by layout"
-        },
-        {
-          "object": "LayoutView #document",
-          "rect": [0, 0, 400, 250],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutView #document",
-          "rect": [400, 0, 200, 250],
-          "reason": "incremental"
-        },
-        {
-          "object": "LayoutBlockFlow BODY",
-          "reason": "became visible"
-        }
-      ]
-    }
-  ]
-}
-{
-  "bounds": [400, 600],
-  "children": [
-    {
-      "bounds": [400, 600],
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutView #document",
-          "rect": [0, 0, 400, 600],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutView #document",
-          "rect": [0, 250, 400, 350],
-          "reason": "incremental"
-        },
-        {
-          "object": "LayoutBlockFlow HTML",
-          "rect": [0, 0, 400, 8],
-          "reason": "forced by layout"
-        }
-      ]
-    }
-  ]
-}
-{
-  "bounds": [800, 600],
-  "children": [
-    {
-      "bounds": [800, 600],
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutView #document",
-          "rect": [0, 0, 800, 600],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutBlockFlow HTML",
-          "rect": [0, 0, 800, 8],
-          "reason": "forced by layout"
-        },
-        {
-          "object": "LayoutView #document",
-          "rect": [400, 0, 400, 600],
-          "reason": "incremental"
-        },
-        {
-          "object": "LayoutBlockFlow BODY",
-          "reason": "became visible"
-        }
-      ]
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/window-resize-background-image-fixed-centered-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/window-resize-background-image-fixed-centered-expected.txt
deleted file mode 100644
index 6424a0a..0000000
--- a/third_party/WebKit/LayoutTests/fast/repaint/window-resize-background-image-fixed-centered-expected.txt
+++ /dev/null
@@ -1,117 +0,0 @@
-{
-  "bounds": [600, 250],
-  "children": [
-    {
-      "bounds": [600, 250],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutView #document",
-          "rect": [0, 250, 600, 250],
-          "reason": "incremental"
-        },
-        {
-          "object": "LayoutView #document",
-          "rect": [0, 0, 600, 250],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutBlockFlow HTML",
-          "rect": [0, 0, 600, 8],
-          "reason": "forced by layout"
-        }
-      ]
-    }
-  ]
-}
-{
-  "bounds": [400, 250],
-  "children": [
-    {
-      "bounds": [400, 250],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow HTML",
-          "rect": [0, 0, 600, 8],
-          "reason": "forced by layout"
-        },
-        {
-          "object": "LayoutView #document",
-          "rect": [0, 0, 400, 250],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutView #document",
-          "rect": [400, 0, 200, 250],
-          "reason": "incremental"
-        },
-        {
-          "object": "LayoutBlockFlow BODY",
-          "reason": "became visible"
-        }
-      ]
-    }
-  ]
-}
-{
-  "bounds": [400, 600],
-  "children": [
-    {
-      "bounds": [400, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutView #document",
-          "rect": [0, 0, 400, 600],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutView #document",
-          "rect": [0, 250, 400, 350],
-          "reason": "incremental"
-        },
-        {
-          "object": "LayoutBlockFlow HTML",
-          "rect": [0, 0, 400, 8],
-          "reason": "forced by layout"
-        }
-      ]
-    }
-  ]
-}
-{
-  "bounds": [800, 600],
-  "children": [
-    {
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutView #document",
-          "rect": [0, 0, 800, 600],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutBlockFlow HTML",
-          "rect": [0, 0, 800, 8],
-          "reason": "forced by layout"
-        },
-        {
-          "object": "LayoutView #document",
-          "rect": [400, 0, 400, 600],
-          "reason": "incremental"
-        },
-        {
-          "object": "LayoutBlockFlow BODY",
-          "reason": "became visible"
-        }
-      ]
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/window-resize-background-image-generated-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/window-resize-background-image-generated-expected.txt
index 6424a0a..d1c60991 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/window-resize-background-image-generated-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/window-resize-background-image-generated-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [600, 250],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [600, 250],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -23,12 +25,28 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutView #document",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutView #document",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutBlockFlow HTML",
+      "reason": "forced by layout"
+    }
   ]
 }
 {
+  "name": "Content Root Layer",
   "bounds": [400, 250],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [400, 250],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -47,19 +65,35 @@
           "object": "LayoutView #document",
           "rect": [400, 0, 200, 250],
           "reason": "incremental"
-        },
-        {
-          "object": "LayoutBlockFlow BODY",
-          "reason": "became visible"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutView #document",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutView #document",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutBlockFlow HTML",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutBlockFlow BODY",
+      "reason": "became visible"
+    }
   ]
 }
 {
+  "name": "Content Root Layer",
   "bounds": [400, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [400, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -81,12 +115,28 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutView #document",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutView #document",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutBlockFlow HTML",
+      "reason": "forced by layout"
+    }
   ]
 }
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -105,13 +155,27 @@
           "object": "LayoutView #document",
           "rect": [400, 0, 400, 600],
           "reason": "incremental"
-        },
-        {
-          "object": "LayoutBlockFlow BODY",
-          "reason": "became visible"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutView #document",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutView #document",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutBlockFlow HTML",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutBlockFlow BODY",
+      "reason": "became visible"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/window-resize-media-query-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/window-resize-media-query-expected.txt
index c6f03c9a..5e389d7 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/window-resize-media-query-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/window-resize-media-query-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [600, 250],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [600, 250],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -19,12 +21,24 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutView #document",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutBlockFlow HTML",
+      "reason": "forced by layout"
+    }
   ]
 }
 {
+  "name": "Content Root Layer",
   "bounds": [400, 250],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [400, 250],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -44,19 +58,35 @@
           "object": "LayoutView #document",
           "rect": [400, 0, 200, 250],
           "reason": "incremental"
-        },
-        {
-          "object": "LayoutBlockFlow BODY",
-          "reason": "became visible"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutView #document",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutView #document",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutBlockFlow HTML",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutBlockFlow BODY",
+      "reason": "became visible"
+    }
   ]
 }
 {
+  "name": "Content Root Layer",
   "bounds": [400, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [400, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -79,12 +109,28 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutView #document",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutView #document",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutBlockFlow HTML",
+      "reason": "forced by layout"
+    }
   ]
 }
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -104,13 +150,27 @@
           "object": "LayoutView #document",
           "rect": [400, 0, 400, 600],
           "reason": "incremental"
-        },
-        {
-          "object": "LayoutBlockFlow BODY",
-          "reason": "became visible"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutView #document",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutView #document",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutBlockFlow HTML",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutBlockFlow BODY",
+      "reason": "became visible"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/window-resize-no-layout-change1-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/window-resize-no-layout-change1-expected.txt
index dc8e041..84fbe80 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/window-resize-no-layout-change1-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/window-resize-no-layout-change1-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [2008, 2016],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [2008, 2016],
       "contentsOpaque": true,
       "drawsContent": true
@@ -9,9 +11,11 @@
   ]
 }
 {
+  "name": "Content Root Layer",
   "bounds": [2008, 2016],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [2008, 2016],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -23,12 +27,20 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutView #document",
+      "reason": "full"
+    }
   ]
 }
 {
+  "name": "Content Root Layer",
   "bounds": [2008, 2016],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [2008, 2016],
       "contentsOpaque": true,
       "drawsContent": true
@@ -36,9 +48,11 @@
   ]
 }
 {
+  "name": "Content Root Layer",
   "bounds": [2008, 2016],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [2008, 2016],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -50,6 +64,12 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutView #document",
+      "reason": "full"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/window-resize-no-layout-change2-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/window-resize-no-layout-change2-expected.txt
index a176b664..6b84ab6 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/window-resize-no-layout-change2-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/window-resize-no-layout-change2-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [2008, 2008],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [2008, 2008],
       "contentsOpaque": true,
       "drawsContent": true
@@ -9,9 +11,11 @@
   ]
 }
 {
+  "name": "Content Root Layer",
   "bounds": [2008, 2008],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [2008, 2008],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -23,12 +27,20 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutView #document",
+      "reason": "full"
+    }
   ]
 }
 {
+  "name": "Content Root Layer",
   "bounds": [2008, 2008],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [2008, 2008],
       "contentsOpaque": true,
       "drawsContent": true
@@ -36,9 +48,11 @@
   ]
 }
 {
+  "name": "Content Root Layer",
   "bounds": [2008, 2008],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [2008, 2008],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -50,6 +64,12 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutView #document",
+      "reason": "full"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/window-resize-percent-html-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/window-resize-percent-html-expected.txt
index 1ecc7066..9d92cbf 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/window-resize-percent-html-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/window-resize-percent-html-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [600, 250],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [600, 250],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -23,12 +25,28 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutView #document",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutBlockFlow HTML",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "incremental"
+    }
   ]
 }
 {
+  "name": "Content Root Layer",
   "bounds": [400, 250],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [400, 250],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -55,12 +73,32 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutView #document",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutView #document",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutBlockFlow HTML",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "incremental"
+    }
   ]
 }
 {
+  "name": "Content Root Layer",
   "bounds": [400, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [400, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -87,12 +125,32 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutView #document",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutView #document",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutBlockFlow HTML",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "incremental"
+    }
   ]
 }
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -119,6 +177,24 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutView #document",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutView #document",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutBlockFlow HTML",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "incremental"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/window-resize-percent-width-height-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/window-resize-percent-width-height-expected.txt
index 971388e..ead8d54b 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/window-resize-percent-width-height-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/window-resize-percent-width-height-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [600, 250],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [600, 250],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -15,19 +17,31 @@
           "object": "LayoutBlockFlow (positioned) DIV",
           "rect": [0, 125, 300, 125],
           "reason": "incremental"
-        },
-        {
-          "object": "LayoutBlockFlow HTML",
-          "reason": "forced by layout"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutView #document",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutBlockFlow HTML",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutBlockFlow (positioned) DIV",
+      "reason": "incremental"
+    }
   ]
 }
 {
+  "name": "Content Root Layer",
   "bounds": [400, 250],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [400, 250],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -46,19 +60,35 @@
           "object": "LayoutBlockFlow (positioned) DIV",
           "rect": [200, 0, 100, 125],
           "reason": "incremental"
-        },
-        {
-          "object": "LayoutBlockFlow HTML",
-          "reason": "forced by layout"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutView #document",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutView #document",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutBlockFlow HTML",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutBlockFlow (positioned) DIV",
+      "reason": "incremental"
+    }
   ]
 }
 {
+  "name": "Content Root Layer",
   "bounds": [400, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [400, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -77,19 +107,35 @@
           "object": "LayoutBlockFlow (positioned) DIV",
           "rect": [0, 125, 200, 175],
           "reason": "incremental"
-        },
-        {
-          "object": "LayoutBlockFlow HTML",
-          "reason": "forced by layout"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutView #document",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutView #document",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutBlockFlow HTML",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutBlockFlow (positioned) DIV",
+      "reason": "incremental"
+    }
   ]
 }
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -108,13 +154,27 @@
           "object": "LayoutBlockFlow (positioned) DIV",
           "rect": [200, 0, 200, 300],
           "reason": "incremental"
-        },
-        {
-          "object": "LayoutBlockFlow HTML",
-          "reason": "forced by layout"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutView #document",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutView #document",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutBlockFlow HTML",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutBlockFlow (positioned) DIV",
+      "reason": "incremental"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/window-resize-positioned-bottom-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/window-resize-positioned-bottom-expected.txt
index 3a74cdc..4936945 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/window-resize-positioned-bottom-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/window-resize-positioned-bottom-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [600, 250],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [600, 250],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -20,19 +22,31 @@
           "object": "LayoutBlockFlow (positioned) DIV",
           "rect": [0, 210, 20, 20],
           "reason": "bounds change"
-        },
-        {
-          "object": "LayoutBlockFlow HTML",
-          "reason": "forced by layout"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutView #document",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutBlockFlow HTML",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutBlockFlow (positioned) DIV",
+      "reason": "bounds change"
+    }
   ]
 }
 {
+  "name": "Content Root Layer",
   "bounds": [400, 250],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [400, 250],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -46,19 +60,31 @@
           "object": "LayoutView #document",
           "rect": [400, 0, 200, 250],
           "reason": "incremental"
-        },
-        {
-          "object": "LayoutBlockFlow HTML",
-          "reason": "forced by layout"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutView #document",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutView #document",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutBlockFlow HTML",
+      "reason": "forced by layout"
+    }
   ]
 }
 {
+  "name": "Content Root Layer",
   "bounds": [400, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [400, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -82,19 +108,35 @@
           "object": "LayoutBlockFlow (positioned) DIV",
           "rect": [0, 210, 20, 20],
           "reason": "bounds change"
-        },
-        {
-          "object": "LayoutBlockFlow HTML",
-          "reason": "forced by layout"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutView #document",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutView #document",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutBlockFlow HTML",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutBlockFlow (positioned) DIV",
+      "reason": "bounds change"
+    }
   ]
 }
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -108,13 +150,23 @@
           "object": "LayoutView #document",
           "rect": [400, 0, 400, 600],
           "reason": "incremental"
-        },
-        {
-          "object": "LayoutBlockFlow HTML",
-          "reason": "forced by layout"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutView #document",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutView #document",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutBlockFlow HTML",
+      "reason": "forced by layout"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/window-resize-positioned-percent-top-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/window-resize-positioned-percent-top-expected.txt
index 0bd04ba..c7a853be 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/window-resize-positioned-percent-top-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/window-resize-positioned-percent-top-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [600, 250],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [600, 250],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -20,19 +22,31 @@
           "object": "LayoutBlockFlow (positioned) DIV",
           "rect": [0, 125, 20, 20],
           "reason": "bounds change"
-        },
-        {
-          "object": "LayoutBlockFlow HTML",
-          "reason": "forced by layout"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutView #document",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutBlockFlow HTML",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutBlockFlow (positioned) DIV",
+      "reason": "bounds change"
+    }
   ]
 }
 {
+  "name": "Content Root Layer",
   "bounds": [400, 250],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [400, 250],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -46,19 +60,31 @@
           "object": "LayoutView #document",
           "rect": [400, 0, 200, 250],
           "reason": "incremental"
-        },
-        {
-          "object": "LayoutBlockFlow HTML",
-          "reason": "forced by layout"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutView #document",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutView #document",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutBlockFlow HTML",
+      "reason": "forced by layout"
+    }
   ]
 }
 {
+  "name": "Content Root Layer",
   "bounds": [400, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [400, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -82,19 +108,35 @@
           "object": "LayoutBlockFlow (positioned) DIV",
           "rect": [0, 125, 20, 20],
           "reason": "bounds change"
-        },
-        {
-          "object": "LayoutBlockFlow HTML",
-          "reason": "forced by layout"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutView #document",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutView #document",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutBlockFlow HTML",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutBlockFlow (positioned) DIV",
+      "reason": "bounds change"
+    }
   ]
 }
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -108,13 +150,23 @@
           "object": "LayoutView #document",
           "rect": [400, 0, 400, 600],
           "reason": "incremental"
-        },
-        {
-          "object": "LayoutBlockFlow HTML",
-          "reason": "forced by layout"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutView #document",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutView #document",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutBlockFlow HTML",
+      "reason": "forced by layout"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/repaint/window-resize-viewport-percent-expected.txt b/third_party/WebKit/LayoutTests/fast/repaint/window-resize-viewport-percent-expected.txt
index af43c20..f0fedef 100644
--- a/third_party/WebKit/LayoutTests/fast/repaint/window-resize-viewport-percent-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/repaint/window-resize-viewport-percent-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [600, 250],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [600, 250],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -20,19 +22,31 @@
           "object": "LayoutBlockFlow DIV",
           "rect": [25, 0, 25, 50],
           "reason": "incremental"
-        },
-        {
-          "object": "LayoutBlockFlow HTML",
-          "reason": "forced by layout"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutView #document",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutBlockFlow HTML",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "incremental"
+    }
   ]
 }
 {
+  "name": "Content Root Layer",
   "bounds": [400, 250],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [400, 250],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -46,19 +60,31 @@
           "object": "LayoutView #document",
           "rect": [400, 0, 200, 250],
           "reason": "incremental"
-        },
-        {
-          "object": "LayoutBlockFlow HTML",
-          "reason": "forced by layout"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutView #document",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutView #document",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutBlockFlow HTML",
+      "reason": "forced by layout"
+    }
   ]
 }
 {
+  "name": "Content Root Layer",
   "bounds": [400, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [400, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -82,19 +108,35 @@
           "object": "LayoutBlockFlow DIV",
           "rect": [25, 0, 35, 60],
           "reason": "incremental"
-        },
-        {
-          "object": "LayoutBlockFlow HTML",
-          "reason": "forced by layout"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutView #document",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutView #document",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutBlockFlow HTML",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "incremental"
+    }
   ]
 }
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -108,13 +150,23 @@
           "object": "LayoutView #document",
           "rect": [400, 0, 400, 600],
           "reason": "incremental"
-        },
-        {
-          "object": "LayoutBlockFlow HTML",
-          "reason": "forced by layout"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutView #document",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutView #document",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutBlockFlow HTML",
+      "reason": "forced by layout"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/sub-pixel/repaint-subpixel-layer-in-subpixel-composited-layer-expected.txt b/third_party/WebKit/LayoutTests/fast/sub-pixel/repaint-subpixel-layer-in-subpixel-composited-layer-expected.txt
index 1b9d56e..43d08197 100644
--- a/third_party/WebKit/LayoutTests/fast/sub-pixel/repaint-subpixel-layer-in-subpixel-composited-layer-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/sub-pixel/repaint-subpixel-layer-in-subpixel-composited-layer-expected.txt
@@ -1,13 +1,16 @@
 10.5px,12.5px,10.5px:
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow (relative positioned) DIV id='container'",
           "position": [11, 0],
           "bounds": [100, 50],
           "drawsContent": true,
@@ -26,18 +29,27 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='test'",
+      "reason": "bounds change"
+    }
   ]
 }
 10.6px,12.4px,10.4px:
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow (relative positioned) DIV id='container'",
           "position": [11, 0],
           "bounds": [100, 50],
           "drawsContent": true,
@@ -56,18 +68,27 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='test'",
+      "reason": "bounds change"
+    }
   ]
 }
 10.4px,12.6px,10.6px:
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow (relative positioned) DIV id='container'",
           "position": [10, 0],
           "bounds": [100, 50],
           "drawsContent": true,
@@ -86,18 +107,27 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='test'",
+      "reason": "bounds change"
+    }
   ]
 }
 10.6px,12.6px,10.6px:
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow (relative positioned) DIV id='container'",
           "position": [11, 0],
           "bounds": [100, 50],
           "drawsContent": true,
@@ -116,18 +146,27 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='test'",
+      "reason": "bounds change"
+    }
   ]
 }
 10.4px,12.4px,10.4px:
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow (relative positioned) DIV id='container'",
           "position": [10, 0],
           "bounds": [100, 50],
           "drawsContent": true,
@@ -146,6 +185,12 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='test'",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/sub-pixel/should-not-repaint-subpixel-composited-layer-expected.txt b/third_party/WebKit/LayoutTests/fast/sub-pixel/should-not-repaint-subpixel-composited-layer-expected.txt
index 68e27aa8..cca5c71 100644
--- a/third_party/WebKit/LayoutTests/fast/sub-pixel/should-not-repaint-subpixel-composited-layer-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/sub-pixel/should-not-repaint-subpixel-composited-layer-expected.txt
@@ -1,13 +1,16 @@
 10.1:
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow (relative positioned) DIV id='layer'",
           "position": [18, 8],
           "bounds": [100, 50]
         }
@@ -17,14 +20,17 @@
 }
 10.2:
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow (relative positioned) DIV id='layer'",
           "position": [18, 8],
           "bounds": [100, 50]
         }
@@ -34,14 +40,17 @@
 }
 10.299999999999999:
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow (relative positioned) DIV id='layer'",
           "position": [18, 8],
           "bounds": [100, 50]
         }
@@ -51,14 +60,17 @@
 }
 10.399999999999999:
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow (relative positioned) DIV id='layer'",
           "position": [18, 8],
           "bounds": [100, 50]
         }
@@ -68,14 +80,17 @@
 }
 10.499999999999998:
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow (relative positioned) DIV id='layer'",
           "position": [19, 8],
           "bounds": [100, 50]
         }
@@ -85,14 +100,17 @@
 }
 10.599999999999998:
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow (relative positioned) DIV id='layer'",
           "position": [19, 8],
           "bounds": [100, 50]
         }
@@ -102,14 +120,17 @@
 }
 10.699999999999998:
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow (relative positioned) DIV id='layer'",
           "position": [19, 8],
           "bounds": [100, 50]
         }
@@ -119,14 +140,17 @@
 }
 10.799999999999997:
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow (relative positioned) DIV id='layer'",
           "position": [19, 8],
           "bounds": [100, 50]
         }
@@ -136,14 +160,17 @@
 }
 10.899999999999997:
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow (relative positioned) DIV id='layer'",
           "position": [19, 8],
           "bounds": [100, 50]
         }
@@ -153,14 +180,17 @@
 }
 10.999999999999996:
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow (relative positioned) DIV id='layer'",
           "position": [19, 8],
           "bounds": [100, 50]
         }
@@ -170,14 +200,17 @@
 }
 11.099999999999996:
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow (relative positioned) DIV id='layer'",
           "position": [19, 8],
           "bounds": [100, 50]
         }
@@ -187,14 +220,17 @@
 }
 11.199999999999996:
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow (relative positioned) DIV id='layer'",
           "position": [19, 8],
           "bounds": [100, 50]
         }
@@ -204,14 +240,17 @@
 }
 11.299999999999995:
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow (relative positioned) DIV id='layer'",
           "position": [19, 8],
           "bounds": [100, 50]
         }
@@ -221,14 +260,17 @@
 }
 11.399999999999995:
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow (relative positioned) DIV id='layer'",
           "position": [19, 8],
           "bounds": [100, 50]
         }
@@ -238,14 +280,17 @@
 }
 11.499999999999995:
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow (relative positioned) DIV id='layer'",
           "position": [20, 8],
           "bounds": [100, 50]
         }
@@ -255,14 +300,17 @@
 }
 11.599999999999994:
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow (relative positioned) DIV id='layer'",
           "position": [20, 8],
           "bounds": [100, 50]
         }
@@ -272,14 +320,17 @@
 }
 11.699999999999994:
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow (relative positioned) DIV id='layer'",
           "position": [20, 8],
           "bounds": [100, 50]
         }
@@ -289,14 +340,17 @@
 }
 11.799999999999994:
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow (relative positioned) DIV id='layer'",
           "position": [20, 8],
           "bounds": [100, 50]
         }
@@ -306,14 +360,17 @@
 }
 11.899999999999993:
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow (relative positioned) DIV id='layer'",
           "position": [20, 8],
           "bounds": [100, 50]
         }
@@ -323,14 +380,17 @@
 }
 11.999999999999993:
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow (relative positioned) DIV id='layer'",
           "position": [20, 8],
           "bounds": [100, 50]
         }
@@ -340,14 +400,17 @@
 }
 12.099999999999993:
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow (relative positioned) DIV id='layer'",
           "position": [20, 8],
           "bounds": [100, 50]
         }
diff --git a/third_party/WebKit/LayoutTests/fast/table/border-collapsing/border-collapse-change-collapse-to-separate-expected.txt b/third_party/WebKit/LayoutTests/fast/table/border-collapsing/border-collapse-change-collapse-to-separate-expected.txt
index 51b2211d..4f55842 100644
--- a/third_party/WebKit/LayoutTests/fast/table/border-collapsing/border-collapse-change-collapse-to-separate-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/table/border-collapsing/border-collapse-change-collapse-to-separate-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -48,6 +50,28 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutTable TABLE id='table'",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutTableSection TBODY",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutTableRow TR",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutTableCell TD",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutTableCell TD",
+      "reason": "style change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/table/border-collapsing/border-collapse-change-separate-to-collapse-expected.txt b/third_party/WebKit/LayoutTests/fast/table/border-collapsing/border-collapse-change-separate-to-collapse-expected.txt
index 4d2ecb8..e6433e3d 100644
--- a/third_party/WebKit/LayoutTests/fast/table/border-collapsing/border-collapse-change-separate-to-collapse-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/table/border-collapsing/border-collapse-change-separate-to-collapse-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -45,17 +47,39 @@
           "object": "LayoutTableCell TD",
           "rect": [10, 10, 106, 108],
           "reason": "style change"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "reason": "full"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutTableCell TD",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutTableCell TD",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutTable TABLE id='table'",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutTableSection TBODY",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutTableRow TR",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutTableCell TD",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutTableCell TD",
+      "reason": "style change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/table/border-collapsing/cached-change-cell-border-color-expected.txt b/third_party/WebKit/LayoutTests/fast/table/border-collapsing/cached-change-cell-border-color-expected.txt
index 152e9184..b111b6de 100644
--- a/third_party/WebKit/LayoutTests/fast/table/border-collapsing/cached-change-cell-border-color-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/table/border-collapsing/cached-change-cell-border-color-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -10,17 +12,23 @@
           "object": "LayoutTableCell TD id='foo'",
           "rect": [8, 8, 60, 54],
           "reason": "style change"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "reason": "full"
-        },
-        {
-          "object": "LayoutTableCell TD id='foo'",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutTableCell TD id='foo'",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutTableCell TD",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutTableCell TD id='foo'",
+      "reason": "style change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/table/border-collapsing/cached-change-col-border-color-expected.txt b/third_party/WebKit/LayoutTests/fast/table/border-collapsing/cached-change-col-border-color-expected.txt
index 1bd8134..c58d50f 100644
--- a/third_party/WebKit/LayoutTests/fast/table/border-collapsing/cached-change-col-border-color-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/table/border-collapsing/cached-change-col-border-color-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -10,25 +12,31 @@
           "object": "LayoutTableCol COL id='col'",
           "rect": [8, 8, 113, 104],
           "reason": "style change"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "reason": "full"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "reason": "full"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "reason": "full"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutTableCell TD",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutTableCell TD",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutTableCell TD",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutTableCell TD",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutTableCol COL id='col'",
+      "reason": "style change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/table/border-collapsing/cached-change-colgroup-border-color-expected.txt b/third_party/WebKit/LayoutTests/fast/table/border-collapsing/cached-change-colgroup-border-color-expected.txt
index 532b28e8..04b975d 100644
--- a/third_party/WebKit/LayoutTests/fast/table/border-collapsing/cached-change-colgroup-border-color-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/table/border-collapsing/cached-change-colgroup-border-color-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -10,33 +12,39 @@
           "object": "LayoutTableCol COLGROUP id='colgroup'",
           "rect": [8, 8, 166, 102],
           "reason": "style change"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "reason": "full"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "reason": "full"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "reason": "full"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "reason": "full"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "reason": "full"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutTableCell TD",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutTableCell TD",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutTableCell TD",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutTableCell TD",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutTableCell TD",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutTableCell TD",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutTableCol COLGROUP id='colgroup'",
+      "reason": "style change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/table/border-collapsing/cached-change-row-border-width-expected.txt b/third_party/WebKit/LayoutTests/fast/table/border-collapsing/cached-change-row-border-width-expected.txt
index d9a1e78..110e0de 100644
--- a/third_party/WebKit/LayoutTests/fast/table/border-collapsing/cached-change-row-border-width-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/table/border-collapsing/cached-change-row-border-width-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -65,17 +67,43 @@
           "object": "LayoutTable TABLE",
           "rect": [64, 8, 4, 103],
           "reason": "incremental"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "reason": "full"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutTableCell TD",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutTableCell TD",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutTable TABLE",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutTableSection TBODY",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutTableRow TR id='row'",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutTableCell TD",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutTableRow TR",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutTableCell TD",
+      "reason": "location change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/fast/table/border-collapsing/cached-change-table-border-color-expected.txt b/third_party/WebKit/LayoutTests/fast/table/border-collapsing/cached-change-table-border-color-expected.txt
index df91699..80fc51f 100644
--- a/third_party/WebKit/LayoutTests/fast/table/border-collapsing/cached-change-table-border-color-expected.txt
+++ b/third_party/WebKit/LayoutTests/fast/table/border-collapsing/cached-change-table-border-color-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -10,13 +12,19 @@
           "object": "LayoutTable TABLE id='tbl'",
           "rect": [8, 8, 60, 54],
           "reason": "style change"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutTableCell TD",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutTable TABLE id='tbl'",
+      "reason": "style change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger-async/async-await/README.txt b/third_party/WebKit/LayoutTests/inspector/sources/debugger-async/async-await/README.txt
new file mode 100644
index 0000000..414d55bd
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/inspector/sources/debugger-async/async-await/README.txt
@@ -0,0 +1 @@
+Tests for V8 that depend on the new experimental async/await feature
\ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger-async/async-await/async-callstack-async-await-expected.txt b/third_party/WebKit/LayoutTests/inspector/sources/debugger-async/async-await/async-callstack-async-await-expected.txt
new file mode 100644
index 0000000..e5792a1
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/inspector/sources/debugger-async/async-await/async-callstack-async-await-expected.txt
@@ -0,0 +1,228 @@
+Tests asynchronous call stacks for async functions.
+
+Set timer for test function.
+Captured call stacks in no particular order:
+Call stack:
+    0) doTestChainedPromises (async-callstack-async-await.html:100)
+    [Promise.resolve]
+    0) resolvePromise (async-callstack-async-await.html:12)
+    [setTimeout]
+    0) promiseCallback (async-callstack-async-await.html:21)
+    1) timeoutPromise (async-callstack-async-await.html:9)
+    2) doTestChainedPromises (async-callstack-async-await.html:99)
+    3) testFunctionTimeout (async-callstack-async-await.html:50)
+    [setTimeout]
+    0) testFunction (async-callstack-async-await.html:43)
+    [setTimeout]
+    0) scheduleTestFunction (debugger-test.js:3)
+    <... skipped remaining frames ...>
+
+Call stack:
+    0) doTestChainedPromises (async-callstack-async-await.html:102)
+    [Promise.resolve]
+    0) resolvePromise (async-callstack-async-await.html:12)
+    [setTimeout]
+    0) promiseCallback (async-callstack-async-await.html:21)
+    1) timeoutPromise (async-callstack-async-await.html:9)
+    2) doTestChainedPromises (async-callstack-async-await.html:101)
+    [Promise.resolve]
+    0) resolvePromise (async-callstack-async-await.html:12)
+    [setTimeout]
+    0) promiseCallback (async-callstack-async-await.html:21)
+    1) timeoutPromise (async-callstack-async-await.html:9)
+    2) doTestChainedPromises (async-callstack-async-await.html:99)
+    3) testFunctionTimeout (async-callstack-async-await.html:50)
+    [setTimeout]
+    0) testFunction (async-callstack-async-await.html:43)
+
+Call stack:
+    0) doTestChainedPromises (async-callstack-async-await.html:104)
+    [Promise.resolve]
+    0) doTestChainedPromises (async-callstack-async-await.html:103)
+    [Promise.resolve]
+    0) resolvePromise (async-callstack-async-await.html:12)
+    [setTimeout]
+    0) promiseCallback (async-callstack-async-await.html:21)
+    1) timeoutPromise (async-callstack-async-await.html:9)
+    2) doTestChainedPromises (async-callstack-async-await.html:101)
+    [Promise.resolve]
+    0) resolvePromise (async-callstack-async-await.html:12)
+    [setTimeout]
+    0) promiseCallback (async-callstack-async-await.html:21)
+    1) timeoutPromise (async-callstack-async-await.html:9)
+    2) doTestChainedPromises (async-callstack-async-await.html:99)
+    3) testFunctionTimeout (async-callstack-async-await.html:50)
+
+Call stack:
+    0) doTestChainedPromises (async-callstack-async-await.html:106)
+    [Promise.resolve]
+    0) doTestChainedPromises (async-callstack-async-await.html:105)
+    [Promise.resolve]
+    0) doTestChainedPromises (async-callstack-async-await.html:103)
+    [Promise.resolve]
+    0) resolvePromise (async-callstack-async-await.html:12)
+    [setTimeout]
+    0) promiseCallback (async-callstack-async-await.html:21)
+    1) timeoutPromise (async-callstack-async-await.html:9)
+    2) doTestChainedPromises (async-callstack-async-await.html:101)
+    [Promise.resolve]
+    0) resolvePromise (async-callstack-async-await.html:12)
+
+Call stack:
+    0) errorCallback (async-callstack-async-await.html:60)
+    1) doTestPromiseReject (async-callstack-async-await.html:191)
+    [Promise.reject]
+    0) doTestPromiseReject (async-callstack-async-await.html:188)
+    1) testFunctionTimeout (async-callstack-async-await.html:50)
+    [setTimeout]
+    0) testFunction (async-callstack-async-await.html:43)
+    [setTimeout]
+    0) scheduleTestFunction (debugger-test.js:3)
+    <... skipped remaining frames ...>
+
+Call stack:
+    0) errorCallback (async-callstack-async-await.html:60)
+    1) doTestRejectFromChain (async-callstack-async-await.html:171)
+    [Promise.reject]
+    0) rejectPromise (async-callstack-async-await.html:16)
+    [setTimeout]
+    0) promiseCallback (async-callstack-async-await.html:19)
+    1) timeoutPromise (async-callstack-async-await.html:9)
+    2) rejectFromChain (async-callstack-async-await.html:160)
+    [Promise.resolve]
+    0) resolvePromise (async-callstack-async-await.html:12)
+    [setTimeout]
+    0) promiseCallback (async-callstack-async-await.html:21)
+    1) timeoutPromise (async-callstack-async-await.html:9)
+    2) rejectFromChain (async-callstack-async-await.html:159)
+    [Promise.resolve]
+    0) resolvePromise (async-callstack-async-await.html:12)
+
+Call stack:
+    0) errorCallback (async-callstack-async-await.html:60)
+    1) doTestSettledPromisesRejected (async-callstack-async-await.html:92)
+    [Promise.reject]
+    0) doTestSettledPromisesRejected (async-callstack-async-await.html:89)
+    1) testFunctionTimeout (async-callstack-async-await.html:50)
+    [setTimeout]
+    0) testFunction (async-callstack-async-await.html:43)
+    [setTimeout]
+    0) scheduleTestFunction (debugger-test.js:3)
+    <... skipped remaining frames ...>
+
+Call stack:
+    0) errorCallback (async-callstack-async-await.html:60)
+    1) doTestThrowFromChain (async-callstack-async-await.html:151)
+    [Promise.resolve]
+    0) resolvePromise (async-callstack-async-await.html:12)
+    [setTimeout]
+    0) promiseCallback (async-callstack-async-await.html:21)
+    1) timeoutPromise (async-callstack-async-await.html:9)
+    2) throwFromChain (async-callstack-async-await.html:138)
+    [Promise.resolve]
+    0) resolvePromise (async-callstack-async-await.html:12)
+    [setTimeout]
+    0) promiseCallback (async-callstack-async-await.html:21)
+    1) timeoutPromise (async-callstack-async-await.html:9)
+    2) throwFromChain (async-callstack-async-await.html:137)
+    3) doTestThrowFromChain (async-callstack-async-await.html:148)
+    4) testFunctionTimeout (async-callstack-async-await.html:50)
+    [setTimeout]
+    0) testFunction (async-callstack-async-await.html:43)
+
+Call stack:
+    0) promiseCallback (async-callstack-async-await.html:68)
+    1) doTestPromiseConstructor (async-callstack-async-await.html:66)
+    2) testFunctionTimeout (async-callstack-async-await.html:50)
+    [setTimeout]
+    0) testFunction (async-callstack-async-await.html:43)
+    [setTimeout]
+    0) scheduleTestFunction (debugger-test.js:3)
+    <... skipped remaining frames ...>
+
+Call stack:
+    0) thenCallback (async-callstack-async-await.html:55)
+    1) doTestChainedPromises (async-callstack-async-await.html:107)
+    [Promise.resolve]
+    0) resolvePromise (async-callstack-async-await.html:12)
+    [setTimeout]
+    0) promiseCallback (async-callstack-async-await.html:21)
+    1) timeoutPromise (async-callstack-async-await.html:9)
+    2) doTestChainedPromises (async-callstack-async-await.html:107)
+    [Promise.resolve]
+    0) doTestChainedPromises (async-callstack-async-await.html:105)
+    [Promise.resolve]
+    0) doTestChainedPromises (async-callstack-async-await.html:103)
+    [Promise.resolve]
+    0) resolvePromise (async-callstack-async-await.html:12)
+
+Call stack:
+    0) thenCallback (async-callstack-async-await.html:55)
+    1) doTestChainedPromisesJSON (async-callstack-async-await.html:119)
+    [Promise.resolve]
+    0) doTestChainedPromisesJSON (async-callstack-async-await.html:118)
+    [Promise.resolve]
+    0) doTestChainedPromisesJSON (async-callstack-async-await.html:117)
+    [Promise.resolve]
+    0) resolvePromise (async-callstack-async-await.html:12)
+    [setTimeout]
+    0) promiseCallback (async-callstack-async-await.html:21)
+    1) timeoutPromise (async-callstack-async-await.html:9)
+    2) doTestChainedPromisesJSON (async-callstack-async-await.html:116)
+    3) testFunctionTimeout (async-callstack-async-await.html:50)
+    [setTimeout]
+    0) testFunction (async-callstack-async-await.html:43)
+
+Call stack:
+    0) thenCallback (async-callstack-async-await.html:55)
+    1) doTestPromiseAll (async-callstack-async-await.html:129)
+    [Promise.resolve]
+    0) resolvePromise (async-callstack-async-await.html:12)
+    [setTimeout]
+    0) promiseCallback (async-callstack-async-await.html:21)
+    1) timeoutPromise (async-callstack-async-await.html:9)
+    2) doTestPromiseAll (async-callstack-async-await.html:128)
+    3) testFunctionTimeout (async-callstack-async-await.html:50)
+    [setTimeout]
+    0) testFunction (async-callstack-async-await.html:43)
+    [setTimeout]
+    0) scheduleTestFunction (debugger-test.js:3)
+    <... skipped remaining frames ...>
+
+Call stack:
+    0) thenCallback (async-callstack-async-await.html:55)
+    1) doTestPromiseConstructor (async-callstack-async-await.html:70)
+    [Promise.resolve]
+    0) doTestPromiseConstructor (async-callstack-async-await.html:66)
+    1) testFunctionTimeout (async-callstack-async-await.html:50)
+    [setTimeout]
+    0) testFunction (async-callstack-async-await.html:43)
+    [setTimeout]
+    0) scheduleTestFunction (debugger-test.js:3)
+    <... skipped remaining frames ...>
+
+Call stack:
+    0) thenCallback (async-callstack-async-await.html:55)
+    1) doTestPromiseResolve (async-callstack-async-await.html:179)
+    [Promise.resolve]
+    0) doTestPromiseResolve (async-callstack-async-await.html:178)
+    1) testFunctionTimeout (async-callstack-async-await.html:50)
+    [setTimeout]
+    0) testFunction (async-callstack-async-await.html:43)
+    [setTimeout]
+    0) scheduleTestFunction (debugger-test.js:3)
+    <... skipped remaining frames ...>
+
+Call stack:
+    0) thenCallback (async-callstack-async-await.html:55)
+    1) doTestSettledPromisesResolved (async-callstack-async-await.html:80)
+    [Promise.resolve]
+    0) doTestSettledPromisesResolved (async-callstack-async-await.html:79)
+    1) testFunctionTimeout (async-callstack-async-await.html:50)
+    [setTimeout]
+    0) testFunction (async-callstack-async-await.html:43)
+    [setTimeout]
+    0) scheduleTestFunction (debugger-test.js:3)
+    <... skipped remaining frames ...>
+
+
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger-async/async-await/async-callstack-async-await.html b/third_party/WebKit/LayoutTests/inspector/sources/debugger-async/async-await/async-callstack-async-await.html
new file mode 100644
index 0000000..dcb1c02
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/inspector/sources/debugger-async/async-await/async-callstack-async-await.html
@@ -0,0 +1,211 @@
+<html>
+<head>
+<script src="../../../../http/tests/inspector/inspector-test.js"></script>
+<script src="../../../../http/tests/inspector/debugger-test.js"></script>
+<script>
+
+function timeoutPromise(value, ms)
+{
+    return new Promise(function promiseCallback(resolve, reject) {
+        function resolvePromise()
+        {
+            resolve(value);
+        }
+        function rejectPromise()
+        {
+            reject(value);
+        }
+        if (value instanceof Error)
+            setTimeout(rejectPromise, ms || 0);
+        else
+            setTimeout(resolvePromise, ms || 0);
+    });
+}
+
+function settledPromise(value)
+{
+    function resolveCallback(resolve, reject)
+    {
+        resolve(value);
+    }
+    function rejectCallback(resolve, reject)
+    {
+        reject(value);
+    }
+    if (value instanceof Error)
+        return new Promise(rejectCallback);
+    else
+        return new Promise(resolveCallback);
+}
+
+function testFunction()
+{
+    setTimeout(testFunctionTimeout, 0);
+}
+
+function testFunctionTimeout()
+{
+    var functions = [doTestPromiseConstructor, doTestSettledPromisesResolved, doTestSettledPromisesRejected, doTestChainedPromises, doTestChainedPromisesJSON, doTestPromiseAll, doTestThrowFromChain, doTestRejectFromChain, doTestPromiseResolve, doTestPromiseReject];
+    for (var i = 0; i < functions.length; ++i)
+        functions[i]();
+}
+
+function thenCallback(value)
+{
+    debugger;
+}
+
+function errorCallback(error)
+{
+    debugger;
+}
+
+async function doTestPromiseConstructor()
+{
+    try {
+        let result = await new Promise(function promiseCallback(resolve, reject) {
+            resolve(1);
+            debugger;
+        });
+        thenCallback(result);
+    } catch (e) {
+        errorCallback(e);
+    }
+}
+
+async function doTestSettledPromisesResolved()
+{
+    try {
+        let value = await settledPromise("resolved");
+        thenCallback(value);
+    } catch (e) {
+        errorCallback(e);
+    }
+}
+
+async function doTestSettledPromisesRejected()
+{
+    try {
+        let value = await settledPromise(new Error("rejected"));
+        thenCallback(value);
+    } catch (e) {
+        errorCallback(e);
+    }
+}
+
+async function doTestChainedPromises()
+{
+    try {
+        await timeoutPromise(1);
+        debugger;
+        await timeoutPromise(2);
+        debugger;
+        await 3;
+        debugger;
+        await settledPromise(4);
+        debugger;
+        thenCallback(await timeoutPromise(5));
+    } catch (e) {
+        errorCallback(e);
+    }
+}
+
+async function doTestChainedPromisesJSON()
+{
+    try {
+        let one = await timeoutPromise(1);
+        let stringify = await JSON.stringify(one);
+        let parse = await JSON.parse(stringify);
+        thenCallback(parse);
+    } catch (e) {
+        errorCallback(e);
+    }
+}
+
+async function doTestPromiseAll()
+{
+    try {
+        let all = await Promise.all([11, 22, 33, 44, 55].map(timeoutPromise));
+        thenCallback(all);
+    } catch (e) {
+        errorCallback(e);
+    }
+}
+
+async function throwFromChain()
+{
+    await timeoutPromise(1);
+    await timeoutPromise(2);
+    await settledPromise(3);
+    throw Error("thrown from 4");
+    await timeoutPromise(5);
+    debugger;
+}
+
+async function doTestThrowFromChain()
+{
+    try {
+        let result = await throwFromChain();
+        thencallback(result);
+    } catch (e) {
+        errorCallback(e);
+    }
+}
+
+async function rejectFromChain()
+{
+    await timeoutPromise(1);
+    await timeoutPromise(2);
+    await timeoutPromise(3);
+    await timeoutPromise(new Error(4));
+    throw new Error("thrown from rejectFromChain");
+    debugger;
+}
+
+async function doTestRejectFromChain()
+{
+    try {
+        let result = await rejectFromChain();
+        thenCallback(result);
+    } catch (e) {
+        errorCallback(e);
+    }
+}
+
+async function doTestPromiseResolve()
+{
+    try {
+        let result = await Promise.resolve(1);
+        thenCallback(result);
+    } catch (e) {
+        errorCallback(e);
+    }
+}
+
+async function doTestPromiseReject()
+{
+    try {
+        let result = await Promise.reject(new Error("2"))
+        thenCallback(result);
+    } catch (e) {
+        errorCallback(e);
+    }
+}
+
+var test = function()
+{
+    var totalDebuggerStatements = 15;
+    var maxAsyncCallStackDepth = 5;
+    InspectorTest.runAsyncCallStacksTest(totalDebuggerStatements, maxAsyncCallStackDepth);
+}
+
+</script>
+</head>
+
+<body onload="runTest()">
+<p>
+Tests asynchronous call stacks for async functions.
+</p>
+
+</body>
+</html>
diff --git a/third_party/WebKit/LayoutTests/media/media-audio-no-spurious-repaints-expected.txt b/third_party/WebKit/LayoutTests/media/media-audio-no-spurious-repaints-expected.txt
index 4ba842027..e288e4b 100644
--- a/third_party/WebKit/LayoutTests/media/media-audio-no-spurious-repaints-expected.txt
+++ b/third_party/WebKit/LayoutTests/media/media-audio-no-spurious-repaints-expected.txt
@@ -1,7 +1,9 @@
 CONSOLE MESSAGE: line 29: FAIL! An unexpected number of repaints occurred; expected 3 to 4 with rects of [8, 8, 300, 150]. Actual layer tree: {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -23,6 +25,20 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutVideo VIDEO",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutVideo VIDEO",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutVideo VIDEO",
+      "reason": "full"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/media/video-dom-autoplay-expected.txt b/third_party/WebKit/LayoutTests/media/video-dom-autoplay-expected.txt
deleted file mode 100644
index c1a8979..0000000
--- a/third_party/WebKit/LayoutTests/media/video-dom-autoplay-expected.txt
+++ /dev/null
@@ -1,7 +0,0 @@
-EXPECTED (video.autoplay == 'false') OK
-EXPECTED (video.autoplay == 'true') OK
-EXPECTED (video.getAttribute('autoplay') != 'null') OK
-EVENT(play)
-EXPECTED (video.paused == 'false') OK
-END OF TEST
-
diff --git a/third_party/WebKit/LayoutTests/media/video-dom-autoplay.html b/third_party/WebKit/LayoutTests/media/video-dom-autoplay.html
index 1f52077..8aaf56e2 100644
--- a/third_party/WebKit/LayoutTests/media/video-dom-autoplay.html
+++ b/third_party/WebKit/LayoutTests/media/video-dom-autoplay.html
@@ -1,17 +1,21 @@
-<video controls></video>
-<script src=media-file.js></script>
-<!-- TODO(foolip): Convert test to testharness.js. crbug.com/588956
-     (Please avoid writing new tests using video-test.js) -->
-<script src=video-test.js></script>
+<!DOCTYPE html>
+<title>Test media "autoplay" attribute set via DOM.</title>
+<script src="../resources/testharness.js"></script>
+<script src="../resources/testharnessreport.js"></script>
+<script src="media-file.js"></script>
+<video></video>
 <script>
-    testExpected("video.autoplay", false);
+async_test(function(t) {
+    var video = document.querySelector("video");
+    assert_false(video.autoplay);
     video.autoplay = true;
-    testExpected("video.autoplay", true);
-    testExpected("video.getAttribute('autoplay')", null, "!=");
-    waitForEvent('play', function () {
-        testExpected("video.paused", false);
-        endTest();
-    } );
+    assert_true(video.autoplay);
+    assert_not_equals(video.getAttribute("autoplay"), null);
+
+    video.onplay = t.step_func_done(function() {
+        assert_false(video.paused);
+    });
 
     video.src = findMediaFile("video", "content/test");
-</script>
+});
+</script>
\ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/media/video-dom-preload-expected.txt b/third_party/WebKit/LayoutTests/media/video-dom-preload-expected.txt
deleted file mode 100644
index 8cc83db9..0000000
--- a/third_party/WebKit/LayoutTests/media/video-dom-preload-expected.txt
+++ /dev/null
@@ -1,58 +0,0 @@
-
-++ Test default attribute value
-EXPECTED (video.preload == 'auto') OK
-EXPECTED (video.getAttribute('preload') == 'null') OK
-
-++ Remove attribute, should revert to default
-RUN(video.removeAttribute('preload'))
-EXPECTED (video.preload == 'auto') OK
-
-++ Set to 'none'
-- set via DOM
-RUN(video.removeAttribute('preload'))
-RUN(video.preload = 'none')
-EXPECTED (video.getAttribute('preload') == 'none') OK
-EXPECTED (video.preload == 'none') OK
-- and via attribute
-RUN(video.removeAttribute('preload'))
-RUN(video.setAttribute('preload', 'none'))
-EXPECTED (video.preload == 'none') OK
-EXPECTED (video.getAttribute('preload') == 'none') OK
-
-++ Set to 'auto'
-- set via DOM
-RUN(video.removeAttribute('preload'))
-RUN(video.preload = 'auto')
-EXPECTED (video.getAttribute('preload') == 'auto') OK
-EXPECTED (video.preload == 'auto') OK
-- and via attribute
-RUN(video.removeAttribute('preload'))
-RUN(video.setAttribute('preload', 'auto'))
-EXPECTED (video.preload == 'auto') OK
-EXPECTED (video.getAttribute('preload') == 'auto') OK
-
-++ set to bogus value, should revert to default value
-RUN(video.removeAttribute('preload'))
-- set via DOM
-RUN(video.preload = 'bogus')
-EXPECTED (video.getAttribute('preload') == 'bogus') OK
-EXPECTED (video.preload == 'auto') OK
-- and via attribute
-RUN(video.setAttribute('preload', 'bogus'))
-EXPECTED (video.preload == 'auto') OK
-EXPECTED (video.getAttribute('preload') == 'bogus') OK
-
-++ Set to 'metadata'
-- set via DOM
-RUN(video.removeAttribute('preload'))
-RUN(video.preload = 'metadata')
-EXPECTED (video.getAttribute('preload') == 'metadata') OK
-EXPECTED (video.preload == 'metadata') OK
-- and via attribute
-RUN(video.removeAttribute('preload'))
-RUN(video.setAttribute('preload', 'metadata'))
-EXPECTED (video.preload == 'metadata') OK
-EXPECTED (video.getAttribute('preload') == 'metadata') OK
-
-END OF TEST
-
diff --git a/third_party/WebKit/LayoutTests/media/video-dom-preload.html b/third_party/WebKit/LayoutTests/media/video-dom-preload.html
index 08385d4..bc89978 100644
--- a/third_party/WebKit/LayoutTests/media/video-dom-preload.html
+++ b/third_party/WebKit/LayoutTests/media/video-dom-preload.html
@@ -1,68 +1,47 @@
-<html>
-    <head>
-        <!-- TODO(foolip): Convert test to testharness.js. crbug.com/588956
-             (Please avoid writing new tests using video-test.js) -->
-        <script src=video-test.js></script>
-        <script>
-            function setPreload(value, expected)
-            {
-                consoleWrite("- set via DOM");
-                run("video.removeAttribute('preload')");
-                run("video.preload = '" + value + "'");
-                testExpected("video.getAttribute('preload')", expected);
-                testExpected("video.preload", expected);
-                consoleWrite("- and via attribute");
-                run("video.removeAttribute('preload')");
-                run("video.setAttribute('preload', '" + value + "')");
-                testExpected("video.preload", expected);
-                testExpected("video.getAttribute('preload')", expected);
-                consoleWrite("");
+<!DOCTYPE html>
+<title>Test media "autoplay" attribute set via DOM.</title>
+<script src="../resources/testharness.js"></script>
+<script src="../resources/testharnessreport.js"></script>
+<video></video>
+<script>
+test(function() {
+    var video = document.querySelector("video");
 
-            }
+    // Test default attribute value.
+    assert_equals(video.preload, "auto");
+    assert_equals(video.getAttribute("preload"), null);
 
-            function test()
-            {
-                findMediaElement();
-                consoleWrite("");
+    // Remove attribute, should revert to default.
+    video.removeAttribute("preload");
+    assert_equals(video.preload, "auto");
 
-                consoleWrite("++ Test default attribute value");
-                testExpected("video.preload", "auto");
-                testExpected("video.getAttribute('preload')", null);
-                consoleWrite("");
+    checkPreloadValue("none", "none");
+    checkPreloadValue("auto", "auto");
 
-                consoleWrite("++ Remove attribute, should revert to default");
-                run("video.removeAttribute('preload')");
-                testExpected("video.preload", "auto");
-                consoleWrite("");
+    // set to bogus value, should revert to default value.
+    video.removeAttribute("preload");
+    // Set via IDL attribute
+    video.preload = "bogus";
+    assert_equals(video.getAttribute("preload"), "bogus");
+    assert_equals(video.preload, "auto");
+    // - and via content attribute.
+    video.setAttribute("preload", "bogus");
+    assert_equals(video.preload, "auto");
+    assert_equals(video.getAttribute("preload"), "bogus");
 
-                consoleWrite("++ Set to 'none'");
-                setPreload("none", "none");
+    checkPreloadValue("metadata", "metadata");
 
-                consoleWrite("++ Set to 'auto'");
-                setPreload("auto", "auto");
-
-                consoleWrite("++ set to bogus value, should revert to default value");
-                run("video.removeAttribute('preload')");
-                consoleWrite("- set via DOM");
-                run("video.preload = 'bogus'");
-                testExpected("video.getAttribute('preload')", "bogus");
-                testExpected("video.preload", "auto");
-                consoleWrite("- and via attribute");
-                run("video.setAttribute('preload', 'bogus')");
-                testExpected("video.preload", "auto");
-                testExpected("video.getAttribute('preload')", "bogus");
-                consoleWrite("");
-
-                consoleWrite("++ Set to 'metadata'");
-                setPreload("metadata", "metadata");
-
-                endTest();
-            }
-        </script>
-
-    </head>
-
-    <body onload="test()">
-        <video controls></video>
-    </body>
-</html>
+    function checkPreloadValue(value, expected) {
+        // Set via IDL attribute
+        video.removeAttribute("preload");
+        video.preload = value;
+        assert_equals(video.getAttribute("preload"), expected);
+        assert_equals(video.preload, expected);
+        // - and via content attribute.
+        video.removeAttribute("preload");
+        video.setAttribute("preload", value);
+        assert_equals(video.preload, expected);
+        assert_equals(video.getAttribute("preload"), expected);
+    }
+});
+</script>
\ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/media/video-dom-src-expected.txt b/third_party/WebKit/LayoutTests/media/video-dom-src-expected.txt
deleted file mode 100644
index 371d2d5..0000000
--- a/third_party/WebKit/LayoutTests/media/video-dom-src-expected.txt
+++ /dev/null
@@ -1,6 +0,0 @@
-EXPECTED (video.currentSrc == '') OK
-EXPECTED (video.currentSrc == '') OK
-EVENT(canplaythrough)
-EXPECTED (stripExtension(relativeURL(video.currentSrc)) == 'content/test') OK
-END OF TEST
-
diff --git a/third_party/WebKit/LayoutTests/media/video-dom-src.html b/third_party/WebKit/LayoutTests/media/video-dom-src.html
index cd5d364..e214ce6 100644
--- a/third_party/WebKit/LayoutTests/media/video-dom-src.html
+++ b/third_party/WebKit/LayoutTests/media/video-dom-src.html
@@ -1,18 +1,20 @@
-<video controls></video>
-<script src=media-file.js></script>
-<!-- TODO(foolip): Convert test to testharness.js. crbug.com/588956
-     (Please avoid writing new tests using video-test.js) -->
-<script src=video-test.js></script>
+<!DOCTYPE html>
+<title>Test media "src" attribute set via DOM.</title>
+<script src="../resources/testharness.js"></script>
+<script src="../resources/testharnessreport.js"></script>
+<script src="media-file.js"></script>
+<video></video>
 <script>
-    testExpected("video.currentSrc", "");
+async_test(function(t) {
+    var video = document.querySelector("video");
+    assert_equals(video.currentSrc, "");
     var mediaFile = findMediaFile("video", "content/test");
     video.src = mediaFile;
-    testExpected("video.currentSrc", "");
+    assert_equals(video.currentSrc, "");
 
-    waitForEvent('canplaythrough', function () {
-        testExpected("stripExtension(relativeURL(video.currentSrc))", stripExtension(mediaFile));
-        endTest();
-    } );
-
-    video.load();
-</script>
+    video.oncanplaythrough = t.step_func_done(function() {
+        var currentSrc = video.currentSrc;
+        assert_equals(currentSrc.substr(currentSrc.lastIndexOf("/media/")+7), mediaFile);
+    });
+});
+</script>
\ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/animated-gif-offscreen-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/animated-gif-offscreen-expected.txt
index 7c909e3a0..e9e3a14 100644
--- a/third_party/WebKit/LayoutTests/paint/invalidation/animated-gif-offscreen-expected.txt
+++ b/third_party/WebKit/LayoutTests/paint/invalidation/animated-gif-offscreen-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [2008, 2016],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [2008, 2016],
       "contentsOpaque": true,
       "drawsContent": true
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/animated-gif-transformed-offscreen-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/animated-gif-transformed-offscreen-expected.txt
index 101666d1..4f14cd5 100644
--- a/third_party/WebKit/LayoutTests/paint/invalidation/animated-gif-transformed-offscreen-expected.txt
+++ b/third_party/WebKit/LayoutTests/paint/invalidation/animated-gif-transformed-offscreen-expected.txt
@@ -1,12 +1,15 @@
 {
+  "name": "Content Root Layer",
   "bounds": [2008, 2016],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [2008, 2016],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow DIV id='targetDiv'",
           "position": [8, 8],
           "bounds": [2000, 2000],
           "drawsContent": true,
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/iframe-rounding-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/iframe-rounding-expected.txt
index 68c3e04..d51f547 100644
--- a/third_party/WebKit/LayoutTests/paint/invalidation/iframe-rounding-expected.txt
+++ b/third_party/WebKit/LayoutTests/paint/invalidation/iframe-rounding-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/invalidate-after-composited-scroll-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/invalidate-after-composited-scroll-expected.txt
index 1f52791..172e3d4 100644
--- a/third_party/WebKit/LayoutTests/paint/invalidation/invalidate-after-composited-scroll-expected.txt
+++ b/third_party/WebKit/LayoutTests/paint/invalidation/invalidate-after-composited-scroll-expected.txt
@@ -1,22 +1,27 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow (positioned) DIV id='scroller'",
           "position": [300, 300],
           "bounds": [200, 200],
           "shouldFlattenTransform": false,
           "drawsContent": true,
           "children": [
             {
+              "name": "Scrolling Layer",
               "bounds": [185, 200],
               "shouldFlattenTransform": false,
               "children": [
                 {
+                  "name": "Scrolling Contents Layer",
                   "bounds": [185, 4900],
                   "drawsContent": true,
                   "paintInvalidations": [
@@ -30,9 +35,11 @@
               ]
             },
             {
+              "name": "Overflow Controls Host Layer",
               "bounds": [200, 200],
               "children": [
                 {
+                  "name": "Vertical Scrollbar Layer",
                   "position": [185, 0],
                   "bounds": [15, 200],
                   "paintInvalidations": [
@@ -49,6 +56,12 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV id='target'",
+      "reason": "style change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/invalidate-descendants-when-receiving-paint-layer-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/invalidate-descendants-when-receiving-paint-layer-expected.txt
index d8293da1..d3b14b3 100644
--- a/third_party/WebKit/LayoutTests/paint/invalidation/invalidate-descendants-when-receiving-paint-layer-expected.txt
+++ b/third_party/WebKit/LayoutTests/paint/invalidation/invalidate-descendants-when-receiving-paint-layer-expected.txt
@@ -1,28 +1,23 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow DIV id='child'",
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='target'",
-          "reason": "subtree"
-        }
-      ],
       "children": [
         {
+          "name": "LayoutBlockFlow (positioned) DIV",
           "position": [8, 8]
         },
         {
+          "name": "Squashing Containment Layer",
           "shouldFlattenTransform": false,
           "children": [
             {
+              "name": "LayoutBlockFlow (relative positioned) DIV",
               "position": [8, 8],
               "bounds": [784, 52],
               "drawsContent": true,
@@ -40,6 +35,7 @@
               ]
             },
             {
+              "name": "Squashing Layer (first squashed layer: LayoutBlockFlow DIV id='target')",
               "position": [9, 9],
               "bounds": [100, 100],
               "drawsContent": true,
@@ -60,6 +56,32 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV id='target'",
+      "reason": "subtree"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='child'",
+      "reason": "subtree"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='target'",
+      "reason": "subtree"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='child'",
+      "reason": "subtree"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='target'",
+      "reason": "subtree"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='child'",
+      "reason": "subtree"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/paint/invalidation/invalidation-on-foreground-graphics-layer-expected.txt b/third_party/WebKit/LayoutTests/paint/invalidation/invalidation-on-foreground-graphics-layer-expected.txt
index b048d52..011ddb0 100644
--- a/third_party/WebKit/LayoutTests/paint/invalidation/invalidation-on-foreground-graphics-layer-expected.txt
+++ b/third_party/WebKit/LayoutTests/paint/invalidation/invalidation-on-foreground-graphics-layer-expected.txt
@@ -1,12 +1,15 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow DIV",
           "position": [8, 8],
           "bounds": [200, 200],
           "contentsOpaque": true,
@@ -15,10 +18,12 @@
           "backgroundColor": "#D3D3D3",
           "children": [
             {
+              "name": "Scrolling Layer",
               "bounds": [185, 185],
               "shouldFlattenTransform": false,
               "children": [
                 {
+                  "name": "Scrolling Contents Layer",
                   "bounds": [300, 300],
                   "drawsContent": true,
                   "paintInvalidations": [
@@ -30,12 +35,14 @@
                   ],
                   "children": [
                     {
+                      "name": "LayoutBlockFlow (relative positioned) DIV",
                       "bounds": [200, 200],
                       "contentsOpaque": true,
                       "drawsContent": true,
                       "backgroundColor": "#ADD8E6"
                     },
                     {
+                      "name": "LayoutBlockFlow DIV (foreground) Layer",
                       "bounds": [300, 300],
                       "drawsContent": true,
                       "paintInvalidations": [
@@ -51,17 +58,21 @@
               ]
             },
             {
+              "name": "Overflow Controls Host Layer",
               "bounds": [200, 200],
               "children": [
                 {
+                  "name": "Horizontal Scrollbar Layer",
                   "position": [0, 185],
                   "bounds": [185, 15]
                 },
                 {
+                  "name": "Vertical Scrollbar Layer",
                   "position": [185, 0],
                   "bounds": [15, 185]
                 },
                 {
+                  "name": "Scroll Corner Layer",
                   "position": [185, 185],
                   "bounds": [15, 15],
                   "drawsContent": true
@@ -72,6 +83,12 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV id='target'",
+      "reason": "style change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/paint/selection/invalidation-rect-includes-newline-expected.txt b/third_party/WebKit/LayoutTests/paint/selection/invalidation-rect-includes-newline-expected.txt
index dd7c905..880d19a 100644
--- a/third_party/WebKit/LayoutTests/paint/selection/invalidation-rect-includes-newline-expected.txt
+++ b/third_party/WebKit/LayoutTests/paint/selection/invalidation-rect-includes-newline-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -15,37 +17,47 @@
           "object": "LayoutText #text",
           "rect": [40, 8, 16, 33],
           "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'xx'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'xx'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox 'y'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'y'",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutBlockFlow BODY",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='container'",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutBlockFlow HTML",
-          "reason": "selection"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow HTML",
+      "reason": "selection"
+    },
+    {
+      "object": "LayoutBlockFlow BODY",
+      "reason": "selection"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='container'",
+      "reason": "selection"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "selection"
+    },
+    {
+      "object": "InlineTextBox 'xx'",
+      "reason": "selection"
+    },
+    {
+      "object": "InlineTextBox 'y'",
+      "reason": "selection"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "incremental"
+    },
+    {
+      "object": "InlineTextBox 'xx'",
+      "reason": "incremental"
+    },
+    {
+      "object": "InlineTextBox 'y'",
+      "reason": "incremental"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/paint/selection/invalidation-rect-includes-newline-for-rtl-expected.txt b/third_party/WebKit/LayoutTests/paint/selection/invalidation-rect-includes-newline-for-rtl-expected.txt
index 3488ddf..c8642fd 100644
--- a/third_party/WebKit/LayoutTests/paint/selection/invalidation-rect-includes-newline-for-rtl-expected.txt
+++ b/third_party/WebKit/LayoutTests/paint/selection/invalidation-rect-includes-newline-for-rtl-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -10,41 +12,47 @@
           "object": "LayoutText #text",
           "rect": [-8, 8, 48, 33],
           "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'xx'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'xx'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox 'y'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'y'",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutBlockFlow BODY",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='container'",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutBlockFlow HTML",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutText #text",
-          "reason": "selection"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow HTML",
+      "reason": "selection"
+    },
+    {
+      "object": "LayoutBlockFlow BODY",
+      "reason": "selection"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='container'",
+      "reason": "selection"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "selection"
+    },
+    {
+      "object": "InlineTextBox 'xx'",
+      "reason": "selection"
+    },
+    {
+      "object": "InlineTextBox 'y'",
+      "reason": "selection"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox 'xx'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox 'y'",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/paint/selection/invalidation-rect-includes-newline-for-vertical-lr-expected.txt b/third_party/WebKit/LayoutTests/paint/selection/invalidation-rect-includes-newline-for-vertical-lr-expected.txt
index 55ab591..00fcbf48 100644
--- a/third_party/WebKit/LayoutTests/paint/selection/invalidation-rect-includes-newline-for-vertical-lr-expected.txt
+++ b/third_party/WebKit/LayoutTests/paint/selection/invalidation-rect-includes-newline-for-vertical-lr-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -15,37 +17,47 @@
           "object": "LayoutText #text",
           "rect": [8, 8, 32, 48],
           "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox 'xx'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'xx'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox 'y'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'y'",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutBlockFlow BODY",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='container'",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutBlockFlow HTML",
-          "reason": "selection"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow HTML",
+      "reason": "selection"
+    },
+    {
+      "object": "LayoutBlockFlow BODY",
+      "reason": "selection"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='container'",
+      "reason": "selection"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "selection"
+    },
+    {
+      "object": "InlineTextBox 'xx'",
+      "reason": "selection"
+    },
+    {
+      "object": "InlineTextBox 'y'",
+      "reason": "selection"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "incremental"
+    },
+    {
+      "object": "InlineTextBox 'xx'",
+      "reason": "incremental"
+    },
+    {
+      "object": "InlineTextBox 'y'",
+      "reason": "incremental"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/paint/selection/invalidation-rect-includes-newline-for-vertical-rl-expected.txt b/third_party/WebKit/LayoutTests/paint/selection/invalidation-rect-includes-newline-for-vertical-rl-expected.txt
index 55ab591..00fcbf48 100644
--- a/third_party/WebKit/LayoutTests/paint/selection/invalidation-rect-includes-newline-for-vertical-rl-expected.txt
+++ b/third_party/WebKit/LayoutTests/paint/selection/invalidation-rect-includes-newline-for-vertical-rl-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -15,37 +17,47 @@
           "object": "LayoutText #text",
           "rect": [8, 8, 32, 48],
           "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox 'xx'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'xx'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox 'y'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'y'",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutBlockFlow BODY",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='container'",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutBlockFlow HTML",
-          "reason": "selection"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow HTML",
+      "reason": "selection"
+    },
+    {
+      "object": "LayoutBlockFlow BODY",
+      "reason": "selection"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='container'",
+      "reason": "selection"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "selection"
+    },
+    {
+      "object": "InlineTextBox 'xx'",
+      "reason": "selection"
+    },
+    {
+      "object": "InlineTextBox 'y'",
+      "reason": "selection"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "incremental"
+    },
+    {
+      "object": "InlineTextBox 'xx'",
+      "reason": "incremental"
+    },
+    {
+      "object": "InlineTextBox 'y'",
+      "reason": "incremental"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/paint/selection/invalidation-rect-with-br-includes-newline-expected.txt b/third_party/WebKit/LayoutTests/paint/selection/invalidation-rect-with-br-includes-newline-expected.txt
index c14c250..3b21630 100644
--- a/third_party/WebKit/LayoutTests/paint/selection/invalidation-rect-with-br-includes-newline-expected.txt
+++ b/third_party/WebKit/LayoutTests/paint/selection/invalidation-rect-with-br-includes-newline-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -20,41 +22,55 @@
           "object": "LayoutText #text",
           "rect": [8, 8, 16, 16],
           "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "became visible"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox 'a'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox 'b'",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutBR BR",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutBlockFlow BODY",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='container'",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutBlockFlow HTML",
-          "reason": "selection"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow HTML",
+      "reason": "selection"
+    },
+    {
+      "object": "LayoutBlockFlow BODY",
+      "reason": "selection"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='container'",
+      "reason": "selection"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "selection"
+    },
+    {
+      "object": "InlineTextBox 'a'",
+      "reason": "selection"
+    },
+    {
+      "object": "LayoutBR BR",
+      "reason": "selection"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "selection"
+    },
+    {
+      "object": "LayoutBR BR",
+      "reason": "became visible"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "became visible"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "selection"
+    },
+    {
+      "object": "InlineTextBox 'b'",
+      "reason": "selection"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/android/compositing/absolute-inside-out-of-view-fixed-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/absolute-inside-out-of-view-fixed-expected.txt
new file mode 100644
index 0000000..ec3f630
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/compositing/absolute-inside-out-of-view-fixed-expected.txt
@@ -0,0 +1,19 @@
+{
+  "bounds": [785, 2513],
+  "children": [
+    {
+      "bounds": [785, 2513],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [0, 200],
+          "bounds": [100, 100],
+          "contentsOpaque": true,
+          "drawsContent": true
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/compositing/clip-child-by-non-stacking-ancestor-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/clip-child-by-non-stacking-ancestor-expected.txt
new file mode 100644
index 0000000..3d1dda3
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/compositing/clip-child-by-non-stacking-ancestor-expected.txt
@@ -0,0 +1,20 @@
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [8, 8],
+          "bounds": [100, 100],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#C0C0C0"
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/compositing/columns/composited-in-paginated-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/columns/composited-in-paginated-expected.txt
new file mode 100644
index 0000000..e082c71
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/compositing/columns/composited-in-paginated-expected.txt
@@ -0,0 +1,20 @@
+{
+  "bounds": [1600, 585],
+  "children": [
+    {
+      "bounds": [1600, 585],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [818, 145],
+          "bounds": [100, 100],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#0000FF"
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/compositing/contents-opaque/background-clip-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/contents-opaque/background-clip-expected.txt
new file mode 100644
index 0000000..2eff0f5e
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/compositing/contents-opaque/background-clip-expected.txt
@@ -0,0 +1,32 @@
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [13, 8],
+          "bounds": [100, 100],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#008000"
+        },
+        {
+          "position": [13, 113],
+          "bounds": [100, 100],
+          "drawsContent": true,
+          "backgroundColor": "#008000"
+        },
+        {
+          "position": [13, 218],
+          "bounds": [100, 100],
+          "drawsContent": true,
+          "backgroundColor": "#008000"
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/compositing/contents-opaque/background-color-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/contents-opaque/background-color-expected.txt
new file mode 100644
index 0000000..eee3abf9
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/compositing/contents-opaque/background-color-expected.txt
@@ -0,0 +1,30 @@
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [8, 8],
+          "bounds": [100, 100]
+        },
+        {
+          "position": [8, 108],
+          "bounds": [100, 100],
+          "drawsContent": true,
+          "backgroundColor": "#00FF007F"
+        },
+        {
+          "position": [8, 208],
+          "bounds": [100, 100],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#008000"
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/compositing/contents-opaque/body-background-painted-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/contents-opaque/body-background-painted-expected.txt
new file mode 100644
index 0000000..48a7456
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/compositing/contents-opaque/body-background-painted-expected.txt
@@ -0,0 +1,32 @@
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "backgroundColor": "#D3D3D3",
+      "children": [
+        {
+          "bounds": [800, 600],
+          "drawsContent": true,
+          "backgroundColor": "#D3D3D3",
+          "children": [
+            {
+              "position": [8, 8],
+              "bounds": [200, 200],
+              "contentsOpaque": true,
+              "drawsContent": true,
+              "backgroundColor": "#008000"
+            },
+            {
+              "bounds": [800, 600],
+              "drawsContent": true
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/compositing/contents-opaque/body-background-skipped-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/contents-opaque/body-background-skipped-expected.txt
new file mode 100644
index 0000000..fe4acd9
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/compositing/contents-opaque/body-background-skipped-expected.txt
@@ -0,0 +1,31 @@
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "backgroundColor": "#0000FF",
+      "children": [
+        {
+          "bounds": [800, 600],
+          "drawsContent": true,
+          "children": [
+            {
+              "position": [8, 8],
+              "bounds": [200, 200],
+              "contentsOpaque": true,
+              "drawsContent": true,
+              "backgroundColor": "#008000"
+            },
+            {
+              "bounds": [800, 600],
+              "drawsContent": true
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/compositing/contents-opaque/filter-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/contents-opaque/filter-expected.txt
new file mode 100644
index 0000000..4e1017b
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/compositing/contents-opaque/filter-expected.txt
@@ -0,0 +1,23 @@
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [10, 10],
+          "bounds": [100, 100],
+          "drawsContent": true
+        },
+        {
+          "position": [10, 120],
+          "bounds": [100, 100],
+          "drawsContent": true
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/compositing/contents-opaque/hidden-with-visible-child-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/contents-opaque/hidden-with-visible-child-expected.txt
new file mode 100644
index 0000000..52e87ab
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/compositing/contents-opaque/hidden-with-visible-child-expected.txt
@@ -0,0 +1,19 @@
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [8, 13],
+          "bounds": [200, 100],
+          "drawsContent": true,
+          "backgroundColor": "#008000"
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/compositing/contents-opaque/hidden-with-visible-text-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/contents-opaque/hidden-with-visible-text-expected.txt
new file mode 100644
index 0000000..52e87ab
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/compositing/contents-opaque/hidden-with-visible-text-expected.txt
@@ -0,0 +1,19 @@
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [8, 13],
+          "bounds": [200, 100],
+          "drawsContent": true,
+          "backgroundColor": "#008000"
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/compositing/contents-opaque/layer-opacity-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/contents-opaque/layer-opacity-expected.txt
new file mode 100644
index 0000000..94974d5
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/compositing/contents-opaque/layer-opacity-expected.txt
@@ -0,0 +1,21 @@
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [8, 8],
+          "bounds": [100, 100],
+          "opacity": 0.5,
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#008000"
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/compositing/contents-opaque/overflow-hidden-child-layers-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/contents-opaque/overflow-hidden-child-layers-expected.txt
new file mode 100644
index 0000000..3b793fb
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/compositing/contents-opaque/overflow-hidden-child-layers-expected.txt
@@ -0,0 +1,19 @@
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [38, 30],
+          "bounds": [140, 140],
+          "drawsContent": true,
+          "backgroundColor": "#0000FF"
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/compositing/draws-content/webgl-background-layer-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/draws-content/webgl-background-layer-expected.txt
new file mode 100644
index 0000000..37f9b02
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/compositing/draws-content/webgl-background-layer-expected.txt
@@ -0,0 +1,44 @@
+ {
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [13, 8],
+          "bounds": [50, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#008000"
+        },
+        {
+          "position": [13, 73],
+          "bounds": [60, 60],
+          "drawsContent": true,
+          "backgroundColor": "#008000"
+        },
+        {
+          "position": [13, 138],
+          "bounds": [60, 60],
+          "drawsContent": true,
+          "backgroundColor": "#008000"
+        },
+        {
+          "position": [13, 203],
+          "bounds": [50, 50],
+          "drawsContent": true,
+          "backgroundColor": "#008000"
+        },
+        {
+          "position": [13, 268],
+          "bounds": [50, 50],
+          "drawsContent": true,
+          "backgroundColor": "#00FF007F"
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/compositing/filters/sw-layer-overlaps-hw-shadow-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/filters/sw-layer-overlaps-hw-shadow-expected.txt
new file mode 100644
index 0000000..34958e9
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/compositing/filters/sw-layer-overlaps-hw-shadow-expected.txt
@@ -0,0 +1,29 @@
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "shouldFlattenTransform": false,
+          "children": [
+            {
+              "position": [105, 105],
+              "bounds": [100, 100],
+              "contentsOpaque": true,
+              "drawsContent": true,
+              "backgroundColor": "#000000"
+            },
+            {
+              "bounds": [100, 100],
+              "drawsContent": true
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/compositing/fixed-body-background-positioned-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/fixed-body-background-positioned-expected.txt
new file mode 100644
index 0000000..bc6328a5
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/compositing/fixed-body-background-positioned-expected.txt
@@ -0,0 +1,30 @@
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [785, 600],
+      "children": [
+        {
+          "transformOrigin": [0, 0],
+          "bounds": [785, 600],
+          "contentsOpaque": true,
+          "drawsContent": true
+        },
+        {
+          "children": [
+            {
+              "bounds": [785, 3700],
+              "children": [
+                {
+                  "bounds": [785, 3700],
+                  "drawsContent": true
+                }
+              ]
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/compositing/fixed-position-changed-to-absolute-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/fixed-position-changed-to-absolute-expected.txt
new file mode 100644
index 0000000..aa81f353
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/compositing/fixed-position-changed-to-absolute-expected.txt
@@ -0,0 +1,31 @@
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "backgroundColor": "#402B3C",
+      "children": [
+        {
+          "shouldFlattenTransform": false,
+          "children": [
+            {
+              "position": [8, 13],
+              "bounds": [150, 150],
+              "contentsOpaque": true,
+              "drawsContent": true,
+              "backgroundColor": "#D9CCA7"
+            },
+            {
+              "position": [20, 20],
+              "bounds": [226, 180],
+              "drawsContent": true
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/compositing/force-compositing-mode/no-overflow-iframe-layer-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/force-compositing-mode/no-overflow-iframe-layer-expected.txt
new file mode 100644
index 0000000..9f9c614a9
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/compositing/force-compositing-mode/no-overflow-iframe-layer-expected.txt
@@ -0,0 +1,12 @@
+
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/compositing/force-compositing-mode/overflow-hidden-iframe-layer-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/force-compositing-mode/overflow-hidden-iframe-layer-expected.txt
new file mode 100644
index 0000000..9f9c614a9
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/compositing/force-compositing-mode/overflow-hidden-iframe-layer-expected.txt
@@ -0,0 +1,12 @@
+
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/compositing/force-compositing-mode/overflow-iframe-enter-compositing-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/force-compositing-mode/overflow-iframe-enter-compositing-expected.txt
new file mode 100644
index 0000000..3b1727d
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/compositing/force-compositing-mode/overflow-iframe-enter-compositing-expected.txt
@@ -0,0 +1,58 @@
+
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [8, 8],
+          "bounds": [154, 154],
+          "drawsContent": true,
+          "children": [
+            {
+              "position": [2, 2],
+              "bounds": [150, 150],
+              "children": [
+                {
+                  "bounds": [135, 135],
+                  "children": [
+                    {
+                      "children": [
+                        {
+                          "bounds": [508, 516],
+                          "children": [
+                            {
+                              "bounds": [508, 516],
+                              "drawsContent": true
+                            }
+                          ]
+                        }
+                      ]
+                    }
+                  ]
+                },
+                {
+                  "position": [0, 135],
+                  "bounds": [135, 15]
+                },
+                {
+                  "position": [135, 0],
+                  "bounds": [15, 135]
+                },
+                {
+                  "position": [135, 135],
+                  "bounds": [15, 15],
+                  "drawsContent": true
+                }
+              ]
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/compositing/force-compositing-mode/overflow-iframe-layer-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/force-compositing-mode/overflow-iframe-layer-expected.txt
new file mode 100644
index 0000000..3b1727d
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/compositing/force-compositing-mode/overflow-iframe-layer-expected.txt
@@ -0,0 +1,58 @@
+
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [8, 8],
+          "bounds": [154, 154],
+          "drawsContent": true,
+          "children": [
+            {
+              "position": [2, 2],
+              "bounds": [150, 150],
+              "children": [
+                {
+                  "bounds": [135, 135],
+                  "children": [
+                    {
+                      "children": [
+                        {
+                          "bounds": [508, 516],
+                          "children": [
+                            {
+                              "bounds": [508, 516],
+                              "drawsContent": true
+                            }
+                          ]
+                        }
+                      ]
+                    }
+                  ]
+                },
+                {
+                  "position": [0, 135],
+                  "bounds": [135, 15]
+                },
+                {
+                  "position": [135, 0],
+                  "bounds": [15, 135]
+                },
+                {
+                  "position": [135, 135],
+                  "bounds": [15, 15],
+                  "drawsContent": true
+                }
+              ]
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/compositing/geometry/ancestor-overflow-change-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/geometry/ancestor-overflow-change-expected.txt
new file mode 100644
index 0000000..dd78556
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/compositing/geometry/ancestor-overflow-change-expected.txt
@@ -0,0 +1,26 @@
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [8, 8],
+          "bounds": [100, 100],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#008000",
+          "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/android/compositing/geometry/bounds-clipped-composited-child-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/geometry/bounds-clipped-composited-child-expected.txt
new file mode 100644
index 0000000..526ee2e
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/compositing/geometry/bounds-clipped-composited-child-expected.txt
@@ -0,0 +1,25 @@
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [58, 8],
+          "transformOrigin": [50, 50],
+          "bounds": [200, 100],
+          "drawsContent": true,
+          "transform": [
+            [1, 0, 0, 0],
+            [0, 1, 0, 0],
+            [0, 0, 1, 0],
+            [-50, 0, 0, 1]
+          ]
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/compositing/geometry/bounds-ignores-hidden-composited-descendant-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/geometry/bounds-ignores-hidden-composited-descendant-expected.txt
new file mode 100644
index 0000000..38f6e9c
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/compositing/geometry/bounds-ignores-hidden-composited-descendant-expected.txt
@@ -0,0 +1,36 @@
+
+
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [10, 10],
+          "transformOrigin": [-10, -10],
+          "bounds": [590, 210],
+          "drawsContent": true
+        },
+        {
+          "position": [10, 260],
+          "transformOrigin": [-10, -10],
+          "bounds": [590, 210],
+          "drawsContent": true,
+          "children": [
+            {
+              "position": [490, 110],
+              "bounds": [100, 100],
+              "contentsOpaque": true,
+              "drawsContent": true,
+              "backgroundColor": "#0000FF"
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/compositing/geometry/bounds-ignores-hidden-dynamic-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/geometry/bounds-ignores-hidden-dynamic-expected.txt
new file mode 100644
index 0000000..a8da2d2
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/compositing/geometry/bounds-ignores-hidden-dynamic-expected.txt
@@ -0,0 +1,27 @@
+
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [10, 10],
+          "transformOrigin": [-10, -10],
+          "bounds": [540, 240],
+          "drawsContent": true
+        },
+        {
+          "position": [10, 260],
+          "transformOrigin": [-10, -10],
+          "bounds": [50, 50],
+          "contentsOpaque": true,
+          "drawsContent": true
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/compositing/geometry/bounds-ignores-hidden-dynamic-negzindex-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/geometry/bounds-ignores-hidden-dynamic-negzindex-expected.txt
new file mode 100644
index 0000000..6fc34fe
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/compositing/geometry/bounds-ignores-hidden-dynamic-negzindex-expected.txt
@@ -0,0 +1,42 @@
+
+
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "transformOrigin": [50, 50],
+          "bounds": [500, 250],
+          "drawsContent": true
+        },
+        {
+          "shouldFlattenTransform": false,
+          "children": [
+            {
+              "position": [0, 250],
+              "transformOrigin": [50, 50],
+              "bounds": [150, 150],
+              "drawsContent": true
+            },
+            {
+              "bounds": [792, 100],
+              "drawsContent": true
+            }
+          ]
+        },
+        {
+          "position": [0, 250],
+          "bounds": [100, 100],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#008000"
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/compositing/geometry/bounds-ignores-hidden-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/geometry/bounds-ignores-hidden-expected.txt
new file mode 100644
index 0000000..db88d00
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/compositing/geometry/bounds-ignores-hidden-expected.txt
@@ -0,0 +1,21 @@
+
+{
+  "bounds": [44990, 15063],
+  "children": [
+    {
+      "bounds": [44990, 15063],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [10, 10],
+          "transformOrigin": [-10, -10],
+          "bounds": [50, 50],
+          "contentsOpaque": true,
+          "drawsContent": true
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/compositing/geometry/clip-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/geometry/clip-expected.txt
new file mode 100644
index 0000000..cef1d5e8
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/compositing/geometry/clip-expected.txt
@@ -0,0 +1,46 @@
+Test CSS clip with composited layers. Left and right sides should look the same.
+
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [15, 15],
+          "bounds": [110, 110],
+          "drawsContent": true,
+          "backgroundColor": "#808080",
+          "transform": [
+            [1, 0, 0, 0],
+            [0, 1, 0, 0],
+            [0, 0, 1, 0],
+            [0, 0, 1, 1]
+          ]
+        },
+        {
+          "position": [215, 15],
+          "bounds": [110, 110],
+          "shouldFlattenTransform": false,
+          "children": [
+            {
+              "position": [-5, -5],
+              "bounds": [120, 120],
+              "drawsContent": true,
+              "backgroundColor": "#00000033",
+              "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/android/compositing/geometry/clip-inside-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/geometry/clip-inside-expected.txt
new file mode 100644
index 0000000..1b64e82a
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/compositing/geometry/clip-inside-expected.txt
@@ -0,0 +1,48 @@
+Test CSS clip with composited layers. Left and right sides should look the same.
+
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [25, 35],
+          "transformOrigin": [45, 35],
+          "bounds": [90, 80],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#808080",
+          "transform": [
+            [1, 0, 0, 0],
+            [0, 1, 0, 0],
+            [0, 0, 1, 0],
+            [0, 0, 1, 1]
+          ]
+        },
+        {
+          "position": [225, 35],
+          "bounds": [90, 80],
+          "shouldFlattenTransform": false,
+          "children": [
+            {
+              "position": [-15, -25],
+              "bounds": [120, 120],
+              "drawsContent": true,
+              "backgroundColor": "#00000033",
+              "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/android/compositing/geometry/clip-with-shadow-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/geometry/clip-with-shadow-expected.txt
new file mode 100644
index 0000000..febf365
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/compositing/geometry/clip-with-shadow-expected.txt
@@ -0,0 +1,44 @@
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [15, 15],
+          "bounds": [110, 110],
+          "drawsContent": true,
+          "backgroundColor": "#808080",
+          "transform": [
+            [1, 0, 0, 0],
+            [0, 1, 0, 0],
+            [0, 0, 1, 0],
+            [0, 0, 1, 1]
+          ]
+        },
+        {
+          "position": [215, 15],
+          "bounds": [110, 110],
+          "shouldFlattenTransform": false,
+          "children": [
+            {
+              "position": [-5, -5],
+              "bounds": [120, 120],
+              "drawsContent": true,
+              "backgroundColor": "#00000033",
+              "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/android/compositing/geometry/composited-in-columns-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/geometry/composited-in-columns-expected.txt
new file mode 100644
index 0000000..eba7895
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/compositing/geometry/composited-in-columns-expected.txt
@@ -0,0 +1,43 @@
+ {
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [14, 164],
+          "bounds": [210, 60],
+          "drawsContent": true,
+          "backgroundColor": "#0000FF",
+          "children": [
+            {
+              "position": [5, 5],
+              "bounds": [50, 50],
+              "contentsOpaque": true,
+              "drawsContent": true,
+              "backgroundColor": "#008000"
+            }
+          ]
+        },
+        {
+          "position": [272, 89],
+          "bounds": [210, 60],
+          "drawsContent": true,
+          "backgroundColor": "#0000FF",
+          "children": [
+            {
+              "position": [5, 5],
+              "bounds": [50, 50],
+              "contentsOpaque": true,
+              "drawsContent": true,
+              "backgroundColor": "#008000"
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/compositing/geometry/flipped-writing-mode-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/geometry/flipped-writing-mode-expected.txt
new file mode 100644
index 0000000..73492c5
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/compositing/geometry/flipped-writing-mode-expected.txt
@@ -0,0 +1,29 @@
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [18, 10],
+          "bounds": [250, 200],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#C0C0C0",
+          "children": [
+            {
+              "position": [35, 10],
+              "transformOrigin": [145, 50],
+              "bounds": [195, 100],
+              "drawsContent": true,
+              "backgroundColor": "#0000FF"
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/compositing/geometry/foreground-layer-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/geometry/foreground-layer-expected.txt
new file mode 100644
index 0000000..01cf10f1
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/compositing/geometry/foreground-layer-expected.txt
@@ -0,0 +1,63 @@
+  
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [18, 88],
+          "bounds": [320, 320],
+          "drawsContent": true,
+          "backgroundColor": "#FF0000",
+          "children": [
+            {
+              "position": [60, 60],
+              "bounds": [50, 50],
+              "transform": [
+                [1, 0, 0, 0],
+                [0, 1, 0, 0],
+                [0, 0, 1, 0],
+                [0, 0, 1, 1]
+              ]
+            },
+            {
+              "bounds": [320, 320],
+              "drawsContent": true
+            }
+          ]
+        },
+        {
+          "position": [362, 18],
+          "bounds": [320, 320],
+          "drawsContent": true,
+          "backgroundColor": "#FF0000",
+          "children": [
+            {
+              "position": [60, 60],
+              "bounds": [200, 200],
+              "children": [
+                {
+                  "bounds": [50, 50],
+                  "transform": [
+                    [1, 0, 0, 0],
+                    [0, 1, 0, 0],
+                    [0, 0, 1, 0],
+                    [0, 0, 1, 1]
+                  ]
+                },
+                {
+                  "bounds": [200, 200],
+                  "drawsContent": true
+                }
+              ]
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/compositing/geometry/layer-due-to-layer-children-deep-switch-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/geometry/layer-due-to-layer-children-deep-switch-expected.txt
new file mode 100644
index 0000000..5c3e881a
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/compositing/geometry/layer-due-to-layer-children-deep-switch-expected.txt
@@ -0,0 +1,85 @@
+This content is in the parent
+Box should switch between perspective and flat
+
+First dump layer tree:
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true
+    }
+  ]
+}
+
+Second dump layer tree:
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [8, 8],
+          "bounds": [342, 292],
+          "drawsContent": true,
+          "children": [
+            {
+              "position": [31, 41],
+              "bounds": [250, 220],
+              "contentsOpaque": true,
+              "drawsContent": true,
+              "backgroundColor": "#0000FF",
+              "children": [
+                {
+                  "position": [10, 10],
+                  "bounds": [200, 200],
+                  "contentsOpaque": true,
+                  "drawsContent": true,
+                  "backgroundColor": "#FFFF00",
+                  "transform": [
+                    [0.866025403784439, 0.5, 0, 0],
+                    [-0.5, 0.866025403784439, 0, 0],
+                    [0, 0, 1, 0],
+                    [0, 0, 0, 1]
+                  ],
+                  "children": [
+                    {
+                      "position": [100, 0],
+                      "bounds": [250, 100],
+                      "contentsOpaque": true,
+                      "drawsContent": true,
+                      "backgroundColor": "#008000",
+                      "transform": [
+                        [0.5, 0, -0.866025403784439, 0.0021650635094611],
+                        [0, 1, 0, 0],
+                        [0.866025403784439, 0, 0.5, -0.00125],
+                        [-30, 30, 100, 0.75]
+                      ]
+                    }
+                  ]
+                }
+              ]
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}
+
+Third dump layer tree:
+{
+  "bounds": [785, 1446],
+  "children": [
+    {
+      "bounds": [785, 1446],
+      "contentsOpaque": true,
+      "drawsContent": true
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/compositing/geometry/layer-due-to-layer-children-switch-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/geometry/layer-due-to-layer-children-switch-expected.txt
new file mode 100644
index 0000000..5a9d647
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/compositing/geometry/layer-due-to-layer-children-switch-expected.txt
@@ -0,0 +1,61 @@
+This content is in the parent
+Box should switch between perspective and flat
+
+First dump layer tree:
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true
+    }
+  ]
+}
+
+Second dump layer tree:
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [8, 8],
+          "bounds": [242, 192],
+          "drawsContent": true,
+          "children": [
+            {
+              "position": [121, 41],
+              "bounds": [250, 100],
+              "contentsOpaque": true,
+              "drawsContent": true,
+              "backgroundColor": "#008000",
+              "transform": [
+                [0.707106781186548, 0, -0.707106781186548, 0.00117851130197758],
+                [0, 1, 0, 0],
+                [0.707106781186548, 0, 0.707106781186548, -0.00117851130197758],
+                [-50, 10, 100, 0.833333333333333]
+              ]
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}
+
+Third dump layer tree:
+{
+  "bounds": [785, 962],
+  "children": [
+    {
+      "bounds": [785, 962],
+      "contentsOpaque": true,
+      "drawsContent": true
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/compositing/geometry/limit-layer-bounds-opacity-transition-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/geometry/limit-layer-bounds-opacity-transition-expected.txt
new file mode 100644
index 0000000..aed6172
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/compositing/geometry/limit-layer-bounds-opacity-transition-expected.txt
@@ -0,0 +1,29 @@
+Test
+Fader
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "shouldFlattenTransform": false,
+          "children": [
+            {
+              "position": [8, 8],
+              "bounds": [1, 1]
+            },
+            {
+              "position": [-9992, -1],
+              "bounds": [10100, 100],
+              "drawsContent": true
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/compositing/geometry/limit-layer-bounds-overflow-root-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/geometry/limit-layer-bounds-overflow-root-expected.txt
similarity index 100%
rename from third_party/WebKit/LayoutTests/compositing/geometry/limit-layer-bounds-overflow-root-expected.txt
rename to third_party/WebKit/LayoutTests/platform/android/compositing/geometry/limit-layer-bounds-overflow-root-expected.txt
diff --git a/third_party/WebKit/LayoutTests/platform/android/compositing/geometry/limit-layer-bounds-positioned-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/geometry/limit-layer-bounds-positioned-expected.txt
new file mode 100644
index 0000000..5a4a490a
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/compositing/geometry/limit-layer-bounds-positioned-expected.txt
@@ -0,0 +1,28 @@
+Text here
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "shouldFlattenTransform": false,
+          "children": [
+            {
+              "position": [29, 29],
+              "bounds": [100, 100]
+            },
+            {
+              "position": [-9971, 8],
+              "bounds": [10121, 142],
+              "drawsContent": true
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/compositing/geometry/limit-layer-bounds-positioned-transition-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/geometry/limit-layer-bounds-positioned-transition-expected.txt
new file mode 100644
index 0000000..7d1cf22
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/compositing/geometry/limit-layer-bounds-positioned-transition-expected.txt
@@ -0,0 +1,28 @@
+Text here
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "shouldFlattenTransform": false,
+          "children": [
+            {
+              "position": [29, 29],
+              "bounds": [100, 100]
+            },
+            {
+              "position": [-771, 8],
+              "bounds": [1200, 142],
+              "drawsContent": true
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/compositing/geometry/limit-layer-bounds-transformed-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/geometry/limit-layer-bounds-transformed-expected.txt
new file mode 100644
index 0000000..b64e7eee
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/compositing/geometry/limit-layer-bounds-transformed-expected.txt
@@ -0,0 +1,28 @@
+Text here
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "shouldFlattenTransform": false,
+          "children": [
+            {
+              "position": [129, 29],
+              "bounds": [100, 100]
+            },
+            {
+              "position": [-871, 8],
+              "bounds": [1221, 142],
+              "drawsContent": true
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/compositing/geometry/preserve-3d-switching-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/geometry/preserve-3d-switching-expected.txt
new file mode 100644
index 0000000..54090a2
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/compositing/geometry/preserve-3d-switching-expected.txt
@@ -0,0 +1,68 @@
+The green box appear angled out from the yellow box and embedded in it.
+
+transform: translateZ(-100px) rotateY(45deg);
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [108, 72],
+          "bounds": [304, 304],
+          "drawsContent": true,
+          "children": [
+            {
+              "bounds": [304, 304],
+              "shouldFlattenTransform": false,
+              "transform": [
+                [1, 0, 0, 0],
+                [0, 1, 0, 0],
+                [0, 0, 1, -0.002],
+                [0, 0, 0, 1]
+              ],
+              "children": [
+                {
+                  "position": [12, 12],
+                  "bounds": [280, 280],
+                  "opacity": 0.800000011920929,
+                  "contentsOpaque": true,
+                  "shouldFlattenTransform": false,
+                  "3dRenderingContext": 1,
+                  "drawsContent": true,
+                  "backgroundColor": "#FFFF00",
+                  "transform": [
+                    [0.766044443118978, -0.556670399226419, -0.32139380484327, 0],
+                    [0, 0.5, -0.866025403784439, 0],
+                    [0.642787609686539, 0.663413948168938, 0.383022221559489, 0],
+                    [0, 0, 0, 1]
+                  ],
+                  "children": [
+                    {
+                      "position": [40, 40],
+                      "bounds": [200, 200],
+                      "opacity": 0.699999988079071,
+                      "contentsOpaque": true,
+                      "3dRenderingContext": 1,
+                      "drawsContent": true,
+                      "backgroundColor": "#008000",
+                      "transform": [
+                        [0.766044443118978, 0, 0.642787609686539, 0],
+                        [0, 1, 0, 0],
+                        [-0.642787609686539, 0, 0.766044443118978, 0],
+                        [0, 0, 50, 1]
+                      ]
+                    }
+                  ]
+                }
+              ]
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/compositing/iframes/become-composited-nested-iframes-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/iframes/become-composited-nested-iframes-expected.txt
new file mode 100644
index 0000000..ce88aa5a
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/compositing/iframes/become-composited-nested-iframes-expected.txt
@@ -0,0 +1,168 @@
+
+{
+  "bounds": [785, 1500],
+  "children": [
+    {
+      "bounds": [785, 1500],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [20, 120],
+          "bounds": [284, 204],
+          "drawsContent": true,
+          "children": [
+            {
+              "position": [2, 2],
+              "bounds": [280, 200],
+              "children": [
+                {
+                  "bounds": [280, 200],
+                  "children": [
+                    {
+                      "children": [
+                        {
+                          "bounds": [280, 200],
+                          "children": [
+                            {
+                              "bounds": [280, 200],
+                              "drawsContent": true,
+                              "children": [
+                                {
+                                  "position": [8, 8],
+                                  "bounds": [252, 172],
+                                  "drawsContent": true,
+                                  "children": [
+                                    {
+                                      "position": [1, 1],
+                                      "bounds": [250, 170],
+                                      "children": [
+                                        {
+                                          "bounds": [250, 170],
+                                          "children": [
+                                            {
+                                              "children": [
+                                                {
+                                                  "bounds": [250, 230],
+                                                  "children": [
+                                                    {
+                                                      "bounds": [250, 230],
+                                                      "drawsContent": true,
+                                                      "backgroundColor": "#C0C0C0",
+                                                      "children": [
+                                                        {
+                                                          "position": [18, 10],
+                                                          "bounds": [210, 210],
+                                                          "contentsOpaque": true,
+                                                          "drawsContent": true,
+                                                          "backgroundColor": "#0000FF"
+                                                        }
+                                                      ]
+                                                    }
+                                                  ]
+                                                }
+                                              ]
+                                            }
+                                          ]
+                                        }
+                                      ]
+                                    }
+                                  ]
+                                }
+                              ]
+                            }
+                          ]
+                        }
+                      ]
+                    }
+                  ]
+                }
+              ]
+            }
+          ]
+        },
+        {
+          "position": [20, 344],
+          "bounds": [284, 204],
+          "drawsContent": true,
+          "children": [
+            {
+              "position": [2, 2],
+              "bounds": [280, 200],
+              "children": [
+                {
+                  "bounds": [280, 200],
+                  "children": [
+                    {
+                      "children": [
+                        {
+                          "bounds": [280, 200],
+                          "children": [
+                            {
+                              "bounds": [280, 200],
+                              "drawsContent": true,
+                              "children": [
+                                {
+                                  "position": [8, 8],
+                                  "bounds": [252, 172],
+                                  "drawsContent": true,
+                                  "children": [
+                                    {
+                                      "position": [1, 1],
+                                      "bounds": [250, 170],
+                                      "children": [
+                                        {
+                                          "bounds": [250, 170],
+                                          "children": [
+                                            {
+                                              "children": [
+                                                {
+                                                  "bounds": [250, 230],
+                                                  "children": [
+                                                    {
+                                                      "bounds": [250, 230],
+                                                      "drawsContent": true,
+                                                      "backgroundColor": "#C0C0C0",
+                                                      "children": [
+                                                        {
+                                                          "position": [18, 10],
+                                                          "bounds": [210, 210],
+                                                          "contentsOpaque": true,
+                                                          "drawsContent": true,
+                                                          "backgroundColor": "#0000FF"
+                                                        }
+                                                      ]
+                                                    }
+                                                  ]
+                                                }
+                                              ]
+                                            }
+                                          ]
+                                        }
+                                      ]
+                                    }
+                                  ]
+                                }
+                              ]
+                            }
+                          ]
+                        }
+                      ]
+                    }
+                  ]
+                }
+              ]
+            }
+          ]
+        },
+        {
+          "bounds": [100, 100],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#0000FF"
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/compositing/iframes/become-overlapped-iframe-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/iframes/become-overlapped-iframe-expected.txt
new file mode 100644
index 0000000..bf26c4d3
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/compositing/iframes/become-overlapped-iframe-expected.txt
@@ -0,0 +1,65 @@
+
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [58, 58],
+          "bounds": [350, 200],
+          "drawsContent": true,
+          "children": [
+            {
+              "position": [15, 15],
+              "bounds": [320, 170],
+              "children": [
+                {
+                  "bounds": [305, 170],
+                  "children": [
+                    {
+                      "children": [
+                        {
+                          "bounds": [305, 230],
+                          "children": [
+                            {
+                              "bounds": [305, 230],
+                              "drawsContent": true,
+                              "backgroundColor": "#C0C0C0",
+                              "children": [
+                                {
+                                  "position": [18, 10],
+                                  "bounds": [210, 210],
+                                  "contentsOpaque": true,
+                                  "drawsContent": true,
+                                  "backgroundColor": "#0000FF"
+                                }
+                              ]
+                            }
+                          ]
+                        }
+                      ]
+                    }
+                  ]
+                },
+                {
+                  "position": [305, 0],
+                  "bounds": [15, 170]
+                }
+              ]
+            }
+          ]
+        },
+        {
+          "position": [5, 5],
+          "bounds": [150, 150],
+          "drawsContent": true,
+          "backgroundColor": "#00000099"
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/compositing/iframes/composited-parent-iframe-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/iframes/composited-parent-iframe-expected.txt
new file mode 100644
index 0000000..e514691b
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/compositing/iframes/composited-parent-iframe-expected.txt
@@ -0,0 +1,59 @@
+
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [-12, -12],
+          "bounds": [370, 220],
+          "drawsContent": true,
+          "children": [
+            {
+              "position": [35, 35],
+              "bounds": [300, 150],
+              "children": [
+                {
+                  "bounds": [285, 150],
+                  "children": [
+                    {
+                      "children": [
+                        {
+                          "bounds": [285, 230],
+                          "children": [
+                            {
+                              "bounds": [285, 230],
+                              "drawsContent": true,
+                              "backgroundColor": "#C0C0C0",
+                              "children": [
+                                {
+                                  "position": [18, 10],
+                                  "bounds": [210, 210],
+                                  "contentsOpaque": true,
+                                  "drawsContent": true,
+                                  "backgroundColor": "#0000FF"
+                                }
+                              ]
+                            }
+                          ]
+                        }
+                      ]
+                    }
+                  ]
+                },
+                {
+                  "position": [285, 0],
+                  "bounds": [15, 150]
+                }
+              ]
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/compositing/iframes/connect-compositing-iframe-delayed-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/iframes/connect-compositing-iframe-delayed-expected.txt
new file mode 100644
index 0000000..fda7c3a
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/compositing/iframes/connect-compositing-iframe-delayed-expected.txt
@@ -0,0 +1,68 @@
+
+When the parent document becomes composited, the layer trees should get connected together.
+
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [8, 108],
+          "bounds": [370, 220],
+          "drawsContent": true,
+          "children": [
+            {
+              "position": [35, 35],
+              "bounds": [300, 150],
+              "children": [
+                {
+                  "bounds": [285, 150],
+                  "children": [
+                    {
+                      "children": [
+                        {
+                          "bounds": [285, 230],
+                          "children": [
+                            {
+                              "bounds": [285, 230],
+                              "drawsContent": true,
+                              "backgroundColor": "#C0C0C0",
+                              "children": [
+                                {
+                                  "position": [18, 10],
+                                  "bounds": [210, 210],
+                                  "contentsOpaque": true,
+                                  "drawsContent": true,
+                                  "backgroundColor": "#0000FF"
+                                }
+                              ]
+                            }
+                          ]
+                        }
+                      ]
+                    }
+                  ]
+                },
+                {
+                  "position": [285, 0],
+                  "bounds": [15, 150]
+                }
+              ]
+            }
+          ]
+        },
+        {
+          "position": [8, 8],
+          "bounds": [100, 100],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#0000FF"
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/compositing/iframes/connect-compositing-iframe-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/iframes/connect-compositing-iframe-expected.txt
new file mode 100644
index 0000000..a80e5498
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/compositing/iframes/connect-compositing-iframe-expected.txt
@@ -0,0 +1,65 @@
+
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [8, 8],
+          "bounds": [370, 220],
+          "drawsContent": true,
+          "children": [
+            {
+              "position": [35, 35],
+              "bounds": [300, 150],
+              "children": [
+                {
+                  "bounds": [285, 150],
+                  "children": [
+                    {
+                      "children": [
+                        {
+                          "bounds": [285, 230],
+                          "children": [
+                            {
+                              "bounds": [285, 230],
+                              "drawsContent": true,
+                              "backgroundColor": "#C0C0C0",
+                              "children": [
+                                {
+                                  "position": [18, 10],
+                                  "bounds": [210, 210],
+                                  "contentsOpaque": true,
+                                  "drawsContent": true,
+                                  "backgroundColor": "#0000FF"
+                                }
+                              ]
+                            }
+                          ]
+                        }
+                      ]
+                    }
+                  ]
+                },
+                {
+                  "position": [285, 0],
+                  "bounds": [15, 150]
+                }
+              ]
+            }
+          ]
+        },
+        {
+          "position": [5, 5],
+          "bounds": [50, 50],
+          "drawsContent": true,
+          "backgroundColor": "#00000033"
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/compositing/iframes/connect-compositing-iframe2-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/iframes/connect-compositing-iframe2-expected.txt
new file mode 100644
index 0000000..a80e5498
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/compositing/iframes/connect-compositing-iframe2-expected.txt
@@ -0,0 +1,65 @@
+
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [8, 8],
+          "bounds": [370, 220],
+          "drawsContent": true,
+          "children": [
+            {
+              "position": [35, 35],
+              "bounds": [300, 150],
+              "children": [
+                {
+                  "bounds": [285, 150],
+                  "children": [
+                    {
+                      "children": [
+                        {
+                          "bounds": [285, 230],
+                          "children": [
+                            {
+                              "bounds": [285, 230],
+                              "drawsContent": true,
+                              "backgroundColor": "#C0C0C0",
+                              "children": [
+                                {
+                                  "position": [18, 10],
+                                  "bounds": [210, 210],
+                                  "contentsOpaque": true,
+                                  "drawsContent": true,
+                                  "backgroundColor": "#0000FF"
+                                }
+                              ]
+                            }
+                          ]
+                        }
+                      ]
+                    }
+                  ]
+                },
+                {
+                  "position": [285, 0],
+                  "bounds": [15, 150]
+                }
+              ]
+            }
+          ]
+        },
+        {
+          "position": [5, 5],
+          "bounds": [50, 50],
+          "drawsContent": true,
+          "backgroundColor": "#00000033"
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/compositing/iframes/connect-compositing-iframe3-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/iframes/connect-compositing-iframe3-expected.txt
new file mode 100644
index 0000000..c00f334
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/compositing/iframes/connect-compositing-iframe3-expected.txt
@@ -0,0 +1,59 @@
+
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [8, 8],
+          "bounds": [370, 220],
+          "drawsContent": true,
+          "children": [
+            {
+              "position": [35, 35],
+              "bounds": [300, 150],
+              "children": [
+                {
+                  "bounds": [285, 150],
+                  "children": [
+                    {
+                      "children": [
+                        {
+                          "bounds": [285, 230],
+                          "children": [
+                            {
+                              "bounds": [285, 230],
+                              "drawsContent": true,
+                              "backgroundColor": "#C0C0C0",
+                              "children": [
+                                {
+                                  "position": [18, 10],
+                                  "bounds": [210, 210],
+                                  "contentsOpaque": true,
+                                  "drawsContent": true,
+                                  "backgroundColor": "#0000FF"
+                                }
+                              ]
+                            }
+                          ]
+                        }
+                      ]
+                    }
+                  ]
+                },
+                {
+                  "position": [285, 0],
+                  "bounds": [15, 150]
+                }
+              ]
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/compositing/iframes/enter-compositing-iframe-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/iframes/enter-compositing-iframe-expected.txt
new file mode 100644
index 0000000..a80e5498
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/compositing/iframes/enter-compositing-iframe-expected.txt
@@ -0,0 +1,65 @@
+
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [8, 8],
+          "bounds": [370, 220],
+          "drawsContent": true,
+          "children": [
+            {
+              "position": [35, 35],
+              "bounds": [300, 150],
+              "children": [
+                {
+                  "bounds": [285, 150],
+                  "children": [
+                    {
+                      "children": [
+                        {
+                          "bounds": [285, 230],
+                          "children": [
+                            {
+                              "bounds": [285, 230],
+                              "drawsContent": true,
+                              "backgroundColor": "#C0C0C0",
+                              "children": [
+                                {
+                                  "position": [18, 10],
+                                  "bounds": [210, 210],
+                                  "contentsOpaque": true,
+                                  "drawsContent": true,
+                                  "backgroundColor": "#0000FF"
+                                }
+                              ]
+                            }
+                          ]
+                        }
+                      ]
+                    }
+                  ]
+                },
+                {
+                  "position": [285, 0],
+                  "bounds": [15, 150]
+                }
+              ]
+            }
+          ]
+        },
+        {
+          "position": [5, 5],
+          "bounds": [50, 50],
+          "drawsContent": true,
+          "backgroundColor": "#00000033"
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/compositing/iframes/iframe-resize-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/iframes/iframe-resize-expected.txt
new file mode 100644
index 0000000..89ecd0d6
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/compositing/iframes/iframe-resize-expected.txt
@@ -0,0 +1,65 @@
+
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [8, 8],
+          "bounds": [470, 190],
+          "drawsContent": true,
+          "children": [
+            {
+              "position": [35, 35],
+              "bounds": [400, 120],
+              "children": [
+                {
+                  "bounds": [385, 120],
+                  "children": [
+                    {
+                      "children": [
+                        {
+                          "bounds": [385, 230],
+                          "children": [
+                            {
+                              "bounds": [385, 230],
+                              "drawsContent": true,
+                              "backgroundColor": "#C0C0C0",
+                              "children": [
+                                {
+                                  "position": [18, 10],
+                                  "bounds": [210, 210],
+                                  "contentsOpaque": true,
+                                  "drawsContent": true,
+                                  "backgroundColor": "#0000FF"
+                                }
+                              ]
+                            }
+                          ]
+                        }
+                      ]
+                    }
+                  ]
+                },
+                {
+                  "position": [385, 0],
+                  "bounds": [15, 120]
+                }
+              ]
+            }
+          ]
+        },
+        {
+          "position": [5, 5],
+          "bounds": [50, 50],
+          "drawsContent": true,
+          "backgroundColor": "#00000033"
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/compositing/iframes/iframe-size-from-zero-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/iframes/iframe-size-from-zero-expected.txt
new file mode 100644
index 0000000..58df3a24
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/compositing/iframes/iframe-size-from-zero-expected.txt
@@ -0,0 +1,65 @@
+
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [28, 28],
+          "bounds": [330, 180],
+          "drawsContent": true,
+          "children": [
+            {
+              "position": [15, 15],
+              "bounds": [300, 150],
+              "children": [
+                {
+                  "bounds": [285, 150],
+                  "children": [
+                    {
+                      "children": [
+                        {
+                          "bounds": [285, 230],
+                          "children": [
+                            {
+                              "bounds": [285, 230],
+                              "drawsContent": true,
+                              "backgroundColor": "#C0C0C0",
+                              "children": [
+                                {
+                                  "position": [18, 10],
+                                  "bounds": [210, 210],
+                                  "contentsOpaque": true,
+                                  "drawsContent": true,
+                                  "backgroundColor": "#0000FF"
+                                }
+                              ]
+                            }
+                          ]
+                        }
+                      ]
+                    }
+                  ]
+                },
+                {
+                  "position": [285, 0],
+                  "bounds": [15, 150]
+                }
+              ]
+            }
+          ]
+        },
+        {
+          "position": [5, 5],
+          "bounds": [50, 50],
+          "drawsContent": true,
+          "backgroundColor": "#00000033"
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/compositing/iframes/invisible-nested-iframe-show-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/iframes/invisible-nested-iframe-show-expected.txt
new file mode 100644
index 0000000..fa4d0fa4
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/compositing/iframes/invisible-nested-iframe-show-expected.txt
@@ -0,0 +1,105 @@
+
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [-12, -12],
+          "bounds": [370, 220],
+          "drawsContent": true,
+          "children": [
+            {
+              "position": [35, 35],
+              "bounds": [300, 150],
+              "children": [
+                {
+                  "bounds": [285, 150],
+                  "children": [
+                    {
+                      "children": [
+                        {
+                          "bounds": [285, 193],
+                          "children": [
+                            {
+                              "bounds": [285, 193],
+                              "drawsContent": true,
+                              "children": [
+                                {
+                                  "position": [8, 8],
+                                  "bounds": [252, 172],
+                                  "drawsContent": true,
+                                  "children": [
+                                    {
+                                      "position": [1, 1],
+                                      "bounds": [250, 170],
+                                      "children": [
+                                        {
+                                          "bounds": [250, 170],
+                                          "children": [
+                                            {
+                                              "children": [
+                                                {
+                                                  "bounds": [250, 230],
+                                                  "children": [
+                                                    {
+                                                      "bounds": [250, 230],
+                                                      "drawsContent": true,
+                                                      "backgroundColor": "#C0C0C0",
+                                                      "children": [
+                                                        {
+                                                          "position": [18, 10],
+                                                          "bounds": [210, 210],
+                                                          "contentsOpaque": true,
+                                                          "drawsContent": true,
+                                                          "backgroundColor": "#0000FF"
+                                                        }
+                                                      ]
+                                                    }
+                                                  ]
+                                                }
+                                              ]
+                                            }
+                                          ]
+                                        }
+                                      ]
+                                    }
+                                  ]
+                                }
+                              ]
+                            }
+                          ]
+                        }
+                      ]
+                    }
+                  ]
+                },
+                {
+                  "position": [285, 0],
+                  "bounds": [15, 150]
+                }
+              ]
+            }
+          ]
+        },
+        {
+          "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/android/compositing/iframes/overlapped-iframe-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/iframes/overlapped-iframe-expected.txt
new file mode 100644
index 0000000..a80e5498
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/compositing/iframes/overlapped-iframe-expected.txt
@@ -0,0 +1,65 @@
+
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [8, 8],
+          "bounds": [370, 220],
+          "drawsContent": true,
+          "children": [
+            {
+              "position": [35, 35],
+              "bounds": [300, 150],
+              "children": [
+                {
+                  "bounds": [285, 150],
+                  "children": [
+                    {
+                      "children": [
+                        {
+                          "bounds": [285, 230],
+                          "children": [
+                            {
+                              "bounds": [285, 230],
+                              "drawsContent": true,
+                              "backgroundColor": "#C0C0C0",
+                              "children": [
+                                {
+                                  "position": [18, 10],
+                                  "bounds": [210, 210],
+                                  "contentsOpaque": true,
+                                  "drawsContent": true,
+                                  "backgroundColor": "#0000FF"
+                                }
+                              ]
+                            }
+                          ]
+                        }
+                      ]
+                    }
+                  ]
+                },
+                {
+                  "position": [285, 0],
+                  "bounds": [15, 150]
+                }
+              ]
+            }
+          ]
+        },
+        {
+          "position": [5, 5],
+          "bounds": [50, 50],
+          "drawsContent": true,
+          "backgroundColor": "#00000033"
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/compositing/iframes/overlapped-iframe-iframe-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/iframes/overlapped-iframe-iframe-expected.txt
new file mode 100644
index 0000000..3568e77
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/compositing/iframes/overlapped-iframe-iframe-expected.txt
@@ -0,0 +1,58 @@
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "bounds": [304, 304],
+          "drawsContent": true,
+          "children": [
+            {
+              "position": [2, 2],
+              "bounds": [300, 300],
+              "children": [
+                {
+                  "bounds": [300, 300],
+                  "children": [
+                    {
+                      "children": [
+                        {
+                          "bounds": [300, 300],
+                          "children": [
+                            {
+                              "bounds": [300, 300],
+                              "drawsContent": true,
+                              "backgroundColor": "#C0C0C0",
+                              "children": [
+                                {
+                                  "position": [18, 10],
+                                  "bounds": [210, 210],
+                                  "contentsOpaque": true,
+                                  "drawsContent": true,
+                                  "backgroundColor": "#0000FF"
+                                }
+                              ]
+                            }
+                          ]
+                        }
+                      ]
+                    }
+                  ]
+                }
+              ]
+            }
+          ]
+        },
+        {
+          "position": [250, 0],
+          "bounds": [304, 304],
+          "drawsContent": true
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/compositing/iframes/overlapped-nested-iframes-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/iframes/overlapped-nested-iframes-expected.txt
new file mode 100644
index 0000000..f917c856
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/compositing/iframes/overlapped-nested-iframes-expected.txt
@@ -0,0 +1,168 @@
+
+{
+  "bounds": [785, 1650],
+  "children": [
+    {
+      "bounds": [785, 1650],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [20, 150],
+          "bounds": [284, 204],
+          "drawsContent": true,
+          "children": [
+            {
+              "position": [2, 2],
+              "bounds": [280, 200],
+              "children": [
+                {
+                  "bounds": [280, 200],
+                  "children": [
+                    {
+                      "children": [
+                        {
+                          "bounds": [280, 200],
+                          "children": [
+                            {
+                              "bounds": [280, 200],
+                              "drawsContent": true,
+                              "children": [
+                                {
+                                  "position": [8, 8],
+                                  "bounds": [252, 172],
+                                  "drawsContent": true,
+                                  "children": [
+                                    {
+                                      "position": [1, 1],
+                                      "bounds": [250, 170],
+                                      "children": [
+                                        {
+                                          "bounds": [250, 170],
+                                          "children": [
+                                            {
+                                              "children": [
+                                                {
+                                                  "bounds": [250, 230],
+                                                  "children": [
+                                                    {
+                                                      "bounds": [250, 230],
+                                                      "drawsContent": true,
+                                                      "backgroundColor": "#C0C0C0",
+                                                      "children": [
+                                                        {
+                                                          "position": [18, 10],
+                                                          "bounds": [210, 210],
+                                                          "contentsOpaque": true,
+                                                          "drawsContent": true,
+                                                          "backgroundColor": "#0000FF"
+                                                        }
+                                                      ]
+                                                    }
+                                                  ]
+                                                }
+                                              ]
+                                            }
+                                          ]
+                                        }
+                                      ]
+                                    }
+                                  ]
+                                }
+                              ]
+                            }
+                          ]
+                        }
+                      ]
+                    }
+                  ]
+                }
+              ]
+            }
+          ]
+        },
+        {
+          "position": [20, 374],
+          "bounds": [284, 204],
+          "drawsContent": true,
+          "children": [
+            {
+              "position": [2, 2],
+              "bounds": [280, 200],
+              "children": [
+                {
+                  "bounds": [280, 200],
+                  "children": [
+                    {
+                      "children": [
+                        {
+                          "bounds": [280, 200],
+                          "children": [
+                            {
+                              "bounds": [280, 200],
+                              "drawsContent": true,
+                              "children": [
+                                {
+                                  "position": [8, 8],
+                                  "bounds": [252, 172],
+                                  "drawsContent": true,
+                                  "children": [
+                                    {
+                                      "position": [1, 1],
+                                      "bounds": [250, 170],
+                                      "children": [
+                                        {
+                                          "bounds": [250, 170],
+                                          "children": [
+                                            {
+                                              "children": [
+                                                {
+                                                  "bounds": [250, 230],
+                                                  "children": [
+                                                    {
+                                                      "bounds": [250, 230],
+                                                      "drawsContent": true,
+                                                      "backgroundColor": "#C0C0C0",
+                                                      "children": [
+                                                        {
+                                                          "position": [18, 10],
+                                                          "bounds": [210, 210],
+                                                          "contentsOpaque": true,
+                                                          "drawsContent": true,
+                                                          "backgroundColor": "#0000FF"
+                                                        }
+                                                      ]
+                                                    }
+                                                  ]
+                                                }
+                                              ]
+                                            }
+                                          ]
+                                        }
+                                      ]
+                                    }
+                                  ]
+                                }
+                              ]
+                            }
+                          ]
+                        }
+                      ]
+                    }
+                  ]
+                }
+              ]
+            }
+          ]
+        },
+        {
+          "position": [0, 100],
+          "bounds": [785, 120],
+          "drawsContent": true,
+          "backgroundColor": "#0000007F"
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/compositing/iframes/resizer-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/iframes/resizer-expected.txt
new file mode 100644
index 0000000..a7d61f2
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/compositing/iframes/resizer-expected.txt
@@ -0,0 +1,69 @@
+
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [8, 8],
+          "bounds": [304, 154],
+          "drawsContent": true,
+          "children": [
+            {
+              "position": [2, 2],
+              "bounds": [300, 150],
+              "children": [
+                {
+                  "bounds": [285, 150],
+                  "children": [
+                    {
+                      "children": [
+                        {
+                          "bounds": [285, 230],
+                          "children": [
+                            {
+                              "bounds": [285, 230],
+                              "drawsContent": true,
+                              "backgroundColor": "#C0C0C0",
+                              "children": [
+                                {
+                                  "position": [18, 10],
+                                  "bounds": [210, 210],
+                                  "contentsOpaque": true,
+                                  "drawsContent": true,
+                                  "backgroundColor": "#0000FF"
+                                }
+                              ]
+                            }
+                          ]
+                        }
+                      ]
+                    }
+                  ]
+                },
+                {
+                  "position": [285, 0],
+                  "bounds": [15, 150]
+                }
+              ]
+            },
+            {
+              "bounds": [304, 154],
+              "children": [
+                {
+                  "position": [287, 137],
+                  "bounds": [15, 15],
+                  "drawsContent": true
+                }
+              ]
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/compositing/iframes/scrolling-iframe-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/iframes/scrolling-iframe-expected.txt
new file mode 100644
index 0000000..39584e012
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/compositing/iframes/scrolling-iframe-expected.txt
@@ -0,0 +1,74 @@
+
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [8, 8],
+          "bounds": [370, 220],
+          "drawsContent": true,
+          "children": [
+            {
+              "position": [35, 35],
+              "bounds": [300, 150],
+              "children": [
+                {
+                  "bounds": [285, 135],
+                  "children": [
+                    {
+                      "children": [
+                        {
+                          "bounds": [508, 608],
+                          "children": [
+                            {
+                              "bounds": [508, 608],
+                              "drawsContent": true,
+                              "backgroundColor": "#C0C0C0",
+                              "children": [
+                                {
+                                  "position": [108, 100],
+                                  "bounds": [200, 200],
+                                  "contentsOpaque": true,
+                                  "drawsContent": true,
+                                  "backgroundColor": "#0000FF"
+                                }
+                              ]
+                            }
+                          ]
+                        }
+                      ]
+                    }
+                  ]
+                },
+                {
+                  "position": [0, 135],
+                  "bounds": [285, 15]
+                },
+                {
+                  "position": [285, 0],
+                  "bounds": [15, 135]
+                },
+                {
+                  "position": [285, 135],
+                  "bounds": [15, 15],
+                  "drawsContent": true
+                }
+              ]
+            }
+          ]
+        },
+        {
+          "position": [5, 5],
+          "bounds": [50, 50],
+          "drawsContent": true,
+          "backgroundColor": "#00000033"
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/compositing/iframes/visibility-hidden-transformed-content-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/iframes/visibility-hidden-transformed-content-expected.txt
new file mode 100644
index 0000000..e9f7954d
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/compositing/iframes/visibility-hidden-transformed-content-expected.txt
@@ -0,0 +1,11 @@
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/compositing/images/clip-on-directly-composited-image-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/images/clip-on-directly-composited-image-expected.txt
new file mode 100644
index 0000000..26f7469
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/compositing/images/clip-on-directly-composited-image-expected.txt
@@ -0,0 +1,20 @@
+
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [210, 23],
+          "transformOrigin": [90, 90],
+          "bounds": [140, 140],
+          "drawsContent": true
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/compositing/images/direct-image-dynamic-border-draws-content-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/images/direct-image-dynamic-border-draws-content-expected.txt
new file mode 100644
index 0000000..e029342
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/compositing/images/direct-image-dynamic-border-draws-content-expected.txt
@@ -0,0 +1,41 @@
+
+layer tree before image style change
+
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [8, 8],
+          "bounds": [256, 256]
+        }
+      ]
+    }
+  ]
+}
+
+layer tree after image style change
+
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [8, 8],
+          "bounds": [260, 260],
+          "drawsContent": true
+        }
+      ]
+    }
+  ]
+}
+
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/compositing/layer-creation/animation-overlap-with-children-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/layer-creation/animation-overlap-with-children-expected.txt
new file mode 100644
index 0000000..2f6bd47
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/compositing/layer-creation/animation-overlap-with-children-expected.txt
@@ -0,0 +1,46 @@
+Should be compositedShould not be composited
+Should be composited
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [8, 8],
+          "bounds": [262, 212],
+          "drawsContent": true,
+          "children": [
+            {
+              "shouldFlattenTransform": false,
+              "children": [
+                {
+                  "position": [6, 6],
+                  "bounds": [250, 50],
+                  "contentsOpaque": true,
+                  "drawsContent": true,
+                  "backgroundColor": "#C0C0C0"
+                },
+                {
+                  "position": [11, 21],
+                  "bounds": [100, 100],
+                  "drawsContent": true
+                }
+              ]
+            }
+          ]
+        },
+        {
+          "position": [18, 230],
+          "bounds": [100, 100],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#0000FF"
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/compositing/layer-creation/assumed-overlap-for-inline-transform-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/layer-creation/assumed-overlap-for-inline-transform-expected.txt
new file mode 100644
index 0000000..db4b413
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/compositing/layer-creation/assumed-overlap-for-inline-transform-expected.txt
@@ -0,0 +1,30 @@
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "shouldFlattenTransform": false,
+          "children": [
+            {
+              "position": [8, 8],
+              "bounds": [100, 100],
+              "contentsOpaque": true,
+              "drawsContent": true,
+              "backgroundColor": "#0000FF"
+            },
+            {
+              "position": [8, 108],
+              "bounds": [100, 100],
+              "drawsContent": true
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/compositing/layer-creation/fixed-position-and-transform-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/layer-creation/fixed-position-and-transform-expected.txt
new file mode 100644
index 0000000..e12589e3
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/compositing/layer-creation/fixed-position-and-transform-expected.txt
@@ -0,0 +1,27 @@
+{
+  "bounds": [785, 5021],
+  "children": [
+    {
+      "bounds": [785, 5021],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [100, 1100],
+          "bounds": [256, 256],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FF0000"
+        },
+        {
+          "position": [0, 1000],
+          "bounds": [500, 500],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#008000"
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/compositing/layer-creation/fixed-position-change-out-of-view-in-view-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/layer-creation/fixed-position-change-out-of-view-in-view-expected.txt
new file mode 100644
index 0000000..2d7bbf1
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/compositing/layer-creation/fixed-position-change-out-of-view-in-view-expected.txt
@@ -0,0 +1,82 @@
+Layer tree when the fixed elements are out-of-view (should have just a root layer):
+{
+  "bounds": [785, 4016],
+  "children": [
+    {
+      "bounds": [785, 4016],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [100, -100],
+          "bounds": [10, 10],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#C0C0C0"
+        },
+        {
+          "position": [100, 100],
+          "bounds": [10, 0],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#C0C0C0"
+        }
+      ]
+    }
+  ]
+}
+Layer tree when the fixed elements are in-view (both fixed elements should have layers):
+{
+  "bounds": [785, 4016],
+  "children": [
+    {
+      "bounds": [785, 4016],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [100, 50],
+          "bounds": [10, 10],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#C0C0C0"
+        },
+        {
+          "position": [100, 100],
+          "bounds": [10, 10],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#C0C0C0"
+        }
+      ]
+    }
+  ]
+}
+Layer tree when the fixed elements are out-of-view again (should have just a root layer):
+{
+  "bounds": [785, 4016],
+  "children": [
+    {
+      "bounds": [785, 4016],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [100, -100],
+          "bounds": [10, 10],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#C0C0C0"
+        },
+        {
+          "position": [100, 100],
+          "bounds": [10, 0],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#C0C0C0"
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/compositing/layer-creation/fixed-position-in-fixed-overflow-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/layer-creation/fixed-position-in-fixed-overflow-expected.txt
new file mode 100644
index 0000000..7117f5be
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/compositing/layer-creation/fixed-position-in-fixed-overflow-expected.txt
@@ -0,0 +1,49 @@
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [8, 13],
+          "bounds": [800, 600],
+          "shouldFlattenTransform": false,
+          "drawsContent": true,
+          "children": [
+            {
+              "bounds": [785, 600],
+              "shouldFlattenTransform": false,
+              "children": [
+                {
+                  "bounds": [785, 1000],
+                  "drawsContent": true,
+                  "children": [
+                    {
+                      "position": [192, 0],
+                      "bounds": [100, 100],
+                      "contentsOpaque": true,
+                      "drawsContent": true,
+                      "backgroundColor": "#FFFF00"
+                    }
+                  ]
+                }
+              ]
+            },
+            {
+              "bounds": [800, 600],
+              "children": [
+                {
+                  "position": [785, 0],
+                  "bounds": [15, 600]
+                }
+              ]
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/compositing/layer-creation/fixed-position-no-content-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/layer-creation/fixed-position-no-content-expected.txt
new file mode 100644
index 0000000..f39addb
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/compositing/layer-creation/fixed-position-no-content-expected.txt
@@ -0,0 +1,24 @@
+{
+  "bounds": [785, 1021],
+  "children": [
+    {
+      "bounds": [785, 1021],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [10, 10],
+          "bounds": [50, 50]
+        },
+        {
+          "position": [40, 40],
+          "bounds": [100, 100],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#808080"
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/compositing/layer-creation/fixed-position-nonscrollable-body-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/layer-creation/fixed-position-nonscrollable-body-expected.txt
new file mode 100644
index 0000000..b59bec9
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/compositing/layer-creation/fixed-position-nonscrollable-body-expected.txt
@@ -0,0 +1,11 @@
+{
+  "bounds": [800, 4021],
+  "children": [
+    {
+      "bounds": [800, 4021],
+      "contentsOpaque": true,
+      "drawsContent": true
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/compositing/layer-creation/fixed-position-nonscrollable-body-mismatch-containers-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/layer-creation/fixed-position-nonscrollable-body-mismatch-containers-expected.txt
new file mode 100644
index 0000000..782a82c
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/compositing/layer-creation/fixed-position-nonscrollable-body-mismatch-containers-expected.txt
@@ -0,0 +1,59 @@
+Even though the fixed-position element's container is nonscrollable, it should still be composited because one of its ancestors is scrolling.
+
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [8, 72],
+          "bounds": [302, 302],
+          "shouldFlattenTransform": false,
+          "drawsContent": true,
+          "children": [
+            {
+              "position": [1, 1],
+              "bounds": [285, 285],
+              "shouldFlattenTransform": false,
+              "children": [
+                {
+                  "bounds": [285, 800],
+                  "drawsContent": true
+                }
+              ]
+            },
+            {
+              "bounds": [302, 302],
+              "children": [
+                {
+                  "position": [1, 286],
+                  "bounds": [285, 15]
+                },
+                {
+                  "position": [286, 1],
+                  "bounds": [15, 285]
+                },
+                {
+                  "position": [286, 286],
+                  "bounds": [15, 15],
+                  "drawsContent": true
+                }
+              ]
+            }
+          ]
+        },
+        {
+          "position": [10, 100],
+          "bounds": [100, 100],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#00FF00"
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/compositing/layer-creation/fixed-position-nonscrollable-body-overlap-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/layer-creation/fixed-position-nonscrollable-body-overlap-expected.txt
new file mode 100644
index 0000000..e7e21ff
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/compositing/layer-creation/fixed-position-nonscrollable-body-overlap-expected.txt
@@ -0,0 +1,29 @@
+Even though we can opt-out of fixed-position compositing for unscrollable fixed-position containers, we still need to composite fixed-position layers that need compositing for other reasons such as overlap.
+
+{
+  "bounds": [800, 4024],
+  "children": [
+    {
+      "bounds": [800, 4024],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [10, 100],
+          "bounds": [100, 100],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FF0000"
+        },
+        {
+          "position": [10, 100],
+          "bounds": [100, 100],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#00FF00"
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/compositing/layer-creation/fixed-position-nonscrollable-iframes-in-scrollable-page-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/layer-creation/fixed-position-nonscrollable-iframes-in-scrollable-page-expected.txt
new file mode 100644
index 0000000..6773977
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/compositing/layer-creation/fixed-position-nonscrollable-iframes-in-scrollable-page-expected.txt
@@ -0,0 +1,31 @@
+In all iframes, the green fixed-position element should not be composited.
+{
+  "bounds": [785, 4016],
+  "children": [
+    {
+      "bounds": [785, 4016],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [50, 360],
+          "bounds": [300, 100],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#00FFFF"
+        },
+        {
+          "position": [10, 200],
+          "bounds": [154, 154],
+          "drawsContent": true
+        },
+        {
+          "position": [10, 380],
+          "bounds": [154, 154],
+          "drawsContent": true
+        }
+      ]
+    }
+  ]
+}
+Composited box underneath iframe. 
diff --git a/third_party/WebKit/LayoutTests/platform/android/compositing/layer-creation/fixed-position-out-of-view-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/layer-creation/fixed-position-out-of-view-expected.txt
index 7e56838..e1557662 100644
--- a/third_party/WebKit/LayoutTests/platform/android/compositing/layer-creation/fixed-position-out-of-view-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/android/compositing/layer-creation/fixed-position-out-of-view-expected.txt
@@ -1,15 +1,19 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 1021],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 1021],
       "contentsOpaque": true,
       "children": [
         {
+          "name": "LayoutBlockFlow HTML",
           "bounds": [800, 1021],
           "drawsContent": true,
           "children": [
             {
+              "name": "LayoutBlockFlow (positioned) DIV class='fixed'",
               "position": [8, 1013],
               "bounds": [10, 10],
               "contentsOpaque": true,
@@ -17,6 +21,7 @@
               "backgroundColor": "#C0C0C0"
             },
             {
+              "name": "LayoutBlockFlow (positioned) DIV class='fixed'",
               "position": [8, -100],
               "bounds": [10, 10],
               "contentsOpaque": true,
@@ -24,6 +29,7 @@
               "backgroundColor": "#C0C0C0"
             },
             {
+              "name": "LayoutBlockFlow (positioned) DIV class='fixed'",
               "position": [1000, 0],
               "bounds": [10, 10],
               "contentsOpaque": true,
@@ -31,12 +37,14 @@
               "backgroundColor": "#C0C0C0"
             },
             {
+              "name": "LayoutBlockFlow (positioned) DIV class='fixed'",
               "bounds": [10, 10],
               "contentsOpaque": true,
               "drawsContent": true,
               "backgroundColor": "#C0C0C0"
             },
             {
+              "name": "LayoutBlockFlow HTML (foreground) Layer",
               "bounds": [800, 1021],
               "drawsContent": true
             }
diff --git a/third_party/WebKit/LayoutTests/platform/android/compositing/layer-creation/fixed-position-out-of-view-positioning-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/layer-creation/fixed-position-out-of-view-positioning-expected.txt
new file mode 100644
index 0000000..1a79f42
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/compositing/layer-creation/fixed-position-out-of-view-positioning-expected.txt
@@ -0,0 +1,58 @@
+PASS layerTree is window.internals.layerTreeAsText(document)
+PASS successfullyParsed is true
+
+TEST COMPLETE
+The layer trees before and after should be the same, except for the position of the 50x50 sized composited fixed position layer.
+BEFORE:
+{
+  "bounds": [2008, 2016],
+  "children": [
+    {
+      "bounds": [2008, 2016],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [20, -80],
+          "bounds": [50, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#C0C0C0",
+          "transform": [
+            [1, 0, 0, 0],
+            [0, 1, 0, 0],
+            [0, 0, 1, 0],
+            [0, 100, 0, 1]
+          ]
+        }
+      ]
+    }
+  ]
+}
+AFTER:
+{
+  "bounds": [2008, 2016],
+  "children": [
+    {
+      "bounds": [2008, 2016],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [20, -70],
+          "bounds": [50, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#C0C0C0",
+          "transform": [
+            [1, 0, 0, 0],
+            [0, 1, 0, 0],
+            [0, 0, 1, 0],
+            [0, 100, 0, 1]
+          ]
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/compositing/layer-creation/fixed-position-out-of-view-scaled-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/layer-creation/fixed-position-out-of-view-scaled-expected.txt
new file mode 100644
index 0000000..bb4db32
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/compositing/layer-creation/fixed-position-out-of-view-scaled-expected.txt
@@ -0,0 +1,142 @@
+Not scaled:
+{
+  "bounds": [4008, 4016],
+  "children": [
+    {
+      "bounds": [4008, 4016],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [8, -100],
+          "bounds": [10, 10],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#C0C0C0"
+        },
+        {
+          "position": [8, 1008],
+          "bounds": [10, 10],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#C0C0C0"
+        },
+        {
+          "position": [1000, 0],
+          "bounds": [10, 10],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#C0C0C0"
+        },
+        {
+          "position": [600, 0],
+          "bounds": [10, 10],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#C0C0C0"
+        },
+        {
+          "bounds": [10, 10],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#C0C0C0"
+        }
+      ]
+    }
+  ]
+}
+Scale=0.5:
+{
+  "bounds": [4008, 4016],
+  "children": [
+    {
+      "bounds": [4008, 4016],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [8, -100],
+          "bounds": [10, 10],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#C0C0C0"
+        },
+        {
+          "position": [8, 1008],
+          "bounds": [10, 10],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#C0C0C0"
+        },
+        {
+          "position": [1000, 0],
+          "bounds": [10, 10],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#C0C0C0"
+        },
+        {
+          "position": [600, 0],
+          "bounds": [10, 10],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#C0C0C0"
+        },
+        {
+          "bounds": [10, 10],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#C0C0C0"
+        }
+      ]
+    }
+  ]
+}
+Scale=1.5:
+{
+  "bounds": [4008, 4016],
+  "children": [
+    {
+      "bounds": [4008, 4016],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [8, -100],
+          "bounds": [10, 10],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#C0C0C0"
+        },
+        {
+          "position": [8, 1008],
+          "bounds": [10, 10],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#C0C0C0"
+        },
+        {
+          "position": [1000, 0],
+          "bounds": [10, 10],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#C0C0C0"
+        },
+        {
+          "position": [600, 0],
+          "bounds": [10, 10],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#C0C0C0"
+        },
+        {
+          "bounds": [10, 10],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#C0C0C0"
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/compositing/layer-creation/fixed-position-out-of-view-scaled-scroll-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/layer-creation/fixed-position-out-of-view-scaled-scroll-expected.txt
new file mode 100644
index 0000000..a59e8759
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/compositing/layer-creation/fixed-position-out-of-view-scaled-scroll-expected.txt
@@ -0,0 +1,145 @@
+Not scaled:
+{
+  "bounds": [4008, 4016],
+  "children": [
+    {
+      "bounds": [4008, 4016],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [108, 0],
+          "bounds": [10, 10],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#C0C0C0"
+        },
+        {
+          "position": [108, 1108],
+          "bounds": [10, 10],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#C0C0C0"
+        },
+        {
+          "position": [1100, 100],
+          "bounds": [10, 10],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#C0C0C0"
+        },
+        {
+          "position": [700, 100],
+          "bounds": [10, 10],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#C0C0C0"
+        },
+        {
+          "position": [100, 100],
+          "bounds": [10, 10],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#C0C0C0"
+        }
+      ]
+    }
+  ]
+}
+Scale=0.5:
+{
+  "bounds": [4008, 4016],
+  "children": [
+    {
+      "bounds": [4008, 4016],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [108, 0],
+          "bounds": [10, 10],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#C0C0C0"
+        },
+        {
+          "position": [108, 1108],
+          "bounds": [10, 10],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#C0C0C0"
+        },
+        {
+          "position": [1100, 100],
+          "bounds": [10, 10],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#C0C0C0"
+        },
+        {
+          "position": [700, 100],
+          "bounds": [10, 10],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#C0C0C0"
+        },
+        {
+          "position": [100, 100],
+          "bounds": [10, 10],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#C0C0C0"
+        }
+      ]
+    }
+  ]
+}
+Scale=1.5:
+{
+  "bounds": [4008, 4016],
+  "children": [
+    {
+      "bounds": [4008, 4016],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [108, 0],
+          "bounds": [10, 10],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#C0C0C0"
+        },
+        {
+          "position": [108, 1108],
+          "bounds": [10, 10],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#C0C0C0"
+        },
+        {
+          "position": [1100, 100],
+          "bounds": [10, 10],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#C0C0C0"
+        },
+        {
+          "position": [700, 100],
+          "bounds": [10, 10],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#C0C0C0"
+        },
+        {
+          "position": [100, 100],
+          "bounds": [10, 10],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#C0C0C0"
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/compositing/layer-creation/fixed-position-out-of-view-with-backdrop-filter-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/layer-creation/fixed-position-out-of-view-with-backdrop-filter-expected.txt
new file mode 100644
index 0000000..3d6a98e7
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/compositing/layer-creation/fixed-position-out-of-view-with-backdrop-filter-expected.txt
@@ -0,0 +1,41 @@
+{
+  "bounds": [785, 1021],
+  "children": [
+    {
+      "bounds": [785, 1021],
+      "contentsOpaque": true,
+      "children": [
+        {
+          "bounds": [785, 1021],
+          "drawsContent": true,
+          "children": [
+            {
+              "position": [8, 1013],
+              "bounds": [10, 10],
+              "drawsContent": true
+            },
+            {
+              "position": [8, -100],
+              "bounds": [10, 10],
+              "drawsContent": true
+            },
+            {
+              "position": [1000, 0],
+              "bounds": [10, 10],
+              "drawsContent": true
+            },
+            {
+              "bounds": [10, 10],
+              "drawsContent": true
+            },
+            {
+              "bounds": [785, 1021],
+              "drawsContent": true
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/compositing/layer-creation/main-thread-scrolling-for-non-composited-fixed-position-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/layer-creation/main-thread-scrolling-for-non-composited-fixed-position-expected.txt
new file mode 100644
index 0000000..e63b9c43
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/compositing/layer-creation/main-thread-scrolling-for-non-composited-fixed-position-expected.txt
@@ -0,0 +1,12 @@
+TEST
+{
+  "bounds": [785, 5021],
+  "children": [
+    {
+      "bounds": [785, 5021],
+      "contentsOpaque": true,
+      "drawsContent": true
+    }
+  ]
+}
+Has non-layer viewport-constrained objects
diff --git a/third_party/WebKit/LayoutTests/platform/android/compositing/layer-creation/main-thread-scrolling-for-non-composited-fixed-position-if-overflow-hidden-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/layer-creation/main-thread-scrolling-for-non-composited-fixed-position-if-overflow-hidden-expected.txt
new file mode 100644
index 0000000..7567d76
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/compositing/layer-creation/main-thread-scrolling-for-non-composited-fixed-position-if-overflow-hidden-expected.txt
@@ -0,0 +1,12 @@
+TEST
+{
+  "bounds": [800, 5021],
+  "children": [
+    {
+      "bounds": [800, 5021],
+      "contentsOpaque": true,
+      "drawsContent": true
+    }
+  ]
+}
+Has non-layer viewport-constrained objects
diff --git a/third_party/WebKit/LayoutTests/platform/android/compositing/layer-creation/no-compositing-for-fixed-position-under-transform-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/layer-creation/no-compositing-for-fixed-position-under-transform-expected.txt
new file mode 100644
index 0000000..ea70903
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/compositing/layer-creation/no-compositing-for-fixed-position-under-transform-expected.txt
@@ -0,0 +1,19 @@
+TEST
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [8, 8],
+          "bounds": [100, 30],
+          "drawsContent": true
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/compositing/layer-creation/no-compositing-for-preserve-3d-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/layer-creation/no-compositing-for-preserve-3d-expected.txt
new file mode 100644
index 0000000..31488501
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/compositing/layer-creation/no-compositing-for-preserve-3d-expected.txt
@@ -0,0 +1,39 @@
+This layer should not be composited.
+This layer should not be composited.
+This layer should be composited.
+{
+  "bounds": [785, 618],
+  "children": [
+    {
+      "bounds": [785, 618],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [18, 394],
+          "bounds": [342, 182],
+          "shouldFlattenTransform": false,
+          "3dRenderingContext": 1,
+          "drawsContent": true,
+          "children": [
+            {
+              "position": [31, 51],
+              "bounds": [100, 100],
+              "contentsOpaque": true,
+              "3dRenderingContext": 1,
+              "drawsContent": true,
+              "backgroundColor": "#C0C0C0",
+              "transform": [
+                [0.984807753012208, 0, -0.17364817766693, 0],
+                [0, 1, 0, 0],
+                [0.17364817766693, 0, 0.984807753012208, 0],
+                [0, 0, 0, 1]
+              ]
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/compositing/layer-creation/no-main-thread-scrolling-for-non-composited-fixed-position-without-scroll-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/layer-creation/no-main-thread-scrolling-for-non-composited-fixed-position-without-scroll-expected.txt
new file mode 100644
index 0000000..846d193
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/compositing/layer-creation/no-main-thread-scrolling-for-non-composited-fixed-position-without-scroll-expected.txt
@@ -0,0 +1,12 @@
+TEST
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/compositing/layer-creation/overflow-scroll-overlap-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/layer-creation/overflow-scroll-overlap-expected.txt
new file mode 100644
index 0000000..5b666ed
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/compositing/layer-creation/overflow-scroll-overlap-expected.txt
@@ -0,0 +1,41 @@
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "shouldFlattenTransform": false,
+          "children": [
+            {
+              "position": [8, 8],
+              "bounds": [30, 30]
+            },
+            {
+              "position": [20, 20],
+              "bounds": [306, 206],
+              "drawsContent": true
+            }
+          ]
+        },
+        {
+          "position": [23, 23],
+          "bounds": [285, 200],
+          "shouldFlattenTransform": false,
+          "children": [
+            {
+              "position": [20, 45],
+              "bounds": [210, 100],
+              "contentsOpaque": true,
+              "drawsContent": true,
+              "backgroundColor": "#0000FF"
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/compositing/layer-creation/overlap-child-layer-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/layer-creation/overlap-child-layer-expected.txt
new file mode 100644
index 0000000..d82d0970
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/compositing/layer-creation/overlap-child-layer-expected.txt
@@ -0,0 +1,28 @@
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "shouldFlattenTransform": false,
+          "children": [
+            {
+              "transformOrigin": [400, 0],
+              "bounds": [256, 256],
+              "contentsOpaque": true,
+              "drawsContent": true
+            },
+            {
+              "bounds": [300, 300],
+              "drawsContent": true
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/compositing/layer-creation/overlap-clipping-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/layer-creation/overlap-clipping-expected.txt
new file mode 100644
index 0000000..625c078
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/compositing/layer-creation/overlap-clipping-expected.txt
@@ -0,0 +1,43 @@
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [50, 50],
+          "bounds": [100, 100],
+          "shouldFlattenTransform": false,
+          "children": [
+            {
+              "bounds": [500, 100],
+              "contentsOpaque": true,
+              "drawsContent": true,
+              "backgroundColor": "#008000"
+            }
+          ]
+        },
+        {
+          "shouldFlattenTransform": false,
+          "children": [
+            {
+              "position": [50, 200],
+              "bounds": [500, 100],
+              "contentsOpaque": true,
+              "drawsContent": true,
+              "backgroundColor": "#008000"
+            },
+            {
+              "position": [450, 200],
+              "bounds": [100, 100],
+              "drawsContent": true
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/compositing/layer-creation/overlap-transformed-3d-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/layer-creation/overlap-transformed-3d-expected.txt
new file mode 100644
index 0000000..eeba34a9
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/compositing/layer-creation/overlap-transformed-3d-expected.txt
@@ -0,0 +1,64 @@
+Before:
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [108, 108],
+          "bounds": [100, 100],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#008000",
+          "transform": [
+            [1, 0, 0, 0],
+            [0, 1, 0, 0],
+            [0, 0, 1, 0],
+            [0, 0, -1, 1]
+          ]
+        }
+      ]
+    }
+  ]
+}
+
+After:
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "shouldFlattenTransform": false,
+          "children": [
+            {
+              "position": [108, 108],
+              "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, -1, 1]
+              ]
+            },
+            {
+              "position": [8, 8],
+              "bounds": [300, 300],
+              "drawsContent": true
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/compositing/layer-creation/overlap-transformed-and-clipped-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/layer-creation/overlap-transformed-and-clipped-expected.txt
new file mode 100644
index 0000000..0785da6
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/compositing/layer-creation/overlap-transformed-and-clipped-expected.txt
@@ -0,0 +1,45 @@
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "bounds": [100, 100],
+          "drawsContent": true,
+          "transform": [
+            [1, 0, 0, 0],
+            [0, 1, 0, 0],
+            [0, 0, 1, 0],
+            [110, 0, 0, 1]
+          ],
+          "children": [
+            {
+              "bounds": [100, 100],
+              "children": [
+                {
+                  "shouldFlattenTransform": false,
+                  "children": [
+                    {
+                      "bounds": [100, 100],
+                      "contentsOpaque": true,
+                      "drawsContent": true,
+                      "backgroundColor": "#FF0000"
+                    },
+                    {
+                      "bounds": [100, 100],
+                      "drawsContent": true
+                    }
+                  ]
+                }
+              ]
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/compositing/layer-creation/overlap-transformed-layer-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/layer-creation/overlap-transformed-layer-expected.txt
new file mode 100644
index 0000000..761ee7f
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/compositing/layer-creation/overlap-transformed-layer-expected.txt
@@ -0,0 +1,37 @@
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [23, 8],
+          "transformOrigin": [377, 0],
+          "bounds": [256, 256],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "transform": [
+            [1, 0, 0, 0],
+            [0, 1, 0, 0],
+            [0, 0, 1, 0],
+            [-10, 0, 0, 1]
+          ],
+          "children": [
+            {
+              "position": [385, 0]
+            }
+          ]
+        },
+        {
+          "bounds": [300, 300],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#008000"
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/compositing/layer-creation/overlap-transformed-layer-with-transform-body-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/layer-creation/overlap-transformed-layer-with-transform-body-expected.txt
new file mode 100644
index 0000000..099a7f1
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/compositing/layer-creation/overlap-transformed-layer-with-transform-body-expected.txt
@@ -0,0 +1,44 @@
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [8, 8],
+          "bounds": [784, 584],
+          "drawsContent": true,
+          "children": [
+            {
+              "position": [15, 0],
+              "transformOrigin": [377, 0],
+              "bounds": [256, 256],
+              "contentsOpaque": true,
+              "drawsContent": true,
+              "transform": [
+                [1, 0, 0, 0],
+                [0, 1, 0, 0],
+                [0, 0, 1, 0],
+                [-10, 0, 0, 1]
+              ],
+              "children": [
+                {
+                  "position": [385, 0]
+                }
+              ]
+            },
+            {
+              "bounds": [300, 300],
+              "contentsOpaque": true,
+              "drawsContent": true,
+              "backgroundColor": "#008000"
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/compositing/layer-creation/overlap-transformed-preserved-3d-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/layer-creation/overlap-transformed-preserved-3d-expected.txt
new file mode 100644
index 0000000..1b13f90
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/compositing/layer-creation/overlap-transformed-preserved-3d-expected.txt
@@ -0,0 +1,249 @@
+123456Before:
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [108, 108],
+          "children": [
+            {
+              "transformOrigin": [50, 50],
+              "shouldFlattenTransform": false,
+              "transform": [
+                [1, 0, 0, 0],
+                [0, 1, 0, 0],
+                [0, 0, 1, -0.005],
+                [0, 0, 0, 1]
+              ],
+              "children": [
+                {
+                  "transformOrigin": [50, 50],
+                  "shouldFlattenTransform": false,
+                  "3dRenderingContext": 1,
+                  "transform": [
+                    [0.353553390593274, 0.25, -0.5, 0],
+                    [0, 0.353553390593274, 0.707106781186548, 0],
+                    [0.353553390593274, -0.25, 0.5, 0],
+                    [0, 0, 0, 1]
+                  ],
+                  "children": [
+                    {
+                      "bounds": [100, 100],
+                      "3dRenderingContext": 1,
+                      "drawsContent": true,
+                      "backgroundColor": "#00FF00CC",
+                      "transform": [
+                        [1, 0, 0, 0],
+                        [0, 1, 0, 0],
+                        [0, 0, 1, 0],
+                        [0, 0, 50, 1]
+                      ]
+                    },
+                    {
+                      "bounds": [100, 100],
+                      "3dRenderingContext": 1,
+                      "drawsContent": true,
+                      "backgroundColor": "#00FF00CC",
+                      "transform": [
+                        [0, 0, -1, 0],
+                        [0, 1, 0, 0],
+                        [1, 0, 0, 0],
+                        [50, 0, 0, 1]
+                      ]
+                    },
+                    {
+                      "bounds": [100, 100],
+                      "3dRenderingContext": 1,
+                      "drawsContent": true,
+                      "backgroundColor": "#00FF00CC",
+                      "transform": [
+                        [-1, 0, 0, 0],
+                        [0, 1, 0, 0],
+                        [0, 0, -1, 0],
+                        [0, 0, -50, 1]
+                      ]
+                    },
+                    {
+                      "bounds": [100, 100],
+                      "3dRenderingContext": 1,
+                      "drawsContent": true,
+                      "backgroundColor": "#00FF00CC",
+                      "transform": [
+                        [0, 0, 1, 0],
+                        [0, 1, 0, 0],
+                        [-1, 0, 0, 0],
+                        [-50, 0, 0, 1]
+                      ]
+                    },
+                    {
+                      "bounds": [100, 100],
+                      "3dRenderingContext": 1,
+                      "drawsContent": true,
+                      "backgroundColor": "#00FF00CC",
+                      "transform": [
+                        [1, 0, 0, 0],
+                        [0, 0, 1, 0],
+                        [0, -1, 0, 0],
+                        [0, -50, 0, 1]
+                      ]
+                    },
+                    {
+                      "bounds": [100, 100],
+                      "3dRenderingContext": 1,
+                      "drawsContent": true,
+                      "backgroundColor": "#00FF00CC",
+                      "transform": [
+                        [1, 0, 0, 0],
+                        [0, 0, -1, 0],
+                        [0, 1, 0, 0],
+                        [0, 50, 0, 1]
+                      ]
+                    }
+                  ]
+                }
+              ]
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}
+
+After:
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [108, 108],
+          "children": [
+            {
+              "transformOrigin": [50, 50],
+              "shouldFlattenTransform": false,
+              "transform": [
+                [1, 0, 0, 0],
+                [0, 1, 0, 0],
+                [0, 0, 1, -0.005],
+                [0, 0, 0, 1]
+              ],
+              "children": [
+                {
+                  "transformOrigin": [50, 50],
+                  "shouldFlattenTransform": false,
+                  "3dRenderingContext": 1,
+                  "transform": [
+                    [0.707106781186548, 0.5, -0.5, 0],
+                    [0, 0.707106781186548, 0.707106781186548, 0],
+                    [0.707106781186548, -0.5, 0.5, 0],
+                    [0, 0, 0, 1]
+                  ],
+                  "children": [
+                    {
+                      "bounds": [100, 100],
+                      "3dRenderingContext": 1,
+                      "drawsContent": true,
+                      "backgroundColor": "#00FF00CC",
+                      "transform": [
+                        [1, 0, 0, 0],
+                        [0, 1, 0, 0],
+                        [0, 0, 1, 0],
+                        [0, 0, 50, 1]
+                      ]
+                    },
+                    {
+                      "bounds": [100, 100],
+                      "3dRenderingContext": 1,
+                      "drawsContent": true,
+                      "backgroundColor": "#00FF00CC",
+                      "transform": [
+                        [0, 0, -1, 0],
+                        [0, 1, 0, 0],
+                        [1, 0, 0, 0],
+                        [50, 0, 0, 1]
+                      ]
+                    },
+                    {
+                      "bounds": [100, 100],
+                      "3dRenderingContext": 1,
+                      "drawsContent": true,
+                      "backgroundColor": "#00FF00CC",
+                      "transform": [
+                        [-1, 0, 0, 0],
+                        [0, 1, 0, 0],
+                        [0, 0, -1, 0],
+                        [0, 0, -50, 1]
+                      ]
+                    },
+                    {
+                      "bounds": [100, 100],
+                      "3dRenderingContext": 1,
+                      "drawsContent": true,
+                      "backgroundColor": "#00FF00CC",
+                      "transform": [
+                        [0, 0, 1, 0],
+                        [0, 1, 0, 0],
+                        [-1, 0, 0, 0],
+                        [-50, 0, 0, 1]
+                      ]
+                    },
+                    {
+                      "bounds": [100, 100],
+                      "3dRenderingContext": 1,
+                      "drawsContent": true,
+                      "backgroundColor": "#00FF00CC",
+                      "transform": [
+                        [1, 0, 0, 0],
+                        [0, 0, 1, 0],
+                        [0, -1, 0, 0],
+                        [0, -50, 0, 1]
+                      ]
+                    },
+                    {
+                      "bounds": [100, 100],
+                      "3dRenderingContext": 1,
+                      "drawsContent": true,
+                      "backgroundColor": "#00FF00CC",
+                      "transform": [
+                        [1, 0, 0, 0],
+                        [0, 0, -1, 0],
+                        [0, 1, 0, 0],
+                        [0, 50, 0, 1]
+                      ]
+                    }
+                  ]
+                }
+              ]
+            }
+          ]
+        },
+        {
+          "shouldFlattenTransform": false,
+          "children": [
+            {
+              "position": [8, 8],
+              "bounds": [100, 150],
+              "contentsOpaque": true,
+              "drawsContent": true,
+              "backgroundColor": "#808080"
+            },
+            {
+              "position": [8, 8],
+              "bounds": [300, 300],
+              "drawsContent": true
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/compositing/layer-creation/overlap-transforms-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/layer-creation/overlap-transforms-expected.txt
new file mode 100644
index 0000000..e062eda
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/compositing/layer-creation/overlap-transforms-expected.txt
@@ -0,0 +1,39 @@
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [8, 8],
+          "bounds": [122, 242],
+          "drawsContent": true,
+          "children": [
+            {
+              "position": [1, 1],
+              "bounds": [120, 240],
+              "children": [
+                {
+                  "position": [10, 10],
+                  "bounds": [100, 100],
+                  "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/android/compositing/layer-creation/remove-clipping-layer-with-no-children-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/layer-creation/remove-clipping-layer-with-no-children-expected.txt
new file mode 100644
index 0000000..00951626
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/compositing/layer-creation/remove-clipping-layer-with-no-children-expected.txt
@@ -0,0 +1,20 @@
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [8, 8],
+          "bounds": [400, 400],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFC0CB"
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/compositing/layer-creation/rotate3d-overlap-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/layer-creation/rotate3d-overlap-expected.txt
new file mode 100644
index 0000000..1042880e
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/compositing/layer-creation/rotate3d-overlap-expected.txt
@@ -0,0 +1,55 @@
+ 
+ 
+ {
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [25, 25],
+          "bounds": [106, 106],
+          "drawsContent": true,
+          "backgroundColor": "#0000FF"
+        },
+        {
+          "position": [169, 25],
+          "bounds": [106, 106],
+          "drawsContent": true,
+          "backgroundColor": "#0000FF",
+          "transform": [
+            [0.965925826289068, 0.258819045102521, 0, 0],
+            [-0.258819045102521, 0.965925826289068, 0, 0],
+            [0, 0, 1, 0],
+            [0, 0, 0, 1]
+          ]
+        },
+        {
+          "shouldFlattenTransform": false,
+          "children": [
+            {
+              "position": [313, 25],
+              "bounds": [106, 106],
+              "drawsContent": true,
+              "backgroundColor": "#0000FF",
+              "transform": [
+                [0.707106781186548, 0.707106781186548, 0, 0],
+                [-0.707106781186548, 0.707106781186548, 0, 0],
+                [0, 0, 1, 0],
+                [0, 0, 0, 1]
+              ]
+            },
+            {
+              "position": [313, 145],
+              "bounds": [106, 106],
+              "drawsContent": true
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/compositing/layer-creation/scroll-partial-update-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/layer-creation/scroll-partial-update-expected.txt
new file mode 100644
index 0000000..143f329
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/compositing/layer-creation/scroll-partial-update-expected.txt
@@ -0,0 +1,28 @@
+scroll me
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "shouldFlattenTransform": false,
+          "children": [
+            {
+              "position": [8, 8],
+              "bounds": [20, 20]
+            },
+            {
+              "position": [10, 8],
+              "bounds": [400, 204],
+              "drawsContent": true
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/compositing/layer-creation/spanOverlapsCanvas-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/layer-creation/spanOverlapsCanvas-expected.txt
new file mode 100644
index 0000000..c8e2677
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/compositing/layer-creation/spanOverlapsCanvas-expected.txt
@@ -0,0 +1,28 @@
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "shouldFlattenTransform": false,
+          "children": [
+            {
+              "position": [8, 8],
+              "bounds": [100, 50],
+              "drawsContent": true
+            },
+            {
+              "position": [8, 8],
+              "bounds": [100, 50],
+              "drawsContent": true
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/compositing/layer-creation/squashing-into-ancestor-clipping-layer-change-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/layer-creation/squashing-into-ancestor-clipping-layer-change-expected.txt
new file mode 100644
index 0000000..3777f1c
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/compositing/layer-creation/squashing-into-ancestor-clipping-layer-change-expected.txt
@@ -0,0 +1,32 @@
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [8, 8],
+          "bounds": [100, 100],
+          "shouldFlattenTransform": false,
+          "children": [
+            {
+              "position": [0, 50],
+              "bounds": [100, 100],
+              "contentsOpaque": true,
+              "drawsContent": true,
+              "backgroundColor": "#FA8072"
+            },
+            {
+              "position": [0, 50],
+              "bounds": [100, 100],
+              "drawsContent": true
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/compositing/layer-creation/stacking-context-overlap-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/layer-creation/stacking-context-overlap-expected.txt
new file mode 100644
index 0000000..9eb2256
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/compositing/layer-creation/stacking-context-overlap-expected.txt
@@ -0,0 +1,30 @@
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "shouldFlattenTransform": false,
+          "children": [
+            {
+              "position": [8, 8],
+              "bounds": [20, 20],
+              "contentsOpaque": true,
+              "drawsContent": true,
+              "backgroundColor": "#0000FF"
+            },
+            {
+              "position": [8, 18],
+              "bounds": [142, 142],
+              "drawsContent": true
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/compositing/layer-creation/stacking-context-overlap-nested-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/layer-creation/stacking-context-overlap-nested-expected.txt
new file mode 100644
index 0000000..7c29d58
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/compositing/layer-creation/stacking-context-overlap-nested-expected.txt
@@ -0,0 +1,34 @@
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [10, 10],
+          "bounds": [120, 120],
+          "drawsContent": true,
+          "backgroundColor": "#008000",
+          "children": [
+            {
+              "position": [50, 50],
+              "bounds": [220, 120],
+              "drawsContent": true,
+              "backgroundColor": "#FF000099"
+            }
+          ]
+        },
+        {
+          "position": [75, 75],
+          "bounds": [56, 56],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#0000FF"
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/compositing/layer-creation/translatez-added-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/layer-creation/translatez-added-expected.txt
new file mode 100644
index 0000000..d5fa8a49
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/compositing/layer-creation/translatez-added-expected.txt
@@ -0,0 +1,20 @@
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [18, 10],
+          "bounds": [210, 210],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#0000FF"
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/compositing/layer-creation/translatez-overlap-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/layer-creation/translatez-overlap-expected.txt
new file mode 100644
index 0000000..a87f8f1
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/compositing/layer-creation/translatez-overlap-expected.txt
@@ -0,0 +1,20 @@
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [18, 10],
+          "bounds": [100, 100],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#0000FF"
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/compositing/layer-creation/translatez-removed-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/layer-creation/translatez-removed-expected.txt
new file mode 100644
index 0000000..e9f7954d
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/compositing/layer-creation/translatez-removed-expected.txt
@@ -0,0 +1,11 @@
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/compositing/masks/mask-layer-size-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/masks/mask-layer-size-expected.txt
new file mode 100644
index 0000000..2aeec94
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/compositing/masks/mask-layer-size-expected.txt
@@ -0,0 +1,20 @@
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [10, 10],
+          "bounds": [400, 200],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#000000"
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/compositing/overflow-trumps-transform-style-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/overflow-trumps-transform-style-expected.txt
new file mode 100644
index 0000000..f9356c2
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/compositing/overflow-trumps-transform-style-expected.txt
@@ -0,0 +1,43 @@
+preserve-3d
+flat
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [18, 10],
+          "bounds": [100, 100],
+          "contentsOpaque": true,
+          "shouldFlattenTransform": false,
+          "3dRenderingContext": 1,
+          "drawsContent": true,
+          "backgroundColor": "#0000FF",
+          "transform": [
+            [1, 0, 0, 0],
+            [0, 1, 0, 0],
+            [0, 0, 1, 0],
+            [0, 0, 1, 1]
+          ]
+        },
+        {
+          "position": [18, 120],
+          "bounds": [100, 100],
+          "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/android/compositing/overflow/accelerated-overflow-scroll-should-not-affect-perspective-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/overflow/accelerated-overflow-scroll-should-not-affect-perspective-expected.txt
new file mode 100644
index 0000000..ad67ede
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/compositing/overflow/accelerated-overflow-scroll-should-not-affect-perspective-expected.txt
@@ -0,0 +1,89 @@
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [8, 8],
+          "bounds": [200, 200],
+          "shouldFlattenTransform": false,
+          "drawsContent": true,
+          "children": [
+            {
+              "bounds": [200, 200],
+              "shouldFlattenTransform": false,
+              "transform": [
+                [1, 0, 0, 0],
+                [0, 1, 0, 0],
+                [0, 0, 1, -0.01],
+                [0, 0, 0, 1]
+              ],
+              "children": [
+                {
+                  "bounds": [185, 185],
+                  "shouldFlattenTransform": false,
+                  "children": [
+                    {
+                      "bounds": [185, 265],
+                      "shouldFlattenTransform": false,
+                      "children": [
+                        {
+                          "position": [0, 65],
+                          "bounds": [60, 200],
+                          "contentsOpaque": true,
+                          "drawsContent": true,
+                          "backgroundColor": "#008000",
+                          "transform": [
+                            [1, 0, 0, 0],
+                            [0, 1, 0, 0],
+                            [0, 0, 1, 0],
+                            [0, 0, 10, 1]
+                          ]
+                        },
+                        {
+                          "position": [65, 65],
+                          "bounds": [60, 200],
+                          "contentsOpaque": true,
+                          "drawsContent": true,
+                          "backgroundColor": "#0000FF",
+                          "transform": [
+                            [1, 0, 0, 0],
+                            [0, 1, 0, 0],
+                            [0, 0, 1, 0],
+                            [0, 0, 20, 1]
+                          ]
+                        }
+                      ]
+                    }
+                  ]
+                }
+              ]
+            },
+            {
+              "bounds": [200, 200],
+              "children": [
+                {
+                  "position": [0, 185],
+                  "bounds": [185, 15]
+                },
+                {
+                  "position": [185, 0],
+                  "bounds": [15, 185]
+                },
+                {
+                  "position": [185, 185],
+                  "bounds": [15, 15],
+                  "drawsContent": true
+                }
+              ]
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/compositing/overflow/clip-descendents-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/overflow/clip-descendents-expected.txt
new file mode 100644
index 0000000..68ecea3e
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/compositing/overflow/clip-descendents-expected.txt
@@ -0,0 +1,103 @@
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [48, 38],
+          "bounds": [60, 70],
+          "shouldFlattenTransform": false,
+          "children": [
+            {
+              "position": [2, 12],
+              "bounds": [100, 150],
+              "contentsOpaque": true,
+              "drawsContent": true,
+              "backgroundColor": "#808080",
+              "transform": [
+                [1, 0, 0, 0],
+                [0, 1, 0, 0],
+                [0, 0, 1, 0],
+                [0, 0, 1, 1]
+              ]
+            }
+          ]
+        },
+        {
+          "position": [240, 38],
+          "bounds": [60, 70],
+          "shouldFlattenTransform": false,
+          "children": [
+            {
+              "position": [2, 12],
+              "bounds": [100, 150],
+              "contentsOpaque": true,
+              "drawsContent": true,
+              "backgroundColor": "#808080",
+              "transform": [
+                [1, 0, 0, 0],
+                [0, 1, 0, 0],
+                [0, 0, 1, 0],
+                [0, 0, 1, 1]
+              ]
+            }
+          ]
+        },
+        {
+          "position": [48, 230],
+          "bounds": [60, 70],
+          "drawsContent": true,
+          "children": [
+            {
+              "bounds": [60, 70],
+              "children": [
+                {
+                  "position": [2, 12],
+                  "bounds": [100, 150],
+                  "contentsOpaque": true,
+                  "drawsContent": true,
+                  "backgroundColor": "#808080",
+                  "transform": [
+                    [1, 0, 0, 0],
+                    [0, 1, 0, 0],
+                    [0, 0, 1, 0],
+                    [0, 0, 1, 1]
+                  ]
+                }
+              ]
+            }
+          ]
+        },
+        {
+          "position": [240, 230],
+          "bounds": [60, 70],
+          "drawsContent": true,
+          "children": [
+            {
+              "bounds": [60, 70],
+              "children": [
+                {
+                  "position": [2, 12],
+                  "bounds": [100, 150],
+                  "contentsOpaque": true,
+                  "drawsContent": true,
+                  "backgroundColor": "#808080",
+                  "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/android/compositing/overflow/composited-scrolling-paint-phases-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/overflow/composited-scrolling-paint-phases-expected.txt
new file mode 100644
index 0000000..4013b92d
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/compositing/overflow/composited-scrolling-paint-phases-expected.txt
@@ -0,0 +1,124 @@
+{
+  "bounds": [800, 600],
+  "paintingPhases": [
+    "GraphicsLayerPaintBackground",
+    "GraphicsLayerPaintForeground",
+    "GraphicsLayerPaintMask"
+  ],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "paintingPhases": [
+        "GraphicsLayerPaintBackground",
+        "GraphicsLayerPaintForeground",
+        "GraphicsLayerPaintMask"
+      ],
+      "children": [
+        {
+          "bounds": [800, 242],
+          "drawsContent": true,
+          "paintingPhases": [
+            "GraphicsLayerPaintBackground",
+            "GraphicsLayerPaintMask"
+          ],
+          "children": [
+            {
+              "position": [29, 31],
+              "bounds": [80, 10],
+              "contentsOpaque": true,
+              "drawsContent": true,
+              "backgroundColor": "#008000",
+              "paintingPhases": [
+                "GraphicsLayerPaintBackground",
+                "GraphicsLayerPaintForeground",
+                "GraphicsLayerPaintMask"
+              ]
+            },
+            {
+              "bounds": [800, 242],
+              "drawsContent": true,
+              "paintingPhases": [
+                "GraphicsLayerPaintForeground"
+              ]
+            },
+            {
+              "position": [28, 20],
+              "bounds": [202, 202],
+              "shouldFlattenTransform": false,
+              "drawsContent": true,
+              "paintingPhases": [
+                "GraphicsLayerPaintBackground",
+                "GraphicsLayerPaintMask",
+                "GraphicsLayerPaintCompositedScroll"
+              ],
+              "children": [
+                {
+                  "position": [1, 1],
+                  "bounds": [185, 185],
+                  "shouldFlattenTransform": false,
+                  "paintingPhases": [
+                    "GraphicsLayerPaintBackground",
+                    "GraphicsLayerPaintForeground",
+                    "GraphicsLayerPaintMask"
+                  ],
+                  "children": [
+                    {
+                      "bounds": [185, 715],
+                      "drawsContent": true,
+                      "paintingPhases": [
+                        "GraphicsLayerPaintForeground",
+                        "GraphicsLayerPaintOverflowContents",
+                        "GraphicsLayerPaintCompositedScroll"
+                      ]
+                    }
+                  ]
+                },
+                {
+                  "bounds": [202, 202],
+                  "paintingPhases": [
+                    "GraphicsLayerPaintBackground",
+                    "GraphicsLayerPaintForeground",
+                    "GraphicsLayerPaintMask"
+                  ],
+                  "children": [
+                    {
+                      "position": [1, 186],
+                      "bounds": [185, 15],
+                      "paintingPhases": [
+                        "GraphicsLayerPaintBackground",
+                        "GraphicsLayerPaintForeground",
+                        "GraphicsLayerPaintMask"
+                      ]
+                    },
+                    {
+                      "position": [186, 1],
+                      "bounds": [15, 185],
+                      "paintingPhases": [
+                        "GraphicsLayerPaintBackground",
+                        "GraphicsLayerPaintForeground",
+                        "GraphicsLayerPaintMask"
+                      ]
+                    },
+                    {
+                      "position": [186, 186],
+                      "bounds": [15, 15],
+                      "drawsContent": true,
+                      "paintingPhases": [
+                        "GraphicsLayerPaintBackground",
+                        "GraphicsLayerPaintForeground",
+                        "GraphicsLayerPaintMask"
+                      ]
+                    }
+                  ]
+                }
+              ]
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}
+
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/compositing/overflow/content-gains-scrollbars-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/overflow/content-gains-scrollbars-expected.txt
new file mode 100644
index 0000000..10f2551
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/compositing/overflow/content-gains-scrollbars-expected.txt
@@ -0,0 +1,140 @@
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [8, 13],
+          "bounds": [100, 100],
+          "shouldFlattenTransform": false,
+          "drawsContent": true,
+          "children": [
+            {
+              "bounds": [85, 100],
+              "shouldFlattenTransform": false,
+              "children": [
+                {
+                  "bounds": [85, 200],
+                  "children": [
+                    {
+                      "bounds": [10, 200]
+                    }
+                  ]
+                }
+              ]
+            },
+            {
+              "bounds": [100, 100],
+              "children": [
+                {
+                  "position": [85, 0],
+                  "bounds": [15, 100]
+                }
+              ]
+            }
+          ]
+        },
+        {
+          "position": [8, 13],
+          "bounds": [100, 100],
+          "shouldFlattenTransform": false,
+          "drawsContent": true,
+          "children": [
+            {
+              "bounds": [100, 85],
+              "shouldFlattenTransform": false,
+              "children": [
+                {
+                  "bounds": [200, 85],
+                  "children": [
+                    {
+                      "bounds": [200, 10]
+                    }
+                  ]
+                }
+              ]
+            },
+            {
+              "bounds": [100, 100],
+              "children": [
+                {
+                  "position": [0, 85],
+                  "bounds": [100, 15]
+                }
+              ]
+            }
+          ]
+        },
+        {
+          "position": [8, 13],
+          "bounds": [100, 100],
+          "shouldFlattenTransform": false,
+          "drawsContent": true,
+          "children": [
+            {
+              "bounds": [85, 85],
+              "shouldFlattenTransform": false,
+              "children": [
+                {
+                  "bounds": [200, 200],
+                  "children": [
+                    {
+                      "bounds": [200, 200]
+                    }
+                  ]
+                }
+              ]
+            },
+            {
+              "bounds": [100, 100],
+              "children": [
+                {
+                  "position": [0, 85],
+                  "bounds": [85, 15]
+                },
+                {
+                  "position": [85, 0],
+                  "bounds": [15, 85]
+                },
+                {
+                  "position": [85, 85],
+                  "bounds": [15, 15],
+                  "drawsContent": true
+                }
+              ]
+            }
+          ]
+        },
+        {
+          "position": [8, 13],
+          "bounds": [100, 100],
+          "drawsContent": true,
+          "children": [
+            {
+              "bounds": [100, 100],
+              "children": [
+                {
+                  "bounds": [10, 10]
+                }
+              ]
+            },
+            {
+              "bounds": [100, 100],
+              "children": [
+                {
+                  "position": [85, 85],
+                  "bounds": [15, 15],
+                  "drawsContent": true
+                }
+              ]
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/compositing/overflow/content-loses-scrollbars-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/overflow/content-loses-scrollbars-expected.txt
new file mode 100644
index 0000000..d6cac2f
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/compositing/overflow/content-loses-scrollbars-expected.txt
@@ -0,0 +1,69 @@
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [8, 13],
+          "bounds": [100, 100],
+          "children": [
+            {
+              "bounds": [100, 100],
+              "children": [
+                {
+                  "bounds": [10, 10]
+                }
+              ]
+            }
+          ]
+        },
+        {
+          "position": [8, 13],
+          "bounds": [100, 100],
+          "children": [
+            {
+              "bounds": [100, 100],
+              "children": [
+                {
+                  "bounds": [10, 10]
+                }
+              ]
+            }
+          ]
+        },
+        {
+          "position": [8, 13],
+          "bounds": [100, 100],
+          "children": [
+            {
+              "bounds": [100, 100],
+              "children": [
+                {
+                  "bounds": [10, 10]
+                }
+              ]
+            }
+          ]
+        },
+        {
+          "position": [8, 13],
+          "bounds": [100, 100],
+          "children": [
+            {
+              "bounds": [100, 100],
+              "children": [
+                {
+                  "bounds": [10, 10]
+                }
+              ]
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/compositing/overflow/overflow-auto-with-touch-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/overflow/overflow-auto-with-touch-expected.txt
new file mode 100644
index 0000000..e9f7954d
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/compositing/overflow/overflow-auto-with-touch-expected.txt
@@ -0,0 +1,11 @@
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/compositing/overflow/overflow-auto-with-touch-no-overflow-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/overflow/overflow-auto-with-touch-no-overflow-expected.txt
new file mode 100644
index 0000000..e9f7954d
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/compositing/overflow/overflow-auto-with-touch-no-overflow-expected.txt
@@ -0,0 +1,11 @@
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/compositing/overflow/overflow-auto-with-touch-toggle-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/overflow/overflow-auto-with-touch-toggle-expected.txt
new file mode 100644
index 0000000..e9f7954d
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/compositing/overflow/overflow-auto-with-touch-toggle-expected.txt
@@ -0,0 +1,11 @@
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/compositing/overflow/overflow-hidden-with-touch-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/overflow/overflow-hidden-with-touch-expected.txt
new file mode 100644
index 0000000..e9f7954d
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/compositing/overflow/overflow-hidden-with-touch-expected.txt
@@ -0,0 +1,11 @@
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/compositing/overflow/overflow-overlay-with-touch-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/overflow/overflow-overlay-with-touch-expected.txt
new file mode 100644
index 0000000..e9f7954d
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/compositing/overflow/overflow-overlay-with-touch-expected.txt
@@ -0,0 +1,11 @@
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/compositing/overflow/overflow-overlay-with-touch-no-overflow-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/overflow/overflow-overlay-with-touch-no-overflow-expected.txt
new file mode 100644
index 0000000..e9f7954d
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/compositing/overflow/overflow-overlay-with-touch-no-overflow-expected.txt
@@ -0,0 +1,11 @@
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/compositing/overflow/overflow-scroll-with-touch-no-overflow-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/overflow/overflow-scroll-with-touch-no-overflow-expected.txt
new file mode 100644
index 0000000..e9f7954d
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/compositing/overflow/overflow-scroll-with-touch-no-overflow-expected.txt
@@ -0,0 +1,11 @@
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/compositing/overflow/overflow-scrollbar-layers-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/overflow/overflow-scrollbar-layers-expected.txt
new file mode 100644
index 0000000..10f2551
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/compositing/overflow/overflow-scrollbar-layers-expected.txt
@@ -0,0 +1,140 @@
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [8, 13],
+          "bounds": [100, 100],
+          "shouldFlattenTransform": false,
+          "drawsContent": true,
+          "children": [
+            {
+              "bounds": [85, 100],
+              "shouldFlattenTransform": false,
+              "children": [
+                {
+                  "bounds": [85, 200],
+                  "children": [
+                    {
+                      "bounds": [10, 200]
+                    }
+                  ]
+                }
+              ]
+            },
+            {
+              "bounds": [100, 100],
+              "children": [
+                {
+                  "position": [85, 0],
+                  "bounds": [15, 100]
+                }
+              ]
+            }
+          ]
+        },
+        {
+          "position": [8, 13],
+          "bounds": [100, 100],
+          "shouldFlattenTransform": false,
+          "drawsContent": true,
+          "children": [
+            {
+              "bounds": [100, 85],
+              "shouldFlattenTransform": false,
+              "children": [
+                {
+                  "bounds": [200, 85],
+                  "children": [
+                    {
+                      "bounds": [200, 10]
+                    }
+                  ]
+                }
+              ]
+            },
+            {
+              "bounds": [100, 100],
+              "children": [
+                {
+                  "position": [0, 85],
+                  "bounds": [100, 15]
+                }
+              ]
+            }
+          ]
+        },
+        {
+          "position": [8, 13],
+          "bounds": [100, 100],
+          "shouldFlattenTransform": false,
+          "drawsContent": true,
+          "children": [
+            {
+              "bounds": [85, 85],
+              "shouldFlattenTransform": false,
+              "children": [
+                {
+                  "bounds": [200, 200],
+                  "children": [
+                    {
+                      "bounds": [200, 200]
+                    }
+                  ]
+                }
+              ]
+            },
+            {
+              "bounds": [100, 100],
+              "children": [
+                {
+                  "position": [0, 85],
+                  "bounds": [85, 15]
+                },
+                {
+                  "position": [85, 0],
+                  "bounds": [15, 85]
+                },
+                {
+                  "position": [85, 85],
+                  "bounds": [15, 15],
+                  "drawsContent": true
+                }
+              ]
+            }
+          ]
+        },
+        {
+          "position": [8, 13],
+          "bounds": [100, 100],
+          "drawsContent": true,
+          "children": [
+            {
+              "bounds": [100, 100],
+              "children": [
+                {
+                  "bounds": [10, 10]
+                }
+              ]
+            },
+            {
+              "bounds": [100, 100],
+              "children": [
+                {
+                  "position": [85, 85],
+                  "bounds": [15, 15],
+                  "drawsContent": true
+                }
+              ]
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/compositing/overflow/overflow-visible-with-touch-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/overflow/overflow-visible-with-touch-expected.txt
new file mode 100644
index 0000000..45363138
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/compositing/overflow/overflow-visible-with-touch-expected.txt
@@ -0,0 +1,11 @@
+{
+  "bounds": [1008, 1008],
+  "children": [
+    {
+      "bounds": [1008, 1008],
+      "contentsOpaque": true,
+      "drawsContent": true
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/compositing/overflow/reparented-scrollbars-non-sc-anc-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/overflow/reparented-scrollbars-non-sc-anc-expected.txt
new file mode 100644
index 0000000..5244c6e
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/compositing/overflow/reparented-scrollbars-non-sc-anc-expected.txt
@@ -0,0 +1,73 @@
+{
+  "bounds": [1208, 821],
+  "children": [
+    {
+      "bounds": [1208, 821],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [8, 8],
+          "bounds": [1200, 800],
+          "shouldFlattenTransform": false,
+          "children": [
+            {
+              "bounds": [1200, 800],
+              "drawsContent": true,
+              "children": [
+                {
+                  "bounds": [1200, 800],
+                  "children": [
+                    {
+                      "bounds": [1200, 1000],
+                      "shouldFlattenTransform": false,
+                      "children": [
+                        {
+                          "bounds": [1200, 1000],
+                          "shouldFlattenTransform": false,
+                          "drawsContent": true,
+                          "children": [
+                            {
+                              "bounds": [1200, 1000],
+                              "shouldFlattenTransform": false,
+                              "children": [
+                                {
+                                  "bounds": [1200, 10000],
+                                  "drawsContent": true
+                                }
+                              ]
+                            }
+                          ]
+                        }
+                      ]
+                    }
+                  ]
+                }
+              ]
+            }
+          ]
+        },
+        {
+          "position": [8, 10008],
+          "bounds": [1200, 0]
+        },
+        {
+          "position": [8, 8],
+          "bounds": [1200, 1000],
+          "children": [
+            {
+              "bounds": [1200, 1000],
+              "children": [
+                {
+                  "position": [1193, 0],
+                  "bounds": [7, 1000]
+                }
+              ]
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/compositing/overflow/resize-painting-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/overflow/resize-painting-expected.txt
new file mode 100644
index 0000000..7cd1352
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/compositing/overflow/resize-painting-expected.txt
@@ -0,0 +1,30 @@
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [18, 10],
+          "bounds": [100, 100],
+          "drawsContent": true,
+          "children": [
+            {
+              "bounds": [100, 100],
+              "children": [
+                {
+                  "position": [85, 85],
+                  "bounds": [15, 15],
+                  "drawsContent": true
+                }
+              ]
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/compositing/overflow/scroll-parent-absolute-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/overflow/scroll-parent-absolute-expected.txt
new file mode 100644
index 0000000..631b21d
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/compositing/overflow/scroll-parent-absolute-expected.txt
@@ -0,0 +1,77 @@
+{
+  "bounds": [785, 5516],
+  "children": [
+    {
+      "bounds": [785, 5516],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "shouldFlattenTransform": false,
+          "children": [
+            {
+              "position": [8, 8],
+              "bounds": [500, 500],
+              "contentsOpaque": true,
+              "shouldFlattenTransform": false,
+              "drawsContent": true,
+              "backgroundColor": "#0000FF",
+              "children": [
+                {
+                  "bounds": [485, 485],
+                  "shouldFlattenTransform": false,
+                  "children": [
+                    {
+                      "bounds": [485, 5000],
+                      "drawsContent": true
+                    }
+                  ]
+                },
+                {
+                  "bounds": [500, 500],
+                  "children": [
+                    {
+                      "position": [0, 485],
+                      "bounds": [485, 15]
+                    },
+                    {
+                      "position": [485, 0],
+                      "bounds": [15, 485]
+                    },
+                    {
+                      "position": [485, 485],
+                      "bounds": [15, 15],
+                      "drawsContent": true
+                    }
+                  ]
+                }
+              ]
+            },
+            {
+              "position": [8, 8],
+              "bounds": [400, 400],
+              "drawsContent": true
+            }
+          ]
+        },
+        {
+          "position": [8, 8],
+          "bounds": [300, 300],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backfaceVisibility": "hidden",
+          "backgroundColor": "#FFFF00"
+        },
+        {
+          "position": [8, 8],
+          "bounds": [20, 5000],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FA8072",
+          "hasScrollParent": true
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/compositing/overflow/scroll-parent-absolute-with-backdrop-filter-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/overflow/scroll-parent-absolute-with-backdrop-filter-expected.txt
new file mode 100644
index 0000000..595488f
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/compositing/overflow/scroll-parent-absolute-with-backdrop-filter-expected.txt
@@ -0,0 +1,75 @@
+{
+  "bounds": [785, 5516],
+  "children": [
+    {
+      "bounds": [785, 5516],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "shouldFlattenTransform": false,
+          "children": [
+            {
+              "position": [8, 8],
+              "bounds": [500, 500],
+              "shouldFlattenTransform": false,
+              "drawsContent": true,
+              "children": [
+                {
+                  "bounds": [485, 485],
+                  "shouldFlattenTransform": false,
+                  "children": [
+                    {
+                      "bounds": [485, 5000],
+                      "drawsContent": true
+                    }
+                  ]
+                },
+                {
+                  "bounds": [500, 500],
+                  "children": [
+                    {
+                      "position": [0, 485],
+                      "bounds": [485, 15]
+                    },
+                    {
+                      "position": [485, 0],
+                      "bounds": [15, 485]
+                    },
+                    {
+                      "position": [485, 485],
+                      "bounds": [15, 15],
+                      "drawsContent": true
+                    }
+                  ]
+                }
+              ]
+            },
+            {
+              "position": [8, 8],
+              "bounds": [400, 400],
+              "drawsContent": true
+            }
+          ]
+        },
+        {
+          "position": [8, 8],
+          "bounds": [300, 300],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backfaceVisibility": "hidden",
+          "backgroundColor": "#FFFF00"
+        },
+        {
+          "position": [8, 8],
+          "bounds": [20, 5000],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FA8072",
+          "hasScrollParent": true
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/compositing/overflow/scroll-parent-with-non-stacking-context-composited-ancestor-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/overflow/scroll-parent-with-non-stacking-context-composited-ancestor-expected.txt
new file mode 100644
index 0000000..de97ec2
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/compositing/overflow/scroll-parent-with-non-stacking-context-composited-ancestor-expected.txt
@@ -0,0 +1,74 @@
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [98, 90],
+          "bounds": [300, 300],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backfaceVisibility": "hidden",
+          "backgroundColor": "#FFEFD5",
+          "children": [
+            {
+              "bounds": [102, 102],
+              "shouldFlattenTransform": false,
+              "drawsContent": true,
+              "children": [
+                {
+                  "position": [1, 1],
+                  "bounds": [100, 100],
+                  "shouldFlattenTransform": false,
+                  "children": [
+                    {
+                      "bounds": [100, 180]
+                    }
+                  ]
+                }
+              ]
+            }
+          ]
+        },
+        {
+          "position": [60, 60],
+          "bounds": [80, 80],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#008000"
+        },
+        {
+          "shouldFlattenTransform": false,
+          "children": [
+            {
+              "position": [103, 95],
+              "bounds": [60, 40],
+              "contentsOpaque": true,
+              "drawsContent": true,
+              "backgroundColor": "#0000FF"
+            },
+            {
+              "position": [103, 139],
+              "bounds": [60, 128],
+              "drawsContent": true
+            }
+          ]
+        },
+        {
+          "position": [98, 90],
+          "bounds": [102, 102],
+          "children": [
+            {
+              "position": [94, 1],
+              "bounds": [7, 100]
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/compositing/overflow/scrolling-content-clip-to-viewport-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/overflow/scrolling-content-clip-to-viewport-expected.txt
new file mode 100644
index 0000000..e456a58
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/compositing/overflow/scrolling-content-clip-to-viewport-expected.txt
@@ -0,0 +1,54 @@
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "bounds": [320, 340],
+          "shouldFlattenTransform": false,
+          "drawsContent": true,
+          "children": [
+            {
+              "bounds": [305, 325],
+              "shouldFlattenTransform": false,
+              "children": [
+                {
+                  "bounds": [305, 1224]
+                }
+              ]
+            },
+            {
+              "bounds": [320, 340],
+              "children": [
+                {
+                  "position": [0, 325],
+                  "bounds": [305, 15]
+                },
+                {
+                  "position": [305, 0],
+                  "bounds": [15, 325]
+                },
+                {
+                  "position": [305, 325],
+                  "bounds": [15, 15],
+                  "drawsContent": true
+                }
+              ]
+            }
+          ]
+        },
+        {
+          "position": [10, 10],
+          "bounds": [284, 1204],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#C0C0C0"
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/compositing/overflow/selection-gaps-after-removing-scrolling-contents-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/overflow/selection-gaps-after-removing-scrolling-contents-expected.txt
new file mode 100644
index 0000000..f4e88a0
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/compositing/overflow/selection-gaps-after-removing-scrolling-contents-expected.txt
@@ -0,0 +1,502 @@
+This test passes if the container's scrolling contents layer (the first child of the GraphicsLayer with 4 children) draws content only on iterations 1 and 2, and its scrolling block selection layer (the child of the scrolling contents layer) draws content only on iteration 3. The scrolling block selection layer should also be much smaller than the scrolling contents layer.
+Lorem Ipsum
+Lorem Ipsum
+Lorem Ipsum
+Lorem Ipsum
+Lorem Ipsum
+Lorem Ipsum
+Lorem Ipsum
+Lorem Ipsum
+Lorem Ipsum
+Lorem Ipsum
+
+
+*** iteration 1: ***
+
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [8, 68],
+          "bounds": [300, 500],
+          "contentsOpaque": true,
+          "shouldFlattenTransform": false,
+          "drawsContent": true,
+          "backgroundColor": "#0000FF",
+          "children": [
+            {
+              "bounds": [285, 485],
+              "shouldFlattenTransform": false,
+              "children": [
+                {
+                  "bounds": [285, 665],
+                  "drawsContent": true
+                }
+              ]
+            },
+            {
+              "bounds": [300, 500],
+              "children": [
+                {
+                  "position": [0, 485],
+                  "bounds": [285, 15]
+                },
+                {
+                  "position": [285, 0],
+                  "bounds": [15, 485]
+                },
+                {
+                  "position": [285, 485],
+                  "bounds": [15, 15],
+                  "drawsContent": true
+                }
+              ]
+            }
+          ]
+        },
+        {
+          "position": [23, 83],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 148],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 213],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 278],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 343],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 408],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 473],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 538],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 603],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 668],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        }
+      ]
+    }
+  ]
+}
+
+
+*** iteration 2: ***
+
+{
+  "bounds": [785, 2578],
+  "children": [
+    {
+      "bounds": [785, 2578],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [8, 68],
+          "bounds": [300, 500],
+          "contentsOpaque": true,
+          "shouldFlattenTransform": false,
+          "drawsContent": true,
+          "backgroundColor": "#0000FF",
+          "children": [
+            {
+              "bounds": [285, 485],
+              "shouldFlattenTransform": false,
+              "children": [
+                {
+                  "bounds": [285, 665],
+                  "drawsContent": true
+                }
+              ]
+            },
+            {
+              "bounds": [300, 500],
+              "children": [
+                {
+                  "position": [0, 485],
+                  "bounds": [285, 15]
+                },
+                {
+                  "position": [285, 0],
+                  "bounds": [15, 485]
+                },
+                {
+                  "position": [285, 485],
+                  "bounds": [15, 15],
+                  "drawsContent": true
+                }
+              ]
+            }
+          ]
+        },
+        {
+          "position": [23, 83],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 148],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 213],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 278],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 343],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 408],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 473],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 538],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 603],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 668],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        }
+      ]
+    }
+  ]
+}
+
+
+*** iteration 3: ***
+
+{
+  "bounds": [785, 4562],
+  "children": [
+    {
+      "bounds": [785, 4562],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [8, 68],
+          "bounds": [300, 500],
+          "shouldFlattenTransform": false,
+          "drawsContent": true,
+          "children": [
+            {
+              "bounds": [285, 485],
+              "shouldFlattenTransform": false,
+              "children": [
+                {
+                  "bounds": [285, 665]
+                }
+              ]
+            },
+            {
+              "bounds": [300, 500],
+              "children": [
+                {
+                  "position": [0, 485],
+                  "bounds": [285, 15]
+                },
+                {
+                  "position": [285, 0],
+                  "bounds": [15, 485]
+                },
+                {
+                  "position": [285, 485],
+                  "bounds": [15, 15],
+                  "drawsContent": true
+                }
+              ]
+            }
+          ]
+        },
+        {
+          "position": [23, 83],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 148],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 213],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 278],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 343],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 408],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 473],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 538],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 603],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 668],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        }
+      ]
+    }
+  ]
+}
+
+
+*** iteration 4: ***
+
+{
+  "bounds": [785, 6498],
+  "children": [
+    {
+      "bounds": [785, 6498],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [8, 68],
+          "bounds": [300, 500],
+          "shouldFlattenTransform": false,
+          "drawsContent": true,
+          "children": [
+            {
+              "bounds": [285, 485],
+              "shouldFlattenTransform": false,
+              "children": [
+                {
+                  "bounds": [285, 665]
+                }
+              ]
+            },
+            {
+              "bounds": [300, 500],
+              "children": [
+                {
+                  "position": [0, 485],
+                  "bounds": [285, 15]
+                },
+                {
+                  "position": [285, 0],
+                  "bounds": [15, 485]
+                },
+                {
+                  "position": [285, 485],
+                  "bounds": [15, 15],
+                  "drawsContent": true
+                }
+              ]
+            }
+          ]
+        },
+        {
+          "position": [23, 83],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 148],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 213],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 278],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 343],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 408],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 473],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 538],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 603],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 668],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/compositing/overflow/selection-gaps-toggling-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/overflow/selection-gaps-toggling-expected.txt
new file mode 100644
index 0000000..7bb7d757
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/compositing/overflow/selection-gaps-toggling-expected.txt
@@ -0,0 +1,375 @@
+This test passes if the container's scrolling contents layer (the first child of the GraphicsLayer with 4 children) doesn't draw content at all, and its scrolling block selection layer (the child of the scrolling contents layer) draws content only on iteration 2. The scrolling block selection layer should also be much smaller than the scrolling contents layer.
+Lorem Ipsum
+Lorem Ipsum
+Lorem Ipsum
+Lorem Ipsum
+Lorem Ipsum
+Lorem Ipsum
+Lorem Ipsum
+Lorem Ipsum
+Lorem Ipsum
+Lorem Ipsum
+
+
+*** iteration 1: ***
+
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [8, 68],
+          "bounds": [300, 500],
+          "shouldFlattenTransform": false,
+          "drawsContent": true,
+          "children": [
+            {
+              "bounds": [285, 485],
+              "shouldFlattenTransform": false,
+              "children": [
+                {
+                  "bounds": [285, 665]
+                }
+              ]
+            },
+            {
+              "bounds": [300, 500],
+              "children": [
+                {
+                  "position": [0, 485],
+                  "bounds": [285, 15]
+                },
+                {
+                  "position": [285, 0],
+                  "bounds": [15, 485]
+                },
+                {
+                  "position": [285, 485],
+                  "bounds": [15, 15],
+                  "drawsContent": true
+                }
+              ]
+            }
+          ]
+        },
+        {
+          "position": [23, 83],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 148],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 213],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 278],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 343],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 408],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 473],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 538],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 603],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 668],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        }
+      ]
+    }
+  ]
+}
+
+
+*** iteration 2: ***
+
+{
+  "bounds": [785, 2530],
+  "children": [
+    {
+      "bounds": [785, 2530],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [8, 68],
+          "bounds": [300, 500],
+          "shouldFlattenTransform": false,
+          "drawsContent": true,
+          "children": [
+            {
+              "bounds": [285, 485],
+              "shouldFlattenTransform": false,
+              "children": [
+                {
+                  "bounds": [285, 665]
+                }
+              ]
+            },
+            {
+              "bounds": [300, 500],
+              "children": [
+                {
+                  "position": [0, 485],
+                  "bounds": [285, 15]
+                },
+                {
+                  "position": [285, 0],
+                  "bounds": [15, 485]
+                },
+                {
+                  "position": [285, 485],
+                  "bounds": [15, 15],
+                  "drawsContent": true
+                }
+              ]
+            }
+          ]
+        },
+        {
+          "position": [23, 83],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 148],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 213],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 278],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 343],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 408],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 473],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 538],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 603],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 668],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        }
+      ]
+    }
+  ]
+}
+
+
+*** iteration 3: ***
+
+{
+  "bounds": [785, 4466],
+  "children": [
+    {
+      "bounds": [785, 4466],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [8, 68],
+          "bounds": [300, 500],
+          "shouldFlattenTransform": false,
+          "drawsContent": true,
+          "children": [
+            {
+              "bounds": [285, 485],
+              "shouldFlattenTransform": false,
+              "children": [
+                {
+                  "bounds": [285, 665]
+                }
+              ]
+            },
+            {
+              "bounds": [300, 500],
+              "children": [
+                {
+                  "position": [0, 485],
+                  "bounds": [285, 15]
+                },
+                {
+                  "position": [285, 0],
+                  "bounds": [15, 485]
+                },
+                {
+                  "position": [285, 485],
+                  "bounds": [15, 15],
+                  "drawsContent": true
+                }
+              ]
+            }
+          ]
+        },
+        {
+          "position": [23, 83],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 148],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 213],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 278],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 343],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 408],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 473],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 538],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 603],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 668],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/compositing/overflow/selection-gaps-toggling-with-scrolling-contents-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/overflow/selection-gaps-toggling-with-scrolling-contents-expected.txt
new file mode 100644
index 0000000..f6d489f
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/compositing/overflow/selection-gaps-toggling-with-scrolling-contents-expected.txt
@@ -0,0 +1,502 @@
+This test passes if the container's scrolling contents layer (the first child of the GraphicsLayer with 4 children) draws content only on iterations 2 and 3, and its scrolling block selection layer (the child of the scrolling contents layer) draws content only on iteration 4. The scrolling block selection layer should also be much smaller than the scrolling contents layer.
+Lorem Ipsum
+Lorem Ipsum
+Lorem Ipsum
+Lorem Ipsum
+Lorem Ipsum
+Lorem Ipsum
+Lorem Ipsum
+Lorem Ipsum
+Lorem Ipsum
+Lorem Ipsum
+
+
+*** iteration 1: ***
+
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [8, 68],
+          "bounds": [300, 500],
+          "shouldFlattenTransform": false,
+          "drawsContent": true,
+          "children": [
+            {
+              "bounds": [285, 485],
+              "shouldFlattenTransform": false,
+              "children": [
+                {
+                  "bounds": [285, 665]
+                }
+              ]
+            },
+            {
+              "bounds": [300, 500],
+              "children": [
+                {
+                  "position": [0, 485],
+                  "bounds": [285, 15]
+                },
+                {
+                  "position": [285, 0],
+                  "bounds": [15, 485]
+                },
+                {
+                  "position": [285, 485],
+                  "bounds": [15, 15],
+                  "drawsContent": true
+                }
+              ]
+            }
+          ]
+        },
+        {
+          "position": [23, 83],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 148],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 213],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 278],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 343],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 408],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 473],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 538],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 603],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 668],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        }
+      ]
+    }
+  ]
+}
+
+
+*** iteration 2: ***
+
+{
+  "bounds": [785, 2530],
+  "children": [
+    {
+      "bounds": [785, 2530],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [8, 68],
+          "bounds": [300, 500],
+          "contentsOpaque": true,
+          "shouldFlattenTransform": false,
+          "drawsContent": true,
+          "backgroundColor": "#0000FF",
+          "children": [
+            {
+              "bounds": [285, 485],
+              "shouldFlattenTransform": false,
+              "children": [
+                {
+                  "bounds": [285, 665],
+                  "drawsContent": true
+                }
+              ]
+            },
+            {
+              "bounds": [300, 500],
+              "children": [
+                {
+                  "position": [0, 485],
+                  "bounds": [285, 15]
+                },
+                {
+                  "position": [285, 0],
+                  "bounds": [15, 485]
+                },
+                {
+                  "position": [285, 485],
+                  "bounds": [15, 15],
+                  "drawsContent": true
+                }
+              ]
+            }
+          ]
+        },
+        {
+          "position": [23, 83],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 148],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 213],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 278],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 343],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 408],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 473],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 538],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 603],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 668],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        }
+      ]
+    }
+  ]
+}
+
+
+*** iteration 3: ***
+
+{
+  "bounds": [785, 4514],
+  "children": [
+    {
+      "bounds": [785, 4514],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [8, 68],
+          "bounds": [300, 500],
+          "contentsOpaque": true,
+          "shouldFlattenTransform": false,
+          "drawsContent": true,
+          "backgroundColor": "#0000FF",
+          "children": [
+            {
+              "bounds": [285, 485],
+              "shouldFlattenTransform": false,
+              "children": [
+                {
+                  "bounds": [285, 665],
+                  "drawsContent": true
+                }
+              ]
+            },
+            {
+              "bounds": [300, 500],
+              "children": [
+                {
+                  "position": [0, 485],
+                  "bounds": [285, 15]
+                },
+                {
+                  "position": [285, 0],
+                  "bounds": [15, 485]
+                },
+                {
+                  "position": [285, 485],
+                  "bounds": [15, 15],
+                  "drawsContent": true
+                }
+              ]
+            }
+          ]
+        },
+        {
+          "position": [23, 83],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 148],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 213],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 278],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 343],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 408],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 473],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 538],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 603],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 668],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        }
+      ]
+    }
+  ]
+}
+
+
+*** iteration 4: ***
+
+{
+  "bounds": [785, 6498],
+  "children": [
+    {
+      "bounds": [785, 6498],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [8, 68],
+          "bounds": [300, 500],
+          "shouldFlattenTransform": false,
+          "drawsContent": true,
+          "children": [
+            {
+              "bounds": [285, 485],
+              "shouldFlattenTransform": false,
+              "children": [
+                {
+                  "bounds": [285, 665]
+                }
+              ]
+            },
+            {
+              "bounds": [300, 500],
+              "children": [
+                {
+                  "position": [0, 485],
+                  "bounds": [285, 15]
+                },
+                {
+                  "position": [285, 0],
+                  "bounds": [15, 485]
+                },
+                {
+                  "position": [285, 485],
+                  "bounds": [15, 15],
+                  "drawsContent": true
+                }
+              ]
+            }
+          ]
+        },
+        {
+          "position": [23, 83],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 148],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 213],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 278],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 343],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 408],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 473],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 538],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 603],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 668],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/compositing/overflow/textarea-scroll-touch-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/overflow/textarea-scroll-touch-expected.txt
new file mode 100644
index 0000000..7569bf1
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/compositing/overflow/textarea-scroll-touch-expected.txt
@@ -0,0 +1,84 @@
+  
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [18, 18],
+          "bounds": [206, 126],
+          "contentsOpaque": true,
+          "shouldFlattenTransform": false,
+          "drawsContent": true,
+          "backgroundColor": "#CCCCCC",
+          "children": [
+            {
+              "position": [1, 1],
+              "bounds": [189, 124],
+              "shouldFlattenTransform": false,
+              "children": [
+                {
+                  "bounds": [189, 328],
+                  "drawsContent": true
+                }
+              ]
+            },
+            {
+              "bounds": [206, 126],
+              "children": [
+                {
+                  "position": [190, 1],
+                  "bounds": [15, 109]
+                },
+                {
+                  "position": [190, 110],
+                  "bounds": [15, 15],
+                  "drawsContent": true
+                }
+              ]
+            }
+          ]
+        },
+        {
+          "position": [248, 18],
+          "bounds": [206, 126],
+          "contentsOpaque": true,
+          "shouldFlattenTransform": false,
+          "drawsContent": true,
+          "backgroundColor": "#CCCCCC",
+          "children": [
+            {
+              "position": [1, 1],
+              "bounds": [189, 124],
+              "shouldFlattenTransform": false,
+              "children": [
+                {
+                  "bounds": [189, 328],
+                  "drawsContent": true
+                }
+              ]
+            },
+            {
+              "bounds": [206, 126],
+              "children": [
+                {
+                  "position": [190, 1],
+                  "bounds": [15, 109]
+                },
+                {
+                  "position": [190, 110],
+                  "bounds": [15, 15],
+                  "drawsContent": true
+                }
+              ]
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/compositing/overflow/universal-accelerated-overflow-scroll-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/overflow/universal-accelerated-overflow-scroll-expected.txt
new file mode 100644
index 0000000..6ca1829
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/compositing/overflow/universal-accelerated-overflow-scroll-expected.txt
@@ -0,0 +1,969 @@
+{
+  "bounds": [785, 2016],
+  "children": [
+    {
+      "bounds": [785, 2016],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "shouldFlattenTransform": false,
+          "children": [
+            {
+              "position": [10, 10],
+              "bounds": [104, 104],
+              "shouldFlattenTransform": false,
+              "drawsContent": true,
+              "children": [
+                {
+                  "position": [2, 2],
+                  "bounds": [85, 85],
+                  "shouldFlattenTransform": false,
+                  "children": [
+                    {
+                      "bounds": [85, 144],
+                      "drawsContent": true
+                    }
+                  ]
+                },
+                {
+                  "bounds": [104, 104],
+                  "children": [
+                    {
+                      "position": [2, 87],
+                      "bounds": [85, 15]
+                    },
+                    {
+                      "position": [87, 2],
+                      "bounds": [15, 85]
+                    },
+                    {
+                      "position": [87, 87],
+                      "bounds": [15, 15],
+                      "drawsContent": true
+                    }
+                  ]
+                }
+              ]
+            },
+            {
+              "position": [35, 75],
+              "bounds": [80, 40],
+              "drawsContent": true
+            }
+          ]
+        },
+        {
+          "shouldFlattenTransform": false,
+          "children": [
+            {
+              "position": [16, -15],
+              "bounds": [75, 24],
+              "contentsOpaque": true,
+              "drawsContent": true,
+              "backgroundColor": "#0000FF"
+            },
+            {
+              "position": [16, 41],
+              "bounds": [75, 24],
+              "drawsContent": true
+            }
+          ]
+        },
+        {
+          "position": [130, 10],
+          "bounds": [104, 104],
+          "shouldFlattenTransform": false,
+          "drawsContent": true,
+          "children": [
+            {
+              "position": [2, 2],
+              "bounds": [85, 85],
+              "shouldFlattenTransform": false,
+              "children": [
+                {
+                  "bounds": [105, 144],
+                  "drawsContent": true
+                }
+              ]
+            },
+            {
+              "bounds": [104, 104],
+              "children": [
+                {
+                  "position": [2, 87],
+                  "bounds": [85, 15]
+                },
+                {
+                  "position": [87, 2],
+                  "bounds": [15, 85]
+                },
+                {
+                  "position": [87, 87],
+                  "bounds": [15, 15],
+                  "drawsContent": true
+                }
+              ]
+            }
+          ]
+        },
+        {
+          "shouldFlattenTransform": false,
+          "children": [
+            {
+              "position": [157, 18],
+              "bounds": [80, 40],
+              "contentsOpaque": true,
+              "drawsContent": true,
+              "backgroundColor": "#800080"
+            },
+            {
+              "position": [136, -15],
+              "bounds": [75, 80],
+              "drawsContent": true
+            }
+          ]
+        },
+        {
+          "shouldFlattenTransform": false,
+          "children": [
+            {
+              "position": [250, 10],
+              "bounds": [104, 104],
+              "shouldFlattenTransform": false,
+              "drawsContent": true,
+              "children": [
+                {
+                  "position": [2, 2],
+                  "bounds": [85, 85],
+                  "shouldFlattenTransform": false,
+                  "children": [
+                    {
+                      "bounds": [85, 144]
+                    }
+                  ]
+                },
+                {
+                  "bounds": [104, 104],
+                  "children": [
+                    {
+                      "position": [2, 87],
+                      "bounds": [85, 15]
+                    },
+                    {
+                      "position": [87, 2],
+                      "bounds": [15, 85]
+                    },
+                    {
+                      "position": [87, 87],
+                      "bounds": [15, 15],
+                      "drawsContent": true
+                    }
+                  ]
+                }
+              ]
+            },
+            {
+              "position": [275, 75],
+              "bounds": [80, 40],
+              "drawsContent": true
+            }
+          ]
+        },
+        {
+          "shouldFlattenTransform": false,
+          "children": [
+            {
+              "position": [256, -15],
+              "bounds": [75, 24],
+              "contentsOpaque": true,
+              "drawsContent": true,
+              "backgroundColor": "#0000FF"
+            },
+            {
+              "position": [256, 41],
+              "bounds": [75, 24],
+              "drawsContent": true
+            }
+          ]
+        },
+        {
+          "shouldFlattenTransform": false,
+          "children": [
+            {
+              "position": [370, 10],
+              "bounds": [104, 104],
+              "shouldFlattenTransform": false,
+              "drawsContent": true,
+              "children": [
+                {
+                  "position": [2, 2],
+                  "bounds": [85, 85],
+                  "shouldFlattenTransform": false,
+                  "children": [
+                    {
+                      "bounds": [85, 144],
+                      "drawsContent": true
+                    }
+                  ]
+                },
+                {
+                  "bounds": [104, 104],
+                  "children": [
+                    {
+                      "position": [2, 87],
+                      "bounds": [85, 15]
+                    },
+                    {
+                      "position": [87, 2],
+                      "bounds": [15, 85]
+                    },
+                    {
+                      "position": [87, 87],
+                      "bounds": [15, 15],
+                      "drawsContent": true
+                    }
+                  ]
+                }
+              ]
+            },
+            {
+              "position": [395, 75],
+              "bounds": [80, 40],
+              "drawsContent": true
+            }
+          ]
+        },
+        {
+          "shouldFlattenTransform": false,
+          "children": [
+            {
+              "position": [376, -15],
+              "bounds": [75, 24],
+              "contentsOpaque": true,
+              "drawsContent": true,
+              "backgroundColor": "#0000FF"
+            },
+            {
+              "position": [376, 41],
+              "bounds": [75, 24],
+              "drawsContent": true
+            }
+          ]
+        },
+        {
+          "position": [10, 130],
+          "bounds": [104, 104],
+          "shouldFlattenTransform": false,
+          "drawsContent": true,
+          "children": [
+            {
+              "position": [2, 2],
+              "bounds": [85, 85],
+              "shouldFlattenTransform": false,
+              "children": [
+                {
+                  "bounds": [105, 144],
+                  "drawsContent": true
+                }
+              ]
+            },
+            {
+              "bounds": [104, 104],
+              "children": [
+                {
+                  "position": [2, 87],
+                  "bounds": [85, 15]
+                },
+                {
+                  "position": [87, 2],
+                  "bounds": [15, 85]
+                },
+                {
+                  "position": [87, 87],
+                  "bounds": [15, 15],
+                  "drawsContent": true
+                }
+              ]
+            }
+          ]
+        },
+        {
+          "shouldFlattenTransform": false,
+          "children": [
+            {
+              "position": [37, 138],
+              "bounds": [80, 40],
+              "contentsOpaque": true,
+              "drawsContent": true,
+              "backgroundColor": "#800080"
+            },
+            {
+              "position": [16, 105],
+              "bounds": [75, 80],
+              "drawsContent": true
+            }
+          ]
+        },
+        {
+          "shouldFlattenTransform": false,
+          "children": [
+            {
+              "position": [130, 130],
+              "bounds": [104, 104],
+              "shouldFlattenTransform": false,
+              "drawsContent": true,
+              "children": [
+                {
+                  "position": [2, 2],
+                  "bounds": [85, 85],
+                  "shouldFlattenTransform": false,
+                  "children": [
+                    {
+                      "bounds": [85, 144]
+                    }
+                  ]
+                },
+                {
+                  "bounds": [104, 104],
+                  "children": [
+                    {
+                      "position": [2, 87],
+                      "bounds": [85, 15]
+                    },
+                    {
+                      "position": [87, 2],
+                      "bounds": [15, 85]
+                    },
+                    {
+                      "position": [87, 87],
+                      "bounds": [15, 15],
+                      "drawsContent": true
+                    }
+                  ]
+                }
+              ]
+            },
+            {
+              "position": [155, 195],
+              "bounds": [80, 40],
+              "drawsContent": true
+            }
+          ]
+        },
+        {
+          "shouldFlattenTransform": false,
+          "children": [
+            {
+              "position": [136, 105],
+              "bounds": [75, 24],
+              "contentsOpaque": true,
+              "drawsContent": true,
+              "backgroundColor": "#0000FF"
+            },
+            {
+              "position": [136, 161],
+              "bounds": [75, 24],
+              "drawsContent": true
+            }
+          ]
+        },
+        {
+          "position": [250, 130],
+          "bounds": [104, 104],
+          "shouldFlattenTransform": false,
+          "drawsContent": true,
+          "children": [
+            {
+              "position": [2, 2],
+              "bounds": [85, 85],
+              "shouldFlattenTransform": false,
+              "children": [
+                {
+                  "bounds": [105, 144]
+                }
+              ]
+            },
+            {
+              "bounds": [104, 104],
+              "children": [
+                {
+                  "position": [2, 87],
+                  "bounds": [85, 15]
+                },
+                {
+                  "position": [87, 2],
+                  "bounds": [15, 85]
+                },
+                {
+                  "position": [87, 87],
+                  "bounds": [15, 15],
+                  "drawsContent": true
+                }
+              ]
+            }
+          ]
+        },
+        {
+          "shouldFlattenTransform": false,
+          "children": [
+            {
+              "position": [277, 138],
+              "bounds": [80, 40],
+              "contentsOpaque": true,
+              "drawsContent": true,
+              "backgroundColor": "#800080"
+            },
+            {
+              "position": [256, 105],
+              "bounds": [75, 80],
+              "drawsContent": true
+            }
+          ]
+        },
+        {
+          "position": [370, 130],
+          "bounds": [104, 104],
+          "shouldFlattenTransform": false,
+          "drawsContent": true,
+          "children": [
+            {
+              "position": [2, 2],
+              "bounds": [85, 85],
+              "shouldFlattenTransform": false,
+              "children": [
+                {
+                  "bounds": [105, 144]
+                }
+              ]
+            },
+            {
+              "bounds": [104, 104],
+              "children": [
+                {
+                  "position": [2, 87],
+                  "bounds": [85, 15]
+                },
+                {
+                  "position": [87, 2],
+                  "bounds": [15, 85]
+                },
+                {
+                  "position": [87, 87],
+                  "bounds": [15, 15],
+                  "drawsContent": true
+                }
+              ]
+            }
+          ]
+        },
+        {
+          "shouldFlattenTransform": false,
+          "children": [
+            {
+              "position": [397, 138],
+              "bounds": [80, 40],
+              "contentsOpaque": true,
+              "drawsContent": true,
+              "backgroundColor": "#800080"
+            },
+            {
+              "position": [376, 105],
+              "bounds": [75, 80],
+              "drawsContent": true
+            }
+          ]
+        },
+        {
+          "position": [10, 250],
+          "bounds": [104, 104],
+          "shouldFlattenTransform": false,
+          "drawsContent": true,
+          "children": [
+            {
+              "position": [2, 2],
+              "bounds": [85, 85],
+              "shouldFlattenTransform": false,
+              "children": [
+                {
+                  "bounds": [85, 144],
+                  "drawsContent": true
+                }
+              ]
+            },
+            {
+              "bounds": [104, 104],
+              "children": [
+                {
+                  "position": [2, 87],
+                  "bounds": [85, 15]
+                },
+                {
+                  "position": [87, 2],
+                  "bounds": [15, 85]
+                },
+                {
+                  "position": [87, 87],
+                  "bounds": [15, 15],
+                  "drawsContent": true
+                }
+              ]
+            }
+          ]
+        },
+        {
+          "position": [35, 315],
+          "bounds": [80, 40],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#800080"
+        },
+        {
+          "shouldFlattenTransform": false,
+          "children": [
+            {
+              "position": [16, 225],
+              "bounds": [75, 24],
+              "contentsOpaque": true,
+              "drawsContent": true,
+              "backgroundColor": "#0000FF"
+            },
+            {
+              "position": [16, 281],
+              "bounds": [75, 24],
+              "drawsContent": true
+            }
+          ]
+        },
+        {
+          "position": [130, 250],
+          "bounds": [104, 104],
+          "shouldFlattenTransform": false,
+          "drawsContent": true,
+          "children": [
+            {
+              "position": [2, 2],
+              "bounds": [85, 85],
+              "shouldFlattenTransform": false,
+              "children": [
+                {
+                  "bounds": [85, 144]
+                }
+              ]
+            },
+            {
+              "bounds": [104, 104],
+              "children": [
+                {
+                  "position": [2, 87],
+                  "bounds": [85, 15]
+                },
+                {
+                  "position": [87, 2],
+                  "bounds": [15, 85]
+                },
+                {
+                  "position": [87, 87],
+                  "bounds": [15, 15],
+                  "drawsContent": true
+                }
+              ]
+            }
+          ]
+        },
+        {
+          "position": [155, 315],
+          "bounds": [80, 40],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#800080"
+        },
+        {
+          "shouldFlattenTransform": false,
+          "children": [
+            {
+              "position": [136, 225],
+              "bounds": [75, 24],
+              "contentsOpaque": true,
+              "drawsContent": true,
+              "backgroundColor": "#0000FF"
+            },
+            {
+              "position": [136, 281],
+              "bounds": [75, 24],
+              "drawsContent": true
+            }
+          ]
+        },
+        {
+          "position": [250, 250],
+          "bounds": [104, 104],
+          "shouldFlattenTransform": false,
+          "drawsContent": true,
+          "children": [
+            {
+              "position": [2, 2],
+              "bounds": [85, 85],
+              "shouldFlattenTransform": false,
+              "children": [
+                {
+                  "bounds": [85, 144],
+                  "drawsContent": true
+                }
+              ]
+            },
+            {
+              "bounds": [104, 104],
+              "children": [
+                {
+                  "position": [2, 87],
+                  "bounds": [85, 15]
+                },
+                {
+                  "position": [87, 2],
+                  "bounds": [15, 85]
+                },
+                {
+                  "position": [87, 87],
+                  "bounds": [15, 15],
+                  "drawsContent": true
+                }
+              ]
+            }
+          ]
+        },
+        {
+          "position": [275, 315],
+          "bounds": [80, 40],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#800080"
+        },
+        {
+          "shouldFlattenTransform": false,
+          "children": [
+            {
+              "position": [256, 225],
+              "bounds": [75, 24],
+              "contentsOpaque": true,
+              "drawsContent": true,
+              "backgroundColor": "#0000FF"
+            },
+            {
+              "position": [256, 281],
+              "bounds": [75, 24],
+              "drawsContent": true
+            }
+          ]
+        },
+        {
+          "position": [370, 250],
+          "bounds": [104, 104],
+          "shouldFlattenTransform": false,
+          "drawsContent": true,
+          "children": [
+            {
+              "position": [2, 2],
+              "bounds": [85, 85],
+              "shouldFlattenTransform": false,
+              "children": [
+                {
+                  "bounds": [85, 144]
+                }
+              ]
+            },
+            {
+              "bounds": [104, 104],
+              "children": [
+                {
+                  "position": [2, 87],
+                  "bounds": [85, 15]
+                },
+                {
+                  "position": [87, 2],
+                  "bounds": [15, 85]
+                },
+                {
+                  "position": [87, 87],
+                  "bounds": [15, 15],
+                  "drawsContent": true
+                }
+              ]
+            }
+          ]
+        },
+        {
+          "position": [395, 315],
+          "bounds": [80, 40],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#800080"
+        },
+        {
+          "shouldFlattenTransform": false,
+          "children": [
+            {
+              "position": [376, 225],
+              "bounds": [75, 24],
+              "contentsOpaque": true,
+              "drawsContent": true,
+              "backgroundColor": "#0000FF"
+            },
+            {
+              "position": [376, 281],
+              "bounds": [75, 24],
+              "drawsContent": true
+            }
+          ]
+        },
+        {
+          "position": [375, 20],
+          "bounds": [50, 100],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#008000"
+        },
+        {
+          "position": [15, 140],
+          "bounds": [50, 100],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#008000"
+        },
+        {
+          "position": [135, 140],
+          "bounds": [50, 100],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#008000"
+        },
+        {
+          "position": [255, 140],
+          "bounds": [50, 100],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#008000"
+        },
+        {
+          "position": [15, 260],
+          "bounds": [50, 100],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#008000"
+        },
+        {
+          "position": [135, 260],
+          "bounds": [50, 100],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#008000"
+        },
+        {
+          "shouldFlattenTransform": false,
+          "children": [
+            {
+              "position": [16, -43],
+              "bounds": [75, 24],
+              "contentsOpaque": true,
+              "drawsContent": true,
+              "backgroundColor": "#0000FF"
+            },
+            {
+              "position": [16, 13],
+              "bounds": [75, 80],
+              "drawsContent": true
+            }
+          ]
+        },
+        {
+          "shouldFlattenTransform": false,
+          "children": [
+            {
+              "position": [136, -43],
+              "bounds": [75, 24],
+              "contentsOpaque": true,
+              "drawsContent": true,
+              "backgroundColor": "#0000FF"
+            },
+            {
+              "position": [136, 13],
+              "bounds": [75, 80],
+              "drawsContent": true
+            }
+          ]
+        },
+        {
+          "shouldFlattenTransform": false,
+          "children": [
+            {
+              "position": [256, -43],
+              "bounds": [75, 24],
+              "contentsOpaque": true,
+              "drawsContent": true,
+              "backgroundColor": "#0000FF"
+            },
+            {
+              "position": [256, 13],
+              "bounds": [75, 80],
+              "drawsContent": true
+            }
+          ]
+        },
+        {
+          "shouldFlattenTransform": false,
+          "children": [
+            {
+              "position": [376, -43],
+              "bounds": [75, 24],
+              "contentsOpaque": true,
+              "drawsContent": true,
+              "backgroundColor": "#0000FF"
+            },
+            {
+              "position": [376, 13],
+              "bounds": [75, 80],
+              "drawsContent": true
+            }
+          ]
+        },
+        {
+          "shouldFlattenTransform": false,
+          "children": [
+            {
+              "position": [16, 77],
+              "bounds": [75, 24],
+              "contentsOpaque": true,
+              "drawsContent": true,
+              "backgroundColor": "#0000FF"
+            },
+            {
+              "position": [16, 133],
+              "bounds": [75, 80],
+              "drawsContent": true
+            }
+          ]
+        },
+        {
+          "shouldFlattenTransform": false,
+          "children": [
+            {
+              "position": [136, 77],
+              "bounds": [75, 24],
+              "contentsOpaque": true,
+              "drawsContent": true,
+              "backgroundColor": "#0000FF"
+            },
+            {
+              "position": [136, 133],
+              "bounds": [75, 80],
+              "drawsContent": true
+            }
+          ]
+        },
+        {
+          "shouldFlattenTransform": false,
+          "children": [
+            {
+              "position": [256, 77],
+              "bounds": [75, 24],
+              "contentsOpaque": true,
+              "drawsContent": true,
+              "backgroundColor": "#0000FF"
+            },
+            {
+              "position": [256, 133],
+              "bounds": [75, 80],
+              "drawsContent": true
+            }
+          ]
+        },
+        {
+          "shouldFlattenTransform": false,
+          "children": [
+            {
+              "position": [376, 77],
+              "bounds": [75, 24],
+              "contentsOpaque": true,
+              "drawsContent": true,
+              "backgroundColor": "#0000FF"
+            },
+            {
+              "position": [376, 133],
+              "bounds": [75, 80],
+              "drawsContent": true
+            }
+          ]
+        },
+        {
+          "shouldFlattenTransform": false,
+          "children": [
+            {
+              "position": [16, 197],
+              "bounds": [75, 24],
+              "contentsOpaque": true,
+              "drawsContent": true,
+              "backgroundColor": "#0000FF"
+            },
+            {
+              "position": [16, 253],
+              "bounds": [75, 80],
+              "drawsContent": true
+            }
+          ]
+        },
+        {
+          "shouldFlattenTransform": false,
+          "children": [
+            {
+              "position": [136, 197],
+              "bounds": [75, 24],
+              "contentsOpaque": true,
+              "drawsContent": true,
+              "backgroundColor": "#0000FF"
+            },
+            {
+              "position": [136, 253],
+              "bounds": [75, 80],
+              "drawsContent": true
+            }
+          ]
+        },
+        {
+          "shouldFlattenTransform": false,
+          "children": [
+            {
+              "position": [256, 197],
+              "bounds": [75, 24],
+              "contentsOpaque": true,
+              "drawsContent": true,
+              "backgroundColor": "#0000FF"
+            },
+            {
+              "position": [256, 253],
+              "bounds": [75, 80],
+              "drawsContent": true
+            }
+          ]
+        },
+        {
+          "shouldFlattenTransform": false,
+          "children": [
+            {
+              "position": [376, 197],
+              "bounds": [75, 24],
+              "contentsOpaque": true,
+              "drawsContent": true,
+              "backgroundColor": "#0000FF"
+            },
+            {
+              "position": [376, 253],
+              "bounds": [75, 80],
+              "drawsContent": true
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/compositing/overlap-test-with-filter-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/overlap-test-with-filter-expected.txt
new file mode 100644
index 0000000..8cadbfe
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/compositing/overlap-test-with-filter-expected.txt
@@ -0,0 +1,63 @@
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "bounds": [300, 100],
+          "drawsContent": true,
+          "children": [
+            {
+              "bounds": [300, 100],
+              "children": [
+                {
+                  "bounds": [300, 100],
+                  "children": [
+                    {
+                      "children": [
+                        {
+                          "bounds": [300, 100],
+                          "children": [
+                            {
+                              "bounds": [300, 100],
+                              "drawsContent": true,
+                              "backgroundColor": "#FFFF00",
+                              "children": [
+                                {
+                                  "position": [8, 8],
+                                  "bounds": [284, 84],
+                                  "drawsContent": true,
+                                  "backgroundColor": "#FFFF00"
+                                }
+                              ]
+                            }
+                          ]
+                        }
+                      ]
+                    }
+                  ]
+                }
+              ]
+            }
+          ]
+        },
+        {
+          "bounds": [300, 100],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#D3D3D3",
+          "transform": [
+            [1, 0, 0, 0],
+            [0, 1, 0, 0],
+            [0, 0, 1, 0],
+            [151, 0, 0, 1]
+          ]
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/compositing/rendering-contexts-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/rendering-contexts-expected.txt
new file mode 100644
index 0000000..b91552c
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/compositing/rendering-contexts-expected.txt
@@ -0,0 +1,41 @@
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [8, 8],
+          "bounds": [100, 100],
+          "contentsOpaque": true,
+          "shouldFlattenTransform": false,
+          "3dRenderingContext": 1,
+          "drawsContent": true,
+          "backgroundColor": "#008000",
+          "children": [
+            {
+              "bounds": [100, 100],
+              "contentsOpaque": true,
+              "3dRenderingContext": 1,
+              "drawsContent": true,
+              "backgroundColor": "#008000",
+              "children": [
+                {
+                  "bounds": [100, 100],
+                  "contentsOpaque": true,
+                  "shouldFlattenTransform": false,
+                  "3dRenderingContext": 2,
+                  "drawsContent": true,
+                  "backgroundColor": "#008000"
+                }
+              ]
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/compositing/repaint/clipping-should-not-repaint-composited-descendants-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/repaint/clipping-should-not-repaint-composited-descendants-expected.txt
new file mode 100644
index 0000000..0be25f8d
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/compositing/repaint/clipping-should-not-repaint-composited-descendants-expected.txt
@@ -0,0 +1,49 @@
+{
+  "bounds": [785, 616],
+  "children": [
+    {
+      "bounds": [785, 616],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [108, 108],
+          "bounds": [100, 100],
+          "children": [
+            {
+              "bounds": [100, 100],
+              "children": [
+                {
+                  "position": [-100, -100],
+                  "bounds": [252, 252],
+                  "contentsOpaque": true,
+                  "drawsContent": true,
+                  "backgroundColor": "#FFFF00"
+                }
+              ]
+            }
+          ]
+        },
+        {
+          "position": [108, 408],
+          "bounds": [100, 100],
+          "children": [
+            {
+              "bounds": [100, 100],
+              "children": [
+                {
+                  "position": [-100, -100],
+                  "bounds": [252, 252],
+                  "contentsOpaque": true,
+                  "drawsContent": true,
+                  "backgroundColor": "#FFFF00"
+                }
+              ]
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/compositing/repaint/scroll-fixed-layer-no-content-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/repaint/scroll-fixed-layer-no-content-expected.txt
new file mode 100644
index 0000000..f1dbf56a
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/compositing/repaint/scroll-fixed-layer-no-content-expected.txt
@@ -0,0 +1,17 @@
+{
+  "bounds": [785, 2016],
+  "children": [
+    {
+      "bounds": [785, 2016],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [100, 200],
+          "bounds": [200, 200]
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/compositing/repaint/scroll-fixed-layer-out-of-view-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/repaint/scroll-fixed-layer-out-of-view-expected.txt
new file mode 100644
index 0000000..0b8a03c
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/compositing/repaint/scroll-fixed-layer-out-of-view-expected.txt
@@ -0,0 +1,27 @@
+{
+  "bounds": [785, 2016],
+  "children": [
+    {
+      "bounds": [785, 2016],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [100, -200],
+          "bounds": [88, 88],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#C0C0C0"
+        },
+        {
+          "position": [100, 1100],
+          "bounds": [99, 99],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#C0C0C0"
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/compositing/repaint/scroll-fixed-squahed-layer-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/repaint/scroll-fixed-squahed-layer-expected.txt
new file mode 100644
index 0000000..79ba51f
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/compositing/repaint/scroll-fixed-squahed-layer-expected.txt
@@ -0,0 +1,27 @@
+{
+  "bounds": [785, 2016],
+  "children": [
+    {
+      "bounds": [785, 2016],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [100, 200],
+          "bounds": [200, 200],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#ADD8E6"
+        },
+        {
+          "position": [100, 250],
+          "bounds": [200, 200],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#90EE90"
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/compositing/repaint/should-not-repaint-composited-filter-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/repaint/should-not-repaint-composited-filter-expected.txt
new file mode 100644
index 0000000..61b7da0
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/compositing/repaint/should-not-repaint-composited-filter-expected.txt
@@ -0,0 +1,21 @@
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [8, 8],
+          "bounds": [100, 100],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backfaceVisibility": "hidden",
+          "backgroundColor": "#008000"
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/compositing/repaint/should-not-repaint-composited-opacity-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/repaint/should-not-repaint-composited-opacity-expected.txt
new file mode 100644
index 0000000..b4a99103
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/compositing/repaint/should-not-repaint-composited-opacity-expected.txt
@@ -0,0 +1,22 @@
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [8, 8],
+          "bounds": [100, 100],
+          "opacity": 0.5,
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backfaceVisibility": "hidden",
+          "backgroundColor": "#008000"
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/compositing/repaint/should-not-repaint-composited-transform-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/repaint/should-not-repaint-composited-transform-expected.txt
new file mode 100644
index 0000000..862ad80
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/compositing/repaint/should-not-repaint-composited-transform-expected.txt
@@ -0,0 +1,24 @@
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [8, 8],
+          "bounds": [102, 102],
+          "drawsContent": true,
+          "transform": [
+            [1, 0, 0, 0],
+            [0, 1, 0, 0],
+            [0, 0, 1, 0],
+            [100, 100, 0, 1]
+          ]
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/compositing/repaint/should-not-repaint-composited-z-index-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/repaint/should-not-repaint-composited-z-index-expected.txt
new file mode 100644
index 0000000..61b7da0
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/compositing/repaint/should-not-repaint-composited-z-index-expected.txt
@@ -0,0 +1,21 @@
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [8, 8],
+          "bounds": [100, 100],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backfaceVisibility": "hidden",
+          "backgroundColor": "#008000"
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/compositing/rtl/rtl-absolute-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/rtl/rtl-absolute-expected.txt
new file mode 100644
index 0000000..f57621e
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/compositing/rtl/rtl-absolute-expected.txt
@@ -0,0 +1,21 @@
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "backgroundColor": "#FF0000",
+      "children": [
+        {
+          "position": [50, 50],
+          "bounds": [100, 100],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#008000"
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/compositing/rtl/rtl-absolute-overflow-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/rtl/rtl-absolute-overflow-expected.txt
new file mode 100644
index 0000000..9e4342e
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/compositing/rtl/rtl-absolute-overflow-expected.txt
@@ -0,0 +1,22 @@
+{
+  "position": [-215, 0],
+  "bounds": [1000, 1000],
+  "children": [
+    {
+      "bounds": [1000, 1000],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "backgroundColor": "#FF0000",
+      "children": [
+        {
+          "position": [265, 50],
+          "bounds": [100, 100],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#008000"
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/compositing/rtl/rtl-absolute-overflow-scrolled-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/rtl/rtl-absolute-overflow-scrolled-expected.txt
new file mode 100644
index 0000000..d245cfa
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/compositing/rtl/rtl-absolute-overflow-scrolled-expected.txt
@@ -0,0 +1,22 @@
+{
+  "position": [-215, 0],
+  "bounds": [1000, 1000],
+  "children": [
+    {
+      "bounds": [1000, 1000],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "backgroundColor": "#FF0000",
+      "children": [
+        {
+          "position": [51, 50],
+          "bounds": [100, 100],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#008000"
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/compositing/rtl/rtl-fixed-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/rtl/rtl-fixed-expected.txt
new file mode 100644
index 0000000..f57621e
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/compositing/rtl/rtl-fixed-expected.txt
@@ -0,0 +1,21 @@
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "backgroundColor": "#FF0000",
+      "children": [
+        {
+          "position": [50, 50],
+          "bounds": [100, 100],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#008000"
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/compositing/rtl/rtl-fixed-overflow-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/rtl/rtl-fixed-overflow-expected.txt
new file mode 100644
index 0000000..9e4342e
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/compositing/rtl/rtl-fixed-overflow-expected.txt
@@ -0,0 +1,22 @@
+{
+  "position": [-215, 0],
+  "bounds": [1000, 1000],
+  "children": [
+    {
+      "bounds": [1000, 1000],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "backgroundColor": "#FF0000",
+      "children": [
+        {
+          "position": [265, 50],
+          "bounds": [100, 100],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#008000"
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/compositing/rtl/rtl-fixed-overflow-scrolled-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/rtl/rtl-fixed-overflow-scrolled-expected.txt
new file mode 100644
index 0000000..d245cfa
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/compositing/rtl/rtl-fixed-overflow-scrolled-expected.txt
@@ -0,0 +1,22 @@
+{
+  "position": [-215, 0],
+  "bounds": [1000, 1000],
+  "children": [
+    {
+      "bounds": [1000, 1000],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "backgroundColor": "#FF0000",
+      "children": [
+        {
+          "position": [51, 50],
+          "bounds": [100, 100],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#008000"
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/compositing/rtl/rtl-iframe-absolute-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/rtl/rtl-iframe-absolute-expected.txt
new file mode 100644
index 0000000..59d38634
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/compositing/rtl/rtl-iframe-absolute-expected.txt
@@ -0,0 +1,52 @@
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "bounds": [400, 400],
+          "drawsContent": true,
+          "children": [
+            {
+              "bounds": [400, 400],
+              "children": [
+                {
+                  "bounds": [400, 400],
+                  "children": [
+                    {
+                      "children": [
+                        {
+                          "bounds": [400, 400],
+                          "children": [
+                            {
+                              "bounds": [400, 400],
+                              "drawsContent": true,
+                              "backgroundColor": "#FF0000",
+                              "children": [
+                                {
+                                  "position": [50, 50],
+                                  "bounds": [100, 100],
+                                  "contentsOpaque": true,
+                                  "drawsContent": true,
+                                  "backgroundColor": "#008000"
+                                }
+                              ]
+                            }
+                          ]
+                        }
+                      ]
+                    }
+                  ]
+                }
+              ]
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/compositing/rtl/rtl-iframe-absolute-overflow-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/rtl/rtl-iframe-absolute-overflow-expected.txt
new file mode 100644
index 0000000..1bd8ff2e
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/compositing/rtl/rtl-iframe-absolute-overflow-expected.txt
@@ -0,0 +1,67 @@
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "bounds": [400, 400],
+          "drawsContent": true,
+          "children": [
+            {
+              "bounds": [400, 400],
+              "children": [
+                {
+                  "bounds": [385, 385],
+                  "children": [
+                    {
+                      "position": [615, 0],
+                      "children": [
+                        {
+                          "position": [-615, 0],
+                          "bounds": [1000, 1000],
+                          "children": [
+                            {
+                              "bounds": [1000, 1000],
+                              "drawsContent": true,
+                              "backgroundColor": "#FF0000",
+                              "children": [
+                                {
+                                  "position": [665, 50],
+                                  "bounds": [100, 100],
+                                  "contentsOpaque": true,
+                                  "drawsContent": true,
+                                  "backgroundColor": "#008000"
+                                }
+                              ]
+                            }
+                          ]
+                        }
+                      ]
+                    }
+                  ]
+                },
+                {
+                  "position": [0, 385],
+                  "bounds": [385, 15]
+                },
+                {
+                  "position": [385, 0],
+                  "bounds": [15, 385]
+                },
+                {
+                  "position": [385, 385],
+                  "bounds": [15, 15],
+                  "drawsContent": true
+                }
+              ]
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/compositing/rtl/rtl-iframe-absolute-overflow-scrolled-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/rtl/rtl-iframe-absolute-overflow-scrolled-expected.txt
new file mode 100644
index 0000000..68ec89d3
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/compositing/rtl/rtl-iframe-absolute-overflow-scrolled-expected.txt
@@ -0,0 +1,67 @@
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "bounds": [400, 400],
+          "drawsContent": true,
+          "children": [
+            {
+              "bounds": [400, 400],
+              "children": [
+                {
+                  "bounds": [385, 385],
+                  "children": [
+                    {
+                      "position": [615, 0],
+                      "children": [
+                        {
+                          "position": [-615, 0],
+                          "bounds": [1000, 1000],
+                          "children": [
+                            {
+                              "bounds": [1000, 1000],
+                              "drawsContent": true,
+                              "backgroundColor": "#FF0000",
+                              "children": [
+                                {
+                                  "position": [51, 50],
+                                  "bounds": [100, 100],
+                                  "contentsOpaque": true,
+                                  "drawsContent": true,
+                                  "backgroundColor": "#008000"
+                                }
+                              ]
+                            }
+                          ]
+                        }
+                      ]
+                    }
+                  ]
+                },
+                {
+                  "position": [0, 385],
+                  "bounds": [385, 15]
+                },
+                {
+                  "position": [385, 0],
+                  "bounds": [15, 385]
+                },
+                {
+                  "position": [385, 385],
+                  "bounds": [15, 15],
+                  "drawsContent": true
+                }
+              ]
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/compositing/rtl/rtl-iframe-fixed-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/rtl/rtl-iframe-fixed-expected.txt
new file mode 100644
index 0000000..59d38634
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/compositing/rtl/rtl-iframe-fixed-expected.txt
@@ -0,0 +1,52 @@
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "bounds": [400, 400],
+          "drawsContent": true,
+          "children": [
+            {
+              "bounds": [400, 400],
+              "children": [
+                {
+                  "bounds": [400, 400],
+                  "children": [
+                    {
+                      "children": [
+                        {
+                          "bounds": [400, 400],
+                          "children": [
+                            {
+                              "bounds": [400, 400],
+                              "drawsContent": true,
+                              "backgroundColor": "#FF0000",
+                              "children": [
+                                {
+                                  "position": [50, 50],
+                                  "bounds": [100, 100],
+                                  "contentsOpaque": true,
+                                  "drawsContent": true,
+                                  "backgroundColor": "#008000"
+                                }
+                              ]
+                            }
+                          ]
+                        }
+                      ]
+                    }
+                  ]
+                }
+              ]
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/compositing/rtl/rtl-iframe-fixed-overflow-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/rtl/rtl-iframe-fixed-overflow-expected.txt
new file mode 100644
index 0000000..1bd8ff2e
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/compositing/rtl/rtl-iframe-fixed-overflow-expected.txt
@@ -0,0 +1,67 @@
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "bounds": [400, 400],
+          "drawsContent": true,
+          "children": [
+            {
+              "bounds": [400, 400],
+              "children": [
+                {
+                  "bounds": [385, 385],
+                  "children": [
+                    {
+                      "position": [615, 0],
+                      "children": [
+                        {
+                          "position": [-615, 0],
+                          "bounds": [1000, 1000],
+                          "children": [
+                            {
+                              "bounds": [1000, 1000],
+                              "drawsContent": true,
+                              "backgroundColor": "#FF0000",
+                              "children": [
+                                {
+                                  "position": [665, 50],
+                                  "bounds": [100, 100],
+                                  "contentsOpaque": true,
+                                  "drawsContent": true,
+                                  "backgroundColor": "#008000"
+                                }
+                              ]
+                            }
+                          ]
+                        }
+                      ]
+                    }
+                  ]
+                },
+                {
+                  "position": [0, 385],
+                  "bounds": [385, 15]
+                },
+                {
+                  "position": [385, 0],
+                  "bounds": [15, 385]
+                },
+                {
+                  "position": [385, 385],
+                  "bounds": [15, 15],
+                  "drawsContent": true
+                }
+              ]
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/compositing/rtl/rtl-iframe-fixed-overflow-scrolled-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/rtl/rtl-iframe-fixed-overflow-scrolled-expected.txt
new file mode 100644
index 0000000..1bd8ff2e
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/compositing/rtl/rtl-iframe-fixed-overflow-scrolled-expected.txt
@@ -0,0 +1,67 @@
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "bounds": [400, 400],
+          "drawsContent": true,
+          "children": [
+            {
+              "bounds": [400, 400],
+              "children": [
+                {
+                  "bounds": [385, 385],
+                  "children": [
+                    {
+                      "position": [615, 0],
+                      "children": [
+                        {
+                          "position": [-615, 0],
+                          "bounds": [1000, 1000],
+                          "children": [
+                            {
+                              "bounds": [1000, 1000],
+                              "drawsContent": true,
+                              "backgroundColor": "#FF0000",
+                              "children": [
+                                {
+                                  "position": [665, 50],
+                                  "bounds": [100, 100],
+                                  "contentsOpaque": true,
+                                  "drawsContent": true,
+                                  "backgroundColor": "#008000"
+                                }
+                              ]
+                            }
+                          ]
+                        }
+                      ]
+                    }
+                  ]
+                },
+                {
+                  "position": [0, 385],
+                  "bounds": [385, 15]
+                },
+                {
+                  "position": [385, 0],
+                  "bounds": [15, 385]
+                },
+                {
+                  "position": [385, 385],
+                  "bounds": [15, 15],
+                  "drawsContent": true
+                }
+              ]
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/compositing/rtl/rtl-iframe-relative-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/rtl/rtl-iframe-relative-expected.txt
new file mode 100644
index 0000000..5f7eaf8c
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/compositing/rtl/rtl-iframe-relative-expected.txt
@@ -0,0 +1,51 @@
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "bounds": [400, 400],
+          "drawsContent": true,
+          "children": [
+            {
+              "bounds": [400, 400],
+              "children": [
+                {
+                  "bounds": [400, 400],
+                  "children": [
+                    {
+                      "children": [
+                        {
+                          "bounds": [400, 400],
+                          "children": [
+                            {
+                              "bounds": [400, 400],
+                              "drawsContent": true,
+                              "children": [
+                                {
+                                  "position": [242, 58],
+                                  "bounds": [100, 100],
+                                  "contentsOpaque": true,
+                                  "drawsContent": true,
+                                  "backgroundColor": "#008000"
+                                }
+                              ]
+                            }
+                          ]
+                        }
+                      ]
+                    }
+                  ]
+                }
+              ]
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/compositing/rtl/rtl-relative-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/rtl/rtl-relative-expected.txt
new file mode 100644
index 0000000..2e62142d
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/compositing/rtl/rtl-relative-expected.txt
@@ -0,0 +1,20 @@
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [642, 58],
+          "bounds": [100, 100],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#008000"
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/compositing/scrollbars/nested-overlay-scrollbars-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/scrollbars/nested-overlay-scrollbars-expected.txt
new file mode 100644
index 0000000..fb3a8a1c
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/compositing/scrollbars/nested-overlay-scrollbars-expected.txt
@@ -0,0 +1,98 @@
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [8, 8],
+          "bounds": [404, 404],
+          "shouldFlattenTransform": false,
+          "drawsContent": true,
+          "children": [
+            {
+              "position": [2, 2],
+              "bounds": [400, 400],
+              "shouldFlattenTransform": false,
+              "children": [
+                {
+                  "bounds": [400, 704],
+                  "drawsContent": true,
+                  "children": [
+                    {
+                      "position": [0, 500],
+                      "bounds": [204, 204],
+                      "shouldFlattenTransform": false,
+                      "drawsContent": true,
+                      "children": [
+                        {
+                          "position": [2, 2],
+                          "bounds": [200, 200],
+                          "shouldFlattenTransform": false,
+                          "children": [
+                            {
+                              "bounds": [5000, 9000],
+                              "drawsContent": true
+                            }
+                          ]
+                        }
+                      ]
+                    },
+                    {
+                      "shouldFlattenTransform": false,
+                      "children": [
+                        {
+                          "position": [2, 502],
+                          "bounds": [100, 800],
+                          "contentsOpaque": true,
+                          "drawsContent": true,
+                          "backgroundColor": "#808080"
+                        },
+                        {
+                          "position": [2, 2502],
+                          "bounds": [5000, 1000],
+                          "drawsContent": true
+                        }
+                      ]
+                    },
+                    {
+                      "position": [2, 502],
+                      "bounds": [204, 204],
+                      "children": [
+                        {
+                          "position": [2, 195],
+                          "bounds": [193, 7]
+                        },
+                        {
+                          "position": [195, 2],
+                          "bounds": [7, 193]
+                        },
+                        {
+                          "position": [195, 195],
+                          "bounds": [7, 7],
+                          "drawsContent": true
+                        }
+                      ]
+                    }
+                  ]
+                }
+              ]
+            },
+            {
+              "bounds": [404, 404],
+              "children": [
+                {
+                  "position": [395, 2],
+                  "bounds": [7, 400]
+                }
+              ]
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/compositing/squashing/clipping-ancestor-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/squashing/clipping-ancestor-expected.txt
new file mode 100644
index 0000000..e5a4026
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/compositing/squashing/clipping-ancestor-expected.txt
@@ -0,0 +1,33 @@
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [8, 8],
+          "bounds": [200, 10],
+          "shouldFlattenTransform": false,
+          "children": [
+            {
+              "bounds": [200, 10],
+              "contentsOpaque": true,
+              "drawsContent": true,
+              "backgroundColor": "#F5F5F5"
+            }
+          ]
+        },
+        {
+          "position": [8, 0],
+          "bounds": [100, 100],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#90EE90"
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/compositing/squashing/composited-bounds-for-negative-z-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/squashing/composited-bounds-for-negative-z-expected.txt
new file mode 100644
index 0000000..06ec77e6
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/compositing/squashing/composited-bounds-for-negative-z-expected.txt
@@ -0,0 +1,69 @@
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "children": [
+        {
+          "bounds": [800, 408],
+          "drawsContent": true,
+          "children": [
+            {
+              "position": [8, 100],
+              "bounds": [10, 10],
+              "contentsOpaque": true,
+              "drawsContent": true,
+              "backgroundColor": "#FF0000"
+            },
+            {
+              "bounds": [800, 408],
+              "drawsContent": true
+            },
+            {
+              "position": [108, 100],
+              "bounds": [300, 300],
+              "shouldFlattenTransform": false,
+              "drawsContent": true,
+              "children": [
+                {
+                  "bounds": [285, 300],
+                  "shouldFlattenTransform": false,
+                  "children": [
+                    {
+                      "bounds": [285, 1000]
+                    }
+                  ]
+                },
+                {
+                  "bounds": [300, 300],
+                  "children": [
+                    {
+                      "position": [285, 0],
+                      "bounds": [15, 300]
+                    }
+                  ]
+                }
+              ]
+            },
+            {
+              "shouldFlattenTransform": false,
+              "children": [
+                {
+                  "position": [108, 100],
+                  "bounds": [285, 1000]
+                },
+                {
+                  "position": [108, 100],
+                  "bounds": [285, 1000],
+                  "drawsContent": true
+                }
+              ]
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/compositing/squashing/do-not-squash-non-self-painting-layer-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/squashing/do-not-squash-non-self-painting-layer-expected.txt
new file mode 100644
index 0000000..2c98031e
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/compositing/squashing/do-not-squash-non-self-painting-layer-expected.txt
@@ -0,0 +1,20 @@
+Item 1
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [8, 8],
+          "bounds": [784, 0],
+          "drawsContent": true,
+          "backfaceVisibility": "hidden"
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/compositing/squashing/dont-squash-into-iframes-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/squashing/dont-squash-into-iframes-expected.txt
new file mode 100644
index 0000000..4b43014
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/compositing/squashing/dont-squash-into-iframes-expected.txt
@@ -0,0 +1,26 @@
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "bounds": [104, 104],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#ADD8E6"
+        },
+        {
+          "position": [50, 50],
+          "bounds": [200, 200],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#D3D3D3"
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/compositing/squashing/iframes-are-never-squashed-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/squashing/iframes-are-never-squashed-expected.txt
new file mode 100644
index 0000000..170979163
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/compositing/squashing/iframes-are-never-squashed-expected.txt
@@ -0,0 +1,26 @@
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [8, 8],
+          "bounds": [200, 200],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#D3D3D3"
+        },
+        {
+          "bounds": [104, 104],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#ADD8E6"
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/compositing/squashing/invisible-layers-should-not-affect-geometry-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/squashing/invisible-layers-should-not-affect-geometry-expected.txt
new file mode 100644
index 0000000..3b329fb
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/compositing/squashing/invisible-layers-should-not-affect-geometry-expected.txt
@@ -0,0 +1,30 @@
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "shouldFlattenTransform": false,
+          "children": [
+            {
+              "position": [10, 10],
+              "bounds": [100, 100],
+              "contentsOpaque": true,
+              "drawsContent": true,
+              "backgroundColor": "#008000"
+            },
+            {
+              "position": [10, 10],
+              "bounds": [100, 100],
+              "drawsContent": true
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/compositing/squashing/move-squashing-layer-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/squashing/move-squashing-layer-expected.txt
new file mode 100644
index 0000000..e7323dc
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/compositing/squashing/move-squashing-layer-expected.txt
@@ -0,0 +1,39 @@
+This tests that squashed layers' offset from renderer is updated properly. If not properly updated, the two divs will appear to be aligned vertically in the pixel results, while really the blue div ('squashed') should be offset 100px left of the green ('host').
+
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [8, 50],
+          "bounds": [100, 100],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFFF00"
+        },
+        {
+          "shouldFlattenTransform": false,
+          "children": [
+            {
+              "position": [100, 100],
+              "bounds": [100, 100],
+              "contentsOpaque": true,
+              "drawsContent": true,
+              "backgroundColor": "#008000"
+            },
+            {
+              "position": [8, 8],
+              "bounds": [100, 100],
+              "drawsContent": true
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/compositing/squashing/no-squashing-for-filters-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/squashing/no-squashing-for-filters-expected.txt
new file mode 100644
index 0000000..205f651
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/compositing/squashing/no-squashing-for-filters-expected.txt
@@ -0,0 +1,36 @@
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [8, 8],
+          "bounds": [100, 100],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#ADD8E6"
+        },
+        {
+          "shouldFlattenTransform": false,
+          "children": [
+            {
+              "bounds": [50, 50],
+              "contentsOpaque": true,
+              "drawsContent": true,
+              "backgroundColor": "#D3D3D3"
+            },
+            {
+              "position": [50, 50],
+              "bounds": [50, 50],
+              "drawsContent": true
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/compositing/squashing/no-squashing-into-another-clip-layer-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/squashing/no-squashing-into-another-clip-layer-expected.txt
similarity index 100%
rename from third_party/WebKit/LayoutTests/compositing/squashing/no-squashing-into-another-clip-layer-expected.txt
rename to third_party/WebKit/LayoutTests/platform/android/compositing/squashing/no-squashing-into-another-clip-layer-expected.txt
diff --git a/third_party/WebKit/LayoutTests/platform/android/compositing/squashing/no-squashing-into-fixed-position-that-clips-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/squashing/no-squashing-into-fixed-position-that-clips-expected.txt
new file mode 100644
index 0000000..1b4e54f5
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/compositing/squashing/no-squashing-into-fixed-position-that-clips-expected.txt
@@ -0,0 +1,40 @@
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [0, 50],
+          "bounds": [800, 550],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#ADD8E6",
+          "children": [
+            {
+              "bounds": [800, 550],
+              "children": [
+                {
+                  "position": [400, -10],
+                  "bounds": [24, 100],
+                  "contentsOpaque": true,
+                  "drawsContent": true,
+                  "backgroundColor": "#D3D3D3"
+                }
+              ]
+            }
+          ]
+        },
+        {
+          "bounds": [800, 60],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#008000"
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/compositing/squashing/opacity-squashed-owner-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/squashing/opacity-squashed-owner-expected.txt
new file mode 100644
index 0000000..5072536
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/compositing/squashing/opacity-squashed-owner-expected.txt
@@ -0,0 +1,31 @@
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "shouldFlattenTransform": false,
+          "children": [
+            {
+              "position": [8, 8],
+              "bounds": [100, 100],
+              "opacity": 0.5,
+              "contentsOpaque": true,
+              "drawsContent": true,
+              "backgroundColor": "#ADD8E6"
+            },
+            {
+              "position": [16, 4],
+              "bounds": [40, 90],
+              "drawsContent": true
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/compositing/squashing/squash-above-fixed-2-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/squashing/squash-above-fixed-2-expected.txt
new file mode 100644
index 0000000..3646c3f
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/compositing/squashing/squash-above-fixed-2-expected.txt
@@ -0,0 +1,76 @@
+This scenario verifies that the cyan "container" element scrolls properly with squashing enabled. The "container" element should not squash into a composited layer mapping owned by the fixed position layer or its descendant, since this would make it behave like a fixed position element during composited scrolling.
+
+CASE 1, original layer tree:
+{
+  "bounds": [785, 4050],
+  "children": [
+    {
+      "bounds": [785, 4050],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "bounds": [400, 200],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backfaceVisibility": "hidden",
+          "backgroundColor": "#0000FF",
+          "children": [
+            {
+              "bounds": [50, 50],
+              "contentsOpaque": true,
+              "drawsContent": true,
+              "backfaceVisibility": "hidden",
+              "backgroundColor": "#FF0000"
+            }
+          ]
+        },
+        {
+          "position": [100, 50],
+          "bounds": [200, 4000],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#00FFFF"
+        }
+      ]
+    }
+  ]
+}
+CASE 2, scrolling y to 80, the "container" element should remain positioned with respect to the scrolled document, the fixed-pos layer compensates for the new scroll position:
+{
+  "bounds": [785, 4050],
+  "children": [
+    {
+      "bounds": [785, 4050],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [0, 80],
+          "bounds": [400, 200],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backfaceVisibility": "hidden",
+          "backgroundColor": "#0000FF",
+          "children": [
+            {
+              "bounds": [50, 50],
+              "contentsOpaque": true,
+              "drawsContent": true,
+              "backfaceVisibility": "hidden",
+              "backgroundColor": "#FF0000"
+            }
+          ]
+        },
+        {
+          "position": [100, 50],
+          "bounds": [200, 4000],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#00FFFF"
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/compositing/squashing/squash-compositing-hover-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/squashing/squash-compositing-hover-expected.txt
new file mode 100644
index 0000000..fe5c0261
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/compositing/squashing/squash-compositing-hover-expected.txt
@@ -0,0 +1,204 @@
+Test overlap is rendered correctly when hovering over elements
+
+Case 1, original layer tree:
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [8, 8],
+          "bounds": [784, 0]
+        },
+        {
+          "shouldFlattenTransform": false,
+          "children": [
+            {
+              "position": [100, 100],
+              "bounds": [100, 100],
+              "contentsOpaque": true,
+              "drawsContent": true,
+              "backgroundColor": "#0000FF"
+            },
+            {
+              "position": [180, 180],
+              "bounds": [260, 260],
+              "drawsContent": true
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}
+Case 2: hovering over the "middle" element (causes that div to become its own composited layer)
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [8, 8],
+          "bounds": [784, 0]
+        },
+        {
+          "position": [100, 100],
+          "bounds": [100, 100],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#0000FF"
+        },
+        {
+          "shouldFlattenTransform": false,
+          "children": [
+            {
+              "position": [180, 180],
+              "bounds": [100, 100],
+              "contentsOpaque": true,
+              "drawsContent": true,
+              "backgroundColor": "#008000"
+            },
+            {
+              "position": [260, 260],
+              "bounds": [180, 180],
+              "drawsContent": true
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}
+Case 3: hovering over the "middle2" element (causes that div to become its own composited layer)
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [8, 8],
+          "bounds": [784, 0]
+        },
+        {
+          "shouldFlattenTransform": false,
+          "children": [
+            {
+              "position": [100, 100],
+              "bounds": [100, 100],
+              "contentsOpaque": true,
+              "drawsContent": true,
+              "backgroundColor": "#0000FF"
+            },
+            {
+              "position": [180, 180],
+              "bounds": [100, 100],
+              "drawsContent": true
+            }
+          ]
+        },
+        {
+          "shouldFlattenTransform": false,
+          "children": [
+            {
+              "position": [260, 260],
+              "bounds": [100, 100],
+              "contentsOpaque": true,
+              "drawsContent": true,
+              "backgroundColor": "#008000"
+            },
+            {
+              "position": [340, 340],
+              "bounds": [100, 100],
+              "drawsContent": true
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}
+Case 4: hovering over the "top" element (causes that div to become its own composited layer)
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [8, 8],
+          "bounds": [784, 0]
+        },
+        {
+          "shouldFlattenTransform": false,
+          "children": [
+            {
+              "position": [100, 100],
+              "bounds": [100, 100],
+              "contentsOpaque": true,
+              "drawsContent": true,
+              "backgroundColor": "#0000FF"
+            },
+            {
+              "position": [180, 180],
+              "bounds": [180, 180],
+              "drawsContent": true
+            }
+          ]
+        },
+        {
+          "position": [340, 340],
+          "bounds": [100, 100],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#008000"
+        }
+      ]
+    }
+  ]
+}
+Case 5: back to situation in case 1
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [8, 8],
+          "bounds": [784, 0]
+        },
+        {
+          "shouldFlattenTransform": false,
+          "children": [
+            {
+              "position": [100, 100],
+              "bounds": [100, 100],
+              "contentsOpaque": true,
+              "drawsContent": true,
+              "backgroundColor": "#0000FF"
+            },
+            {
+              "position": [180, 180],
+              "bounds": [260, 260],
+              "drawsContent": true
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/compositing/squashing/squash-onto-distant-relative-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/squashing/squash-onto-distant-relative-expected.txt
new file mode 100644
index 0000000..3ac81e9
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/compositing/squashing/squash-onto-distant-relative-expected.txt
@@ -0,0 +1,30 @@
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "shouldFlattenTransform": false,
+          "children": [
+            {
+              "position": [-33554430, 0],
+              "bounds": [1, 1],
+              "contentsOpaque": true,
+              "drawsContent": true,
+              "backgroundColor": "#FFFFFF"
+            },
+            {
+              "position": [600, 0],
+              "bounds": [200, 200],
+              "drawsContent": true
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/compositing/squashing/squash-onto-nephew-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/squashing/squash-onto-nephew-expected.txt
new file mode 100644
index 0000000..e7ba0f0
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/compositing/squashing/squash-onto-nephew-expected.txt
@@ -0,0 +1,30 @@
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "shouldFlattenTransform": false,
+          "children": [
+            {
+              "position": [125, 125],
+              "bounds": [100, 100],
+              "contentsOpaque": true,
+              "drawsContent": true,
+              "backgroundColor": "#0000FF"
+            },
+            {
+              "position": [40, 40],
+              "bounds": [180, 190],
+              "drawsContent": true
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/compositing/squashing/squash-onto-transform-backing-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/squashing/squash-onto-transform-backing-expected.txt
new file mode 100644
index 0000000..c3dac07
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/compositing/squashing/squash-onto-transform-backing-expected.txt
@@ -0,0 +1,36 @@
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "shouldFlattenTransform": false,
+          "children": [
+            {
+              "position": [100, 100],
+              "bounds": [100, 100],
+              "contentsOpaque": true,
+              "drawsContent": true,
+              "backgroundColor": "#0000FF",
+              "transform": [
+                [0.707106781186548, 0.707106781186548, 0, 0],
+                [-0.707106781186548, 0.707106781186548, 0, 0],
+                [0, 0, 1, 0],
+                [0, 0, 0, 1]
+              ]
+            },
+            {
+              "position": [20, 20],
+              "bounds": [260, 260],
+              "drawsContent": true
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/compositing/squashing/squash-same-transform-ancestor-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/squashing/squash-same-transform-ancestor-expected.txt
new file mode 100644
index 0000000..58270cb
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/compositing/squashing/squash-same-transform-ancestor-expected.txt
@@ -0,0 +1,44 @@
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [8, 8],
+          "bounds": [100, 100],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#008000",
+          "transform": [
+            [0.866025403784439, -0.5, 0, 0],
+            [0.5, 0.866025403784439, 0, 0],
+            [0, 0, 1, 0],
+            [100, 100, 0, 1]
+          ],
+          "children": [
+            {
+              "shouldFlattenTransform": false,
+              "children": [
+                {
+                  "bounds": [1, 1],
+                  "contentsOpaque": true,
+                  "drawsContent": true,
+                  "backgroundColor": "#FFFFFF"
+                },
+                {
+                  "position": [-100, 0],
+                  "bounds": [200, 200],
+                  "drawsContent": true
+                }
+              ]
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/compositing/squashing/squash-simple-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/squashing/squash-simple-expected.txt
new file mode 100644
index 0000000..53b499b0
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/compositing/squashing/squash-simple-expected.txt
@@ -0,0 +1,30 @@
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "shouldFlattenTransform": false,
+          "children": [
+            {
+              "position": [100, 100],
+              "bounds": [100, 100],
+              "contentsOpaque": true,
+              "drawsContent": true,
+              "backgroundColor": "#0000FF"
+            },
+            {
+              "position": [20, 20],
+              "bounds": [260, 260],
+              "drawsContent": true
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/compositing/squashing/squash-three-layers-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/squashing/squash-three-layers-expected.txt
new file mode 100644
index 0000000..0a9404fd
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/compositing/squashing/squash-three-layers-expected.txt
@@ -0,0 +1,30 @@
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "shouldFlattenTransform": false,
+          "children": [
+            {
+              "position": [100, 100],
+              "bounds": [100, 100],
+              "contentsOpaque": true,
+              "drawsContent": true,
+              "backgroundColor": "#0000FF"
+            },
+            {
+              "position": [40, 40],
+              "bounds": [180, 190],
+              "drawsContent": true
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/compositing/squashing/squashing-inside-perspective-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/squashing/squashing-inside-perspective-expected.txt
new file mode 100644
index 0000000..df52f65
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/compositing/squashing/squashing-inside-perspective-expected.txt
@@ -0,0 +1,49 @@
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [8, 8],
+          "children": [
+            {
+              "shouldFlattenTransform": false,
+              "transform": [
+                [1, 0, 0, 0],
+                [0, 1, 0, 0],
+                [0, 0, 1, -0.001],
+                [0, 0, 0, 1]
+              ],
+              "children": [
+                {
+                  "shouldFlattenTransform": false,
+                  "children": [
+                    {
+                      "bounds": [200, 200],
+                      "contentsOpaque": true,
+                      "drawsContent": true,
+                      "backgroundColor": "#00008B",
+                      "transform": [
+                        [1, 0, 0, 0],
+                        [0, 1, 0, 0],
+                        [0, 0, 1, 0],
+                        [0, 74, 200, 1]
+                      ]
+                    },
+                    {
+                      "drawsContent": true
+                    }
+                  ]
+                }
+              ]
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/compositing/squashing/squashing-sparsity-heuristic-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/squashing/squashing-sparsity-heuristic-expected.txt
new file mode 100644
index 0000000..bde1acc
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/compositing/squashing/squashing-sparsity-heuristic-expected.txt
@@ -0,0 +1,47 @@
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "shouldFlattenTransform": false,
+          "children": [
+            {
+              "position": [60, 60],
+              "bounds": [400, 400],
+              "contentsOpaque": true,
+              "drawsContent": true,
+              "backgroundColor": "#808080"
+            },
+            {
+              "position": [140, 140],
+              "bounds": [10, 10],
+              "drawsContent": true
+            }
+          ]
+        },
+        {
+          "shouldFlattenTransform": false,
+          "children": [
+            {
+              "position": [220, 220],
+              "bounds": [10, 10],
+              "contentsOpaque": true,
+              "drawsContent": true,
+              "backgroundColor": "#00FF00"
+            },
+            {
+              "position": [220, 300],
+              "bounds": [25, 10],
+              "drawsContent": true
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/compositing/squashing/tricky-element-removal-crash-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/squashing/tricky-element-removal-crash-expected.txt
new file mode 100644
index 0000000..542f8847
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/compositing/squashing/tricky-element-removal-crash-expected.txt
@@ -0,0 +1,30 @@
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "shouldFlattenTransform": false,
+          "children": [
+            {
+              "position": [8, 8],
+              "bounds": [200, 200],
+              "contentsOpaque": true,
+              "drawsContent": true,
+              "backgroundColor": "#FA8072"
+            },
+            {
+              "position": [8, 8],
+              "bounds": [100, 100],
+              "drawsContent": true
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/compositing/tiled-layers-hidpi-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/tiled-layers-hidpi-expected.txt
new file mode 100644
index 0000000..9a561b67
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/compositing/tiled-layers-hidpi-expected.txt
@@ -0,0 +1,20 @@
+{
+  "bounds": [1808, 585],
+  "children": [
+    {
+      "bounds": [1808, 585],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [8, 8],
+          "bounds": [1800, 10],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#0000FF"
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/compositing/update-paint-phases-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/update-paint-phases-expected.txt
new file mode 100644
index 0000000..66ab0ee
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/compositing/update-paint-phases-expected.txt
@@ -0,0 +1,95 @@
+{
+  "bounds": [800, 600],
+  "paintingPhases": [
+    "GraphicsLayerPaintBackground",
+    "GraphicsLayerPaintForeground",
+    "GraphicsLayerPaintMask"
+  ],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "paintingPhases": [
+        "GraphicsLayerPaintBackground",
+        "GraphicsLayerPaintForeground",
+        "GraphicsLayerPaintMask"
+      ],
+      "children": [
+        {
+          "position": [8, 8],
+          "bounds": [102, 102],
+          "shouldFlattenTransform": false,
+          "drawsContent": true,
+          "paintingPhases": [
+            "GraphicsLayerPaintBackground",
+            "GraphicsLayerPaintMask",
+            "GraphicsLayerPaintCompositedScroll"
+          ],
+          "children": [
+            {
+              "position": [1, 1],
+              "bounds": [85, 85],
+              "shouldFlattenTransform": false,
+              "paintingPhases": [
+                "GraphicsLayerPaintBackground",
+                "GraphicsLayerPaintForeground",
+                "GraphicsLayerPaintMask"
+              ],
+              "children": [
+                {
+                  "bounds": [85, 120],
+                  "drawsContent": true,
+                  "paintingPhases": [
+                    "GraphicsLayerPaintForeground",
+                    "GraphicsLayerPaintOverflowContents",
+                    "GraphicsLayerPaintCompositedScroll"
+                  ]
+                }
+              ]
+            },
+            {
+              "bounds": [102, 102],
+              "paintingPhases": [
+                "GraphicsLayerPaintBackground",
+                "GraphicsLayerPaintForeground",
+                "GraphicsLayerPaintMask"
+              ],
+              "children": [
+                {
+                  "position": [1, 86],
+                  "bounds": [85, 15],
+                  "paintingPhases": [
+                    "GraphicsLayerPaintBackground",
+                    "GraphicsLayerPaintForeground",
+                    "GraphicsLayerPaintMask"
+                  ]
+                },
+                {
+                  "position": [86, 1],
+                  "bounds": [15, 85],
+                  "paintingPhases": [
+                    "GraphicsLayerPaintBackground",
+                    "GraphicsLayerPaintForeground",
+                    "GraphicsLayerPaintMask"
+                  ]
+                },
+                {
+                  "position": [86, 86],
+                  "bounds": [15, 15],
+                  "drawsContent": true,
+                  "paintingPhases": [
+                    "GraphicsLayerPaintBackground",
+                    "GraphicsLayerPaintForeground",
+                    "GraphicsLayerPaintMask"
+                  ]
+                }
+              ]
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/compositing/visibility/layer-visible-content-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/visibility/layer-visible-content-expected.txt
new file mode 100644
index 0000000..6cc2293
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/compositing/visibility/layer-visible-content-expected.txt
@@ -0,0 +1,32 @@
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "bounds": [200, 200],
+          "drawsContent": true,
+          "children": [
+            {
+              "bounds": [200, 200],
+              "children": [
+                {
+                  "bounds": [10, 10]
+                }
+              ]
+            }
+          ]
+        },
+        {
+          "bounds": [800, 16],
+          "opacity": 0,
+          "drawsContent": true
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/compositing/visibility/visibility-image-layers-dynamic-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/visibility/visibility-image-layers-dynamic-expected.txt
new file mode 100644
index 0000000..a8d3643
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/compositing/visibility/visibility-image-layers-dynamic-expected.txt
@@ -0,0 +1,114 @@
+
+
+
+Initial
+
+{
+  "bounds": [785, 626],
+  "children": [
+    {
+      "bounds": [785, 626],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [18, 10],
+          "bounds": [749, 145]
+        },
+        {
+          "position": [14, 316],
+          "bounds": [757, 153],
+          "contentsVisible": false,
+          "children": [
+            {
+              "position": [24, 24],
+              "bounds": [100, 100]
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}
+After step 1
+
+{
+  "bounds": [785, 1078],
+  "children": [
+    {
+      "bounds": [785, 1078],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [18, 10],
+          "bounds": [749, 145],
+          "children": [
+            {
+              "position": [20, 20],
+              "bounds": [100, 100]
+            }
+          ]
+        },
+        {
+          "position": [14, 316],
+          "bounds": [757, 153],
+          "contentsVisible": false,
+          "children": [
+            {
+              "position": [24, 24],
+              "bounds": [100, 100]
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}
+After step 2
+
+{
+  "bounds": [785, 1625],
+  "children": [
+    {
+      "bounds": [785, 1625],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [18, 10],
+          "bounds": [749, 145],
+          "children": [
+            {
+              "position": [20, 20],
+              "bounds": [100, 100]
+            }
+          ]
+        },
+        {
+          "position": [14, 161],
+          "bounds": [757, 153],
+          "drawsContent": true,
+          "children": [
+            {
+              "position": [24, 24],
+              "bounds": [100, 100]
+            }
+          ]
+        },
+        {
+          "position": [14, 316],
+          "bounds": [757, 153],
+          "contentsVisible": false,
+          "children": [
+            {
+              "position": [24, 24],
+              "bounds": [100, 100]
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/compositing/will-change/composited-layers-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/will-change/composited-layers-expected.txt
new file mode 100644
index 0000000..65d45543
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/compositing/will-change/composited-layers-expected.txt
@@ -0,0 +1,62 @@
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [12, 42],
+          "bounds": [30, 30],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#008000"
+        },
+        {
+          "position": [12, 76],
+          "bounds": [30, 30],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#008000"
+        },
+        {
+          "position": [12, 144],
+          "bounds": [30, 30],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#008000"
+        },
+        {
+          "position": [12, 212],
+          "bounds": [30, 30],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#008000"
+        },
+        {
+          "position": [12, 280],
+          "bounds": [30, 30],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#008000"
+        },
+        {
+          "position": [12, 348],
+          "bounds": [30, 30],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#008000"
+        },
+        {
+          "position": [12, 416],
+          "bounds": [30, 30],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#008000"
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/compositing/will-change/will-change-contents-suppresses-compositing-expected.txt b/third_party/WebKit/LayoutTests/platform/android/compositing/will-change/will-change-contents-suppresses-compositing-expected.txt
new file mode 100644
index 0000000..e9f7954d
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/compositing/will-change/will-change-contents-suppresses-compositing-expected.txt
@@ -0,0 +1,11 @@
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/css3/blending/mix-blend-mode-2nd-stacking-context-composited-expected.txt b/third_party/WebKit/LayoutTests/platform/android/css3/blending/mix-blend-mode-2nd-stacking-context-composited-expected.txt
new file mode 100644
index 0000000..36fc103
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/css3/blending/mix-blend-mode-2nd-stacking-context-composited-expected.txt
@@ -0,0 +1,30 @@
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "children": [
+        {
+          "bounds": [800, 600],
+          "drawsContent": true,
+          "children": [
+            {
+              "position": [8, 8],
+              "transformOrigin": [0, 0],
+              "bounds": [160, 90],
+              "contentsOpaque": true,
+              "drawsContent": true,
+              "backgroundColor": "#FF0000"
+            },
+            {
+              "bounds": [800, 600],
+              "drawsContent": true
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/css3/blending/mix-blend-mode-composited-layers-expected.txt b/third_party/WebKit/LayoutTests/platform/android/css3/blending/mix-blend-mode-composited-layers-expected.txt
new file mode 100644
index 0000000..a1b9f88
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/css3/blending/mix-blend-mode-composited-layers-expected.txt
@@ -0,0 +1,35 @@
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "children": [
+        {
+          "bounds": [800, 70],
+          "isolate": true,
+          "drawsContent": true,
+          "children": [
+            {
+              "position": [8, 18],
+              "bounds": [10, 10],
+              "blendMode": "multiply",
+              "contentsOpaque": true,
+              "drawsContent": true,
+              "backgroundColor": "#0000FF",
+              "children": [
+                {
+                  "bounds": [10, 10],
+                  "contentsOpaque": true,
+                  "drawsContent": true,
+                  "backgroundColor": "#FFFF00"
+                }
+              ]
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/css3/blending/mix-blend-mode-composited-reason-children-expected.txt b/third_party/WebKit/LayoutTests/platform/android/css3/blending/mix-blend-mode-composited-reason-children-expected.txt
new file mode 100644
index 0000000..c3855fc
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/css3/blending/mix-blend-mode-composited-reason-children-expected.txt
@@ -0,0 +1,54 @@
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "children": [
+        {
+          "bounds": [800, 600],
+          "drawsContent": true,
+          "children": [
+            {
+              "position": [8, 8],
+              "contentsOpaque": true,
+              "drawsContent": true,
+              "backgroundColor": "#FF0000",
+              "children": [
+                {
+                  "bounds": [160, 90],
+                  "isolate": true,
+                  "contentsOpaque": true,
+                  "drawsContent": true,
+                  "backgroundColor": "#008000",
+                  "children": [
+                    {
+                      "bounds": [160, 90],
+                      "blendMode": "multiply",
+                      "contentsOpaque": true,
+                      "drawsContent": true,
+                      "backgroundColor": "#0000FF",
+                      "children": [
+                        {
+                          "bounds": [160, 90]
+                        }
+                      ]
+                    }
+                  ]
+                },
+                {
+                  "drawsContent": true
+                }
+              ]
+            },
+            {
+              "bounds": [800, 600],
+              "drawsContent": true
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/css3/blending/mix-blend-mode-isolation-2-stacking-contexts-expected.txt b/third_party/WebKit/LayoutTests/platform/android/css3/blending/mix-blend-mode-isolation-2-stacking-contexts-expected.txt
new file mode 100644
index 0000000..038b04a
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/css3/blending/mix-blend-mode-isolation-2-stacking-contexts-expected.txt
@@ -0,0 +1,70 @@
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "children": [
+        {
+          "bounds": [800, 600],
+          "drawsContent": true,
+          "children": [
+            {
+              "position": [8, 8],
+              "contentsOpaque": true,
+              "drawsContent": true,
+              "backgroundColor": "#FF0000",
+              "children": [
+                {
+                  "bounds": [160, 90],
+                  "isolate": true,
+                  "contentsOpaque": true,
+                  "drawsContent": true,
+                  "backgroundColor": "#008000",
+                  "children": [
+                    {
+                      "bounds": [160, 90],
+                      "blendMode": "multiply"
+                    }
+                  ]
+                },
+                {
+                  "drawsContent": true
+                }
+              ]
+            },
+            {
+              "position": [8, 8],
+              "contentsOpaque": true,
+              "drawsContent": true,
+              "backgroundColor": "#FF0000",
+              "children": [
+                {
+                  "bounds": [160, 90],
+                  "isolate": true,
+                  "contentsOpaque": true,
+                  "drawsContent": true,
+                  "backgroundColor": "#008000",
+                  "children": [
+                    {
+                      "bounds": [160, 90],
+                      "blendMode": "multiply"
+                    }
+                  ]
+                },
+                {
+                  "drawsContent": true
+                }
+              ]
+            },
+            {
+              "bounds": [800, 600],
+              "drawsContent": true
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/css3/blending/mix-blend-mode-isolation-layer-expected.txt b/third_party/WebKit/LayoutTests/platform/android/css3/blending/mix-blend-mode-isolation-layer-expected.txt
new file mode 100644
index 0000000..faf9d411
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/css3/blending/mix-blend-mode-isolation-layer-expected.txt
@@ -0,0 +1,36 @@
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "children": [
+        {
+          "bounds": [800, 600],
+          "drawsContent": true,
+          "children": [
+            {
+              "position": [8, 8],
+              "bounds": [160, 90],
+              "isolate": true,
+              "contentsOpaque": true,
+              "drawsContent": true,
+              "backgroundColor": "#008000",
+              "children": [
+                {
+                  "bounds": [160, 90],
+                  "blendMode": "multiply"
+                }
+              ]
+            },
+            {
+              "bounds": [800, 600],
+              "drawsContent": true
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/css3/blending/mix-blend-mode-isolation-remove-expected.txt b/third_party/WebKit/LayoutTests/platform/android/css3/blending/mix-blend-mode-isolation-remove-expected.txt
new file mode 100644
index 0000000..3f757f8
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/css3/blending/mix-blend-mode-isolation-remove-expected.txt
@@ -0,0 +1,34 @@
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [8, 8],
+          "bounds": [784, 90],
+          "isolate": true,
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#0000FF",
+          "children": [
+            {
+              "bounds": [784, 90],
+              "contentsOpaque": true,
+              "drawsContent": true,
+              "backfaceVisibility": "hidden",
+              "backgroundColor": "#008000"
+            },
+            {
+              "bounds": [160, 90],
+              "blendMode": "multiply"
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/css3/filters/composited-during-transition-layertree-expected.txt b/third_party/WebKit/LayoutTests/platform/android/css3/filters/composited-during-transition-layertree-expected.txt
new file mode 100644
index 0000000..3f6ee76
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/css3/filters/composited-during-transition-layertree-expected.txt
@@ -0,0 +1,37 @@
+   
+   
+   
+  
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [18, 18],
+          "bounds": [160, 90],
+          "drawsContent": true
+        },
+        {
+          "position": [18, 133],
+          "bounds": [160, 90],
+          "drawsContent": true
+        },
+        {
+          "position": [18, 248],
+          "bounds": [160, 90],
+          "drawsContent": true
+        },
+        {
+          "position": [18, 363],
+          "bounds": [160, 90],
+          "drawsContent": true
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/css3/filters/composited-layer-bounds-after-sw-blur-animation-expected.txt b/third_party/WebKit/LayoutTests/platform/android/css3/filters/composited-layer-bounds-after-sw-blur-animation-expected.txt
new file mode 100644
index 0000000..842feacc
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/css3/filters/composited-layer-bounds-after-sw-blur-animation-expected.txt
@@ -0,0 +1,20 @@
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [100, 100],
+          "bounds": [100, 100],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#008000"
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/css3/filters/composited-layer-bounds-with-composited-blur-expected.txt b/third_party/WebKit/LayoutTests/platform/android/css3/filters/composited-layer-bounds-with-composited-blur-expected.txt
new file mode 100644
index 0000000..842feacc
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/css3/filters/composited-layer-bounds-with-composited-blur-expected.txt
@@ -0,0 +1,20 @@
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [100, 100],
+          "bounds": [100, 100],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#008000"
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/css3/filters/composited-layer-child-bounds-after-composited-to-sw-shadow-change-expected.txt b/third_party/WebKit/LayoutTests/platform/android/css3/filters/composited-layer-child-bounds-after-composited-to-sw-shadow-change-expected.txt
similarity index 100%
rename from third_party/WebKit/LayoutTests/css3/filters/composited-layer-child-bounds-after-composited-to-sw-shadow-change-expected.txt
rename to third_party/WebKit/LayoutTests/platform/android/css3/filters/composited-layer-child-bounds-after-composited-to-sw-shadow-change-expected.txt
diff --git a/third_party/WebKit/LayoutTests/platform/android/css3/filters/composited-layer-promotion-after-outset-overlap-change-using-composited-shadow-expected.txt b/third_party/WebKit/LayoutTests/platform/android/css3/filters/composited-layer-promotion-after-outset-overlap-change-using-composited-shadow-expected.txt
new file mode 100644
index 0000000..0c8ec75
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/css3/filters/composited-layer-promotion-after-outset-overlap-change-using-composited-shadow-expected.txt
@@ -0,0 +1,46 @@
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [250, 250],
+          "bounds": [100, 100],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#0000FF"
+        }
+      ]
+    }
+  ]
+}
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [250, 250],
+          "bounds": [100, 100],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#0000FF"
+        },
+        {
+          "position": [100, 100],
+          "bounds": [100, 100],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#000000"
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/css3/filters/composited-layer-promotion-after-outset-overlap-change-using-sw-shadow-expected.txt b/third_party/WebKit/LayoutTests/platform/android/css3/filters/composited-layer-promotion-after-outset-overlap-change-using-sw-shadow-expected.txt
new file mode 100644
index 0000000..0c8ec75
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/css3/filters/composited-layer-promotion-after-outset-overlap-change-using-sw-shadow-expected.txt
@@ -0,0 +1,46 @@
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [250, 250],
+          "bounds": [100, 100],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#0000FF"
+        }
+      ]
+    }
+  ]
+}
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [250, 250],
+          "bounds": [100, 100],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#0000FF"
+        },
+        {
+          "position": [100, 100],
+          "bounds": [100, 100],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#000000"
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/css3/filters/filtered-compositing-descendant-expected.txt b/third_party/WebKit/LayoutTests/platform/android/css3/filters/filtered-compositing-descendant-expected.txt
new file mode 100644
index 0000000..480fce0
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/css3/filters/filtered-compositing-descendant-expected.txt
@@ -0,0 +1,33 @@
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [8, 8],
+          "bounds": [144, 144],
+          "drawsContent": true,
+          "children": [
+            {
+              "position": [22, 22],
+              "bounds": [100, 100],
+              "contentsOpaque": true,
+              "drawsContent": true,
+              "backgroundColor": "#FF0000",
+              "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/android/css3/filters/should-not-have-compositing-layer-expected.txt b/third_party/WebKit/LayoutTests/platform/android/css3/filters/should-not-have-compositing-layer-expected.txt
new file mode 100644
index 0000000..9f9c614a9
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/css3/filters/should-not-have-compositing-layer-expected.txt
@@ -0,0 +1,12 @@
+
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/fast/borders/overflow-hidden-border-radius-force-backing-store-expected.txt b/third_party/WebKit/LayoutTests/platform/android/fast/borders/overflow-hidden-border-radius-force-backing-store-expected.txt
new file mode 100644
index 0000000..015f3ad
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/fast/borders/overflow-hidden-border-radius-force-backing-store-expected.txt
@@ -0,0 +1,34 @@
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [50, 50],
+          "bounds": [300, 300],
+          "drawsContent": true,
+          "children": [
+            {
+              "bounds": [300, 300],
+              "children": [
+                {
+                  "bounds": [285, 300],
+                  "shouldFlattenTransform": false,
+                  "children": [
+                    {
+                      "bounds": [285, 1000]
+                    }
+                  ]
+                }
+              ]
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/fast/multicol/composited-layer-expected.txt b/third_party/WebKit/LayoutTests/platform/android/fast/multicol/composited-layer-expected.txt
new file mode 100644
index 0000000..437ed8a
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/fast/multicol/composited-layer-expected.txt
@@ -0,0 +1,18 @@
+{
+"bounds": [800, 600],
+"children": [
+{
+"bounds": [800, 600],
+"contentsOpaque": true,
+"drawsContent": true,
+"children": [
+{
+"position": [8, 8],
+"bounds": [200, 100],
+"drawsContent": true
+}
+]
+}
+]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/fast/repaint/align-content-change-keeping-geometry-expected.txt b/third_party/WebKit/LayoutTests/platform/android/fast/repaint/align-content-change-keeping-geometry-expected.txt
new file mode 100644
index 0000000..e9f7954d
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/fast/repaint/align-content-change-keeping-geometry-expected.txt
@@ -0,0 +1,11 @@
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/fast/repaint/align-content-change-no-flex-expected.txt b/third_party/WebKit/LayoutTests/platform/android/fast/repaint/align-content-change-no-flex-expected.txt
new file mode 100644
index 0000000..e9f7954d
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/fast/repaint/align-content-change-no-flex-expected.txt
@@ -0,0 +1,11 @@
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/fast/repaint/align-self-change-keeping-geometry-expected.txt b/third_party/WebKit/LayoutTests/platform/android/fast/repaint/align-self-change-keeping-geometry-expected.txt
new file mode 100644
index 0000000..e9f7954d
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/fast/repaint/align-self-change-keeping-geometry-expected.txt
@@ -0,0 +1,11 @@
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/fast/repaint/align-self-change-no-flex-expected.txt b/third_party/WebKit/LayoutTests/platform/android/fast/repaint/align-self-change-no-flex-expected.txt
new file mode 100644
index 0000000..e9f7954d
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/fast/repaint/align-self-change-no-flex-expected.txt
@@ -0,0 +1,11 @@
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/fast/repaint/border-image-outset-add-repaint-expected.txt b/third_party/WebKit/LayoutTests/platform/android/fast/repaint/border-image-outset-add-repaint-expected.txt
new file mode 100644
index 0000000..cc100b2
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/fast/repaint/border-image-outset-add-repaint-expected.txt
@@ -0,0 +1,18 @@
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "paintInvalidations": [
+        {
+          "object": "LayoutBlockFlow DIV id='test'",
+          "rect": [8, 8, 75, 75],
+          "reason": "style change"
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/fast/repaint/border-image-outset-change-repaint-expected.txt b/third_party/WebKit/LayoutTests/platform/android/fast/repaint/border-image-outset-change-repaint-expected.txt
new file mode 100644
index 0000000..cc100b2
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/fast/repaint/border-image-outset-change-repaint-expected.txt
@@ -0,0 +1,18 @@
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "paintInvalidations": [
+        {
+          "object": "LayoutBlockFlow DIV id='test'",
+          "rect": [8, 8, 75, 75],
+          "reason": "style change"
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/fast/repaint/box-shadow-add-repaint-expected.txt b/third_party/WebKit/LayoutTests/platform/android/fast/repaint/box-shadow-add-repaint-expected.txt
new file mode 100644
index 0000000..7379aa2
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/fast/repaint/box-shadow-add-repaint-expected.txt
@@ -0,0 +1,18 @@
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "paintInvalidations": [
+        {
+          "object": "LayoutBlockFlow DIV id='test'",
+          "rect": [8, 8, 110, 110],
+          "reason": "style change"
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/fast/repaint/box-shadow-change-repaint-expected.txt b/third_party/WebKit/LayoutTests/platform/android/fast/repaint/box-shadow-change-repaint-expected.txt
new file mode 100644
index 0000000..f0f4e2e
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/fast/repaint/box-shadow-change-repaint-expected.txt
@@ -0,0 +1,18 @@
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "paintInvalidations": [
+        {
+          "object": "LayoutBlockFlow DIV id='test'",
+          "rect": [8, 8, 120, 120],
+          "reason": "style change"
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/fast/repaint/button-inner-no-repaint-expected.txt b/third_party/WebKit/LayoutTests/platform/android/fast/repaint/button-inner-no-repaint-expected.txt
new file mode 100644
index 0000000..e9f7954d
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/fast/repaint/button-inner-no-repaint-expected.txt
@@ -0,0 +1,11 @@
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/fast/repaint/clip-path-constant-repaint-expected.txt b/third_party/WebKit/LayoutTests/platform/android/fast/repaint/clip-path-constant-repaint-expected.txt
new file mode 100644
index 0000000..9fad0336
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/fast/repaint/clip-path-constant-repaint-expected.txt
@@ -0,0 +1,26 @@
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [8, 8],
+          "bounds": [800, 300],
+          "drawsContent": true,
+          "backfaceVisibility": "hidden",
+          "backgroundColor": "#FF0000E6",
+          "transform": [
+            [1, 0, 0, 0],
+            [0, 1, 0, 0],
+            [0, 0, 1, 0],
+            [0, 100, 0, 1]
+          ]
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/fast/repaint/composited-iframe-scroll-repaint-expected.txt b/third_party/WebKit/LayoutTests/platform/android/fast/repaint/composited-iframe-scroll-repaint-expected.txt
new file mode 100644
index 0000000..2bea989
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/fast/repaint/composited-iframe-scroll-repaint-expected.txt
@@ -0,0 +1,18 @@
+{
+  "bounds": [300, 516],
+  "children": [
+    {
+      "bounds": [300, 516],
+      "drawsContent": true,
+      "backgroundColor": "#EEEEEE",
+      "children": [
+        {
+          "position": [8, 8],
+          "bounds": [284, 500],
+          "drawsContent": true
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/fast/repaint/fixed-element-repaint-after-compositing-update-expected.txt b/third_party/WebKit/LayoutTests/platform/android/fast/repaint/fixed-element-repaint-after-compositing-update-expected.txt
new file mode 100644
index 0000000..12f01ee2
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/fast/repaint/fixed-element-repaint-after-compositing-update-expected.txt
@@ -0,0 +1,27 @@
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [8, 88]
+        },
+        {
+          "position": [8, 88],
+          "bounds": [800, 600]
+        },
+        {
+          "position": [150, 150],
+          "bounds": [100, 100],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#008000"
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/fast/repaint/iframe-scroll-repaint-expected.txt b/third_party/WebKit/LayoutTests/platform/android/fast/repaint/iframe-scroll-repaint-expected.txt
new file mode 100644
index 0000000..8b13789
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/fast/repaint/iframe-scroll-repaint-expected.txt
@@ -0,0 +1 @@
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/fast/repaint/multiple-backgrounds-style-change-expected.txt b/third_party/WebKit/LayoutTests/platform/android/fast/repaint/multiple-backgrounds-style-change-expected.txt
new file mode 100644
index 0000000..b8a8dcc
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/fast/repaint/multiple-backgrounds-style-change-expected.txt
@@ -0,0 +1,24 @@
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [8, 8],
+          "bounds": [202, 202],
+          "drawsContent": true,
+          "transform": [
+            [1, 0, 0, 0],
+            [0, 1, 0, 0],
+            [0, 0, 1, 0],
+            [50, 50, 0, 1]
+          ]
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/fast/repaint/no-caret-repaint-in-non-content-editable-element-expected.txt b/third_party/WebKit/LayoutTests/platform/android/fast/repaint/no-caret-repaint-in-non-content-editable-element-expected.txt
new file mode 100644
index 0000000..e9f7954d
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/fast/repaint/no-caret-repaint-in-non-content-editable-element-expected.txt
@@ -0,0 +1,11 @@
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/fast/repaint/obscured-background-no-repaint-expected.txt b/third_party/WebKit/LayoutTests/platform/android/fast/repaint/obscured-background-no-repaint-expected.txt
new file mode 100644
index 0000000..58f94752
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/fast/repaint/obscured-background-no-repaint-expected.txt
@@ -0,0 +1,11 @@
+{
+  "bounds": [785, 672],
+  "children": [
+    {
+      "bounds": [785, 672],
+      "contentsOpaque": true,
+      "drawsContent": true
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/fast/repaint/relative-positioned-movement-repaint-expected.txt b/third_party/WebKit/LayoutTests/platform/android/fast/repaint/relative-positioned-movement-repaint-expected.txt
new file mode 100644
index 0000000..b30ecc3
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/fast/repaint/relative-positioned-movement-repaint-expected.txt
@@ -0,0 +1,19 @@
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [68, 10],
+          "bounds": [402, 62],
+          "drawsContent": true,
+          "backfaceVisibility": "hidden"
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/fast/repaint/scrolled-iframe-scrollbar-change-expected.txt b/third_party/WebKit/LayoutTests/platform/android/fast/repaint/scrolled-iframe-scrollbar-change-expected.txt
new file mode 100644
index 0000000..8b13789
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/fast/repaint/scrolled-iframe-scrollbar-change-expected.txt
@@ -0,0 +1 @@
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/fast/repaint/set-text-content-same-expected.txt b/third_party/WebKit/LayoutTests/platform/android/fast/repaint/set-text-content-same-expected.txt
new file mode 100644
index 0000000..e9f7954d
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/fast/repaint/set-text-content-same-expected.txt
@@ -0,0 +1,11 @@
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/fast/repaint/table-extra-bottom-grow-expected.txt b/third_party/WebKit/LayoutTests/platform/android/fast/repaint/table-extra-bottom-grow-expected.txt
new file mode 100644
index 0000000..e9f7954d
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/fast/repaint/table-extra-bottom-grow-expected.txt
@@ -0,0 +1,11 @@
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/fast/sub-pixel/should-not-repaint-subpixel-composited-layer-expected.txt b/third_party/WebKit/LayoutTests/platform/android/fast/sub-pixel/should-not-repaint-subpixel-composited-layer-expected.txt
new file mode 100644
index 0000000..68e27aa8
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/fast/sub-pixel/should-not-repaint-subpixel-composited-layer-expected.txt
@@ -0,0 +1,358 @@
+10.1:
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [18, 8],
+          "bounds": [100, 50]
+        }
+      ]
+    }
+  ]
+}
+10.2:
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [18, 8],
+          "bounds": [100, 50]
+        }
+      ]
+    }
+  ]
+}
+10.299999999999999:
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [18, 8],
+          "bounds": [100, 50]
+        }
+      ]
+    }
+  ]
+}
+10.399999999999999:
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [18, 8],
+          "bounds": [100, 50]
+        }
+      ]
+    }
+  ]
+}
+10.499999999999998:
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [19, 8],
+          "bounds": [100, 50]
+        }
+      ]
+    }
+  ]
+}
+10.599999999999998:
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [19, 8],
+          "bounds": [100, 50]
+        }
+      ]
+    }
+  ]
+}
+10.699999999999998:
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [19, 8],
+          "bounds": [100, 50]
+        }
+      ]
+    }
+  ]
+}
+10.799999999999997:
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [19, 8],
+          "bounds": [100, 50]
+        }
+      ]
+    }
+  ]
+}
+10.899999999999997:
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [19, 8],
+          "bounds": [100, 50]
+        }
+      ]
+    }
+  ]
+}
+10.999999999999996:
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [19, 8],
+          "bounds": [100, 50]
+        }
+      ]
+    }
+  ]
+}
+11.099999999999996:
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [19, 8],
+          "bounds": [100, 50]
+        }
+      ]
+    }
+  ]
+}
+11.199999999999996:
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [19, 8],
+          "bounds": [100, 50]
+        }
+      ]
+    }
+  ]
+}
+11.299999999999995:
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [19, 8],
+          "bounds": [100, 50]
+        }
+      ]
+    }
+  ]
+}
+11.399999999999995:
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [19, 8],
+          "bounds": [100, 50]
+        }
+      ]
+    }
+  ]
+}
+11.499999999999995:
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [20, 8],
+          "bounds": [100, 50]
+        }
+      ]
+    }
+  ]
+}
+11.599999999999994:
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [20, 8],
+          "bounds": [100, 50]
+        }
+      ]
+    }
+  ]
+}
+11.699999999999994:
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [20, 8],
+          "bounds": [100, 50]
+        }
+      ]
+    }
+  ]
+}
+11.799999999999994:
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [20, 8],
+          "bounds": [100, 50]
+        }
+      ]
+    }
+  ]
+}
+11.899999999999993:
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [20, 8],
+          "bounds": [100, 50]
+        }
+      ]
+    }
+  ]
+}
+11.999999999999993:
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [20, 8],
+          "bounds": [100, 50]
+        }
+      ]
+    }
+  ]
+}
+12.099999999999993:
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [20, 8],
+          "bounds": [100, 50]
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/paint/invalidation/animated-gif-offscreen-expected.txt b/third_party/WebKit/LayoutTests/platform/android/paint/invalidation/animated-gif-offscreen-expected.txt
new file mode 100644
index 0000000..7c909e3a0
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/paint/invalidation/animated-gif-offscreen-expected.txt
@@ -0,0 +1,11 @@
+{
+  "bounds": [2008, 2016],
+  "children": [
+    {
+      "bounds": [2008, 2016],
+      "contentsOpaque": true,
+      "drawsContent": true
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/paint/invalidation/animated-gif-transformed-offscreen-expected.txt b/third_party/WebKit/LayoutTests/platform/android/paint/invalidation/animated-gif-transformed-offscreen-expected.txt
new file mode 100644
index 0000000..101666d1
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/paint/invalidation/animated-gif-transformed-offscreen-expected.txt
@@ -0,0 +1,24 @@
+{
+  "bounds": [2008, 2016],
+  "children": [
+    {
+      "bounds": [2008, 2016],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [8, 8],
+          "bounds": [2000, 2000],
+          "drawsContent": true,
+          "transform": [
+            [1, 0, 0, 0],
+            [0, 1, 0, 0],
+            [0, 0, 1, 0],
+            [0, -1000, 0, 1]
+          ]
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/paint/invalidation/caret-with-composited-scroll-expected.txt b/third_party/WebKit/LayoutTests/platform/android/paint/invalidation/caret-with-composited-scroll-expected.txt
new file mode 100644
index 0000000..c3a1e9b
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/paint/invalidation/caret-with-composited-scroll-expected.txt
@@ -0,0 +1,69 @@
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [8, 48],
+          "bounds": [100, 100],
+          "shouldFlattenTransform": false,
+          "drawsContent": true,
+          "children": [
+            {
+              "bounds": [100, 100],
+              "shouldFlattenTransform": false,
+              "children": [
+                {
+                  "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"
+                    },
+                    {
+                      "object": "LayoutBlockFlow DIV id='inner-editor'",
+                      "rect": [2, 1002, 3, 18],
+                      "reason": "invalidate paint rectangle"
+                    }
+                  ]
+                }
+              ]
+            },
+            {
+              "bounds": [100, 100],
+              "children": [
+                {
+                  "position": [0, 100],
+                  "bounds": [100, 0],
+                  "drawsContent": true
+                },
+                {
+                  "position": [100, 0],
+                  "bounds": [0, 100],
+                  "drawsContent": true,
+                  "paintInvalidations": [
+                    {
+                      "object": "Vertical Scrollbar Layer",
+                      "reason": "full"
+                    }
+                  ]
+                }
+              ]
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/paint/invalidation/invalidation-on-foreground-graphics-layer-expected.txt b/third_party/WebKit/LayoutTests/platform/android/paint/invalidation/invalidation-on-foreground-graphics-layer-expected.txt
new file mode 100644
index 0000000..b048d52
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/paint/invalidation/invalidation-on-foreground-graphics-layer-expected.txt
@@ -0,0 +1,77 @@
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [8, 8],
+          "bounds": [200, 200],
+          "contentsOpaque": true,
+          "shouldFlattenTransform": false,
+          "drawsContent": true,
+          "backgroundColor": "#D3D3D3",
+          "children": [
+            {
+              "bounds": [185, 185],
+              "shouldFlattenTransform": false,
+              "children": [
+                {
+                  "bounds": [300, 300],
+                  "drawsContent": true,
+                  "paintInvalidations": [
+                    {
+                      "object": "LayoutBlockFlow DIV id='target'",
+                      "rect": [100, 100, 200, 200],
+                      "reason": "style change"
+                    }
+                  ],
+                  "children": [
+                    {
+                      "bounds": [200, 200],
+                      "contentsOpaque": true,
+                      "drawsContent": true,
+                      "backgroundColor": "#ADD8E6"
+                    },
+                    {
+                      "bounds": [300, 300],
+                      "drawsContent": true,
+                      "paintInvalidations": [
+                        {
+                          "object": "LayoutBlockFlow DIV id='target'",
+                          "rect": [100, 100, 200, 200],
+                          "reason": "style change"
+                        }
+                      ]
+                    }
+                  ]
+                }
+              ]
+            },
+            {
+              "bounds": [200, 200],
+              "children": [
+                {
+                  "position": [0, 185],
+                  "bounds": [185, 15]
+                },
+                {
+                  "position": [185, 0],
+                  "bounds": [15, 185]
+                },
+                {
+                  "position": [185, 185],
+                  "bounds": [15, 15],
+                  "drawsContent": true
+                }
+              ]
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/svg/as-object/deep-nested-embedded-svg-size-changes-no-layout-triggers-1-expected.txt b/third_party/WebKit/LayoutTests/platform/android/svg/as-object/deep-nested-embedded-svg-size-changes-no-layout-triggers-1-expected.txt
new file mode 100644
index 0000000..8b13789
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/svg/as-object/deep-nested-embedded-svg-size-changes-no-layout-triggers-1-expected.txt
@@ -0,0 +1 @@
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/svg/as-object/deep-nested-embedded-svg-size-changes-no-layout-triggers-2-expected.txt b/third_party/WebKit/LayoutTests/platform/android/svg/as-object/deep-nested-embedded-svg-size-changes-no-layout-triggers-2-expected.txt
new file mode 100644
index 0000000..8b13789
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/svg/as-object/deep-nested-embedded-svg-size-changes-no-layout-triggers-2-expected.txt
@@ -0,0 +1 @@
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/svg/custom/foreignObject-crash-on-hover-expected.txt b/third_party/WebKit/LayoutTests/platform/android/svg/custom/foreignObject-crash-on-hover-expected.txt
new file mode 100644
index 0000000..e9f7954d
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/svg/custom/foreignObject-crash-on-hover-expected.txt
@@ -0,0 +1,11 @@
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/svg/repaint/inner-svg-change-viewBox-contract-expected.png b/third_party/WebKit/LayoutTests/platform/android/svg/repaint/inner-svg-change-viewBox-contract-expected.png
deleted file mode 100644
index deace76..0000000
--- a/third_party/WebKit/LayoutTests/platform/android/svg/repaint/inner-svg-change-viewBox-contract-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/android/svg/repaint/mask-clip-target-transform-expected.png b/third_party/WebKit/LayoutTests/platform/android/svg/repaint/mask-clip-target-transform-expected.png
deleted file mode 100644
index f7a39d1a..0000000
--- a/third_party/WebKit/LayoutTests/platform/android/svg/repaint/mask-clip-target-transform-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/android/virtual/gpu/fast/canvas/canvas-composite-repaint-by-all-imagesource-expected.txt b/third_party/WebKit/LayoutTests/platform/android/virtual/gpu/fast/canvas/canvas-composite-repaint-by-all-imagesource-expected.txt
new file mode 100644
index 0000000..6d2f9eb
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/virtual/gpu/fast/canvas/canvas-composite-repaint-by-all-imagesource-expected.txt
@@ -0,0 +1,258 @@
+{
+  "bounds": [785, 933],
+  "children": [
+    {
+      "bounds": [785, 933],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "backgroundColor": "#FFFFFF",
+      "children": [
+        {
+          "position": [142, 64],
+          "bounds": [132, 42],
+          "drawsContent": true
+        },
+        {
+          "position": [284, 64],
+          "bounds": [132, 42],
+          "drawsContent": true
+        },
+        {
+          "position": [426, 64],
+          "bounds": [132, 42],
+          "drawsContent": true
+        },
+        {
+          "position": [568, 64],
+          "bounds": [132, 42],
+          "drawsContent": true
+        },
+        {
+          "position": [142, 114],
+          "bounds": [132, 42],
+          "drawsContent": true
+        },
+        {
+          "position": [284, 114],
+          "bounds": [132, 42],
+          "drawsContent": true
+        },
+        {
+          "position": [426, 114],
+          "bounds": [132, 42],
+          "drawsContent": true
+        },
+        {
+          "position": [568, 114],
+          "bounds": [132, 42],
+          "drawsContent": true
+        },
+        {
+          "position": [142, 164],
+          "bounds": [132, 42],
+          "drawsContent": true
+        },
+        {
+          "position": [284, 164],
+          "bounds": [132, 42],
+          "drawsContent": true
+        },
+        {
+          "position": [426, 164],
+          "bounds": [132, 42],
+          "drawsContent": true
+        },
+        {
+          "position": [568, 164],
+          "bounds": [132, 42],
+          "drawsContent": true
+        },
+        {
+          "position": [142, 214],
+          "bounds": [132, 42],
+          "drawsContent": true
+        },
+        {
+          "position": [284, 214],
+          "bounds": [132, 42],
+          "drawsContent": true
+        },
+        {
+          "position": [426, 214],
+          "bounds": [132, 42],
+          "drawsContent": true
+        },
+        {
+          "position": [568, 214],
+          "bounds": [132, 42],
+          "drawsContent": true
+        },
+        {
+          "position": [142, 264],
+          "bounds": [132, 42],
+          "drawsContent": true
+        },
+        {
+          "position": [284, 264],
+          "bounds": [132, 42],
+          "drawsContent": true
+        },
+        {
+          "position": [426, 264],
+          "bounds": [132, 42],
+          "drawsContent": true
+        },
+        {
+          "position": [568, 264],
+          "bounds": [132, 42],
+          "drawsContent": true
+        },
+        {
+          "position": [142, 314],
+          "bounds": [132, 42],
+          "drawsContent": true
+        },
+        {
+          "position": [284, 314],
+          "bounds": [132, 42],
+          "drawsContent": true
+        },
+        {
+          "position": [426, 314],
+          "bounds": [132, 42],
+          "drawsContent": true
+        },
+        {
+          "position": [568, 314],
+          "bounds": [132, 42],
+          "drawsContent": true
+        },
+        {
+          "position": [142, 364],
+          "bounds": [132, 42],
+          "drawsContent": true
+        },
+        {
+          "position": [284, 364],
+          "bounds": [132, 42],
+          "drawsContent": true
+        },
+        {
+          "position": [426, 364],
+          "bounds": [132, 42],
+          "drawsContent": true
+        },
+        {
+          "position": [568, 364],
+          "bounds": [132, 42],
+          "drawsContent": true
+        },
+        {
+          "position": [142, 414],
+          "bounds": [132, 42],
+          "drawsContent": true
+        },
+        {
+          "position": [284, 414],
+          "bounds": [132, 42],
+          "drawsContent": true
+        },
+        {
+          "position": [426, 414],
+          "bounds": [132, 42],
+          "drawsContent": true
+        },
+        {
+          "position": [568, 414],
+          "bounds": [132, 42],
+          "drawsContent": true
+        },
+        {
+          "position": [142, 464],
+          "bounds": [132, 42],
+          "drawsContent": true
+        },
+        {
+          "position": [284, 464],
+          "bounds": [132, 42],
+          "drawsContent": true
+        },
+        {
+          "position": [426, 464],
+          "bounds": [132, 42],
+          "drawsContent": true
+        },
+        {
+          "position": [568, 464],
+          "bounds": [132, 42],
+          "drawsContent": true
+        },
+        {
+          "position": [142, 514],
+          "bounds": [132, 42],
+          "drawsContent": true
+        },
+        {
+          "position": [284, 514],
+          "bounds": [132, 42],
+          "drawsContent": true
+        },
+        {
+          "position": [426, 514],
+          "bounds": [132, 42],
+          "drawsContent": true
+        },
+        {
+          "position": [568, 514],
+          "bounds": [132, 42],
+          "drawsContent": true
+        },
+        {
+          "position": [142, 564],
+          "bounds": [132, 42],
+          "drawsContent": true
+        },
+        {
+          "position": [284, 564],
+          "bounds": [132, 42],
+          "drawsContent": true
+        },
+        {
+          "position": [426, 564],
+          "bounds": [132, 42],
+          "drawsContent": true
+        },
+        {
+          "position": [568, 564],
+          "bounds": [132, 42],
+          "drawsContent": true
+        },
+        {
+          "position": [15, 754],
+          "bounds": [152, 62],
+          "drawsContent": true
+        },
+        {
+          "position": [15, 859],
+          "bounds": [150, 60]
+        },
+        {
+          "shouldFlattenTransform": false,
+          "children": [
+            {
+              "position": [15, 859],
+              "bounds": [150, 60],
+              "drawsContent": true
+            },
+            {
+              "position": [15, 859],
+              "bounds": [150, 18],
+              "drawsContent": true
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/virtual/prefer_compositing_to_lcd_text/compositing/overflow/accelerated-overflow-scroll-should-not-affect-perspective-expected.txt b/third_party/WebKit/LayoutTests/platform/android/virtual/prefer_compositing_to_lcd_text/compositing/overflow/accelerated-overflow-scroll-should-not-affect-perspective-expected.txt
new file mode 100644
index 0000000..ad67ede
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/virtual/prefer_compositing_to_lcd_text/compositing/overflow/accelerated-overflow-scroll-should-not-affect-perspective-expected.txt
@@ -0,0 +1,89 @@
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [8, 8],
+          "bounds": [200, 200],
+          "shouldFlattenTransform": false,
+          "drawsContent": true,
+          "children": [
+            {
+              "bounds": [200, 200],
+              "shouldFlattenTransform": false,
+              "transform": [
+                [1, 0, 0, 0],
+                [0, 1, 0, 0],
+                [0, 0, 1, -0.01],
+                [0, 0, 0, 1]
+              ],
+              "children": [
+                {
+                  "bounds": [185, 185],
+                  "shouldFlattenTransform": false,
+                  "children": [
+                    {
+                      "bounds": [185, 265],
+                      "shouldFlattenTransform": false,
+                      "children": [
+                        {
+                          "position": [0, 65],
+                          "bounds": [60, 200],
+                          "contentsOpaque": true,
+                          "drawsContent": true,
+                          "backgroundColor": "#008000",
+                          "transform": [
+                            [1, 0, 0, 0],
+                            [0, 1, 0, 0],
+                            [0, 0, 1, 0],
+                            [0, 0, 10, 1]
+                          ]
+                        },
+                        {
+                          "position": [65, 65],
+                          "bounds": [60, 200],
+                          "contentsOpaque": true,
+                          "drawsContent": true,
+                          "backgroundColor": "#0000FF",
+                          "transform": [
+                            [1, 0, 0, 0],
+                            [0, 1, 0, 0],
+                            [0, 0, 1, 0],
+                            [0, 0, 20, 1]
+                          ]
+                        }
+                      ]
+                    }
+                  ]
+                }
+              ]
+            },
+            {
+              "bounds": [200, 200],
+              "children": [
+                {
+                  "position": [0, 185],
+                  "bounds": [185, 15]
+                },
+                {
+                  "position": [185, 0],
+                  "bounds": [15, 185]
+                },
+                {
+                  "position": [185, 185],
+                  "bounds": [15, 15],
+                  "drawsContent": true
+                }
+              ]
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/virtual/prefer_compositing_to_lcd_text/compositing/overflow/clip-descendents-expected.txt b/third_party/WebKit/LayoutTests/platform/android/virtual/prefer_compositing_to_lcd_text/compositing/overflow/clip-descendents-expected.txt
new file mode 100644
index 0000000..68ecea3e
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/virtual/prefer_compositing_to_lcd_text/compositing/overflow/clip-descendents-expected.txt
@@ -0,0 +1,103 @@
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [48, 38],
+          "bounds": [60, 70],
+          "shouldFlattenTransform": false,
+          "children": [
+            {
+              "position": [2, 12],
+              "bounds": [100, 150],
+              "contentsOpaque": true,
+              "drawsContent": true,
+              "backgroundColor": "#808080",
+              "transform": [
+                [1, 0, 0, 0],
+                [0, 1, 0, 0],
+                [0, 0, 1, 0],
+                [0, 0, 1, 1]
+              ]
+            }
+          ]
+        },
+        {
+          "position": [240, 38],
+          "bounds": [60, 70],
+          "shouldFlattenTransform": false,
+          "children": [
+            {
+              "position": [2, 12],
+              "bounds": [100, 150],
+              "contentsOpaque": true,
+              "drawsContent": true,
+              "backgroundColor": "#808080",
+              "transform": [
+                [1, 0, 0, 0],
+                [0, 1, 0, 0],
+                [0, 0, 1, 0],
+                [0, 0, 1, 1]
+              ]
+            }
+          ]
+        },
+        {
+          "position": [48, 230],
+          "bounds": [60, 70],
+          "drawsContent": true,
+          "children": [
+            {
+              "bounds": [60, 70],
+              "children": [
+                {
+                  "position": [2, 12],
+                  "bounds": [100, 150],
+                  "contentsOpaque": true,
+                  "drawsContent": true,
+                  "backgroundColor": "#808080",
+                  "transform": [
+                    [1, 0, 0, 0],
+                    [0, 1, 0, 0],
+                    [0, 0, 1, 0],
+                    [0, 0, 1, 1]
+                  ]
+                }
+              ]
+            }
+          ]
+        },
+        {
+          "position": [240, 230],
+          "bounds": [60, 70],
+          "drawsContent": true,
+          "children": [
+            {
+              "bounds": [60, 70],
+              "children": [
+                {
+                  "position": [2, 12],
+                  "bounds": [100, 150],
+                  "contentsOpaque": true,
+                  "drawsContent": true,
+                  "backgroundColor": "#808080",
+                  "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/android/virtual/prefer_compositing_to_lcd_text/compositing/overflow/composited-scrolling-paint-phases-expected.txt b/third_party/WebKit/LayoutTests/platform/android/virtual/prefer_compositing_to_lcd_text/compositing/overflow/composited-scrolling-paint-phases-expected.txt
new file mode 100644
index 0000000..4013b92d
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/virtual/prefer_compositing_to_lcd_text/compositing/overflow/composited-scrolling-paint-phases-expected.txt
@@ -0,0 +1,124 @@
+{
+  "bounds": [800, 600],
+  "paintingPhases": [
+    "GraphicsLayerPaintBackground",
+    "GraphicsLayerPaintForeground",
+    "GraphicsLayerPaintMask"
+  ],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "paintingPhases": [
+        "GraphicsLayerPaintBackground",
+        "GraphicsLayerPaintForeground",
+        "GraphicsLayerPaintMask"
+      ],
+      "children": [
+        {
+          "bounds": [800, 242],
+          "drawsContent": true,
+          "paintingPhases": [
+            "GraphicsLayerPaintBackground",
+            "GraphicsLayerPaintMask"
+          ],
+          "children": [
+            {
+              "position": [29, 31],
+              "bounds": [80, 10],
+              "contentsOpaque": true,
+              "drawsContent": true,
+              "backgroundColor": "#008000",
+              "paintingPhases": [
+                "GraphicsLayerPaintBackground",
+                "GraphicsLayerPaintForeground",
+                "GraphicsLayerPaintMask"
+              ]
+            },
+            {
+              "bounds": [800, 242],
+              "drawsContent": true,
+              "paintingPhases": [
+                "GraphicsLayerPaintForeground"
+              ]
+            },
+            {
+              "position": [28, 20],
+              "bounds": [202, 202],
+              "shouldFlattenTransform": false,
+              "drawsContent": true,
+              "paintingPhases": [
+                "GraphicsLayerPaintBackground",
+                "GraphicsLayerPaintMask",
+                "GraphicsLayerPaintCompositedScroll"
+              ],
+              "children": [
+                {
+                  "position": [1, 1],
+                  "bounds": [185, 185],
+                  "shouldFlattenTransform": false,
+                  "paintingPhases": [
+                    "GraphicsLayerPaintBackground",
+                    "GraphicsLayerPaintForeground",
+                    "GraphicsLayerPaintMask"
+                  ],
+                  "children": [
+                    {
+                      "bounds": [185, 715],
+                      "drawsContent": true,
+                      "paintingPhases": [
+                        "GraphicsLayerPaintForeground",
+                        "GraphicsLayerPaintOverflowContents",
+                        "GraphicsLayerPaintCompositedScroll"
+                      ]
+                    }
+                  ]
+                },
+                {
+                  "bounds": [202, 202],
+                  "paintingPhases": [
+                    "GraphicsLayerPaintBackground",
+                    "GraphicsLayerPaintForeground",
+                    "GraphicsLayerPaintMask"
+                  ],
+                  "children": [
+                    {
+                      "position": [1, 186],
+                      "bounds": [185, 15],
+                      "paintingPhases": [
+                        "GraphicsLayerPaintBackground",
+                        "GraphicsLayerPaintForeground",
+                        "GraphicsLayerPaintMask"
+                      ]
+                    },
+                    {
+                      "position": [186, 1],
+                      "bounds": [15, 185],
+                      "paintingPhases": [
+                        "GraphicsLayerPaintBackground",
+                        "GraphicsLayerPaintForeground",
+                        "GraphicsLayerPaintMask"
+                      ]
+                    },
+                    {
+                      "position": [186, 186],
+                      "bounds": [15, 15],
+                      "drawsContent": true,
+                      "paintingPhases": [
+                        "GraphicsLayerPaintBackground",
+                        "GraphicsLayerPaintForeground",
+                        "GraphicsLayerPaintMask"
+                      ]
+                    }
+                  ]
+                }
+              ]
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}
+
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/virtual/prefer_compositing_to_lcd_text/compositing/overflow/content-gains-scrollbars-expected.txt b/third_party/WebKit/LayoutTests/platform/android/virtual/prefer_compositing_to_lcd_text/compositing/overflow/content-gains-scrollbars-expected.txt
new file mode 100644
index 0000000..10f2551
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/virtual/prefer_compositing_to_lcd_text/compositing/overflow/content-gains-scrollbars-expected.txt
@@ -0,0 +1,140 @@
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [8, 13],
+          "bounds": [100, 100],
+          "shouldFlattenTransform": false,
+          "drawsContent": true,
+          "children": [
+            {
+              "bounds": [85, 100],
+              "shouldFlattenTransform": false,
+              "children": [
+                {
+                  "bounds": [85, 200],
+                  "children": [
+                    {
+                      "bounds": [10, 200]
+                    }
+                  ]
+                }
+              ]
+            },
+            {
+              "bounds": [100, 100],
+              "children": [
+                {
+                  "position": [85, 0],
+                  "bounds": [15, 100]
+                }
+              ]
+            }
+          ]
+        },
+        {
+          "position": [8, 13],
+          "bounds": [100, 100],
+          "shouldFlattenTransform": false,
+          "drawsContent": true,
+          "children": [
+            {
+              "bounds": [100, 85],
+              "shouldFlattenTransform": false,
+              "children": [
+                {
+                  "bounds": [200, 85],
+                  "children": [
+                    {
+                      "bounds": [200, 10]
+                    }
+                  ]
+                }
+              ]
+            },
+            {
+              "bounds": [100, 100],
+              "children": [
+                {
+                  "position": [0, 85],
+                  "bounds": [100, 15]
+                }
+              ]
+            }
+          ]
+        },
+        {
+          "position": [8, 13],
+          "bounds": [100, 100],
+          "shouldFlattenTransform": false,
+          "drawsContent": true,
+          "children": [
+            {
+              "bounds": [85, 85],
+              "shouldFlattenTransform": false,
+              "children": [
+                {
+                  "bounds": [200, 200],
+                  "children": [
+                    {
+                      "bounds": [200, 200]
+                    }
+                  ]
+                }
+              ]
+            },
+            {
+              "bounds": [100, 100],
+              "children": [
+                {
+                  "position": [0, 85],
+                  "bounds": [85, 15]
+                },
+                {
+                  "position": [85, 0],
+                  "bounds": [15, 85]
+                },
+                {
+                  "position": [85, 85],
+                  "bounds": [15, 15],
+                  "drawsContent": true
+                }
+              ]
+            }
+          ]
+        },
+        {
+          "position": [8, 13],
+          "bounds": [100, 100],
+          "drawsContent": true,
+          "children": [
+            {
+              "bounds": [100, 100],
+              "children": [
+                {
+                  "bounds": [10, 10]
+                }
+              ]
+            },
+            {
+              "bounds": [100, 100],
+              "children": [
+                {
+                  "position": [85, 85],
+                  "bounds": [15, 15],
+                  "drawsContent": true
+                }
+              ]
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/virtual/prefer_compositing_to_lcd_text/compositing/overflow/fixed-scroll-in-empty-root-layer-expected.txt b/third_party/WebKit/LayoutTests/platform/android/virtual/prefer_compositing_to_lcd_text/compositing/overflow/fixed-scroll-in-empty-root-layer-expected.txt
new file mode 100644
index 0000000..f49119b
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/virtual/prefer_compositing_to_lcd_text/compositing/overflow/fixed-scroll-in-empty-root-layer-expected.txt
@@ -0,0 +1,37 @@
+{
+  "bounds": [785, 2016],
+  "children": [
+    {
+      "bounds": [785, 2016],
+      "contentsOpaque": true,
+      "children": [
+        {
+          "bounds": [785, 2016],
+          "drawsContent": true,
+          "children": [
+            {
+              "position": [0, 250],
+              "bounds": [100, 100],
+              "contentsOpaque": true,
+              "drawsContent": true,
+              "backfaceVisibility": "hidden",
+              "backgroundColor": "#FF0000"
+            },
+            {
+              "bounds": [785, 2016],
+              "drawsContent": true
+            },
+            {
+              "position": [0, 250],
+              "bounds": [100, 100],
+              "contentsOpaque": true,
+              "drawsContent": true,
+              "backgroundColor": "#008000"
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/virtual/prefer_compositing_to_lcd_text/compositing/overflow/overflow-auto-with-touch-expected.txt b/third_party/WebKit/LayoutTests/platform/android/virtual/prefer_compositing_to_lcd_text/compositing/overflow/overflow-auto-with-touch-expected.txt
new file mode 100644
index 0000000..e62037c
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/virtual/prefer_compositing_to_lcd_text/compositing/overflow/overflow-auto-with-touch-expected.txt
@@ -0,0 +1,49 @@
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [8, 8],
+          "bounds": [300, 300],
+          "shouldFlattenTransform": false,
+          "drawsContent": true,
+          "children": [
+            {
+              "bounds": [285, 285],
+              "shouldFlattenTransform": false,
+              "children": [
+                {
+                  "bounds": [1000, 1000],
+                  "drawsContent": true
+                }
+              ]
+            },
+            {
+              "bounds": [300, 300],
+              "children": [
+                {
+                  "position": [0, 285],
+                  "bounds": [285, 15]
+                },
+                {
+                  "position": [285, 0],
+                  "bounds": [15, 285]
+                },
+                {
+                  "position": [285, 285],
+                  "bounds": [15, 15],
+                  "drawsContent": true
+                }
+              ]
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/virtual/prefer_compositing_to_lcd_text/compositing/overflow/overflow-auto-with-touch-no-overflow-expected.txt b/third_party/WebKit/LayoutTests/platform/android/virtual/prefer_compositing_to_lcd_text/compositing/overflow/overflow-auto-with-touch-no-overflow-expected.txt
new file mode 100644
index 0000000..e9f7954d
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/virtual/prefer_compositing_to_lcd_text/compositing/overflow/overflow-auto-with-touch-no-overflow-expected.txt
@@ -0,0 +1,11 @@
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/virtual/prefer_compositing_to_lcd_text/compositing/overflow/overflow-auto-with-touch-toggle-expected.txt b/third_party/WebKit/LayoutTests/platform/android/virtual/prefer_compositing_to_lcd_text/compositing/overflow/overflow-auto-with-touch-toggle-expected.txt
new file mode 100644
index 0000000..e62037c
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/virtual/prefer_compositing_to_lcd_text/compositing/overflow/overflow-auto-with-touch-toggle-expected.txt
@@ -0,0 +1,49 @@
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [8, 8],
+          "bounds": [300, 300],
+          "shouldFlattenTransform": false,
+          "drawsContent": true,
+          "children": [
+            {
+              "bounds": [285, 285],
+              "shouldFlattenTransform": false,
+              "children": [
+                {
+                  "bounds": [1000, 1000],
+                  "drawsContent": true
+                }
+              ]
+            },
+            {
+              "bounds": [300, 300],
+              "children": [
+                {
+                  "position": [0, 285],
+                  "bounds": [285, 15]
+                },
+                {
+                  "position": [285, 0],
+                  "bounds": [15, 285]
+                },
+                {
+                  "position": [285, 285],
+                  "bounds": [15, 15],
+                  "drawsContent": true
+                }
+              ]
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/virtual/prefer_compositing_to_lcd_text/compositing/overflow/overflow-hidden-with-touch-expected.txt b/third_party/WebKit/LayoutTests/platform/android/virtual/prefer_compositing_to_lcd_text/compositing/overflow/overflow-hidden-with-touch-expected.txt
new file mode 100644
index 0000000..e9f7954d
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/virtual/prefer_compositing_to_lcd_text/compositing/overflow/overflow-hidden-with-touch-expected.txt
@@ -0,0 +1,11 @@
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/virtual/prefer_compositing_to_lcd_text/compositing/overflow/overflow-overlay-with-touch-expected.txt b/third_party/WebKit/LayoutTests/platform/android/virtual/prefer_compositing_to_lcd_text/compositing/overflow/overflow-overlay-with-touch-expected.txt
new file mode 100644
index 0000000..e62037c
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/virtual/prefer_compositing_to_lcd_text/compositing/overflow/overflow-overlay-with-touch-expected.txt
@@ -0,0 +1,49 @@
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [8, 8],
+          "bounds": [300, 300],
+          "shouldFlattenTransform": false,
+          "drawsContent": true,
+          "children": [
+            {
+              "bounds": [285, 285],
+              "shouldFlattenTransform": false,
+              "children": [
+                {
+                  "bounds": [1000, 1000],
+                  "drawsContent": true
+                }
+              ]
+            },
+            {
+              "bounds": [300, 300],
+              "children": [
+                {
+                  "position": [0, 285],
+                  "bounds": [285, 15]
+                },
+                {
+                  "position": [285, 0],
+                  "bounds": [15, 285]
+                },
+                {
+                  "position": [285, 285],
+                  "bounds": [15, 15],
+                  "drawsContent": true
+                }
+              ]
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/virtual/prefer_compositing_to_lcd_text/compositing/overflow/overflow-overlay-with-touch-no-overflow-expected.txt b/third_party/WebKit/LayoutTests/platform/android/virtual/prefer_compositing_to_lcd_text/compositing/overflow/overflow-overlay-with-touch-no-overflow-expected.txt
new file mode 100644
index 0000000..e9f7954d
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/virtual/prefer_compositing_to_lcd_text/compositing/overflow/overflow-overlay-with-touch-no-overflow-expected.txt
@@ -0,0 +1,11 @@
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/virtual/prefer_compositing_to_lcd_text/compositing/overflow/overflow-scroll-with-touch-no-overflow-expected.txt b/third_party/WebKit/LayoutTests/platform/android/virtual/prefer_compositing_to_lcd_text/compositing/overflow/overflow-scroll-with-touch-no-overflow-expected.txt
new file mode 100644
index 0000000..e9f7954d
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/virtual/prefer_compositing_to_lcd_text/compositing/overflow/overflow-scroll-with-touch-no-overflow-expected.txt
@@ -0,0 +1,11 @@
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/virtual/prefer_compositing_to_lcd_text/compositing/overflow/overflow-scrollbar-layers-expected.txt b/third_party/WebKit/LayoutTests/platform/android/virtual/prefer_compositing_to_lcd_text/compositing/overflow/overflow-scrollbar-layers-expected.txt
new file mode 100644
index 0000000..10f2551
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/virtual/prefer_compositing_to_lcd_text/compositing/overflow/overflow-scrollbar-layers-expected.txt
@@ -0,0 +1,140 @@
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [8, 13],
+          "bounds": [100, 100],
+          "shouldFlattenTransform": false,
+          "drawsContent": true,
+          "children": [
+            {
+              "bounds": [85, 100],
+              "shouldFlattenTransform": false,
+              "children": [
+                {
+                  "bounds": [85, 200],
+                  "children": [
+                    {
+                      "bounds": [10, 200]
+                    }
+                  ]
+                }
+              ]
+            },
+            {
+              "bounds": [100, 100],
+              "children": [
+                {
+                  "position": [85, 0],
+                  "bounds": [15, 100]
+                }
+              ]
+            }
+          ]
+        },
+        {
+          "position": [8, 13],
+          "bounds": [100, 100],
+          "shouldFlattenTransform": false,
+          "drawsContent": true,
+          "children": [
+            {
+              "bounds": [100, 85],
+              "shouldFlattenTransform": false,
+              "children": [
+                {
+                  "bounds": [200, 85],
+                  "children": [
+                    {
+                      "bounds": [200, 10]
+                    }
+                  ]
+                }
+              ]
+            },
+            {
+              "bounds": [100, 100],
+              "children": [
+                {
+                  "position": [0, 85],
+                  "bounds": [100, 15]
+                }
+              ]
+            }
+          ]
+        },
+        {
+          "position": [8, 13],
+          "bounds": [100, 100],
+          "shouldFlattenTransform": false,
+          "drawsContent": true,
+          "children": [
+            {
+              "bounds": [85, 85],
+              "shouldFlattenTransform": false,
+              "children": [
+                {
+                  "bounds": [200, 200],
+                  "children": [
+                    {
+                      "bounds": [200, 200]
+                    }
+                  ]
+                }
+              ]
+            },
+            {
+              "bounds": [100, 100],
+              "children": [
+                {
+                  "position": [0, 85],
+                  "bounds": [85, 15]
+                },
+                {
+                  "position": [85, 0],
+                  "bounds": [15, 85]
+                },
+                {
+                  "position": [85, 85],
+                  "bounds": [15, 15],
+                  "drawsContent": true
+                }
+              ]
+            }
+          ]
+        },
+        {
+          "position": [8, 13],
+          "bounds": [100, 100],
+          "drawsContent": true,
+          "children": [
+            {
+              "bounds": [100, 100],
+              "children": [
+                {
+                  "bounds": [10, 10]
+                }
+              ]
+            },
+            {
+              "bounds": [100, 100],
+              "children": [
+                {
+                  "position": [85, 85],
+                  "bounds": [15, 15],
+                  "drawsContent": true
+                }
+              ]
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/virtual/prefer_compositing_to_lcd_text/compositing/overflow/overflow-visible-with-touch-expected.txt b/third_party/WebKit/LayoutTests/platform/android/virtual/prefer_compositing_to_lcd_text/compositing/overflow/overflow-visible-with-touch-expected.txt
new file mode 100644
index 0000000..45363138
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/virtual/prefer_compositing_to_lcd_text/compositing/overflow/overflow-visible-with-touch-expected.txt
@@ -0,0 +1,11 @@
+{
+  "bounds": [1008, 1008],
+  "children": [
+    {
+      "bounds": [1008, 1008],
+      "contentsOpaque": true,
+      "drawsContent": true
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/virtual/prefer_compositing_to_lcd_text/compositing/overflow/reparented-scrollbars-non-sc-anc-expected.txt b/third_party/WebKit/LayoutTests/platform/android/virtual/prefer_compositing_to_lcd_text/compositing/overflow/reparented-scrollbars-non-sc-anc-expected.txt
new file mode 100644
index 0000000..5244c6e
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/virtual/prefer_compositing_to_lcd_text/compositing/overflow/reparented-scrollbars-non-sc-anc-expected.txt
@@ -0,0 +1,73 @@
+{
+  "bounds": [1208, 821],
+  "children": [
+    {
+      "bounds": [1208, 821],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [8, 8],
+          "bounds": [1200, 800],
+          "shouldFlattenTransform": false,
+          "children": [
+            {
+              "bounds": [1200, 800],
+              "drawsContent": true,
+              "children": [
+                {
+                  "bounds": [1200, 800],
+                  "children": [
+                    {
+                      "bounds": [1200, 1000],
+                      "shouldFlattenTransform": false,
+                      "children": [
+                        {
+                          "bounds": [1200, 1000],
+                          "shouldFlattenTransform": false,
+                          "drawsContent": true,
+                          "children": [
+                            {
+                              "bounds": [1200, 1000],
+                              "shouldFlattenTransform": false,
+                              "children": [
+                                {
+                                  "bounds": [1200, 10000],
+                                  "drawsContent": true
+                                }
+                              ]
+                            }
+                          ]
+                        }
+                      ]
+                    }
+                  ]
+                }
+              ]
+            }
+          ]
+        },
+        {
+          "position": [8, 10008],
+          "bounds": [1200, 0]
+        },
+        {
+          "position": [8, 8],
+          "bounds": [1200, 1000],
+          "children": [
+            {
+              "bounds": [1200, 1000],
+              "children": [
+                {
+                  "position": [1193, 0],
+                  "bounds": [7, 1000]
+                }
+              ]
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/virtual/prefer_compositing_to_lcd_text/compositing/overflow/resize-painting-expected.txt b/third_party/WebKit/LayoutTests/platform/android/virtual/prefer_compositing_to_lcd_text/compositing/overflow/resize-painting-expected.txt
new file mode 100644
index 0000000..7cd1352
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/virtual/prefer_compositing_to_lcd_text/compositing/overflow/resize-painting-expected.txt
@@ -0,0 +1,30 @@
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [18, 10],
+          "bounds": [100, 100],
+          "drawsContent": true,
+          "children": [
+            {
+              "bounds": [100, 100],
+              "children": [
+                {
+                  "position": [85, 85],
+                  "bounds": [15, 15],
+                  "drawsContent": true
+                }
+              ]
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/virtual/prefer_compositing_to_lcd_text/compositing/overflow/scroll-parent-absolute-expected.txt b/third_party/WebKit/LayoutTests/platform/android/virtual/prefer_compositing_to_lcd_text/compositing/overflow/scroll-parent-absolute-expected.txt
new file mode 100644
index 0000000..631b21d
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/virtual/prefer_compositing_to_lcd_text/compositing/overflow/scroll-parent-absolute-expected.txt
@@ -0,0 +1,77 @@
+{
+  "bounds": [785, 5516],
+  "children": [
+    {
+      "bounds": [785, 5516],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "shouldFlattenTransform": false,
+          "children": [
+            {
+              "position": [8, 8],
+              "bounds": [500, 500],
+              "contentsOpaque": true,
+              "shouldFlattenTransform": false,
+              "drawsContent": true,
+              "backgroundColor": "#0000FF",
+              "children": [
+                {
+                  "bounds": [485, 485],
+                  "shouldFlattenTransform": false,
+                  "children": [
+                    {
+                      "bounds": [485, 5000],
+                      "drawsContent": true
+                    }
+                  ]
+                },
+                {
+                  "bounds": [500, 500],
+                  "children": [
+                    {
+                      "position": [0, 485],
+                      "bounds": [485, 15]
+                    },
+                    {
+                      "position": [485, 0],
+                      "bounds": [15, 485]
+                    },
+                    {
+                      "position": [485, 485],
+                      "bounds": [15, 15],
+                      "drawsContent": true
+                    }
+                  ]
+                }
+              ]
+            },
+            {
+              "position": [8, 8],
+              "bounds": [400, 400],
+              "drawsContent": true
+            }
+          ]
+        },
+        {
+          "position": [8, 8],
+          "bounds": [300, 300],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backfaceVisibility": "hidden",
+          "backgroundColor": "#FFFF00"
+        },
+        {
+          "position": [8, 8],
+          "bounds": [20, 5000],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FA8072",
+          "hasScrollParent": true
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/virtual/prefer_compositing_to_lcd_text/compositing/overflow/scroll-parent-absolute-with-backdrop-filter-expected.txt b/third_party/WebKit/LayoutTests/platform/android/virtual/prefer_compositing_to_lcd_text/compositing/overflow/scroll-parent-absolute-with-backdrop-filter-expected.txt
new file mode 100644
index 0000000..595488f
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/virtual/prefer_compositing_to_lcd_text/compositing/overflow/scroll-parent-absolute-with-backdrop-filter-expected.txt
@@ -0,0 +1,75 @@
+{
+  "bounds": [785, 5516],
+  "children": [
+    {
+      "bounds": [785, 5516],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "shouldFlattenTransform": false,
+          "children": [
+            {
+              "position": [8, 8],
+              "bounds": [500, 500],
+              "shouldFlattenTransform": false,
+              "drawsContent": true,
+              "children": [
+                {
+                  "bounds": [485, 485],
+                  "shouldFlattenTransform": false,
+                  "children": [
+                    {
+                      "bounds": [485, 5000],
+                      "drawsContent": true
+                    }
+                  ]
+                },
+                {
+                  "bounds": [500, 500],
+                  "children": [
+                    {
+                      "position": [0, 485],
+                      "bounds": [485, 15]
+                    },
+                    {
+                      "position": [485, 0],
+                      "bounds": [15, 485]
+                    },
+                    {
+                      "position": [485, 485],
+                      "bounds": [15, 15],
+                      "drawsContent": true
+                    }
+                  ]
+                }
+              ]
+            },
+            {
+              "position": [8, 8],
+              "bounds": [400, 400],
+              "drawsContent": true
+            }
+          ]
+        },
+        {
+          "position": [8, 8],
+          "bounds": [300, 300],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backfaceVisibility": "hidden",
+          "backgroundColor": "#FFFF00"
+        },
+        {
+          "position": [8, 8],
+          "bounds": [20, 5000],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FA8072",
+          "hasScrollParent": true
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/virtual/prefer_compositing_to_lcd_text/compositing/overflow/scroll-parent-with-non-stacking-context-composited-ancestor-expected.txt b/third_party/WebKit/LayoutTests/platform/android/virtual/prefer_compositing_to_lcd_text/compositing/overflow/scroll-parent-with-non-stacking-context-composited-ancestor-expected.txt
new file mode 100644
index 0000000..de97ec2
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/virtual/prefer_compositing_to_lcd_text/compositing/overflow/scroll-parent-with-non-stacking-context-composited-ancestor-expected.txt
@@ -0,0 +1,74 @@
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [98, 90],
+          "bounds": [300, 300],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backfaceVisibility": "hidden",
+          "backgroundColor": "#FFEFD5",
+          "children": [
+            {
+              "bounds": [102, 102],
+              "shouldFlattenTransform": false,
+              "drawsContent": true,
+              "children": [
+                {
+                  "position": [1, 1],
+                  "bounds": [100, 100],
+                  "shouldFlattenTransform": false,
+                  "children": [
+                    {
+                      "bounds": [100, 180]
+                    }
+                  ]
+                }
+              ]
+            }
+          ]
+        },
+        {
+          "position": [60, 60],
+          "bounds": [80, 80],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#008000"
+        },
+        {
+          "shouldFlattenTransform": false,
+          "children": [
+            {
+              "position": [103, 95],
+              "bounds": [60, 40],
+              "contentsOpaque": true,
+              "drawsContent": true,
+              "backgroundColor": "#0000FF"
+            },
+            {
+              "position": [103, 139],
+              "bounds": [60, 128],
+              "drawsContent": true
+            }
+          ]
+        },
+        {
+          "position": [98, 90],
+          "bounds": [102, 102],
+          "children": [
+            {
+              "position": [94, 1],
+              "bounds": [7, 100]
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/virtual/prefer_compositing_to_lcd_text/compositing/overflow/scrolling-content-clip-to-viewport-expected.txt b/third_party/WebKit/LayoutTests/platform/android/virtual/prefer_compositing_to_lcd_text/compositing/overflow/scrolling-content-clip-to-viewport-expected.txt
new file mode 100644
index 0000000..e456a58
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/virtual/prefer_compositing_to_lcd_text/compositing/overflow/scrolling-content-clip-to-viewport-expected.txt
@@ -0,0 +1,54 @@
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "bounds": [320, 340],
+          "shouldFlattenTransform": false,
+          "drawsContent": true,
+          "children": [
+            {
+              "bounds": [305, 325],
+              "shouldFlattenTransform": false,
+              "children": [
+                {
+                  "bounds": [305, 1224]
+                }
+              ]
+            },
+            {
+              "bounds": [320, 340],
+              "children": [
+                {
+                  "position": [0, 325],
+                  "bounds": [305, 15]
+                },
+                {
+                  "position": [305, 0],
+                  "bounds": [15, 325]
+                },
+                {
+                  "position": [305, 325],
+                  "bounds": [15, 15],
+                  "drawsContent": true
+                }
+              ]
+            }
+          ]
+        },
+        {
+          "position": [10, 10],
+          "bounds": [284, 1204],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#C0C0C0"
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/virtual/prefer_compositing_to_lcd_text/compositing/overflow/selection-gaps-after-removing-scrolling-contents-expected.txt b/third_party/WebKit/LayoutTests/platform/android/virtual/prefer_compositing_to_lcd_text/compositing/overflow/selection-gaps-after-removing-scrolling-contents-expected.txt
new file mode 100644
index 0000000..f4e88a0
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/virtual/prefer_compositing_to_lcd_text/compositing/overflow/selection-gaps-after-removing-scrolling-contents-expected.txt
@@ -0,0 +1,502 @@
+This test passes if the container's scrolling contents layer (the first child of the GraphicsLayer with 4 children) draws content only on iterations 1 and 2, and its scrolling block selection layer (the child of the scrolling contents layer) draws content only on iteration 3. The scrolling block selection layer should also be much smaller than the scrolling contents layer.
+Lorem Ipsum
+Lorem Ipsum
+Lorem Ipsum
+Lorem Ipsum
+Lorem Ipsum
+Lorem Ipsum
+Lorem Ipsum
+Lorem Ipsum
+Lorem Ipsum
+Lorem Ipsum
+
+
+*** iteration 1: ***
+
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [8, 68],
+          "bounds": [300, 500],
+          "contentsOpaque": true,
+          "shouldFlattenTransform": false,
+          "drawsContent": true,
+          "backgroundColor": "#0000FF",
+          "children": [
+            {
+              "bounds": [285, 485],
+              "shouldFlattenTransform": false,
+              "children": [
+                {
+                  "bounds": [285, 665],
+                  "drawsContent": true
+                }
+              ]
+            },
+            {
+              "bounds": [300, 500],
+              "children": [
+                {
+                  "position": [0, 485],
+                  "bounds": [285, 15]
+                },
+                {
+                  "position": [285, 0],
+                  "bounds": [15, 485]
+                },
+                {
+                  "position": [285, 485],
+                  "bounds": [15, 15],
+                  "drawsContent": true
+                }
+              ]
+            }
+          ]
+        },
+        {
+          "position": [23, 83],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 148],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 213],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 278],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 343],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 408],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 473],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 538],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 603],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 668],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        }
+      ]
+    }
+  ]
+}
+
+
+*** iteration 2: ***
+
+{
+  "bounds": [785, 2578],
+  "children": [
+    {
+      "bounds": [785, 2578],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [8, 68],
+          "bounds": [300, 500],
+          "contentsOpaque": true,
+          "shouldFlattenTransform": false,
+          "drawsContent": true,
+          "backgroundColor": "#0000FF",
+          "children": [
+            {
+              "bounds": [285, 485],
+              "shouldFlattenTransform": false,
+              "children": [
+                {
+                  "bounds": [285, 665],
+                  "drawsContent": true
+                }
+              ]
+            },
+            {
+              "bounds": [300, 500],
+              "children": [
+                {
+                  "position": [0, 485],
+                  "bounds": [285, 15]
+                },
+                {
+                  "position": [285, 0],
+                  "bounds": [15, 485]
+                },
+                {
+                  "position": [285, 485],
+                  "bounds": [15, 15],
+                  "drawsContent": true
+                }
+              ]
+            }
+          ]
+        },
+        {
+          "position": [23, 83],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 148],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 213],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 278],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 343],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 408],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 473],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 538],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 603],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 668],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        }
+      ]
+    }
+  ]
+}
+
+
+*** iteration 3: ***
+
+{
+  "bounds": [785, 4562],
+  "children": [
+    {
+      "bounds": [785, 4562],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [8, 68],
+          "bounds": [300, 500],
+          "shouldFlattenTransform": false,
+          "drawsContent": true,
+          "children": [
+            {
+              "bounds": [285, 485],
+              "shouldFlattenTransform": false,
+              "children": [
+                {
+                  "bounds": [285, 665]
+                }
+              ]
+            },
+            {
+              "bounds": [300, 500],
+              "children": [
+                {
+                  "position": [0, 485],
+                  "bounds": [285, 15]
+                },
+                {
+                  "position": [285, 0],
+                  "bounds": [15, 485]
+                },
+                {
+                  "position": [285, 485],
+                  "bounds": [15, 15],
+                  "drawsContent": true
+                }
+              ]
+            }
+          ]
+        },
+        {
+          "position": [23, 83],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 148],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 213],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 278],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 343],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 408],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 473],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 538],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 603],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 668],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        }
+      ]
+    }
+  ]
+}
+
+
+*** iteration 4: ***
+
+{
+  "bounds": [785, 6498],
+  "children": [
+    {
+      "bounds": [785, 6498],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [8, 68],
+          "bounds": [300, 500],
+          "shouldFlattenTransform": false,
+          "drawsContent": true,
+          "children": [
+            {
+              "bounds": [285, 485],
+              "shouldFlattenTransform": false,
+              "children": [
+                {
+                  "bounds": [285, 665]
+                }
+              ]
+            },
+            {
+              "bounds": [300, 500],
+              "children": [
+                {
+                  "position": [0, 485],
+                  "bounds": [285, 15]
+                },
+                {
+                  "position": [285, 0],
+                  "bounds": [15, 485]
+                },
+                {
+                  "position": [285, 485],
+                  "bounds": [15, 15],
+                  "drawsContent": true
+                }
+              ]
+            }
+          ]
+        },
+        {
+          "position": [23, 83],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 148],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 213],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 278],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 343],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 408],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 473],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 538],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 603],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 668],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/virtual/prefer_compositing_to_lcd_text/compositing/overflow/selection-gaps-toggling-expected.txt b/third_party/WebKit/LayoutTests/platform/android/virtual/prefer_compositing_to_lcd_text/compositing/overflow/selection-gaps-toggling-expected.txt
new file mode 100644
index 0000000..7bb7d757
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/virtual/prefer_compositing_to_lcd_text/compositing/overflow/selection-gaps-toggling-expected.txt
@@ -0,0 +1,375 @@
+This test passes if the container's scrolling contents layer (the first child of the GraphicsLayer with 4 children) doesn't draw content at all, and its scrolling block selection layer (the child of the scrolling contents layer) draws content only on iteration 2. The scrolling block selection layer should also be much smaller than the scrolling contents layer.
+Lorem Ipsum
+Lorem Ipsum
+Lorem Ipsum
+Lorem Ipsum
+Lorem Ipsum
+Lorem Ipsum
+Lorem Ipsum
+Lorem Ipsum
+Lorem Ipsum
+Lorem Ipsum
+
+
+*** iteration 1: ***
+
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [8, 68],
+          "bounds": [300, 500],
+          "shouldFlattenTransform": false,
+          "drawsContent": true,
+          "children": [
+            {
+              "bounds": [285, 485],
+              "shouldFlattenTransform": false,
+              "children": [
+                {
+                  "bounds": [285, 665]
+                }
+              ]
+            },
+            {
+              "bounds": [300, 500],
+              "children": [
+                {
+                  "position": [0, 485],
+                  "bounds": [285, 15]
+                },
+                {
+                  "position": [285, 0],
+                  "bounds": [15, 485]
+                },
+                {
+                  "position": [285, 485],
+                  "bounds": [15, 15],
+                  "drawsContent": true
+                }
+              ]
+            }
+          ]
+        },
+        {
+          "position": [23, 83],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 148],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 213],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 278],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 343],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 408],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 473],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 538],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 603],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 668],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        }
+      ]
+    }
+  ]
+}
+
+
+*** iteration 2: ***
+
+{
+  "bounds": [785, 2530],
+  "children": [
+    {
+      "bounds": [785, 2530],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [8, 68],
+          "bounds": [300, 500],
+          "shouldFlattenTransform": false,
+          "drawsContent": true,
+          "children": [
+            {
+              "bounds": [285, 485],
+              "shouldFlattenTransform": false,
+              "children": [
+                {
+                  "bounds": [285, 665]
+                }
+              ]
+            },
+            {
+              "bounds": [300, 500],
+              "children": [
+                {
+                  "position": [0, 485],
+                  "bounds": [285, 15]
+                },
+                {
+                  "position": [285, 0],
+                  "bounds": [15, 485]
+                },
+                {
+                  "position": [285, 485],
+                  "bounds": [15, 15],
+                  "drawsContent": true
+                }
+              ]
+            }
+          ]
+        },
+        {
+          "position": [23, 83],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 148],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 213],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 278],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 343],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 408],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 473],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 538],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 603],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 668],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        }
+      ]
+    }
+  ]
+}
+
+
+*** iteration 3: ***
+
+{
+  "bounds": [785, 4466],
+  "children": [
+    {
+      "bounds": [785, 4466],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [8, 68],
+          "bounds": [300, 500],
+          "shouldFlattenTransform": false,
+          "drawsContent": true,
+          "children": [
+            {
+              "bounds": [285, 485],
+              "shouldFlattenTransform": false,
+              "children": [
+                {
+                  "bounds": [285, 665]
+                }
+              ]
+            },
+            {
+              "bounds": [300, 500],
+              "children": [
+                {
+                  "position": [0, 485],
+                  "bounds": [285, 15]
+                },
+                {
+                  "position": [285, 0],
+                  "bounds": [15, 485]
+                },
+                {
+                  "position": [285, 485],
+                  "bounds": [15, 15],
+                  "drawsContent": true
+                }
+              ]
+            }
+          ]
+        },
+        {
+          "position": [23, 83],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 148],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 213],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 278],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 343],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 408],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 473],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 538],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 603],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 668],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/virtual/prefer_compositing_to_lcd_text/compositing/overflow/selection-gaps-toggling-with-scrolling-contents-expected.txt b/third_party/WebKit/LayoutTests/platform/android/virtual/prefer_compositing_to_lcd_text/compositing/overflow/selection-gaps-toggling-with-scrolling-contents-expected.txt
new file mode 100644
index 0000000..f6d489f
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/virtual/prefer_compositing_to_lcd_text/compositing/overflow/selection-gaps-toggling-with-scrolling-contents-expected.txt
@@ -0,0 +1,502 @@
+This test passes if the container's scrolling contents layer (the first child of the GraphicsLayer with 4 children) draws content only on iterations 2 and 3, and its scrolling block selection layer (the child of the scrolling contents layer) draws content only on iteration 4. The scrolling block selection layer should also be much smaller than the scrolling contents layer.
+Lorem Ipsum
+Lorem Ipsum
+Lorem Ipsum
+Lorem Ipsum
+Lorem Ipsum
+Lorem Ipsum
+Lorem Ipsum
+Lorem Ipsum
+Lorem Ipsum
+Lorem Ipsum
+
+
+*** iteration 1: ***
+
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [8, 68],
+          "bounds": [300, 500],
+          "shouldFlattenTransform": false,
+          "drawsContent": true,
+          "children": [
+            {
+              "bounds": [285, 485],
+              "shouldFlattenTransform": false,
+              "children": [
+                {
+                  "bounds": [285, 665]
+                }
+              ]
+            },
+            {
+              "bounds": [300, 500],
+              "children": [
+                {
+                  "position": [0, 485],
+                  "bounds": [285, 15]
+                },
+                {
+                  "position": [285, 0],
+                  "bounds": [15, 485]
+                },
+                {
+                  "position": [285, 485],
+                  "bounds": [15, 15],
+                  "drawsContent": true
+                }
+              ]
+            }
+          ]
+        },
+        {
+          "position": [23, 83],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 148],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 213],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 278],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 343],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 408],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 473],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 538],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 603],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 668],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        }
+      ]
+    }
+  ]
+}
+
+
+*** iteration 2: ***
+
+{
+  "bounds": [785, 2530],
+  "children": [
+    {
+      "bounds": [785, 2530],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [8, 68],
+          "bounds": [300, 500],
+          "contentsOpaque": true,
+          "shouldFlattenTransform": false,
+          "drawsContent": true,
+          "backgroundColor": "#0000FF",
+          "children": [
+            {
+              "bounds": [285, 485],
+              "shouldFlattenTransform": false,
+              "children": [
+                {
+                  "bounds": [285, 665],
+                  "drawsContent": true
+                }
+              ]
+            },
+            {
+              "bounds": [300, 500],
+              "children": [
+                {
+                  "position": [0, 485],
+                  "bounds": [285, 15]
+                },
+                {
+                  "position": [285, 0],
+                  "bounds": [15, 485]
+                },
+                {
+                  "position": [285, 485],
+                  "bounds": [15, 15],
+                  "drawsContent": true
+                }
+              ]
+            }
+          ]
+        },
+        {
+          "position": [23, 83],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 148],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 213],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 278],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 343],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 408],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 473],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 538],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 603],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 668],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        }
+      ]
+    }
+  ]
+}
+
+
+*** iteration 3: ***
+
+{
+  "bounds": [785, 4514],
+  "children": [
+    {
+      "bounds": [785, 4514],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [8, 68],
+          "bounds": [300, 500],
+          "contentsOpaque": true,
+          "shouldFlattenTransform": false,
+          "drawsContent": true,
+          "backgroundColor": "#0000FF",
+          "children": [
+            {
+              "bounds": [285, 485],
+              "shouldFlattenTransform": false,
+              "children": [
+                {
+                  "bounds": [285, 665],
+                  "drawsContent": true
+                }
+              ]
+            },
+            {
+              "bounds": [300, 500],
+              "children": [
+                {
+                  "position": [0, 485],
+                  "bounds": [285, 15]
+                },
+                {
+                  "position": [285, 0],
+                  "bounds": [15, 485]
+                },
+                {
+                  "position": [285, 485],
+                  "bounds": [15, 15],
+                  "drawsContent": true
+                }
+              ]
+            }
+          ]
+        },
+        {
+          "position": [23, 83],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 148],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 213],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 278],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 343],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 408],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 473],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 538],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 603],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 668],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        }
+      ]
+    }
+  ]
+}
+
+
+*** iteration 4: ***
+
+{
+  "bounds": [785, 6498],
+  "children": [
+    {
+      "bounds": [785, 6498],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [8, 68],
+          "bounds": [300, 500],
+          "shouldFlattenTransform": false,
+          "drawsContent": true,
+          "children": [
+            {
+              "bounds": [285, 485],
+              "shouldFlattenTransform": false,
+              "children": [
+                {
+                  "bounds": [285, 665]
+                }
+              ]
+            },
+            {
+              "bounds": [300, 500],
+              "children": [
+                {
+                  "position": [0, 485],
+                  "bounds": [285, 15]
+                },
+                {
+                  "position": [285, 0],
+                  "bounds": [15, 485]
+                },
+                {
+                  "position": [285, 485],
+                  "bounds": [15, 15],
+                  "drawsContent": true
+                }
+              ]
+            }
+          ]
+        },
+        {
+          "position": [23, 83],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 148],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 213],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 278],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 343],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 408],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 473],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 538],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 603],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        },
+        {
+          "position": [23, 668],
+          "bounds": [100, 50],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FFA500"
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/virtual/prefer_compositing_to_lcd_text/compositing/overflow/textarea-scroll-touch-expected.txt b/third_party/WebKit/LayoutTests/platform/android/virtual/prefer_compositing_to_lcd_text/compositing/overflow/textarea-scroll-touch-expected.txt
new file mode 100644
index 0000000..7569bf1
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/virtual/prefer_compositing_to_lcd_text/compositing/overflow/textarea-scroll-touch-expected.txt
@@ -0,0 +1,84 @@
+  
+{
+  "bounds": [800, 600],
+  "children": [
+    {
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [18, 18],
+          "bounds": [206, 126],
+          "contentsOpaque": true,
+          "shouldFlattenTransform": false,
+          "drawsContent": true,
+          "backgroundColor": "#CCCCCC",
+          "children": [
+            {
+              "position": [1, 1],
+              "bounds": [189, 124],
+              "shouldFlattenTransform": false,
+              "children": [
+                {
+                  "bounds": [189, 328],
+                  "drawsContent": true
+                }
+              ]
+            },
+            {
+              "bounds": [206, 126],
+              "children": [
+                {
+                  "position": [190, 1],
+                  "bounds": [15, 109]
+                },
+                {
+                  "position": [190, 110],
+                  "bounds": [15, 15],
+                  "drawsContent": true
+                }
+              ]
+            }
+          ]
+        },
+        {
+          "position": [248, 18],
+          "bounds": [206, 126],
+          "contentsOpaque": true,
+          "shouldFlattenTransform": false,
+          "drawsContent": true,
+          "backgroundColor": "#CCCCCC",
+          "children": [
+            {
+              "position": [1, 1],
+              "bounds": [189, 124],
+              "shouldFlattenTransform": false,
+              "children": [
+                {
+                  "bounds": [189, 328],
+                  "drawsContent": true
+                }
+              ]
+            },
+            {
+              "bounds": [206, 126],
+              "children": [
+                {
+                  "position": [190, 1],
+                  "bounds": [15, 109]
+                },
+                {
+                  "position": [190, 110],
+                  "bounds": [15, 15],
+                  "drawsContent": true
+                }
+              ]
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/virtual/prefer_compositing_to_lcd_text/compositing/overflow/universal-accelerated-overflow-scroll-expected.txt b/third_party/WebKit/LayoutTests/platform/android/virtual/prefer_compositing_to_lcd_text/compositing/overflow/universal-accelerated-overflow-scroll-expected.txt
new file mode 100644
index 0000000..6ca1829
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/virtual/prefer_compositing_to_lcd_text/compositing/overflow/universal-accelerated-overflow-scroll-expected.txt
@@ -0,0 +1,969 @@
+{
+  "bounds": [785, 2016],
+  "children": [
+    {
+      "bounds": [785, 2016],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "shouldFlattenTransform": false,
+          "children": [
+            {
+              "position": [10, 10],
+              "bounds": [104, 104],
+              "shouldFlattenTransform": false,
+              "drawsContent": true,
+              "children": [
+                {
+                  "position": [2, 2],
+                  "bounds": [85, 85],
+                  "shouldFlattenTransform": false,
+                  "children": [
+                    {
+                      "bounds": [85, 144],
+                      "drawsContent": true
+                    }
+                  ]
+                },
+                {
+                  "bounds": [104, 104],
+                  "children": [
+                    {
+                      "position": [2, 87],
+                      "bounds": [85, 15]
+                    },
+                    {
+                      "position": [87, 2],
+                      "bounds": [15, 85]
+                    },
+                    {
+                      "position": [87, 87],
+                      "bounds": [15, 15],
+                      "drawsContent": true
+                    }
+                  ]
+                }
+              ]
+            },
+            {
+              "position": [35, 75],
+              "bounds": [80, 40],
+              "drawsContent": true
+            }
+          ]
+        },
+        {
+          "shouldFlattenTransform": false,
+          "children": [
+            {
+              "position": [16, -15],
+              "bounds": [75, 24],
+              "contentsOpaque": true,
+              "drawsContent": true,
+              "backgroundColor": "#0000FF"
+            },
+            {
+              "position": [16, 41],
+              "bounds": [75, 24],
+              "drawsContent": true
+            }
+          ]
+        },
+        {
+          "position": [130, 10],
+          "bounds": [104, 104],
+          "shouldFlattenTransform": false,
+          "drawsContent": true,
+          "children": [
+            {
+              "position": [2, 2],
+              "bounds": [85, 85],
+              "shouldFlattenTransform": false,
+              "children": [
+                {
+                  "bounds": [105, 144],
+                  "drawsContent": true
+                }
+              ]
+            },
+            {
+              "bounds": [104, 104],
+              "children": [
+                {
+                  "position": [2, 87],
+                  "bounds": [85, 15]
+                },
+                {
+                  "position": [87, 2],
+                  "bounds": [15, 85]
+                },
+                {
+                  "position": [87, 87],
+                  "bounds": [15, 15],
+                  "drawsContent": true
+                }
+              ]
+            }
+          ]
+        },
+        {
+          "shouldFlattenTransform": false,
+          "children": [
+            {
+              "position": [157, 18],
+              "bounds": [80, 40],
+              "contentsOpaque": true,
+              "drawsContent": true,
+              "backgroundColor": "#800080"
+            },
+            {
+              "position": [136, -15],
+              "bounds": [75, 80],
+              "drawsContent": true
+            }
+          ]
+        },
+        {
+          "shouldFlattenTransform": false,
+          "children": [
+            {
+              "position": [250, 10],
+              "bounds": [104, 104],
+              "shouldFlattenTransform": false,
+              "drawsContent": true,
+              "children": [
+                {
+                  "position": [2, 2],
+                  "bounds": [85, 85],
+                  "shouldFlattenTransform": false,
+                  "children": [
+                    {
+                      "bounds": [85, 144]
+                    }
+                  ]
+                },
+                {
+                  "bounds": [104, 104],
+                  "children": [
+                    {
+                      "position": [2, 87],
+                      "bounds": [85, 15]
+                    },
+                    {
+                      "position": [87, 2],
+                      "bounds": [15, 85]
+                    },
+                    {
+                      "position": [87, 87],
+                      "bounds": [15, 15],
+                      "drawsContent": true
+                    }
+                  ]
+                }
+              ]
+            },
+            {
+              "position": [275, 75],
+              "bounds": [80, 40],
+              "drawsContent": true
+            }
+          ]
+        },
+        {
+          "shouldFlattenTransform": false,
+          "children": [
+            {
+              "position": [256, -15],
+              "bounds": [75, 24],
+              "contentsOpaque": true,
+              "drawsContent": true,
+              "backgroundColor": "#0000FF"
+            },
+            {
+              "position": [256, 41],
+              "bounds": [75, 24],
+              "drawsContent": true
+            }
+          ]
+        },
+        {
+          "shouldFlattenTransform": false,
+          "children": [
+            {
+              "position": [370, 10],
+              "bounds": [104, 104],
+              "shouldFlattenTransform": false,
+              "drawsContent": true,
+              "children": [
+                {
+                  "position": [2, 2],
+                  "bounds": [85, 85],
+                  "shouldFlattenTransform": false,
+                  "children": [
+                    {
+                      "bounds": [85, 144],
+                      "drawsContent": true
+                    }
+                  ]
+                },
+                {
+                  "bounds": [104, 104],
+                  "children": [
+                    {
+                      "position": [2, 87],
+                      "bounds": [85, 15]
+                    },
+                    {
+                      "position": [87, 2],
+                      "bounds": [15, 85]
+                    },
+                    {
+                      "position": [87, 87],
+                      "bounds": [15, 15],
+                      "drawsContent": true
+                    }
+                  ]
+                }
+              ]
+            },
+            {
+              "position": [395, 75],
+              "bounds": [80, 40],
+              "drawsContent": true
+            }
+          ]
+        },
+        {
+          "shouldFlattenTransform": false,
+          "children": [
+            {
+              "position": [376, -15],
+              "bounds": [75, 24],
+              "contentsOpaque": true,
+              "drawsContent": true,
+              "backgroundColor": "#0000FF"
+            },
+            {
+              "position": [376, 41],
+              "bounds": [75, 24],
+              "drawsContent": true
+            }
+          ]
+        },
+        {
+          "position": [10, 130],
+          "bounds": [104, 104],
+          "shouldFlattenTransform": false,
+          "drawsContent": true,
+          "children": [
+            {
+              "position": [2, 2],
+              "bounds": [85, 85],
+              "shouldFlattenTransform": false,
+              "children": [
+                {
+                  "bounds": [105, 144],
+                  "drawsContent": true
+                }
+              ]
+            },
+            {
+              "bounds": [104, 104],
+              "children": [
+                {
+                  "position": [2, 87],
+                  "bounds": [85, 15]
+                },
+                {
+                  "position": [87, 2],
+                  "bounds": [15, 85]
+                },
+                {
+                  "position": [87, 87],
+                  "bounds": [15, 15],
+                  "drawsContent": true
+                }
+              ]
+            }
+          ]
+        },
+        {
+          "shouldFlattenTransform": false,
+          "children": [
+            {
+              "position": [37, 138],
+              "bounds": [80, 40],
+              "contentsOpaque": true,
+              "drawsContent": true,
+              "backgroundColor": "#800080"
+            },
+            {
+              "position": [16, 105],
+              "bounds": [75, 80],
+              "drawsContent": true
+            }
+          ]
+        },
+        {
+          "shouldFlattenTransform": false,
+          "children": [
+            {
+              "position": [130, 130],
+              "bounds": [104, 104],
+              "shouldFlattenTransform": false,
+              "drawsContent": true,
+              "children": [
+                {
+                  "position": [2, 2],
+                  "bounds": [85, 85],
+                  "shouldFlattenTransform": false,
+                  "children": [
+                    {
+                      "bounds": [85, 144]
+                    }
+                  ]
+                },
+                {
+                  "bounds": [104, 104],
+                  "children": [
+                    {
+                      "position": [2, 87],
+                      "bounds": [85, 15]
+                    },
+                    {
+                      "position": [87, 2],
+                      "bounds": [15, 85]
+                    },
+                    {
+                      "position": [87, 87],
+                      "bounds": [15, 15],
+                      "drawsContent": true
+                    }
+                  ]
+                }
+              ]
+            },
+            {
+              "position": [155, 195],
+              "bounds": [80, 40],
+              "drawsContent": true
+            }
+          ]
+        },
+        {
+          "shouldFlattenTransform": false,
+          "children": [
+            {
+              "position": [136, 105],
+              "bounds": [75, 24],
+              "contentsOpaque": true,
+              "drawsContent": true,
+              "backgroundColor": "#0000FF"
+            },
+            {
+              "position": [136, 161],
+              "bounds": [75, 24],
+              "drawsContent": true
+            }
+          ]
+        },
+        {
+          "position": [250, 130],
+          "bounds": [104, 104],
+          "shouldFlattenTransform": false,
+          "drawsContent": true,
+          "children": [
+            {
+              "position": [2, 2],
+              "bounds": [85, 85],
+              "shouldFlattenTransform": false,
+              "children": [
+                {
+                  "bounds": [105, 144]
+                }
+              ]
+            },
+            {
+              "bounds": [104, 104],
+              "children": [
+                {
+                  "position": [2, 87],
+                  "bounds": [85, 15]
+                },
+                {
+                  "position": [87, 2],
+                  "bounds": [15, 85]
+                },
+                {
+                  "position": [87, 87],
+                  "bounds": [15, 15],
+                  "drawsContent": true
+                }
+              ]
+            }
+          ]
+        },
+        {
+          "shouldFlattenTransform": false,
+          "children": [
+            {
+              "position": [277, 138],
+              "bounds": [80, 40],
+              "contentsOpaque": true,
+              "drawsContent": true,
+              "backgroundColor": "#800080"
+            },
+            {
+              "position": [256, 105],
+              "bounds": [75, 80],
+              "drawsContent": true
+            }
+          ]
+        },
+        {
+          "position": [370, 130],
+          "bounds": [104, 104],
+          "shouldFlattenTransform": false,
+          "drawsContent": true,
+          "children": [
+            {
+              "position": [2, 2],
+              "bounds": [85, 85],
+              "shouldFlattenTransform": false,
+              "children": [
+                {
+                  "bounds": [105, 144]
+                }
+              ]
+            },
+            {
+              "bounds": [104, 104],
+              "children": [
+                {
+                  "position": [2, 87],
+                  "bounds": [85, 15]
+                },
+                {
+                  "position": [87, 2],
+                  "bounds": [15, 85]
+                },
+                {
+                  "position": [87, 87],
+                  "bounds": [15, 15],
+                  "drawsContent": true
+                }
+              ]
+            }
+          ]
+        },
+        {
+          "shouldFlattenTransform": false,
+          "children": [
+            {
+              "position": [397, 138],
+              "bounds": [80, 40],
+              "contentsOpaque": true,
+              "drawsContent": true,
+              "backgroundColor": "#800080"
+            },
+            {
+              "position": [376, 105],
+              "bounds": [75, 80],
+              "drawsContent": true
+            }
+          ]
+        },
+        {
+          "position": [10, 250],
+          "bounds": [104, 104],
+          "shouldFlattenTransform": false,
+          "drawsContent": true,
+          "children": [
+            {
+              "position": [2, 2],
+              "bounds": [85, 85],
+              "shouldFlattenTransform": false,
+              "children": [
+                {
+                  "bounds": [85, 144],
+                  "drawsContent": true
+                }
+              ]
+            },
+            {
+              "bounds": [104, 104],
+              "children": [
+                {
+                  "position": [2, 87],
+                  "bounds": [85, 15]
+                },
+                {
+                  "position": [87, 2],
+                  "bounds": [15, 85]
+                },
+                {
+                  "position": [87, 87],
+                  "bounds": [15, 15],
+                  "drawsContent": true
+                }
+              ]
+            }
+          ]
+        },
+        {
+          "position": [35, 315],
+          "bounds": [80, 40],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#800080"
+        },
+        {
+          "shouldFlattenTransform": false,
+          "children": [
+            {
+              "position": [16, 225],
+              "bounds": [75, 24],
+              "contentsOpaque": true,
+              "drawsContent": true,
+              "backgroundColor": "#0000FF"
+            },
+            {
+              "position": [16, 281],
+              "bounds": [75, 24],
+              "drawsContent": true
+            }
+          ]
+        },
+        {
+          "position": [130, 250],
+          "bounds": [104, 104],
+          "shouldFlattenTransform": false,
+          "drawsContent": true,
+          "children": [
+            {
+              "position": [2, 2],
+              "bounds": [85, 85],
+              "shouldFlattenTransform": false,
+              "children": [
+                {
+                  "bounds": [85, 144]
+                }
+              ]
+            },
+            {
+              "bounds": [104, 104],
+              "children": [
+                {
+                  "position": [2, 87],
+                  "bounds": [85, 15]
+                },
+                {
+                  "position": [87, 2],
+                  "bounds": [15, 85]
+                },
+                {
+                  "position": [87, 87],
+                  "bounds": [15, 15],
+                  "drawsContent": true
+                }
+              ]
+            }
+          ]
+        },
+        {
+          "position": [155, 315],
+          "bounds": [80, 40],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#800080"
+        },
+        {
+          "shouldFlattenTransform": false,
+          "children": [
+            {
+              "position": [136, 225],
+              "bounds": [75, 24],
+              "contentsOpaque": true,
+              "drawsContent": true,
+              "backgroundColor": "#0000FF"
+            },
+            {
+              "position": [136, 281],
+              "bounds": [75, 24],
+              "drawsContent": true
+            }
+          ]
+        },
+        {
+          "position": [250, 250],
+          "bounds": [104, 104],
+          "shouldFlattenTransform": false,
+          "drawsContent": true,
+          "children": [
+            {
+              "position": [2, 2],
+              "bounds": [85, 85],
+              "shouldFlattenTransform": false,
+              "children": [
+                {
+                  "bounds": [85, 144],
+                  "drawsContent": true
+                }
+              ]
+            },
+            {
+              "bounds": [104, 104],
+              "children": [
+                {
+                  "position": [2, 87],
+                  "bounds": [85, 15]
+                },
+                {
+                  "position": [87, 2],
+                  "bounds": [15, 85]
+                },
+                {
+                  "position": [87, 87],
+                  "bounds": [15, 15],
+                  "drawsContent": true
+                }
+              ]
+            }
+          ]
+        },
+        {
+          "position": [275, 315],
+          "bounds": [80, 40],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#800080"
+        },
+        {
+          "shouldFlattenTransform": false,
+          "children": [
+            {
+              "position": [256, 225],
+              "bounds": [75, 24],
+              "contentsOpaque": true,
+              "drawsContent": true,
+              "backgroundColor": "#0000FF"
+            },
+            {
+              "position": [256, 281],
+              "bounds": [75, 24],
+              "drawsContent": true
+            }
+          ]
+        },
+        {
+          "position": [370, 250],
+          "bounds": [104, 104],
+          "shouldFlattenTransform": false,
+          "drawsContent": true,
+          "children": [
+            {
+              "position": [2, 2],
+              "bounds": [85, 85],
+              "shouldFlattenTransform": false,
+              "children": [
+                {
+                  "bounds": [85, 144]
+                }
+              ]
+            },
+            {
+              "bounds": [104, 104],
+              "children": [
+                {
+                  "position": [2, 87],
+                  "bounds": [85, 15]
+                },
+                {
+                  "position": [87, 2],
+                  "bounds": [15, 85]
+                },
+                {
+                  "position": [87, 87],
+                  "bounds": [15, 15],
+                  "drawsContent": true
+                }
+              ]
+            }
+          ]
+        },
+        {
+          "position": [395, 315],
+          "bounds": [80, 40],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#800080"
+        },
+        {
+          "shouldFlattenTransform": false,
+          "children": [
+            {
+              "position": [376, 225],
+              "bounds": [75, 24],
+              "contentsOpaque": true,
+              "drawsContent": true,
+              "backgroundColor": "#0000FF"
+            },
+            {
+              "position": [376, 281],
+              "bounds": [75, 24],
+              "drawsContent": true
+            }
+          ]
+        },
+        {
+          "position": [375, 20],
+          "bounds": [50, 100],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#008000"
+        },
+        {
+          "position": [15, 140],
+          "bounds": [50, 100],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#008000"
+        },
+        {
+          "position": [135, 140],
+          "bounds": [50, 100],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#008000"
+        },
+        {
+          "position": [255, 140],
+          "bounds": [50, 100],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#008000"
+        },
+        {
+          "position": [15, 260],
+          "bounds": [50, 100],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#008000"
+        },
+        {
+          "position": [135, 260],
+          "bounds": [50, 100],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#008000"
+        },
+        {
+          "shouldFlattenTransform": false,
+          "children": [
+            {
+              "position": [16, -43],
+              "bounds": [75, 24],
+              "contentsOpaque": true,
+              "drawsContent": true,
+              "backgroundColor": "#0000FF"
+            },
+            {
+              "position": [16, 13],
+              "bounds": [75, 80],
+              "drawsContent": true
+            }
+          ]
+        },
+        {
+          "shouldFlattenTransform": false,
+          "children": [
+            {
+              "position": [136, -43],
+              "bounds": [75, 24],
+              "contentsOpaque": true,
+              "drawsContent": true,
+              "backgroundColor": "#0000FF"
+            },
+            {
+              "position": [136, 13],
+              "bounds": [75, 80],
+              "drawsContent": true
+            }
+          ]
+        },
+        {
+          "shouldFlattenTransform": false,
+          "children": [
+            {
+              "position": [256, -43],
+              "bounds": [75, 24],
+              "contentsOpaque": true,
+              "drawsContent": true,
+              "backgroundColor": "#0000FF"
+            },
+            {
+              "position": [256, 13],
+              "bounds": [75, 80],
+              "drawsContent": true
+            }
+          ]
+        },
+        {
+          "shouldFlattenTransform": false,
+          "children": [
+            {
+              "position": [376, -43],
+              "bounds": [75, 24],
+              "contentsOpaque": true,
+              "drawsContent": true,
+              "backgroundColor": "#0000FF"
+            },
+            {
+              "position": [376, 13],
+              "bounds": [75, 80],
+              "drawsContent": true
+            }
+          ]
+        },
+        {
+          "shouldFlattenTransform": false,
+          "children": [
+            {
+              "position": [16, 77],
+              "bounds": [75, 24],
+              "contentsOpaque": true,
+              "drawsContent": true,
+              "backgroundColor": "#0000FF"
+            },
+            {
+              "position": [16, 133],
+              "bounds": [75, 80],
+              "drawsContent": true
+            }
+          ]
+        },
+        {
+          "shouldFlattenTransform": false,
+          "children": [
+            {
+              "position": [136, 77],
+              "bounds": [75, 24],
+              "contentsOpaque": true,
+              "drawsContent": true,
+              "backgroundColor": "#0000FF"
+            },
+            {
+              "position": [136, 133],
+              "bounds": [75, 80],
+              "drawsContent": true
+            }
+          ]
+        },
+        {
+          "shouldFlattenTransform": false,
+          "children": [
+            {
+              "position": [256, 77],
+              "bounds": [75, 24],
+              "contentsOpaque": true,
+              "drawsContent": true,
+              "backgroundColor": "#0000FF"
+            },
+            {
+              "position": [256, 133],
+              "bounds": [75, 80],
+              "drawsContent": true
+            }
+          ]
+        },
+        {
+          "shouldFlattenTransform": false,
+          "children": [
+            {
+              "position": [376, 77],
+              "bounds": [75, 24],
+              "contentsOpaque": true,
+              "drawsContent": true,
+              "backgroundColor": "#0000FF"
+            },
+            {
+              "position": [376, 133],
+              "bounds": [75, 80],
+              "drawsContent": true
+            }
+          ]
+        },
+        {
+          "shouldFlattenTransform": false,
+          "children": [
+            {
+              "position": [16, 197],
+              "bounds": [75, 24],
+              "contentsOpaque": true,
+              "drawsContent": true,
+              "backgroundColor": "#0000FF"
+            },
+            {
+              "position": [16, 253],
+              "bounds": [75, 80],
+              "drawsContent": true
+            }
+          ]
+        },
+        {
+          "shouldFlattenTransform": false,
+          "children": [
+            {
+              "position": [136, 197],
+              "bounds": [75, 24],
+              "contentsOpaque": true,
+              "drawsContent": true,
+              "backgroundColor": "#0000FF"
+            },
+            {
+              "position": [136, 253],
+              "bounds": [75, 80],
+              "drawsContent": true
+            }
+          ]
+        },
+        {
+          "shouldFlattenTransform": false,
+          "children": [
+            {
+              "position": [256, 197],
+              "bounds": [75, 24],
+              "contentsOpaque": true,
+              "drawsContent": true,
+              "backgroundColor": "#0000FF"
+            },
+            {
+              "position": [256, 253],
+              "bounds": [75, 80],
+              "drawsContent": true
+            }
+          ]
+        },
+        {
+          "shouldFlattenTransform": false,
+          "children": [
+            {
+              "position": [376, 197],
+              "bounds": [75, 24],
+              "contentsOpaque": true,
+              "drawsContent": true,
+              "backgroundColor": "#0000FF"
+            },
+            {
+              "position": [376, 253],
+              "bounds": [75, 80],
+              "drawsContent": true
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/android/virtual/threaded/compositing/visibility/visibility-image-layers-dynamic-expected.txt b/third_party/WebKit/LayoutTests/platform/android/virtual/threaded/compositing/visibility/visibility-image-layers-dynamic-expected.txt
new file mode 100644
index 0000000..a8d3643
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/android/virtual/threaded/compositing/visibility/visibility-image-layers-dynamic-expected.txt
@@ -0,0 +1,114 @@
+
+
+
+Initial
+
+{
+  "bounds": [785, 626],
+  "children": [
+    {
+      "bounds": [785, 626],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [18, 10],
+          "bounds": [749, 145]
+        },
+        {
+          "position": [14, 316],
+          "bounds": [757, 153],
+          "contentsVisible": false,
+          "children": [
+            {
+              "position": [24, 24],
+              "bounds": [100, 100]
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}
+After step 1
+
+{
+  "bounds": [785, 1078],
+  "children": [
+    {
+      "bounds": [785, 1078],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [18, 10],
+          "bounds": [749, 145],
+          "children": [
+            {
+              "position": [20, 20],
+              "bounds": [100, 100]
+            }
+          ]
+        },
+        {
+          "position": [14, 316],
+          "bounds": [757, 153],
+          "contentsVisible": false,
+          "children": [
+            {
+              "position": [24, 24],
+              "bounds": [100, 100]
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}
+After step 2
+
+{
+  "bounds": [785, 1625],
+  "children": [
+    {
+      "bounds": [785, 1625],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "position": [18, 10],
+          "bounds": [749, 145],
+          "children": [
+            {
+              "position": [20, 20],
+              "bounds": [100, 100]
+            }
+          ]
+        },
+        {
+          "position": [14, 161],
+          "bounds": [757, 153],
+          "drawsContent": true,
+          "children": [
+            {
+              "position": [24, 24],
+              "bounds": [100, 100]
+            }
+          ]
+        },
+        {
+          "position": [14, 316],
+          "bounds": [757, 153],
+          "contentsVisible": false,
+          "children": [
+            {
+              "position": [24, 24],
+              "bounds": [100, 100]
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/linux-precise/css3/filters/effect-hue-rotate-hw-expected.png b/third_party/WebKit/LayoutTests/platform/linux-precise/css3/filters/effect-hue-rotate-hw-expected.png
deleted file mode 100644
index c04dc34..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux-precise/css3/filters/effect-hue-rotate-hw-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux-precise/fast/repaint/window-resize-background-image-fixed-centered-composited-expected.txt b/third_party/WebKit/LayoutTests/platform/linux-precise/fast/repaint/window-resize-background-image-fixed-centered-composited-expected.txt
new file mode 100644
index 0000000..6809e2a
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux-precise/fast/repaint/window-resize-background-image-fixed-centered-composited-expected.txt
@@ -0,0 +1,177 @@
+{
+  "name": "Content Root Layer",
+  "bounds": [600, 250],
+  "children": [
+    {
+      "name": "LayoutView #document",
+      "bounds": [600, 250],
+      "drawsContent": true,
+      "paintInvalidations": [
+        {
+          "object": "LayoutView #document",
+          "rect": [0, 250, 600, 250],
+          "reason": "incremental"
+        },
+        {
+          "object": "LayoutView #document",
+          "rect": [0, 0, 600, 250],
+          "reason": "full"
+        },
+        {
+          "object": "LayoutBlockFlow HTML",
+          "rect": [0, 0, 600, 8],
+          "reason": "forced by layout"
+        }
+      ]
+    }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutView #document",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutBlockFlow HTML",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutView #document",
+      "reason": "full"
+    }
+  ]
+}
+{
+  "name": "Content Root Layer",
+  "bounds": [400, 250],
+  "children": [
+    {
+      "name": "LayoutView #document",
+      "bounds": [400, 250],
+      "drawsContent": true,
+      "paintInvalidations": [
+        {
+          "object": "LayoutBlockFlow HTML",
+          "rect": [0, 0, 600, 8],
+          "reason": "forced by layout"
+        },
+        {
+          "object": "LayoutView #document",
+          "rect": [0, 0, 400, 250],
+          "reason": "full"
+        },
+        {
+          "object": "LayoutView #document",
+          "rect": [400, 0, 200, 250],
+          "reason": "incremental"
+        }
+      ]
+    }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutView #document",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutView #document",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutBlockFlow HTML",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutBlockFlow BODY",
+      "reason": "became visible"
+    }
+  ]
+}
+{
+  "name": "Content Root Layer",
+  "bounds": [400, 600],
+  "children": [
+    {
+      "name": "LayoutView #document",
+      "bounds": [400, 600],
+      "drawsContent": true,
+      "paintInvalidations": [
+        {
+          "object": "LayoutView #document",
+          "rect": [0, 0, 400, 600],
+          "reason": "full"
+        },
+        {
+          "object": "LayoutView #document",
+          "rect": [0, 250, 400, 350],
+          "reason": "incremental"
+        },
+        {
+          "object": "LayoutBlockFlow HTML",
+          "rect": [0, 0, 400, 8],
+          "reason": "forced by layout"
+        }
+      ]
+    }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutView #document",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutView #document",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutBlockFlow HTML",
+      "reason": "forced by layout"
+    }
+  ]
+}
+{
+  "name": "Content Root Layer",
+  "bounds": [800, 600],
+  "children": [
+    {
+      "name": "LayoutView #document",
+      "bounds": [800, 600],
+      "drawsContent": true,
+      "paintInvalidations": [
+        {
+          "object": "LayoutView #document",
+          "rect": [0, 0, 800, 600],
+          "reason": "full"
+        },
+        {
+          "object": "LayoutBlockFlow HTML",
+          "rect": [0, 0, 800, 8],
+          "reason": "forced by layout"
+        },
+        {
+          "object": "LayoutView #document",
+          "rect": [400, 0, 400, 600],
+          "reason": "incremental"
+        }
+      ]
+    }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutView #document",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutView #document",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutBlockFlow HTML",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutBlockFlow BODY",
+      "reason": "became visible"
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/linux-precise/svg/custom/text-match-highlight-expected.png b/third_party/WebKit/LayoutTests/platform/linux-precise/svg/custom/text-match-highlight-expected.png
deleted file mode 100644
index 456c7bd..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux-precise/svg/custom/text-match-highlight-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux-precise/svg/repaint/inner-svg-change-viewBox-contract-expected.png b/third_party/WebKit/LayoutTests/platform/linux-precise/svg/repaint/inner-svg-change-viewBox-contract-expected.png
deleted file mode 100644
index deace76..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux-precise/svg/repaint/inner-svg-change-viewBox-contract-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux-precise/svg/repaint/inner-svg-change-viewBox-contract-expected.txt b/third_party/WebKit/LayoutTests/platform/linux-precise/svg/repaint/inner-svg-change-viewBox-contract-expected.txt
deleted file mode 100644
index 95210be8..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux-precise/svg/repaint/inner-svg-change-viewBox-contract-expected.txt
+++ /dev/null
@@ -1,23 +0,0 @@
-{
-  "bounds": [800, 600],
-  "children": [
-    {
-      "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"
-        }
-      ]
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/linux-precise/svg/repaint/mask-clip-target-transform-expected.png b/third_party/WebKit/LayoutTests/platform/linux-precise/svg/repaint/mask-clip-target-transform-expected.png
deleted file mode 100644
index f7a39d1a..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux-precise/svg/repaint/mask-clip-target-transform-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux-precise/svg/repaint/mask-clip-target-transform-expected.txt b/third_party/WebKit/LayoutTests/platform/linux-precise/svg/repaint/mask-clip-target-transform-expected.txt
deleted file mode 100644
index 4e9a471..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux-precise/svg/repaint/mask-clip-target-transform-expected.txt
+++ /dev/null
@@ -1,43 +0,0 @@
-{
-  "bounds": [800, 600],
-  "children": [
-    {
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutSVGRect rect id='clipper'",
-          "rect": [0, 100, 300, 200],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGRect rect id='masker'",
-          "rect": [0, 0, 300, 100],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGRect rect id='clipper'",
-          "rect": [100, 0, 200, 300],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGRect rect id='masker'",
-          "rect": [100, 0, 200, 300],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGContainer g",
-          "rect": [150, 50, 100, 100],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGContainer g",
-          "rect": [50, 150, 100, 100],
-          "reason": "bounds change"
-        }
-      ]
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/linux-precise/virtual/gpu/fast/canvas/canvas-composite-repaint-by-all-imagesource-expected.txt b/third_party/WebKit/LayoutTests/platform/linux-precise/virtual/gpu/fast/canvas/canvas-composite-repaint-by-all-imagesource-expected.txt
new file mode 100644
index 0000000..3ba82af
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux-precise/virtual/gpu/fast/canvas/canvas-composite-repaint-by-all-imagesource-expected.txt
@@ -0,0 +1,315 @@
+{
+  "name": "Content Root Layer",
+  "bounds": [785, 933],
+  "children": [
+    {
+      "name": "LayoutView #document",
+      "bounds": [785, 933],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "backgroundColor": "#FFFFFF",
+      "children": [
+        {
+          "name": "LayoutHTMLCanvas CANVAS id='source-oversolid color'",
+          "position": [142, 64],
+          "bounds": [132, 42],
+          "drawsContent": true
+        },
+        {
+          "name": "LayoutHTMLCanvas CANVAS id='source-overimage'",
+          "position": [284, 64],
+          "bounds": [132, 42],
+          "drawsContent": true
+        },
+        {
+          "name": "LayoutHTMLCanvas CANVAS id='source-overcanvas'",
+          "position": [426, 64],
+          "bounds": [132, 42],
+          "drawsContent": true
+        },
+        {
+          "name": "LayoutHTMLCanvas CANVAS id='source-overvideo'",
+          "position": [568, 64],
+          "bounds": [132, 42],
+          "drawsContent": true
+        },
+        {
+          "name": "LayoutHTMLCanvas CANVAS id='source-insolid color'",
+          "position": [142, 114],
+          "bounds": [132, 42],
+          "drawsContent": true
+        },
+        {
+          "name": "LayoutHTMLCanvas CANVAS id='source-inimage'",
+          "position": [284, 114],
+          "bounds": [132, 42],
+          "drawsContent": true
+        },
+        {
+          "name": "LayoutHTMLCanvas CANVAS id='source-incanvas'",
+          "position": [426, 114],
+          "bounds": [132, 42],
+          "drawsContent": true
+        },
+        {
+          "name": "LayoutHTMLCanvas CANVAS id='source-invideo'",
+          "position": [568, 114],
+          "bounds": [132, 42],
+          "drawsContent": true
+        },
+        {
+          "name": "LayoutHTMLCanvas CANVAS id='source-outsolid color'",
+          "position": [142, 164],
+          "bounds": [132, 42],
+          "drawsContent": true
+        },
+        {
+          "name": "LayoutHTMLCanvas CANVAS id='source-outimage'",
+          "position": [284, 164],
+          "bounds": [132, 42],
+          "drawsContent": true
+        },
+        {
+          "name": "LayoutHTMLCanvas CANVAS id='source-outcanvas'",
+          "position": [426, 164],
+          "bounds": [132, 42],
+          "drawsContent": true
+        },
+        {
+          "name": "LayoutHTMLCanvas CANVAS id='source-outvideo'",
+          "position": [568, 164],
+          "bounds": [132, 42],
+          "drawsContent": true
+        },
+        {
+          "name": "LayoutHTMLCanvas CANVAS id='source-atopsolid color'",
+          "position": [142, 214],
+          "bounds": [132, 42],
+          "drawsContent": true
+        },
+        {
+          "name": "LayoutHTMLCanvas CANVAS id='source-atopimage'",
+          "position": [284, 214],
+          "bounds": [132, 42],
+          "drawsContent": true
+        },
+        {
+          "name": "LayoutHTMLCanvas CANVAS id='source-atopcanvas'",
+          "position": [426, 214],
+          "bounds": [132, 42],
+          "drawsContent": true
+        },
+        {
+          "name": "LayoutHTMLCanvas CANVAS id='source-atopvideo'",
+          "position": [568, 214],
+          "bounds": [132, 42],
+          "drawsContent": true
+        },
+        {
+          "name": "LayoutHTMLCanvas CANVAS id='destination-oversolid color'",
+          "position": [142, 264],
+          "bounds": [132, 42],
+          "drawsContent": true
+        },
+        {
+          "name": "LayoutHTMLCanvas CANVAS id='destination-overimage'",
+          "position": [284, 264],
+          "bounds": [132, 42],
+          "drawsContent": true
+        },
+        {
+          "name": "LayoutHTMLCanvas CANVAS id='destination-overcanvas'",
+          "position": [426, 264],
+          "bounds": [132, 42],
+          "drawsContent": true
+        },
+        {
+          "name": "LayoutHTMLCanvas CANVAS id='destination-overvideo'",
+          "position": [568, 264],
+          "bounds": [132, 42],
+          "drawsContent": true
+        },
+        {
+          "name": "LayoutHTMLCanvas CANVAS id='destination-insolid color'",
+          "position": [142, 314],
+          "bounds": [132, 42],
+          "drawsContent": true
+        },
+        {
+          "name": "LayoutHTMLCanvas CANVAS id='destination-inimage'",
+          "position": [284, 314],
+          "bounds": [132, 42],
+          "drawsContent": true
+        },
+        {
+          "name": "LayoutHTMLCanvas CANVAS id='destination-incanvas'",
+          "position": [426, 314],
+          "bounds": [132, 42],
+          "drawsContent": true
+        },
+        {
+          "name": "LayoutHTMLCanvas CANVAS id='destination-invideo'",
+          "position": [568, 314],
+          "bounds": [132, 42],
+          "drawsContent": true
+        },
+        {
+          "name": "LayoutHTMLCanvas CANVAS id='destination-outsolid color'",
+          "position": [142, 364],
+          "bounds": [132, 42],
+          "drawsContent": true
+        },
+        {
+          "name": "LayoutHTMLCanvas CANVAS id='destination-outimage'",
+          "position": [284, 364],
+          "bounds": [132, 42],
+          "drawsContent": true
+        },
+        {
+          "name": "LayoutHTMLCanvas CANVAS id='destination-outcanvas'",
+          "position": [426, 364],
+          "bounds": [132, 42],
+          "drawsContent": true
+        },
+        {
+          "name": "LayoutHTMLCanvas CANVAS id='destination-outvideo'",
+          "position": [568, 364],
+          "bounds": [132, 42],
+          "drawsContent": true
+        },
+        {
+          "name": "LayoutHTMLCanvas CANVAS id='destination-atopsolid color'",
+          "position": [142, 414],
+          "bounds": [132, 42],
+          "drawsContent": true
+        },
+        {
+          "name": "LayoutHTMLCanvas CANVAS id='destination-atopimage'",
+          "position": [284, 414],
+          "bounds": [132, 42],
+          "drawsContent": true
+        },
+        {
+          "name": "LayoutHTMLCanvas CANVAS id='destination-atopcanvas'",
+          "position": [426, 414],
+          "bounds": [132, 42],
+          "drawsContent": true
+        },
+        {
+          "name": "LayoutHTMLCanvas CANVAS id='destination-atopvideo'",
+          "position": [568, 414],
+          "bounds": [132, 42],
+          "drawsContent": true
+        },
+        {
+          "name": "LayoutHTMLCanvas CANVAS id='lightersolid color'",
+          "position": [142, 464],
+          "bounds": [132, 42],
+          "drawsContent": true
+        },
+        {
+          "name": "LayoutHTMLCanvas CANVAS id='lighterimage'",
+          "position": [284, 464],
+          "bounds": [132, 42],
+          "drawsContent": true
+        },
+        {
+          "name": "LayoutHTMLCanvas CANVAS id='lightercanvas'",
+          "position": [426, 464],
+          "bounds": [132, 42],
+          "drawsContent": true
+        },
+        {
+          "name": "LayoutHTMLCanvas CANVAS id='lightervideo'",
+          "position": [568, 464],
+          "bounds": [132, 42],
+          "drawsContent": true
+        },
+        {
+          "name": "LayoutHTMLCanvas CANVAS id='copysolid color'",
+          "position": [142, 514],
+          "bounds": [132, 42],
+          "drawsContent": true
+        },
+        {
+          "name": "LayoutHTMLCanvas CANVAS id='copyimage'",
+          "position": [284, 514],
+          "bounds": [132, 42],
+          "drawsContent": true
+        },
+        {
+          "name": "LayoutHTMLCanvas CANVAS id='copycanvas'",
+          "position": [426, 514],
+          "bounds": [132, 42],
+          "drawsContent": true
+        },
+        {
+          "name": "LayoutHTMLCanvas CANVAS id='copyvideo'",
+          "position": [568, 514],
+          "bounds": [132, 42],
+          "drawsContent": true
+        },
+        {
+          "name": "LayoutHTMLCanvas CANVAS id='xorsolid color'",
+          "position": [142, 564],
+          "bounds": [132, 42],
+          "drawsContent": true
+        },
+        {
+          "name": "LayoutHTMLCanvas CANVAS id='xorimage'",
+          "position": [284, 564],
+          "bounds": [132, 42],
+          "drawsContent": true
+        },
+        {
+          "name": "LayoutHTMLCanvas CANVAS id='xorcanvas'",
+          "position": [426, 564],
+          "bounds": [132, 42],
+          "drawsContent": true
+        },
+        {
+          "name": "LayoutHTMLCanvas CANVAS id='xorvideo'",
+          "position": [568, 564],
+          "bounds": [132, 42],
+          "drawsContent": true
+        },
+        {
+          "name": "LayoutHTMLCanvas CANVAS id='source-canvas'",
+          "position": [15, 754],
+          "bounds": [152, 62],
+          "drawsContent": true
+        },
+        {
+          "name": "LayoutVideo VIDEO id='video'",
+          "position": [15, 859],
+          "bounds": [150, 60]
+        },
+        {
+          "name": "Squashing Containment Layer",
+          "shouldFlattenTransform": false,
+          "children": [
+            {
+              "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": "LayoutVideo VIDEO id='video'",
+      "reason": "full"
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/linux/compositing/geometry/bounds-ignores-hidden-composited-descendant-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/compositing/geometry/bounds-ignores-hidden-composited-descendant-expected.txt
index 38f6e9c..2255bdd 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/compositing/geometry/bounds-ignores-hidden-composited-descendant-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/compositing/geometry/bounds-ignores-hidden-composited-descendant-expected.txt
@@ -1,26 +1,31 @@
 
 
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "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,
           "children": [
             {
+              "name": "LayoutBlockFlow (relative positioned) DIV class='composited inner box'",
               "position": [490, 110],
               "bounds": [100, 100],
               "contentsOpaque": true,
diff --git a/third_party/WebKit/LayoutTests/platform/linux/compositing/geometry/composited-in-columns-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/compositing/geometry/composited-in-columns-expected.txt
index eba7895..4a86162 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/compositing/geometry/composited-in-columns-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/compositing/geometry/composited-in-columns-expected.txt
@@ -1,18 +1,22 @@
  {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow DIV class='composited block'",
           "position": [14, 164],
           "bounds": [210, 60],
           "drawsContent": true,
           "backgroundColor": "#0000FF",
           "children": [
             {
+              "name": "LayoutBlockFlow DIV class='composited box'",
               "position": [5, 5],
               "bounds": [50, 50],
               "contentsOpaque": true,
@@ -22,12 +26,14 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow DIV class='composited block'",
           "position": [272, 89],
           "bounds": [210, 60],
           "drawsContent": true,
           "backgroundColor": "#0000FF",
           "children": [
             {
+              "name": "LayoutBlockFlow DIV class='composited box'",
               "position": [5, 5],
               "bounds": [50, 50],
               "contentsOpaque": true,
diff --git a/third_party/WebKit/LayoutTests/platform/linux/compositing/geometry/layer-due-to-layer-children-deep-switch-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/compositing/geometry/layer-due-to-layer-children-deep-switch-expected.txt
index 5c3e881a..560387c 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/compositing/geometry/layer-due-to-layer-children-deep-switch-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/compositing/geometry/layer-due-to-layer-children-deep-switch-expected.txt
@@ -3,9 +3,11 @@
 
 First dump layer tree:
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true
@@ -15,19 +17,23 @@
 
 Second dump layer tree:
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow (relative positioned) DIV id='parent'",
           "position": [8, 8],
           "bounds": [342, 292],
           "drawsContent": true,
           "children": [
             {
+              "name": "LayoutBlockFlow (relative positioned) DIV id='child'",
               "position": [31, 41],
               "bounds": [250, 220],
               "contentsOpaque": true,
@@ -35,6 +41,7 @@
               "backgroundColor": "#0000FF",
               "children": [
                 {
+                  "name": "LayoutBlockFlow (relative positioned) DIV id='grandchild'",
                   "position": [10, 10],
                   "bounds": [200, 200],
                   "contentsOpaque": true,
@@ -48,6 +55,7 @@
                   ],
                   "children": [
                     {
+                      "name": "LayoutBlockFlow (relative positioned) DIV id='greatgrandchild'",
                       "position": [100, 0],
                       "bounds": [250, 100],
                       "contentsOpaque": true,
@@ -73,10 +81,12 @@
 
 Third dump layer tree:
 {
-  "bounds": [785, 1446],
+  "name": "Content Root Layer",
+  "bounds": [785, 1574],
   "children": [
     {
-      "bounds": [785, 1446],
+      "name": "LayoutView #document",
+      "bounds": [785, 1574],
       "contentsOpaque": true,
       "drawsContent": true
     }
diff --git a/third_party/WebKit/LayoutTests/platform/linux/compositing/geometry/layer-due-to-layer-children-switch-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/compositing/geometry/layer-due-to-layer-children-switch-expected.txt
index 5a9d647..7813569 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/compositing/geometry/layer-due-to-layer-children-switch-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/compositing/geometry/layer-due-to-layer-children-switch-expected.txt
@@ -3,9 +3,11 @@
 
 First dump layer tree:
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true
@@ -15,19 +17,23 @@
 
 Second dump layer tree:
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow (relative positioned) DIV id='parent' class='parent'",
           "position": [8, 8],
           "bounds": [242, 192],
           "drawsContent": true,
           "children": [
             {
+              "name": "LayoutBlockFlow (relative positioned) DIV id='child' class='child'",
               "position": [121, 41],
               "bounds": [250, 100],
               "contentsOpaque": true,
@@ -49,10 +55,12 @@
 
 Third dump layer tree:
 {
-  "bounds": [785, 962],
+  "name": "Content Root Layer",
+  "bounds": [785, 1058],
   "children": [
     {
-      "bounds": [785, 962],
+      "name": "LayoutView #document",
+      "bounds": [785, 1058],
       "contentsOpaque": true,
       "drawsContent": true
     }
diff --git a/third_party/WebKit/LayoutTests/platform/linux/compositing/iframes/invisible-nested-iframe-show-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/compositing/iframes/invisible-nested-iframe-show-expected.txt
index fa4d0fa4..21fa972 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/compositing/iframes/invisible-nested-iframe-show-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/compositing/iframes/invisible-nested-iframe-show-expected.txt
@@ -1,56 +1,71 @@
 
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutIFrame IFRAME",
           "position": [-12, -12],
           "bounds": [370, 220],
           "drawsContent": true,
           "children": [
             {
+              "name": "Frame Overflow Controls Host Layer",
               "position": [35, 35],
               "bounds": [300, 150],
               "children": [
                 {
+                  "name": "Frame Clipping Layer",
                   "bounds": [285, 150],
                   "children": [
                     {
+                      "name": "Frame Scrolling Layer",
                       "children": [
                         {
+                          "name": "Content Root Layer",
                           "bounds": [285, 193],
                           "children": [
                             {
+                              "name": "LayoutView #document",
                               "bounds": [285, 193],
                               "drawsContent": true,
                               "children": [
                                 {
+                                  "name": "LayoutIFrame IFRAME",
                                   "position": [8, 8],
                                   "bounds": [252, 172],
                                   "drawsContent": true,
                                   "children": [
                                     {
+                                      "name": "Frame Overflow Controls Host Layer",
                                       "position": [1, 1],
                                       "bounds": [250, 170],
                                       "children": [
                                         {
+                                          "name": "Frame Clipping Layer",
                                           "bounds": [250, 170],
                                           "children": [
                                             {
+                                              "name": "Frame Scrolling Layer",
                                               "children": [
                                                 {
+                                                  "name": "Content Root Layer",
                                                   "bounds": [250, 230],
                                                   "children": [
                                                     {
+                                                      "name": "LayoutView #document",
                                                       "bounds": [250, 230],
                                                       "drawsContent": true,
                                                       "backgroundColor": "#C0C0C0",
                                                       "children": [
                                                         {
+                                                          "name": "LayoutBlockFlow DIV id='iframe-content' class='box'",
                                                           "position": [18, 10],
                                                           "bounds": [210, 210],
                                                           "contentsOpaque": true,
@@ -78,6 +93,7 @@
                   ]
                 },
                 {
+                  "name": "Frame Vertical Scrollbar Layer",
                   "position": [285, 0],
                   "bounds": [15, 150]
                 }
@@ -86,6 +102,7 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow DIV class='box'",
           "position": [18, 203],
           "bounds": [210, 210],
           "contentsOpaque": true,
diff --git a/third_party/WebKit/LayoutTests/platform/linux/compositing/layer-creation/fixed-position-nonscrollable-body-mismatch-containers-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/compositing/layer-creation/fixed-position-nonscrollable-body-mismatch-containers-expected.txt
index 782a82c..504ee3a 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/compositing/layer-creation/fixed-position-nonscrollable-body-mismatch-containers-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/compositing/layer-creation/fixed-position-nonscrollable-body-mismatch-containers-expected.txt
@@ -1,42 +1,51 @@
 Even though the fixed-position element's container is nonscrollable, it should still be composited because one of its ancestors is scrolling.
 
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow DIV class='scrollable bigBox'",
           "position": [8, 72],
           "bounds": [302, 302],
           "shouldFlattenTransform": false,
           "drawsContent": true,
           "children": [
             {
+              "name": "Scrolling Layer",
               "position": [1, 1],
               "bounds": [285, 285],
               "shouldFlattenTransform": false,
               "children": [
                 {
+                  "name": "Scrolling Contents Layer",
                   "bounds": [285, 800],
                   "drawsContent": true
                 }
               ]
             },
             {
+              "name": "Overflow Controls Host Layer",
               "bounds": [302, 302],
               "children": [
                 {
+                  "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
@@ -46,6 +55,7 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow (positioned) DIV class='fixed lime box'",
           "position": [10, 100],
           "bounds": [100, 100],
           "contentsOpaque": true,
diff --git a/third_party/WebKit/LayoutTests/platform/linux/compositing/layer-creation/no-compositing-for-preserve-3d-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/compositing/layer-creation/no-compositing-for-preserve-3d-expected.txt
index 31488501..bd07f8f 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/compositing/layer-creation/no-compositing-for-preserve-3d-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/compositing/layer-creation/no-compositing-for-preserve-3d-expected.txt
@@ -2,14 +2,17 @@
 This layer should not be composited.
 This layer should be composited.
 {
+  "name": "Content Root Layer",
   "bounds": [785, 618],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [785, 618],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow DIV class='preserve3d'",
           "position": [18, 394],
           "bounds": [342, 182],
           "shouldFlattenTransform": false,
@@ -17,6 +20,7 @@
           "drawsContent": true,
           "children": [
             {
+              "name": "LayoutBlockFlow (relative positioned) DIV class='box'",
               "position": [31, 51],
               "bounds": [100, 100],
               "contentsOpaque": true,
diff --git a/third_party/WebKit/LayoutTests/platform/linux/compositing/overflow/selection-gaps-after-removing-scrolling-contents-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/compositing/overflow/selection-gaps-after-removing-scrolling-contents-expected.txt
index f4e88a0..6abb384 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/compositing/overflow/selection-gaps-after-removing-scrolling-contents-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/compositing/overflow/selection-gaps-after-removing-scrolling-contents-expected.txt
@@ -14,14 +14,17 @@
 *** iteration 1: ***
 
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow DIV id='container'",
           "position": [8, 68],
           "bounds": [300, 500],
           "contentsOpaque": true,
@@ -30,27 +33,33 @@
           "backgroundColor": "#0000FF",
           "children": [
             {
+              "name": "Scrolling Layer",
               "bounds": [285, 485],
               "shouldFlattenTransform": false,
               "children": [
                 {
+                  "name": "Scrolling Contents Layer",
                   "bounds": [285, 665],
                   "drawsContent": true
                 }
               ]
             },
             {
+              "name": "Overflow Controls Host Layer",
               "bounds": [300, 500],
               "children": [
                 {
+                  "name": "Horizontal Scrollbar Layer",
                   "position": [0, 485],
                   "bounds": [285, 15]
                 },
                 {
+                  "name": "Vertical Scrollbar Layer",
                   "position": [285, 0],
                   "bounds": [15, 485]
                 },
                 {
+                  "name": "Scroll Corner Layer",
                   "position": [285, 485],
                   "bounds": [15, 15],
                   "drawsContent": true
@@ -60,6 +69,7 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 83],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -67,6 +77,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 148],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -74,6 +85,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV id='selection' class='scrolled'",
           "position": [23, 213],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -81,6 +93,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 278],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -88,6 +101,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 343],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -95,6 +109,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 408],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -102,6 +117,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 473],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -109,6 +125,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 538],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -116,6 +133,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 603],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -123,6 +141,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 668],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -138,14 +157,17 @@
 *** iteration 2: ***
 
 {
-  "bounds": [785, 2578],
+  "name": "Content Root Layer",
+  "bounds": [785, 2882],
   "children": [
     {
-      "bounds": [785, 2578],
+      "name": "LayoutView #document",
+      "bounds": [785, 2882],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow DIV id='container'",
           "position": [8, 68],
           "bounds": [300, 500],
           "contentsOpaque": true,
@@ -154,27 +176,33 @@
           "backgroundColor": "#0000FF",
           "children": [
             {
+              "name": "Scrolling Layer",
               "bounds": [285, 485],
               "shouldFlattenTransform": false,
               "children": [
                 {
+                  "name": "Scrolling Contents Layer",
                   "bounds": [285, 665],
                   "drawsContent": true
                 }
               ]
             },
             {
+              "name": "Overflow Controls Host Layer",
               "bounds": [300, 500],
               "children": [
                 {
+                  "name": "Horizontal Scrollbar Layer",
                   "position": [0, 485],
                   "bounds": [285, 15]
                 },
                 {
+                  "name": "Vertical Scrollbar Layer",
                   "position": [285, 0],
                   "bounds": [15, 485]
                 },
                 {
+                  "name": "Scroll Corner Layer",
                   "position": [285, 485],
                   "bounds": [15, 15],
                   "drawsContent": true
@@ -184,6 +212,7 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 83],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -191,6 +220,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 148],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -198,6 +228,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV id='selection' class='scrolled'",
           "position": [23, 213],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -205,6 +236,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 278],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -212,6 +244,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 343],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -219,6 +252,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 408],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -226,6 +260,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 473],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -233,6 +268,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 538],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -240,6 +276,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 603],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -247,6 +284,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 668],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -262,40 +300,49 @@
 *** iteration 3: ***
 
 {
-  "bounds": [785, 4562],
+  "name": "Content Root Layer",
+  "bounds": [785, 5170],
   "children": [
     {
-      "bounds": [785, 4562],
+      "name": "LayoutView #document",
+      "bounds": [785, 5170],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow DIV id='container'",
           "position": [8, 68],
           "bounds": [300, 500],
           "shouldFlattenTransform": false,
           "drawsContent": true,
           "children": [
             {
+              "name": "Scrolling Layer",
               "bounds": [285, 485],
               "shouldFlattenTransform": false,
               "children": [
                 {
+                  "name": "Scrolling Contents Layer",
                   "bounds": [285, 665]
                 }
               ]
             },
             {
+              "name": "Overflow Controls Host Layer",
               "bounds": [300, 500],
               "children": [
                 {
+                  "name": "Horizontal Scrollbar Layer",
                   "position": [0, 485],
                   "bounds": [285, 15]
                 },
                 {
+                  "name": "Vertical Scrollbar Layer",
                   "position": [285, 0],
                   "bounds": [15, 485]
                 },
                 {
+                  "name": "Scroll Corner Layer",
                   "position": [285, 485],
                   "bounds": [15, 15],
                   "drawsContent": true
@@ -305,6 +352,7 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 83],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -312,6 +360,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 148],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -319,6 +368,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV id='selection' class='scrolled'",
           "position": [23, 213],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -326,6 +376,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 278],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -333,6 +384,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 343],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -340,6 +392,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 408],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -347,6 +400,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 473],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -354,6 +408,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 538],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -361,6 +416,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 603],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -368,6 +424,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 668],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -383,40 +440,49 @@
 *** iteration 4: ***
 
 {
-  "bounds": [785, 6498],
+  "name": "Content Root Layer",
+  "bounds": [785, 7410],
   "children": [
     {
-      "bounds": [785, 6498],
+      "name": "LayoutView #document",
+      "bounds": [785, 7410],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow DIV id='container'",
           "position": [8, 68],
           "bounds": [300, 500],
           "shouldFlattenTransform": false,
           "drawsContent": true,
           "children": [
             {
+              "name": "Scrolling Layer",
               "bounds": [285, 485],
               "shouldFlattenTransform": false,
               "children": [
                 {
+                  "name": "Scrolling Contents Layer",
                   "bounds": [285, 665]
                 }
               ]
             },
             {
+              "name": "Overflow Controls Host Layer",
               "bounds": [300, 500],
               "children": [
                 {
+                  "name": "Horizontal Scrollbar Layer",
                   "position": [0, 485],
                   "bounds": [285, 15]
                 },
                 {
+                  "name": "Vertical Scrollbar Layer",
                   "position": [285, 0],
                   "bounds": [15, 485]
                 },
                 {
+                  "name": "Scroll Corner Layer",
                   "position": [285, 485],
                   "bounds": [15, 15],
                   "drawsContent": true
@@ -426,6 +492,7 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 83],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -433,6 +500,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 148],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -440,6 +508,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV id='selection' class='scrolled'",
           "position": [23, 213],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -447,6 +516,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 278],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -454,6 +524,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 343],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -461,6 +532,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 408],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -468,6 +540,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 473],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -475,6 +548,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 538],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -482,6 +556,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 603],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -489,6 +564,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 668],
           "bounds": [100, 50],
           "contentsOpaque": true,
diff --git a/third_party/WebKit/LayoutTests/platform/linux/compositing/overflow/selection-gaps-toggling-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/compositing/overflow/selection-gaps-toggling-expected.txt
index 7bb7d757..5f0eb7c1 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/compositing/overflow/selection-gaps-toggling-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/compositing/overflow/selection-gaps-toggling-expected.txt
@@ -14,40 +14,49 @@
 *** iteration 1: ***
 
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow DIV class='container'",
           "position": [8, 68],
           "bounds": [300, 500],
           "shouldFlattenTransform": false,
           "drawsContent": true,
           "children": [
             {
+              "name": "Scrolling Layer",
               "bounds": [285, 485],
               "shouldFlattenTransform": false,
               "children": [
                 {
+                  "name": "Scrolling Contents Layer",
                   "bounds": [285, 665]
                 }
               ]
             },
             {
+              "name": "Overflow Controls Host Layer",
               "bounds": [300, 500],
               "children": [
                 {
+                  "name": "Horizontal Scrollbar Layer",
                   "position": [0, 485],
                   "bounds": [285, 15]
                 },
                 {
+                  "name": "Vertical Scrollbar Layer",
                   "position": [285, 0],
                   "bounds": [15, 485]
                 },
                 {
+                  "name": "Scroll Corner Layer",
                   "position": [285, 485],
                   "bounds": [15, 15],
                   "drawsContent": true
@@ -57,6 +66,7 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 83],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -64,6 +74,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 148],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -71,6 +82,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV id='selection' class='scrolled'",
           "position": [23, 213],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -78,6 +90,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 278],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -85,6 +98,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 343],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -92,6 +106,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 408],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -99,6 +114,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 473],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -106,6 +122,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 538],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -113,6 +130,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 603],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -120,6 +138,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 668],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -135,40 +154,49 @@
 *** iteration 2: ***
 
 {
-  "bounds": [785, 2530],
+  "name": "Content Root Layer",
+  "bounds": [785, 2834],
   "children": [
     {
-      "bounds": [785, 2530],
+      "name": "LayoutView #document",
+      "bounds": [785, 2834],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow DIV class='container'",
           "position": [8, 68],
           "bounds": [300, 500],
           "shouldFlattenTransform": false,
           "drawsContent": true,
           "children": [
             {
+              "name": "Scrolling Layer",
               "bounds": [285, 485],
               "shouldFlattenTransform": false,
               "children": [
                 {
+                  "name": "Scrolling Contents Layer",
                   "bounds": [285, 665]
                 }
               ]
             },
             {
+              "name": "Overflow Controls Host Layer",
               "bounds": [300, 500],
               "children": [
                 {
+                  "name": "Horizontal Scrollbar Layer",
                   "position": [0, 485],
                   "bounds": [285, 15]
                 },
                 {
+                  "name": "Vertical Scrollbar Layer",
                   "position": [285, 0],
                   "bounds": [15, 485]
                 },
                 {
+                  "name": "Scroll Corner Layer",
                   "position": [285, 485],
                   "bounds": [15, 15],
                   "drawsContent": true
@@ -178,6 +206,7 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 83],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -185,6 +214,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 148],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -192,6 +222,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV id='selection' class='scrolled'",
           "position": [23, 213],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -199,6 +230,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 278],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -206,6 +238,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 343],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -213,6 +246,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 408],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -220,6 +254,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 473],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -227,6 +262,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 538],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -234,6 +270,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 603],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -241,6 +278,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 668],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -256,40 +294,49 @@
 *** iteration 3: ***
 
 {
-  "bounds": [785, 4466],
+  "name": "Content Root Layer",
+  "bounds": [785, 5074],
   "children": [
     {
-      "bounds": [785, 4466],
+      "name": "LayoutView #document",
+      "bounds": [785, 5074],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow DIV class='container'",
           "position": [8, 68],
           "bounds": [300, 500],
           "shouldFlattenTransform": false,
           "drawsContent": true,
           "children": [
             {
+              "name": "Scrolling Layer",
               "bounds": [285, 485],
               "shouldFlattenTransform": false,
               "children": [
                 {
+                  "name": "Scrolling Contents Layer",
                   "bounds": [285, 665]
                 }
               ]
             },
             {
+              "name": "Overflow Controls Host Layer",
               "bounds": [300, 500],
               "children": [
                 {
+                  "name": "Horizontal Scrollbar Layer",
                   "position": [0, 485],
                   "bounds": [285, 15]
                 },
                 {
+                  "name": "Vertical Scrollbar Layer",
                   "position": [285, 0],
                   "bounds": [15, 485]
                 },
                 {
+                  "name": "Scroll Corner Layer",
                   "position": [285, 485],
                   "bounds": [15, 15],
                   "drawsContent": true
@@ -299,6 +346,7 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 83],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -306,6 +354,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 148],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -313,6 +362,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV id='selection' class='scrolled'",
           "position": [23, 213],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -320,6 +370,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 278],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -327,6 +378,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 343],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -334,6 +386,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 408],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -341,6 +394,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 473],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -348,6 +402,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 538],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -355,6 +410,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 603],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -362,6 +418,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 668],
           "bounds": [100, 50],
           "contentsOpaque": true,
diff --git a/third_party/WebKit/LayoutTests/platform/linux/compositing/overflow/selection-gaps-toggling-with-scrolling-contents-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/compositing/overflow/selection-gaps-toggling-with-scrolling-contents-expected.txt
index f6d489f..bb9133e 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/compositing/overflow/selection-gaps-toggling-with-scrolling-contents-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/compositing/overflow/selection-gaps-toggling-with-scrolling-contents-expected.txt
@@ -14,40 +14,49 @@
 *** iteration 1: ***
 
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow DIV id='container'",
           "position": [8, 68],
           "bounds": [300, 500],
           "shouldFlattenTransform": false,
           "drawsContent": true,
           "children": [
             {
+              "name": "Scrolling Layer",
               "bounds": [285, 485],
               "shouldFlattenTransform": false,
               "children": [
                 {
+                  "name": "Scrolling Contents Layer",
                   "bounds": [285, 665]
                 }
               ]
             },
             {
+              "name": "Overflow Controls Host Layer",
               "bounds": [300, 500],
               "children": [
                 {
+                  "name": "Horizontal Scrollbar Layer",
                   "position": [0, 485],
                   "bounds": [285, 15]
                 },
                 {
+                  "name": "Vertical Scrollbar Layer",
                   "position": [285, 0],
                   "bounds": [15, 485]
                 },
                 {
+                  "name": "Scroll Corner Layer",
                   "position": [285, 485],
                   "bounds": [15, 15],
                   "drawsContent": true
@@ -57,6 +66,7 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 83],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -64,6 +74,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 148],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -71,6 +82,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV id='selection' class='scrolled'",
           "position": [23, 213],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -78,6 +90,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 278],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -85,6 +98,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 343],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -92,6 +106,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 408],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -99,6 +114,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 473],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -106,6 +122,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 538],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -113,6 +130,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 603],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -120,6 +138,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 668],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -135,14 +154,17 @@
 *** iteration 2: ***
 
 {
-  "bounds": [785, 2530],
+  "name": "Content Root Layer",
+  "bounds": [785, 2834],
   "children": [
     {
-      "bounds": [785, 2530],
+      "name": "LayoutView #document",
+      "bounds": [785, 2834],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow DIV id='container'",
           "position": [8, 68],
           "bounds": [300, 500],
           "contentsOpaque": true,
@@ -151,27 +173,33 @@
           "backgroundColor": "#0000FF",
           "children": [
             {
+              "name": "Scrolling Layer",
               "bounds": [285, 485],
               "shouldFlattenTransform": false,
               "children": [
                 {
+                  "name": "Scrolling Contents Layer",
                   "bounds": [285, 665],
                   "drawsContent": true
                 }
               ]
             },
             {
+              "name": "Overflow Controls Host Layer",
               "bounds": [300, 500],
               "children": [
                 {
+                  "name": "Horizontal Scrollbar Layer",
                   "position": [0, 485],
                   "bounds": [285, 15]
                 },
                 {
+                  "name": "Vertical Scrollbar Layer",
                   "position": [285, 0],
                   "bounds": [15, 485]
                 },
                 {
+                  "name": "Scroll Corner Layer",
                   "position": [285, 485],
                   "bounds": [15, 15],
                   "drawsContent": true
@@ -181,6 +209,7 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 83],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -188,6 +217,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 148],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -195,6 +225,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV id='selection' class='scrolled'",
           "position": [23, 213],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -202,6 +233,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 278],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -209,6 +241,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 343],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -216,6 +249,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 408],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -223,6 +257,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 473],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -230,6 +265,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 538],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -237,6 +273,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 603],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -244,6 +281,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 668],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -259,14 +297,17 @@
 *** iteration 3: ***
 
 {
-  "bounds": [785, 4514],
+  "name": "Content Root Layer",
+  "bounds": [785, 5122],
   "children": [
     {
-      "bounds": [785, 4514],
+      "name": "LayoutView #document",
+      "bounds": [785, 5122],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow DIV id='container'",
           "position": [8, 68],
           "bounds": [300, 500],
           "contentsOpaque": true,
@@ -275,27 +316,33 @@
           "backgroundColor": "#0000FF",
           "children": [
             {
+              "name": "Scrolling Layer",
               "bounds": [285, 485],
               "shouldFlattenTransform": false,
               "children": [
                 {
+                  "name": "Scrolling Contents Layer",
                   "bounds": [285, 665],
                   "drawsContent": true
                 }
               ]
             },
             {
+              "name": "Overflow Controls Host Layer",
               "bounds": [300, 500],
               "children": [
                 {
+                  "name": "Horizontal Scrollbar Layer",
                   "position": [0, 485],
                   "bounds": [285, 15]
                 },
                 {
+                  "name": "Vertical Scrollbar Layer",
                   "position": [285, 0],
                   "bounds": [15, 485]
                 },
                 {
+                  "name": "Scroll Corner Layer",
                   "position": [285, 485],
                   "bounds": [15, 15],
                   "drawsContent": true
@@ -305,6 +352,7 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 83],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -312,6 +360,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 148],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -319,6 +368,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV id='selection' class='scrolled'",
           "position": [23, 213],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -326,6 +376,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 278],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -333,6 +384,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 343],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -340,6 +392,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 408],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -347,6 +400,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 473],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -354,6 +408,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 538],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -361,6 +416,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 603],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -368,6 +424,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 668],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -383,40 +440,49 @@
 *** iteration 4: ***
 
 {
-  "bounds": [785, 6498],
+  "name": "Content Root Layer",
+  "bounds": [785, 7410],
   "children": [
     {
-      "bounds": [785, 6498],
+      "name": "LayoutView #document",
+      "bounds": [785, 7410],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow DIV id='container'",
           "position": [8, 68],
           "bounds": [300, 500],
           "shouldFlattenTransform": false,
           "drawsContent": true,
           "children": [
             {
+              "name": "Scrolling Layer",
               "bounds": [285, 485],
               "shouldFlattenTransform": false,
               "children": [
                 {
+                  "name": "Scrolling Contents Layer",
                   "bounds": [285, 665]
                 }
               ]
             },
             {
+              "name": "Overflow Controls Host Layer",
               "bounds": [300, 500],
               "children": [
                 {
+                  "name": "Horizontal Scrollbar Layer",
                   "position": [0, 485],
                   "bounds": [285, 15]
                 },
                 {
+                  "name": "Vertical Scrollbar Layer",
                   "position": [285, 0],
                   "bounds": [15, 485]
                 },
                 {
+                  "name": "Scroll Corner Layer",
                   "position": [285, 485],
                   "bounds": [15, 15],
                   "drawsContent": true
@@ -426,6 +492,7 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 83],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -433,6 +500,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 148],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -440,6 +508,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV id='selection' class='scrolled'",
           "position": [23, 213],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -447,6 +516,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 278],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -454,6 +524,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 343],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -461,6 +532,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 408],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -468,6 +540,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 473],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -475,6 +548,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 538],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -482,6 +556,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 603],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -489,6 +564,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 668],
           "bounds": [100, 50],
           "contentsOpaque": true,
diff --git a/third_party/WebKit/LayoutTests/platform/linux/compositing/overflow/text-color-change-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/compositing/overflow/text-color-change-expected.txt
index 5b5e344..c8db0fe6 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/compositing/overflow/text-color-change-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/compositing/overflow/text-color-change-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -10,337 +12,343 @@
           "object": "LayoutText #text",
           "rect": [8, 61, 48, 185],
           "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '  Text'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '  Text'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '  Text'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '  Text'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '  Text'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '  Text'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '  Text'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '  Text'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '  Text'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '  Text'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '  Text'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '  Text'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '  Text'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '  Text'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '  Text'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '  Text'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '  Text'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '  Text'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '  Text'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '  Text'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '  Text'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '  Text'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '  Text'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '  Text'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '  Text'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '  Text'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '  Text'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '  Text'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '  Text'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '  Text'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '  Text'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '  Text'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '  Text'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '  Text'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '  Text'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '  Text'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '  Text'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '  Text'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '  Text'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '  Text'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '  Text'",
-          "reason": "style change"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutText #text",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/linux/compositing/overflow/text-match-highlight-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/compositing/overflow/text-match-highlight-expected.txt
index e3d7ec9c..1731523 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/compositing/overflow/text-match-highlight-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/compositing/overflow/text-match-highlight-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -45,41 +47,75 @@
           "object": "LayoutText #text",
           "rect": [47, 80, 40, 19],
           "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Can you findme in this boring text?'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Findme in a typewriter!'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Findme on a path! Did you findme?'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'findme'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'findme'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'findme'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'findme'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'findme'",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutText #text",
+      "reason": "full"
+    },
+    {
+      "object": "InlineTextBox 'findme'",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "full"
+    },
+    {
+      "object": "InlineTextBox 'findme'",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "full"
+    },
+    {
+      "object": "InlineTextBox 'findme'",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "full"
+    },
+    {
+      "object": "InlineTextBox 'findme'",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "full"
+    },
+    {
+      "object": "InlineTextBox 'findme'",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "full"
+    },
+    {
+      "object": "InlineTextBox 'Can you findme in this boring text?'",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "full"
+    },
+    {
+      "object": "InlineTextBox 'Findme in a typewriter!'",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "full"
+    },
+    {
+      "object": "InlineTextBox 'Findme on a path! Did you findme?'",
+      "reason": "full"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/linux/compositing/overflow/textarea-scroll-touch-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/compositing/overflow/textarea-scroll-touch-expected.txt
index 7569bf1..12c9b30 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/compositing/overflow/textarea-scroll-touch-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/compositing/overflow/textarea-scroll-touch-expected.txt
@@ -1,13 +1,16 @@
   
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutTextControl TEXTAREA",
           "position": [18, 18],
           "bounds": [206, 126],
           "contentsOpaque": true,
@@ -16,24 +19,29 @@
           "backgroundColor": "#CCCCCC",
           "children": [
             {
+              "name": "Scrolling Layer",
               "position": [1, 1],
               "bounds": [189, 124],
               "shouldFlattenTransform": false,
               "children": [
                 {
+                  "name": "Scrolling Contents Layer",
                   "bounds": [189, 328],
                   "drawsContent": true
                 }
               ]
             },
             {
+              "name": "Overflow Controls Host Layer",
               "bounds": [206, 126],
               "children": [
                 {
+                  "name": "Vertical Scrollbar Layer",
                   "position": [190, 1],
                   "bounds": [15, 109]
                 },
                 {
+                  "name": "Scroll Corner Layer",
                   "position": [190, 110],
                   "bounds": [15, 15],
                   "drawsContent": true
@@ -43,6 +51,7 @@
           ]
         },
         {
+          "name": "LayoutTextControl TEXTAREA",
           "position": [248, 18],
           "bounds": [206, 126],
           "contentsOpaque": true,
@@ -51,24 +60,29 @@
           "backgroundColor": "#CCCCCC",
           "children": [
             {
+              "name": "Scrolling Layer",
               "position": [1, 1],
               "bounds": [189, 124],
               "shouldFlattenTransform": false,
               "children": [
                 {
+                  "name": "Scrolling Contents Layer",
                   "bounds": [189, 328],
                   "drawsContent": true
                 }
               ]
             },
             {
+              "name": "Overflow Controls Host Layer",
               "bounds": [206, 126],
               "children": [
                 {
+                  "name": "Vertical Scrollbar Layer",
                   "position": [190, 1],
                   "bounds": [15, 109]
                 },
                 {
+                  "name": "Scroll Corner Layer",
                   "position": [190, 110],
                   "bounds": [15, 15],
                   "drawsContent": true
diff --git a/third_party/WebKit/LayoutTests/platform/linux/compositing/repaint/fixed-pos-with-abs-pos-child-scroll-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/compositing/repaint/fixed-pos-with-abs-pos-child-scroll-expected.txt
index 68502d58..b2fdc94 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/compositing/repaint/fixed-pos-with-abs-pos-child-scroll-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/compositing/repaint/fixed-pos-with-abs-pos-child-scroll-expected.txt
@@ -1,8 +1,10 @@
 Hi!
 {
+  "name": "Content Root Layer",
   "bounds": [785, 4021],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [785, 4021],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -46,33 +48,51 @@
           "object": "LayoutText #text",
           "rect": [425, 480, 19, 19],
           "reason": "subtree"
-        },
-        {
-          "object": "InlineTextBox 'Hi!'",
-          "reason": "subtree"
-        },
-        {
-          "object": "InlineTextBox 'Hi!'",
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutBlockFlow (positioned) DIV id='fixed'",
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutBlockFlow (positioned) DIV id='fixed'",
-          "reason": "subtree"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "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/compositing/squashing/iframe-inside-squashed-layer-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/compositing/squashing/iframe-inside-squashed-layer-expected.txt
index c76bb07..cca4f22 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/compositing/squashing/iframe-inside-squashed-layer-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/compositing/squashing/iframe-inside-squashed-layer-expected.txt
@@ -1,15 +1,19 @@
 {
+  "name": "Content Root Layer",
   "bounds": [785, 1016],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [785, 1016],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "Squashing Containment Layer",
           "shouldFlattenTransform": false,
           "children": [
             {
+              "name": "LayoutBlockFlow DIV id='foo'",
               "position": [8, 8],
               "bounds": [200, 1000],
               "contentsOpaque": true,
@@ -17,6 +21,7 @@
               "backgroundColor": "#D3D3D3"
             },
             {
+              "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV)",
               "position": [8, 0],
               "bounds": [300, 654],
               "drawsContent": true,
@@ -55,34 +60,6 @@
                   "object": "LayoutView #document",
                   "rect": [285, 500, 15, 150],
                   "reason": "scroll"
-                },
-                {
-                  "object": "InlineTextBox 'test1'",
-                  "reason": "full"
-                },
-                {
-                  "object": "InlineTextBox 'test1'",
-                  "reason": "full"
-                },
-                {
-                  "object": "LayoutView #document",
-                  "reason": "scroll"
-                },
-                {
-                  "object": "RootInlineBox",
-                  "reason": "full"
-                },
-                {
-                  "object": "RootInlineBox",
-                  "reason": "full"
-                },
-                {
-                  "object": "RootInlineBox",
-                  "reason": "full"
-                },
-                {
-                  "object": "VerticalScrollbar",
-                  "reason": "scroll"
                 }
               ]
             }
diff --git a/third_party/WebKit/LayoutTests/platform/linux/compositing/squashing/remove-squashed-layer-plus-move-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/compositing/squashing/remove-squashed-layer-plus-move-expected.txt
index fde5cdd..3b66a39 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/compositing/squashing/remove-squashed-layer-plus-move-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/compositing/squashing/remove-squashed-layer-plus-move-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [1418, 1008],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [1418, 1008],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -25,41 +27,20 @@
           "object": "LayoutBlockFlow DIV id='container'",
           "rect": [8, 63, 769, 55],
           "reason": "incremental"
-        },
-        {
-          "object": "LayoutText #text",
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutText #text",
-          "reason": "bounds change"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ],
       "children": [
         {
+          "name": "Squashing Containment Layer",
           "shouldFlattenTransform": false,
           "children": [
             {
+              "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,
@@ -88,14 +69,6 @@
                   "object": "LayoutBlockFlow (relative positioned) DIV id='foo' class='mv-tile'",
                   "rect": [0, 0, 100, 50],
                   "reason": "layoutObject removal"
-                },
-                {
-                  "object": "InlineBox",
-                  "reason": "full"
-                },
-                {
-                  "object": "InlineBox",
-                  "reason": "full"
                 }
               ]
             }
@@ -103,6 +76,56 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (relative positioned) DIV id='foo' class='mv-tile'",
+      "reason": "layoutObject removal"
+    },
+    {
+      "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": "incremental"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='container'",
+      "reason": "invalidate paint rectangle"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutBlockFlow (relative positioned) DIV class='mv-tile'",
+      "reason": "compositing update"
+    },
+    {
+      "object": "LayoutBlockFlow (anonymous)",
+      "reason": "bounds change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow (relative positioned) DIV class='mv-tile'",
+      "reason": "compositing update"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/linux/compositing/squashing/selection-repaint-with-gaps-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/compositing/squashing/selection-repaint-with-gaps-expected.txt
index 028c384..37f80f2d 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/compositing/squashing/selection-repaint-with-gaps-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/compositing/squashing/selection-repaint-with-gaps-expected.txt
@@ -1,20 +1,25 @@
 lorem ipsumlorem ipsumlorem ipsum
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "Squashing Containment Layer",
           "shouldFlattenTransform": false,
           "children": [
             {
+              "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,
@@ -28,30 +33,6 @@
                   "object": "LayoutText #text",
                   "rect": [36, 80, 2, 39],
                   "reason": "incremental"
-                },
-                {
-                  "object": "InlineTextBox 'ipsum'",
-                  "reason": "incremental"
-                },
-                {
-                  "object": "InlineTextBox 'ipsum'",
-                  "reason": "selection"
-                },
-                {
-                  "object": "InlineTextBox 'lorem'",
-                  "reason": "incremental"
-                },
-                {
-                  "object": "InlineTextBox 'lorem'",
-                  "reason": "selection"
-                },
-                {
-                  "object": "LayoutBlockFlow (positioned) DIV id='item1' class='item'",
-                  "reason": "selection"
-                },
-                {
-                  "object": "LayoutBlockFlow DIV class='inline-block'",
-                  "reason": "selection"
                 }
               ]
             }
@@ -59,24 +40,63 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='item1' class='item'",
+      "reason": "selection"
+    },
+    {
+      "object": "LayoutBlockFlow DIV class='inline-block'",
+      "reason": "selection"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "selection"
+    },
+    {
+      "object": "InlineTextBox 'lorem'",
+      "reason": "selection"
+    },
+    {
+      "object": "InlineTextBox 'ipsum'",
+      "reason": "selection"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "incremental"
+    },
+    {
+      "object": "InlineTextBox 'lorem'",
+      "reason": "incremental"
+    },
+    {
+      "object": "InlineTextBox 'ipsum'",
+      "reason": "incremental"
+    }
   ]
 }
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "Squashing Containment Layer",
           "shouldFlattenTransform": false,
           "children": [
             {
+              "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,
@@ -100,54 +120,6 @@
                   "object": "LayoutText #text",
                   "rect": [36, 160, 2, 39],
                   "reason": "incremental"
-                },
-                {
-                  "object": "InlineTextBox 'ipsum'",
-                  "reason": "incremental"
-                },
-                {
-                  "object": "InlineTextBox 'ipsum'",
-                  "reason": "incremental"
-                },
-                {
-                  "object": "InlineTextBox 'ipsum'",
-                  "reason": "selection"
-                },
-                {
-                  "object": "InlineTextBox 'ipsum'",
-                  "reason": "selection"
-                },
-                {
-                  "object": "InlineTextBox 'lorem'",
-                  "reason": "incremental"
-                },
-                {
-                  "object": "InlineTextBox 'lorem'",
-                  "reason": "incremental"
-                },
-                {
-                  "object": "InlineTextBox 'lorem'",
-                  "reason": "selection"
-                },
-                {
-                  "object": "InlineTextBox 'lorem'",
-                  "reason": "selection"
-                },
-                {
-                  "object": "LayoutBlockFlow (positioned) DIV id='item1' class='item'",
-                  "reason": "selection"
-                },
-                {
-                  "object": "LayoutBlockFlow (positioned) DIV id='item2' class='item'",
-                  "reason": "selection"
-                },
-                {
-                  "object": "LayoutBlockFlow DIV class='inline-block'",
-                  "reason": "selection"
-                },
-                {
-                  "object": "LayoutBlockFlow DIV class='inline-block'",
-                  "reason": "selection"
                 }
               ]
             }
@@ -155,6 +127,72 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='item1' class='item'",
+      "reason": "selection"
+    },
+    {
+      "object": "LayoutBlockFlow DIV class='inline-block'",
+      "reason": "selection"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "selection"
+    },
+    {
+      "object": "InlineTextBox 'lorem'",
+      "reason": "selection"
+    },
+    {
+      "object": "InlineTextBox 'ipsum'",
+      "reason": "selection"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "incremental"
+    },
+    {
+      "object": "InlineTextBox 'lorem'",
+      "reason": "incremental"
+    },
+    {
+      "object": "InlineTextBox 'ipsum'",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='item2' class='item'",
+      "reason": "selection"
+    },
+    {
+      "object": "LayoutBlockFlow DIV class='inline-block'",
+      "reason": "selection"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "selection"
+    },
+    {
+      "object": "InlineTextBox 'lorem'",
+      "reason": "selection"
+    },
+    {
+      "object": "InlineTextBox 'ipsum'",
+      "reason": "selection"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "incremental"
+    },
+    {
+      "object": "InlineTextBox 'lorem'",
+      "reason": "incremental"
+    },
+    {
+      "object": "InlineTextBox 'ipsum'",
+      "reason": "incremental"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/linux/compositing/video/video-poster-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/compositing/video/video-poster-expected.txt
index 1f9f7e7b..3a5f2e65 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/compositing/video/video-poster-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/compositing/video/video-poster-expected.txt
@@ -3,9 +3,11 @@
 
 Case: No src, no poster
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true
@@ -16,10 +18,12 @@
 
 Case: Displaying poster
 {
-  "bounds": [785, 605],
+  "name": "Content Root Layer",
+  "bounds": [785, 637],
   "children": [
     {
-      "bounds": [785, 605],
+      "name": "LayoutView #document",
+      "bounds": [785, 637],
       "contentsOpaque": true,
       "drawsContent": true
     }
@@ -29,26 +33,32 @@
 
 Case: Displaying movie
 {
-  "bounds": [785, 813],
+  "name": "Content Root Layer",
+  "bounds": [785, 877],
   "children": [
     {
-      "bounds": [785, 813],
+      "name": "LayoutView #document",
+      "bounds": [785, 877],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutVideo VIDEO",
           "position": [8, 8],
           "bounds": [352, 288]
         },
         {
+          "name": "Squashing Containment Layer",
           "shouldFlattenTransform": false,
           "children": [
             {
+              "name": "LayoutFlexibleBox (relative positioned) DIV",
               "position": [8, 8],
               "bounds": [352, 288],
               "drawsContent": true
             },
             {
+              "name": "Squashing Layer (first squashed layer: LayoutFlexibleBox (relative positioned) DIV)",
               "position": [8, 8],
               "bounds": [352, 246],
               "drawsContent": true
diff --git a/third_party/WebKit/LayoutTests/platform/linux/compositing/visibility/visibility-image-layers-dynamic-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/compositing/visibility/visibility-image-layers-dynamic-expected.txt
index a8d3643..a59285a3 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/compositing/visibility/visibility-image-layers-dynamic-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/compositing/visibility/visibility-image-layers-dynamic-expected.txt
@@ -4,23 +4,28 @@
 Initial
 
 {
+  "name": "Content Root Layer",
   "bounds": [785, 626],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [785, 626],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow DIV class='composited container'",
           "position": [18, 10],
           "bounds": [749, 145]
         },
         {
+          "name": "LayoutBlockFlow DIV class='composited hidden container'",
           "position": [14, 316],
           "bounds": [757, 153],
           "contentsVisible": false,
           "children": [
             {
+              "name": "LayoutImage IMG class='visible composited box'",
               "position": [24, 24],
               "bounds": [100, 100]
             }
@@ -33,29 +38,35 @@
 After step 1
 
 {
-  "bounds": [785, 1078],
+  "name": "Content Root Layer",
+  "bounds": [785, 1158],
   "children": [
     {
-      "bounds": [785, 1078],
+      "name": "LayoutView #document",
+      "bounds": [785, 1158],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow DIV class='composited container'",
           "position": [18, 10],
           "bounds": [749, 145],
           "children": [
             {
+              "name": "LayoutImage IMG class='hidden composited box'",
               "position": [20, 20],
               "bounds": [100, 100]
             }
           ]
         },
         {
+          "name": "LayoutBlockFlow DIV class='composited hidden container'",
           "position": [14, 316],
           "bounds": [757, 153],
           "contentsVisible": false,
           "children": [
             {
+              "name": "LayoutImage IMG class='visible composited box'",
               "position": [24, 24],
               "bounds": [100, 100]
             }
@@ -68,40 +79,48 @@
 After step 2
 
 {
-  "bounds": [785, 1625],
+  "name": "Content Root Layer",
+  "bounds": [785, 1801],
   "children": [
     {
-      "bounds": [785, 1625],
+      "name": "LayoutView #document",
+      "bounds": [785, 1801],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow DIV class='composited container'",
           "position": [18, 10],
           "bounds": [749, 145],
           "children": [
             {
+              "name": "LayoutImage IMG class='hidden composited box'",
               "position": [20, 20],
               "bounds": [100, 100]
             }
           ]
         },
         {
+          "name": "LayoutBlockFlow DIV class='composited hidden container'",
           "position": [14, 161],
           "bounds": [757, 153],
           "drawsContent": true,
           "children": [
             {
+              "name": "LayoutImage IMG class='composited box'",
               "position": [24, 24],
               "bounds": [100, 100]
             }
           ]
         },
         {
+          "name": "LayoutBlockFlow DIV class='composited hidden container'",
           "position": [14, 316],
           "bounds": [757, 153],
           "contentsVisible": false,
           "children": [
             {
+              "name": "LayoutImage IMG class='visible composited box'",
               "position": [24, 24],
               "bounds": [100, 100]
             }
diff --git a/third_party/WebKit/LayoutTests/platform/linux/css3/filters/composited-during-transition-layertree-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/css3/filters/composited-during-transition-layertree-expected.txt
index 3f6ee76..a4779af 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/css3/filters/composited-during-transition-layertree-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/css3/filters/composited-during-transition-layertree-expected.txt
@@ -3,29 +3,35 @@
    
   
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutImage IMG id='grayscale-box'",
           "position": [18, 18],
           "bounds": [160, 90],
           "drawsContent": true
         },
         {
+          "name": "LayoutImage IMG id='saturate-box'",
           "position": [18, 133],
           "bounds": [160, 90],
           "drawsContent": true
         },
         {
+          "name": "LayoutImage IMG id='invert-box'",
           "position": [18, 248],
           "bounds": [160, 90],
           "drawsContent": true
         },
         {
+          "name": "LayoutImage IMG id='brightness-box'",
           "position": [18, 363],
           "bounds": [160, 90],
           "drawsContent": true
diff --git a/third_party/WebKit/LayoutTests/platform/linux/css3/flexbox/repaint-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/css3/flexbox/repaint-expected.txt
index 8e4f5cd..017eebdd 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/css3/flexbox/repaint-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/css3/flexbox/repaint-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -65,161 +67,91 @@
           "object": "LayoutBlockFlow DIV id='left'",
           "rect": [138, 128, 10, 100],
           "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'Aliquam ut turpis nisl, in vulputate sapien. Cum sociis natoque'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean laoreet dolor id urna eleifend aliquet. Nulla'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean laoreet dolor id urna eleifend aliquet. Nulla'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean laoreet dolor id urna eleifend aliquet. Nulla'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Pellentesque erat lectus, ultricies a lobortis id, faucibus id quam.'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Pellentesque erat lectus, ultricies a lobortis id, faucibus id quam.'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'Sed congue magna vitae dolor feugiat vehicula. Sed volutpat,'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'condimentum leo neque sed nulla. Nunc quis porta elit.'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'elit. Pellentesque erat lectus, ultricies a lobortis id, faucibus id quam.'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'elit. Pellentesque erat lectus, ultricies a lobortis id, faucibus id quam.'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'laoreet dolor id urna eleifend aliquet. Nulla vel dolor ipsum.'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'parturient montes, nascetur ridiculus mus. Sed congue magna vitae dolor feugiat vehicula. Sed volutpat, tellus'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'parturient montes, nascetur ridiculus mus. Sed congue magna vitae dolor feugiat vehicula. Sed volutpat,'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'parturient montes, nascetur ridiculus mus. Sed congue magna vitae dolor feugiat vehicula. Sed volutpat,'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'penatibus et magnis dis parturient montes, nascetur ridiculus mus.'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'tellus vel varius vestibulum, purus quam mollis sapien, in condimentum leo neque sed nulla. Nunc quis porta'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'tellus vel varius vestibulum, purus quam mollis sapien, in condimentum leo neque sed nulla. Nunc quis porta'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'tellus vel varius vestibulum, purus quam mollis sapien, in'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'vel dolor ipsum. Aliquam ut turpis nisl, in vulputate sapien. Cum sociis natoque penatibus et magnis dis'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'vel dolor ipsum. Aliquam ut turpis nisl, in vulputate sapien. Cum sociis natoque penatibus et magnis dis'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'vel dolor ipsum. Aliquam ut turpis nisl, in vulputate sapien. Cum sociis natoque penatibus et magnis dis'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'vel varius vestibulum, purus quam mollis sapien, in condimentum leo neque sed nulla. Nunc quis porta elit.'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV id='left'",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='content'",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutBlockFlow P",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean laoreet dolor id urna eleifend aliquet. Nulla'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox 'vel dolor ipsum. Aliquam ut turpis nisl, in vulputate sapien. Cum sociis natoque penatibus et magnis dis'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox 'parturient montes, nascetur ridiculus mus. Sed congue magna vitae dolor feugiat vehicula. Sed volutpat,'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox 'tellus vel varius vestibulum, purus quam mollis sapien, in condimentum leo neque sed nulla. Nunc quis porta'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox 'elit. Pellentesque erat lectus, ultricies a lobortis id, faucibus id quam.'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='left'",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='content'",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutBlockFlow P",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean laoreet dolor id urna eleifend aliquet. Nulla'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox 'vel dolor ipsum. Aliquam ut turpis nisl, in vulputate sapien. Cum sociis natoque penatibus et magnis dis'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox 'parturient montes, nascetur ridiculus mus. Sed congue magna vitae dolor feugiat vehicula. Sed volutpat, tellus'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox 'vel varius vestibulum, purus quam mollis sapien, in condimentum leo neque sed nulla. Nunc quis porta elit.'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox 'Pellentesque erat lectus, ultricies a lobortis id, faucibus id quam.'",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/linux/editing/selection/repaint-rect-for-vertical-writing-mode-with-positioned-root-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/editing/selection/repaint-rect-for-vertical-writing-mode-with-positioned-root-expected.txt
index 68fbd26..6be6d261 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/editing/selection/repaint-rect-for-vertical-writing-mode-with-positioned-root-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/editing/selection/repaint-rect-for-vertical-writing-mode-with-positioned-root-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -10,21 +12,27 @@
           "object": "LayoutText #text",
           "rect": [184, 201, 19, 160],
           "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox 'Some text in vertical mode'",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutBlockFlow (positioned) DIV id='test'",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "reason": "selection"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='test'",
+      "reason": "selection"
+    },
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "selection"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "selection"
+    },
+    {
+      "object": "InlineTextBox 'Some text in vertical mode'",
+      "reason": "selection"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/canvas/canvas-composite-repaint-by-all-imagesource-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/fast/canvas/canvas-composite-repaint-by-all-imagesource-expected.txt
index a40c6d91..85d217c 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/canvas/canvas-composite-repaint-by-all-imagesource-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/canvas/canvas-composite-repaint-by-all-imagesource-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [785, 933],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [785, 933],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -230,18 +232,22 @@
       ],
       "children": [
         {
+          "name": "LayoutVideo VIDEO id='video'",
           "position": [15, 859],
           "bounds": [150, 60]
         },
         {
+          "name": "Squashing Containment Layer",
           "shouldFlattenTransform": false,
           "children": [
             {
+              "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
@@ -250,6 +256,184 @@
         }
       ]
     }
+  ],
+  "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/fast/layers/scroll-descendant-with-cached-cliprects-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/fast/layers/scroll-descendant-with-cached-cliprects-expected.txt
index f24e213..8119ab6 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/layers/scroll-descendant-with-cached-cliprects-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/layers/scroll-descendant-with-cached-cliprects-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [785, 1895],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [785, 1895],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -45,25 +47,43 @@
           "object": "LayoutBlockFlow DIV",
           "rect": [677, 52, 100, 100],
           "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"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "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/fast/repaint/4776765-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/4776765-expected.txt
index c8f3efe7..489781f 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/4776765-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/4776765-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -25,21 +27,39 @@
           "object": "LayoutBlockFlow DIV id='div'",
           "rect": [7, 63, 3, 21],
           "reason": "invalidate paint rectangle"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "LayoutBR BR",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "outline"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='div'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutBR BR",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='div'",
+      "reason": "invalidate paint rectangle"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='div'",
+      "reason": "invalidate paint rectangle"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/abspos-shift-image-incorrect-repaint-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/abspos-shift-image-incorrect-repaint-expected.txt
index 4f1e547..4b45033 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/abspos-shift-image-incorrect-repaint-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/abspos-shift-image-incorrect-repaint-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [1250, 585],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [1250, 585],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -75,37 +77,71 @@
           "object": "LayoutText #text",
           "rect": [450, 217, 4, 19],
           "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutText #text",
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutText #text",
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutText #text",
-          "reason": "bounds change"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutView #document",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutBlockFlow HTML",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='shiftMe'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow (relative positioned) DIV class='imageWrapper'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutImage IMG",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow (relative positioned) DIV class='imageWrapper'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutImage IMG",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/backgroundSizeRepaint-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/backgroundSizeRepaint-expected.txt
index 6d297225..8df8360 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/backgroundSizeRepaint-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/backgroundSizeRepaint-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -28,6 +30,24 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "border box change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='a'",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "border box change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='b'",
+      "reason": "incremental"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/block-layout-inline-children-float-positioned-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/block-layout-inline-children-float-positioned-expected.txt
index e68a2d3..18537cc 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/block-layout-inline-children-float-positioned-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/block-layout-inline-children-float-positioned-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -25,25 +27,43 @@
           "object": "LayoutBlockFlow (floating) SPAN",
           "rect": [324, 37, 277, 20],
           "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'the quick brown fox jumped over the lazy dog'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'the quick brown fox jumped over the lazy dog'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (floating) SPAN",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'the quick brown fox jumped over the lazy dog'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutBlockFlow (positioned) SPAN",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'the quick brown fox jumped over the lazy dog'",
+      "reason": "layoutObject insertion"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/block-no-inflow-children-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/block-no-inflow-children-expected.txt
index fa411ca1..6765147 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/block-no-inflow-children-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/block-no-inflow-children-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -15,25 +17,27 @@
           "object": "LayoutText #text",
           "rect": [0, 0, 58, 19],
           "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ''",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'La la la la'",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV id='target'",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "full"
+    },
+    {
+      "object": "InlineTextBox 'La la la la'",
+      "reason": "full"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/body-background-image-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/body-background-image-expected.txt
index 5809219..35f03f2 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/body-background-image-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/body-background-image-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -19,6 +21,16 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutView #document",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutBlockFlow BODY",
+      "reason": "style change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/border-radius-repaint-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/border-radius-repaint-expected.txt
index c2c5f26..9205def 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/border-radius-repaint-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/border-radius-repaint-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -38,6 +40,24 @@
         }
       ]
     }
+  ],
+  "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/linux/fast/repaint/border-repaint-glitch-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/border-repaint-glitch-expected.txt
index d596a81..adab21a 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/border-repaint-glitch-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/border-repaint-glitch-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -38,6 +40,24 @@
         }
       ]
     }
+  ],
+  "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/linux/fast/repaint/box-inline-resize-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/box-inline-resize-expected.txt
index 28988ec..0e08207 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/box-inline-resize-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/box-inline-resize-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -35,33 +37,39 @@
           "object": "LayoutImage IMG id='foo'",
           "rect": [8, 88, 32, 32],
           "reason": "forced by layout"
-        },
-        {
-          "object": "InlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Chromium'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (anonymous)",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutImage IMG id='foo'",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutBlockFlow H2",
+      "reason": "bounds change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox 'Chromium'",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/box-shadow-dynamic-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/box-shadow-dynamic-expected.txt
index 054275f..319a2f92 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/box-shadow-dynamic-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/box-shadow-dynamic-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -28,6 +30,24 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "border box change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='a'",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "border box change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='b'",
+      "reason": "incremental"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/bugzilla-3509-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/bugzilla-3509-expected.txt
index 8c99902..b97be49 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/bugzilla-3509-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/bugzilla-3509-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -10,21 +12,19 @@
           "object": "LayoutBlockFlow DIV id='im'",
           "rect": [11, 131, 100, 100],
           "reason": "forced by layout"
-        },
-        {
-          "object": "InlineTextBox '\u00A0'",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV id='im'",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "forced by layout"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/bugzilla-5699-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/bugzilla-5699-expected.txt
index 94a9e35..c27dbfb 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/bugzilla-5699-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/bugzilla-5699-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -40,53 +42,63 @@
           "object": "LayoutText #text",
           "rect": [8, 136, 4, 19],
           "reason": "style change"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox ''",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Hello'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox '\u00A0'",
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutBR BR",
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutBR BR",
-          "reason": "bounds change"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow P",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutBlockFlow P",
+      "reason": "invalidate paint rectangle"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "incremental"
+    },
+    {
+      "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": "bounds change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox 'Hello'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBR BR",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/bugzilla-6278-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/bugzilla-6278-expected.txt
index 0aad6093..1e6fcde 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/bugzilla-6278-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/bugzilla-6278-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -50,113 +52,71 @@
           "object": "LayoutText #text",
           "rect": [250, 138, 49, 159],
           "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'Curabitur pretium, quam quis semper'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'Curabitur pretium, quam quis semper'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'fringilla orci nibh sed neque. Quisque eu'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'laoreet non, suscipit sed, sapien. Phasellus'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'malesuada, est libero feugiat libero, vel fringilla'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'malesuada, est libero feugiat libero, vel'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'molestie accumsan. Etiam tellus urna, laoreet ac,'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'molestie nisl, nec ullamcorper lacus ante'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'molestie nisl, nec ullamcorper lacus ante'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'nulla non nisi molestie accumsan. Etiam'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'orci nibh sed neque. Quisque eu nulla non nisi'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'sem at posuere vehicula, augue nibh'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'suscipit sed, sapien. Phasellus vehicula,'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'tellus urna, laoreet ac, laoreet non,'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'vehicula, sem at posuere vehicula, augue nibh'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'vulputate pede.'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'vulputate pede.'",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutTableCell TD id='col1'",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "incremental"
+    },
+    {
+      "object": "InlineTextBox 'Curabitur pretium, quam quis semper'",
+      "reason": "incremental"
+    },
+    {
+      "object": "InlineTextBox 'malesuada, est libero feugiat libero, vel'",
+      "reason": "incremental"
+    },
+    {
+      "object": "InlineTextBox 'fringilla orci nibh sed neque. Quisque eu'",
+      "reason": "incremental"
+    },
+    {
+      "object": "InlineTextBox 'nulla non nisi molestie accumsan. Etiam'",
+      "reason": "incremental"
+    },
+    {
+      "object": "InlineTextBox 'tellus urna, laoreet ac, laoreet non,'",
+      "reason": "incremental"
+    },
+    {
+      "object": "InlineTextBox 'suscipit sed, sapien. Phasellus vehicula,'",
+      "reason": "incremental"
+    },
+    {
+      "object": "InlineTextBox 'sem at posuere vehicula, augue nibh'",
+      "reason": "incremental"
+    },
+    {
+      "object": "InlineTextBox 'molestie nisl, nec ullamcorper lacus ante'",
+      "reason": "incremental"
+    },
+    {
+      "object": "InlineTextBox 'vulputate pede.'",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutTableCell TD id='target'",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/bugzilla-6388-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/bugzilla-6388-expected.txt
index 6f90210..23b88d1 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/bugzilla-6388-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/bugzilla-6388-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -18,6 +20,16 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (positioned) DIV",
+      "reason": "location change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/bugzilla-6473-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/bugzilla-6473-expected.txt
index a48589e7..4fd42903 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/bugzilla-6473-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/bugzilla-6473-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -30,17 +32,31 @@
           "object": "LayoutText #text",
           "rect": [8, 136, 69, 19],
           "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'SUCCESS'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV id='allcontent'",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutBlockFlow (relative positioned) P",
+      "reason": "bounds change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox 'SUCCESS'",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/bugzilla-7235-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/bugzilla-7235-expected.txt
index 26ff3318..9f97b22 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/bugzilla-7235-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/bugzilla-7235-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -15,25 +17,19 @@
           "object": "LayoutBlockFlow (positioned) DIV id='t'",
           "rect": [8, 176, 100, 100],
           "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox '\u00A0'",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (anonymous)",
+      "reason": "invalidate paint rectangle"
+    },
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='t'",
+      "reason": "layoutObject insertion"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/caret-invalidation-in-overflow-scroll-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/caret-invalidation-in-overflow-scroll-expected.txt
index 35dd86b2..ba48c54 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/caret-invalidation-in-overflow-scroll-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/caret-invalidation-in-overflow-scroll-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -18,6 +20,16 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV id='inner-editor'",
+      "reason": "invalidate paint rectangle"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='inner-editor'",
+      "reason": "invalidate paint rectangle"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/caret-outside-block-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/caret-outside-block-expected.txt
index 33022f3..9d61cb4 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/caret-outside-block-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/caret-outside-block-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -13,6 +15,12 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV id='target'",
+      "reason": "invalidate paint rectangle"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/caret-with-transformation-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/caret-with-transformation-expected.txt
index e9ab1f12..536e054 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/caret-with-transformation-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/caret-with-transformation-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -18,6 +20,16 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV id='div'",
+      "reason": "invalidate paint rectangle"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='div'",
+      "reason": "invalidate paint rectangle"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/change-text-content-and-background-color-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/change-text-content-and-background-color-expected.txt
index ab8898e..9072fc1 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/change-text-content-and-background-color-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/change-text-content-and-background-color-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -20,21 +22,27 @@
           "object": "LayoutText #text",
           "rect": [30, 30, 45, 23],
           "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ''",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'NEW'",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutTextControl (positioned) INPUT id='input'",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='inner-editor'",
+      "reason": "invalidate paint rectangle"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "full"
+    },
+    {
+      "object": "InlineTextBox 'NEW'",
+      "reason": "full"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/clip-with-layout-delta-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/clip-with-layout-delta-expected.txt
index a0dffca..05662c4 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/clip-with-layout-delta-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/clip-with-layout-delta-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -35,41 +37,51 @@
           "object": "LayoutText #text",
           "rect": [8, 8, 4, 19],
           "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox '\u00A0'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox '\u00A0'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox '\u00A0'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox '\u00A0'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "background obscuration change"
+    },
+    {
+      "object": "LayoutBlockFlow SPAN id='t1'",
+      "reason": "style change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox '\u00A0'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow (relative positioned) DIV",
+      "reason": "background obscuration change"
+    },
+    {
+      "object": "LayoutBlockFlow SPAN id='t2' class='blue'",
+      "reason": "style change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox '\u00A0'",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/clipped-relative-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/clipped-relative-expected.txt
index 6f122bdf..a9b9b0a 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/clipped-relative-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/clipped-relative-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -15,25 +17,27 @@
           "object": "LayoutImage IMG",
           "rect": [8, 74, 204, 232],
           "reason": "location change"
-        },
-        {
-          "object": "InlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "LayoutText #text",
-          "reason": "none"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='inner'",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutImage IMG",
+      "reason": "location change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "none"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/containing-block-position-change-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/containing-block-position-change-expected.txt
index d96662eb..f8a78a6 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/containing-block-position-change-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/containing-block-position-change-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -15,13 +17,23 @@
           "object": "LayoutBlockFlow (positioned) DIV",
           "rect": [100, 74, 50, 50],
           "reason": "subtree"
-        },
-        {
-          "object": "LayoutBlockFlow (relative positioned) DIV id='t'",
-          "reason": "style change"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (positioned) DIV",
+      "reason": "subtree"
+    },
+    {
+      "object": "LayoutBlockFlow (relative positioned) DIV id='t'",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutBlockFlow (positioned) DIV",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/control-clip-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/control-clip-expected.txt
index 6538ae56..b4881eb 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/control-clip-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/control-clip-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -25,33 +27,35 @@
           "object": "LayoutText (anonymous)",
           "rect": [9, 87, 63, 16],
           "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ''",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ''",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'SUCCESS'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'SUCCESS'",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (anonymous)",
+      "reason": "invalidate paint rectangle"
+    },
+    {
+      "object": "LayoutText (anonymous)",
+      "reason": "full"
+    },
+    {
+      "object": "InlineTextBox 'SUCCESS'",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutBlockFlow (anonymous)",
+      "reason": "invalidate paint rectangle"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "full"
+    },
+    {
+      "object": "InlineTextBox 'SUCCESS'",
+      "reason": "full"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/crbug-371640-2-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/crbug-371640-2-expected.txt
index 55d881c..63aea29c 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/crbug-371640-2-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/crbug-371640-2-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -20,37 +22,47 @@
           "object": "LayoutBlockFlow DIV id='keep' class='item'",
           "rect": [88, 88, 100, 100],
           "reason": "bounds change"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV id='container'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV id='keep_outer' class='outer'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV id='node' class='outer'",
-          "reason": "layoutObject removal"
-        },
-        {
-          "object": "LayoutBlockFlow (positioned) DIV class='abs_pos'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutBlockFlow (relative positioned) (floating) DIV id='keep_inner' class='inner'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutBlockFlow (relative positioned) (floating) DIV id='to_remove_inner' class='inner'",
-          "reason": "layoutObject removal"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "reason": "bounds change"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV id='to_remove' class='item'",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutBlockFlow (relative positioned) (floating) DIV id='to_remove_inner' class='inner'",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutBlockFlow (floating) DIV id='node' class='outer'",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutBlockFlow (floating) DIV id='container'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow (floating) DIV id='keep_outer' class='outer'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow (relative positioned) (floating) DIV id='keep_inner' class='inner'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow (positioned) DIV class='abs_pos'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='keep' class='item'",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/crbug-371640-3-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/crbug-371640-3-expected.txt
index 323e40f..4a3ae423 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/crbug-371640-3-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/crbug-371640-3-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -20,29 +22,39 @@
           "object": "LayoutBlockFlow DIV id='keep_child'",
           "rect": [408, 208, 100, 100],
           "reason": "bounds change"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV id='container'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV id='keep_outer' class='outer'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV id='remove' class='outer'",
-          "reason": "layoutObject removal"
-        },
-        {
-          "object": "LayoutBlockFlow (positioned) DIV id='abs_pos'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutBlockFlow (relative positioned) DIV id='keep_inner'",
-          "reason": "bounds change"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='remove_child'",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutBlockFlow (floating) DIV id='remove' class='outer'",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutBlockFlow (floating) DIV id='container'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow (floating) DIV id='keep_outer' class='outer'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow (relative positioned) DIV id='keep_inner'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='abs_pos'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='keep_child'",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/crbug-371640-4-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/crbug-371640-4-expected.txt
index ea37edd..45be6aff7 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/crbug-371640-4-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/crbug-371640-4-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -35,45 +37,55 @@
           "object": "LayoutText #text",
           "rect": [208, 88, 4, 19],
           "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox '\u00A0'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox '\u00A0'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutBlockFlow (positioned) DIV class='abs_pos'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutBlockFlow (relative positioned) (floating) DIV id='keep_inner' class='inner'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutBlockFlow (relative positioned) (floating) DIV id='keep_outer' class='outer'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutBlockFlow (relative positioned) (floating) DIV id='node' class='outer'",
-          "reason": "layoutObject removal"
-        },
-        {
-          "object": "LayoutBlockFlow (relative positioned) (floating) DIV id='to_remove_inner' class='inner'",
-          "reason": "layoutObject removal"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutText #text",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='to_remove' class='item'",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutBlockFlow (relative positioned) (floating) DIV id='to_remove_inner' class='inner'",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutBlockFlow (relative positioned) (floating) DIV id='node' class='outer'",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutBlockFlow (relative positioned) (floating) DIV id='keep_outer' class='outer'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow (positioned) DIV class='abs_pos'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow (relative positioned) (floating) DIV id='keep_inner' class='inner'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='keep' class='item'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox '\u00A0'",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/crbug-371640-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/crbug-371640-expected.txt
index fc3e28e..c24e41b 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/crbug-371640-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/crbug-371640-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -35,49 +37,59 @@
           "object": "LayoutText #text",
           "rect": [88, 88, 4, 19],
           "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox '\u00A0'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox '\u00A0'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV id='container'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV id='keep_outer' class='outer'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV id='node' class='outer'",
-          "reason": "layoutObject removal"
-        },
-        {
-          "object": "LayoutBlockFlow (positioned) DIV class='abs_pos'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutBlockFlow (relative positioned) (floating) DIV id='keep_inner' class='inner'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutBlockFlow (relative positioned) (floating) DIV id='to_remove_inner' class='inner'",
-          "reason": "layoutObject removal"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutText #text",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='to_remove' class='item'",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutBlockFlow (relative positioned) (floating) DIV id='to_remove_inner' class='inner'",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutBlockFlow (floating) DIV id='node' class='outer'",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutBlockFlow (floating) DIV id='container'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow (floating) DIV id='keep_outer' class='outer'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow (relative positioned) (floating) DIV id='keep_inner' class='inner'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow (positioned) DIV class='abs_pos'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='keep' class='item'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox '\u00A0'",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/create-layer-repaint-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/create-layer-repaint-expected.txt
index d98cdbc..922f6d51 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/create-layer-repaint-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/create-layer-repaint-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -13,6 +15,12 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV id='test' class='stretchy'",
+      "reason": "subtree"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/delete-into-nested-block-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/delete-into-nested-block-expected.txt
index 7557c992..0e4eb2b 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/delete-into-nested-block-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/delete-into-nested-block-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -55,93 +57,75 @@
           "object": "LayoutBlockFlow DIV id='one'",
           "rect": [7, 126, 3, 22],
           "reason": "invalidate paint rectangle"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'one'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'three'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'three'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'three'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'three'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'two'",
-          "reason": "full"
-        },
-        {
-          "object": "LayoutBR BR",
-          "reason": "layoutObject removal"
-        },
-        {
-          "object": "LayoutBR BR",
-          "reason": "layoutObject removal"
-        },
-        {
-          "object": "LayoutInline SPAN",
-          "reason": "layoutObject removal"
-        },
-        {
-          "object": "LayoutText #text",
-          "reason": "layoutObject removal"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutText #text",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutBR BR",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='two'",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutBR BR",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutInline SPAN",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "outline"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='one'",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'three'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='one'",
+      "reason": "invalidate paint rectangle"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/details-open-repaint-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/details-open-repaint-expected.txt
index ce3e26b..029b30d 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/details-open-repaint-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/details-open-repaint-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -25,33 +27,55 @@
           "object": "LayoutDetailsMarker DIV id='details-marker'",
           "rect": [8, 56, 11, 11],
           "reason": "full"
-        },
-        {
-          "object": "HorizontalScrollbar",
-          "reason": "scroll"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='inner-editor'",
-          "reason": "scroll"
-        },
-        {
-          "object": "LayoutText #text",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "LayoutText #text",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "VerticalScrollbar",
-          "reason": "scroll"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutDetailsMarker DIV id='details-marker'",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='details-content'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutTextControl INPUT",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='inner-editor'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='inner-editor'",
+      "reason": "scroll"
+    },
+    {
+      "object": "HorizontalScrollbar",
+      "reason": "scroll"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='inner-editor'",
+      "reason": "scroll"
+    },
+    {
+      "object": "VerticalScrollbar",
+      "reason": "scroll"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "layoutObject insertion"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/dynamic-table-vertical-alignment-change-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/dynamic-table-vertical-alignment-change-expected.txt
index 44ec40b..95af45f 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/dynamic-table-vertical-alignment-change-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/dynamic-table-vertical-alignment-change-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [808, 585],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [808, 585],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -30,21 +32,35 @@
           "object": "LayoutTableCell TD",
           "rect": [14, 74, 2, 3],
           "reason": "bounds change"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "reason": "bounds change"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutTableCell TD",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutBlockFlow (floating) DIV id='target'",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutTableCell TD",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/fixed-element-repaint-after-compositing-update-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/fixed-element-repaint-after-compositing-update-expected.txt
index 12f01ee2..a9fd358 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/fixed-element-repaint-after-compositing-update-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/fixed-element-repaint-after-compositing-update-expected.txt
@@ -1,19 +1,24 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow (positioned) DIV id='fixedTransformed'",
           "position": [8, 88]
         },
         {
+          "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,
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/fixed-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/fixed-expected.txt
index 85cf01f..62b50d6 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/fixed-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/fixed-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [785, 2016],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [785, 2016],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -13,6 +15,12 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='t'",
+      "reason": "style change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/float-move-during-layout-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/float-move-during-layout-expected.txt
index d6c49a3..9dacd18 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/float-move-during-layout-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/float-move-during-layout-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -20,13 +22,23 @@
           "object": "LayoutBlockFlow (floating) DIV",
           "rect": [8, 110, 100, 100],
           "reason": "forced by layout"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='s'",
-          "reason": "bounds change"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV id='t'",
+      "reason": "became visible"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='s'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow (floating) DIV",
+      "reason": "forced by layout"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/float-overflow-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/float-overflow-expected.txt
index baa8cfc..4149508 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/float-overflow-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/float-overflow-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -775,305 +777,615 @@
           "object": "LayoutText #text",
           "rect": [57, 56, 16, 16],
           "reason": "bounds change"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'x'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'x'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'x'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'x'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'x'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'x'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'x'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'x'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'x'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'x'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'x'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'x'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'x'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'x'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='spacer1' class='spacer'",
-          "reason": "became visible"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='spacer10' class='spacer'",
-          "reason": "became visible"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='spacer11' class='spacer'",
-          "reason": "became visible"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='spacer12' class='spacer'",
-          "reason": "became visible"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='spacer13' class='spacer'",
-          "reason": "became visible"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='spacer14' class='spacer'",
-          "reason": "became visible"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='spacer2' class='spacer'",
-          "reason": "became visible"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='spacer3' class='spacer'",
-          "reason": "became visible"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='spacer4' class='spacer'",
-          "reason": "became visible"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='spacer5' class='spacer'",
-          "reason": "became visible"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='spacer6' class='spacer'",
-          "reason": "became visible"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='spacer7' class='spacer'",
-          "reason": "became visible"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='spacer8' class='spacer'",
-          "reason": "became visible"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='spacer9' class='spacer'",
-          "reason": "became visible"
-        },
-        {
-          "object": "LayoutText #text",
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutText #text",
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutText #text",
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutText #text",
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutText #text",
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutText #text",
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutText #text",
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutText #text",
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutText #text",
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutText #text",
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutText #text",
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutText #text",
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutText #text",
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutText #text",
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutText #text",
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutText #text",
-          "reason": "bounds change"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV id='spacer1' class='spacer'",
+      "reason": "became visible"
+    },
+    {
+      "object": "LayoutBlockFlow DIV class='outer'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow (floating) DIV",
+      "reason": "bounds change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutInline SPAN",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox 'x'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='spacer2' class='spacer'",
+      "reason": "became visible"
+    },
+    {
+      "object": "LayoutBlockFlow DIV class='outer'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow (floating) DIV",
+      "reason": "bounds change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutInline SPAN",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox 'x'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='spacer3' class='spacer'",
+      "reason": "became visible"
+    },
+    {
+      "object": "LayoutBlockFlow DIV class='outer'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow (floating) DIV",
+      "reason": "bounds change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutInline SPAN",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox 'x'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='spacer4' class='spacer'",
+      "reason": "became visible"
+    },
+    {
+      "object": "LayoutBlockFlow DIV class='outer'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow (floating) DIV",
+      "reason": "bounds change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutInline SPAN",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox 'x'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='spacer5' class='spacer'",
+      "reason": "became visible"
+    },
+    {
+      "object": "LayoutBlockFlow DIV class='outer'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow (floating) DIV",
+      "reason": "bounds change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutInline SPAN",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox 'x'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='spacer6' class='spacer'",
+      "reason": "became visible"
+    },
+    {
+      "object": "LayoutDeprecatedFlexibleBox DIV class='outer box'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow (floating) DIV",
+      "reason": "bounds change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutInline SPAN",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox 'x'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='spacer12' class='spacer'",
+      "reason": "became visible"
+    },
+    {
+      "object": "LayoutDeprecatedFlexibleBox DIV class='outer box'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow (floating) DIV",
+      "reason": "bounds change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutInline SPAN",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox 'x'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='spacer7' class='spacer'",
+      "reason": "became visible"
+    },
+    {
+      "object": "LayoutTable TABLE class='outer'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutTableSection TBODY",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutTableRow TR",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutTableCell TD",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow (floating) DIV",
+      "reason": "bounds change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutInline SPAN",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox 'x'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='spacer8' class='spacer'",
+      "reason": "became visible"
+    },
+    {
+      "object": "LayoutTable TABLE class='outer'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutTableSection TBODY",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutTableRow TR",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutTableCell TD",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow (floating) DIV",
+      "reason": "bounds change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutInline SPAN",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox 'x'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='spacer14' class='spacer'",
+      "reason": "became visible"
+    },
+    {
+      "object": "LayoutBlockFlow (anonymous)",
+      "reason": "bounds change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutTable TABLE class='outer'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutTableSection TBODY",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutTableRow TR",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutTableCell TD",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow (floating) DIV",
+      "reason": "bounds change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutInline SPAN",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox 'x'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='spacer9' class='spacer'",
+      "reason": "became visible"
+    },
+    {
+      "object": "LayoutBlockFlow DIV class='outer'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow (floating) DIV",
+      "reason": "bounds change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutInline SPAN",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox 'x'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='spacer10' class='spacer'",
+      "reason": "became visible"
+    },
+    {
+      "object": "LayoutBlockFlow DIV class='outer'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow (floating) DIV",
+      "reason": "bounds change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutInline SPAN",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox 'x'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='spacer11' class='spacer'",
+      "reason": "became visible"
+    },
+    {
+      "object": "LayoutBlockFlow DIV class='outer'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow (floating) DIV",
+      "reason": "bounds change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutInline SPAN",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox 'x'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='spacer13' class='spacer'",
+      "reason": "became visible"
+    },
+    {
+      "object": "LayoutBlockFlow DIV class='outer'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow (floating) DIV",
+      "reason": "bounds change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutInline SPAN",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox 'x'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/float-overflow-right-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/float-overflow-right-expected.txt
index 6739e76..5b3c4cd 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/float-overflow-right-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/float-overflow-right-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -775,305 +777,615 @@
           "object": "LayoutText #text",
           "rect": [718, 293, 16, 16],
           "reason": "bounds change"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'x'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'x'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'x'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'x'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'x'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'x'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'x'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'x'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'x'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'x'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'x'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'x'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'x'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'x'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='spacer1' class='spacer'",
-          "reason": "became visible"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='spacer10' class='spacer'",
-          "reason": "became visible"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='spacer11' class='spacer'",
-          "reason": "became visible"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='spacer12' class='spacer'",
-          "reason": "became visible"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='spacer13' class='spacer'",
-          "reason": "became visible"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='spacer14' class='spacer'",
-          "reason": "became visible"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='spacer2' class='spacer'",
-          "reason": "became visible"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='spacer3' class='spacer'",
-          "reason": "became visible"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='spacer4' class='spacer'",
-          "reason": "became visible"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='spacer5' class='spacer'",
-          "reason": "became visible"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='spacer6' class='spacer'",
-          "reason": "became visible"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='spacer7' class='spacer'",
-          "reason": "became visible"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='spacer8' class='spacer'",
-          "reason": "became visible"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='spacer9' class='spacer'",
-          "reason": "became visible"
-        },
-        {
-          "object": "LayoutText #text",
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutText #text",
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutText #text",
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutText #text",
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutText #text",
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutText #text",
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutText #text",
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutText #text",
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutText #text",
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutText #text",
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutText #text",
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutText #text",
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutText #text",
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutText #text",
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutText #text",
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutText #text",
-          "reason": "bounds change"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV id='spacer1' class='spacer'",
+      "reason": "became visible"
+    },
+    {
+      "object": "LayoutBlockFlow DIV class='outer'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow (floating) DIV",
+      "reason": "bounds change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutInline SPAN",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox 'x'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='spacer2' class='spacer'",
+      "reason": "became visible"
+    },
+    {
+      "object": "LayoutBlockFlow DIV class='outer'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow (floating) DIV",
+      "reason": "bounds change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutInline SPAN",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox 'x'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='spacer3' class='spacer'",
+      "reason": "became visible"
+    },
+    {
+      "object": "LayoutBlockFlow DIV class='outer'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow (floating) DIV",
+      "reason": "bounds change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutInline SPAN",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox 'x'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='spacer4' class='spacer'",
+      "reason": "became visible"
+    },
+    {
+      "object": "LayoutBlockFlow DIV class='outer'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow (floating) DIV",
+      "reason": "bounds change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutInline SPAN",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox 'x'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='spacer5' class='spacer'",
+      "reason": "became visible"
+    },
+    {
+      "object": "LayoutBlockFlow DIV class='outer'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow (floating) DIV",
+      "reason": "bounds change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutInline SPAN",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox 'x'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='spacer6' class='spacer'",
+      "reason": "became visible"
+    },
+    {
+      "object": "LayoutDeprecatedFlexibleBox DIV class='outer box'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow (floating) DIV",
+      "reason": "bounds change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutInline SPAN",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox 'x'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='spacer12' class='spacer'",
+      "reason": "became visible"
+    },
+    {
+      "object": "LayoutDeprecatedFlexibleBox DIV class='outer box'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow (floating) DIV",
+      "reason": "bounds change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutInline SPAN",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox 'x'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='spacer7' class='spacer'",
+      "reason": "became visible"
+    },
+    {
+      "object": "LayoutTable TABLE class='outer'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutTableSection TBODY",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutTableRow TR",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutTableCell TD",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow (floating) DIV",
+      "reason": "bounds change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutInline SPAN",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox 'x'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='spacer8' class='spacer'",
+      "reason": "became visible"
+    },
+    {
+      "object": "LayoutTable TABLE class='outer'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutTableSection TBODY",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutTableRow TR",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutTableCell TD",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow (floating) DIV",
+      "reason": "bounds change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutInline SPAN",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox 'x'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='spacer14' class='spacer'",
+      "reason": "became visible"
+    },
+    {
+      "object": "LayoutBlockFlow (anonymous)",
+      "reason": "bounds change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutTable TABLE class='outer'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutTableSection TBODY",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutTableRow TR",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutTableCell TD",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow (floating) DIV",
+      "reason": "bounds change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutInline SPAN",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox 'x'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='spacer9' class='spacer'",
+      "reason": "became visible"
+    },
+    {
+      "object": "LayoutBlockFlow DIV class='outer'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow (floating) DIV",
+      "reason": "bounds change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutInline SPAN",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox 'x'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='spacer10' class='spacer'",
+      "reason": "became visible"
+    },
+    {
+      "object": "LayoutBlockFlow DIV class='outer'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow (floating) DIV",
+      "reason": "bounds change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutInline SPAN",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox 'x'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='spacer11' class='spacer'",
+      "reason": "became visible"
+    },
+    {
+      "object": "LayoutBlockFlow DIV class='outer'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow (floating) DIV",
+      "reason": "bounds change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutInline SPAN",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox 'x'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='spacer13' class='spacer'",
+      "reason": "became visible"
+    },
+    {
+      "object": "LayoutBlockFlow DIV class='outer'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow (floating) DIV",
+      "reason": "bounds change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutInline SPAN",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox 'x'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/focus-continuations-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/focus-continuations-expected.txt
index a7ed6715..ab71540 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/focus-continuations-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/focus-continuations-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -10,21 +12,27 @@
           "object": "LayoutInline SPAN id='outer'",
           "rect": [7, 87, 85, 22],
           "reason": "style change"
-        },
-        {
-          "object": "LayoutBlockFlow (anonymous)",
-          "reason": "forced by layout"
-        },
-        {
-          "object": "LayoutBlockFlow (anonymous)",
-          "reason": "forced by layout"
-        },
-        {
-          "object": "LayoutInline SPAN id='outer'",
-          "reason": "style change"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (anonymous)",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutInline SPAN id='outer'",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutBlockFlow (anonymous)",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutInline SPAN id='outer'",
+      "reason": "style change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/focus-enable-continuations-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/focus-enable-continuations-expected.txt
index 3764cdb5..38977b6e 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/focus-enable-continuations-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/focus-enable-continuations-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -10,25 +12,31 @@
           "object": "LayoutInline SPAN id='outer'",
           "rect": [7, 87, 85, 22],
           "reason": "style change"
-        },
-        {
-          "object": "LayoutBlockFlow (anonymous)",
-          "reason": "forced by layout"
-        },
-        {
-          "object": "LayoutBlockFlow (anonymous)",
-          "reason": "forced by layout"
-        },
-        {
-          "object": "LayoutInline SPAN id='outer'",
-          "reason": "full"
-        },
-        {
-          "object": "LayoutInline SPAN id='outer'",
-          "reason": "style change"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (anonymous)",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutInline SPAN id='outer'",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutBlockFlow (anonymous)",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutInline SPAN id='outer'",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutInline SPAN id='outer'",
+      "reason": "style change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/gradients-em-stops-repaint-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/gradients-em-stops-repaint-expected.txt
index 3676021..9c4d0d4 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/gradients-em-stops-repaint-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/gradients-em-stops-repaint-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -20,25 +22,23 @@
           "object": "LayoutBlockFlow DIV class='indicator'",
           "rect": [345, 19, 240, 20],
           "reason": "style change"
-        },
-        {
-          "object": "InlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV class='em-units'",
+      "reason": "invalidate paint rectangle"
+    },
+    {
+      "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/linux/fast/repaint/in-scaled-iframe-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/in-scaled-iframe-expected.txt
index 6f3a3c5..fc21466c 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/in-scaled-iframe-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/in-scaled-iframe-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [785, 825],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [785, 825],
       "contentsOpaque": true,
       "drawsContent": true,
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/inline-color-change-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/inline-color-change-expected.txt
index 18d32015..d9fa69f 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/inline-color-change-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/inline-color-change-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -15,17 +17,27 @@
           "object": "LayoutText #text",
           "rect": [8, 72, 37, 19],
           "reason": "style change"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox 'PASS'",
-          "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/fast/repaint/inline-focus-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/inline-focus-expected.txt
index 1d6aed7d..7b53bdc 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/inline-focus-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/inline-focus-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -20,37 +22,27 @@
           "object": "LayoutBlockFlow P",
           "rect": [0, 36, 800, 19],
           "reason": "invalidate paint rectangle"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox 'Home'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'crbug.com/424078: ensure inline elements get their outline painted'",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (anonymous)",
+      "reason": "invalidate paint rectangle"
+    },
+    {
+      "object": "LayoutInline A id='link'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutBlockFlow P",
+      "reason": "invalidate paint rectangle"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/inline-outline-repaint-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/inline-outline-repaint-expected.txt
index 60aa84e..771c339 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/inline-outline-repaint-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/inline-outline-repaint-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -25,425 +27,51 @@
           "object": "LayoutBlockFlow DIV",
           "rect": [43, 174, 3, 22],
           "reason": "invalidate paint rectangle"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "outline"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "outline"
-        },
-        {
-          "object": "InlineTextBox ' '",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ' '",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ' '",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ' '",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ' '",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ' '",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ' '",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ' '",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ' '",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ' '",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ' '",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ' '",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ' '",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ' '",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ' '",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ''",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ''",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ''",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ''",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ''",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ''",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ''",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ''",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ''",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Lorem ipsum'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Lorem ipsum'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Lorem ipsum'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Lorem ipsum'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Lorem ipsum'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Lorem ipsum'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Lorem ipsum'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Lorem ipsum'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Lorem ipsum'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Lorem ipsum'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Lorem ipsum'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Lorem ipsum'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Lorem ipsum'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Lorem ipsum'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Lorem ipsum'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'dolor sit amet'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'dolor sit'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'dolor sit'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'dolor'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'dolor'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'dolor\u00A0'",
-          "reason": "full"
-        },
-        {
-          "object": "LayoutText #text",
-          "reason": "layoutObject removal"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutText #text",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "invalidate paint rectangle"
+    },
+    {
+      "object": "LayoutInline SPAN id='test'",
+      "reason": "outline"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "outline"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "outline"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "full"
+    },
+    {
+      "object": "InlineTextBox 'Lorem ipsum'",
+      "reason": "full"
+    },
+    {
+      "object": "InlineTextBox ' '",
+      "reason": "full"
+    },
+    {
+      "object": "InlineTextBox 'dolor\u00A0'",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "invalidate paint rectangle"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/inline-style-change-in-scrolled-view-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/inline-style-change-in-scrolled-view-expected.txt
index f9335c278..81838e6 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/inline-style-change-in-scrolled-view-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/inline-style-change-in-scrolled-view-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [2000, 2000],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [2000, 2000],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -10,13 +12,19 @@
           "object": "LayoutText #text",
           "rect": [0, 320, 385, 19],
           "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox 'Text Text Text Text Text Text Text Text Text Text Text Text Text'",
-          "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/fast/repaint/invalidation-after-opacity-change-subtree-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/invalidation-after-opacity-change-subtree-expected.txt
index f9d336bf9..5cf232b8 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/invalidation-after-opacity-change-subtree-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/invalidation-after-opacity-change-subtree-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [785, 2350],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [785, 2350],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -55,57 +57,99 @@
           "object": "LayoutText #text",
           "rect": [8, 2196, 639, 107],
           "reason": "subtree"
-        },
-        {
-          "object": "InlineTextBox 'This test checks that switching opacity'",
-          "reason": "subtree"
-        },
-        {
-          "object": "InlineTextBox 'This test checks that switching opacity'",
-          "reason": "subtree"
-        },
-        {
-          "object": "InlineTextBox 'This text should be visible in the'",
-          "reason": "subtree"
-        },
-        {
-          "object": "InlineTextBox 'This text should be visible in the'",
-          "reason": "subtree"
-        },
-        {
-          "object": "InlineTextBox 'invalidates the full subtree.'",
-          "reason": "subtree"
-        },
-        {
-          "object": "InlineTextBox 'invalidates the full subtree.'",
-          "reason": "subtree"
-        },
-        {
-          "object": "InlineTextBox 'output.'",
-          "reason": "subtree"
-        },
-        {
-          "object": "InlineTextBox 'output.'",
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='container'",
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='container'",
-          "reason": "subtree"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV id='container'",
+      "reason": "subtree"
+    },
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='absolute'",
+      "reason": "subtree"
+    },
+    {
+      "object": "LayoutBlockFlow P",
+      "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": "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/fast/repaint/japanese-rl-selection-clear-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/japanese-rl-selection-clear-expected.txt
index 0e91a38..c1a2296 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/japanese-rl-selection-clear-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/japanese-rl-selection-clear-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -15,121 +17,131 @@
           "object": "LayoutText #text",
           "rect": [442, 123, 335, 404],
           "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '\u3042\u3063\u305F\u304B\u5FD8\u308C\u3066\u3057\u307E\u3063\u305F\u7D4C\u9A13\u306F\u3042\u308A\u307E\u3059\u304B'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox '\u3042\u3063\u305F\u304B\u5FD8\u308C\u3066\u3057\u307E\u3063\u305F\u7D4C\u9A13\u306F\u3042\u308A\u307E\u3059\u304B'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '\u3057\u305F\u30A6\u30A7\u30D6\u30DA\u30FC\u30B8\u306E\u30B3\u30F3\u30C6\u30F3\u30C4\u304B\u3089\u3082\u691C\u7D22'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox '\u3057\u305F\u30A6\u30A7\u30D6\u30DA\u30FC\u30B8\u306E\u30B3\u30F3\u30C6\u30F3\u30C4\u304B\u3089\u3082\u691C\u7D22'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '\u3059\u3002\u8A2A\u554F\u3057\u305F\u30A6\u30A7\u30D6\u30DA\u30FC\u30B8\u306E\u30B3\u30F3\u30C6\u30F3\u30C4\u304B'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox '\u3059\u3002\u8A2A\u554F\u3057\u305F\u30A6\u30A7\u30D6\u30DA\u30FC\u30B8\u306E\u30B3\u30F3\u30C6\u30F3\u30C4\u304B'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '\u3059\u308B\u3053\u3068\u304C\u3067\u304D\u307E\u3059\u3002\u305B\u3063\u304B\u304F\u898B\u3064\u3051\u305F\u3059'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox '\u3059\u308B\u3053\u3068\u304C\u3067\u304D\u307E\u3059\u3002\u305B\u3063\u304B\u304F\u898B\u3064\u3051\u305F\u3059'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '\u305B\u3063\u304B\u304F\u898B\u3064\u3051\u305F\u3059\u3070\u3089\u3057\u3044\u8A18\u4E8B\u304C\u3069\u3053\u306B'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox '\u305B\u3063\u304B\u304F\u898B\u3064\u3051\u305F\u3059\u3070\u3089\u3057\u3044\u8A18\u4E8B\u304C\u3069\u3053\u306B'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '\u3063\u305F\u7D4C\u9A13\u306F\u3042\u308A\u307E\u3059\u304B \u306A\u3089\u30BF\u30A4\u30C8\u30EB\u3068\u30A2'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox '\u3063\u305F\u7D4C\u9A13\u306F\u3042\u308A\u307E\u3059\u304B \u306A\u3089\u30BF\u30A4\u30C8\u30EB\u3068\u30A2'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '\u3064\u3051\u305F\u3059\u3070\u3089\u3057\u3044\u8A18\u4E8B\u304C\u3069\u3053\u306B\u3042\u3063\u305F\u304B\u5FD8'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox '\u3064\u3051\u305F\u3059\u3070\u3089\u3057\u3044\u8A18\u4E8B\u304C\u3069\u3053\u306B\u3042\u3063\u305F\u304B\u5FD8'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '\u306A\u3089\u30BF\u30A4\u30C8\u30EB\u3068\u30A2\u30C9\u30EC\u30B9\u3060\u3051\u3067\u306A\u304F\u3001\u8A2A\u554F'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox '\u306A\u3089\u30BF\u30A4\u30C8\u30EB\u3068\u30A2\u30C9\u30EC\u30B9\u3060\u3051\u3067\u306A\u304F\u3001\u8A2A\u554F'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '\u306E\u30B3\u30F3\u30C6\u30F3\u30C4\u304B\u3089\u3082\u691C\u7D22\u3059\u308B\u3053\u3068\u304C\u3067\u304D\u307E'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox '\u306E\u30B3\u30F3\u30C6\u30F3\u30C4\u304B\u3089\u3082\u691C\u7D22\u3059\u308B\u3053\u3068\u304C\u3067\u304D\u307E'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '\u3070\u3089\u3057\u3044\u8A18\u4E8B\u304C\u3069\u3053\u306B\u3042\u3063\u305F\u304B\u5FD8\u308C\u3066\u3057\u307E'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox '\u3070\u3089\u3057\u3044\u8A18\u4E8B\u304C\u3069\u3053\u306B\u3042\u3063\u305F\u304B\u5FD8\u308C\u3066\u3057\u307E'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '\u3089\u3082\u691C\u7D22\u3059\u308B\u3053\u3068\u304C\u3067\u304D\u307E\u3059\u3002\u305B\u3063\u304B\u304F\u898B'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox '\u3089\u3082\u691C\u7D22\u3059\u308B\u3053\u3068\u304C\u3067\u304D\u307E\u3059\u3002\u305B\u3063\u304B\u304F\u898B'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '\u308C\u3066\u3057\u307E\u3063\u305F\u7D4C\u9A13\u306F\u3042\u308A\u307E\u3059\u304B \u306A\u3089\u30BF\u30A4'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox '\u308C\u3066\u3057\u307E\u3063\u305F\u7D4C\u9A13\u306F\u3042\u308A\u307E\u3059\u304B \u306A\u3089\u30BF\u30A4'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '\u30C8\u30EB\u3068\u30A2\u30C9\u30EC\u30B9\u3060\u3051\u3067\u306A\u304F\u3001\u8A2A\u554F'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox '\u30C8\u30EB\u3068\u30A2\u30C9\u30EC\u30B9\u3060\u3051\u3067\u306A\u304F\u3001\u8A2A\u554F'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '\u30C9\u30EC\u30B9\u3060\u3051\u3067\u306A\u304F\u3001\u8A2A\u554F\u3057\u305F\u30A6\u30A7\u30D6\u30DA\u30FC\u30B8'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox '\u30C9\u30EC\u30B9\u3060\u3051\u3067\u306A\u304F\u3001\u8A2A\u554F\u3057\u305F\u30A6\u30A7\u30D6\u30DA\u30FC\u30B8'",
-          "reason": "selection"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutText #text",
+      "reason": "selection"
+    },
+    {
+      "object": "InlineTextBox '\u305B\u3063\u304B\u304F\u898B\u3064\u3051\u305F\u3059\u3070\u3089\u3057\u3044\u8A18\u4E8B\u304C\u3069\u3053\u306B'",
+      "reason": "selection"
+    },
+    {
+      "object": "InlineTextBox '\u3042\u3063\u305F\u304B\u5FD8\u308C\u3066\u3057\u307E\u3063\u305F\u7D4C\u9A13\u306F\u3042\u308A\u307E\u3059\u304B'",
+      "reason": "selection"
+    },
+    {
+      "object": "InlineTextBox '\u306A\u3089\u30BF\u30A4\u30C8\u30EB\u3068\u30A2\u30C9\u30EC\u30B9\u3060\u3051\u3067\u306A\u304F\u3001\u8A2A\u554F'",
+      "reason": "selection"
+    },
+    {
+      "object": "InlineTextBox '\u3057\u305F\u30A6\u30A7\u30D6\u30DA\u30FC\u30B8\u306E\u30B3\u30F3\u30C6\u30F3\u30C4\u304B\u3089\u3082\u691C\u7D22'",
+      "reason": "selection"
+    },
+    {
+      "object": "InlineTextBox '\u3059\u308B\u3053\u3068\u304C\u3067\u304D\u307E\u3059\u3002\u305B\u3063\u304B\u304F\u898B\u3064\u3051\u305F\u3059'",
+      "reason": "selection"
+    },
+    {
+      "object": "InlineTextBox '\u3070\u3089\u3057\u3044\u8A18\u4E8B\u304C\u3069\u3053\u306B\u3042\u3063\u305F\u304B\u5FD8\u308C\u3066\u3057\u307E'",
+      "reason": "selection"
+    },
+    {
+      "object": "InlineTextBox '\u3063\u305F\u7D4C\u9A13\u306F\u3042\u308A\u307E\u3059\u304B \u306A\u3089\u30BF\u30A4\u30C8\u30EB\u3068\u30A2'",
+      "reason": "selection"
+    },
+    {
+      "object": "InlineTextBox '\u30C9\u30EC\u30B9\u3060\u3051\u3067\u306A\u304F\u3001\u8A2A\u554F\u3057\u305F\u30A6\u30A7\u30D6\u30DA\u30FC\u30B8'",
+      "reason": "selection"
+    },
+    {
+      "object": "InlineTextBox '\u306E\u30B3\u30F3\u30C6\u30F3\u30C4\u304B\u3089\u3082\u691C\u7D22\u3059\u308B\u3053\u3068\u304C\u3067\u304D\u307E'",
+      "reason": "selection"
+    },
+    {
+      "object": "InlineTextBox '\u3059\u3002\u8A2A\u554F\u3057\u305F\u30A6\u30A7\u30D6\u30DA\u30FC\u30B8\u306E\u30B3\u30F3\u30C6\u30F3\u30C4\u304B'",
+      "reason": "selection"
+    },
+    {
+      "object": "InlineTextBox '\u3089\u3082\u691C\u7D22\u3059\u308B\u3053\u3068\u304C\u3067\u304D\u307E\u3059\u3002\u305B\u3063\u304B\u304F\u898B'",
+      "reason": "selection"
+    },
+    {
+      "object": "InlineTextBox '\u3064\u3051\u305F\u3059\u3070\u3089\u3057\u3044\u8A18\u4E8B\u304C\u3069\u3053\u306B\u3042\u3063\u305F\u304B\u5FD8'",
+      "reason": "selection"
+    },
+    {
+      "object": "InlineTextBox '\u308C\u3066\u3057\u307E\u3063\u305F\u7D4C\u9A13\u306F\u3042\u308A\u307E\u3059\u304B \u306A\u3089\u30BF\u30A4'",
+      "reason": "selection"
+    },
+    {
+      "object": "InlineTextBox '\u30C8\u30EB\u3068\u30A2\u30C9\u30EC\u30B9\u3060\u3051\u3067\u306A\u304F\u3001\u8A2A\u554F'",
+      "reason": "selection"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "incremental"
+    },
+    {
+      "object": "InlineTextBox '\u305B\u3063\u304B\u304F\u898B\u3064\u3051\u305F\u3059\u3070\u3089\u3057\u3044\u8A18\u4E8B\u304C\u3069\u3053\u306B'",
+      "reason": "incremental"
+    },
+    {
+      "object": "InlineTextBox '\u3042\u3063\u305F\u304B\u5FD8\u308C\u3066\u3057\u307E\u3063\u305F\u7D4C\u9A13\u306F\u3042\u308A\u307E\u3059\u304B'",
+      "reason": "incremental"
+    },
+    {
+      "object": "InlineTextBox '\u306A\u3089\u30BF\u30A4\u30C8\u30EB\u3068\u30A2\u30C9\u30EC\u30B9\u3060\u3051\u3067\u306A\u304F\u3001\u8A2A\u554F'",
+      "reason": "incremental"
+    },
+    {
+      "object": "InlineTextBox '\u3057\u305F\u30A6\u30A7\u30D6\u30DA\u30FC\u30B8\u306E\u30B3\u30F3\u30C6\u30F3\u30C4\u304B\u3089\u3082\u691C\u7D22'",
+      "reason": "incremental"
+    },
+    {
+      "object": "InlineTextBox '\u3059\u308B\u3053\u3068\u304C\u3067\u304D\u307E\u3059\u3002\u305B\u3063\u304B\u304F\u898B\u3064\u3051\u305F\u3059'",
+      "reason": "incremental"
+    },
+    {
+      "object": "InlineTextBox '\u3070\u3089\u3057\u3044\u8A18\u4E8B\u304C\u3069\u3053\u306B\u3042\u3063\u305F\u304B\u5FD8\u308C\u3066\u3057\u307E'",
+      "reason": "incremental"
+    },
+    {
+      "object": "InlineTextBox '\u3063\u305F\u7D4C\u9A13\u306F\u3042\u308A\u307E\u3059\u304B \u306A\u3089\u30BF\u30A4\u30C8\u30EB\u3068\u30A2'",
+      "reason": "incremental"
+    },
+    {
+      "object": "InlineTextBox '\u30C9\u30EC\u30B9\u3060\u3051\u3067\u306A\u304F\u3001\u8A2A\u554F\u3057\u305F\u30A6\u30A7\u30D6\u30DA\u30FC\u30B8'",
+      "reason": "incremental"
+    },
+    {
+      "object": "InlineTextBox '\u306E\u30B3\u30F3\u30C6\u30F3\u30C4\u304B\u3089\u3082\u691C\u7D22\u3059\u308B\u3053\u3068\u304C\u3067\u304D\u307E'",
+      "reason": "incremental"
+    },
+    {
+      "object": "InlineTextBox '\u3059\u3002\u8A2A\u554F\u3057\u305F\u30A6\u30A7\u30D6\u30DA\u30FC\u30B8\u306E\u30B3\u30F3\u30C6\u30F3\u30C4\u304B'",
+      "reason": "incremental"
+    },
+    {
+      "object": "InlineTextBox '\u3089\u3082\u691C\u7D22\u3059\u308B\u3053\u3068\u304C\u3067\u304D\u307E\u3059\u3002\u305B\u3063\u304B\u304F\u898B'",
+      "reason": "incremental"
+    },
+    {
+      "object": "InlineTextBox '\u3064\u3051\u305F\u3059\u3070\u3089\u3057\u3044\u8A18\u4E8B\u304C\u3069\u3053\u306B\u3042\u3063\u305F\u304B\u5FD8'",
+      "reason": "incremental"
+    },
+    {
+      "object": "InlineTextBox '\u308C\u3066\u3057\u307E\u3063\u305F\u7D4C\u9A13\u306F\u3042\u308A\u307E\u3059\u304B \u306A\u3089\u30BF\u30A4'",
+      "reason": "incremental"
+    },
+    {
+      "object": "InlineTextBox '\u30C8\u30EB\u3068\u30A2\u30C9\u30EC\u30B9\u3060\u3051\u3067\u306A\u304F\u3001\u8A2A\u554F'",
+      "reason": "incremental"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/japanese-rl-selection-repaint-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/japanese-rl-selection-repaint-expected.txt
index fa8a0d9..46403cb 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/japanese-rl-selection-repaint-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/japanese-rl-selection-repaint-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -15,97 +17,107 @@
           "object": "LayoutText #text",
           "rect": [538, 23, 239, 556],
           "reason": "selection"
-        },
-        {
-          "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": "incremental"
-        },
-        {
-          "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": "selection"
-        },
-        {
-          "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": "incremental"
-        },
-        {
-          "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": "selection"
-        },
-        {
-          "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": "incremental"
-        },
-        {
-          "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": "selection"
-        },
-        {
-          "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": "incremental"
-        },
-        {
-          "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": "selection"
-        },
-        {
-          "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": "incremental"
-        },
-        {
-          "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": "selection"
-        },
-        {
-          "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": "incremental"
-        },
-        {
-          "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": "selection"
-        },
-        {
-          "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": "incremental"
-        },
-        {
-          "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": "selection"
-        },
-        {
-          "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": "incremental"
-        },
-        {
-          "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": "selection"
-        },
-        {
-          "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": "incremental"
-        },
-        {
-          "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": "selection"
-        },
-        {
-          "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": "incremental"
-        },
-        {
-          "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": "selection"
-        },
-        {
-          "object": "LayoutBlockFlow BODY",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutBlockFlow HTML",
-          "reason": "selection"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow HTML",
+      "reason": "selection"
+    },
+    {
+      "object": "LayoutBlockFlow BODY",
+      "reason": "selection"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "selection"
+    },
+    {
+      "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": "selection"
+    },
+    {
+      "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": "selection"
+    },
+    {
+      "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": "selection"
+    },
+    {
+      "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": "selection"
+    },
+    {
+      "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": "selection"
+    },
+    {
+      "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": "selection"
+    },
+    {
+      "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": "selection"
+    },
+    {
+      "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": "selection"
+    },
+    {
+      "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": "selection"
+    },
+    {
+      "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": "selection"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "incremental"
+    },
+    {
+      "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": "incremental"
+    },
+    {
+      "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": "incremental"
+    },
+    {
+      "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": "incremental"
+    },
+    {
+      "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": "incremental"
+    },
+    {
+      "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": "incremental"
+    },
+    {
+      "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": "incremental"
+    },
+    {
+      "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": "incremental"
+    },
+    {
+      "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": "incremental"
+    },
+    {
+      "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": "incremental"
+    },
+    {
+      "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": "incremental"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/layout-state-relative-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/layout-state-relative-expected.txt
index cdedc55..7968909 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/layout-state-relative-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/layout-state-relative-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -15,21 +17,23 @@
           "object": "LayoutText #text",
           "rect": [8, 152, 37, 19],
           "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ''",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'PASS'",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (relative positioned) DIV id='target'",
+      "reason": "invalidate paint rectangle"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "full"
+    },
+    {
+      "object": "InlineTextBox 'PASS'",
+      "reason": "full"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/layout-state-scrolloffset-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/layout-state-scrolloffset-expected.txt
index a456ce3..f6eddc8 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/layout-state-scrolloffset-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/layout-state-scrolloffset-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -15,21 +17,23 @@
           "object": "LayoutText #text",
           "rect": [100, 120, 39, 19],
           "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ''",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'after'",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV id='target'",
+      "reason": "invalidate paint rectangle"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "full"
+    },
+    {
+      "object": "InlineTextBox 'after'",
+      "reason": "full"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/layout-state-scrolloffset2-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/layout-state-scrolloffset2-expected.txt
index cd79d333..1ac57eb 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/layout-state-scrolloffset2-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/layout-state-scrolloffset2-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -15,21 +17,23 @@
           "object": "LayoutText #text",
           "rect": [102, 122, 39, 19],
           "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ''",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'after'",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV id='target'",
+      "reason": "invalidate paint rectangle"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "full"
+    },
+    {
+      "object": "InlineTextBox 'after'",
+      "reason": "full"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/layout-state-scrolloffset3-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/layout-state-scrolloffset3-expected.txt
index 0538ab7..f5da0ff 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/layout-state-scrolloffset3-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/layout-state-scrolloffset3-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -15,21 +17,23 @@
           "object": "LayoutText #text",
           "rect": [100, 120, 34, 19],
           "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ''",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'after'",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV id='target'",
+      "reason": "invalidate paint rectangle"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "full"
+    },
+    {
+      "object": "InlineTextBox 'after'",
+      "reason": "full"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/layoutstate-invalid-invalidation-inline-relative-positioned-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/layoutstate-invalid-invalidation-inline-relative-positioned-expected.txt
index e8f0cd4..027e3160 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/layoutstate-invalid-invalidation-inline-relative-positioned-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/layoutstate-invalid-invalidation-inline-relative-positioned-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -40,45 +42,47 @@
           "object": "LayoutText #text",
           "rect": [8, 200, 100, 100],
           "reason": "bounds change"
-        },
-        {
-          "object": "InlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'x'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutText #text",
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutText #text",
-          "reason": "bounds change"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (anonymous)",
+      "reason": "invalidate paint rectangle"
+    },
+    {
+      "object": "LayoutInline (relative positioned) SPAN id='target'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "bounds change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox 'x'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/line-flow-with-floats-1-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/line-flow-with-floats-1-expected.txt
index ba9f668..c8332c6 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/line-flow-with-floats-1-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/line-flow-with-floats-1-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -85,426 +87,6 @@
           "object": "LayoutText #text",
           "rect": [420, 180, 1, 59],
           "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox ' twist itself round and look up in her face, with'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox ' twist itself round and look up in her'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ' was in a'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'Alice began to feel very uneasy: to be sure, she had not as\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Alice soon came to the conclusion that it was a very'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'The chief difficulty Alice found at first was in managing her'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'The players all played at once without waiting\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'They\u2019re dreadfully fond of beheading people here; the great'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'a very short time '",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'a very short time '",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'any dispute with the Queen, but she knew that it might\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'begin again, it was very provoking to find that the hedgehog had'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'begin again, it was very provoking to find that the'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'besides all\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'blow with its head, it\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'bursting out\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'but generally, just as she had got its neck nicely'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'but generally, just as she had got its neck nicely'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'comfortably enough, under her arm, with its legs hanging'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'comfortably enough, under her arm, with its legs hanging'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'difficult game indeed.\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'difficult game indeed.\n'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'doubled-up\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'down,\n'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'down,\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'face, with\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'flamingo: she succeeded in getting its body tucked away,'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'for'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'for'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'furious passion, and went\n'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'going to\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'happen any'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'hedgehog had\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'hedgehogs; and in\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'hedgehogs; and in\n'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'her head!\u2019 about once in a'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'her head!\u2019 about'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'its head, it\n'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'laughing: and when she had got its head down, and was going to'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'laughing: and when she had got its head down, and was'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'me?'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'minute, \u2018and then,\u2019 thought she, \u2018what would become of\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'minute.\n'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'once in a minute.\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'other parts of\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'out, and was going to give the hedgehog a blow with'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'out, and was going to give the hedgehog a'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'quarrelling all the while, and fighting for the'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'quarrelling all the while, and fighting for the'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'she wanted to send the hedgehog to, and, as the'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'she'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'shouting \u2018Off with his head!\u2019 or \u2018Off with\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'soldiers were always getting up and walking off to'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'soldiers'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'stamping about, and shouting'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'stamping about, and'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'straightened\n'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'straightened\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'such a puzzled expression that she could not help bursting out'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'such a puzzled expression that she could not help'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'the Queen'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'the Queen'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'the ground, Alice soon came to the conclusion that it'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'the ground,'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'there was generally a ridge or furrow in the way wherever\n'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'this, there was generally a ridge or furrow in the way'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'this,'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'turns,\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'turns,\n'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'unrolled itself, and was in the act of crawling away: besides all\n'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'unrolled itself, and was in the act of crawling away:'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'wanted to send the hedgehog to, and, as the doubled-up\n'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'was a very\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'was in a furious passion, and went\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'were always getting up and walking off to other parts of\n'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'wherever\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'wonder is, that there\u2018s any one left alive!\u2019'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'would'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'would'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'yet had'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox '\u2018Off with his head!\u2019 or \u2018Off with\n'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/line-flow-with-floats-10-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/line-flow-with-floats-10-expected.txt
index ea4029b..efa7e97 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/line-flow-with-floats-10-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/line-flow-with-floats-10-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -25,186 +27,6 @@
           "object": "LayoutText #text",
           "rect": [368, 440, 2, 59],
           "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'Alice began to feel very uneasy: to be sure, she had not as\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'The players all played at once without waiting\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'They\u2019re dreadfully fond of beheading people here; the great'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'a very short time '",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'about, and shouting \u2018Off with his head!\u2019 or \u2018Off with\n'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'any dispute with the Queen, but she knew that it might\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'difficult game indeed.\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'doubled-up\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'for'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'happen any'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'head!\u2019 about once in a minute.\n'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'hedgehogs; and in\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'her head!\u2019 about'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'her'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'me?'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'minute, \u2018and then,\u2019 thought she, \u2018what would become of\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'once in a minute.\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'other parts of\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'quarrelling all the while, and fighting for the'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'shouting \u2018Off with his head!\u2019 or \u2018Off with\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'soldiers were always getting up and walking off to'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'stamping about, and'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'stamping'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'the Queen'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'the ground, Alice soon came to the conclusion that it'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'turns,\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'was a very\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'was in a furious passion, and went\n'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'was in a furious passion, and went\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'wonder is, that there\u2018s any one left alive!\u2019'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'yet had'",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/line-flow-with-floats-2-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/line-flow-with-floats-2-expected.txt
index 1ea1c11..5a4cdda 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/line-flow-with-floats-2-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/line-flow-with-floats-2-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -130,242 +132,6 @@
           "object": "LayoutView #document",
           "rect": [485, 0, 15, 600],
           "reason": "scroll"
-        },
-        {
-          "object": "InlineTextBox ' twist itself round and look up in her'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ' twist itself round and look up in her'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox ''",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Alice began to feel very uneasy: to be sure, she had not as\n'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'The chief difficulty Alice found at first was in managing her'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'The players all played at once without waiting\n'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'They\u2019re dreadfully fond of beheading people here; the great'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'a very short time '",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'any dispute with the Queen, but she knew that it might\n'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'begin again, it was very provoking to find that the'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'besides all\n'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'blow with its head, it\n'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'blow with its head, it\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'bursting out\n'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'but generally, just as she had got its neck nicely'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'comfortably enough, under her arm, with its legs hanging'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'difficult game indeed.\n'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'doubled-up\n'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'down,\n'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'face, with\n'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'flamingo: she succeeded in getting its body tucked away,'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'for'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'going to\n'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'happen any'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'hedgehog had\n'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'hedgehogs; and in\n'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'her head!\u2019 about'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'laughing: and when she had got its head down, and was'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'me?'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'minute, \u2018and then,\u2019 thought she, \u2018what would become of\n'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'once in a minute.\n'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'other parts of\n'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'out, and was going to give the hedgehog a'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'out, and was going to give the hedgehog a'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'quarrelling all the while, and fighting for the'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'she wanted to send the hedgehog to, and, as the'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'shouting \u2018Off with his head!\u2019 or \u2018Off with\n'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'soldiers were always getting up and walking off to'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'stamping about, and'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'straightened\n'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'straightened\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'such a puzzled expression that she could not help'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'the Queen'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'the ground, Alice soon came to the conclusion that it'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'this, there was generally a ridge or furrow in the way'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'turns,\n'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'unrolled itself, and was in the act of crawling away:'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'was a very\n'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'was in a furious passion, and went\n'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'wherever\n'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'wonder is, that there\u2018s any one left alive!\u2019'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'would'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox 'yet had'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutBlockFlow P",
-          "reason": "incremental"
-        },
-        {
-          "object": "LayoutInline I id='would'",
-          "reason": "style change"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "VerticalScrollbar",
-          "reason": "scroll"
         }
       ]
     }
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/line-flow-with-floats-3-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/line-flow-with-floats-3-expected.txt
index b3a12767..dd0e977 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/line-flow-with-floats-3-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/line-flow-with-floats-3-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -40,202 +42,6 @@
           "object": "LayoutText #text",
           "rect": [353, 440, 16, 59],
           "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox ' was in a furious passion, and went\n'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'Alice began to feel very uneasy: to be sure, she had not as\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Queen'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'The players all played at once without waiting\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'The players all played at once without waiting'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'They\u2019re dreadfully fond of beheading people here; the great'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'a very short time '",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'a very short time '",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'about, and shouting \u2018Off with his head!\u2019 or \u2018Off with\n'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'any dispute with the Queen, but she knew that it might\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'difficult game indeed.\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'for the hedgehogs; and in\n'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'for turns,\n'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'for'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'happen any'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'head!\u2019 about once in a minute.\n'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'hedgehogs; and in\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'her head!\u2019 about'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'her'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'me?'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'minute, \u2018and then,\u2019 thought she, \u2018what would become of\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'once in a minute.\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'other parts of\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'quarrelling all the while, and fighting for the'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'quarrelling all the while, and fighting'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'shouting \u2018Off with his head!\u2019 or \u2018Off with\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'stamping about, and'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'stamping'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'the Queen'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'the ground, Alice soon came to the conclusion that it'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'the'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'turns,\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'was a very\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'was in a furious passion, and went\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'wonder is, that there\u2018s any one left alive!\u2019'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'yet had'",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/line-flow-with-floats-4-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/line-flow-with-floats-4-expected.txt
index b73d252..e40eb5ed 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/line-flow-with-floats-4-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/line-flow-with-floats-4-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -20,174 +22,6 @@
           "object": "LayoutBlockFlow (floating) SPAN id='greenFloat'",
           "rect": [372, 447, 48, 17],
           "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'Alice began to feel very uneasy: to be sure, she had not as\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'The players all played at once without waiting\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'They\u2019re dreadfully fond of beheading people here; the great'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'a minute.\n'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'a very short time '",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'any dispute with the Queen, but she knew that it might\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'difficult game indeed.\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'for'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'happen any'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'hedgehogs; and in\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'her head!\u2019 about once in'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'her head!\u2019 about'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'me?'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'minute, \u2018and then,\u2019 thought she, \u2018what would become of\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'once in a minute.\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'other parts of\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'quarrelling all the while, and fighting for the'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'shouting \u2018Off with his head!\u2019 or \u2018Off with\n'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'shouting \u2018Off with his head!\u2019 or \u2018Off with\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'stamping about, and'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'stamping about, and'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'the Queen'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'the ground, Alice soon came to the conclusion that it'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'turns,\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'was a very\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'was in a furious passion, and went\n'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'was in a furious passion, and went\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'wonder is, that there\u2018s any one left alive!\u2019'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'yet had'",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/line-flow-with-floats-5-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/line-flow-with-floats-5-expected.txt
index 0d78993..fabaa02 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/line-flow-with-floats-5-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/line-flow-with-floats-5-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -50,222 +52,6 @@
           "object": "LayoutBlockFlow (floating) SPAN id='blueFloat'",
           "rect": [46, 363, 16, 65],
           "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox ' was'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'Alice began to feel very uneasy: to be sure, she had not as\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'The players all played at once without waiting\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'The players all played at once without waiting\n'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'They\u2019re dreadfully fond of beheading people here; the great'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'a very short time '",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'a very short time '",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'any dispute with the Queen, but she knew that it might\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'difficult game indeed.\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'difficult game indeed.\n'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'doubled-up\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'for'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'for'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'happen any'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'hedgehogs; and in\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'hedgehogs; and in\n'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'her head!\u2019 about'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'her head!\u2019 about'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'in a furious passion, and went\n'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'me?'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'minute, \u2018and then,\u2019 thought she, \u2018what would become of\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'once in a minute.\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'once in a minute.\n'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'other parts of\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'quarrelling all the while, and fighting for the'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'quarrelling all the while, and fighting for the'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'shouting \u2018Off with his head!\u2019 or \u2018Off with\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'shouting \u2018Off with his head!\u2019 or \u2018Off with\n'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'soldiers were always getting up and walking off to'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'stamping about, and'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'stamping about, and'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'the Queen'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'the Queen'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'the ground, Alice soon came to the conclusion that it'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'turns,\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'turns,\n'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'was a very\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'was in a furious passion, and went\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'wonder is, that there\u2018s any one left alive!\u2019'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'yet had'",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/line-flow-with-floats-6-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/line-flow-with-floats-6-expected.txt
index 581d44b..45f74c7 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/line-flow-with-floats-6-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/line-flow-with-floats-6-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -20,62 +22,6 @@
           "object": "LayoutText #text",
           "rect": [28, 363, 20, 20],
           "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'The players all played at once without waiting\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'difficult game indeed.\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'doubled-up\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'foo'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'for'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'other parts of\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'soldiers were always getting up and walking off to'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'the ground, Alice soon came to the conclusion that it'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'was a very\n'",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/line-flow-with-floats-7-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/line-flow-with-floats-7-expected.txt
index 1c6fa30..a55cbc1 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/line-flow-with-floats-7-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/line-flow-with-floats-7-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -20,42 +22,6 @@
           "object": "LayoutText #text",
           "rect": [303, 420, 67, 19],
           "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox ''",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'a very short time '",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'hedgehogs; and in\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'quarrelling all the while, and fighting for the'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'the Queen'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox 'turns,\n'",
-          "reason": "full"
-        },
-        {
-          "object": "LayoutInline SPAN id='theQueen'",
-          "reason": "style change"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/line-flow-with-floats-8-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/line-flow-with-floats-8-expected.txt
index 578ca49..9f25518 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/line-flow-with-floats-8-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/line-flow-with-floats-8-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -95,338 +97,6 @@
           "object": "LayoutView #document",
           "rect": [485, 0, 15, 600],
           "reason": "scroll"
-        },
-        {
-          "object": "InlineTextBox ' twist itself round and look up in her'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ' was in a furious passion,'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'Alice began to feel very uneasy: to be sure, she had not as\n'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'The chief difficulty Alice found at first was in managing her'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'The players all played at once without waiting\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'The players all played at once without waiting\n'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'They\u2019re dreadfully fond of beheading people here; the great'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'a very short time '",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'a very short time '",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'and went\n'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'any dispute with the Queen, but she knew that it might\n'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'begin again, it was very provoking to find that the'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'besides all\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'blow with its head, it\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'bursting out\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'but generally, just as she had got its neck nicely'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'comfortably enough, under her arm, with its legs hanging'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'difficult game indeed.\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'difficult game indeed.\n'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'doubled-up\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'down,\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'face, with\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'flamingo: she succeeded in getting its body tucked away,'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'for turns,'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'for'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'going to\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'happen any'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'hedgehog had\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'hedgehogs; and in\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'her head!\u2019 about once in a minute.\n'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'her head!\u2019 about'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'in\n'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'laughing: and when she had got its head down, and was'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'me?'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'minute, \u2018and then,\u2019 thought she, \u2018what would become of\n'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'once in a minute.\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'or \u2018Off with\n'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'other parts of\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'out, and was going to give the hedgehog a'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'quarrelling all the while, and fighting for the hedgehogs; and'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'quarrelling all the while, and fighting for the'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'she wanted to send the hedgehog to, and, as the'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'shouting \u2018Off with his head!\u2019 or \u2018Off with\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'soldiers were always getting up and walking off to'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'stamping about, and shouting \u2018Off with his head!\u2019'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'stamping about, and'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'straightened\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'such a puzzled expression that she could not help'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'the Queen'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'the Queen'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'the ground, Alice soon came to the conclusion that it'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'this, there was generally a ridge or furrow in the way'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'turns,\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'unrolled itself, and was in the act of crawling away:'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'was a very\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'was in a furious passion, and went\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'wherever\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'wonder is, that there\u2018s any one left alive!\u2019'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'would'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'yet had'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "VerticalScrollbar",
-          "reason": "scroll"
         }
       ]
     }
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/line-flow-with-floats-9-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/line-flow-with-floats-9-expected.txt
index cb1d7a2..7a5b3b37 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/line-flow-with-floats-9-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/line-flow-with-floats-9-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -20,286 +22,6 @@
           "object": "LayoutText #text",
           "rect": [420, 240, 1, 139],
           "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'Alice began to feel very uneasy: to be sure, she had not as\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'The players all played at once without waiting\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'They\u2019re dreadfully fond of beheading people here; the great'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'a very short time '",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'any dispute with the Queen, but she knew that it might\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'away: besides all\n'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'begin again, it was very provoking to find that the'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'begin again, it was very provoking to find that the'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'besides all\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'bursting out\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'difficult game indeed.\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'doubled-up\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'face, with\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'for'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'going to\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'happen any'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'hedgehog had\n'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'hedgehog had\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'hedgehogs; and in\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'her head!\u2019 about'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'in the way wherever\n'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'laughing: and when she had got its head down, and was'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'me?'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'minute, \u2018and then,\u2019 thought she, \u2018what would become of\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'once in a minute.\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'other parts of\n'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'other parts of\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'quarrelling all the while, and fighting for the'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'she wanted to send the hedgehog to, and, as the'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'she wanted to send the hedgehog to, and, as'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'shouting \u2018Off with his head!\u2019 or \u2018Off with\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'soldiers were always getting up and walking off to'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'soldiers were always getting up and walking off to'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'stamping about, and'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'such a puzzled expression that she could not help'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'the Queen'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'the doubled-up\n'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'the ground, Alice soon came to the conclusion that it'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'the ground, Alice soon came to the conclusion that it'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'this, there was generally a ridge or furrow in the way'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'this, there was generally a ridge or furrow'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'turns,\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'unrolled itself, and was in the act of crawling away:'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'unrolled itself, and was in the act of crawling'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'was a very\n'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'was a very\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'was in a furious passion, and went\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'wherever\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'wonder is, that there\u2018s any one left alive!\u2019'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'yet had'",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/line-in-scrolled-clipped-block-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/line-in-scrolled-clipped-block-expected.txt
index 58c658c..5c1afac 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/line-in-scrolled-clipped-block-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/line-in-scrolled-clipped-block-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -15,21 +17,23 @@
           "object": "LayoutText #text",
           "rect": [8, 8, 100, 19],
           "reason": "full"
-        },
-        {
-          "object": "InlineTextBox '                         PASS     .'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ''",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV id='target'",
+      "reason": "invalidate paint rectangle"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "full"
+    },
+    {
+      "object": "InlineTextBox '                         PASS     .'",
+      "reason": "full"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/line-overflow-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/line-overflow-expected.txt
index e166074a..a6730222a 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/line-overflow-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/line-overflow-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -35,85 +37,51 @@
           "object": "LayoutText #text",
           "rect": [184, 122, 20, 79],
           "reason": "incremental"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox ' eleifend lacus, at'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox ' eleifend'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Integer sollicitudin nisi ut urna'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'augue '",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'blandit convallis.'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'enim in scelerisque convallis,'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'lacus, at sagittis eros leo pulvinar'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'purus'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'purus'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'sagittis eros leo pulvinar velit.'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'urna blandit convallis.'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'velit. Integer sollicitudin nisi ut'",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "invalidate paint rectangle"
+    },
+    {
+      "object": "LayoutInline SPAN id='t'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox 'purus'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "incremental"
+    },
+    {
+      "object": "InlineTextBox ' eleifend lacus, at'",
+      "reason": "incremental"
+    },
+    {
+      "object": "InlineTextBox 'sagittis eros leo pulvinar velit.'",
+      "reason": "incremental"
+    },
+    {
+      "object": "InlineTextBox 'Integer sollicitudin nisi ut urna'",
+      "reason": "incremental"
+    },
+    {
+      "object": "InlineTextBox 'blandit convallis.'",
+      "reason": "incremental"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/lines-with-layout-delta-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/lines-with-layout-delta-expected.txt
index ee5cc2a9..536b48f 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/lines-with-layout-delta-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/lines-with-layout-delta-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -15,21 +17,23 @@
           "object": "LayoutText #text",
           "rect": [8, 58, 37, 19],
           "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ''",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'PASS'",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (floating) DIV id='target'",
+      "reason": "invalidate paint rectangle"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "full"
+    },
+    {
+      "object": "InlineTextBox 'PASS'",
+      "reason": "full"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/list-marker-2-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/list-marker-2-expected.txt
index db1e6ef4..c03f2413 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/list-marker-2-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/list-marker-2-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -30,25 +32,31 @@
           "object": "LayoutListMarker (anonymous)",
           "rect": [30, 135, 7, 19],
           "reason": "bounds change"
-        },
-        {
-          "object": "InlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutListItem LI",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutListItem LI",
+      "reason": "invalidate paint rectangle"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutListMarker (anonymous)",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutImage IMG id='target'",
+      "reason": "forced by layout"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/make-children-non-inline-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/make-children-non-inline-expected.txt
index 8b4debbe..3c9f5c3 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/make-children-non-inline-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/make-children-non-inline-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -90,221 +92,171 @@
           "object": "LayoutBlockFlow DIV id='target'",
           "rect": [8, 164, 10, 100],
           "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'I could'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'I could'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'Word,'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Word,'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'about all the stuff'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'about all the stuff'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'after'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'after'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'more words.'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'more words.'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'that comes'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'that comes'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'the break.'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'the break.'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'words,'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'words,'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'write a book'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'write a book'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "LayoutBR BR",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "LayoutBR BR",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "LayoutBR BR",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "LayoutBR BR",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "LayoutBR BR",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "LayoutBR BR",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "LayoutBR BR",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "LayoutBR BR",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutBlockFlow (anonymous)",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'Word,'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutBR BR",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'words,'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutBR BR",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'more words.'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutBR BR",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'I could'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutBR BR",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'write a book'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutBR BR",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='target'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutBlockFlow (anonymous)",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'about all the stuff'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutBR BR",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'that comes'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutBR BR",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'after'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutBR BR",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'the break.'",
+      "reason": "layoutObject insertion"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/multi-layout-one-frame-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/multi-layout-one-frame-expected.txt
index 3edb0f4..f5a1686 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/multi-layout-one-frame-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/multi-layout-one-frame-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -25,33 +27,35 @@
           "object": "LayoutText #text",
           "rect": [10, 11, 53, 16],
           "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ''",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ''",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'PASSED'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'PASSED'",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV id='inner-editor'",
+      "reason": "invalidate paint rectangle"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "full"
+    },
+    {
+      "object": "InlineTextBox 'PASSED'",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='inner-editor'",
+      "reason": "invalidate paint rectangle"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "full"
+    },
+    {
+      "object": "InlineTextBox 'PASSED'",
+      "reason": "full"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/offset-change-wrong-invalidation-with-float-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/offset-change-wrong-invalidation-with-float-expected.txt
index fc23cae..d16032b 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/offset-change-wrong-invalidation-with-float-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/offset-change-wrong-invalidation-with-float-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -25,24 +27,18 @@
           "object": "LayoutListMarker (anonymous)",
           "rect": [70, -156, 7, 19],
           "reason": "bounds change"
-        },
-        {
-          "object": "LayoutListItem LI",
-          "reason": "bounds change"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ],
       "children": [
         {
+          "name": "LayoutListItem (floating) LI id='watches'",
           "position": [30, 44],
           "transformOrigin": [18, 10],
           "bounds": [25, 19],
           "drawsContent": true,
           "children": [
             {
+              "name": "LayoutInline (relative positioned) SPAN id='placeholder'",
               "position": [18, 0],
               "bounds": [0, 19],
               "backfaceVisibility": "hidden"
@@ -50,12 +46,31 @@
           ]
         },
         {
+          "name": "LayoutListItem (relative positioned) (floating) LI id='menu'",
           "position": [30, 44],
           "bounds": [18, 19],
           "drawsContent": true
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (positioned) UL id='submenu'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutListItem LI",
+      "reason": "bounds change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutListMarker (anonymous)",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/opacity-change-on-overflow-float-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/opacity-change-on-overflow-float-expected.txt
index 2006857..10ceb7b 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/opacity-change-on-overflow-float-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/opacity-change-on-overflow-float-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -23,6 +25,20 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (floating) DIV class='green'",
+      "reason": "subtree"
+    },
+    {
+      "object": "LayoutBlockFlow (floating) DIV class='red'",
+      "reason": "background obscuration change"
+    },
+    {
+      "object": "LayoutBlockFlow (floating) DIV class='green'",
+      "reason": "subtree"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/outline-change-invalidation-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/outline-change-invalidation-expected.txt
index c8d5688b..e1aaa2a 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/outline-change-invalidation-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/outline-change-invalidation-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -10,13 +12,19 @@
           "object": "LayoutBlockFlow A id='link'",
           "rect": [43, 83, 754, 30],
           "reason": "style change"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow A id='link'",
+      "reason": "style change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "style change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/outline-clip-change-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/outline-clip-change-expected.txt
index ccbb6b55..ba6f1274 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/outline-clip-change-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/outline-clip-change-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -15,17 +17,27 @@
           "object": "LayoutText #text",
           "rect": [48, 108, 82, 19],
           "reason": "subtree"
-        },
-        {
-          "object": "InlineTextBox 'Lorem Ipsum'",
-          "reason": "subtree"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "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/fast/repaint/outline-continuations-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/outline-continuations-expected.txt
index df0d254..d26073c 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/outline-continuations-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/outline-continuations-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -25,41 +27,43 @@
           "object": "LayoutInline SPAN id='outer'",
           "rect": [16, 148, 87, 23],
           "reason": "style change"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox 'CONTENTS'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'CONTENTS'",
-          "reason": "full"
-        },
-        {
-          "object": "LayoutBlockFlow (anonymous)",
-          "reason": "forced by layout"
-        },
-        {
-          "object": "LayoutInline SPAN id='outer'",
-          "reason": "style change"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (anonymous)",
+      "reason": "invalidate paint rectangle"
+    },
+    {
+      "object": "LayoutInline SPAN id='outer'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutBlockFlow (anonymous)",
+      "reason": "invalidate paint rectangle"
+    },
+    {
+      "object": "LayoutInline SPAN id='outer'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutBlockFlow (anonymous)",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutInline SPAN id='outer'",
+      "reason": "style change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/outline-inset-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/outline-inset-expected.txt
index 0d806d4..f0354d1 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/outline-inset-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/outline-inset-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -28,6 +30,24 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "outline"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='a'",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "outline"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='b'",
+      "reason": "incremental"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/outline-repaint-glitch-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/outline-repaint-glitch-expected.txt
index d963ada..83a53e6 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/outline-repaint-glitch-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/outline-repaint-glitch-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -28,6 +30,24 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "outline"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='a'",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "outline"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='b'",
+      "reason": "incremental"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/outline-shrinking-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/outline-shrinking-expected.txt
index 615fe47..ed2de3f1 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/outline-shrinking-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/outline-shrinking-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -13,6 +15,12 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV id='t'",
+      "reason": "style change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/overflow-delete-line-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/overflow-delete-line-expected.txt
index 524bbe66..dc9c4cc2 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/overflow-delete-line-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/overflow-delete-line-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -15,25 +17,23 @@
           "object": "LayoutText #text",
           "rect": [8, 74, 80, 19],
           "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ''",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ''",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Lorem ipsu'",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV id='dv'",
+      "reason": "invalidate paint rectangle"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "full"
+    },
+    {
+      "object": "InlineTextBox 'Lorem ipsu'",
+      "reason": "full"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/overflow-scroll-body-appear-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/overflow-scroll-body-appear-expected.txt
index e9f593e2..7128e47 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/overflow-scroll-body-appear-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/overflow-scroll-body-appear-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [2008, 2096],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [2008, 2096],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -45,45 +47,47 @@
           "object": "LayoutView #document",
           "rect": [785, 585, 15, 15],
           "reason": "scroll"
-        },
-        {
-          "object": "InlineTextBox '.'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Bug 36461 - No vertical scrollbar after the CSS class change'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'This is the test for '",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'You should see both vertical and horizontal scrollbars.'",
-          "reason": "full"
-        },
-        {
-          "object": "LayoutView #document",
-          "reason": "scroll"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutView #document",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutView #document",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutBlockFlow BODY",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutBlockFlow P",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutBlockFlow P",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutView #document",
+      "reason": "scroll"
+    },
+    {
+      "object": "LayoutView #document",
+      "reason": "scroll"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/overflow-scroll-delete-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/overflow-scroll-delete-expected.txt
index ea19ae2..186efa7a 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/overflow-scroll-delete-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/overflow-scroll-delete-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -15,33 +17,27 @@
           "object": "LayoutText #text",
           "rect": [8, 136, 43, 17],
           "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ''",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ''",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Passed'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Test'",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV id='t'",
+      "reason": "invalidate paint rectangle"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "full"
+    },
+    {
+      "object": "InlineTextBox 'Passed'",
+      "reason": "full"
+    },
+    {
+      "object": "InlineTextBox 'Test'",
+      "reason": "full"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/overhanging-float-detach-repaint-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/overhanging-float-detach-repaint-expected.txt
index 8f265733..01da8f9 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/overhanging-float-detach-repaint-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/overhanging-float-detach-repaint-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -10,13 +12,19 @@
           "object": "LayoutBlockFlow (floating) DIV class='float'",
           "rect": [8, 68, 100, 100],
           "reason": "layoutObject removal"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='floatContainer'",
-          "reason": "layoutObject removal"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (floating) DIV class='float'",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='floatContainer'",
+      "reason": "layoutObject removal"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/paint-invalidation-with-reparent-across-frame-boundaries-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/paint-invalidation-with-reparent-across-frame-boundaries-expected.txt
index 9e63b2e1..f46b745 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/paint-invalidation-with-reparent-across-frame-boundaries-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/paint-invalidation-with-reparent-across-frame-boundaries-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -30,25 +32,27 @@
           "object": "LayoutText #text",
           "rect": [8, 187, 22, 19],
           "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'abc'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'abc'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV id='inner-target'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'abc'",
+      "reason": "layoutObject insertion"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/positioned-document-element-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/positioned-document-element-expected.txt
index f67124fb..a9d0f79 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/positioned-document-element-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/positioned-document-element-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -51,25 +53,39 @@
           "object": "LayoutText #text",
           "rect": [8, 16, 402, 19],
           "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'Tests that the entire viewport is painted with a floated html element.'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Tests that the entire viewport is painted with a floated html element.'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutView #document",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutBlockFlow (positioned) HTML class='changed'",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutBlockFlow BODY",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow P",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox 'Tests that the entire viewport is painted with a floated html element.'",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/positioned-great-grandparent-change-location-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/positioned-great-grandparent-change-location-expected.txt
index c412e29..3669620 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/positioned-great-grandparent-change-location-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/positioned-great-grandparent-change-location-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -25,29 +27,39 @@
           "object": "LayoutText #text",
           "rect": [100, 100, 38, 19],
           "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'Target'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutBlockFlow (positioned) DIV",
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutBlockFlow (positioned) DIV",
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutBlockFlow (positioned) DIV id='great-grandparent'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='great-grandparent'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow (positioned) DIV",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow (positioned) DIV",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow (positioned) DIV",
+      "reason": "bounds change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox 'Target'",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/positioned-list-offset-change-repaint-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/positioned-list-offset-change-repaint-expected.txt
index 08316ff..08529d1 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/positioned-list-offset-change-repaint-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/positioned-list-offset-change-repaint-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -15,33 +17,31 @@
           "object": "LayoutImage IMG",
           "rect": [8, 64, 214, 232],
           "reason": "location change"
-        },
-        {
-          "object": "InlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "LayoutListMarker (anonymous)",
-          "reason": "none"
-        },
-        {
-          "object": "LayoutText #text",
-          "reason": "none"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutListItem (positioned) LI",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutListMarker (anonymous)",
+      "reason": "none"
+    },
+    {
+      "object": "LayoutImage IMG",
+      "reason": "location change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "none"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/quotes-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/quotes-expected.txt
index c9a871f..0be4a44 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/quotes-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/quotes-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -35,57 +37,59 @@
           "object": "LayoutTextFragment (anonymous)",
           "rect": [61, 28, 8, 19],
           "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox ''",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ''",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ''",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'quote 2'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '{'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '}'",
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutInline \u003Cpseudo:after\u003E",
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutInline \u003Cpseudo:before\u003E",
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutInline Q id='q2' class='q-changed'",
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutQuote (anonymous)",
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutQuote (anonymous)",
-          "reason": "style change"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "invalidate paint rectangle"
+    },
+    {
+      "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/fast/repaint/reflection-redraw-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/reflection-redraw-expected.txt
index eaaf6f9..190b68ea 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/reflection-redraw-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/reflection-redraw-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -25,57 +27,75 @@
           "object": "LayoutText #text",
           "rect": [306, 377, 124, 156],
           "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox 'The color of this text'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox 'The color of this text'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox 'The color of this text'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox 'The color of this text'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox 'in the reflection'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox 'in the reflection'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox 'in the reflection'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox 'in the reflection'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox 'should be green'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox 'should be green'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox 'should be green'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox 'should be green'",
-          "reason": "style change"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutText #text",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox 'The color of this text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '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 text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '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 text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '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 text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox 'in the reflection'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox 'should be green'",
+      "reason": "style change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/rel-positioned-inline-with-overflow-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/rel-positioned-inline-with-overflow-expected.txt
index 200a0923..ccf6a4f 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/rel-positioned-inline-with-overflow-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/rel-positioned-inline-with-overflow-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -13,6 +15,12 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV id='target'",
+      "reason": "style change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/relative-inline-positioned-movement-repaint-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/relative-inline-positioned-movement-repaint-expected.txt
index 15c1dc7..ac727d02 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/relative-inline-positioned-movement-repaint-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/relative-inline-positioned-movement-repaint-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -10,31 +12,24 @@
           "object": "LayoutBlockFlow BODY",
           "rect": [8, 7, 784, 21],
           "reason": "invalidate paint rectangle"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ],
       "children": [
         {
+          "name": "LayoutInline (relative positioned) DIV id='block'",
           "position": [68, 7],
           "bounds": [348, 21],
           "drawsContent": true,
-          "backfaceVisibility": "hidden",
-          "paintInvalidations": [
-            {
-              "object": "InlineFlowBox",
-              "reason": "full"
-            },
-            {
-              "object": "InlineTextBox 'When this layer moves it shouldn't generate a repaint rect.'",
-              "reason": "full"
-            }
-          ]
+          "backfaceVisibility": "hidden"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow BODY",
+      "reason": "invalidate paint rectangle"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/remove-block-after-layout-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/remove-block-after-layout-expected.txt
index a328466..dec9edf 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/remove-block-after-layout-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/remove-block-after-layout-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -15,25 +17,19 @@
           "object": "LayoutText #text",
           "rect": [8, 108, 90, 39],
           "reason": "layoutObject removal"
-        },
-        {
-          "object": "InlineTextBox 'This div should'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'disappear.'",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutText #text",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='target'",
+      "reason": "layoutObject removal"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/remove-inline-after-layout-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/remove-inline-after-layout-expected.txt
index acd25bf..26679fb5 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/remove-inline-after-layout-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/remove-inline-after-layout-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -25,57 +27,27 @@
           "object": "LayoutBlockFlow DIV",
           "rect": [112, 108, 100, 100],
           "reason": "bounds change"
-        },
-        {
-          "object": "InlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'This span should disappear.\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'This span should disappear.\n'",
-          "reason": "full"
-        },
-        {
-          "object": "LayoutInline SPAN id='target'",
-          "reason": "layoutObject removal"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutText #text",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutInline SPAN id='target'",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutBlockFlow (anonymous)",
+      "reason": "invalidate paint rectangle"
+    },
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/remove-inline-layer-after-layout-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/remove-inline-layer-after-layout-expected.txt
index dc03e88..ba59ecf9 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/remove-inline-layer-after-layout-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/remove-inline-layer-after-layout-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -30,57 +32,27 @@
           "object": "LayoutBlockFlow DIV",
           "rect": [112, 108, 100, 100],
           "reason": "bounds change"
-        },
-        {
-          "object": "InlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'This span should disappear.\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'This span should disappear.\n'",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutText #text",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutInline SPAN id='target'",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutBlockFlow (anonymous)",
+      "reason": "invalidate paint rectangle"
+    },
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/repaint-descandant-on-ancestor-layer-move-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/repaint-descandant-on-ancestor-layer-move-expected.txt
index 873f5a1..5320705 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/repaint-descandant-on-ancestor-layer-move-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/repaint-descandant-on-ancestor-layer-move-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -35,25 +37,39 @@
           "object": "LayoutText #text",
           "rect": [28, 38, 256, 19],
           "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'There should only be one copy of this text.'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutText #text",
-          "reason": "bounds change"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='container'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow (relative positioned) DIV",
+      "reason": "bounds change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox 'There should only be one copy of this text.'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/repaint-during-scroll-with-zoom-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/repaint-during-scroll-with-zoom-expected.txt
index 0ffecfa..35fb4f8 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/repaint-during-scroll-with-zoom-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/repaint-during-scroll-with-zoom-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -61,25 +63,15 @@
           "object": "LayoutView #document",
           "rect": [237, 300, 15, 15],
           "reason": "scroll"
-        },
-        {
-          "object": "HorizontalScrollbar",
-          "reason": "scroll"
-        },
-        {
-          "object": "InlineTextBox 'scroll me'",
-          "reason": "subtree"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "VerticalScrollbar",
-          "reason": "scroll"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutIFrame (positioned) IFRAME",
+      "reason": "invalidate paint rectangle"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/repaint-resized-overflow-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/repaint-resized-overflow-expected.txt
index 6020a67..da3ec39 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/repaint-resized-overflow-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/repaint-resized-overflow-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -23,6 +25,16 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV id='s'",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='t'",
+      "reason": "incremental"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/replaced-clipped-positioned-not-wrong-incremental-repainting-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/replaced-clipped-positioned-not-wrong-incremental-repainting-expected.txt
index ad7146be..e45e6931 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/replaced-clipped-positioned-not-wrong-incremental-repainting-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/replaced-clipped-positioned-not-wrong-incremental-repainting-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -15,17 +17,27 @@
           "object": "LayoutImage IMG",
           "rect": [8, 8, 194, 232],
           "reason": "location change"
-        },
-        {
-          "object": "LayoutText #text",
-          "reason": "none"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (relative positioned) (floating) DIV class='imgContainer'",
+      "reason": "location change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "location change"
+    },
+    {
+      "object": "LayoutImage IMG",
+      "reason": "location change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "none"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/resize-scrollable-iframe-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/resize-scrollable-iframe-expected.txt
index d31aa2bf..c0fc9fcb 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/resize-scrollable-iframe-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/resize-scrollable-iframe-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -70,33 +72,27 @@
           "object": "LayoutView #document",
           "rect": [93, 193, 15, 15],
           "reason": "scroll"
-        },
-        {
-          "object": "HorizontalScrollbar",
-          "reason": "scroll"
-        },
-        {
-          "object": "InlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "LayoutView #document",
-          "reason": "scroll"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "VerticalScrollbar",
-          "reason": "scroll"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (anonymous)",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutBlockFlow (anonymous)",
+      "reason": "invalidate paint rectangle"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutIFrame IFRAME id='iframe'",
+      "reason": "incremental"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/scroll-stacking-context-backface-visiblity-leaves-traces-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/scroll-stacking-context-backface-visiblity-leaves-traces-expected.txt
index 9b57b62f..9db93c9 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/scroll-stacking-context-backface-visiblity-leaves-traces-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/scroll-stacking-context-backface-visiblity-leaves-traces-expected.txt
@@ -1,12 +1,15 @@
 {
+  "name": "Content Root Layer",
   "bounds": [785, 5056],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [785, 5056],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow (relative positioned) HEADER",
           "position": [8, 28],
           "bounds": [769, 1972],
           "drawsContent": true,
@@ -36,6 +39,16 @@
         }
       ]
     }
+  ],
+  "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/fast/repaint/search-field-cancel-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/search-field-cancel-expected.txt
index 9d90592..6b715ff 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/search-field-cancel-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/search-field-cancel-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -15,17 +17,27 @@
           "object": "LayoutText #text",
           "rect": [11, 47, 58, 16],
           "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'some text'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV id='inner-editor'",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'some text'",
+      "reason": "layoutObject insertion"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/select-option-background-color-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/select-option-background-color-expected.txt
index 0b503e8d..056b86a 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/select-option-background-color-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/select-option-background-color-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -10,13 +12,19 @@
           "object": "LayoutBlockFlow OPTION id='option'",
           "rect": [1, 37, 13, 17],
           "reason": "style change"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow OPTION id='option'",
+      "reason": "style change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "style change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/selection-after-delete-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/selection-after-delete-expected.txt
index 01dc5739..0009963 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/selection-after-delete-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/selection-after-delete-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -30,81 +32,39 @@
           "object": "LayoutBlockFlow DIV id='test'",
           "rect": [38, 78, 3, 21],
           "reason": "invalidate paint rectangle"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox ' '",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ' '",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ' '",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ' '",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'hello world hello world'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'hello world hello world'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'hello world hello world'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'hello world hello world'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'hello'",
-          "reason": "full"
-        },
-        {
-          "object": "LayoutBR BR",
-          "reason": "bounds change"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutText #text",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='test'",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='test'",
+      "reason": "invalidate paint rectangle"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutBR BR",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='test'",
+      "reason": "invalidate paint rectangle"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/selection-after-remove-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/selection-after-remove-expected.txt
index da6becd4..f7ef49b 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/selection-after-remove-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/selection-after-remove-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -40,121 +42,75 @@
           "object": "LayoutText #text",
           "rect": [39, 79, 32, 19],
           "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox ' '",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ' '",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ' '",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ' '",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ' world'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'hello '",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'hello '",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox 'hello world hello world'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'hello world hello world'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'hello world hello world'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'hello'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'world hello world'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'world'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'world'",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutBR BR",
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutBlockFlow BODY",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='test'",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutBlockFlow HTML",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutInline SPAN id='removeme'",
-          "reason": "layoutObject removal"
-        },
-        {
-          "object": "LayoutText #text",
-          "reason": "selection"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutText #text",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutInline SPAN id='removeme'",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutBlockFlow HTML",
+      "reason": "selection"
+    },
+    {
+      "object": "LayoutBlockFlow BODY",
+      "reason": "selection"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='test'",
+      "reason": "selection"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='test'",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='test'",
+      "reason": "invalidate paint rectangle"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "selection"
+    },
+    {
+      "object": "InlineTextBox 'hello '",
+      "reason": "selection"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "selection"
+    },
+    {
+      "object": "InlineTextBox 'world'",
+      "reason": "selection"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox 'world'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBR BR",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/selection-clear-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/selection-clear-expected.txt
index 890e3631..2be43ef 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/selection-clear-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/selection-clear-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -30,81 +32,83 @@
           "object": "LayoutText #text",
           "rect": [8, 48, 8, 19],
           "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox 'FAIL: Test did'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'not run'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox '\u00A0'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '\u00A0'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "LayoutBR BR",
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutBR BR",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutBlockFlow (anonymous)",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutBlockFlow BODY",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='firstLine'",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='root'",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutBlockFlow HTML",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutText #text",
-          "reason": "selection"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutText #text",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutBlockFlow HTML",
+      "reason": "selection"
+    },
+    {
+      "object": "LayoutBlockFlow BODY",
+      "reason": "selection"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='root'",
+      "reason": "selection"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='firstLine'",
+      "reason": "selection"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='firstLine'",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "selection"
+    },
+    {
+      "object": "InlineTextBox '\u00A0'",
+      "reason": "selection"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox '\u00A0'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutBlockFlow (anonymous)",
+      "reason": "selection"
+    },
+    {
+      "object": "LayoutBlockFlow (anonymous)",
+      "reason": "bounds change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBR BR",
+      "reason": "selection"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "selection"
+    },
+    {
+      "object": "LayoutBR BR",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/selection-partial-invalidation-between-blocks-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/selection-partial-invalidation-between-blocks-expected.txt
index 19b9f91..16732ee 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/selection-partial-invalidation-between-blocks-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/selection-partial-invalidation-between-blocks-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -25,45 +27,63 @@
           "object": "LayoutText #text",
           "rect": [63, 11, 3, 19],
           "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'First cell'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'First cell'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox 'Second cell'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'Second cell'",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutBlockFlow BODY",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutBlockFlow HTML",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutTable TABLE",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutTableCell TD id='firstCell'",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutTableCell TD id='secondCell'",
-          "reason": "selection"
         }
       ]
     }
+  ],
+  "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": "selection"
+    },
+    {
+      "object": "InlineTextBox 'First cell'",
+      "reason": "selection"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "incremental"
+    },
+    {
+      "object": "InlineTextBox 'First cell'",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutTableCell TD id='secondCell'",
+      "reason": "selection"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "selection"
+    },
+    {
+      "object": "InlineTextBox 'Second cell'",
+      "reason": "selection"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "incremental"
+    },
+    {
+      "object": "InlineTextBox 'Second cell'",
+      "reason": "incremental"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/selection-rl-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/selection-rl-expected.txt
index a454e7b..b68afc2 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/selection-rl-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/selection-rl-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -10,21 +12,27 @@
           "object": "LayoutText #text",
           "rect": [773, 43, 19, 77],
           "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox 'Testing both hit testing'",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutBlockFlow BODY",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutBlockFlow HTML",
-          "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/fast/repaint/shift-relative-positioned-container-with-image-addition-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/shift-relative-positioned-container-with-image-addition-expected.txt
index 833276e..e5b79f8 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/shift-relative-positioned-container-with-image-addition-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/shift-relative-positioned-container-with-image-addition-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [785, 836],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [785, 836],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -70,25 +72,43 @@
           "object": "LayoutImage IMG",
           "rect": [58, 142, 489, 537],
           "reason": "bounds change"
-        },
-        {
-          "object": "LayoutText #text",
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutView #document",
-          "reason": "scroll"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "VerticalScrollbar",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutView #document",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutBlockFlow HTML",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutIFrame IFRAME id='iframe'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutBlockFlow (relative positioned) DIV class='relative'",
+      "reason": "bounds change"
+    },
+    {
+      "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": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/shift-relative-positioned-container-with-image-removal-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/shift-relative-positioned-container-with-image-removal-expected.txt
index d77457dc..b7b347c0 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/shift-relative-positioned-container-with-image-removal-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/shift-relative-positioned-container-with-image-removal-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [785, 742],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [785, 742],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -55,29 +57,51 @@
           "object": "LayoutImage IMG",
           "rect": [58, 142, 489, 537],
           "reason": "bounds change"
-        },
-        {
-          "object": "InlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "LayoutText #text",
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutText #text",
-          "reason": "layoutObject removal"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "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 HTML",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutBlockFlow (relative positioned) DIV class='relative'",
+      "reason": "bounds change"
+    },
+    {
+      "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": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/stacked-diacritics-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/stacked-diacritics-expected.txt
index 2d61a77..b60c7919 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/stacked-diacritics-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/stacked-diacritics-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -10,17 +12,15 @@
           "object": "LayoutText #text",
           "rect": [19, 148, 126, 41],
           "reason": "layoutObject removal"
-        },
-        {
-          "object": "InlineTextBox '\u1EA6\u1EA4\u1EAA\u1EA8\u1EB0'",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutText #text",
+      "reason": "layoutObject removal"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/static-to-positioned-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/static-to-positioned-expected.txt
index 3e72e18..3f2edac 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/static-to-positioned-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/static-to-positioned-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -28,6 +30,16 @@
         }
       ]
     }
+  ],
+  "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/linux/fast/repaint/subtree-layoutstate-transform-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/subtree-layoutstate-transform-expected.txt
index 6d1bb48b..611731d 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/subtree-layoutstate-transform-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/subtree-layoutstate-transform-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -23,6 +25,16 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV class='layoutroot'",
+      "reason": "background obscuration change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='target'",
+      "reason": "incremental"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/subtree-root-skipped-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/subtree-root-skipped-expected.txt
index 9b343b1f..dfe3f39 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/subtree-root-skipped-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/subtree-root-skipped-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -20,21 +22,27 @@
           "object": "LayoutBlockFlow (positioned) DIV id='div'",
           "rect": [8, 288, 10, 20],
           "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox ''",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'PASS'",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV id='inner-editor'",
+      "reason": "invalidate paint rectangle"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "full"
+    },
+    {
+      "object": "InlineTextBox 'PASS'",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='div'",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/table-cell-collapsed-border-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/table-cell-collapsed-border-expected.txt
index e733ea0..cb2dc57c 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/table-cell-collapsed-border-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/table-cell-collapsed-border-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -20,53 +22,67 @@
           "object": "LayoutTableCell TD id='t2'",
           "rect": [3, 264, 118, 110],
           "reason": "style change"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "reason": "full"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "reason": "full"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "reason": "full"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "reason": "full"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "reason": "full"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "reason": "full"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "reason": "full"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "reason": "full"
-        },
-        {
-          "object": "LayoutTableCell TD id='t1'",
-          "reason": "full"
-        },
-        {
-          "object": "LayoutTableCell TD id='t2'",
-          "reason": "full"
-        },
-        {
-          "object": "LayoutTableCell TD id='t3'",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutTableCell TD",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutTableCell TD id='t1'",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutTableCell TD",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutTableCell TD",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutTableCell TD",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutTableCell TD id='t2'",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutTableCell TD",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutTableCell TD id='t3'",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutTableCell TD",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutTableCell TD",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutTableCell TD",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutTableCell TD id='t1'",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutTableCell TD id='t2'",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutTableCell TD id='t3'",
+      "reason": "style change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/table-cell-move-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/table-cell-move-expected.txt
index 6b357736..13dbbee 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/table-cell-move-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/table-cell-move-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -50,21 +52,47 @@
           "object": "LayoutTableCell TD",
           "rect": [8, 146, 60, 60],
           "reason": "became visible"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutTableCell TD id='s'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutTableCell TD id='t'",
-          "reason": "became visible"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutTableCell TD",
+      "reason": "became visible"
+    },
+    {
+      "object": "LayoutTableCell TD id='t'",
+      "reason": "became visible"
+    },
+    {
+      "object": "LayoutTableRow TR",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutTableCell TD",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutTableCell TD",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutTableRow TR",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutTableCell TD",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutTableCell TD id='s'",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/table-collapsed-border-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/table-collapsed-border-expected.txt
index 88e105a9..5c6bea4 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/table-collapsed-border-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/table-collapsed-border-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -90,113 +92,123 @@
           "object": "LayoutTable TABLE",
           "rect": [78, 286, 25, 82],
           "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'Lorem'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Lorem'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'dolor'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'ipsum dolor'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'ipsum dolor'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'ipsum dolor'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'sit amet'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'sit amet'",
-          "reason": "full"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "reason": "full"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "reason": "full"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "reason": "full"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "reason": "full"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "reason": "full"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutText #text",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutTableCell TD id='d'",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutTableCell TD id='d2'",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutTableCell TD",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutTableCell TD",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutTableCell TD",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutTableCell TD",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutTableCell TD",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutTableCell TD",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutTable TABLE id='t'",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutTable TABLE",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutTableSection TBODY",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutTableCell TD",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutTableCell TD",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutTable TABLE",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutTableSection TBODY",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutTable TABLE",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutTableCell TD",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutTableCell TD id='d3'",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'ipsum dolor'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutTableCell TD",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "forced by layout"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/table-shrink-row-repaint-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/table-shrink-row-repaint-expected.txt
index e252db0a..672d4de2 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/table-shrink-row-repaint-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/table-shrink-row-repaint-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [785, 850],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [785, 850],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -385,105 +387,263 @@
           "object": "LayoutText #text",
           "rect": [13, 142, 8, 19],
           "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox '10'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox '11'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox '12'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox '13'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox '2'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox '3'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox '4'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox '5'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox '6'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox '7'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox '8'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox '9'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutView #document",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutBlockFlow HTML",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutTableCell TD id='resizeMe'",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutTableRow TR",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutTableCell TD",
+      "reason": "bounds change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox '2'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutTableRow TR",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutTableCell TD",
+      "reason": "bounds change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox '3'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutTableRow TR",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutTableCell TD",
+      "reason": "bounds change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox '4'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutTableRow TR",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutTableCell TD",
+      "reason": "bounds change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox '5'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutTableRow TR",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutTableCell TD",
+      "reason": "bounds change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox '6'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutTableRow TR",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutTableCell TD",
+      "reason": "bounds change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox '7'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutTableRow TR",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutTableCell TD",
+      "reason": "bounds change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox '8'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutTableRow TR",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutTableCell TD",
+      "reason": "bounds change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox '9'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutTableRow TR",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutTableCell TD",
+      "reason": "bounds change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox '10'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutTableRow TR",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutTableCell TD",
+      "reason": "bounds change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox '11'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutTableRow TR",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutTableCell TD",
+      "reason": "bounds change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox '12'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutTableRow TR",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutTableCell TD",
+      "reason": "bounds change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox '13'",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/text-append-dirty-lines-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/text-append-dirty-lines-expected.txt
index d40aa55a..f91c2eb 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/text-append-dirty-lines-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/text-append-dirty-lines-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -15,49 +17,43 @@
           "object": "LayoutText #text",
           "rect": [8, 44, 782, 119],
           "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 'Quisque enim metus, luctus tincidunt, vestibulum eu, vestibulum eu, libero. Mauris sagittis aliquam nunc. Nullam pharetra molestie'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Quisque enim metus, luctus tincidunt, vestibulum eu, vestibulum eu, libero. Mauris sagittis aliquam nunc. Nullam pharetra molestie'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'eros. Donec tempus purus ut ligula. Phasellus non nisl. Etiam eu mauris. Curabitur a velit'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'eros. Donec tempus purus ut ligula. Phasellus non nisl. Etiam eu mauris. Curabitur a velit.'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'feugiat. Phasellus mollis pulvinar mi. Etiam ut neque sed eros egestas laoreet. Vestibulum ullamcorper, nulla non feugiat molestie, mi'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'lorem bibendum leo, ac gravida orci nunc nec nulla. Nunc nunc lorem, rhoncus et, rutrum ac, fermentum ut, tortor. Sed rhoncus.'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'pellentesque cursus. Proin vitae nulla. Vivamus in ipsum. Etiam mi. Nam malesuada purus in sem. Sed eget elit vel erat laoreet'",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow P id='target'",
+      "reason": "invalidate paint rectangle"
+    },
+    {
+      "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 laoreet'",
+      "reason": "full"
+    },
+    {
+      "object": "InlineTextBox 'feugiat. Phasellus mollis pulvinar mi. Etiam ut neque sed eros egestas laoreet. Vestibulum ullamcorper, nulla non feugiat molestie, mi'",
+      "reason": "full"
+    },
+    {
+      "object": "InlineTextBox 'lorem bibendum leo, ac gravida orci nunc nec nulla. Nunc nunc lorem, rhoncus et, rutrum ac, fermentum ut, tortor. Sed rhoncus.'",
+      "reason": "full"
+    },
+    {
+      "object": "InlineTextBox 'Quisque enim metus, luctus tincidunt, vestibulum eu, vestibulum eu, libero. Mauris sagittis aliquam nunc. Nullam pharetra molestie'",
+      "reason": "full"
+    },
+    {
+      "object": "InlineTextBox 'eros. Donec tempus purus ut ligula. Phasellus non nisl. Etiam eu mauris. Curabitur a velit.'",
+      "reason": "full"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/text-match-document-change-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/text-match-document-change-expected.txt
index 240021e..19ae42f 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/text-match-document-change-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/text-match-document-change-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -35,34 +37,6 @@
           "object": "LayoutView #document",
           "rect": [295, 102, 15, 400],
           "reason": "scroll"
-        },
-        {
-          "object": "InlineTextBox 'After change'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'Find-in-page 'findme', then click here)'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'To be changed: findme (Manual testing:'",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "VerticalScrollbar",
-          "reason": "scroll"
         }
       ]
     }
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/text-selection-rect-in-overflow-2-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/text-selection-rect-in-overflow-2-expected.txt
index a1637c6..a9dcce6 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/text-selection-rect-in-overflow-2-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/text-selection-rect-in-overflow-2-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -10,22 +12,6 @@
           "object": "LayoutText #text",
           "rect": [18, 18, 215, 19],
           "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox 'Should have blue, not gray, highlight'",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutBlockFlow BODY",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='t'",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutBlockFlow HTML",
-          "reason": "selection"
         }
       ]
     }
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/text-selection-rect-in-overflow-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/text-selection-rect-in-overflow-expected.txt
index 690c961..87d475f 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/text-selection-rect-in-overflow-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/text-selection-rect-in-overflow-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -10,13 +12,19 @@
           "object": "LayoutText #text",
           "rect": [8, 8, 187, 19],
           "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox 'Should have green background'",
-          "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/fast/repaint/transform-absolute-in-positioned-container-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/transform-absolute-in-positioned-container-expected.txt
index 5b32cc4..51bde7b 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/transform-absolute-in-positioned-container-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/transform-absolute-in-positioned-container-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [802, 585],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [802, 585],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -13,6 +15,12 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (relative positioned) DIV id='box' class='rotated'",
+      "reason": "subtree"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/transform-inline-layered-child-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/transform-inline-layered-child-expected.txt
index 935a6a3..50c02dac 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/transform-inline-layered-child-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/transform-inline-layered-child-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -35,85 +37,103 @@
           "object": "LayoutText #text",
           "rect": [151, 87, 1, 1],
           "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": "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": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "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"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/transform-layout-repaint-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/transform-layout-repaint-expected.txt
index ffad95e..4bcc647 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/transform-layout-repaint-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/transform-layout-repaint-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -15,21 +17,23 @@
           "object": "LayoutText #text",
           "rect": [52, 51, 42, 31],
           "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ''",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'PASS'",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV id='target'",
+      "reason": "invalidate paint rectangle"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "full"
+    },
+    {
+      "object": "InlineTextBox 'PASS'",
+      "reason": "full"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/transform-relative-position-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/transform-relative-position-expected.txt
index f6269399..a3947fae 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/transform-relative-position-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/transform-relative-position-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -13,6 +15,12 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (relative positioned) DIV id='box' class='rotated'",
+      "reason": "subtree"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/transform-repaint-descendants-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/transform-repaint-descendants-expected.txt
index b9c3755..94cb96d 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/transform-repaint-descendants-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/transform-repaint-descendants-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -23,6 +25,16 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (relative positioned) DIV id='box'",
+      "reason": "subtree"
+    },
+    {
+      "object": "LayoutBlockFlow (positioned) DIV",
+      "reason": "subtree"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/vertical-align-length1-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/vertical-align-length1-expected.txt
index 774436b..51cf1d9 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/vertical-align-length1-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/vertical-align-length1-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -35,29 +37,31 @@
           "object": "LayoutBlockFlow DIV class='other'",
           "rect": [0, 100, 20, 20],
           "reason": "bounds change"
-        },
-        {
-          "object": "InlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow BODY",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutBlockFlow BODY",
+      "reason": "invalidate paint rectangle"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutBlockFlow DIV class='other'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV class='other'",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/vertical-align-length2-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/vertical-align-length2-expected.txt
index a5bb72f..d6c9cb2 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/vertical-align-length2-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/vertical-align-length2-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -20,25 +22,19 @@
           "object": "LayoutBlockFlow DIV id='target'",
           "rect": [200, 50, 100, 100],
           "reason": "bounds change"
-        },
-        {
-          "object": "InlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow BODY",
+      "reason": "invalidate paint rectangle"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='target'",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/vertical-align1-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/vertical-align1-expected.txt
index f5767f83..04a3376b 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/vertical-align1-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/vertical-align1-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -35,29 +37,31 @@
           "object": "LayoutBlockFlow DIV class='other'",
           "rect": [0, 33, 20, 20],
           "reason": "bounds change"
-        },
-        {
-          "object": "InlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow BODY",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutBlockFlow BODY",
+      "reason": "invalidate paint rectangle"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutBlockFlow DIV class='other'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV class='other'",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/vertical-align2-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/vertical-align2-expected.txt
index 5d811ac..add331a 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/vertical-align2-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/vertical-align2-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -25,29 +27,27 @@
           "object": "LayoutBlockFlow DIV id='target'",
           "rect": [200, 100, 100, 100],
           "reason": "bounds change"
-        },
-        {
-          "object": "InlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow BODY",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutBlockFlow BODY",
+      "reason": "invalidate paint rectangle"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='target'",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/window-resize-background-image-fixed-centered-composited-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/window-resize-background-image-fixed-centered-composited-expected.txt
new file mode 100644
index 0000000..276db1195
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/window-resize-background-image-fixed-centered-composited-expected.txt
@@ -0,0 +1,168 @@
+{
+  "name": "Content Root Layer",
+  "bounds": [600, 250],
+  "children": [
+    {
+      "name": "LayoutView #document",
+      "bounds": [600, 250],
+      "drawsContent": true,
+      "paintInvalidations": [
+        {
+          "object": "LayoutView #document",
+          "rect": [0, 250, 600, 250],
+          "reason": "incremental"
+        },
+        {
+          "object": "LayoutBlockFlow HTML",
+          "rect": [0, 0, 600, 8],
+          "reason": "forced by layout"
+        }
+      ]
+    }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutView #document",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutBlockFlow HTML",
+      "reason": "forced by layout"
+    }
+  ]
+}
+{
+  "name": "Content Root Layer",
+  "bounds": [400, 250],
+  "children": [
+    {
+      "name": "LayoutView #document",
+      "bounds": [400, 250],
+      "drawsContent": true,
+      "paintInvalidations": [
+        {
+          "object": "LayoutBlockFlow HTML",
+          "rect": [0, 0, 600, 8],
+          "reason": "forced by layout"
+        },
+        {
+          "object": "LayoutView #document",
+          "rect": [0, 0, 400, 250],
+          "reason": "full"
+        },
+        {
+          "object": "LayoutView #document",
+          "rect": [400, 0, 200, 250],
+          "reason": "incremental"
+        }
+      ]
+    }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutView #document",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutView #document",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutBlockFlow HTML",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutBlockFlow BODY",
+      "reason": "became visible"
+    }
+  ]
+}
+{
+  "name": "Content Root Layer",
+  "bounds": [400, 600],
+  "children": [
+    {
+      "name": "LayoutView #document",
+      "bounds": [400, 600],
+      "drawsContent": true,
+      "paintInvalidations": [
+        {
+          "object": "LayoutView #document",
+          "rect": [0, 0, 400, 600],
+          "reason": "full"
+        },
+        {
+          "object": "LayoutView #document",
+          "rect": [0, 250, 400, 350],
+          "reason": "incremental"
+        },
+        {
+          "object": "LayoutBlockFlow HTML",
+          "rect": [0, 0, 400, 8],
+          "reason": "forced by layout"
+        }
+      ]
+    }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutView #document",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutView #document",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutBlockFlow HTML",
+      "reason": "forced by layout"
+    }
+  ]
+}
+{
+  "name": "Content Root Layer",
+  "bounds": [800, 600],
+  "children": [
+    {
+      "name": "LayoutView #document",
+      "bounds": [800, 600],
+      "drawsContent": true,
+      "paintInvalidations": [
+        {
+          "object": "LayoutView #document",
+          "rect": [0, 0, 800, 600],
+          "reason": "full"
+        },
+        {
+          "object": "LayoutBlockFlow HTML",
+          "rect": [0, 0, 800, 8],
+          "reason": "forced by layout"
+        },
+        {
+          "object": "LayoutView #document",
+          "rect": [400, 0, 400, 600],
+          "reason": "incremental"
+        }
+      ]
+    }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutView #document",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutView #document",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutBlockFlow HTML",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutBlockFlow BODY",
+      "reason": "became visible"
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/window-resize-background-image-fixed-centered-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/window-resize-background-image-fixed-centered-expected.txt
new file mode 100644
index 0000000..d1c60991
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/repaint/window-resize-background-image-fixed-centered-expected.txt
@@ -0,0 +1,181 @@
+{
+  "name": "Content Root Layer",
+  "bounds": [600, 250],
+  "children": [
+    {
+      "name": "LayoutView #document",
+      "bounds": [600, 250],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "paintInvalidations": [
+        {
+          "object": "LayoutView #document",
+          "rect": [0, 250, 600, 250],
+          "reason": "incremental"
+        },
+        {
+          "object": "LayoutView #document",
+          "rect": [0, 0, 600, 250],
+          "reason": "full"
+        },
+        {
+          "object": "LayoutBlockFlow HTML",
+          "rect": [0, 0, 600, 8],
+          "reason": "forced by layout"
+        }
+      ]
+    }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutView #document",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutView #document",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutBlockFlow HTML",
+      "reason": "forced by layout"
+    }
+  ]
+}
+{
+  "name": "Content Root Layer",
+  "bounds": [400, 250],
+  "children": [
+    {
+      "name": "LayoutView #document",
+      "bounds": [400, 250],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "paintInvalidations": [
+        {
+          "object": "LayoutBlockFlow HTML",
+          "rect": [0, 0, 600, 8],
+          "reason": "forced by layout"
+        },
+        {
+          "object": "LayoutView #document",
+          "rect": [0, 0, 400, 250],
+          "reason": "full"
+        },
+        {
+          "object": "LayoutView #document",
+          "rect": [400, 0, 200, 250],
+          "reason": "incremental"
+        }
+      ]
+    }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutView #document",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutView #document",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutBlockFlow HTML",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutBlockFlow BODY",
+      "reason": "became visible"
+    }
+  ]
+}
+{
+  "name": "Content Root Layer",
+  "bounds": [400, 600],
+  "children": [
+    {
+      "name": "LayoutView #document",
+      "bounds": [400, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "paintInvalidations": [
+        {
+          "object": "LayoutView #document",
+          "rect": [0, 0, 400, 600],
+          "reason": "full"
+        },
+        {
+          "object": "LayoutView #document",
+          "rect": [0, 250, 400, 350],
+          "reason": "incremental"
+        },
+        {
+          "object": "LayoutBlockFlow HTML",
+          "rect": [0, 0, 400, 8],
+          "reason": "forced by layout"
+        }
+      ]
+    }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutView #document",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutView #document",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutBlockFlow HTML",
+      "reason": "forced by layout"
+    }
+  ]
+}
+{
+  "name": "Content Root Layer",
+  "bounds": [800, 600],
+  "children": [
+    {
+      "name": "LayoutView #document",
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "paintInvalidations": [
+        {
+          "object": "LayoutView #document",
+          "rect": [0, 0, 800, 600],
+          "reason": "full"
+        },
+        {
+          "object": "LayoutBlockFlow HTML",
+          "rect": [0, 0, 800, 8],
+          "reason": "forced by layout"
+        },
+        {
+          "object": "LayoutView #document",
+          "rect": [400, 0, 400, 600],
+          "reason": "incremental"
+        }
+      ]
+    }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutView #document",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutView #document",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutBlockFlow HTML",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutBlockFlow BODY",
+      "reason": "became visible"
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/table/border-collapsing/cached-change-cell-sl-border-color-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/fast/table/border-collapsing/cached-change-cell-sl-border-color-expected.txt
index 4949cf6..c294b35 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/table/border-collapsing/cached-change-cell-sl-border-color-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/table/border-collapsing/cached-change-cell-sl-border-color-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -15,25 +17,27 @@
           "object": "LayoutText #text",
           "rect": [90, 30, 11, 19],
           "reason": "layoutObject removal"
-        },
-        {
-          "object": "InlineTextBox 'A'",
-          "reason": "full"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "reason": "full"
-        },
-        {
-          "object": "LayoutTableCell TD id='foo'",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutText #text",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutTableCell TD id='foo'",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutTableCell TD",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutTableCell TD id='foo'",
+      "reason": "style change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/table/resize-table-repaint-percent-size-cell-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/fast/table/resize-table-repaint-percent-size-cell-expected.txt
index fc11c38..5f98a377e 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/table/resize-table-repaint-percent-size-cell-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/table/resize-table-repaint-percent-size-cell-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -60,41 +62,55 @@
           "object": "LayoutText #text",
           "rect": [3, 66, 45, 19],
           "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'ROW1'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'ROW1'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'ROW2'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'ROW2'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutTable (positioned) TABLE id='table'",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutTableRow TR",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutTableCell TD",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox 'ROW1'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutTableRow TR",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutTableCell TD",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox 'ROW2'",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/table/resize-table-repaint-vertical-align-cell-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/fast/table/resize-table-repaint-vertical-align-cell-expected.txt
index 0fb17258..a82e763 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/table/resize-table-repaint-vertical-align-cell-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/table/resize-table-repaint-vertical-align-cell-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -30,25 +32,35 @@
           "object": "LayoutText #text",
           "rect": [3, 90, 59, 19],
           "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'MIDDLE'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'MIDDLE'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutTable (positioned) TABLE id='table'",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutTableRow TR",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutTableCell TD",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox 'MIDDLE'",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/table/resize-table-row-repaint-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/fast/table/resize-table-row-repaint-expected.txt
index c9596c5..41bdb46 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/table/resize-table-row-repaint-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/fast/table/resize-table-row-repaint-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -25,25 +27,31 @@
           "object": "LayoutText #text",
           "rect": [3, 142, 59, 19],
           "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'MIDDLE'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'MIDDLE'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutTableRow TR id='row'",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutTableCell TD",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox 'MIDDLE'",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/caret-with-composited-scroll-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/caret-with-composited-scroll-expected.txt
index c3a1e9b..eb7bb98 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/caret-with-composited-scroll-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/caret-with-composited-scroll-expected.txt
@@ -1,22 +1,27 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow DIV id='scroller'",
           "position": [8, 48],
           "bounds": [100, 100],
           "shouldFlattenTransform": false,
           "drawsContent": true,
           "children": [
             {
+              "name": "Scrolling Layer",
               "bounds": [100, 100],
               "shouldFlattenTransform": false,
               "children": [
                 {
+                  "name": "Scrolling Contents Layer",
                   "bounds": [205, 1022],
                   "drawsContent": true,
                   "paintInvalidations": [
@@ -40,23 +45,20 @@
               ]
             },
             {
+              "name": "Overflow Controls Host Layer",
               "bounds": [100, 100],
               "children": [
                 {
+                  "name": "Horizontal Scrollbar Layer",
                   "position": [0, 100],
                   "bounds": [100, 0],
                   "drawsContent": true
                 },
                 {
+                  "name": "Vertical Scrollbar Layer",
                   "position": [100, 0],
                   "bounds": [0, 100],
-                  "drawsContent": true,
-                  "paintInvalidations": [
-                    {
-                      "object": "Vertical Scrollbar Layer",
-                      "reason": "full"
-                    }
-                  ]
+                  "drawsContent": true
                 }
               ]
             }
@@ -64,6 +66,20 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutTextControl INPUT id='text'",
+      "reason": "subtree"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='inner-editor'",
+      "reason": "subtree"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='inner-editor'",
+      "reason": "invalidate paint rectangle"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/invalidate-box-shadow-currentColor-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/invalidate-box-shadow-currentColor-expected.txt
index fcc9117..6f08ddd 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/invalidate-box-shadow-currentColor-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/invalidate-box-shadow-currentColor-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -15,17 +17,27 @@
           "object": "LayoutText #text",
           "rect": [8, 8, 26, 19],
           "reason": "style change"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox 'Text'",
-          "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/paint/invalidation/non-text-link-invalidation-optimization-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/non-text-link-invalidation-optimization-expected.txt
index 6e88b6e..e0c0ad0 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/non-text-link-invalidation-optimization-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/non-text-link-invalidation-optimization-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -35,33 +37,59 @@
           "object": "LayoutText #text",
           "rect": [303, 8, 23, 19],
           "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox ' images.'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox ' no '",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox ' passes if '",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox ' text is invalidated and '",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox 'This test '",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox 'only'",
-          "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/paint/selection/invalidation-rect-includes-newline-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/selection/invalidation-rect-includes-newline-expected.txt
index f12dd59..6c4c1ce 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/paint/selection/invalidation-rect-includes-newline-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/paint/selection/invalidation-rect-includes-newline-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -15,37 +17,47 @@
           "object": "LayoutText #text",
           "rect": [40, 8, 16, 32],
           "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'xx'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'xx'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox 'y'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'y'",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutBlockFlow BODY",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='container'",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutBlockFlow HTML",
-          "reason": "selection"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow HTML",
+      "reason": "selection"
+    },
+    {
+      "object": "LayoutBlockFlow BODY",
+      "reason": "selection"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='container'",
+      "reason": "selection"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "selection"
+    },
+    {
+      "object": "InlineTextBox 'xx'",
+      "reason": "selection"
+    },
+    {
+      "object": "InlineTextBox 'y'",
+      "reason": "selection"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "incremental"
+    },
+    {
+      "object": "InlineTextBox 'xx'",
+      "reason": "incremental"
+    },
+    {
+      "object": "InlineTextBox 'y'",
+      "reason": "incremental"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/selection/invalidation-rect-includes-newline-for-rtl-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/selection/invalidation-rect-includes-newline-for-rtl-expected.txt
index 86a7f56e..1d62a175 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/paint/selection/invalidation-rect-includes-newline-for-rtl-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/paint/selection/invalidation-rect-includes-newline-for-rtl-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -10,41 +12,47 @@
           "object": "LayoutText #text",
           "rect": [-8, 8, 48, 32],
           "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'xx'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'xx'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox 'y'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'y'",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutBlockFlow BODY",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='container'",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutBlockFlow HTML",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutText #text",
-          "reason": "selection"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow HTML",
+      "reason": "selection"
+    },
+    {
+      "object": "LayoutBlockFlow BODY",
+      "reason": "selection"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='container'",
+      "reason": "selection"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "selection"
+    },
+    {
+      "object": "InlineTextBox 'xx'",
+      "reason": "selection"
+    },
+    {
+      "object": "InlineTextBox 'y'",
+      "reason": "selection"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox 'xx'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox 'y'",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/selection/invalidation-rect-includes-newline-for-vertical-lr-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/selection/invalidation-rect-includes-newline-for-vertical-lr-expected.txt
index 358848b..0af9ff8 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/paint/selection/invalidation-rect-includes-newline-for-vertical-lr-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/paint/selection/invalidation-rect-includes-newline-for-vertical-lr-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -15,37 +17,47 @@
           "object": "LayoutText #text",
           "rect": [8, 40, 32, 16],
           "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'xx'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'xx'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox 'y'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'y'",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutBlockFlow BODY",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='container'",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutBlockFlow HTML",
-          "reason": "selection"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow HTML",
+      "reason": "selection"
+    },
+    {
+      "object": "LayoutBlockFlow BODY",
+      "reason": "selection"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='container'",
+      "reason": "selection"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "selection"
+    },
+    {
+      "object": "InlineTextBox 'xx'",
+      "reason": "selection"
+    },
+    {
+      "object": "InlineTextBox 'y'",
+      "reason": "selection"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "incremental"
+    },
+    {
+      "object": "InlineTextBox 'xx'",
+      "reason": "incremental"
+    },
+    {
+      "object": "InlineTextBox 'y'",
+      "reason": "incremental"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/selection/invalidation-rect-includes-newline-for-vertical-rl-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/selection/invalidation-rect-includes-newline-for-vertical-rl-expected.txt
index 358848b..0af9ff8 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/paint/selection/invalidation-rect-includes-newline-for-vertical-rl-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/paint/selection/invalidation-rect-includes-newline-for-vertical-rl-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -15,37 +17,47 @@
           "object": "LayoutText #text",
           "rect": [8, 40, 32, 16],
           "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'xx'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'xx'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox 'y'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'y'",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutBlockFlow BODY",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='container'",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutBlockFlow HTML",
-          "reason": "selection"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow HTML",
+      "reason": "selection"
+    },
+    {
+      "object": "LayoutBlockFlow BODY",
+      "reason": "selection"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='container'",
+      "reason": "selection"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "selection"
+    },
+    {
+      "object": "InlineTextBox 'xx'",
+      "reason": "selection"
+    },
+    {
+      "object": "InlineTextBox 'y'",
+      "reason": "selection"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "incremental"
+    },
+    {
+      "object": "InlineTextBox 'xx'",
+      "reason": "incremental"
+    },
+    {
+      "object": "InlineTextBox 'y'",
+      "reason": "incremental"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/selection/selection-within-composited-scroller-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/paint/selection/selection-within-composited-scroller-expected.txt
index c9e887e..5f11a96 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/paint/selection/selection-within-composited-scroller-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/paint/selection/selection-within-composited-scroller-expected.txt
@@ -1,44 +1,29 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow BODY",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutBlockFlow HTML",
-          "reason": "selection"
-        }
-      ],
       "children": [
         {
+          "name": "LayoutBlockFlow DIV id='scroller'",
           "position": [8, 8],
           "bounds": [200, 200],
           "contentsOpaque": true,
           "shouldFlattenTransform": false,
           "drawsContent": true,
           "backgroundColor": "#D3D3D3",
-          "paintInvalidations": [
-            {
-              "object": "InlineTextBox 'test'",
-              "reason": "selection"
-            },
-            {
-              "object": "LayoutBlockFlow DIV id='scroller'",
-              "reason": "selection"
-            }
-          ],
           "children": [
             {
+              "name": "Scrolling Layer",
               "bounds": [185, 185],
               "shouldFlattenTransform": false,
               "children": [
                 {
+                  "name": "Scrolling Contents Layer",
                   "bounds": [200, 1620],
                   "drawsContent": true,
                   "paintInvalidations": [
@@ -46,35 +31,27 @@
                       "object": "LayoutText #text",
                       "rect": [0, 610, 21, 19],
                       "reason": "selection"
-                    },
-                    {
-                      "object": "InlineTextBox 'test'",
-                      "reason": "selection"
-                    },
-                    {
-                      "object": "LayoutBlockFlow DIV id='scroller'",
-                      "reason": "selection"
-                    },
-                    {
-                      "object": "LayoutBlockFlow DIV id='target'",
-                      "reason": "selection"
                     }
                   ]
                 }
               ]
             },
             {
+              "name": "Overflow Controls Host Layer",
               "bounds": [200, 200],
               "children": [
                 {
+                  "name": "Horizontal Scrollbar Layer",
                   "position": [0, 185],
                   "bounds": [185, 15]
                 },
                 {
+                  "name": "Vertical Scrollbar Layer",
                   "position": [185, 0],
                   "bounds": [15, 185]
                 },
                 {
+                  "name": "Scroll Corner Layer",
                   "position": [185, 185],
                   "bounds": [15, 15],
                   "drawsContent": true
@@ -85,6 +62,32 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow HTML",
+      "reason": "selection"
+    },
+    {
+      "object": "LayoutBlockFlow BODY",
+      "reason": "selection"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='scroller'",
+      "reason": "selection"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='target'",
+      "reason": "selection"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "selection"
+    },
+    {
+      "object": "InlineTextBox 'test'",
+      "reason": "selection"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/as-background-image/svg-background-partial-redraw-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/svg/as-background-image/svg-background-partial-redraw-expected.txt
index caefb0a..836584cd 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/svg/as-background-image/svg-background-partial-redraw-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/svg/as-background-image/svg-background-partial-redraw-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -13,6 +15,12 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='revealer'",
+      "reason": "layoutObject removal"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/as-image/svg-image-change-content-size-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/svg/as-image/svg-image-change-content-size-expected.txt
index a8c4778..b841729 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/svg/as-image/svg-image-change-content-size-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/svg/as-image/svg-image-change-content-size-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -10,21 +12,19 @@
           "object": "LayoutBlockFlow div id='contentBox'",
           "rect": [8, 52, 602, 422],
           "reason": "forced by layout"
-        },
-        {
-          "object": "InlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow div id='contentBox'",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "forced by layout"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/custom/absolute-sized-content-with-resources-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/svg/custom/absolute-sized-content-with-resources-expected.txt
index e525166..c554005 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/svg/custom/absolute-sized-content-with-resources-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/svg/custom/absolute-sized-content-with-resources-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -20,21 +22,23 @@
           "object": "LayoutSVGRoot svg",
           "rect": [17, 219, 84, 68],
           "reason": "bounds change"
-        },
-        {
-          "object": "InlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow div id='contentBox'",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutSVGRoot svg",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/custom/js-late-clipPath-and-object-creation-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/svg/custom/js-late-clipPath-and-object-creation-expected.txt
index 25ab983..579af96 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/svg/custom/js-late-clipPath-and-object-creation-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/svg/custom/js-late-clipPath-and-object-creation-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -50,37 +52,67 @@
           "object": "LayoutSVGPath path",
           "rect": [0, 0, 334, 500],
           "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'Clipped. INVISIBLE.'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'Clipped. INVISIBLE.'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Clipped. INVISIBLE.'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "LayoutSVGResourceClipper clipPath id='dynClip'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutSVGRoot svg id='svg-root'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGContainer g id='content'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGText text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'Clipped. INVISIBLE.'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGRoot svg id='svg-root'",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutSVGContainer g id='content'",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutSVGText text",
+      "reason": "style change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "incremental"
+    },
+    {
+      "object": "InlineTextBox 'Clipped. INVISIBLE.'",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutSVGResourceClipper clipPath id='dynClip'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGPath path",
+      "reason": "layoutObject insertion"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/custom/js-late-clipPath-creation-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/svg/custom/js-late-clipPath-creation-expected.txt
index 9d01e96..b734e55 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/svg/custom/js-late-clipPath-creation-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/svg/custom/js-late-clipPath-creation-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -30,29 +32,43 @@
           "object": "LayoutSVGPath path",
           "rect": [0, 0, 334, 500],
           "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'Clipped. INVISIBLE.'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'Clipped. INVISIBLE.'",
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGResourceClipper clipPath id='dynClip'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutSVGRoot svg id='svg-root'",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutSVGContainer g id='content'",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutSVGText text",
+      "reason": "style change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "incremental"
+    },
+    {
+      "object": "InlineTextBox 'Clipped. INVISIBLE.'",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutSVGResourceClipper clipPath id='dynClip'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGPath path",
+      "reason": "layoutObject insertion"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/custom/js-late-gradient-and-object-creation-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/svg/custom/js-late-gradient-and-object-creation-expected.txt
index fc30a211..2626a1c 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/svg/custom/js-late-gradient-and-object-creation-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/svg/custom/js-late-gradient-and-object-creation-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -45,53 +47,87 @@
           "object": "LayoutSVGText text",
           "rect": [0, 15, 446, 129],
           "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'Gradient on fill'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'Gradient on fill/stroke'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'Gradient on stroke'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "LayoutSVGGradientStop stop",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "LayoutSVGGradientStop stop",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "LayoutSVGGradientStop stop",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "LayoutSVGResourceLinearGradient linearGradient id='fillLinearGradient'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "LayoutSVGResourceLinearGradient linearGradient id='strokeLinearGradient'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutSVGResourceLinearGradient linearGradient id='fillLinearGradient'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGGradientStop stop",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGGradientStop stop",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGResourceLinearGradient linearGradient id='strokeLinearGradient'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGGradientStop stop",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGRoot svg id='svg-root'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGContainer g id='content'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGText text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'Gradient on fill'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGText text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'Gradient on stroke'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGText text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'Gradient on fill/stroke'",
+      "reason": "layoutObject insertion"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/custom/js-late-gradient-creation-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/svg/custom/js-late-gradient-creation-expected.txt
index 21651dc8..b30ad122 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/svg/custom/js-late-gradient-creation-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/svg/custom/js-late-gradient-creation-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -10,33 +12,31 @@
           "object": "LayoutSVGText text",
           "rect": [33, 23, 697, 194],
           "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox 'Gradient on fill'",
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGGradientStop stop",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "LayoutSVGGradientStop stop",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "LayoutSVGResourceLinearGradient linearGradient id='dynGrad'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutSVGText text",
+      "reason": "style change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutSVGResourceLinearGradient linearGradient id='dynGrad'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGGradientStop stop",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGGradientStop stop",
+      "reason": "layoutObject insertion"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/custom/js-late-pattern-and-object-creation-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/svg/custom/js-late-pattern-and-object-creation-expected.txt
index d2e7b32..879d44e 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/svg/custom/js-late-pattern-and-object-creation-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/svg/custom/js-late-pattern-and-object-creation-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -65,41 +67,91 @@
           "object": "LayoutSVGRect rect",
           "rect": [8, 8, 17, 17],
           "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'Pattern on fill'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'Pattern on fill/stroke'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'Pattern on stroke'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "LayoutSVGResourcePattern pattern id='fillPattern'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "LayoutSVGResourcePattern pattern id='strokePattern'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutSVGResourcePattern pattern id='fillPattern'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGRect rect",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGRect rect",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGResourcePattern pattern id='strokePattern'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGRect rect",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGRect rect",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGRoot svg id='svg-root'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGContainer g id='content'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGText text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'Pattern on fill'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGText text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'Pattern on stroke'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGText text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'Pattern on fill/stroke'",
+      "reason": "layoutObject insertion"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/custom/js-late-pattern-creation-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/svg/custom/js-late-pattern-creation-expected.txt
index fe86ebc..3c20fb2 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/svg/custom/js-late-pattern-creation-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/svg/custom/js-late-pattern-creation-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -20,25 +22,31 @@
           "object": "LayoutSVGRect rect",
           "rect": [8, 12, 17, 26],
           "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'Pattern on fill'",
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGResourcePattern pattern id='dynPattern'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutSVGText text",
+      "reason": "style change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutSVGResourcePattern pattern id='dynPattern'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGRect rect",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGRect rect",
+      "reason": "layoutObject insertion"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/custom/relative-sized-content-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/svg/custom/relative-sized-content-expected.txt
index 5ced02c..1e9a8e3 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/svg/custom/relative-sized-content-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/svg/custom/relative-sized-content-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -20,21 +22,27 @@
           "object": "LayoutSVGRoot svg",
           "rect": [109, 73, 300, 400],
           "reason": "incremental"
-        },
-        {
-          "object": "InlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow div id='contentBox'",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutSVGRoot svg",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutSVGRect rect id='targetRect'",
+      "reason": "full"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/custom/relative-sized-content-with-resources-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/svg/custom/relative-sized-content-with-resources-expected.txt
index cb951904..3a49cd8 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/svg/custom/relative-sized-content-with-resources-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/svg/custom/relative-sized-content-with-resources-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -30,21 +32,27 @@
           "object": "LayoutSVGRoot svg",
           "rect": [9, 155, 100, 236],
           "reason": "bounds change"
-        },
-        {
-          "object": "InlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow div id='contentBox'",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutSVGRoot svg",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGEllipse circle",
+      "reason": "SVG resource change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/custom/relative-sized-deep-shadow-tree-content-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/svg/custom/relative-sized-deep-shadow-tree-content-expected.txt
index e1595cfd..c33cb53d 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/svg/custom/relative-sized-deep-shadow-tree-content-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/svg/custom/relative-sized-deep-shadow-tree-content-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -75,21 +77,47 @@
           "object": "LayoutSVGRect rect id='targetRect'",
           "rect": [34, 173, 50, 200],
           "reason": "bounds change"
-        },
-        {
-          "object": "InlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow div id='contentBox'",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutSVGRoot svg",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGRect rect id='targetRect'",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutSVGContainer use id='targetUse'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGRect rect id='targetRect'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGContainer use",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGContainer g id='targetUse'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGRect rect id='targetRect'",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/custom/relative-sized-image-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/svg/custom/relative-sized-image-expected.txt
index 9a3b900..35f9c95b 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/svg/custom/relative-sized-image-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/svg/custom/relative-sized-image-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -20,21 +22,27 @@
           "object": "LayoutSVGRoot svg",
           "rect": [109, 73, 300, 400],
           "reason": "incremental"
-        },
-        {
-          "object": "InlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow div id='contentBox'",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutSVGRoot svg",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutSVGImage image",
+      "reason": "full"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/custom/relative-sized-inner-svg-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/svg/custom/relative-sized-inner-svg-expected.txt
index dc7a9f7..3018506 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/svg/custom/relative-sized-inner-svg-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/svg/custom/relative-sized-inner-svg-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -40,21 +42,31 @@
           "object": "LayoutSVGViewportContainer svg",
           "rect": [13, 207, 92, 91],
           "reason": "bounds change"
-        },
-        {
-          "object": "InlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow div id='contentBox'",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutSVGRoot svg",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGViewportContainer svg",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGPath path",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/custom/relative-sized-shadow-tree-content-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/svg/custom/relative-sized-shadow-tree-content-expected.txt
index 0241747..470d720 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/svg/custom/relative-sized-shadow-tree-content-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/svg/custom/relative-sized-shadow-tree-content-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -70,21 +72,59 @@
           "object": "LayoutSVGRect rect id='targetRect'",
           "rect": [59, 273, 50, 200],
           "reason": "bounds change"
-        },
-        {
-          "object": "InlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow div id='contentBox'",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutSVGRoot svg",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutSVGRect rect id='targetRect'",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutSVGRect rect id='targetRect1'",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutSVGContainer use id='targetUse'",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutSVGRect rect id='targetRect1'",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutSVGContainer use",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGRect rect id='targetRect'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGContainer use",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutSVGContainer g id='targetUse'",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutSVGRect rect id='targetRect1'",
+      "reason": "full"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/custom/relative-sized-shadow-tree-content-with-symbol-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/svg/custom/relative-sized-shadow-tree-content-with-symbol-expected.txt
index 9a9261c0..3010fd41 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/svg/custom/relative-sized-shadow-tree-content-with-symbol-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/svg/custom/relative-sized-shadow-tree-content-with-symbol-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -40,21 +42,39 @@
           "object": "LayoutSVGRect rect",
           "rect": [59, 273, 50, 50],
           "reason": "bounds change"
-        },
-        {
-          "object": "InlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow div id='contentBox'",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutSVGRoot svg",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGContainer use",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGViewportContainer svg id='targetSymbol'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGRect rect",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGRect rect",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/custom/relative-sized-use-on-symbol-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/svg/custom/relative-sized-use-on-symbol-expected.txt
index 01c0d9f..6a5b870 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/svg/custom/relative-sized-use-on-symbol-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/svg/custom/relative-sized-use-on-symbol-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -50,21 +52,35 @@
           "object": "LayoutSVGViewportContainer svg id='gamesBorder'",
           "rect": [18, 211, 82, 83],
           "reason": "bounds change"
-        },
-        {
-          "object": "InlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow div id='contentBox'",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutSVGRoot svg",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGContainer use",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGViewportContainer svg id='gamesBorder'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGPath path",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/custom/relative-sized-use-without-attributes-on-symbol-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/svg/custom/relative-sized-use-without-attributes-on-symbol-expected.txt
index ebf21e1c..8c1bbafd 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/svg/custom/relative-sized-use-without-attributes-on-symbol-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/svg/custom/relative-sized-use-without-attributes-on-symbol-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -50,21 +52,35 @@
           "object": "LayoutSVGViewportContainer svg id='gamesBorder'",
           "rect": [13, 207, 92, 91],
           "reason": "bounds change"
-        },
-        {
-          "object": "InlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow div id='contentBox'",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutSVGRoot svg",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGContainer use",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGViewportContainer svg id='gamesBorder'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGPath path",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/custom/scrolling-embedded-svg-file-image-repaint-problem-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/svg/custom/scrolling-embedded-svg-file-image-repaint-problem-expected.txt
index b664f7a..a45789d 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/svg/custom/scrolling-embedded-svg-file-image-repaint-problem-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/svg/custom/scrolling-embedded-svg-file-image-repaint-problem-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [1026, 1036],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [1026, 1036],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -15,37 +17,23 @@
           "object": "LayoutInline A",
           "rect": [384, 1011, 47, 21],
           "reason": "style change"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'index'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'pservers-pattern-01-b \u2190'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox '\u2192 script-handle-01-b'",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow P",
+      "reason": "invalidate paint rectangle"
+    },
+    {
+      "object": "LayoutInline A",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "style change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/custom/text-dom-removal-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/svg/custom/text-dom-removal-expected.txt
index 98c6f85..b18b40e 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/svg/custom/text-dom-removal-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/svg/custom/text-dom-removal-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -25,17 +27,27 @@
           "object": "LayoutSVGRect rect",
           "rect": [0, 0, 20, 20],
           "reason": "layoutObject removal"
-        },
-        {
-          "object": "InlineTextBox ''",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutSVGRect rect",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGText text",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGContainer g id='objectsToRemove'",
+      "reason": "became invisible"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/custom/text-match-highlight-expected.png b/third_party/WebKit/LayoutTests/platform/linux/svg/custom/text-match-highlight-expected.png
index 904ccce..456c7bd 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/svg/custom/text-match-highlight-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/svg/custom/text-match-highlight-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/custom/text-repaint-including-stroke-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/svg/custom/text-repaint-including-stroke-expected.txt
index 3f9b954..f88f0154 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/svg/custom/text-repaint-including-stroke-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/svg/custom/text-repaint-including-stroke-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -35,25 +37,31 @@
           "object": "LayoutSVGText text id='bounce'",
           "rect": [30, 0, 403, 59],
           "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Repaint me!'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Repaint me!'",
-          "reason": "style change"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutSVGRoot svg",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGText text id='bounce'",
+      "reason": "full"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox 'Repaint me!'",
+      "reason": "style change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/custom/text-xy-updates-SVGList-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/svg/custom/text-xy-updates-SVGList-expected.txt
index a6f8214..109e704 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/svg/custom/text-xy-updates-SVGList-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/svg/custom/text-xy-updates-SVGList-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [808, 621],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [808, 621],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -35,25 +37,31 @@
           "object": "LayoutSVGText text id='ttt'",
           "rect": [18, 193, 161, 19],
           "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Passes, if text is at 200x20'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Passes, if text is at 200x20'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutSVGRoot svg:svg",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGText text id='ttt'",
+      "reason": "full"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox 'Passes, if text is at 200x20'",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/custom/use-clipped-hit-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/svg/custom/use-clipped-hit-expected.txt
index 202ed3e..e596abc6 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/svg/custom/use-clipped-hit-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/svg/custom/use-clipped-hit-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -25,25 +27,35 @@
           "object": "LayoutSVGText text id='status'",
           "rect": [89, 114, 3, 21],
           "reason": "invalidate paint rectangle"
-        },
-        {
-          "object": "InlineTextBox ''",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Passed'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutSVGText text id='status'",
+      "reason": "invalidate paint rectangle"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGText text id='status'",
+      "reason": "full"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'Passed'",
+      "reason": "layoutObject insertion"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/custom/use-detach-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/svg/custom/use-detach-expected.txt
index 66840681..57d13eb 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/svg/custom/use-detach-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/svg/custom/use-detach-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -170,69 +172,179 @@
           "object": "LayoutSVGEllipse circle id='use_circle'",
           "rect": [218, 94, 28, 28],
           "reason": "layoutObject removal"
-        },
-        {
-          "object": "InlineTextBox ''",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ''",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ''",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'use'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'use'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'use'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "LayoutSVGHiddenContainer g id='use'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "LayoutSVGHiddenContainer g id='use'",
-          "reason": "layoutObject removal"
-        },
-        {
-          "object": "LayoutSVGHiddenContainer g id='use'",
-          "reason": "layoutObject removal"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGText text id='use_text'",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGContainer use",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGEllipse circle id='use_circle'",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGContainer use",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGHiddenContainer g id='use'",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGContainer g id='use'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer use",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGText text id='use_text'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'use'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer use",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGEllipse circle id='use_circle'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGText text id='use_text'",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGContainer use",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGEllipse circle id='use_circle'",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGContainer use",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGContainer g id='use'",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGHiddenContainer g id='use'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer use",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGText text id='use_text'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'use'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer use",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGEllipse circle id='use_circle'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGText text id='use_text'",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGContainer use",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGEllipse circle id='use_circle'",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGContainer use",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGHiddenContainer g id='use'",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGContainer g id='use'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer use",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGText text id='use_text'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'use'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer use",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGEllipse circle id='use_circle'",
+      "reason": "layoutObject insertion"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/custom/use-setAttribute-crash-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/svg/custom/use-setAttribute-crash-expected.txt
index 39e8fd8..d462400a 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/svg/custom/use-setAttribute-crash-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/svg/custom/use-setAttribute-crash-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -50,21 +52,51 @@
           "object": "LayoutSVGViewportContainer svg id='symbol'",
           "rect": [53, 53, 10, 10],
           "reason": "layoutObject removal"
-        },
-        {
-          "object": "InlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutSVGEllipse svg:circle id='circle'",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGViewportContainer svg id='symbol'",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutBlockFlow body",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutBlockFlow body",
+      "reason": "invalidate paint rectangle"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutSVGRoot svg:svg id='svg'",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutSVGEllipse svg:circle id='circle'",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutSVGContainer svg:use id='use'",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutSVGViewportContainer svg id='symbol'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGEllipse svg:circle id='circle'",
+      "reason": "layoutObject insertion"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/repaint/image-animation-with-zoom-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/svg/repaint/image-animation-with-zoom-expected.txt
index 4213b7c..43e2fdb 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/svg/repaint/image-animation-with-zoom-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/svg/repaint/image-animation-with-zoom-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -13,6 +15,12 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutImage IMG id='targetImage'",
+      "reason": "full"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/repaint/image-with-clip-path-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/svg/repaint/image-with-clip-path-expected.txt
index 615f5d3d..f91bc5fd 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/svg/repaint/image-with-clip-path-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/svg/repaint/image-with-clip-path-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -78,6 +80,40 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutSVGRoot svg",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutSVGContainer g id='g'",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutSVGRect rect id='r'",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutSVGImage image",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutSVGRoot svg",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutSVGContainer g id='g'",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutSVGRect rect id='r'",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutSVGImage image",
+      "reason": "full"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/repaint/inner-svg-change-viewPort-relative-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/svg/repaint/inner-svg-change-viewPort-relative-expected.txt
index 83c8df5..06bd766 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/svg/repaint/inner-svg-change-viewPort-relative-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/svg/repaint/inner-svg-change-viewPort-relative-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -70,25 +72,51 @@
           "object": "LayoutSVGRect rect",
           "rect": [80, 60, 20, 20],
           "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'right-aligned text'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'right-aligned text'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutSVGRoot svg",
+      "reason": "incremental"
+    },
+    {
+      "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": "bounds change"
+    },
+    {
+      "object": "InlineTextBox 'right-aligned text'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGContainer use",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutSVGPath polygon id='triangle'",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/repaint/modify-transferred-listitem-different-attr-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/svg/repaint/modify-transferred-listitem-different-attr-expected.txt
index 6a82a15..72d8478 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/svg/repaint/modify-transferred-listitem-different-attr-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/svg/repaint/modify-transferred-listitem-different-attr-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -30,53 +32,51 @@
           "object": "LayoutSVGInlineText #text",
           "rect": [103, 8, 5, 23],
           "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox ' B C'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox ' B C'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ' Y Z'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'A'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'A'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'X Y Z'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'X'",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutSVGRoot svg",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutSVGText text id='target'",
+      "reason": "full"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "incremental"
+    },
+    {
+      "object": "InlineTextBox 'A'",
+      "reason": "incremental"
+    },
+    {
+      "object": "InlineTextBox ' B C'",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutSVGText text id='source'",
+      "reason": "full"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "incremental"
+    },
+    {
+      "object": "InlineTextBox 'X Y Z'",
+      "reason": "incremental"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/repaint/outline-offset-text-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/svg/repaint/outline-offset-text-expected.txt
index e6acf75..b3b9aa6 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/svg/repaint/outline-offset-text-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/svg/repaint/outline-offset-text-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -35,25 +37,31 @@
           "object": "LayoutSVGRoot svg",
           "rect": [78, 41, 130, 83],
           "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'Foo'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Foo'",
-          "reason": "outline"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutSVGRoot svg",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGText text",
+      "reason": "full"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "outline"
+    },
+    {
+      "object": "InlineTextBox 'Foo'",
+      "reason": "outline"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/repaint/repaint-non-scaling-stroke-text-decoration-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/svg/repaint/repaint-non-scaling-stroke-text-decoration-expected.txt
index e29b74e..72fea374 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/svg/repaint/repaint-non-scaling-stroke-text-decoration-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/svg/repaint/repaint-non-scaling-stroke-text-decoration-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -25,25 +27,35 @@
           "object": "LayoutSVGText text id='t'",
           "rect": [9, 13, 46, 28],
           "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox 'Hello'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Hello'",
-          "reason": "style change"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutSVGRoot svg",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGContainer g",
+      "reason": "bounds change"
+    },
+    {
+      "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/svg/repaint/repaint-non-scaling-stroke-text-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/svg/repaint/repaint-non-scaling-stroke-text-expected.txt
index e29b74e..72fea374 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/svg/repaint/repaint-non-scaling-stroke-text-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/svg/repaint/repaint-non-scaling-stroke-text-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -25,25 +27,35 @@
           "object": "LayoutSVGText text id='t'",
           "rect": [9, 13, 46, 28],
           "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox 'Hello'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Hello'",
-          "reason": "style change"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutSVGRoot svg",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGContainer g",
+      "reason": "bounds change"
+    },
+    {
+      "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/svg/repaint/text-mask-update-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/svg/repaint/text-mask-update-expected.txt
index 4b8d90c..ec4c8df 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/svg/repaint/text-mask-update-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/svg/repaint/text-mask-update-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -45,25 +47,47 @@
           "object": "LayoutSVGRoot svg",
           "rect": [10, 33, 41, 17],
           "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox ''",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'PASS'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGRoot svg",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGText text id='text1'",
+      "reason": "style change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'PASS'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "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/svg/text/append-text-node-to-tspan-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/svg/text/append-text-node-to-tspan-expected.txt
index d3ca2c99..0aa900e 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/svg/text/append-text-node-to-tspan-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/svg/text/append-text-node-to-tspan-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -15,53 +17,27 @@
           "object": "LayoutSVGText text",
           "rect": [10, 63, 307, 377],
           "reason": "style change"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ''",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ''",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'PA'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'PASS'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'PASS'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'SS'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutSVGText text",
+      "reason": "style change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'SS'",
+      "reason": "layoutObject insertion"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/text/ems-display-none-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/svg/text/ems-display-none-expected.txt
index 6f31843..77757512 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/svg/text/ems-display-none-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/svg/text/ems-display-none-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -45,33 +47,67 @@
           "object": "LayoutSVGText text id='text'",
           "rect": [50, 54, 561, 86],
           "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox ' '",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'Two lines of text should be visible.'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'Two lines of text should be visible.'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutSVGRoot svg",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGContainer g",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGText text id='text'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGTSpan tspan id='tspan'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'Two lines of text should be visible.'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox ' '",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGTSpan tspan",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'Two lines of text should be visible.'",
+      "reason": "layoutObject insertion"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/text/exs-display-none-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/svg/text/exs-display-none-expected.txt
index 42d4a832..9f29932 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/svg/text/exs-display-none-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/svg/text/exs-display-none-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -45,33 +47,67 @@
           "object": "LayoutSVGText text id='text'",
           "rect": [50, 50, 561, 82],
           "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox ' '",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'Two lines of text should be visible.'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'Two lines of text should be visible.'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutSVGRoot svg",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGContainer g",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGText text id='text'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGTSpan tspan id='tspan'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'Two lines of text should be visible.'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox ' '",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGTSpan tspan",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'Two lines of text should be visible.'",
+      "reason": "layoutObject insertion"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/text/modify-text-node-in-tspan-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/svg/text/modify-text-node-in-tspan-expected.txt
index 15df770..e59f152 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/svg/text/modify-text-node-in-tspan-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/svg/text/modify-text-node-in-tspan-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -15,53 +17,27 @@
           "object": "LayoutSVGText text",
           "rect": [10, 63, 307, 377],
           "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ''",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ''",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'PA'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'PASS'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'PASS'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'PASS'",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutSVGText text",
+      "reason": "full"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "full"
+    },
+    {
+      "object": "InlineTextBox 'PASS'",
+      "reason": "full"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/text/remove-text-node-from-tspan-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/svg/text/remove-text-node-from-tspan-expected.txt
index 71fb07af..233e876 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/svg/text/remove-text-node-from-tspan-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/svg/text/remove-text-node-from-tspan-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -60,69 +62,79 @@
           "object": "LayoutSVGText text",
           "rect": [10, 63, 307, 377],
           "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox ' '",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox ''",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ''",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'FAIL'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'PASS'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'PASS'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'PASS'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'PASS'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGRoot (positioned) svg",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGText text",
+      "reason": "full"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutSVGTSpan tspan id='modify'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGTSpan tspan",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox 'PASS'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox ' '",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGTSpan tspan",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox 'PASS'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/text/remove-tspan-from-text-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/svg/text/remove-tspan-from-text-expected.txt
index 9849f36..06c00b6 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/svg/text/remove-tspan-from-text-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/svg/text/remove-tspan-from-text-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -20,49 +22,27 @@
           "object": "LayoutSVGText text id='text'",
           "rect": [10, 63, 307, 257],
           "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ''",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ''",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'FAIL'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'PASS'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'PASS'",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGTSpan tspan id='remove'",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGText text id='text'",
+      "reason": "full"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "full"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/text/text-rescale-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/svg/text/text-rescale-expected.txt
index 0f307ba..900c83f 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/svg/text/text-rescale-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/svg/text/text-rescale-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -230,153 +232,195 @@
           "object": "LayoutText #text",
           "rect": [0, 0, 1, 1],
           "reason": "bounds change"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'PASS '",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'PASS '",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'PASS '",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'PASS '",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'PASS '",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'PASS'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'PASS'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'PASS'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'PASS'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'PASS'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'PASS'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'PASS'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'PASS'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'PASS'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'PASS'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'PASS'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'PASS'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutSVGRoot (positioned) svg",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGContainer g id='text1g'",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutSVGText text",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox 'PASS '",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGTSpan tspan",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox 'PASS'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGForeignObject foreignObject",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow P",
+      "reason": "bounds change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox 'PASS'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGViewportContainer svg",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGText text",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox 'PASS'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGContainer g id='text2g'",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutSVGText text",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutSVGText text",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutSVGContainer g id='text3g'",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutSVGText text",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox 'PASS '",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGTSpan tspan",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox 'PASS'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGForeignObject foreignObject",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow P",
+      "reason": "bounds change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox 'PASS'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGViewportContainer svg",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGText text",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox 'PASS'",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/text/text-selection-text-05-t-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/svg/text/text-selection-text-05-t-expected.txt
index 006906e6..e4d249f 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/svg/text/text-selection-text-05-t-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/svg/text/text-selection-text-05-t-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -220,569 +222,743 @@
           "object": "LayoutSVGInlineText #text",
           "rect": [411, 385, 29, 45],
           "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '$Revision: 1.8 $'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '1'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '1'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '1'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '1'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '1'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '1'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '1'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '1'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '1'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '1'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '1'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '1'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '1'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '1'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '1'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '1'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '1'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '1'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '1'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '1'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '1'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '1'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '1'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '1'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '1.x 1.y'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '1.x 2.y'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '1.x 4.y'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '1234'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '1234'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '1234'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '2'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '2'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '2'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '2'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '2'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '2'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '2'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '2'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '2'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '2'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '2'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '2'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '2'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '2'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '2'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '2.x 1.y'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '2.x 2.y'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '2.x 4.y'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '234'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '234'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '234'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '234'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '234'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '234'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '234'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '234'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '234'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '3'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '3'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '3'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '3'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '3'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '3'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '3'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '3'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '3'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '3'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '3'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '3'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '3'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '3'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '3'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '4'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '4'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '4'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '4'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '4'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '4'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '4'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '4'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '4'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '4'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '4'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '4'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '4'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '4'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '4'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '4.x 1.y'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '4.x 2.y'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '4.x 4.y'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox 'end'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox 'middle'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox 'start'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox 'text-anchor'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox 'text-anchor'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox 'text-anchor'",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutSVGText text id='revision'",
-          "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/svg/text/tspan-dynamic-positioning-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/svg/text/tspan-dynamic-positioning-expected.txt
index 265afd99..52a58dc 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/svg/text/tspan-dynamic-positioning-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/svg/text/tspan-dynamic-positioning-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -45,33 +47,39 @@
           "object": "LayoutSVGText text",
           "rect": [20, 5, 240, 19],
           "reason": "forced by layout"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'This text should be at visible at 200,200'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'This text should be at visible at 200,200'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutSVGRoot svg",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGText text",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutSVGTSpan tspan id='ts'",
+      "reason": "full"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox 'This text should be at visible at 200,200'",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/display_list_2d_canvas/fast/canvas/canvas-composite-repaint-by-all-imagesource-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/display_list_2d_canvas/fast/canvas/canvas-composite-repaint-by-all-imagesource-expected.txt
index a40c6d91..85d217c 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/display_list_2d_canvas/fast/canvas/canvas-composite-repaint-by-all-imagesource-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/display_list_2d_canvas/fast/canvas/canvas-composite-repaint-by-all-imagesource-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [785, 933],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [785, 933],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -230,18 +232,22 @@
       ],
       "children": [
         {
+          "name": "LayoutVideo VIDEO id='video'",
           "position": [15, 859],
           "bounds": [150, 60]
         },
         {
+          "name": "Squashing Containment Layer",
           "shouldFlattenTransform": false,
           "children": [
             {
+              "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
@@ -250,6 +256,184 @@
         }
       ]
     }
+  ],
+  "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/gpu/fast/canvas/canvas-composite-repaint-by-all-imagesource-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu/fast/canvas/canvas-composite-repaint-by-all-imagesource-expected.txt
index 6d2f9eb..64ed828 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu/fast/canvas/canvas-composite-repaint-by-all-imagesource-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu/fast/canvas/canvas-composite-repaint-by-all-imagesource-expected.txt
@@ -1,250 +1,301 @@
 {
+  "name": "Content Root Layer",
   "bounds": [785, 933],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [785, 933],
       "contentsOpaque": true,
       "drawsContent": true,
       "backgroundColor": "#FFFFFF",
       "children": [
         {
+          "name": "LayoutHTMLCanvas CANVAS id='source-oversolid color'",
           "position": [142, 64],
           "bounds": [132, 42],
           "drawsContent": true
         },
         {
+          "name": "LayoutHTMLCanvas CANVAS id='source-overimage'",
           "position": [284, 64],
           "bounds": [132, 42],
           "drawsContent": true
         },
         {
+          "name": "LayoutHTMLCanvas CANVAS id='source-overcanvas'",
           "position": [426, 64],
           "bounds": [132, 42],
           "drawsContent": true
         },
         {
+          "name": "LayoutHTMLCanvas CANVAS id='source-overvideo'",
           "position": [568, 64],
           "bounds": [132, 42],
           "drawsContent": true
         },
         {
+          "name": "LayoutHTMLCanvas CANVAS id='source-insolid color'",
           "position": [142, 114],
           "bounds": [132, 42],
           "drawsContent": true
         },
         {
+          "name": "LayoutHTMLCanvas CANVAS id='source-inimage'",
           "position": [284, 114],
           "bounds": [132, 42],
           "drawsContent": true
         },
         {
+          "name": "LayoutHTMLCanvas CANVAS id='source-incanvas'",
           "position": [426, 114],
           "bounds": [132, 42],
           "drawsContent": true
         },
         {
+          "name": "LayoutHTMLCanvas CANVAS id='source-invideo'",
           "position": [568, 114],
           "bounds": [132, 42],
           "drawsContent": true
         },
         {
+          "name": "LayoutHTMLCanvas CANVAS id='source-outsolid color'",
           "position": [142, 164],
           "bounds": [132, 42],
           "drawsContent": true
         },
         {
+          "name": "LayoutHTMLCanvas CANVAS id='source-outimage'",
           "position": [284, 164],
           "bounds": [132, 42],
           "drawsContent": true
         },
         {
+          "name": "LayoutHTMLCanvas CANVAS id='source-outcanvas'",
           "position": [426, 164],
           "bounds": [132, 42],
           "drawsContent": true
         },
         {
+          "name": "LayoutHTMLCanvas CANVAS id='source-outvideo'",
           "position": [568, 164],
           "bounds": [132, 42],
           "drawsContent": true
         },
         {
+          "name": "LayoutHTMLCanvas CANVAS id='source-atopsolid color'",
           "position": [142, 214],
           "bounds": [132, 42],
           "drawsContent": true
         },
         {
+          "name": "LayoutHTMLCanvas CANVAS id='source-atopimage'",
           "position": [284, 214],
           "bounds": [132, 42],
           "drawsContent": true
         },
         {
+          "name": "LayoutHTMLCanvas CANVAS id='source-atopcanvas'",
           "position": [426, 214],
           "bounds": [132, 42],
           "drawsContent": true
         },
         {
+          "name": "LayoutHTMLCanvas CANVAS id='source-atopvideo'",
           "position": [568, 214],
           "bounds": [132, 42],
           "drawsContent": true
         },
         {
+          "name": "LayoutHTMLCanvas CANVAS id='destination-oversolid color'",
           "position": [142, 264],
           "bounds": [132, 42],
           "drawsContent": true
         },
         {
+          "name": "LayoutHTMLCanvas CANVAS id='destination-overimage'",
           "position": [284, 264],
           "bounds": [132, 42],
           "drawsContent": true
         },
         {
+          "name": "LayoutHTMLCanvas CANVAS id='destination-overcanvas'",
           "position": [426, 264],
           "bounds": [132, 42],
           "drawsContent": true
         },
         {
+          "name": "LayoutHTMLCanvas CANVAS id='destination-overvideo'",
           "position": [568, 264],
           "bounds": [132, 42],
           "drawsContent": true
         },
         {
+          "name": "LayoutHTMLCanvas CANVAS id='destination-insolid color'",
           "position": [142, 314],
           "bounds": [132, 42],
           "drawsContent": true
         },
         {
+          "name": "LayoutHTMLCanvas CANVAS id='destination-inimage'",
           "position": [284, 314],
           "bounds": [132, 42],
           "drawsContent": true
         },
         {
+          "name": "LayoutHTMLCanvas CANVAS id='destination-incanvas'",
           "position": [426, 314],
           "bounds": [132, 42],
           "drawsContent": true
         },
         {
+          "name": "LayoutHTMLCanvas CANVAS id='destination-invideo'",
           "position": [568, 314],
           "bounds": [132, 42],
           "drawsContent": true
         },
         {
+          "name": "LayoutHTMLCanvas CANVAS id='destination-outsolid color'",
           "position": [142, 364],
           "bounds": [132, 42],
           "drawsContent": true
         },
         {
+          "name": "LayoutHTMLCanvas CANVAS id='destination-outimage'",
           "position": [284, 364],
           "bounds": [132, 42],
           "drawsContent": true
         },
         {
+          "name": "LayoutHTMLCanvas CANVAS id='destination-outcanvas'",
           "position": [426, 364],
           "bounds": [132, 42],
           "drawsContent": true
         },
         {
+          "name": "LayoutHTMLCanvas CANVAS id='destination-outvideo'",
           "position": [568, 364],
           "bounds": [132, 42],
           "drawsContent": true
         },
         {
+          "name": "LayoutHTMLCanvas CANVAS id='destination-atopsolid color'",
           "position": [142, 414],
           "bounds": [132, 42],
           "drawsContent": true
         },
         {
+          "name": "LayoutHTMLCanvas CANVAS id='destination-atopimage'",
           "position": [284, 414],
           "bounds": [132, 42],
           "drawsContent": true
         },
         {
+          "name": "LayoutHTMLCanvas CANVAS id='destination-atopcanvas'",
           "position": [426, 414],
           "bounds": [132, 42],
           "drawsContent": true
         },
         {
+          "name": "LayoutHTMLCanvas CANVAS id='destination-atopvideo'",
           "position": [568, 414],
           "bounds": [132, 42],
           "drawsContent": true
         },
         {
+          "name": "LayoutHTMLCanvas CANVAS id='lightersolid color'",
           "position": [142, 464],
           "bounds": [132, 42],
           "drawsContent": true
         },
         {
+          "name": "LayoutHTMLCanvas CANVAS id='lighterimage'",
           "position": [284, 464],
           "bounds": [132, 42],
           "drawsContent": true
         },
         {
+          "name": "LayoutHTMLCanvas CANVAS id='lightercanvas'",
           "position": [426, 464],
           "bounds": [132, 42],
           "drawsContent": true
         },
         {
+          "name": "LayoutHTMLCanvas CANVAS id='lightervideo'",
           "position": [568, 464],
           "bounds": [132, 42],
           "drawsContent": true
         },
         {
+          "name": "LayoutHTMLCanvas CANVAS id='copysolid color'",
           "position": [142, 514],
           "bounds": [132, 42],
           "drawsContent": true
         },
         {
+          "name": "LayoutHTMLCanvas CANVAS id='copyimage'",
           "position": [284, 514],
           "bounds": [132, 42],
           "drawsContent": true
         },
         {
+          "name": "LayoutHTMLCanvas CANVAS id='copycanvas'",
           "position": [426, 514],
           "bounds": [132, 42],
           "drawsContent": true
         },
         {
+          "name": "LayoutHTMLCanvas CANVAS id='copyvideo'",
           "position": [568, 514],
           "bounds": [132, 42],
           "drawsContent": true
         },
         {
+          "name": "LayoutHTMLCanvas CANVAS id='xorsolid color'",
           "position": [142, 564],
           "bounds": [132, 42],
           "drawsContent": true
         },
         {
+          "name": "LayoutHTMLCanvas CANVAS id='xorimage'",
           "position": [284, 564],
           "bounds": [132, 42],
           "drawsContent": true
         },
         {
+          "name": "LayoutHTMLCanvas CANVAS id='xorcanvas'",
           "position": [426, 564],
           "bounds": [132, 42],
           "drawsContent": true
         },
         {
+          "name": "LayoutHTMLCanvas CANVAS id='xorvideo'",
           "position": [568, 564],
           "bounds": [132, 42],
           "drawsContent": true
         },
         {
+          "name": "LayoutHTMLCanvas CANVAS id='source-canvas'",
           "position": [15, 754],
           "bounds": [152, 62],
           "drawsContent": true
         },
         {
+          "name": "LayoutVideo VIDEO id='video'",
           "position": [15, 859],
           "bounds": [150, 60]
         },
         {
+          "name": "Squashing Containment Layer",
           "shouldFlattenTransform": false,
           "children": [
             {
+              "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
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/prefer_compositing_to_lcd_text/compositing/overflow/selection-gaps-after-removing-scrolling-contents-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/prefer_compositing_to_lcd_text/compositing/overflow/selection-gaps-after-removing-scrolling-contents-expected.txt
index f4e88a0..6abb384 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/prefer_compositing_to_lcd_text/compositing/overflow/selection-gaps-after-removing-scrolling-contents-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/prefer_compositing_to_lcd_text/compositing/overflow/selection-gaps-after-removing-scrolling-contents-expected.txt
@@ -14,14 +14,17 @@
 *** iteration 1: ***
 
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow DIV id='container'",
           "position": [8, 68],
           "bounds": [300, 500],
           "contentsOpaque": true,
@@ -30,27 +33,33 @@
           "backgroundColor": "#0000FF",
           "children": [
             {
+              "name": "Scrolling Layer",
               "bounds": [285, 485],
               "shouldFlattenTransform": false,
               "children": [
                 {
+                  "name": "Scrolling Contents Layer",
                   "bounds": [285, 665],
                   "drawsContent": true
                 }
               ]
             },
             {
+              "name": "Overflow Controls Host Layer",
               "bounds": [300, 500],
               "children": [
                 {
+                  "name": "Horizontal Scrollbar Layer",
                   "position": [0, 485],
                   "bounds": [285, 15]
                 },
                 {
+                  "name": "Vertical Scrollbar Layer",
                   "position": [285, 0],
                   "bounds": [15, 485]
                 },
                 {
+                  "name": "Scroll Corner Layer",
                   "position": [285, 485],
                   "bounds": [15, 15],
                   "drawsContent": true
@@ -60,6 +69,7 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 83],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -67,6 +77,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 148],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -74,6 +85,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV id='selection' class='scrolled'",
           "position": [23, 213],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -81,6 +93,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 278],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -88,6 +101,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 343],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -95,6 +109,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 408],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -102,6 +117,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 473],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -109,6 +125,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 538],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -116,6 +133,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 603],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -123,6 +141,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 668],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -138,14 +157,17 @@
 *** iteration 2: ***
 
 {
-  "bounds": [785, 2578],
+  "name": "Content Root Layer",
+  "bounds": [785, 2882],
   "children": [
     {
-      "bounds": [785, 2578],
+      "name": "LayoutView #document",
+      "bounds": [785, 2882],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow DIV id='container'",
           "position": [8, 68],
           "bounds": [300, 500],
           "contentsOpaque": true,
@@ -154,27 +176,33 @@
           "backgroundColor": "#0000FF",
           "children": [
             {
+              "name": "Scrolling Layer",
               "bounds": [285, 485],
               "shouldFlattenTransform": false,
               "children": [
                 {
+                  "name": "Scrolling Contents Layer",
                   "bounds": [285, 665],
                   "drawsContent": true
                 }
               ]
             },
             {
+              "name": "Overflow Controls Host Layer",
               "bounds": [300, 500],
               "children": [
                 {
+                  "name": "Horizontal Scrollbar Layer",
                   "position": [0, 485],
                   "bounds": [285, 15]
                 },
                 {
+                  "name": "Vertical Scrollbar Layer",
                   "position": [285, 0],
                   "bounds": [15, 485]
                 },
                 {
+                  "name": "Scroll Corner Layer",
                   "position": [285, 485],
                   "bounds": [15, 15],
                   "drawsContent": true
@@ -184,6 +212,7 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 83],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -191,6 +220,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 148],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -198,6 +228,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV id='selection' class='scrolled'",
           "position": [23, 213],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -205,6 +236,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 278],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -212,6 +244,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 343],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -219,6 +252,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 408],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -226,6 +260,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 473],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -233,6 +268,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 538],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -240,6 +276,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 603],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -247,6 +284,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 668],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -262,40 +300,49 @@
 *** iteration 3: ***
 
 {
-  "bounds": [785, 4562],
+  "name": "Content Root Layer",
+  "bounds": [785, 5170],
   "children": [
     {
-      "bounds": [785, 4562],
+      "name": "LayoutView #document",
+      "bounds": [785, 5170],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow DIV id='container'",
           "position": [8, 68],
           "bounds": [300, 500],
           "shouldFlattenTransform": false,
           "drawsContent": true,
           "children": [
             {
+              "name": "Scrolling Layer",
               "bounds": [285, 485],
               "shouldFlattenTransform": false,
               "children": [
                 {
+                  "name": "Scrolling Contents Layer",
                   "bounds": [285, 665]
                 }
               ]
             },
             {
+              "name": "Overflow Controls Host Layer",
               "bounds": [300, 500],
               "children": [
                 {
+                  "name": "Horizontal Scrollbar Layer",
                   "position": [0, 485],
                   "bounds": [285, 15]
                 },
                 {
+                  "name": "Vertical Scrollbar Layer",
                   "position": [285, 0],
                   "bounds": [15, 485]
                 },
                 {
+                  "name": "Scroll Corner Layer",
                   "position": [285, 485],
                   "bounds": [15, 15],
                   "drawsContent": true
@@ -305,6 +352,7 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 83],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -312,6 +360,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 148],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -319,6 +368,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV id='selection' class='scrolled'",
           "position": [23, 213],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -326,6 +376,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 278],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -333,6 +384,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 343],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -340,6 +392,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 408],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -347,6 +400,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 473],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -354,6 +408,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 538],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -361,6 +416,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 603],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -368,6 +424,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 668],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -383,40 +440,49 @@
 *** iteration 4: ***
 
 {
-  "bounds": [785, 6498],
+  "name": "Content Root Layer",
+  "bounds": [785, 7410],
   "children": [
     {
-      "bounds": [785, 6498],
+      "name": "LayoutView #document",
+      "bounds": [785, 7410],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow DIV id='container'",
           "position": [8, 68],
           "bounds": [300, 500],
           "shouldFlattenTransform": false,
           "drawsContent": true,
           "children": [
             {
+              "name": "Scrolling Layer",
               "bounds": [285, 485],
               "shouldFlattenTransform": false,
               "children": [
                 {
+                  "name": "Scrolling Contents Layer",
                   "bounds": [285, 665]
                 }
               ]
             },
             {
+              "name": "Overflow Controls Host Layer",
               "bounds": [300, 500],
               "children": [
                 {
+                  "name": "Horizontal Scrollbar Layer",
                   "position": [0, 485],
                   "bounds": [285, 15]
                 },
                 {
+                  "name": "Vertical Scrollbar Layer",
                   "position": [285, 0],
                   "bounds": [15, 485]
                 },
                 {
+                  "name": "Scroll Corner Layer",
                   "position": [285, 485],
                   "bounds": [15, 15],
                   "drawsContent": true
@@ -426,6 +492,7 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 83],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -433,6 +500,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 148],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -440,6 +508,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV id='selection' class='scrolled'",
           "position": [23, 213],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -447,6 +516,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 278],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -454,6 +524,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 343],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -461,6 +532,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 408],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -468,6 +540,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 473],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -475,6 +548,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 538],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -482,6 +556,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 603],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -489,6 +564,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 668],
           "bounds": [100, 50],
           "contentsOpaque": true,
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/prefer_compositing_to_lcd_text/compositing/overflow/selection-gaps-toggling-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/prefer_compositing_to_lcd_text/compositing/overflow/selection-gaps-toggling-expected.txt
index 7bb7d757..5f0eb7c1 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/prefer_compositing_to_lcd_text/compositing/overflow/selection-gaps-toggling-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/prefer_compositing_to_lcd_text/compositing/overflow/selection-gaps-toggling-expected.txt
@@ -14,40 +14,49 @@
 *** iteration 1: ***
 
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow DIV class='container'",
           "position": [8, 68],
           "bounds": [300, 500],
           "shouldFlattenTransform": false,
           "drawsContent": true,
           "children": [
             {
+              "name": "Scrolling Layer",
               "bounds": [285, 485],
               "shouldFlattenTransform": false,
               "children": [
                 {
+                  "name": "Scrolling Contents Layer",
                   "bounds": [285, 665]
                 }
               ]
             },
             {
+              "name": "Overflow Controls Host Layer",
               "bounds": [300, 500],
               "children": [
                 {
+                  "name": "Horizontal Scrollbar Layer",
                   "position": [0, 485],
                   "bounds": [285, 15]
                 },
                 {
+                  "name": "Vertical Scrollbar Layer",
                   "position": [285, 0],
                   "bounds": [15, 485]
                 },
                 {
+                  "name": "Scroll Corner Layer",
                   "position": [285, 485],
                   "bounds": [15, 15],
                   "drawsContent": true
@@ -57,6 +66,7 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 83],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -64,6 +74,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 148],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -71,6 +82,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV id='selection' class='scrolled'",
           "position": [23, 213],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -78,6 +90,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 278],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -85,6 +98,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 343],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -92,6 +106,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 408],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -99,6 +114,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 473],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -106,6 +122,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 538],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -113,6 +130,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 603],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -120,6 +138,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 668],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -135,40 +154,49 @@
 *** iteration 2: ***
 
 {
-  "bounds": [785, 2530],
+  "name": "Content Root Layer",
+  "bounds": [785, 2834],
   "children": [
     {
-      "bounds": [785, 2530],
+      "name": "LayoutView #document",
+      "bounds": [785, 2834],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow DIV class='container'",
           "position": [8, 68],
           "bounds": [300, 500],
           "shouldFlattenTransform": false,
           "drawsContent": true,
           "children": [
             {
+              "name": "Scrolling Layer",
               "bounds": [285, 485],
               "shouldFlattenTransform": false,
               "children": [
                 {
+                  "name": "Scrolling Contents Layer",
                   "bounds": [285, 665]
                 }
               ]
             },
             {
+              "name": "Overflow Controls Host Layer",
               "bounds": [300, 500],
               "children": [
                 {
+                  "name": "Horizontal Scrollbar Layer",
                   "position": [0, 485],
                   "bounds": [285, 15]
                 },
                 {
+                  "name": "Vertical Scrollbar Layer",
                   "position": [285, 0],
                   "bounds": [15, 485]
                 },
                 {
+                  "name": "Scroll Corner Layer",
                   "position": [285, 485],
                   "bounds": [15, 15],
                   "drawsContent": true
@@ -178,6 +206,7 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 83],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -185,6 +214,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 148],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -192,6 +222,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV id='selection' class='scrolled'",
           "position": [23, 213],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -199,6 +230,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 278],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -206,6 +238,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 343],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -213,6 +246,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 408],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -220,6 +254,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 473],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -227,6 +262,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 538],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -234,6 +270,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 603],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -241,6 +278,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 668],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -256,40 +294,49 @@
 *** iteration 3: ***
 
 {
-  "bounds": [785, 4466],
+  "name": "Content Root Layer",
+  "bounds": [785, 5074],
   "children": [
     {
-      "bounds": [785, 4466],
+      "name": "LayoutView #document",
+      "bounds": [785, 5074],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow DIV class='container'",
           "position": [8, 68],
           "bounds": [300, 500],
           "shouldFlattenTransform": false,
           "drawsContent": true,
           "children": [
             {
+              "name": "Scrolling Layer",
               "bounds": [285, 485],
               "shouldFlattenTransform": false,
               "children": [
                 {
+                  "name": "Scrolling Contents Layer",
                   "bounds": [285, 665]
                 }
               ]
             },
             {
+              "name": "Overflow Controls Host Layer",
               "bounds": [300, 500],
               "children": [
                 {
+                  "name": "Horizontal Scrollbar Layer",
                   "position": [0, 485],
                   "bounds": [285, 15]
                 },
                 {
+                  "name": "Vertical Scrollbar Layer",
                   "position": [285, 0],
                   "bounds": [15, 485]
                 },
                 {
+                  "name": "Scroll Corner Layer",
                   "position": [285, 485],
                   "bounds": [15, 15],
                   "drawsContent": true
@@ -299,6 +346,7 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 83],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -306,6 +354,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 148],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -313,6 +362,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV id='selection' class='scrolled'",
           "position": [23, 213],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -320,6 +370,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 278],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -327,6 +378,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 343],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -334,6 +386,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 408],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -341,6 +394,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 473],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -348,6 +402,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 538],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -355,6 +410,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 603],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -362,6 +418,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 668],
           "bounds": [100, 50],
           "contentsOpaque": true,
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/prefer_compositing_to_lcd_text/compositing/overflow/selection-gaps-toggling-with-scrolling-contents-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/prefer_compositing_to_lcd_text/compositing/overflow/selection-gaps-toggling-with-scrolling-contents-expected.txt
index f6d489f..bb9133e 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/prefer_compositing_to_lcd_text/compositing/overflow/selection-gaps-toggling-with-scrolling-contents-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/prefer_compositing_to_lcd_text/compositing/overflow/selection-gaps-toggling-with-scrolling-contents-expected.txt
@@ -14,40 +14,49 @@
 *** iteration 1: ***
 
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow DIV id='container'",
           "position": [8, 68],
           "bounds": [300, 500],
           "shouldFlattenTransform": false,
           "drawsContent": true,
           "children": [
             {
+              "name": "Scrolling Layer",
               "bounds": [285, 485],
               "shouldFlattenTransform": false,
               "children": [
                 {
+                  "name": "Scrolling Contents Layer",
                   "bounds": [285, 665]
                 }
               ]
             },
             {
+              "name": "Overflow Controls Host Layer",
               "bounds": [300, 500],
               "children": [
                 {
+                  "name": "Horizontal Scrollbar Layer",
                   "position": [0, 485],
                   "bounds": [285, 15]
                 },
                 {
+                  "name": "Vertical Scrollbar Layer",
                   "position": [285, 0],
                   "bounds": [15, 485]
                 },
                 {
+                  "name": "Scroll Corner Layer",
                   "position": [285, 485],
                   "bounds": [15, 15],
                   "drawsContent": true
@@ -57,6 +66,7 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 83],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -64,6 +74,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 148],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -71,6 +82,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV id='selection' class='scrolled'",
           "position": [23, 213],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -78,6 +90,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 278],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -85,6 +98,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 343],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -92,6 +106,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 408],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -99,6 +114,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 473],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -106,6 +122,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 538],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -113,6 +130,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 603],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -120,6 +138,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 668],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -135,14 +154,17 @@
 *** iteration 2: ***
 
 {
-  "bounds": [785, 2530],
+  "name": "Content Root Layer",
+  "bounds": [785, 2834],
   "children": [
     {
-      "bounds": [785, 2530],
+      "name": "LayoutView #document",
+      "bounds": [785, 2834],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow DIV id='container'",
           "position": [8, 68],
           "bounds": [300, 500],
           "contentsOpaque": true,
@@ -151,27 +173,33 @@
           "backgroundColor": "#0000FF",
           "children": [
             {
+              "name": "Scrolling Layer",
               "bounds": [285, 485],
               "shouldFlattenTransform": false,
               "children": [
                 {
+                  "name": "Scrolling Contents Layer",
                   "bounds": [285, 665],
                   "drawsContent": true
                 }
               ]
             },
             {
+              "name": "Overflow Controls Host Layer",
               "bounds": [300, 500],
               "children": [
                 {
+                  "name": "Horizontal Scrollbar Layer",
                   "position": [0, 485],
                   "bounds": [285, 15]
                 },
                 {
+                  "name": "Vertical Scrollbar Layer",
                   "position": [285, 0],
                   "bounds": [15, 485]
                 },
                 {
+                  "name": "Scroll Corner Layer",
                   "position": [285, 485],
                   "bounds": [15, 15],
                   "drawsContent": true
@@ -181,6 +209,7 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 83],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -188,6 +217,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 148],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -195,6 +225,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV id='selection' class='scrolled'",
           "position": [23, 213],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -202,6 +233,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 278],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -209,6 +241,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 343],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -216,6 +249,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 408],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -223,6 +257,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 473],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -230,6 +265,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 538],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -237,6 +273,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 603],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -244,6 +281,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 668],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -259,14 +297,17 @@
 *** iteration 3: ***
 
 {
-  "bounds": [785, 4514],
+  "name": "Content Root Layer",
+  "bounds": [785, 5122],
   "children": [
     {
-      "bounds": [785, 4514],
+      "name": "LayoutView #document",
+      "bounds": [785, 5122],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow DIV id='container'",
           "position": [8, 68],
           "bounds": [300, 500],
           "contentsOpaque": true,
@@ -275,27 +316,33 @@
           "backgroundColor": "#0000FF",
           "children": [
             {
+              "name": "Scrolling Layer",
               "bounds": [285, 485],
               "shouldFlattenTransform": false,
               "children": [
                 {
+                  "name": "Scrolling Contents Layer",
                   "bounds": [285, 665],
                   "drawsContent": true
                 }
               ]
             },
             {
+              "name": "Overflow Controls Host Layer",
               "bounds": [300, 500],
               "children": [
                 {
+                  "name": "Horizontal Scrollbar Layer",
                   "position": [0, 485],
                   "bounds": [285, 15]
                 },
                 {
+                  "name": "Vertical Scrollbar Layer",
                   "position": [285, 0],
                   "bounds": [15, 485]
                 },
                 {
+                  "name": "Scroll Corner Layer",
                   "position": [285, 485],
                   "bounds": [15, 15],
                   "drawsContent": true
@@ -305,6 +352,7 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 83],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -312,6 +360,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 148],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -319,6 +368,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV id='selection' class='scrolled'",
           "position": [23, 213],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -326,6 +376,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 278],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -333,6 +384,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 343],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -340,6 +392,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 408],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -347,6 +400,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 473],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -354,6 +408,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 538],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -361,6 +416,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 603],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -368,6 +424,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 668],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -383,40 +440,49 @@
 *** iteration 4: ***
 
 {
-  "bounds": [785, 6498],
+  "name": "Content Root Layer",
+  "bounds": [785, 7410],
   "children": [
     {
-      "bounds": [785, 6498],
+      "name": "LayoutView #document",
+      "bounds": [785, 7410],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow DIV id='container'",
           "position": [8, 68],
           "bounds": [300, 500],
           "shouldFlattenTransform": false,
           "drawsContent": true,
           "children": [
             {
+              "name": "Scrolling Layer",
               "bounds": [285, 485],
               "shouldFlattenTransform": false,
               "children": [
                 {
+                  "name": "Scrolling Contents Layer",
                   "bounds": [285, 665]
                 }
               ]
             },
             {
+              "name": "Overflow Controls Host Layer",
               "bounds": [300, 500],
               "children": [
                 {
+                  "name": "Horizontal Scrollbar Layer",
                   "position": [0, 485],
                   "bounds": [285, 15]
                 },
                 {
+                  "name": "Vertical Scrollbar Layer",
                   "position": [285, 0],
                   "bounds": [15, 485]
                 },
                 {
+                  "name": "Scroll Corner Layer",
                   "position": [285, 485],
                   "bounds": [15, 15],
                   "drawsContent": true
@@ -426,6 +492,7 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 83],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -433,6 +500,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 148],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -440,6 +508,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV id='selection' class='scrolled'",
           "position": [23, 213],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -447,6 +516,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 278],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -454,6 +524,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 343],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -461,6 +532,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 408],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -468,6 +540,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 473],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -475,6 +548,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 538],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -482,6 +556,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 603],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -489,6 +564,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 668],
           "bounds": [100, 50],
           "contentsOpaque": true,
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/prefer_compositing_to_lcd_text/compositing/overflow/text-color-change-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/prefer_compositing_to_lcd_text/compositing/overflow/text-color-change-expected.txt
index c96a9036..a31072b 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/prefer_compositing_to_lcd_text/compositing/overflow/text-color-change-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/prefer_compositing_to_lcd_text/compositing/overflow/text-color-change-expected.txt
@@ -1,352 +1,27 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow PRE id='scroller'",
           "position": [8, 61],
           "bounds": [200, 200],
           "shouldFlattenTransform": false,
           "drawsContent": true,
-          "paintInvalidations": [
-            {
-              "object": "InlineTextBox '\n'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '\n'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '\n'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '\n'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '\n'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '\n'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '\n'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '\n'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '\n'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '\n'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '\n'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '\n'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '\n'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '\n'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '\n'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '\n'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '\n'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '\n'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '\n'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '\n'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '\n'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '\n'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '\n'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '\n'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '\n'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '\n'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '\n'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '\n'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '\n'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '\n'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '\n'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '\n'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '\n'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '\n'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '\n'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '\n'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '\n'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '\n'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '\n'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '\n'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '\n'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '  Text'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '  Text'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '  Text'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '  Text'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '  Text'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '  Text'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '  Text'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '  Text'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '  Text'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '  Text'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '  Text'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '  Text'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '  Text'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '  Text'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '  Text'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '  Text'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '  Text'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '  Text'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '  Text'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '  Text'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '  Text'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '  Text'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '  Text'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '  Text'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '  Text'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '  Text'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '  Text'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '  Text'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '  Text'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '  Text'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '  Text'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '  Text'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '  Text'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '  Text'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '  Text'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '  Text'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '  Text'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '  Text'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '  Text'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '  Text'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '  Text'",
-              "reason": "style change"
-            }
-          ],
           "children": [
             {
+              "name": "Scrolling Layer",
               "bounds": [185, 185],
               "shouldFlattenTransform": false,
               "children": [
                 {
+                  "name": "Scrolling Contents Layer",
                   "bounds": [185, 656],
                   "drawsContent": true,
                   "paintInvalidations": [
@@ -354,351 +29,27 @@
                       "object": "LayoutText #text",
                       "rect": [0, 0, 48, 656],
                       "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '\n'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '\n'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '\n'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '\n'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '\n'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '\n'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '\n'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '\n'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '\n'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '\n'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '\n'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '\n'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '\n'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '\n'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '\n'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '\n'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '\n'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '\n'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '\n'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '\n'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '\n'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '\n'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '\n'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '\n'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '\n'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '\n'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '\n'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '\n'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '\n'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '\n'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '\n'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '\n'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '\n'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '\n'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '\n'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '\n'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '\n'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '\n'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '\n'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '\n'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '\n'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '  Text'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '  Text'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '  Text'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '  Text'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '  Text'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '  Text'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '  Text'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '  Text'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '  Text'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '  Text'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '  Text'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '  Text'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '  Text'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '  Text'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '  Text'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '  Text'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '  Text'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '  Text'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '  Text'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '  Text'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '  Text'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '  Text'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '  Text'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '  Text'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '  Text'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '  Text'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '  Text'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '  Text'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '  Text'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '  Text'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '  Text'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '  Text'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '  Text'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '  Text'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '  Text'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '  Text'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '  Text'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '  Text'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '  Text'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '  Text'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '  Text'",
-                      "reason": "style change"
                     }
                   ]
                 }
               ]
             },
             {
+              "name": "Overflow Controls Host Layer",
               "bounds": [200, 200],
               "children": [
                 {
+                  "name": "Horizontal Scrollbar Layer",
                   "position": [0, 185],
                   "bounds": [185, 15]
                 },
                 {
+                  "name": "Vertical Scrollbar Layer",
                   "position": [185, 0],
                   "bounds": [15, 185]
                 },
                 {
+                  "name": "Scroll Corner Layer",
                   "position": [185, 185],
                   "bounds": [15, 15],
                   "drawsContent": true
@@ -709,6 +60,340 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutText #text",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/prefer_compositing_to_lcd_text/compositing/overflow/text-match-highlight-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/prefer_compositing_to_lcd_text/compositing/overflow/text-match-highlight-expected.txt
index 12e982b..a0bc31d 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/prefer_compositing_to_lcd_text/compositing/overflow/text-match-highlight-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/prefer_compositing_to_lcd_text/compositing/overflow/text-match-highlight-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -10,54 +12,23 @@
           "object": "LayoutText #text",
           "rect": [259, 40, 40, 19],
           "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'findme'",
-          "reason": "full"
         }
       ],
       "children": [
         {
+          "name": "LayoutBlockFlow DIV",
           "position": [0, 60],
           "bounds": [800, 500],
           "shouldFlattenTransform": false,
           "drawsContent": true,
-          "paintInvalidations": [
-            {
-              "object": "InlineTextBox 'Can you findme in this boring text?'",
-              "reason": "full"
-            },
-            {
-              "object": "InlineTextBox 'Findme in a typewriter!'",
-              "reason": "full"
-            },
-            {
-              "object": "InlineTextBox 'Findme on a path! Did you findme?'",
-              "reason": "full"
-            },
-            {
-              "object": "InlineTextBox 'findme'",
-              "reason": "full"
-            },
-            {
-              "object": "InlineTextBox 'findme'",
-              "reason": "full"
-            },
-            {
-              "object": "InlineTextBox 'findme'",
-              "reason": "full"
-            },
-            {
-              "object": "InlineTextBox 'findme'",
-              "reason": "full"
-            }
-          ],
           "children": [
             {
+              "name": "Scrolling Layer",
               "bounds": [785, 485],
               "shouldFlattenTransform": false,
               "children": [
                 {
+                  "name": "Scrolling Contents Layer",
                   "bounds": [785, 1345],
                   "drawsContent": true,
                   "paintInvalidations": [
@@ -95,51 +66,27 @@
                       "object": "LayoutText #text",
                       "rect": [47, 20, 40, 19],
                       "reason": "full"
-                    },
-                    {
-                      "object": "InlineTextBox 'Can you findme in this boring text?'",
-                      "reason": "full"
-                    },
-                    {
-                      "object": "InlineTextBox 'Findme in a typewriter!'",
-                      "reason": "full"
-                    },
-                    {
-                      "object": "InlineTextBox 'Findme on a path! Did you findme?'",
-                      "reason": "full"
-                    },
-                    {
-                      "object": "InlineTextBox 'findme'",
-                      "reason": "full"
-                    },
-                    {
-                      "object": "InlineTextBox 'findme'",
-                      "reason": "full"
-                    },
-                    {
-                      "object": "InlineTextBox 'findme'",
-                      "reason": "full"
-                    },
-                    {
-                      "object": "InlineTextBox 'findme'",
-                      "reason": "full"
                     }
                   ]
                 }
               ]
             },
             {
+              "name": "Overflow Controls Host Layer",
               "bounds": [800, 500],
               "children": [
                 {
+                  "name": "Horizontal Scrollbar Layer",
                   "position": [0, 485],
                   "bounds": [785, 15]
                 },
                 {
+                  "name": "Vertical Scrollbar Layer",
                   "position": [785, 0],
                   "bounds": [15, 485]
                 },
                 {
+                  "name": "Scroll Corner Layer",
                   "position": [785, 485],
                   "bounds": [15, 15],
                   "drawsContent": true
@@ -150,6 +97,72 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutText #text",
+      "reason": "full"
+    },
+    {
+      "object": "InlineTextBox 'findme'",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "full"
+    },
+    {
+      "object": "InlineTextBox 'findme'",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "full"
+    },
+    {
+      "object": "InlineTextBox 'findme'",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "full"
+    },
+    {
+      "object": "InlineTextBox 'findme'",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "full"
+    },
+    {
+      "object": "InlineTextBox 'findme'",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "full"
+    },
+    {
+      "object": "InlineTextBox 'Can you findme in this boring text?'",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "full"
+    },
+    {
+      "object": "InlineTextBox 'Findme in a typewriter!'",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "full"
+    },
+    {
+      "object": "InlineTextBox 'Findme on a path! Did you findme?'",
+      "reason": "full"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/prefer_compositing_to_lcd_text/compositing/overflow/textarea-scroll-touch-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/prefer_compositing_to_lcd_text/compositing/overflow/textarea-scroll-touch-expected.txt
index 7569bf1..12c9b30 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/prefer_compositing_to_lcd_text/compositing/overflow/textarea-scroll-touch-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/prefer_compositing_to_lcd_text/compositing/overflow/textarea-scroll-touch-expected.txt
@@ -1,13 +1,16 @@
   
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutTextControl TEXTAREA",
           "position": [18, 18],
           "bounds": [206, 126],
           "contentsOpaque": true,
@@ -16,24 +19,29 @@
           "backgroundColor": "#CCCCCC",
           "children": [
             {
+              "name": "Scrolling Layer",
               "position": [1, 1],
               "bounds": [189, 124],
               "shouldFlattenTransform": false,
               "children": [
                 {
+                  "name": "Scrolling Contents Layer",
                   "bounds": [189, 328],
                   "drawsContent": true
                 }
               ]
             },
             {
+              "name": "Overflow Controls Host Layer",
               "bounds": [206, 126],
               "children": [
                 {
+                  "name": "Vertical Scrollbar Layer",
                   "position": [190, 1],
                   "bounds": [15, 109]
                 },
                 {
+                  "name": "Scroll Corner Layer",
                   "position": [190, 110],
                   "bounds": [15, 15],
                   "drawsContent": true
@@ -43,6 +51,7 @@
           ]
         },
         {
+          "name": "LayoutTextControl TEXTAREA",
           "position": [248, 18],
           "bounds": [206, 126],
           "contentsOpaque": true,
@@ -51,24 +60,29 @@
           "backgroundColor": "#CCCCCC",
           "children": [
             {
+              "name": "Scrolling Layer",
               "position": [1, 1],
               "bounds": [189, 124],
               "shouldFlattenTransform": false,
               "children": [
                 {
+                  "name": "Scrolling Contents Layer",
                   "bounds": [189, 328],
                   "drawsContent": true
                 }
               ]
             },
             {
+              "name": "Overflow Controls Host Layer",
               "bounds": [206, 126],
               "children": [
                 {
+                  "name": "Vertical Scrollbar Layer",
                   "position": [190, 1],
                   "bounds": [15, 109]
                 },
                 {
+                  "name": "Scroll Corner Layer",
                   "position": [190, 110],
                   "bounds": [15, 15],
                   "drawsContent": true
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/threaded/compositing/visibility/visibility-image-layers-dynamic-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/threaded/compositing/visibility/visibility-image-layers-dynamic-expected.txt
index a8d3643..a59285a3 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/threaded/compositing/visibility/visibility-image-layers-dynamic-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/threaded/compositing/visibility/visibility-image-layers-dynamic-expected.txt
@@ -4,23 +4,28 @@
 Initial
 
 {
+  "name": "Content Root Layer",
   "bounds": [785, 626],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [785, 626],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow DIV class='composited container'",
           "position": [18, 10],
           "bounds": [749, 145]
         },
         {
+          "name": "LayoutBlockFlow DIV class='composited hidden container'",
           "position": [14, 316],
           "bounds": [757, 153],
           "contentsVisible": false,
           "children": [
             {
+              "name": "LayoutImage IMG class='visible composited box'",
               "position": [24, 24],
               "bounds": [100, 100]
             }
@@ -33,29 +38,35 @@
 After step 1
 
 {
-  "bounds": [785, 1078],
+  "name": "Content Root Layer",
+  "bounds": [785, 1158],
   "children": [
     {
-      "bounds": [785, 1078],
+      "name": "LayoutView #document",
+      "bounds": [785, 1158],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow DIV class='composited container'",
           "position": [18, 10],
           "bounds": [749, 145],
           "children": [
             {
+              "name": "LayoutImage IMG class='hidden composited box'",
               "position": [20, 20],
               "bounds": [100, 100]
             }
           ]
         },
         {
+          "name": "LayoutBlockFlow DIV class='composited hidden container'",
           "position": [14, 316],
           "bounds": [757, 153],
           "contentsVisible": false,
           "children": [
             {
+              "name": "LayoutImage IMG class='visible composited box'",
               "position": [24, 24],
               "bounds": [100, 100]
             }
@@ -68,40 +79,48 @@
 After step 2
 
 {
-  "bounds": [785, 1625],
+  "name": "Content Root Layer",
+  "bounds": [785, 1801],
   "children": [
     {
-      "bounds": [785, 1625],
+      "name": "LayoutView #document",
+      "bounds": [785, 1801],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow DIV class='composited container'",
           "position": [18, 10],
           "bounds": [749, 145],
           "children": [
             {
+              "name": "LayoutImage IMG class='hidden composited box'",
               "position": [20, 20],
               "bounds": [100, 100]
             }
           ]
         },
         {
+          "name": "LayoutBlockFlow DIV class='composited hidden container'",
           "position": [14, 161],
           "bounds": [757, 153],
           "drawsContent": true,
           "children": [
             {
+              "name": "LayoutImage IMG class='composited box'",
               "position": [24, 24],
               "bounds": [100, 100]
             }
           ]
         },
         {
+          "name": "LayoutBlockFlow DIV class='composited hidden container'",
           "position": [14, 316],
           "bounds": [757, 153],
           "contentsVisible": false,
           "children": [
             {
+              "name": "LayoutImage IMG class='visible composited box'",
               "position": [24, 24],
               "bounds": [100, 100]
             }
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/forms/button/button-reset-focus-by-mouse-then-keydown-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/forms/button/button-reset-focus-by-mouse-then-keydown-expected.txt
index bad96612..8f660be 100644
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/forms/button/button-reset-focus-by-mouse-then-keydown-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/forms/button/button-reset-focus-by-mouse-then-keydown-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -20,17 +22,31 @@
           "object": "LayoutText #text",
           "rect": [16, 11, 29, 13],
           "reason": "subtree"
-        },
-        {
-          "object": "InlineTextBox 'Reset'",
-          "reason": "subtree"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "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/fast/forms/submit/submit-focus-by-mouse-then-keydown-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/forms/submit/submit-focus-by-mouse-then-keydown-expected.txt
index be961d78..62998270 100644
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/forms/submit/submit-focus-by-mouse-then-keydown-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/forms/submit/submit-focus-by-mouse-then-keydown-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -20,17 +22,31 @@
           "object": "LayoutText #text",
           "rect": [16, 11, 36, 13],
           "reason": "subtree"
-        },
-        {
-          "object": "InlineTextBox 'Submit'",
-          "reason": "subtree"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "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/fast/repaint/change-text-content-and-background-color-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/repaint/change-text-content-and-background-color-expected.txt
index 3e1d7c1..e6b2c84a 100644
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/repaint/change-text-content-and-background-color-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/repaint/change-text-content-and-background-color-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -20,21 +22,27 @@
           "object": "LayoutText #text",
           "rect": [30, 30, 46, 23],
           "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ''",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'NEW'",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutTextControl (positioned) INPUT id='input'",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='inner-editor'",
+      "reason": "invalidate paint rectangle"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "full"
+    },
+    {
+      "object": "InlineTextBox 'NEW'",
+      "reason": "full"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/repaint/control-clip-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/repaint/control-clip-expected.txt
index 61d75c2..f161c19 100644
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/repaint/control-clip-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/repaint/control-clip-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -25,33 +27,35 @@
           "object": "LayoutText (anonymous)",
           "rect": [9, 84, 53, 14],
           "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ''",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ''",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'SUCCESS'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'SUCCESS'",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (anonymous)",
+      "reason": "invalidate paint rectangle"
+    },
+    {
+      "object": "LayoutText (anonymous)",
+      "reason": "full"
+    },
+    {
+      "object": "InlineTextBox 'SUCCESS'",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutBlockFlow (anonymous)",
+      "reason": "invalidate paint rectangle"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "full"
+    },
+    {
+      "object": "InlineTextBox 'SUCCESS'",
+      "reason": "full"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/repaint/search-field-cancel-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/repaint/search-field-cancel-expected.txt
index 03c7da3..bf90657 100644
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/repaint/search-field-cancel-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/repaint/search-field-cancel-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -15,17 +17,27 @@
           "object": "LayoutText #text",
           "rect": [12, 45, 50, 13],
           "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'some text'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV id='inner-editor'",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'some text'",
+      "reason": "layoutObject insertion"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/repaint/subtree-root-skipped-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/repaint/subtree-root-skipped-expected.txt
index ccadf4c..31eb18e 100644
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/repaint/subtree-root-skipped-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/fast/repaint/subtree-root-skipped-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -20,21 +22,27 @@
           "object": "LayoutBlockFlow (positioned) DIV id='div'",
           "rect": [8, 288, 10, 20],
           "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox ''",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'PASS'",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV id='inner-editor'",
+      "reason": "invalidate paint rectangle"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "full"
+    },
+    {
+      "object": "InlineTextBox 'PASS'",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='div'",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/svg/custom/js-late-clipPath-and-object-creation-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/svg/custom/js-late-clipPath-and-object-creation-expected.png
deleted file mode 100644
index b5daa85..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/svg/custom/js-late-clipPath-and-object-creation-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/svg/custom/js-late-clipPath-and-object-creation-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/svg/custom/js-late-clipPath-and-object-creation-expected.txt
deleted file mode 100644
index 8c4b95a..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/svg/custom/js-late-clipPath-and-object-creation-expected.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-layer at (0,0) size 800x600
-  LayoutView at (0,0) size 800x600
-layer at (0,0) size 800x600
-  LayoutSVGRoot {svg} at (0,0) size 0x0
-    LayoutSVGContainer {g} at (0,0) size 0x0 [transform={m=((1.00,0.00)(0.00,1.50)) t=(0.00,0.00)}]
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/svg/custom/js-late-clipPath-creation-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/svg/custom/js-late-clipPath-creation-expected.png
index 7bb4ada..69804db 100644
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/svg/custom/js-late-clipPath-creation-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/svg/custom/js-late-clipPath-creation-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/svg/custom/js-late-clipPath-creation-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/svg/custom/js-late-clipPath-creation-expected.txt
deleted file mode 100644
index eca0915d..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/svg/custom/js-late-clipPath-creation-expected.txt
+++ /dev/null
@@ -1,8 +0,0 @@
-layer at (0,0) size 800x600
-  LayoutView at (0,0) size 800x600
-layer at (0,0) size 800x600
-  LayoutSVGRoot {svg} at (16,39) size 784x174
-    LayoutSVGContainer {g} at (16,39) size 784x174 [transform={m=((1.00,0.00)(0.00,1.50)) t=(0.00,0.00)}]
-      LayoutSVGText {text} at (10,15) size 529x71 contains 1 chunk(s)
-        LayoutSVGInlineText {#text} at (0,0) size 529x70
-          chunk 1 text run 1 at (10.00,70.00) startOffset 0 endOffset 19 width 528.26: "Clipped. INVISIBLE."
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/svg/custom/marker-viewBox-changes-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/svg/custom/marker-viewBox-changes-expected.png
deleted file mode 100644
index 2d1d762..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/svg/custom/marker-viewBox-changes-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/svg/custom/marker-viewBox-changes-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/svg/custom/marker-viewBox-changes-expected.txt
deleted file mode 100644
index 0874863..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/svg/custom/marker-viewBox-changes-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
-  LayoutSVGRoot {svg} at (90,95) size 98x98
-    LayoutSVGHiddenContainer {defs} at (0,0) size 0x0
-      LayoutSVGResourceMarker {marker} [id="markerStart"] [markerUnits=strokeWidth] [ref at (5,5)] [angle=0.00]
-        LayoutSVGRect {rect} at (0,0) size 10x10 [fill={[type=SOLID] [color=#FF0000]}] [x=0.00] [y=0.00] [width=10.00] [height=10.00]
-      LayoutSVGResourceMarker {marker} [id="markerMiddle"] [markerUnits=strokeWidth] [ref at (5,5)] [angle=0.00]
-        LayoutSVGEllipse {circle} at (0,0) size 2x2 [fill={[type=SOLID] [color=#008000]}] [cx=5.00] [cy=5.00] [r=5.00]
-      LayoutSVGResourceMarker {marker} [id="markerEnd"] [markerUnits=strokeWidth] [ref at (5,5)] [angle=0.00]
-        LayoutSVGPath {path} at (0,0) size 2x2 [fill={[type=SOLID] [color=#0000FF]}] [data="M 5 0 L 10 10 L 0 10 Z"]
-    LayoutSVGContainer {g} at (90,95) size 98x98
-      LayoutSVGPath {path} at (90,95) size 98x98 [stroke={[type=SOLID] [color=#000000] [stroke width=8.00]}] [start marker=markerStart] [middle marker=markerMiddle] [end marker=markerEnd] [data="M 130 135 L 180 135 L 180 185"]
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/svg/custom/relative-sized-content-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/svg/custom/relative-sized-content-expected.png
deleted file mode 100644
index 060c1c2..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/svg/custom/relative-sized-content-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/svg/custom/relative-sized-content-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/svg/custom/relative-sized-content-expected.txt
deleted file mode 100644
index b6d0cb0..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/svg/custom/relative-sized-content-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 800x478
-  LayoutBlockFlow {html} at (0,0) size 800x478
-    LayoutBlockFlow {body} at (8,16) size 784x454
-      LayoutBlockFlow {p} at (0,0) size 784x36
-        LayoutText {#text} at (0,0) size 735x36
-          text run at (0,0) width 735: "The svg area contained in the div element (red box), should fill out the whole area (blue rectangle), especially after"
-          text run at (0,18) width 269: "resizing the content box to a different size"
-      LayoutBlockFlow {div} at (0,52) size 102x402 [border: (1px solid #FF0000)]
-        LayoutSVGRoot {svg} at (9,69) size 100x400
-          LayoutSVGRect {rect} at (9,69) size 100x400 [fill={[type=SOLID] [color=#0000FF]}] [x=0.00] [y=0.00] [width=100.00] [height=400.00]
-        LayoutText {#text} at (0,0) size 0x0
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/svg/custom/relative-sized-deep-shadow-tree-content-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/svg/custom/relative-sized-deep-shadow-tree-content-expected.png
deleted file mode 100644
index fbba86d6..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/svg/custom/relative-sized-deep-shadow-tree-content-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/svg/custom/relative-sized-deep-shadow-tree-content-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/svg/custom/relative-sized-deep-shadow-tree-content-expected.txt
deleted file mode 100644
index 5e933a3..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/svg/custom/relative-sized-deep-shadow-tree-content-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 800x478
-  LayoutBlockFlow {html} at (0,0) size 800x478
-    LayoutBlockFlow {body} at (8,16) size 784x454
-      LayoutBlockFlow {p} at (0,0) size 784x36
-        LayoutText {#text} at (0,0) size 765x36
-          text run at (0,0) width 765: "The svg area contained in the div element (red box), should contain one blue rectangle from (50%,50%)-(100%,100%),"
-          text run at (0,18) width 370: "especially after resizing the content box to a different size"
-      LayoutBlockFlow {div} at (0,52) size 102x402 [border: (1px solid #FF0000)]
-        LayoutSVGRoot {svg} at (59,269) size 50x200
-          LayoutSVGHiddenContainer {defs} at (0,0) size 0x0
-            LayoutSVGRect {rect} at (9,169) size 50x200 [fill={[type=SOLID] [color=#0000FF]}] [x=0.00] [y=100.00] [width=50.00] [height=200.00]
-            LayoutSVGContainer {use} at (34,169) size 50x200 [transform={m=((1.00,0.00)(0.00,1.00)) t=(25.00,0.00)}]
-              LayoutSVGRect {rect} at (34,169) size 50x200 [fill={[type=SOLID] [color=#0000FF]}] [x=0.00] [y=100.00] [width=50.00] [height=200.00]
-          LayoutSVGContainer {use} at (59,269) size 50x200 [transform={m=((1.00,0.00)(0.00,1.00)) t=(25.00,100.00)}]
-            LayoutSVGContainer {g} at (59,269) size 50x200 [transform={m=((1.00,0.00)(0.00,1.00)) t=(25.00,0.00)}]
-              LayoutSVGRect {rect} at (59,269) size 50x200 [fill={[type=SOLID] [color=#0000FF]}] [x=0.00] [y=100.00] [width=50.00] [height=200.00]
-        LayoutText {#text} at (0,0) size 0x0
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/svg/custom/relative-sized-image-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/svg/custom/relative-sized-image-expected.png
deleted file mode 100644
index 617563f..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/svg/custom/relative-sized-image-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/svg/custom/relative-sized-image-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/svg/custom/relative-sized-image-expected.txt
deleted file mode 100644
index 69dd178..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/svg/custom/relative-sized-image-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 800x478
-  LayoutBlockFlow {html} at (0,0) size 800x478
-    LayoutBlockFlow {body} at (8,16) size 784x454
-      LayoutBlockFlow {p} at (0,0) size 784x36
-        LayoutText {#text} at (0,0) size 735x36
-          text run at (0,0) width 735: "The svg area contained in the div element (red box), should fill out the whole area (blue rectangle), especially after"
-          text run at (0,18) width 269: "resizing the content box to a different size"
-      LayoutBlockFlow {div} at (0,52) size 102x402 [border: (1px solid #FF0000)]
-        LayoutSVGRoot {svg} at (9,69) size 100x400
-          LayoutSVGImage {image} at (9,69) size 100x400
-        LayoutText {#text} at (0,0) size 0x0
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/svg/custom/relative-sized-shadow-tree-content-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/svg/custom/relative-sized-shadow-tree-content-expected.png
deleted file mode 100644
index ae66824..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/svg/custom/relative-sized-shadow-tree-content-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/svg/custom/relative-sized-shadow-tree-content-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/svg/custom/relative-sized-shadow-tree-content-expected.txt
deleted file mode 100644
index 490f06b..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/svg/custom/relative-sized-shadow-tree-content-expected.txt
+++ /dev/null
@@ -1,22 +0,0 @@
-layer at (0,0) size 800x600
-  LayoutView at (0,0) size 800x600
-layer at (0,0) size 800x478
-  LayoutBlockFlow {html} at (0,0) size 800x478
-    LayoutBlockFlow {body} at (8,16) size 784x454
-      LayoutBlockFlow {p} at (0,0) size 784x36
-        LayoutText {#text} at (0,0) size 736x36
-          text run at (0,0) width 736: "The svg area contained in the div element (red box), should fill out the whole area (two blue rectangles, first: (0,0)-"
-          text run at (0,18) width 686: "(50%,50%), second: (50%,50%)-(100%,100%)), especially after resizing the content box to a different size"
-      LayoutBlockFlow {div} at (0,52) size 102x402 [border: (1px solid #FF0000)]
-        LayoutSVGRoot {svg} at (9,69) size 100x400
-          LayoutSVGHiddenContainer {defs} at (0,0) size 0x0
-            LayoutSVGRect {rect} at (9,269) size 50x200 [fill={[type=SOLID] [color=#0000FF]}] [x=0.00] [y=200.00] [width=50.00] [height=200.00]
-            LayoutSVGRect {rect} at (9,69) size 50x200 [fill={[type=SOLID] [color=#0000FF]}] [x=0.00] [y=0.00] [width=50.00] [height=200.00]
-            LayoutSVGContainer {use} at (9,69) size 50x200
-              LayoutSVGRect {rect} at (9,69) size 50x200 [fill={[type=SOLID] [color=#0000FF]}] [x=0.00] [y=0.00] [width=50.00] [height=200.00]
-          LayoutSVGContainer {use} at (59,269) size 50x200 [transform={m=((1.00,0.00)(0.00,1.00)) t=(50.00,0.00)}]
-            LayoutSVGRect {rect} at (59,269) size 50x200 [fill={[type=SOLID] [color=#0000FF]}] [x=0.00] [y=200.00] [width=50.00] [height=200.00]
-          LayoutSVGContainer {use} at (9,69) size 50x200
-            LayoutSVGContainer {g} at (9,69) size 50x200
-              LayoutSVGRect {rect} at (9,69) size 50x200 [fill={[type=SOLID] [color=#0000FF]}] [x=0.00] [y=0.00] [width=50.00] [height=200.00]
-        LayoutText {#text} at (0,0) size 0x0
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/svg/custom/resource-invalidate-on-target-update-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/svg/custom/resource-invalidate-on-target-update-expected.png
deleted file mode 100644
index 9cf7d2a..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/svg/custom/resource-invalidate-on-target-update-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/svg/custom/resource-invalidate-on-target-update-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.10/svg/custom/resource-invalidate-on-target-update-expected.txt
deleted file mode 100644
index 0c35b5ac..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.10/svg/custom/resource-invalidate-on-target-update-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 800x600
-  LayoutSVGRoot {svg} at (0,10) size 230x350
-    LayoutSVGHiddenContainer {defs} at (0,0) size 0x0
-      LayoutSVGResourceFilter {filter} [id="filter"] [filterUnits=objectBoundingBox] [primitiveUnits=userSpaceOnUse]
-        [feComposite operation="OVER"]
-          [SourceGraphic]
-          [feGaussianBlur stdDeviation="4.00, 4.00"]
-            [SourceAlpha]
-      LayoutSVGResourceClipper {clipPath} [id="clip"] [clipPathUnits=objectBoundingBox]
-        LayoutSVGEllipse {circle} at (0,0) size 1x1 [fill={[type=SOLID] [color=#000000]}] [cx=0.50] [cy=0.50] [r=0.50]
-      LayoutSVGResourceMasker {mask} [id="mask"] [maskUnits=objectBoundingBox] [maskContentUnits=objectBoundingBox]
-        LayoutSVGEllipse {circle} at (0,0) size 1x1 [fill={[type=SOLID] [color=#FFFFFF]}] [cx=0.50] [cy=0.50] [r=0.50]
-    LayoutSVGContainer {g} at (0,10) size 230x350
-      LayoutSVGRect {rect} at (10,10) size 200x100 [fill={[type=SOLID] [color=#008000]}] [x=10.00] [y=10.00] [width=200.00] [height=100.00]
-        [masker="mask"] LayoutSVGResourceMasker {mask} at (10,10) size 200x100
-      LayoutSVGRect {rect} at (10,130) size 200x100 [fill={[type=SOLID] [color=#008000]}] [x=10.00] [y=130.00] [width=200.00] [height=100.00]
-        [clipPath="clip"] LayoutSVGResourceClipper {clipPath} at (10,130) size 200x100
-      LayoutSVGRect {rect} at (0,240) size 230x120 [fill={[type=SOLID] [color=#008000]}] [x=10.00] [y=250.00] [width=200.00] [height=100.00]
-        [filter="filter"] LayoutSVGResourceFilter {filter} at (-10,240) size 240x120
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/compositing/overflow/textarea-scroll-touch-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/compositing/overflow/textarea-scroll-touch-expected.txt
index bd1fe76..ecf5464 100644
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/compositing/overflow/textarea-scroll-touch-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/compositing/overflow/textarea-scroll-touch-expected.txt
@@ -1,13 +1,16 @@
   
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutTextControl TEXTAREA",
           "position": [18, 18],
           "bounds": [206, 126],
           "contentsOpaque": true,
@@ -16,24 +19,29 @@
           "backgroundColor": "#CCCCCC",
           "children": [
             {
+              "name": "Scrolling Layer",
               "position": [1, 1],
               "bounds": [189, 124],
               "shouldFlattenTransform": false,
               "children": [
                 {
+                  "name": "Scrolling Contents Layer",
                   "bounds": [189, 308],
                   "drawsContent": true
                 }
               ]
             },
             {
+              "name": "Overflow Controls Host Layer",
               "bounds": [206, 126],
               "children": [
                 {
+                  "name": "Vertical Scrollbar Layer",
                   "position": [190, 1],
                   "bounds": [15, 109]
                 },
                 {
+                  "name": "Scroll Corner Layer",
                   "position": [190, 110],
                   "bounds": [15, 15],
                   "drawsContent": true
@@ -43,6 +51,7 @@
           ]
         },
         {
+          "name": "LayoutTextControl TEXTAREA",
           "position": [248, 18],
           "bounds": [206, 126],
           "contentsOpaque": true,
@@ -51,24 +60,29 @@
           "backgroundColor": "#CCCCCC",
           "children": [
             {
+              "name": "Scrolling Layer",
               "position": [1, 1],
               "bounds": [189, 124],
               "shouldFlattenTransform": false,
               "children": [
                 {
+                  "name": "Scrolling Contents Layer",
                   "bounds": [189, 308],
                   "drawsContent": true
                 }
               ]
             },
             {
+              "name": "Overflow Controls Host Layer",
               "bounds": [206, 126],
               "children": [
                 {
+                  "name": "Vertical Scrollbar Layer",
                   "position": [190, 1],
                   "bounds": [15, 109]
                 },
                 {
+                  "name": "Scroll Corner Layer",
                   "position": [190, 110],
                   "bounds": [15, 15],
                   "drawsContent": true
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/forms/submit/submit-focus-by-mouse-then-keydown-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/forms/submit/submit-focus-by-mouse-then-keydown-expected.txt
index 1829ceb..db76a8f 100644
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/forms/submit/submit-focus-by-mouse-then-keydown-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/forms/submit/submit-focus-by-mouse-then-keydown-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -20,17 +22,31 @@
           "object": "LayoutText #text",
           "rect": [16, 11, 38, 13],
           "reason": "subtree"
-        },
-        {
-          "object": "InlineTextBox 'Submit'",
-          "reason": "subtree"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "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/fast/repaint/caret-invalidation-in-overflow-scroll-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/repaint/caret-invalidation-in-overflow-scroll-expected.txt
index 916bccfd..add7271 100644
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/repaint/caret-invalidation-in-overflow-scroll-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/repaint/caret-invalidation-in-overflow-scroll-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -18,6 +20,16 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV id='inner-editor'",
+      "reason": "invalidate paint rectangle"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='inner-editor'",
+      "reason": "invalidate paint rectangle"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/repaint/change-text-content-and-background-color-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/repaint/change-text-content-and-background-color-expected.txt
index 05ecb45..74a5c0b 100644
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/repaint/change-text-content-and-background-color-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/repaint/change-text-content-and-background-color-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -20,21 +22,27 @@
           "object": "LayoutText #text",
           "rect": [30, 30, 43, 23],
           "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ''",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'NEW'",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutTextControl (positioned) INPUT id='input'",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='inner-editor'",
+      "reason": "invalidate paint rectangle"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "full"
+    },
+    {
+      "object": "InlineTextBox 'NEW'",
+      "reason": "full"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/repaint/control-clip-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/repaint/control-clip-expected.txt
index cbc21f2..f19a0704 100644
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/repaint/control-clip-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/repaint/control-clip-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -25,33 +27,35 @@
           "object": "LayoutText (anonymous)",
           "rect": [9, 84, 47, 14],
           "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ''",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ''",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'SUCCESS'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'SUCCESS'",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (anonymous)",
+      "reason": "invalidate paint rectangle"
+    },
+    {
+      "object": "LayoutText (anonymous)",
+      "reason": "full"
+    },
+    {
+      "object": "InlineTextBox 'SUCCESS'",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutBlockFlow (anonymous)",
+      "reason": "invalidate paint rectangle"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "full"
+    },
+    {
+      "object": "InlineTextBox 'SUCCESS'",
+      "reason": "full"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/repaint/details-open-repaint-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/repaint/details-open-repaint-expected.txt
index 2e63a8cf..1874019 100644
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/repaint/details-open-repaint-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/repaint/details-open-repaint-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -25,33 +27,55 @@
           "object": "LayoutDetailsMarker DIV id='details-marker'",
           "rect": [8, 53, 11, 11],
           "reason": "full"
-        },
-        {
-          "object": "HorizontalScrollbar",
-          "reason": "scroll"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='inner-editor'",
-          "reason": "scroll"
-        },
-        {
-          "object": "LayoutText #text",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "LayoutText #text",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "VerticalScrollbar",
-          "reason": "scroll"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutDetailsMarker DIV id='details-marker'",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='details-content'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutTextControl INPUT",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='inner-editor'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='inner-editor'",
+      "reason": "scroll"
+    },
+    {
+      "object": "HorizontalScrollbar",
+      "reason": "scroll"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='inner-editor'",
+      "reason": "scroll"
+    },
+    {
+      "object": "VerticalScrollbar",
+      "reason": "scroll"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "layoutObject insertion"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/repaint/japanese-rl-selection-repaint-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/repaint/japanese-rl-selection-repaint-expected.txt
index c23f1d2..26960c5 100644
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/repaint/japanese-rl-selection-repaint-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/repaint/japanese-rl-selection-repaint-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -15,105 +17,115 @@
           "object": "LayoutText #text",
           "rect": [420, 23, 352, 548],
           "reason": "selection"
-        },
-        {
-          "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": "incremental"
-        },
-        {
-          "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": "selection"
-        },
-        {
-          "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": "incremental"
-        },
-        {
-          "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": "selection"
-        },
-        {
-          "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": "incremental"
-        },
-        {
-          "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": "selection"
-        },
-        {
-          "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": "incremental"
-        },
-        {
-          "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": "selection"
-        },
-        {
-          "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": "incremental"
-        },
-        {
-          "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": "selection"
-        },
-        {
-          "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": "incremental"
-        },
-        {
-          "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": "selection"
-        },
-        {
-          "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": "incremental"
-        },
-        {
-          "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": "selection"
-        },
-        {
-          "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": "incremental"
-        },
-        {
-          "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": "selection"
-        },
-        {
-          "object": "InlineTextBox '\u30EC\u30B9\u3060\u3051\u3067\u306A\u304F\u3001\u8A2A\u554F'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox '\u30EC\u30B9\u3060\u3051\u3067\u306A\u304F\u3001\u8A2A\u554F'",
-          "reason": "selection"
-        },
-        {
-          "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": "incremental"
-        },
-        {
-          "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": "selection"
-        },
-        {
-          "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": "incremental"
-        },
-        {
-          "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": "selection"
-        },
-        {
-          "object": "LayoutBlockFlow BODY",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutBlockFlow HTML",
-          "reason": "selection"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow HTML",
+      "reason": "selection"
+    },
+    {
+      "object": "LayoutBlockFlow BODY",
+      "reason": "selection"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "selection"
+    },
+    {
+      "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": "selection"
+    },
+    {
+      "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": "selection"
+    },
+    {
+      "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": "selection"
+    },
+    {
+      "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": "selection"
+    },
+    {
+      "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": "selection"
+    },
+    {
+      "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": "selection"
+    },
+    {
+      "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": "selection"
+    },
+    {
+      "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": "selection"
+    },
+    {
+      "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": "selection"
+    },
+    {
+      "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": "selection"
+    },
+    {
+      "object": "InlineTextBox '\u30EC\u30B9\u3060\u3051\u3067\u306A\u304F\u3001\u8A2A\u554F'",
+      "reason": "selection"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "incremental"
+    },
+    {
+      "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": "incremental"
+    },
+    {
+      "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": "incremental"
+    },
+    {
+      "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": "incremental"
+    },
+    {
+      "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": "incremental"
+    },
+    {
+      "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": "incremental"
+    },
+    {
+      "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": "incremental"
+    },
+    {
+      "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": "incremental"
+    },
+    {
+      "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": "incremental"
+    },
+    {
+      "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": "incremental"
+    },
+    {
+      "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": "incremental"
+    },
+    {
+      "object": "InlineTextBox '\u30EC\u30B9\u3060\u3051\u3067\u306A\u304F\u3001\u8A2A\u554F'",
+      "reason": "incremental"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/repaint/multi-layout-one-frame-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/repaint/multi-layout-one-frame-expected.txt
index 91f6aea275..6853ca63 100644
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/repaint/multi-layout-one-frame-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/repaint/multi-layout-one-frame-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -25,33 +27,35 @@
           "object": "LayoutText #text",
           "rect": [11, 11, 40, 13],
           "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ''",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ''",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'PASSED'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'PASSED'",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV id='inner-editor'",
+      "reason": "invalidate paint rectangle"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "full"
+    },
+    {
+      "object": "InlineTextBox 'PASSED'",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='inner-editor'",
+      "reason": "invalidate paint rectangle"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "full"
+    },
+    {
+      "object": "InlineTextBox 'PASSED'",
+      "reason": "full"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/repaint/search-field-cancel-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/repaint/search-field-cancel-expected.txt
index a95b4b82..942b260 100644
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/repaint/search-field-cancel-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/repaint/search-field-cancel-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -15,17 +17,27 @@
           "object": "LayoutText #text",
           "rect": [12, 45, 54, 13],
           "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'some text'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV id='inner-editor'",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'some text'",
+      "reason": "layoutObject insertion"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/repaint/stacked-diacritics-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/repaint/stacked-diacritics-expected.txt
index ee87e686..91053e89 100644
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/repaint/stacked-diacritics-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/repaint/stacked-diacritics-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -10,17 +12,15 @@
           "object": "LayoutText #text",
           "rect": [19, 153, 131, 47],
           "reason": "layoutObject removal"
-        },
-        {
-          "object": "InlineTextBox '\u1EA6\u1EA4\u1EAA\u1EA8\u1EB0'",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutText #text",
+      "reason": "layoutObject removal"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/repaint/subtree-root-skipped-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/repaint/subtree-root-skipped-expected.txt
index 50b46474..98fcbc33 100644
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/repaint/subtree-root-skipped-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/repaint/subtree-root-skipped-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -20,21 +22,27 @@
           "object": "LayoutBlockFlow (positioned) DIV id='div'",
           "rect": [8, 288, 10, 20],
           "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox ''",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'PASS'",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV id='inner-editor'",
+      "reason": "invalidate paint rectangle"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "full"
+    },
+    {
+      "object": "InlineTextBox 'PASS'",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='div'",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/repaint/window-resize-background-image-fixed-centered-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/repaint/window-resize-background-image-fixed-centered-expected.txt
new file mode 100644
index 0000000..1a571c4
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/fast/repaint/window-resize-background-image-fixed-centered-expected.txt
@@ -0,0 +1,181 @@
+{
+  "name": "Content Root Layer",
+  "bounds": [600, 250],
+  "children": [
+    {
+      "name": "LayoutView #document",
+      "bounds": [600, 250],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "paintInvalidations": [
+        {
+          "object": "LayoutView #document",
+          "rect": [0, 250, 600, 250],
+          "reason": "incremental"
+        },
+        {
+          "object": "LayoutBlockFlow HTML",
+          "rect": [0, 0, 600, 8],
+          "reason": "forced by layout"
+        }
+      ]
+    }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutView #document",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutBlockFlow HTML",
+      "reason": "forced by layout"
+    }
+  ]
+}
+{
+  "name": "Content Root Layer",
+  "bounds": [400, 250],
+  "children": [
+    {
+      "name": "LayoutView #document",
+      "bounds": [400, 250],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "paintInvalidations": [
+        {
+          "object": "LayoutBlockFlow HTML",
+          "rect": [0, 0, 600, 8],
+          "reason": "forced by layout"
+        },
+        {
+          "object": "LayoutView #document",
+          "rect": [0, 0, 400, 250],
+          "reason": "full"
+        },
+        {
+          "object": "LayoutView #document",
+          "rect": [400, 0, 200, 250],
+          "reason": "incremental"
+        }
+      ]
+    }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutView #document",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutView #document",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutBlockFlow HTML",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutBlockFlow BODY",
+      "reason": "became visible"
+    }
+  ]
+}
+{
+  "name": "Content Root Layer",
+  "bounds": [400, 600],
+  "children": [
+    {
+      "name": "LayoutView #document",
+      "bounds": [400, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "paintInvalidations": [
+        {
+          "object": "LayoutView #document",
+          "rect": [0, 0, 400, 600],
+          "reason": "full"
+        },
+        {
+          "object": "LayoutView #document",
+          "rect": [0, 0, 400, 600],
+          "reason": "full"
+        },
+        {
+          "object": "LayoutView #document",
+          "rect": [0, 250, 400, 350],
+          "reason": "incremental"
+        },
+        {
+          "object": "LayoutBlockFlow HTML",
+          "rect": [0, 0, 400, 8],
+          "reason": "forced by layout"
+        }
+      ]
+    }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutView #document",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutView #document",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutBlockFlow HTML",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutView #document",
+      "reason": "full"
+    }
+  ]
+}
+{
+  "name": "Content Root Layer",
+  "bounds": [800, 600],
+  "children": [
+    {
+      "name": "LayoutView #document",
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "paintInvalidations": [
+        {
+          "object": "LayoutView #document",
+          "rect": [0, 0, 800, 600],
+          "reason": "full"
+        },
+        {
+          "object": "LayoutBlockFlow HTML",
+          "rect": [0, 0, 800, 8],
+          "reason": "forced by layout"
+        },
+        {
+          "object": "LayoutView #document",
+          "rect": [400, 0, 400, 600],
+          "reason": "incremental"
+        }
+      ]
+    }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutView #document",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutView #document",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutBlockFlow HTML",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutBlockFlow BODY",
+      "reason": "became visible"
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/paint/selection/selection-drag-image-in-iframe-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/paint/selection/selection-drag-image-in-iframe-expected.png
deleted file mode 100644
index 48da8221..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/paint/selection/selection-drag-image-in-iframe-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/paint/selection/selection-drag-image-in-iframe-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/paint/selection/selection-drag-image-in-iframe-expected.txt
deleted file mode 100644
index 99abcfe..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/paint/selection/selection-drag-image-in-iframe-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 800x174
-  LayoutBlockFlow {HTML} at (0,0) size 800x174
-    LayoutBlockFlow {BODY} at (8,8) size 784x158
-      LayoutText {#text} at (0,0) size 0x0
-layer at (108,108) size 304x154
-  LayoutIFrame (relative positioned) {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 300x34
-      LayoutBlockFlow {HTML} at (0,0) size 300x34
-        LayoutBlockFlow {BODY} at (8,8) size 284x18
-          LayoutImage {IMG} at (0,3) size 11x11
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/svg/custom/js-late-clipPath-and-object-creation-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/svg/custom/js-late-clipPath-and-object-creation-expected.png
deleted file mode 100644
index 69804db..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/svg/custom/js-late-clipPath-and-object-creation-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/svg/custom/js-late-clipPath-and-object-creation-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/svg/custom/js-late-clipPath-and-object-creation-expected.txt
deleted file mode 100644
index a3aa99c..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/svg/custom/js-late-clipPath-and-object-creation-expected.txt
+++ /dev/null
@@ -1,86 +0,0 @@
-{
-  "bounds": [800, 600],
-  "children": [
-    {
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutSVGContainer g id='content'",
-          "rect": [16, 39, 784, 174],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGContainer g id='content'",
-          "rect": [16, 39, 784, 174],
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [16, 39, 784, 174],
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "LayoutSVGRoot svg id='svg-root'",
-          "rect": [16, 39, 784, 174],
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [16, 39, 784, 174],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [16, 39, 784, 174],
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [334, 39, 466, 174],
-          "reason": "incremental"
-        },
-        {
-          "object": "LayoutSVGRoot svg id='svg-root'",
-          "rect": [334, 39, 466, 174],
-          "reason": "incremental"
-        },
-        {
-          "object": "LayoutSVGPath path",
-          "rect": [0, 0, 334, 500],
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'Clipped. INVISIBLE.'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'Clipped. INVISIBLE.'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Clipped. INVISIBLE.'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "LayoutSVGResourceClipper clipPath id='dynClip'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        }
-      ]
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/svg/custom/js-late-clipPath-creation-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/svg/custom/js-late-clipPath-creation-expected.txt
deleted file mode 100644
index 481e35d5..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/svg/custom/js-late-clipPath-creation-expected.txt
+++ /dev/null
@@ -1,58 +0,0 @@
-{
-  "bounds": [800, 600],
-  "children": [
-    {
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutSVGContainer g id='content'",
-          "rect": [16, 39, 784, 174],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "rect": [16, 39, 784, 174],
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "rect": [334, 39, 466, 174],
-          "reason": "incremental"
-        },
-        {
-          "object": "LayoutSVGRoot svg id='svg-root'",
-          "rect": [334, 39, 466, 174],
-          "reason": "incremental"
-        },
-        {
-          "object": "LayoutSVGPath path",
-          "rect": [0, 0, 334, 500],
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'Clipped. INVISIBLE.'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'Clipped. INVISIBLE.'",
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGResourceClipper clipPath id='dynClip'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        }
-      ]
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/svg/custom/marker-viewBox-changes-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/svg/custom/marker-viewBox-changes-expected.png
deleted file mode 100644
index e8de613..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/svg/custom/marker-viewBox-changes-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/svg/custom/marker-viewBox-changes-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/svg/custom/marker-viewBox-changes-expected.txt
deleted file mode 100644
index 47bfcb2..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/svg/custom/marker-viewBox-changes-expected.txt
+++ /dev/null
@@ -1,37 +0,0 @@
-{
-  "bounds": [800, 600],
-  "children": [
-    {
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutSVGContainer g",
-          "rect": [90, 95, 98, 98],
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutSVGPath path id='go'",
-          "rect": [90, 95, 98, 98],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGRoot svg",
-          "rect": [90, 95, 98, 98],
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "rect": [0, 0, 10, 10],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGResourceMarker marker id='markerStart'",
-          "reason": "full"
-        }
-      ]
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/svg/custom/relative-sized-content-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/svg/custom/relative-sized-content-expected.png
deleted file mode 100644
index 696067d..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/svg/custom/relative-sized-content-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/svg/custom/relative-sized-content-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/svg/custom/relative-sized-content-expected.txt
deleted file mode 100644
index 856efc2..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/svg/custom/relative-sized-content-expected.txt
+++ /dev/null
@@ -1,40 +0,0 @@
-{
-  "bounds": [800, 600],
-  "children": [
-    {
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow div id='contentBox'",
-          "rect": [8, 68, 402, 402],
-          "reason": "forced by layout"
-        },
-        {
-          "object": "LayoutSVGRect rect id='targetRect'",
-          "rect": [9, 69, 400, 400],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGRoot svg",
-          "rect": [109, 69, 300, 400],
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        }
-      ]
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/svg/custom/relative-sized-deep-shadow-tree-content-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/svg/custom/relative-sized-deep-shadow-tree-content-expected.png
deleted file mode 100644
index 07c84a37a..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/svg/custom/relative-sized-deep-shadow-tree-content-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/svg/custom/relative-sized-deep-shadow-tree-content-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/svg/custom/relative-sized-deep-shadow-tree-content-expected.txt
deleted file mode 100644
index 721e8a8d..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/svg/custom/relative-sized-deep-shadow-tree-content-expected.txt
+++ /dev/null
@@ -1,95 +0,0 @@
-{
-  "bounds": [800, 600],
-  "children": [
-    {
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow div id='contentBox'",
-          "rect": [8, 68, 402, 402],
-          "reason": "forced by layout"
-        },
-        {
-          "object": "LayoutSVGContainer g id='targetUse'",
-          "rect": [209, 269, 200, 200],
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutSVGContainer use",
-          "rect": [209, 269, 200, 200],
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutSVGRect rect id='targetRect'",
-          "rect": [209, 269, 200, 200],
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutSVGRoot svg",
-          "rect": [209, 269, 200, 200],
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutSVGContainer use id='targetUse'",
-          "rect": [109, 169, 200, 200],
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutSVGRect rect id='targetRect'",
-          "rect": [109, 169, 200, 200],
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutSVGRect rect id='targetRect'",
-          "rect": [9, 169, 200, 200],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGContainer g id='targetUse'",
-          "rect": [59, 269, 50, 200],
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutSVGContainer use",
-          "rect": [59, 269, 50, 200],
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutSVGRect rect id='targetRect'",
-          "rect": [59, 269, 50, 200],
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutSVGRoot svg",
-          "rect": [59, 269, 50, 200],
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutSVGContainer use id='targetUse'",
-          "rect": [34, 169, 50, 200],
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutSVGRect rect id='targetRect'",
-          "rect": [34, 169, 50, 200],
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        }
-      ]
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/svg/custom/relative-sized-image-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/svg/custom/relative-sized-image-expected.png
deleted file mode 100644
index 1d23f06..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/svg/custom/relative-sized-image-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/svg/custom/relative-sized-image-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/svg/custom/relative-sized-image-expected.txt
deleted file mode 100644
index 483aad1..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/svg/custom/relative-sized-image-expected.txt
+++ /dev/null
@@ -1,40 +0,0 @@
-{
-  "bounds": [800, 600],
-  "children": [
-    {
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow div id='contentBox'",
-          "rect": [8, 68, 402, 402],
-          "reason": "forced by layout"
-        },
-        {
-          "object": "LayoutSVGImage image",
-          "rect": [9, 69, 400, 400],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGRoot svg",
-          "rect": [109, 69, 300, 400],
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        }
-      ]
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/svg/custom/relative-sized-shadow-tree-content-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/svg/custom/relative-sized-shadow-tree-content-expected.png
deleted file mode 100644
index 57414fc..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/svg/custom/relative-sized-shadow-tree-content-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/svg/custom/relative-sized-shadow-tree-content-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/svg/custom/relative-sized-shadow-tree-content-expected.txt
deleted file mode 100644
index e45ca83..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/svg/custom/relative-sized-shadow-tree-content-expected.txt
+++ /dev/null
@@ -1,90 +0,0 @@
-{
-  "bounds": [800, 600],
-  "children": [
-    {
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow div id='contentBox'",
-          "rect": [8, 68, 402, 402],
-          "reason": "forced by layout"
-        },
-        {
-          "object": "LayoutSVGRoot svg",
-          "rect": [109, 69, 300, 400],
-          "reason": "incremental"
-        },
-        {
-          "object": "LayoutSVGContainer use",
-          "rect": [209, 269, 200, 200],
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutSVGRect rect id='targetRect'",
-          "rect": [209, 269, 200, 200],
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutSVGRect rect id='targetRect'",
-          "rect": [9, 269, 200, 200],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGContainer g id='targetUse'",
-          "rect": [9, 69, 200, 200],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGContainer use",
-          "rect": [9, 69, 200, 200],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGContainer use id='targetUse'",
-          "rect": [9, 69, 200, 200],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGRect rect id='targetRect1'",
-          "rect": [9, 69, 200, 200],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGRect rect id='targetRect1'",
-          "rect": [9, 69, 200, 200],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGRect rect id='targetRect1'",
-          "rect": [9, 69, 200, 200],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGContainer use",
-          "rect": [59, 269, 50, 200],
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutSVGRect rect id='targetRect'",
-          "rect": [59, 269, 50, 200],
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        }
-      ]
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/svg/custom/resource-invalidate-on-target-update-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/svg/custom/resource-invalidate-on-target-update-expected.png
deleted file mode 100644
index 2dc9f05..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/svg/custom/resource-invalidate-on-target-update-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/svg/custom/resource-invalidate-on-target-update-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/svg/custom/resource-invalidate-on-target-update-expected.txt
deleted file mode 100644
index beb07bb2..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/svg/custom/resource-invalidate-on-target-update-expected.txt
+++ /dev/null
@@ -1,38 +0,0 @@
-{
-  "bounds": [800, 600],
-  "children": [
-    {
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutSVGContainer g id='box'",
-          "rect": [0, 10, 230, 350],
-          "reason": "full"
-        },
-        {
-          "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"
-        },
-        {
-          "object": "LayoutSVGRoot svg",
-          "rect": [120, 10, 110, 350],
-          "reason": "incremental"
-        }
-      ]
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/virtual/prefer_compositing_to_lcd_text/compositing/overflow/textarea-scroll-touch-expected.txt b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/virtual/prefer_compositing_to_lcd_text/compositing/overflow/textarea-scroll-touch-expected.txt
index bd1fe76..ecf5464 100644
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.9/virtual/prefer_compositing_to_lcd_text/compositing/overflow/textarea-scroll-touch-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.9/virtual/prefer_compositing_to_lcd_text/compositing/overflow/textarea-scroll-touch-expected.txt
@@ -1,13 +1,16 @@
   
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutTextControl TEXTAREA",
           "position": [18, 18],
           "bounds": [206, 126],
           "contentsOpaque": true,
@@ -16,24 +19,29 @@
           "backgroundColor": "#CCCCCC",
           "children": [
             {
+              "name": "Scrolling Layer",
               "position": [1, 1],
               "bounds": [189, 124],
               "shouldFlattenTransform": false,
               "children": [
                 {
+                  "name": "Scrolling Contents Layer",
                   "bounds": [189, 308],
                   "drawsContent": true
                 }
               ]
             },
             {
+              "name": "Overflow Controls Host Layer",
               "bounds": [206, 126],
               "children": [
                 {
+                  "name": "Vertical Scrollbar Layer",
                   "position": [190, 1],
                   "bounds": [15, 109]
                 },
                 {
+                  "name": "Scroll Corner Layer",
                   "position": [190, 110],
                   "bounds": [15, 15],
                   "drawsContent": true
@@ -43,6 +51,7 @@
           ]
         },
         {
+          "name": "LayoutTextControl TEXTAREA",
           "position": [248, 18],
           "bounds": [206, 126],
           "contentsOpaque": true,
@@ -51,24 +60,29 @@
           "backgroundColor": "#CCCCCC",
           "children": [
             {
+              "name": "Scrolling Layer",
               "position": [1, 1],
               "bounds": [189, 124],
               "shouldFlattenTransform": false,
               "children": [
                 {
+                  "name": "Scrolling Contents Layer",
                   "bounds": [189, 308],
                   "drawsContent": true
                 }
               ]
             },
             {
+              "name": "Overflow Controls Host Layer",
               "bounds": [206, 126],
               "children": [
                 {
+                  "name": "Vertical Scrollbar Layer",
                   "position": [190, 1],
                   "bounds": [15, 109]
                 },
                 {
+                  "name": "Scroll Corner Layer",
                   "position": [190, 110],
                   "bounds": [15, 15],
                   "drawsContent": true
diff --git a/third_party/WebKit/LayoutTests/platform/mac/compositing/geometry/layer-due-to-layer-children-deep-switch-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/compositing/geometry/layer-due-to-layer-children-deep-switch-expected.txt
index e807691..4eb0f99 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/compositing/geometry/layer-due-to-layer-children-deep-switch-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/compositing/geometry/layer-due-to-layer-children-deep-switch-expected.txt
@@ -3,9 +3,11 @@
 
 First dump layer tree:
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true
@@ -15,19 +17,23 @@
 
 Second dump layer tree:
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow (relative positioned) DIV id='parent'",
           "position": [8, 8],
           "bounds": [342, 292],
           "drawsContent": true,
           "children": [
             {
+              "name": "LayoutBlockFlow (relative positioned) DIV id='child'",
               "position": [31, 39],
               "bounds": [250, 220],
               "contentsOpaque": true,
@@ -35,6 +41,7 @@
               "backgroundColor": "#0000FF",
               "children": [
                 {
+                  "name": "LayoutBlockFlow (relative positioned) DIV id='grandchild'",
                   "position": [10, 10],
                   "bounds": [200, 200],
                   "contentsOpaque": true,
@@ -48,6 +55,7 @@
                   ],
                   "children": [
                     {
+                      "name": "LayoutBlockFlow (relative positioned) DIV id='greatgrandchild'",
                       "position": [100, 0],
                       "bounds": [250, 100],
                       "contentsOpaque": true,
@@ -73,10 +81,12 @@
 
 Third dump layer tree:
 {
-  "bounds": [785, 1376],
+  "name": "Content Root Layer",
+  "bounds": [785, 1496],
   "children": [
     {
-      "bounds": [785, 1376],
+      "name": "LayoutView #document",
+      "bounds": [785, 1496],
       "contentsOpaque": true,
       "drawsContent": true
     }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/compositing/geometry/layer-due-to-layer-children-switch-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/compositing/geometry/layer-due-to-layer-children-switch-expected.txt
index 86b0100..97681a4 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/compositing/geometry/layer-due-to-layer-children-switch-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/compositing/geometry/layer-due-to-layer-children-switch-expected.txt
@@ -3,9 +3,11 @@
 
 First dump layer tree:
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true
@@ -15,19 +17,23 @@
 
 Second dump layer tree:
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow (relative positioned) DIV id='parent' class='parent'",
           "position": [8, 8],
           "bounds": [242, 192],
           "drawsContent": true,
           "children": [
             {
+              "name": "LayoutBlockFlow (relative positioned) DIV id='child' class='child'",
               "position": [121, 39],
               "bounds": [250, 100],
               "contentsOpaque": true,
@@ -49,10 +55,12 @@
 
 Third dump layer tree:
 {
-  "bounds": [785, 916],
+  "name": "Content Root Layer",
+  "bounds": [785, 1006],
   "children": [
     {
-      "bounds": [785, 916],
+      "name": "LayoutView #document",
+      "bounds": [785, 1006],
       "contentsOpaque": true,
       "drawsContent": true
     }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/compositing/geometry/limit-layer-bounds-overflow-root-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/compositing/geometry/limit-layer-bounds-overflow-root-expected.txt
index 51c6bb5..adbb0a4 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/compositing/geometry/limit-layer-bounds-overflow-root-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/compositing/geometry/limit-layer-bounds-overflow-root-expected.txt
@@ -1,19 +1,24 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "Squashing Containment Layer",
           "shouldFlattenTransform": false,
           "children": [
             {
+              "name": "LayoutBlockFlow (positioned) DIV class='compositing'",
               "position": [21, 21],
               "bounds": [100, 100]
             },
             {
+              "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV class='indicator')",
               "bounds": [211, 142],
               "drawsContent": true
             }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/compositing/geometry/preserve-3d-switching-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/compositing/geometry/preserve-3d-switching-expected.txt
index 1a0e92f..39082a31 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/compositing/geometry/preserve-3d-switching-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/compositing/geometry/preserve-3d-switching-expected.txt
@@ -2,19 +2,23 @@
 
 transform: translateZ(-100px) rotateY(45deg);
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow (relative positioned) DIV id='container'",
           "position": [108, 73],
           "bounds": [304, 304],
           "drawsContent": true,
           "children": [
             {
+              "name": "Child Transform Layer",
               "bounds": [304, 304],
               "shouldFlattenTransform": false,
               "transform": [
@@ -25,6 +29,7 @@
               ],
               "children": [
                 {
+                  "name": "LayoutBlockFlow DIV id='parent'",
                   "position": [12, 12],
                   "bounds": [280, 280],
                   "opacity": 0.800000011920929,
@@ -41,6 +46,7 @@
                   ],
                   "children": [
                     {
+                      "name": "LayoutBlockFlow (positioned) DIV",
                       "position": [40, 40],
                       "bounds": [200, 200],
                       "opacity": 0.699999988079071,
diff --git a/third_party/WebKit/LayoutTests/platform/mac/compositing/layer-creation/no-compositing-for-preserve-3d-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/compositing/layer-creation/no-compositing-for-preserve-3d-expected.txt
index e9005e67..29d52654 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/compositing/layer-creation/no-compositing-for-preserve-3d-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/compositing/layer-creation/no-compositing-for-preserve-3d-expected.txt
@@ -2,14 +2,17 @@
 This layer should not be composited.
 This layer should be composited.
 {
+  "name": "Content Root Layer",
   "bounds": [785, 611],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [785, 611],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow DIV class='preserve3d'",
           "position": [18, 390],
           "bounds": [342, 180],
           "shouldFlattenTransform": false,
@@ -17,6 +20,7 @@
           "drawsContent": true,
           "children": [
             {
+              "name": "LayoutBlockFlow (relative positioned) DIV class='box'",
               "position": [31, 49],
               "bounds": [100, 100],
               "contentsOpaque": true,
diff --git a/third_party/WebKit/LayoutTests/platform/mac/compositing/overflow/selection-gaps-after-removing-scrolling-contents-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/compositing/overflow/selection-gaps-after-removing-scrolling-contents-expected.txt
index 63c3fb5..a80e1a2 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/compositing/overflow/selection-gaps-after-removing-scrolling-contents-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/compositing/overflow/selection-gaps-after-removing-scrolling-contents-expected.txt
@@ -14,14 +14,17 @@
 *** iteration 1: ***
 
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow DIV id='container'",
           "position": [8, 80],
           "bounds": [300, 500],
           "contentsOpaque": true,
@@ -30,27 +33,33 @@
           "backgroundColor": "#0000FF",
           "children": [
             {
+              "name": "Scrolling Layer",
               "bounds": [285, 485],
               "shouldFlattenTransform": false,
               "children": [
                 {
+                  "name": "Scrolling Contents Layer",
                   "bounds": [285, 665],
                   "drawsContent": true
                 }
               ]
             },
             {
+              "name": "Overflow Controls Host Layer",
               "bounds": [300, 500],
               "children": [
                 {
+                  "name": "Horizontal Scrollbar Layer",
                   "position": [0, 485],
                   "bounds": [285, 15]
                 },
                 {
+                  "name": "Vertical Scrollbar Layer",
                   "position": [285, 0],
                   "bounds": [15, 485]
                 },
                 {
+                  "name": "Scroll Corner Layer",
                   "position": [285, 485],
                   "bounds": [15, 15],
                   "drawsContent": true
@@ -60,6 +69,7 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 95],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -67,6 +77,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 160],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -74,6 +85,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV id='selection' class='scrolled'",
           "position": [23, 225],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -81,6 +93,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 290],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -88,6 +101,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 355],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -95,6 +109,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 420],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -102,6 +117,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 485],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -109,6 +125,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 550],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -116,6 +133,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 615],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -123,6 +141,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 680],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -138,14 +157,17 @@
 *** iteration 2: ***
 
 {
-  "bounds": [785, 2466],
+  "name": "Content Root Layer",
+  "bounds": [785, 2751],
   "children": [
     {
-      "bounds": [785, 2466],
+      "name": "LayoutView #document",
+      "bounds": [785, 2751],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow DIV id='container'",
           "position": [8, 80],
           "bounds": [300, 500],
           "contentsOpaque": true,
@@ -154,27 +176,33 @@
           "backgroundColor": "#0000FF",
           "children": [
             {
+              "name": "Scrolling Layer",
               "bounds": [285, 485],
               "shouldFlattenTransform": false,
               "children": [
                 {
+                  "name": "Scrolling Contents Layer",
                   "bounds": [285, 665],
                   "drawsContent": true
                 }
               ]
             },
             {
+              "name": "Overflow Controls Host Layer",
               "bounds": [300, 500],
               "children": [
                 {
+                  "name": "Horizontal Scrollbar Layer",
                   "position": [0, 485],
                   "bounds": [285, 15]
                 },
                 {
+                  "name": "Vertical Scrollbar Layer",
                   "position": [285, 0],
                   "bounds": [15, 485]
                 },
                 {
+                  "name": "Scroll Corner Layer",
                   "position": [285, 485],
                   "bounds": [15, 15],
                   "drawsContent": true
@@ -184,6 +212,7 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 95],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -191,6 +220,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 160],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -198,6 +228,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV id='selection' class='scrolled'",
           "position": [23, 225],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -205,6 +236,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 290],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -212,6 +244,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 355],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -219,6 +252,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 420],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -226,6 +260,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 485],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -233,6 +268,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 550],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -240,6 +276,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 615],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -247,6 +284,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 680],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -262,40 +300,49 @@
 *** iteration 3: ***
 
 {
-  "bounds": [785, 4326],
+  "name": "Content Root Layer",
+  "bounds": [785, 4896],
   "children": [
     {
-      "bounds": [785, 4326],
+      "name": "LayoutView #document",
+      "bounds": [785, 4896],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow DIV id='container'",
           "position": [8, 80],
           "bounds": [300, 500],
           "shouldFlattenTransform": false,
           "drawsContent": true,
           "children": [
             {
+              "name": "Scrolling Layer",
               "bounds": [285, 485],
               "shouldFlattenTransform": false,
               "children": [
                 {
+                  "name": "Scrolling Contents Layer",
                   "bounds": [285, 665]
                 }
               ]
             },
             {
+              "name": "Overflow Controls Host Layer",
               "bounds": [300, 500],
               "children": [
                 {
+                  "name": "Horizontal Scrollbar Layer",
                   "position": [0, 485],
                   "bounds": [285, 15]
                 },
                 {
+                  "name": "Vertical Scrollbar Layer",
                   "position": [285, 0],
                   "bounds": [15, 485]
                 },
                 {
+                  "name": "Scroll Corner Layer",
                   "position": [285, 485],
                   "bounds": [15, 15],
                   "drawsContent": true
@@ -305,6 +352,7 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 95],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -312,6 +360,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 160],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -319,6 +368,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV id='selection' class='scrolled'",
           "position": [23, 225],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -326,6 +376,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 290],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -333,6 +384,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 355],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -340,6 +392,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 420],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -347,6 +400,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 485],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -354,6 +408,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 550],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -361,6 +416,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 615],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -368,6 +424,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 680],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -383,40 +440,49 @@
 *** iteration 4: ***
 
 {
-  "bounds": [785, 6141],
+  "name": "Content Root Layer",
+  "bounds": [785, 6996],
   "children": [
     {
-      "bounds": [785, 6141],
+      "name": "LayoutView #document",
+      "bounds": [785, 6996],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow DIV id='container'",
           "position": [8, 80],
           "bounds": [300, 500],
           "shouldFlattenTransform": false,
           "drawsContent": true,
           "children": [
             {
+              "name": "Scrolling Layer",
               "bounds": [285, 485],
               "shouldFlattenTransform": false,
               "children": [
                 {
+                  "name": "Scrolling Contents Layer",
                   "bounds": [285, 665]
                 }
               ]
             },
             {
+              "name": "Overflow Controls Host Layer",
               "bounds": [300, 500],
               "children": [
                 {
+                  "name": "Horizontal Scrollbar Layer",
                   "position": [0, 485],
                   "bounds": [285, 15]
                 },
                 {
+                  "name": "Vertical Scrollbar Layer",
                   "position": [285, 0],
                   "bounds": [15, 485]
                 },
                 {
+                  "name": "Scroll Corner Layer",
                   "position": [285, 485],
                   "bounds": [15, 15],
                   "drawsContent": true
@@ -426,6 +492,7 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 95],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -433,6 +500,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 160],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -440,6 +508,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV id='selection' class='scrolled'",
           "position": [23, 225],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -447,6 +516,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 290],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -454,6 +524,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 355],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -461,6 +532,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 420],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -468,6 +540,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 485],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -475,6 +548,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 550],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -482,6 +556,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 615],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -489,6 +564,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 680],
           "bounds": [100, 50],
           "contentsOpaque": true,
diff --git a/third_party/WebKit/LayoutTests/platform/mac/compositing/overflow/selection-gaps-toggling-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/compositing/overflow/selection-gaps-toggling-expected.txt
index 2adaf001..2be9b5fd 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/compositing/overflow/selection-gaps-toggling-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/compositing/overflow/selection-gaps-toggling-expected.txt
@@ -14,40 +14,49 @@
 *** iteration 1: ***
 
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow DIV class='container'",
           "position": [8, 62],
           "bounds": [300, 500],
           "shouldFlattenTransform": false,
           "drawsContent": true,
           "children": [
             {
+              "name": "Scrolling Layer",
               "bounds": [285, 485],
               "shouldFlattenTransform": false,
               "children": [
                 {
+                  "name": "Scrolling Contents Layer",
                   "bounds": [285, 665]
                 }
               ]
             },
             {
+              "name": "Overflow Controls Host Layer",
               "bounds": [300, 500],
               "children": [
                 {
+                  "name": "Horizontal Scrollbar Layer",
                   "position": [0, 485],
                   "bounds": [285, 15]
                 },
                 {
+                  "name": "Vertical Scrollbar Layer",
                   "position": [285, 0],
                   "bounds": [15, 485]
                 },
                 {
+                  "name": "Scroll Corner Layer",
                   "position": [285, 485],
                   "bounds": [15, 15],
                   "drawsContent": true
@@ -57,6 +66,7 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 77],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -64,6 +74,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 142],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -71,6 +82,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV id='selection' class='scrolled'",
           "position": [23, 207],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -78,6 +90,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 272],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -85,6 +98,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 337],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -92,6 +106,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 402],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -99,6 +114,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 467],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -106,6 +122,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 532],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -113,6 +130,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 597],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -120,6 +138,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 662],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -135,40 +154,49 @@
 *** iteration 2: ***
 
 {
-  "bounds": [785, 2403],
+  "name": "Content Root Layer",
+  "bounds": [785, 2688],
   "children": [
     {
-      "bounds": [785, 2403],
+      "name": "LayoutView #document",
+      "bounds": [785, 2688],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow DIV class='container'",
           "position": [8, 62],
           "bounds": [300, 500],
           "shouldFlattenTransform": false,
           "drawsContent": true,
           "children": [
             {
+              "name": "Scrolling Layer",
               "bounds": [285, 485],
               "shouldFlattenTransform": false,
               "children": [
                 {
+                  "name": "Scrolling Contents Layer",
                   "bounds": [285, 665]
                 }
               ]
             },
             {
+              "name": "Overflow Controls Host Layer",
               "bounds": [300, 500],
               "children": [
                 {
+                  "name": "Horizontal Scrollbar Layer",
                   "position": [0, 485],
                   "bounds": [285, 15]
                 },
                 {
+                  "name": "Vertical Scrollbar Layer",
                   "position": [285, 0],
                   "bounds": [15, 485]
                 },
                 {
+                  "name": "Scroll Corner Layer",
                   "position": [285, 485],
                   "bounds": [15, 15],
                   "drawsContent": true
@@ -178,6 +206,7 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 77],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -185,6 +214,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 142],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -192,6 +222,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV id='selection' class='scrolled'",
           "position": [23, 207],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -199,6 +230,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 272],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -206,6 +238,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 337],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -213,6 +246,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 402],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -220,6 +254,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 467],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -227,6 +262,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 532],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -234,6 +270,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 597],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -241,6 +278,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 662],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -256,40 +294,49 @@
 *** iteration 3: ***
 
 {
-  "bounds": [785, 4218],
+  "name": "Content Root Layer",
+  "bounds": [785, 4788],
   "children": [
     {
-      "bounds": [785, 4218],
+      "name": "LayoutView #document",
+      "bounds": [785, 4788],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow DIV class='container'",
           "position": [8, 62],
           "bounds": [300, 500],
           "shouldFlattenTransform": false,
           "drawsContent": true,
           "children": [
             {
+              "name": "Scrolling Layer",
               "bounds": [285, 485],
               "shouldFlattenTransform": false,
               "children": [
                 {
+                  "name": "Scrolling Contents Layer",
                   "bounds": [285, 665]
                 }
               ]
             },
             {
+              "name": "Overflow Controls Host Layer",
               "bounds": [300, 500],
               "children": [
                 {
+                  "name": "Horizontal Scrollbar Layer",
                   "position": [0, 485],
                   "bounds": [285, 15]
                 },
                 {
+                  "name": "Vertical Scrollbar Layer",
                   "position": [285, 0],
                   "bounds": [15, 485]
                 },
                 {
+                  "name": "Scroll Corner Layer",
                   "position": [285, 485],
                   "bounds": [15, 15],
                   "drawsContent": true
@@ -299,6 +346,7 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 77],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -306,6 +354,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 142],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -313,6 +362,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV id='selection' class='scrolled'",
           "position": [23, 207],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -320,6 +370,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 272],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -327,6 +378,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 337],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -334,6 +386,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 402],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -341,6 +394,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 467],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -348,6 +402,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 532],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -355,6 +410,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 597],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -362,6 +418,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 662],
           "bounds": [100, 50],
           "contentsOpaque": true,
diff --git a/third_party/WebKit/LayoutTests/platform/mac/compositing/overflow/selection-gaps-toggling-with-scrolling-contents-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/compositing/overflow/selection-gaps-toggling-with-scrolling-contents-expected.txt
index 8760b3d..5dc67d4d 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/compositing/overflow/selection-gaps-toggling-with-scrolling-contents-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/compositing/overflow/selection-gaps-toggling-with-scrolling-contents-expected.txt
@@ -14,40 +14,49 @@
 *** iteration 1: ***
 
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow DIV id='container'",
           "position": [8, 80],
           "bounds": [300, 500],
           "shouldFlattenTransform": false,
           "drawsContent": true,
           "children": [
             {
+              "name": "Scrolling Layer",
               "bounds": [285, 485],
               "shouldFlattenTransform": false,
               "children": [
                 {
+                  "name": "Scrolling Contents Layer",
                   "bounds": [285, 665]
                 }
               ]
             },
             {
+              "name": "Overflow Controls Host Layer",
               "bounds": [300, 500],
               "children": [
                 {
+                  "name": "Horizontal Scrollbar Layer",
                   "position": [0, 485],
                   "bounds": [285, 15]
                 },
                 {
+                  "name": "Vertical Scrollbar Layer",
                   "position": [285, 0],
                   "bounds": [15, 485]
                 },
                 {
+                  "name": "Scroll Corner Layer",
                   "position": [285, 485],
                   "bounds": [15, 15],
                   "drawsContent": true
@@ -57,6 +66,7 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 95],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -64,6 +74,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 160],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -71,6 +82,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV id='selection' class='scrolled'",
           "position": [23, 225],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -78,6 +90,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 290],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -85,6 +98,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 355],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -92,6 +106,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 420],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -99,6 +114,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 485],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -106,6 +122,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 550],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -113,6 +130,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 615],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -120,6 +138,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 680],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -135,14 +154,17 @@
 *** iteration 2: ***
 
 {
-  "bounds": [785, 2421],
+  "name": "Content Root Layer",
+  "bounds": [785, 2706],
   "children": [
     {
-      "bounds": [785, 2421],
+      "name": "LayoutView #document",
+      "bounds": [785, 2706],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow DIV id='container'",
           "position": [8, 80],
           "bounds": [300, 500],
           "contentsOpaque": true,
@@ -151,27 +173,33 @@
           "backgroundColor": "#0000FF",
           "children": [
             {
+              "name": "Scrolling Layer",
               "bounds": [285, 485],
               "shouldFlattenTransform": false,
               "children": [
                 {
+                  "name": "Scrolling Contents Layer",
                   "bounds": [285, 665],
                   "drawsContent": true
                 }
               ]
             },
             {
+              "name": "Overflow Controls Host Layer",
               "bounds": [300, 500],
               "children": [
                 {
+                  "name": "Horizontal Scrollbar Layer",
                   "position": [0, 485],
                   "bounds": [285, 15]
                 },
                 {
+                  "name": "Vertical Scrollbar Layer",
                   "position": [285, 0],
                   "bounds": [15, 485]
                 },
                 {
+                  "name": "Scroll Corner Layer",
                   "position": [285, 485],
                   "bounds": [15, 15],
                   "drawsContent": true
@@ -181,6 +209,7 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 95],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -188,6 +217,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 160],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -195,6 +225,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV id='selection' class='scrolled'",
           "position": [23, 225],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -202,6 +233,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 290],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -209,6 +241,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 355],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -216,6 +249,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 420],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -223,6 +257,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 485],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -230,6 +265,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 550],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -237,6 +273,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 615],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -244,6 +281,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 680],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -259,14 +297,17 @@
 *** iteration 3: ***
 
 {
-  "bounds": [785, 4281],
+  "name": "Content Root Layer",
+  "bounds": [785, 4851],
   "children": [
     {
-      "bounds": [785, 4281],
+      "name": "LayoutView #document",
+      "bounds": [785, 4851],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow DIV id='container'",
           "position": [8, 80],
           "bounds": [300, 500],
           "contentsOpaque": true,
@@ -275,27 +316,33 @@
           "backgroundColor": "#0000FF",
           "children": [
             {
+              "name": "Scrolling Layer",
               "bounds": [285, 485],
               "shouldFlattenTransform": false,
               "children": [
                 {
+                  "name": "Scrolling Contents Layer",
                   "bounds": [285, 665],
                   "drawsContent": true
                 }
               ]
             },
             {
+              "name": "Overflow Controls Host Layer",
               "bounds": [300, 500],
               "children": [
                 {
+                  "name": "Horizontal Scrollbar Layer",
                   "position": [0, 485],
                   "bounds": [285, 15]
                 },
                 {
+                  "name": "Vertical Scrollbar Layer",
                   "position": [285, 0],
                   "bounds": [15, 485]
                 },
                 {
+                  "name": "Scroll Corner Layer",
                   "position": [285, 485],
                   "bounds": [15, 15],
                   "drawsContent": true
@@ -305,6 +352,7 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 95],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -312,6 +360,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 160],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -319,6 +368,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV id='selection' class='scrolled'",
           "position": [23, 225],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -326,6 +376,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 290],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -333,6 +384,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 355],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -340,6 +392,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 420],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -347,6 +400,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 485],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -354,6 +408,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 550],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -361,6 +416,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 615],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -368,6 +424,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 680],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -383,40 +440,49 @@
 *** iteration 4: ***
 
 {
-  "bounds": [785, 6141],
+  "name": "Content Root Layer",
+  "bounds": [785, 6996],
   "children": [
     {
-      "bounds": [785, 6141],
+      "name": "LayoutView #document",
+      "bounds": [785, 6996],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow DIV id='container'",
           "position": [8, 80],
           "bounds": [300, 500],
           "shouldFlattenTransform": false,
           "drawsContent": true,
           "children": [
             {
+              "name": "Scrolling Layer",
               "bounds": [285, 485],
               "shouldFlattenTransform": false,
               "children": [
                 {
+                  "name": "Scrolling Contents Layer",
                   "bounds": [285, 665]
                 }
               ]
             },
             {
+              "name": "Overflow Controls Host Layer",
               "bounds": [300, 500],
               "children": [
                 {
+                  "name": "Horizontal Scrollbar Layer",
                   "position": [0, 485],
                   "bounds": [285, 15]
                 },
                 {
+                  "name": "Vertical Scrollbar Layer",
                   "position": [285, 0],
                   "bounds": [15, 485]
                 },
                 {
+                  "name": "Scroll Corner Layer",
                   "position": [285, 485],
                   "bounds": [15, 15],
                   "drawsContent": true
@@ -426,6 +492,7 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 95],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -433,6 +500,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 160],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -440,6 +508,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV id='selection' class='scrolled'",
           "position": [23, 225],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -447,6 +516,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 290],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -454,6 +524,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 355],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -461,6 +532,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 420],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -468,6 +540,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 485],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -475,6 +548,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 550],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -482,6 +556,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 615],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -489,6 +564,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 680],
           "bounds": [100, 50],
           "contentsOpaque": true,
diff --git a/third_party/WebKit/LayoutTests/platform/mac/compositing/overflow/text-color-change-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/compositing/overflow/text-color-change-expected.txt
index 39e0c8382..5bd78b3be 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/compositing/overflow/text-color-change-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/compositing/overflow/text-color-change-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -10,337 +12,343 @@
           "object": "LayoutText #text",
           "rect": [8, 57, 47, 185],
           "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '  Text'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '  Text'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '  Text'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '  Text'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '  Text'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '  Text'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '  Text'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '  Text'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '  Text'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '  Text'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '  Text'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '  Text'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '  Text'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '  Text'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '  Text'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '  Text'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '  Text'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '  Text'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '  Text'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '  Text'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '  Text'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '  Text'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '  Text'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '  Text'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '  Text'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '  Text'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '  Text'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '  Text'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '  Text'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '  Text'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '  Text'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '  Text'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '  Text'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '  Text'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '  Text'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '  Text'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '  Text'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '  Text'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '  Text'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '  Text'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '  Text'",
-          "reason": "style change"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutText #text",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/mac/compositing/overflow/text-match-highlight-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/compositing/overflow/text-match-highlight-expected.txt
index b5899c5..a56e9f65 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/compositing/overflow/text-match-highlight-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/compositing/overflow/text-match-highlight-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -45,41 +47,75 @@
           "object": "LayoutText #text",
           "rect": [52, 72, 45, 18],
           "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Can you findme in this boring text?'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Findme in a typewriter!'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Findme on a path! Did you findme?'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'findme'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'findme'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'findme'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'findme'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'findme'",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutText #text",
+      "reason": "full"
+    },
+    {
+      "object": "InlineTextBox 'findme'",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "full"
+    },
+    {
+      "object": "InlineTextBox 'findme'",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "full"
+    },
+    {
+      "object": "InlineTextBox 'findme'",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "full"
+    },
+    {
+      "object": "InlineTextBox 'findme'",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "full"
+    },
+    {
+      "object": "InlineTextBox 'findme'",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "full"
+    },
+    {
+      "object": "InlineTextBox 'Can you findme in this boring text?'",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "full"
+    },
+    {
+      "object": "InlineTextBox 'Findme in a typewriter!'",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "full"
+    },
+    {
+      "object": "InlineTextBox 'Findme on a path! Did you findme?'",
+      "reason": "full"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/mac/compositing/overflow/textarea-scroll-touch-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/compositing/overflow/textarea-scroll-touch-expected.txt
index e023c562d..7200c5f 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/compositing/overflow/textarea-scroll-touch-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/compositing/overflow/textarea-scroll-touch-expected.txt
@@ -1,13 +1,16 @@
   
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutTextControl TEXTAREA",
           "position": [18, 18],
           "bounds": [206, 126],
           "contentsOpaque": true,
@@ -16,24 +19,29 @@
           "backgroundColor": "#CCCCCC",
           "children": [
             {
+              "name": "Scrolling Layer",
               "position": [1, 1],
               "bounds": [189, 124],
               "shouldFlattenTransform": false,
               "children": [
                 {
+                  "name": "Scrolling Contents Layer",
                   "bounds": [189, 270],
                   "drawsContent": true
                 }
               ]
             },
             {
+              "name": "Overflow Controls Host Layer",
               "bounds": [206, 126],
               "children": [
                 {
+                  "name": "Vertical Scrollbar Layer",
                   "position": [190, 1],
                   "bounds": [15, 109]
                 },
                 {
+                  "name": "Scroll Corner Layer",
                   "position": [190, 110],
                   "bounds": [15, 15],
                   "drawsContent": true
@@ -43,6 +51,7 @@
           ]
         },
         {
+          "name": "LayoutTextControl TEXTAREA",
           "position": [248, 18],
           "bounds": [206, 126],
           "contentsOpaque": true,
@@ -51,24 +60,29 @@
           "backgroundColor": "#CCCCCC",
           "children": [
             {
+              "name": "Scrolling Layer",
               "position": [1, 1],
               "bounds": [189, 124],
               "shouldFlattenTransform": false,
               "children": [
                 {
+                  "name": "Scrolling Contents Layer",
                   "bounds": [189, 270],
                   "drawsContent": true
                 }
               ]
             },
             {
+              "name": "Overflow Controls Host Layer",
               "bounds": [206, 126],
               "children": [
                 {
+                  "name": "Vertical Scrollbar Layer",
                   "position": [190, 1],
                   "bounds": [15, 109]
                 },
                 {
+                  "name": "Scroll Corner Layer",
                   "position": [190, 110],
                   "bounds": [15, 15],
                   "drawsContent": true
diff --git a/third_party/WebKit/LayoutTests/platform/mac/compositing/repaint/fixed-pos-with-abs-pos-child-scroll-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/compositing/repaint/fixed-pos-with-abs-pos-child-scroll-expected.txt
index 7e24aaaf..ac2cbee0 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/compositing/repaint/fixed-pos-with-abs-pos-child-scroll-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/compositing/repaint/fixed-pos-with-abs-pos-child-scroll-expected.txt
@@ -1,8 +1,10 @@
 Hi!
 {
+  "name": "Content Root Layer",
   "bounds": [785, 4021],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [785, 4021],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -46,33 +48,51 @@
           "object": "LayoutText #text",
           "rect": [425, 480, 22, 18],
           "reason": "subtree"
-        },
-        {
-          "object": "InlineTextBox 'Hi!'",
-          "reason": "subtree"
-        },
-        {
-          "object": "InlineTextBox 'Hi!'",
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutBlockFlow (positioned) DIV id='fixed'",
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutBlockFlow (positioned) DIV id='fixed'",
-          "reason": "subtree"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "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/compositing/squashing/iframe-inside-squashed-layer-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/compositing/squashing/iframe-inside-squashed-layer-expected.txt
index 815af49..b1626e89 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/compositing/squashing/iframe-inside-squashed-layer-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/compositing/squashing/iframe-inside-squashed-layer-expected.txt
@@ -1,15 +1,19 @@
 {
+  "name": "Content Root Layer",
   "bounds": [785, 1016],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [785, 1016],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "Squashing Containment Layer",
           "shouldFlattenTransform": false,
           "children": [
             {
+              "name": "LayoutBlockFlow DIV id='foo'",
               "position": [8, 8],
               "bounds": [200, 1000],
               "contentsOpaque": true,
@@ -17,6 +21,7 @@
               "backgroundColor": "#D3D3D3"
             },
             {
+              "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV)",
               "position": [8, 0],
               "bounds": [300, 654],
               "drawsContent": true,
@@ -55,34 +60,6 @@
                   "object": "LayoutView #document",
                   "rect": [285, 500, 15, 150],
                   "reason": "scroll"
-                },
-                {
-                  "object": "InlineTextBox 'test1'",
-                  "reason": "full"
-                },
-                {
-                  "object": "InlineTextBox 'test1'",
-                  "reason": "full"
-                },
-                {
-                  "object": "LayoutView #document",
-                  "reason": "scroll"
-                },
-                {
-                  "object": "RootInlineBox",
-                  "reason": "full"
-                },
-                {
-                  "object": "RootInlineBox",
-                  "reason": "full"
-                },
-                {
-                  "object": "RootInlineBox",
-                  "reason": "full"
-                },
-                {
-                  "object": "VerticalScrollbar",
-                  "reason": "scroll"
                 }
               ]
             }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/compositing/squashing/no-squashing-into-another-clip-layer-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/compositing/squashing/no-squashing-into-another-clip-layer-expected.txt
index 660bc2a..a8dfbe4 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/compositing/squashing/no-squashing-into-another-clip-layer-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/compositing/squashing/no-squashing-into-another-clip-layer-expected.txt
@@ -1,12 +1,15 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow DIV",
           "position": [8, 8],
           "bounds": [784, 10],
           "contentsOpaque": true,
@@ -14,9 +17,11 @@
           "backgroundColor": "#ADD8E6",
           "children": [
             {
+              "name": "Child Containment Layer",
               "bounds": [784, 10],
               "children": [
                 {
+                  "name": "LayoutBlockFlow DIV id='inner'",
                   "bounds": [784, 10],
                   "contentsOpaque": true,
                   "drawsContent": true,
@@ -27,6 +32,7 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow (positioned) DIV class='hoverable'",
           "position": [8, 0],
           "bounds": [211, 100],
           "drawsContent": true,
diff --git a/third_party/WebKit/LayoutTests/platform/mac/compositing/squashing/remove-squashed-layer-plus-move-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/compositing/squashing/remove-squashed-layer-plus-move-expected.txt
index 4bcdf3d0..80f3d86 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/compositing/squashing/remove-squashed-layer-plus-move-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/compositing/squashing/remove-squashed-layer-plus-move-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [1418, 1008],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [1418, 1008],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -25,41 +27,20 @@
           "object": "LayoutBlockFlow DIV id='container'",
           "rect": [8, 62, 769, 54],
           "reason": "incremental"
-        },
-        {
-          "object": "LayoutText #text",
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutText #text",
-          "reason": "bounds change"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ],
       "children": [
         {
+          "name": "Squashing Containment Layer",
           "shouldFlattenTransform": false,
           "children": [
             {
+              "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,
@@ -88,14 +69,6 @@
                   "object": "LayoutBlockFlow (relative positioned) DIV id='foo' class='mv-tile'",
                   "rect": [0, 0, 100, 50],
                   "reason": "layoutObject removal"
-                },
-                {
-                  "object": "InlineBox",
-                  "reason": "full"
-                },
-                {
-                  "object": "InlineBox",
-                  "reason": "full"
                 }
               ]
             }
@@ -103,6 +76,56 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (relative positioned) DIV id='foo' class='mv-tile'",
+      "reason": "layoutObject removal"
+    },
+    {
+      "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": "incremental"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='container'",
+      "reason": "invalidate paint rectangle"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutBlockFlow (relative positioned) DIV class='mv-tile'",
+      "reason": "compositing update"
+    },
+    {
+      "object": "LayoutBlockFlow (anonymous)",
+      "reason": "bounds change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow (relative positioned) DIV class='mv-tile'",
+      "reason": "compositing update"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/mac/compositing/squashing/selection-repaint-with-gaps-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/compositing/squashing/selection-repaint-with-gaps-expected.txt
index 4a27a944..0828383 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/compositing/squashing/selection-repaint-with-gaps-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/compositing/squashing/selection-repaint-with-gaps-expected.txt
@@ -1,20 +1,25 @@
 lorem ipsumlorem ipsumlorem ipsum
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "Squashing Containment Layer",
           "shouldFlattenTransform": false,
           "children": [
             {
+              "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,
@@ -28,30 +33,6 @@
                   "object": "LayoutText #text",
                   "rect": [39, 80, 3, 36],
                   "reason": "incremental"
-                },
-                {
-                  "object": "InlineTextBox 'ipsum'",
-                  "reason": "incremental"
-                },
-                {
-                  "object": "InlineTextBox 'ipsum'",
-                  "reason": "selection"
-                },
-                {
-                  "object": "InlineTextBox 'lorem'",
-                  "reason": "incremental"
-                },
-                {
-                  "object": "InlineTextBox 'lorem'",
-                  "reason": "selection"
-                },
-                {
-                  "object": "LayoutBlockFlow (positioned) DIV id='item1' class='item'",
-                  "reason": "selection"
-                },
-                {
-                  "object": "LayoutBlockFlow DIV class='inline-block'",
-                  "reason": "selection"
                 }
               ]
             }
@@ -59,24 +40,63 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='item1' class='item'",
+      "reason": "selection"
+    },
+    {
+      "object": "LayoutBlockFlow DIV class='inline-block'",
+      "reason": "selection"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "selection"
+    },
+    {
+      "object": "InlineTextBox 'lorem'",
+      "reason": "selection"
+    },
+    {
+      "object": "InlineTextBox 'ipsum'",
+      "reason": "selection"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "incremental"
+    },
+    {
+      "object": "InlineTextBox 'lorem'",
+      "reason": "incremental"
+    },
+    {
+      "object": "InlineTextBox 'ipsum'",
+      "reason": "incremental"
+    }
   ]
 }
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "Squashing Containment Layer",
           "shouldFlattenTransform": false,
           "children": [
             {
+              "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,
@@ -100,54 +120,6 @@
                   "object": "LayoutText #text",
                   "rect": [39, 160, 3, 36],
                   "reason": "incremental"
-                },
-                {
-                  "object": "InlineTextBox 'ipsum'",
-                  "reason": "incremental"
-                },
-                {
-                  "object": "InlineTextBox 'ipsum'",
-                  "reason": "incremental"
-                },
-                {
-                  "object": "InlineTextBox 'ipsum'",
-                  "reason": "selection"
-                },
-                {
-                  "object": "InlineTextBox 'ipsum'",
-                  "reason": "selection"
-                },
-                {
-                  "object": "InlineTextBox 'lorem'",
-                  "reason": "incremental"
-                },
-                {
-                  "object": "InlineTextBox 'lorem'",
-                  "reason": "incremental"
-                },
-                {
-                  "object": "InlineTextBox 'lorem'",
-                  "reason": "selection"
-                },
-                {
-                  "object": "InlineTextBox 'lorem'",
-                  "reason": "selection"
-                },
-                {
-                  "object": "LayoutBlockFlow (positioned) DIV id='item1' class='item'",
-                  "reason": "selection"
-                },
-                {
-                  "object": "LayoutBlockFlow (positioned) DIV id='item2' class='item'",
-                  "reason": "selection"
-                },
-                {
-                  "object": "LayoutBlockFlow DIV class='inline-block'",
-                  "reason": "selection"
-                },
-                {
-                  "object": "LayoutBlockFlow DIV class='inline-block'",
-                  "reason": "selection"
                 }
               ]
             }
@@ -155,6 +127,72 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='item1' class='item'",
+      "reason": "selection"
+    },
+    {
+      "object": "LayoutBlockFlow DIV class='inline-block'",
+      "reason": "selection"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "selection"
+    },
+    {
+      "object": "InlineTextBox 'lorem'",
+      "reason": "selection"
+    },
+    {
+      "object": "InlineTextBox 'ipsum'",
+      "reason": "selection"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "incremental"
+    },
+    {
+      "object": "InlineTextBox 'lorem'",
+      "reason": "incremental"
+    },
+    {
+      "object": "InlineTextBox 'ipsum'",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='item2' class='item'",
+      "reason": "selection"
+    },
+    {
+      "object": "LayoutBlockFlow DIV class='inline-block'",
+      "reason": "selection"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "selection"
+    },
+    {
+      "object": "InlineTextBox 'lorem'",
+      "reason": "selection"
+    },
+    {
+      "object": "InlineTextBox 'ipsum'",
+      "reason": "selection"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "incremental"
+    },
+    {
+      "object": "InlineTextBox 'lorem'",
+      "reason": "incremental"
+    },
+    {
+      "object": "InlineTextBox 'ipsum'",
+      "reason": "incremental"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/mac/compositing/video/video-poster-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/compositing/video/video-poster-expected.txt
index ae4217b..f636bae 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/compositing/video/video-poster-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/compositing/video/video-poster-expected.txt
@@ -3,9 +3,11 @@
 
 Case: No src, no poster
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true
@@ -16,10 +18,12 @@
 
 Case: Displaying poster
 {
-  "bounds": [800, 600],
+  "name": "Content Root Layer",
+  "bounds": [785, 617],
   "children": [
     {
-      "bounds": [800, 600],
+      "name": "LayoutView #document",
+      "bounds": [785, 617],
       "contentsOpaque": true,
       "drawsContent": true
     }
@@ -29,26 +33,32 @@
 
 Case: Displaying movie
 {
-  "bounds": [785, 782],
+  "name": "Content Root Layer",
+  "bounds": [785, 842],
   "children": [
     {
-      "bounds": [785, 782],
+      "name": "LayoutView #document",
+      "bounds": [785, 842],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutVideo VIDEO",
           "position": [8, 8],
           "bounds": [352, 288]
         },
         {
+          "name": "Squashing Containment Layer",
           "shouldFlattenTransform": false,
           "children": [
             {
+              "name": "LayoutFlexibleBox (relative positioned) DIV",
               "position": [8, 8],
               "bounds": [352, 288],
               "drawsContent": true
             },
             {
+              "name": "Squashing Layer (first squashed layer: LayoutFlexibleBox (relative positioned) DIV)",
               "position": [8, 8],
               "bounds": [352, 246],
               "drawsContent": true
diff --git a/third_party/WebKit/LayoutTests/platform/mac/compositing/visibility/visibility-image-layers-dynamic-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/compositing/visibility/visibility-image-layers-dynamic-expected.txt
index c263144..f3f1a30 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/compositing/visibility/visibility-image-layers-dynamic-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/compositing/visibility/visibility-image-layers-dynamic-expected.txt
@@ -4,23 +4,28 @@
 Initial
 
 {
+  "name": "Content Root Layer",
   "bounds": [785, 626],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [785, 626],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow DIV class='composited container'",
           "position": [18, 10],
           "bounds": [749, 144]
         },
         {
+          "name": "LayoutBlockFlow DIV class='composited hidden container'",
           "position": [14, 314],
           "bounds": [757, 152],
           "contentsVisible": false,
           "children": [
             {
+              "name": "LayoutImage IMG class='visible composited box'",
               "position": [24, 24],
               "bounds": [100, 100]
             }
@@ -33,29 +38,35 @@
 After step 1
 
 {
-  "bounds": [785, 1051],
+  "name": "Content Root Layer",
+  "bounds": [785, 1126],
   "children": [
     {
-      "bounds": [785, 1051],
+      "name": "LayoutView #document",
+      "bounds": [785, 1126],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow DIV class='composited container'",
           "position": [18, 10],
           "bounds": [749, 144],
           "children": [
             {
+              "name": "LayoutImage IMG class='hidden composited box'",
               "position": [20, 20],
               "bounds": [100, 100]
             }
           ]
         },
         {
+          "name": "LayoutBlockFlow DIV class='composited hidden container'",
           "position": [14, 314],
           "bounds": [757, 152],
           "contentsVisible": false,
           "children": [
             {
+              "name": "LayoutImage IMG class='visible composited box'",
               "position": [24, 24],
               "bounds": [100, 100]
             }
@@ -68,40 +79,48 @@
 After step 2
 
 {
-  "bounds": [785, 1565],
+  "name": "Content Root Layer",
+  "bounds": [785, 1730],
   "children": [
     {
-      "bounds": [785, 1565],
+      "name": "LayoutView #document",
+      "bounds": [785, 1730],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow DIV class='composited container'",
           "position": [18, 10],
           "bounds": [749, 144],
           "children": [
             {
+              "name": "LayoutImage IMG class='hidden composited box'",
               "position": [20, 20],
               "bounds": [100, 100]
             }
           ]
         },
         {
+          "name": "LayoutBlockFlow DIV class='composited hidden container'",
           "position": [14, 160],
           "bounds": [757, 152],
           "drawsContent": true,
           "children": [
             {
+              "name": "LayoutImage IMG class='composited box'",
               "position": [24, 24],
               "bounds": [100, 100]
             }
           ]
         },
         {
+          "name": "LayoutBlockFlow DIV class='composited hidden container'",
           "position": [14, 314],
           "bounds": [757, 152],
           "contentsVisible": false,
           "children": [
             {
+              "name": "LayoutImage IMG class='visible composited box'",
               "position": [24, 24],
               "bounds": [100, 100]
             }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/css3/blending/mix-blend-mode-composited-layers-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/css3/blending/mix-blend-mode-composited-layers-expected.txt
index ec7a97f..97481bb 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/css3/blending/mix-blend-mode-composited-layers-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/css3/blending/mix-blend-mode-composited-layers-expected.txt
@@ -1,16 +1,20 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "children": [
         {
+          "name": "LayoutBlockFlow HTML",
           "bounds": [800, 69],
           "isolate": true,
           "drawsContent": true,
           "children": [
             {
+              "name": "LayoutBlockFlow DIV",
               "position": [8, 18],
               "bounds": [10, 10],
               "blendMode": "multiply",
@@ -19,6 +23,7 @@
               "backgroundColor": "#0000FF",
               "children": [
                 {
+                  "name": "LayoutBlockFlow DIV",
                   "bounds": [10, 10],
                   "contentsOpaque": true,
                   "drawsContent": true,
diff --git a/third_party/WebKit/LayoutTests/platform/mac/css3/filters/composited-layer-child-bounds-after-composited-to-sw-shadow-change-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/css3/filters/composited-layer-child-bounds-after-composited-to-sw-shadow-change-expected.txt
new file mode 100644
index 0000000..6bad8ad
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/mac/css3/filters/composited-layer-child-bounds-after-composited-to-sw-shadow-change-expected.txt
@@ -0,0 +1,63 @@
+{
+  "name": "Content Root Layer",
+  "bounds": [800, 600],
+  "children": [
+    {
+      "name": "LayoutView #document",
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "name": "LayoutBlockFlow (positioned) DIV id='composited-parent' class='compositor-painted-shadow'",
+          "position": [100, 100],
+          "bounds": [100, 100],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FF0000",
+          "children": [
+            {
+              "name": "LayoutBlockFlow (positioned) DIV id='absolutely-positioned-composited-child'",
+              "bounds": [100, 100],
+              "contentsOpaque": true,
+              "drawsContent": true,
+              "backgroundColor": "#008000"
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}
+{
+  "name": "Content Root Layer",
+  "bounds": [866, 585],
+  "children": [
+    {
+      "name": "LayoutView #document",
+      "bounds": [866, 585],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "name": "LayoutBlockFlow (positioned) DIV id='composited-parent' class='software-painted-shadow'",
+          "position": [100, 100],
+          "bounds": [100, 100],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FF0000",
+          "children": [
+            {
+              "name": "LayoutBlockFlow (positioned) DIV id='absolutely-positioned-composited-child'",
+              "bounds": [100, 100],
+              "contentsOpaque": true,
+              "drawsContent": true,
+              "backgroundColor": "#008000"
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/mac/css3/filters/effect-hue-rotate-hw-expected.png b/third_party/WebKit/LayoutTests/platform/mac/css3/filters/effect-hue-rotate-hw-expected.png
index 7be580b..2eefd71 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/css3/filters/effect-hue-rotate-hw-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac/css3/filters/effect-hue-rotate-hw-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/css3/flexbox/repaint-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/css3/flexbox/repaint-expected.txt
index 7742e7b..4ef33e0 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/css3/flexbox/repaint-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/css3/flexbox/repaint-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -85,181 +87,95 @@
           "object": "LayoutBlockFlow DIV id='left'",
           "rect": [138, 116, 10, 108],
           "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'Aenean laoreet dolor id urna eleifend aliquet. Nulla vel dolor'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean laoreet dolor id urna eleifend aliquet.'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean laoreet dolor id urna eleifend'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean laoreet dolor id urna eleifend'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'Lorem ipsum dolor sit amet, consectetur adipiscing elit.'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Nulla vel dolor ipsum. Aliquam ut turpis nisl, in vulputate sapien. Cum sociis natoque penatibus et'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'Sed volutpat, tellus vel varius vestibulum, purus quam mollis sapien, in condimentum leo neque sed'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'a lobortis id, faucibus id quam.'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'aliquet. Nulla vel dolor ipsum. Aliquam ut turpis nisl, in vulputate sapien. Cum sociis natoque'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'aliquet. Nulla vel dolor ipsum. Aliquam ut turpis nisl, in vulputate sapien. Cum sociis natoque'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'condimentum leo neque sed nulla. Nunc quis porta elit. Pellentesque erat lectus, ultricies a lobortis'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'condimentum leo neque sed nulla. Nunc quis porta elit. Pellentesque erat lectus, ultricies a lobortis'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'feugiat vehicula. Sed volutpat, tellus vel varius vestibulum, purus quam mollis sapien, in'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'feugiat vehicula. Sed volutpat, tellus vel varius vestibulum, purus quam mollis sapien, in'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'feugiat vehicula. Sed volutpat, tellus vel varius vestibulum,'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'id, faucibus id quam.'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'id, faucibus id quam.'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'ipsum. Aliquam ut turpis nisl, in vulputate sapien. Cum'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'magnis dis parturient montes, nascetur ridiculus mus. Sed congue magna vitae dolor feugiat vehicula.'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'nascetur ridiculus mus. Sed congue magna vitae dolor'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'nulla. Nunc quis porta elit. Pellentesque erat lectus, ultricies a lobortis id, faucibus id quam.'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'nulla. Nunc quis porta elit. Pellentesque erat lectus, ultricies'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed congue magna vitae dolor'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed congue magna vitae dolor'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'purus quam mollis sapien, in condimentum leo neque sed'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'sociis natoque penatibus et magnis dis parturient montes,'",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV id='left'",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='content'",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutBlockFlow P",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean laoreet dolor id urna eleifend'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox 'aliquet. Nulla vel dolor ipsum. Aliquam ut turpis nisl, in vulputate sapien. Cum sociis natoque'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox 'penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed congue magna vitae dolor'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox 'feugiat vehicula. Sed volutpat, tellus vel varius vestibulum, purus quam mollis sapien, in'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox 'condimentum leo neque sed nulla. Nunc quis porta elit. Pellentesque erat lectus, ultricies a lobortis'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox 'id, faucibus id quam.'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='left'",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='content'",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutBlockFlow P",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean laoreet dolor id urna eleifend aliquet.'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox 'Nulla vel dolor ipsum. Aliquam ut turpis nisl, in vulputate sapien. Cum sociis natoque penatibus et'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox 'magnis dis parturient montes, nascetur ridiculus mus. Sed congue magna vitae dolor feugiat vehicula.'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox 'Sed volutpat, tellus vel varius vestibulum, purus quam mollis sapien, in condimentum leo neque sed'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox 'nulla. Nunc quis porta elit. Pellentesque erat lectus, ultricies a lobortis id, faucibus id quam.'",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/mac/editing/selection/repaint-rect-for-vertical-writing-mode-with-positioned-root-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/editing/selection/repaint-rect-for-vertical-writing-mode-with-positioned-root-expected.txt
index 7a50083..34234538 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/editing/selection/repaint-rect-for-vertical-writing-mode-with-positioned-root-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/editing/selection/repaint-rect-for-vertical-writing-mode-with-positioned-root-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -10,21 +12,27 @@
           "object": "LayoutText #text",
           "rect": [185, 201, 18, 173],
           "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox 'Some text in vertical mode'",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutBlockFlow (positioned) DIV id='test'",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "reason": "selection"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='test'",
+      "reason": "selection"
+    },
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "selection"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "selection"
+    },
+    {
+      "object": "InlineTextBox 'Some text in vertical mode'",
+      "reason": "selection"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/forms/button/button-reset-focus-by-mouse-then-keydown-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/fast/forms/button/button-reset-focus-by-mouse-then-keydown-expected.txt
index f247f12..b497729 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/fast/forms/button/button-reset-focus-by-mouse-then-keydown-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/fast/forms/button/button-reset-focus-by-mouse-then-keydown-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -20,17 +22,31 @@
           "object": "LayoutText #text",
           "rect": [16, 11, 30, 13],
           "reason": "subtree"
-        },
-        {
-          "object": "InlineTextBox 'Reset'",
-          "reason": "subtree"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "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/fast/forms/checkbox/checkbox-focus-by-mouse-then-keydown-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/fast/forms/checkbox/checkbox-focus-by-mouse-then-keydown-expected.txt
index 67dd75f5..07244ba 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/fast/forms/checkbox/checkbox-focus-by-mouse-then-keydown-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/fast/forms/checkbox/checkbox-focus-by-mouse-then-keydown-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -13,6 +15,12 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow INPUT",
+      "reason": "subtree"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/forms/radio/radio-focus-by-mouse-then-keydown-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/fast/forms/radio/radio-focus-by-mouse-then-keydown-expected.txt
index eb485c4b..82606aa 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/fast/forms/radio/radio-focus-by-mouse-then-keydown-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/fast/forms/radio/radio-focus-by-mouse-then-keydown-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -13,6 +15,12 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow INPUT",
+      "reason": "subtree"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/forms/range/range-focus-by-mouse-then-keydown-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/fast/forms/range/range-focus-by-mouse-then-keydown-expected.txt
index 289fe70..09a8060 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/fast/forms/range/range-focus-by-mouse-then-keydown-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/fast/forms/range/range-focus-by-mouse-then-keydown-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -28,6 +30,24 @@
         }
       ]
     }
+  ],
+  "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/fast/forms/submit/submit-focus-by-mouse-then-keydown-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/fast/forms/submit/submit-focus-by-mouse-then-keydown-expected.txt
index d81e127..6ad0d73 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/fast/forms/submit/submit-focus-by-mouse-then-keydown-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/fast/forms/submit/submit-focus-by-mouse-then-keydown-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -20,17 +22,31 @@
           "object": "LayoutText #text",
           "rect": [16, 11, 37, 13],
           "reason": "subtree"
-        },
-        {
-          "object": "InlineTextBox 'Submit'",
-          "reason": "subtree"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "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/fast/repaint/4776765-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/4776765-expected.txt
index 5be38de..e014569 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/4776765-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/4776765-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -25,21 +27,39 @@
           "object": "LayoutBlockFlow DIV id='div'",
           "rect": [7, 59, 3, 20],
           "reason": "invalidate paint rectangle"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "LayoutBR BR",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "outline"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='div'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutBR BR",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='div'",
+      "reason": "invalidate paint rectangle"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='div'",
+      "reason": "invalidate paint rectangle"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/abspos-shift-image-incorrect-repaint-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/abspos-shift-image-incorrect-repaint-expected.txt
index 2ff20c2..229e02d 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/abspos-shift-image-incorrect-repaint-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/abspos-shift-image-incorrect-repaint-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [1250, 585],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [1250, 585],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -75,37 +77,71 @@
           "object": "LayoutText #text",
           "rect": [450, 218, 4, 18],
           "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutText #text",
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutText #text",
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutText #text",
-          "reason": "bounds change"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutView #document",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutBlockFlow HTML",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='shiftMe'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow (relative positioned) DIV class='imageWrapper'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutImage IMG",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow (relative positioned) DIV class='imageWrapper'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutImage IMG",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/block-layout-inline-children-float-positioned-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/block-layout-inline-children-float-positioned-expected.txt
index b63d4b4..c2a891e 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/block-layout-inline-children-float-positioned-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/block-layout-inline-children-float-positioned-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -25,25 +27,43 @@
           "object": "LayoutText #text",
           "rect": [153, 35, 296, 18],
           "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'the quick brown fox jumped over the lazy dog'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'the quick brown fox jumped over the lazy dog'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (floating) SPAN",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'the quick brown fox jumped over the lazy dog'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutBlockFlow (positioned) SPAN",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'the quick brown fox jumped over the lazy dog'",
+      "reason": "layoutObject insertion"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/block-no-inflow-children-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/block-no-inflow-children-expected.txt
index ec60fc0f..94b903f5 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/block-no-inflow-children-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/block-no-inflow-children-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -15,25 +17,27 @@
           "object": "LayoutText #text",
           "rect": [0, 0, 64, 18],
           "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ''",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'La la la la'",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV id='target'",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "full"
+    },
+    {
+      "object": "InlineTextBox 'La la la la'",
+      "reason": "full"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/box-inline-resize-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/box-inline-resize-expected.txt
index fa91518..d1181b6 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/box-inline-resize-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/box-inline-resize-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -35,33 +37,39 @@
           "object": "LayoutImage IMG id='foo'",
           "rect": [8, 84, 32, 32],
           "reason": "forced by layout"
-        },
-        {
-          "object": "InlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Chromium'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (anonymous)",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutImage IMG id='foo'",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutBlockFlow H2",
+      "reason": "bounds change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox 'Chromium'",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/bugzilla-5699-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/bugzilla-5699-expected.txt
index 1989323..0e1309a6 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/bugzilla-5699-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/bugzilla-5699-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -40,53 +42,63 @@
           "object": "LayoutText #text",
           "rect": [8, 130, 4, 18],
           "reason": "style change"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox ''",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Hello'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox '\u00A0'",
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutBR BR",
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutBR BR",
-          "reason": "bounds change"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow P",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutBlockFlow P",
+      "reason": "invalidate paint rectangle"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "incremental"
+    },
+    {
+      "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": "bounds change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox 'Hello'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBR BR",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/bugzilla-6278-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/bugzilla-6278-expected.txt
index c302213..c94f1a2 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/bugzilla-6278-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/bugzilla-6278-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -50,117 +52,75 @@
           "object": "LayoutText #text",
           "rect": [249, 132, 37, 144],
           "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'Curabitur pretium, quam quis semper'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'Curabitur pretium, quam quis semper'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Phasellus vehicula, sem at posuere'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'Quisque eu nulla non nisi molestie'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'ac, laoreet non, suscipit sed, sapien.'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'accumsan. Etiam tellus urna, laoreet'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'fringilla orci nibh sed neque. Quisque eu'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'malesuada, est libero feugiat libero, vel'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'malesuada, est libero feugiat libero,'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'nec ullamcorper lacus ante vulputate pede.'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'nec ullamcorper lacus ante vulputate'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'nulla non nisi molestie accumsan. Etiam'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'pede.'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'posuere vehicula, augue nibh molestie nisl,'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'sed, sapien. Phasellus vehicula, sem at'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'tellus urna, laoreet ac, laoreet non, suscipit'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'vehicula, augue nibh molestie nisl,'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'vel fringilla orci nibh sed neque.'",
-          "reason": "incremental"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutTableCell TD id='col1'",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "incremental"
+    },
+    {
+      "object": "InlineTextBox 'Curabitur pretium, quam quis semper'",
+      "reason": "incremental"
+    },
+    {
+      "object": "InlineTextBox 'malesuada, est libero feugiat libero,'",
+      "reason": "incremental"
+    },
+    {
+      "object": "InlineTextBox 'vel fringilla orci nibh sed neque.'",
+      "reason": "incremental"
+    },
+    {
+      "object": "InlineTextBox 'Quisque eu nulla non nisi molestie'",
+      "reason": "incremental"
+    },
+    {
+      "object": "InlineTextBox 'accumsan. Etiam tellus urna, laoreet'",
+      "reason": "incremental"
+    },
+    {
+      "object": "InlineTextBox 'ac, laoreet non, suscipit sed, sapien.'",
+      "reason": "incremental"
+    },
+    {
+      "object": "InlineTextBox 'Phasellus vehicula, sem at posuere'",
+      "reason": "incremental"
+    },
+    {
+      "object": "InlineTextBox 'vehicula, augue nibh molestie nisl,'",
+      "reason": "incremental"
+    },
+    {
+      "object": "InlineTextBox 'nec ullamcorper lacus ante vulputate'",
+      "reason": "incremental"
+    },
+    {
+      "object": "InlineTextBox 'pede.'",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutTableCell TD id='target'",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/bugzilla-6473-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/bugzilla-6473-expected.txt
index d10c0a2..e784d726 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/bugzilla-6473-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/bugzilla-6473-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -30,17 +32,31 @@
           "object": "LayoutText #text",
           "rect": [8, 130, 70, 18],
           "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'SUCCESS'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV id='allcontent'",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutBlockFlow (relative positioned) P",
+      "reason": "bounds change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox 'SUCCESS'",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/bugzilla-7235-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/bugzilla-7235-expected.txt
index 98aaf13..4a06be2 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/bugzilla-7235-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/bugzilla-7235-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -15,25 +17,19 @@
           "object": "LayoutBlockFlow (positioned) DIV id='t'",
           "rect": [8, 166, 100, 100],
           "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox '\u00A0'",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (anonymous)",
+      "reason": "invalidate paint rectangle"
+    },
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='t'",
+      "reason": "layoutObject insertion"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/button-checkbox-click-method-repaint-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/button-checkbox-click-method-repaint-expected.txt
index efc62b8..016665a 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/button-checkbox-click-method-repaint-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/button-checkbox-click-method-repaint-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -13,6 +15,12 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow INPUT id='checkbox'",
+      "reason": "subtree"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/caret-invalidation-in-overflow-scroll-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/caret-invalidation-in-overflow-scroll-expected.txt
index ed0369d7..a43b48b 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/caret-invalidation-in-overflow-scroll-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/caret-invalidation-in-overflow-scroll-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -18,6 +20,16 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV id='inner-editor'",
+      "reason": "invalidate paint rectangle"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='inner-editor'",
+      "reason": "invalidate paint rectangle"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/caret-outside-block-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/caret-outside-block-expected.txt
index 83596c9..3d327ae 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/caret-outside-block-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/caret-outside-block-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -13,6 +15,12 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV id='target'",
+      "reason": "invalidate paint rectangle"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/caret-with-transformation-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/caret-with-transformation-expected.txt
index 2e0251f7..9a17240 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/caret-with-transformation-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/caret-with-transformation-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -18,6 +20,16 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV id='div'",
+      "reason": "invalidate paint rectangle"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='div'",
+      "reason": "invalidate paint rectangle"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/change-text-content-and-background-color-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/change-text-content-and-background-color-expected.txt
index 5490d875..afb4b56 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/change-text-content-and-background-color-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/change-text-content-and-background-color-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -20,21 +22,27 @@
           "object": "LayoutText #text",
           "rect": [30, 30, 44, 23],
           "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ''",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'NEW'",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutTextControl (positioned) INPUT id='input'",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='inner-editor'",
+      "reason": "invalidate paint rectangle"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "full"
+    },
+    {
+      "object": "InlineTextBox 'NEW'",
+      "reason": "full"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/clip-with-layout-delta-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/clip-with-layout-delta-expected.txt
index bbaa705..c79246e 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/clip-with-layout-delta-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/clip-with-layout-delta-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -35,41 +37,51 @@
           "object": "LayoutText #text",
           "rect": [8, 8, 4, 18],
           "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox '\u00A0'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox '\u00A0'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox '\u00A0'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox '\u00A0'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "background obscuration change"
+    },
+    {
+      "object": "LayoutBlockFlow SPAN id='t1'",
+      "reason": "style change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox '\u00A0'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow (relative positioned) DIV",
+      "reason": "background obscuration change"
+    },
+    {
+      "object": "LayoutBlockFlow SPAN id='t2' class='blue'",
+      "reason": "style change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox '\u00A0'",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/control-clip-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/control-clip-expected.txt
index 4b97918..ef986cae 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/control-clip-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/control-clip-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -25,33 +27,35 @@
           "object": "LayoutText #text",
           "rect": [82, 114, 52, 13],
           "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ''",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ''",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'SUCCESS'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'SUCCESS'",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (anonymous)",
+      "reason": "invalidate paint rectangle"
+    },
+    {
+      "object": "LayoutText (anonymous)",
+      "reason": "full"
+    },
+    {
+      "object": "InlineTextBox 'SUCCESS'",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutBlockFlow (anonymous)",
+      "reason": "invalidate paint rectangle"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "full"
+    },
+    {
+      "object": "InlineTextBox 'SUCCESS'",
+      "reason": "full"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/crbug-371640-4-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/crbug-371640-4-expected.txt
index 7e90bde..695b040 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/crbug-371640-4-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/crbug-371640-4-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -35,45 +37,55 @@
           "object": "LayoutText #text",
           "rect": [208, 84, 4, 18],
           "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox '\u00A0'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox '\u00A0'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutBlockFlow (positioned) DIV class='abs_pos'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutBlockFlow (relative positioned) (floating) DIV id='keep_inner' class='inner'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutBlockFlow (relative positioned) (floating) DIV id='keep_outer' class='outer'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutBlockFlow (relative positioned) (floating) DIV id='node' class='outer'",
-          "reason": "layoutObject removal"
-        },
-        {
-          "object": "LayoutBlockFlow (relative positioned) (floating) DIV id='to_remove_inner' class='inner'",
-          "reason": "layoutObject removal"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutText #text",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='to_remove' class='item'",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutBlockFlow (relative positioned) (floating) DIV id='to_remove_inner' class='inner'",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutBlockFlow (relative positioned) (floating) DIV id='node' class='outer'",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutBlockFlow (relative positioned) (floating) DIV id='keep_outer' class='outer'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow (positioned) DIV class='abs_pos'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow (relative positioned) (floating) DIV id='keep_inner' class='inner'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='keep' class='item'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox '\u00A0'",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/crbug-371640-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/crbug-371640-expected.txt
index 77b37f8..077389f 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/crbug-371640-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/crbug-371640-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -35,49 +37,59 @@
           "object": "LayoutText #text",
           "rect": [88, 84, 4, 18],
           "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox '\u00A0'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox '\u00A0'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV id='container'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV id='keep_outer' class='outer'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV id='node' class='outer'",
-          "reason": "layoutObject removal"
-        },
-        {
-          "object": "LayoutBlockFlow (positioned) DIV class='abs_pos'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutBlockFlow (relative positioned) (floating) DIV id='keep_inner' class='inner'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutBlockFlow (relative positioned) (floating) DIV id='to_remove_inner' class='inner'",
-          "reason": "layoutObject removal"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutText #text",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='to_remove' class='item'",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutBlockFlow (relative positioned) (floating) DIV id='to_remove_inner' class='inner'",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutBlockFlow (floating) DIV id='node' class='outer'",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutBlockFlow (floating) DIV id='container'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow (floating) DIV id='keep_outer' class='outer'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow (relative positioned) (floating) DIV id='keep_inner' class='inner'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow (positioned) DIV class='abs_pos'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='keep' class='item'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox '\u00A0'",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/delete-into-nested-block-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/delete-into-nested-block-expected.txt
index 1088869..2e7e6352 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/delete-into-nested-block-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/delete-into-nested-block-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -55,93 +57,75 @@
           "object": "LayoutBlockFlow DIV id='one'",
           "rect": [7, 118, 3, 21],
           "reason": "invalidate paint rectangle"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'one'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'three'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'three'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'three'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'three'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'two'",
-          "reason": "full"
-        },
-        {
-          "object": "LayoutBR BR",
-          "reason": "layoutObject removal"
-        },
-        {
-          "object": "LayoutBR BR",
-          "reason": "layoutObject removal"
-        },
-        {
-          "object": "LayoutInline SPAN",
-          "reason": "layoutObject removal"
-        },
-        {
-          "object": "LayoutText #text",
-          "reason": "layoutObject removal"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutText #text",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutBR BR",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='two'",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutBR BR",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutInline SPAN",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "outline"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='one'",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'three'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='one'",
+      "reason": "invalidate paint rectangle"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/details-open-repaint-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/details-open-repaint-expected.txt
index ba7c44e..710d6c4 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/details-open-repaint-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/details-open-repaint-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -25,33 +27,55 @@
           "object": "LayoutDetailsMarker DIV id='details-marker'",
           "rect": [8, 53, 11, 11],
           "reason": "full"
-        },
-        {
-          "object": "HorizontalScrollbar",
-          "reason": "scroll"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='inner-editor'",
-          "reason": "scroll"
-        },
-        {
-          "object": "LayoutText #text",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "LayoutText #text",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "VerticalScrollbar",
-          "reason": "scroll"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutDetailsMarker DIV id='details-marker'",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='details-content'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutTextControl INPUT",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='inner-editor'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='inner-editor'",
+      "reason": "scroll"
+    },
+    {
+      "object": "HorizontalScrollbar",
+      "reason": "scroll"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='inner-editor'",
+      "reason": "scroll"
+    },
+    {
+      "object": "VerticalScrollbar",
+      "reason": "scroll"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "layoutObject insertion"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/focus-continuations-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/focus-continuations-expected.txt
index 6732090..49ce443 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/focus-continuations-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/focus-continuations-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -10,21 +12,27 @@
           "object": "LayoutInline SPAN id='outer'",
           "rect": [3, 83, 94, 30],
           "reason": "style change"
-        },
-        {
-          "object": "LayoutBlockFlow (anonymous)",
-          "reason": "forced by layout"
-        },
-        {
-          "object": "LayoutBlockFlow (anonymous)",
-          "reason": "forced by layout"
-        },
-        {
-          "object": "LayoutInline SPAN id='outer'",
-          "reason": "style change"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (anonymous)",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutInline SPAN id='outer'",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutBlockFlow (anonymous)",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutInline SPAN id='outer'",
+      "reason": "style change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/focus-enable-continuations-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/focus-enable-continuations-expected.txt
index 1e6f878..f1382a70 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/focus-enable-continuations-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/focus-enable-continuations-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -10,25 +12,31 @@
           "object": "LayoutInline SPAN id='outer'",
           "rect": [3, 83, 94, 30],
           "reason": "style change"
-        },
-        {
-          "object": "LayoutBlockFlow (anonymous)",
-          "reason": "forced by layout"
-        },
-        {
-          "object": "LayoutBlockFlow (anonymous)",
-          "reason": "forced by layout"
-        },
-        {
-          "object": "LayoutInline SPAN id='outer'",
-          "reason": "full"
-        },
-        {
-          "object": "LayoutInline SPAN id='outer'",
-          "reason": "style change"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (anonymous)",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutInline SPAN id='outer'",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutBlockFlow (anonymous)",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutInline SPAN id='outer'",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutInline SPAN id='outer'",
+      "reason": "style change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/focus-ring-on-child-move-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/focus-ring-on-child-move-expected.txt
index 8e76e1f..833a890 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/focus-ring-on-child-move-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/focus-ring-on-child-move-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -23,6 +25,16 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (positioned) DIV",
+      "reason": "outline"
+    },
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='child'",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/gradients-em-stops-repaint-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/gradients-em-stops-repaint-expected.txt
index 3676021..9c4d0d4 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/gradients-em-stops-repaint-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/gradients-em-stops-repaint-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -20,25 +22,23 @@
           "object": "LayoutBlockFlow DIV class='indicator'",
           "rect": [345, 19, 240, 20],
           "reason": "style change"
-        },
-        {
-          "object": "InlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV class='em-units'",
+      "reason": "invalidate paint rectangle"
+    },
+    {
+      "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/fast/repaint/inline-color-change-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/inline-color-change-expected.txt
index 8d50a07..1899e03 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/inline-color-change-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/inline-color-change-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -15,17 +17,27 @@
           "object": "LayoutText #text",
           "rect": [8, 68, 37, 18],
           "reason": "style change"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox 'PASS'",
-          "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/fast/repaint/inline-focus-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/inline-focus-expected.txt
index 603ee857..94a5063 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/inline-focus-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/inline-focus-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -20,37 +22,27 @@
           "object": "LayoutBlockFlow P",
           "rect": [0, 34, 800, 18],
           "reason": "invalidate paint rectangle"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox 'Home'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'crbug.com/424078: ensure inline elements get their outline painted'",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (anonymous)",
+      "reason": "invalidate paint rectangle"
+    },
+    {
+      "object": "LayoutInline A id='link'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutBlockFlow P",
+      "reason": "invalidate paint rectangle"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/inline-outline-repaint-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/inline-outline-repaint-expected.txt
index e8146c3a..e047c38 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/inline-outline-repaint-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/inline-outline-repaint-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -25,425 +27,51 @@
           "object": "LayoutBlockFlow DIV",
           "rect": [45, 183, 3, 20],
           "reason": "invalidate paint rectangle"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "outline"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "outline"
-        },
-        {
-          "object": "InlineTextBox ' '",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ' '",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ' '",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ' '",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ' '",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ' '",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ' '",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ' '",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ' '",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ' '",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ' '",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ' '",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ' '",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ' '",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ' '",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ''",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ''",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ''",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ''",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ''",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ''",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ''",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ''",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ''",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Lorem ipsum'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Lorem ipsum'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Lorem ipsum'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Lorem ipsum'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Lorem ipsum'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Lorem ipsum'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Lorem ipsum'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Lorem ipsum'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Lorem ipsum'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Lorem ipsum'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Lorem ipsum'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Lorem ipsum'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Lorem ipsum'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Lorem ipsum'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Lorem ipsum'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'dolor sit amet'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'dolor sit'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'dolor sit'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'dolor'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'dolor'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'dolor\u00A0'",
-          "reason": "full"
-        },
-        {
-          "object": "LayoutText #text",
-          "reason": "layoutObject removal"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutText #text",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "invalidate paint rectangle"
+    },
+    {
+      "object": "LayoutInline SPAN id='test'",
+      "reason": "outline"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "outline"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "outline"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "full"
+    },
+    {
+      "object": "InlineTextBox 'Lorem ipsum'",
+      "reason": "full"
+    },
+    {
+      "object": "InlineTextBox ' '",
+      "reason": "full"
+    },
+    {
+      "object": "InlineTextBox 'dolor\u00A0'",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "invalidate paint rectangle"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/inline-style-change-in-scrolled-view-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/inline-style-change-in-scrolled-view-expected.txt
index c66e9a1..2f4f2ddd9 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/inline-style-change-in-scrolled-view-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/inline-style-change-in-scrolled-view-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [2000, 2000],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [2000, 2000],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -10,13 +12,19 @@
           "object": "LayoutText #text",
           "rect": [0, 288, 415, 18],
           "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox 'Text Text Text Text Text Text Text Text Text Text Text Text Text'",
-          "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/mac/fast/repaint/invalidation-after-opacity-change-subtree-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/invalidation-after-opacity-change-subtree-expected.txt
index 2c66761..f02bdb2 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/invalidation-after-opacity-change-subtree-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/invalidation-after-opacity-change-subtree-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [785, 2350],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [785, 2350],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -55,57 +57,99 @@
           "object": "LayoutText #text",
           "rect": [8, 2195, 653, 109],
           "reason": "subtree"
-        },
-        {
-          "object": "InlineTextBox 'This test checks that switching opacity'",
-          "reason": "subtree"
-        },
-        {
-          "object": "InlineTextBox 'This test checks that switching opacity'",
-          "reason": "subtree"
-        },
-        {
-          "object": "InlineTextBox 'This text should be visible in the'",
-          "reason": "subtree"
-        },
-        {
-          "object": "InlineTextBox 'This text should be visible in the'",
-          "reason": "subtree"
-        },
-        {
-          "object": "InlineTextBox 'invalidates the full subtree.'",
-          "reason": "subtree"
-        },
-        {
-          "object": "InlineTextBox 'invalidates the full subtree.'",
-          "reason": "subtree"
-        },
-        {
-          "object": "InlineTextBox 'output.'",
-          "reason": "subtree"
-        },
-        {
-          "object": "InlineTextBox 'output.'",
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='container'",
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='container'",
-          "reason": "subtree"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV id='container'",
+      "reason": "subtree"
+    },
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='absolute'",
+      "reason": "subtree"
+    },
+    {
+      "object": "LayoutBlockFlow P",
+      "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": "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/fast/repaint/japanese-rl-selection-clear-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/japanese-rl-selection-clear-expected.txt
index 68ef222..344a94ef 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/japanese-rl-selection-clear-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/japanese-rl-selection-clear-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -15,129 +17,139 @@
           "object": "LayoutText #text",
           "rect": [387, 123, 385, 399],
           "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '\u3044\u8A18\u4E8B\u304C\u3069\u3053\u306B\u3042\u3063\u305F\u304B\u5FD8\u308C\u3066\u3057\u307E\u3063\u305F'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox '\u3044\u8A18\u4E8B\u304C\u3069\u3053\u306B\u3042\u3063\u305F\u304B\u5FD8\u308C\u3066\u3057\u307E\u3063\u305F'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '\u304B\u3089\u3082\u691C\u7D22\u3059\u308B\u3053\u3068\u304C\u3067\u304D\u307E\u3059\u3002\u305B\u3063\u304B'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox '\u304B\u3089\u3082\u691C\u7D22\u3059\u308B\u3053\u3068\u304C\u3067\u304D\u307E\u3059\u3002\u305B\u3063\u304B'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '\u304C\u3067\u304D\u307E\u3059\u3002\u305B\u3063\u304B\u304F\u898B\u3064\u3051\u305F\u3059\u3070\u3089\u3057'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox '\u304C\u3067\u304D\u307E\u3059\u3002\u305B\u3063\u304B\u304F\u898B\u3064\u3051\u305F\u3059\u3070\u3089\u3057'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '\u304F\u3001\u8A2A\u554F\u3057\u305F\u30A6\u30A7\u30D6\u30DA\u30FC\u30B8\u306E\u30B3\u30F3\u30C6\u30F3\u30C4'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox '\u304F\u3001\u8A2A\u554F\u3057\u305F\u30A6\u30A7\u30D6\u30DA\u30FC\u30B8\u306E\u30B3\u30F3\u30C6\u30F3\u30C4'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '\u304F\u898B\u3064\u3051\u305F\u3059\u3070\u3089\u3057\u3044\u8A18\u4E8B\u304C\u3069\u3053\u306B\u3042\u3063'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox '\u304F\u898B\u3064\u3051\u305F\u3059\u3070\u3089\u3057\u3044\u8A18\u4E8B\u304C\u3069\u3053\u306B\u3042\u3063'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '\u3057\u305F\u30A6\u30A7\u30D6\u30DA\u30FC\u30B8\u306E\u30B3\u30F3\u30C6\u30F3\u30C4\u304B\u3089\u3082\u691C'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox '\u3057\u305F\u30A6\u30A7\u30D6\u30DA\u30FC\u30B8\u306E\u30B3\u30F3\u30C6\u30F3\u30C4\u304B\u3089\u3082\u691C'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '\u3059\u304B\u306A\u3089\u30BF\u30A4\u30C8\u30EB\u3068\u30A2\u30C9\u30EC\u30B9\u3060\u3051\u3067\u306A'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox '\u3059\u304B\u306A\u3089\u30BF\u30A4\u30C8\u30EB\u3068\u30A2\u30C9\u30EC\u30B9\u3060\u3051\u3067\u306A'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '\u305B\u3063\u304B\u304F\u898B\u3064\u3051\u305F\u3059\u3070\u3089\u3057\u3044\u8A18\u4E8B\u304C\u3069\u3053'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox '\u305B\u3063\u304B\u304F\u898B\u3064\u3051\u305F\u3059\u3070\u3089\u3057\u3044\u8A18\u4E8B\u304C\u3069\u3053'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '\u305F\u304B\u5FD8\u308C\u3066\u3057\u307E\u3063\u305F\u7D4C\u9A13\u306F\u3042\u308A\u307E\u3059\u304B \u306A'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox '\u305F\u304B\u5FD8\u308C\u3066\u3057\u307E\u3063\u305F\u7D4C\u9A13\u306F\u3042\u308A\u307E\u3059\u304B \u306A'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '\u306B\u3042\u3063\u305F\u304B\u5FD8\u308C\u3066\u3057\u307E\u3063\u305F\u7D4C\u9A13\u306F\u3042\u308A\u307E'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox '\u306B\u3042\u3063\u305F\u304B\u5FD8\u308C\u3066\u3057\u307E\u3063\u305F\u7D4C\u9A13\u306F\u3042\u308A\u307E'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '\u3089\u30BF\u30A4\u30C8\u30EB\u3068\u30A2\u30C9\u30EC\u30B9\u3060\u3051\u3067\u306A\u304F\u3001\u8A2A\u554F'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox '\u3089\u30BF\u30A4\u30C8\u30EB\u3068\u30A2\u30C9\u30EC\u30B9\u3060\u3051\u3067\u306A\u304F\u3001\u8A2A\u554F'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '\u30B9\u3060\u3051\u3067\u306A\u304F\u3001\u8A2A\u554F'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox '\u30B9\u3060\u3051\u3067\u306A\u304F\u3001\u8A2A\u554F'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '\u30DA\u30FC\u30B8\u306E\u30B3\u30F3\u30C6\u30F3\u30C4\u304B\u3089\u3082\u691C\u7D22\u3059\u308B\u3053\u3068'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox '\u30DA\u30FC\u30B8\u306E\u30B3\u30F3\u30C6\u30F3\u30C4\u304B\u3089\u3082\u691C\u7D22\u3059\u308B\u3053\u3068'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '\u7D22\u3059\u308B\u3053\u3068\u304C\u3067\u304D\u307E\u3059\u3002\u8A2A\u554F\u3057\u305F\u30A6\u30A7\u30D6'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox '\u7D22\u3059\u308B\u3053\u3068\u304C\u3067\u304D\u307E\u3059\u3002\u8A2A\u554F\u3057\u305F\u30A6\u30A7\u30D6'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '\u7D4C\u9A13\u306F\u3042\u308A\u307E\u3059\u304B \u306A\u3089\u30BF\u30A4\u30C8\u30EB\u3068\u30A2\u30C9\u30EC'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox '\u7D4C\u9A13\u306F\u3042\u308A\u307E\u3059\u304B \u306A\u3089\u30BF\u30A4\u30C8\u30EB\u3068\u30A2\u30C9\u30EC'",
-          "reason": "selection"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutText #text",
+      "reason": "selection"
+    },
+    {
+      "object": "InlineTextBox '\u305B\u3063\u304B\u304F\u898B\u3064\u3051\u305F\u3059\u3070\u3089\u3057\u3044\u8A18\u4E8B\u304C\u3069\u3053'",
+      "reason": "selection"
+    },
+    {
+      "object": "InlineTextBox '\u306B\u3042\u3063\u305F\u304B\u5FD8\u308C\u3066\u3057\u307E\u3063\u305F\u7D4C\u9A13\u306F\u3042\u308A\u307E'",
+      "reason": "selection"
+    },
+    {
+      "object": "InlineTextBox '\u3059\u304B\u306A\u3089\u30BF\u30A4\u30C8\u30EB\u3068\u30A2\u30C9\u30EC\u30B9\u3060\u3051\u3067\u306A'",
+      "reason": "selection"
+    },
+    {
+      "object": "InlineTextBox '\u304F\u3001\u8A2A\u554F\u3057\u305F\u30A6\u30A7\u30D6\u30DA\u30FC\u30B8\u306E\u30B3\u30F3\u30C6\u30F3\u30C4'",
+      "reason": "selection"
+    },
+    {
+      "object": "InlineTextBox '\u304B\u3089\u3082\u691C\u7D22\u3059\u308B\u3053\u3068\u304C\u3067\u304D\u307E\u3059\u3002\u305B\u3063\u304B'",
+      "reason": "selection"
+    },
+    {
+      "object": "InlineTextBox '\u304F\u898B\u3064\u3051\u305F\u3059\u3070\u3089\u3057\u3044\u8A18\u4E8B\u304C\u3069\u3053\u306B\u3042\u3063'",
+      "reason": "selection"
+    },
+    {
+      "object": "InlineTextBox '\u305F\u304B\u5FD8\u308C\u3066\u3057\u307E\u3063\u305F\u7D4C\u9A13\u306F\u3042\u308A\u307E\u3059\u304B \u306A'",
+      "reason": "selection"
+    },
+    {
+      "object": "InlineTextBox '\u3089\u30BF\u30A4\u30C8\u30EB\u3068\u30A2\u30C9\u30EC\u30B9\u3060\u3051\u3067\u306A\u304F\u3001\u8A2A\u554F'",
+      "reason": "selection"
+    },
+    {
+      "object": "InlineTextBox '\u3057\u305F\u30A6\u30A7\u30D6\u30DA\u30FC\u30B8\u306E\u30B3\u30F3\u30C6\u30F3\u30C4\u304B\u3089\u3082\u691C'",
+      "reason": "selection"
+    },
+    {
+      "object": "InlineTextBox '\u7D22\u3059\u308B\u3053\u3068\u304C\u3067\u304D\u307E\u3059\u3002\u8A2A\u554F\u3057\u305F\u30A6\u30A7\u30D6'",
+      "reason": "selection"
+    },
+    {
+      "object": "InlineTextBox '\u30DA\u30FC\u30B8\u306E\u30B3\u30F3\u30C6\u30F3\u30C4\u304B\u3089\u3082\u691C\u7D22\u3059\u308B\u3053\u3068'",
+      "reason": "selection"
+    },
+    {
+      "object": "InlineTextBox '\u304C\u3067\u304D\u307E\u3059\u3002\u305B\u3063\u304B\u304F\u898B\u3064\u3051\u305F\u3059\u3070\u3089\u3057'",
+      "reason": "selection"
+    },
+    {
+      "object": "InlineTextBox '\u3044\u8A18\u4E8B\u304C\u3069\u3053\u306B\u3042\u3063\u305F\u304B\u5FD8\u308C\u3066\u3057\u307E\u3063\u305F'",
+      "reason": "selection"
+    },
+    {
+      "object": "InlineTextBox '\u7D4C\u9A13\u306F\u3042\u308A\u307E\u3059\u304B \u306A\u3089\u30BF\u30A4\u30C8\u30EB\u3068\u30A2\u30C9\u30EC'",
+      "reason": "selection"
+    },
+    {
+      "object": "InlineTextBox '\u30B9\u3060\u3051\u3067\u306A\u304F\u3001\u8A2A\u554F'",
+      "reason": "selection"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "incremental"
+    },
+    {
+      "object": "InlineTextBox '\u305B\u3063\u304B\u304F\u898B\u3064\u3051\u305F\u3059\u3070\u3089\u3057\u3044\u8A18\u4E8B\u304C\u3069\u3053'",
+      "reason": "incremental"
+    },
+    {
+      "object": "InlineTextBox '\u306B\u3042\u3063\u305F\u304B\u5FD8\u308C\u3066\u3057\u307E\u3063\u305F\u7D4C\u9A13\u306F\u3042\u308A\u307E'",
+      "reason": "incremental"
+    },
+    {
+      "object": "InlineTextBox '\u3059\u304B\u306A\u3089\u30BF\u30A4\u30C8\u30EB\u3068\u30A2\u30C9\u30EC\u30B9\u3060\u3051\u3067\u306A'",
+      "reason": "incremental"
+    },
+    {
+      "object": "InlineTextBox '\u304F\u3001\u8A2A\u554F\u3057\u305F\u30A6\u30A7\u30D6\u30DA\u30FC\u30B8\u306E\u30B3\u30F3\u30C6\u30F3\u30C4'",
+      "reason": "incremental"
+    },
+    {
+      "object": "InlineTextBox '\u304B\u3089\u3082\u691C\u7D22\u3059\u308B\u3053\u3068\u304C\u3067\u304D\u307E\u3059\u3002\u305B\u3063\u304B'",
+      "reason": "incremental"
+    },
+    {
+      "object": "InlineTextBox '\u304F\u898B\u3064\u3051\u305F\u3059\u3070\u3089\u3057\u3044\u8A18\u4E8B\u304C\u3069\u3053\u306B\u3042\u3063'",
+      "reason": "incremental"
+    },
+    {
+      "object": "InlineTextBox '\u305F\u304B\u5FD8\u308C\u3066\u3057\u307E\u3063\u305F\u7D4C\u9A13\u306F\u3042\u308A\u307E\u3059\u304B \u306A'",
+      "reason": "incremental"
+    },
+    {
+      "object": "InlineTextBox '\u3089\u30BF\u30A4\u30C8\u30EB\u3068\u30A2\u30C9\u30EC\u30B9\u3060\u3051\u3067\u306A\u304F\u3001\u8A2A\u554F'",
+      "reason": "incremental"
+    },
+    {
+      "object": "InlineTextBox '\u3057\u305F\u30A6\u30A7\u30D6\u30DA\u30FC\u30B8\u306E\u30B3\u30F3\u30C6\u30F3\u30C4\u304B\u3089\u3082\u691C'",
+      "reason": "incremental"
+    },
+    {
+      "object": "InlineTextBox '\u7D22\u3059\u308B\u3053\u3068\u304C\u3067\u304D\u307E\u3059\u3002\u8A2A\u554F\u3057\u305F\u30A6\u30A7\u30D6'",
+      "reason": "incremental"
+    },
+    {
+      "object": "InlineTextBox '\u30DA\u30FC\u30B8\u306E\u30B3\u30F3\u30C6\u30F3\u30C4\u304B\u3089\u3082\u691C\u7D22\u3059\u308B\u3053\u3068'",
+      "reason": "incremental"
+    },
+    {
+      "object": "InlineTextBox '\u304C\u3067\u304D\u307E\u3059\u3002\u305B\u3063\u304B\u304F\u898B\u3064\u3051\u305F\u3059\u3070\u3089\u3057'",
+      "reason": "incremental"
+    },
+    {
+      "object": "InlineTextBox '\u3044\u8A18\u4E8B\u304C\u3069\u3053\u306B\u3042\u3063\u305F\u304B\u5FD8\u308C\u3066\u3057\u307E\u3063\u305F'",
+      "reason": "incremental"
+    },
+    {
+      "object": "InlineTextBox '\u7D4C\u9A13\u306F\u3042\u308A\u307E\u3059\u304B \u306A\u3089\u30BF\u30A4\u30C8\u30EB\u3068\u30A2\u30C9\u30EC'",
+      "reason": "incremental"
+    },
+    {
+      "object": "InlineTextBox '\u30B9\u3060\u3051\u3067\u306A\u304F\u3001\u8A2A\u554F'",
+      "reason": "incremental"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/japanese-rl-selection-repaint-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/japanese-rl-selection-repaint-expected.txt
index f699164..c5fc6cf 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/japanese-rl-selection-repaint-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/japanese-rl-selection-repaint-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -15,105 +17,115 @@
           "object": "LayoutText #text",
           "rect": [420, 23, 352, 560],
           "reason": "selection"
-        },
-        {
-          "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": "incremental"
-        },
-        {
-          "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": "selection"
-        },
-        {
-          "object": "InlineTextBox '\u3051\u3067\u306A\u304F\u3001\u8A2A\u554F'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox '\u3051\u3067\u306A\u304F\u3001\u8A2A\u554F'",
-          "reason": "selection"
-        },
-        {
-          "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": "incremental"
-        },
-        {
-          "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": "selection"
-        },
-        {
-          "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": "incremental"
-        },
-        {
-          "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": "incremental"
-        },
-        {
-          "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": "selection"
-        },
-        {
-          "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": "selection"
-        },
-        {
-          "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": "incremental"
-        },
-        {
-          "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": "selection"
-        },
-        {
-          "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": "incremental"
-        },
-        {
-          "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": "selection"
-        },
-        {
-          "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": "incremental"
-        },
-        {
-          "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": "selection"
-        },
-        {
-          "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": "incremental"
-        },
-        {
-          "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": "selection"
-        },
-        {
-          "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": "incremental"
-        },
-        {
-          "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": "selection"
-        },
-        {
-          "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": "incremental"
-        },
-        {
-          "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": "selection"
-        },
-        {
-          "object": "LayoutBlockFlow BODY",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutBlockFlow HTML",
-          "reason": "selection"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow HTML",
+      "reason": "selection"
+    },
+    {
+      "object": "LayoutBlockFlow BODY",
+      "reason": "selection"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "selection"
+    },
+    {
+      "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": "selection"
+    },
+    {
+      "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": "selection"
+    },
+    {
+      "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": "selection"
+    },
+    {
+      "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": "selection"
+    },
+    {
+      "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": "selection"
+    },
+    {
+      "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": "selection"
+    },
+    {
+      "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": "selection"
+    },
+    {
+      "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": "selection"
+    },
+    {
+      "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": "selection"
+    },
+    {
+      "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": "selection"
+    },
+    {
+      "object": "InlineTextBox '\u3051\u3067\u306A\u304F\u3001\u8A2A\u554F'",
+      "reason": "selection"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "incremental"
+    },
+    {
+      "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": "incremental"
+    },
+    {
+      "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": "incremental"
+    },
+    {
+      "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": "incremental"
+    },
+    {
+      "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": "incremental"
+    },
+    {
+      "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": "incremental"
+    },
+    {
+      "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": "incremental"
+    },
+    {
+      "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": "incremental"
+    },
+    {
+      "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": "incremental"
+    },
+    {
+      "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": "incremental"
+    },
+    {
+      "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": "incremental"
+    },
+    {
+      "object": "InlineTextBox '\u3051\u3067\u306A\u304F\u3001\u8A2A\u554F'",
+      "reason": "incremental"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/layout-state-relative-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/layout-state-relative-expected.txt
index 0f7e923..b4869b0 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/layout-state-relative-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/layout-state-relative-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -15,21 +17,23 @@
           "object": "LayoutText #text",
           "rect": [8, 150, 37, 18],
           "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ''",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'PASS'",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (relative positioned) DIV id='target'",
+      "reason": "invalidate paint rectangle"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "full"
+    },
+    {
+      "object": "InlineTextBox 'PASS'",
+      "reason": "full"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/layout-state-scrolloffset-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/layout-state-scrolloffset-expected.txt
index fc598a77..35386dc 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/layout-state-scrolloffset-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/layout-state-scrolloffset-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -15,21 +17,23 @@
           "object": "LayoutText #text",
           "rect": [100, 118, 41, 18],
           "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ''",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'after'",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV id='target'",
+      "reason": "invalidate paint rectangle"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "full"
+    },
+    {
+      "object": "InlineTextBox 'after'",
+      "reason": "full"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/layout-state-scrolloffset2-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/layout-state-scrolloffset2-expected.txt
index 8804807..bc6b9c3 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/layout-state-scrolloffset2-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/layout-state-scrolloffset2-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -15,21 +17,23 @@
           "object": "LayoutText #text",
           "rect": [102, 120, 41, 18],
           "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ''",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'after'",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV id='target'",
+      "reason": "invalidate paint rectangle"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "full"
+    },
+    {
+      "object": "InlineTextBox 'after'",
+      "reason": "full"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/layout-state-scrolloffset3-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/layout-state-scrolloffset3-expected.txt
index 259feb4..2150cb6c 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/layout-state-scrolloffset3-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/layout-state-scrolloffset3-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -15,21 +17,23 @@
           "object": "LayoutText #text",
           "rect": [100, 118, 34, 18],
           "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ''",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'after'",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV id='target'",
+      "reason": "invalidate paint rectangle"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "full"
+    },
+    {
+      "object": "InlineTextBox 'after'",
+      "reason": "full"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/layoutstate-invalid-invalidation-inline-relative-positioned-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/layoutstate-invalid-invalidation-inline-relative-positioned-expected.txt
index e8f0cd4..027e3160 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/layoutstate-invalid-invalidation-inline-relative-positioned-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/layoutstate-invalid-invalidation-inline-relative-positioned-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -40,45 +42,47 @@
           "object": "LayoutText #text",
           "rect": [8, 200, 100, 100],
           "reason": "bounds change"
-        },
-        {
-          "object": "InlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'x'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutText #text",
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutText #text",
-          "reason": "bounds change"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (anonymous)",
+      "reason": "invalidate paint rectangle"
+    },
+    {
+      "object": "LayoutInline (relative positioned) SPAN id='target'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "bounds change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox 'x'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/line-flow-with-floats-1-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/line-flow-with-floats-1-expected.txt
index f462487..03dfe3a 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/line-flow-with-floats-1-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/line-flow-with-floats-1-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -85,446 +87,6 @@
           "object": "LayoutText #text",
           "rect": [368, 422, 1, 54],
           "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox ' twist itself round and look up in her face, with\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ' twist itself'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox ' was in a furious passion, and went\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Alice began to feel very uneasy: to be sure, she had not as\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Alice soon came to the conclusion that it was a very'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'Queen'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'The chief difficulty Alice found at first was in'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'The players all played at once without waiting'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'a very short time '",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'a very short time '",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'about once in a minute.\n'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'about, and shouting \u2018Off with his head!\u2019 or \u2018Off with'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'always getting up and walking off to other parts of\n'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'and was in the act of crawling away: besides all\n'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'arm, with its legs hanging down,\n'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'arm, with its legs hanging down,\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'become of\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'begin again, it was very provoking to find that the hedgehog'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'begin again, it was'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'besides all\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'body tucked away,\n'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'body tucked away,\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'but generally, just as'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'but generally, just as'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'comfortably enough, under her'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'comfortably enough, under her'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'difficult game indeed.\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'difficult game indeed.\n'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'doubled-up\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'flamingo: she succeeded in getting its'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'for the hedgehogs; and in\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'for the hedgehogs; and in\n'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'for turns,\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'for turns,\n'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'generally a ridge or furrow in the way wherever\n'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'give the hedgehog a blow with its head, it\n'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'going to give the hedgehog a blow with its head, it'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'had\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'had any dispute with the Queen, but she knew that it might'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'had got its head down, and was going to\n'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'happen any minute, \u2018and then,\u2019 thought she, \u2018what would'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'her head!\u2019 about once in a minute.\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'her head!\u2019'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'here; the great\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'laughing: and when she had got its head down, and was going'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'laughing: and when she'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'managing her\n'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'me? They\u2019re dreadfully fond of beheading people'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'other parts of\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'out, and was going to'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'out, and was'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'puzzled expression that she could not help bursting out'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'quarrelling all the while, and fighting'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'quarrelling all the while, and fighting'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'round and look up in her face, with\n'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'send the hedgehog to, and, as the doubled-up\n'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'she had got its neck nicely straightened\n'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'she had got its neck nicely straightened\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'she wanted to send the hedgehog to, and, as the'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'she wanted to'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'shouting \u2018Off with his head!\u2019 or \u2018Off with\n'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'soldiers were always getting up and walking off to'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'soldiers were'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'stamping about, and'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'stamping'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'such a puzzled expression'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'such a'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'that it was a very\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'that she could not help bursting out\n'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'the Queen'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'the ground, Alice soon came to the conclusion'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'the ground,'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'the'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'this, there was generally a ridge or furrow in the'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'this, there was'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'to\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'unrolled itself, and was in the act of crawling away:'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'unrolled itself,'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'very provoking to find that the hedgehog had\n'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'was in a furious passion, and went\n'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'way wherever\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'wonder is, that there\u2018s any one left alive!\u2019'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'would'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'would'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'yet'",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/line-flow-with-floats-10-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/line-flow-with-floats-10-expected.txt
index bfbbcc8..5dd823f 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/line-flow-with-floats-10-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/line-flow-with-floats-10-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -30,186 +32,6 @@
           "object": "LayoutText #text",
           "rect": [367, 422, 2, 54],
           "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox ' was in a furious passion, and went\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ' was in a furious passion, and went'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'Alice began to feel very uneasy: to be sure, she had not as\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Queen'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Queen'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'The players all played at once without waiting'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'a very short time '",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'about, and shouting \u2018Off with his head!\u2019 or \u2018Off with'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'become of\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'difficult game indeed.\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'doubled-up\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'for the hedgehogs; and in\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'for turns,\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'had any dispute with the Queen, but she knew that it might'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'happen any minute, \u2018and then,\u2019 thought she, \u2018what would'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'her head!\u2019 about once in a minute.\n'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'her head!\u2019 about once in a minute.\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'here; the great\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'me? They\u2019re dreadfully fond of beheading people'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'other parts of\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'quarrelling all the while, and fighting'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'soldiers were always getting up and walking off to'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'stamping about, and shouting \u2018Off with his head!\u2019 or'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'stamping'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'that it was a very\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'the ground, Alice soon came to the conclusion'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'the'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'the'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'wonder is, that there\u2018s any one left alive!\u2019'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'yet'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox '\u2018Off with\n'",
-          "reason": "incremental"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/line-flow-with-floats-2-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/line-flow-with-floats-2-expected.txt
index 4ff6cb6..537076c0 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/line-flow-with-floats-2-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/line-flow-with-floats-2-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -125,190 +127,6 @@
           "object": "LayoutText #text",
           "rect": [14, 188, 45, 22],
           "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox ' twist itself round and look up in her face, with\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ' twist itself round and look up in her face, with\n'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox ' was in a furious passion, and went\n'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox ''",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Alice began to feel very uneasy: to be sure, she had not as\n'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'Queen'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'The players all played at once without waiting'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'a very short time '",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'about, and shouting \u2018Off with his head!\u2019 or \u2018Off with'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'become of\n'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'begin again, it was very provoking to find that the hedgehog'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'besides all\n'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'difficult game indeed.\n'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'doubled-up\n'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'for the hedgehogs; and in\n'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'for turns,\n'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'going to give the hedgehog a blow with its head, it'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'had\n'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'had any dispute with the Queen, but she knew that it might'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'happen any minute, \u2018and then,\u2019 thought she, \u2018what would'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'her head!\u2019 about once in a minute.\n'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'here; the great\n'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'laughing: and when she had got its head down, and was going'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'me? They\u2019re dreadfully fond of beheading people'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'other parts of\n'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'puzzled expression that she could not help bursting out'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'quarrelling all the while, and fighting'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'she wanted to send the hedgehog to, and, as the'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'soldiers were always getting up and walking off to'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'stamping'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'such a'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'such a'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'that it was a very\n'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'the ground, Alice soon came to the conclusion'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'the'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'this, there was generally a ridge or furrow in the'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'to\n'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'unrolled itself, and was in the act of crawling away:'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'way wherever\n'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'wonder is, that there\u2018s any one left alive!\u2019'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'would'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox 'yet'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutInline I id='would'",
-          "reason": "style change"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/line-flow-with-floats-3-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/line-flow-with-floats-3-expected.txt
index 0145e88..7f4221f 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/line-flow-with-floats-3-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/line-flow-with-floats-3-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -40,194 +42,6 @@
           "object": "LayoutText #text",
           "rect": [352, 422, 17, 54],
           "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox ' was in a furious passion, and went\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ' was in a furious passion, and went'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'Alice began to feel very uneasy: to be sure, she had not as\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Queen'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'The players all played at once without waiting\n'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'The players all played at once without waiting'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'a very short time '",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'a very short time'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'about, and shouting \u2018Off with his head!\u2019 or \u2018Off with'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'become of\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'difficult game indeed.\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'for the hedgehogs; and in\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'for the hedgehogs; and in\n'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'for turns,\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'for'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'had any dispute with the Queen, but she knew that it might'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'happen any minute, \u2018and then,\u2019 thought she, \u2018what would'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'her head!\u2019 about once in a minute.\n'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'her head!\u2019 about once in a minute.\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'here; the great\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'me? They\u2019re dreadfully fond of beheading people'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'other parts of\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'quarrelling all the while, and fighting'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'quarrelling all the while, and fighting'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'stamping about, and shouting \u2018Off with his head!\u2019 or'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'stamping'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'that it was a very\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'the Queen'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'the ground, Alice soon came to the conclusion'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'the'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'turns,\n'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'wonder is, that there\u2018s any one left alive!\u2019'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'yet'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox '\u2018Off with\n'",
-          "reason": "incremental"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/line-flow-with-floats-4-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/line-flow-with-floats-4-expected.txt
index c19d973..e792fb9 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/line-flow-with-floats-4-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/line-flow-with-floats-4-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -20,170 +22,6 @@
           "object": "LayoutBlockFlow (floating) SPAN id='greenFloat'",
           "rect": [372, 435, 48, 17],
           "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox ' was in a furious passion, and went\n'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox ' was in a furious passion, and went\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Alice began to feel very uneasy: to be sure, she had not as\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Queen'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'The players all played at once without waiting'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'a very short time '",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'about, and shouting \u2018Off with his head!\u2019 or \u2018Off with\n'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'about, and shouting \u2018Off with his head!\u2019 or \u2018Off with'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'become of\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'difficult game indeed.\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'for the hedgehogs; and in\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'for turns,\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'had any dispute with the Queen, but she knew that it might'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'happen any minute, \u2018and then,\u2019 thought she, \u2018what would'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'head!\u2019 about once in a minute.\n'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'her head!\u2019 about once in a minute.\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'her'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'here; the great\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'me? They\u2019re dreadfully fond of beheading people'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'other parts of\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'quarrelling all the while, and fighting'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'stamping'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'stamping'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'that it was a very\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'the ground, Alice soon came to the conclusion'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'the'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'wonder is, that there\u2018s any one left alive!\u2019'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'yet'",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/line-flow-with-floats-5-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/line-flow-with-floats-5-expected.txt
index f4cb6db..2458a781 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/line-flow-with-floats-5-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/line-flow-with-floats-5-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -45,198 +47,6 @@
           "object": "LayoutText #text",
           "rect": [368, 404, 1, 36],
           "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox ' was in a furious passion, and went\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Alice began to feel very uneasy: to be sure, she had not as\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Queen'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'Queen'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'The players all played at once without waiting\n'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'The players all played at once without waiting'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'a very short time '",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'a very short time '",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'about, and shouting \u2018Off with his head!\u2019 or \u2018Off with'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'become of\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'difficult game indeed.\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'difficult game indeed.\n'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'doubled-up\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'for the hedgehogs; and in\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'for turns,\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'for'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'had any dispute with the Queen, but she knew that it might'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'happen any minute, \u2018and then,\u2019 thought she, \u2018what would'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'her head!\u2019 about once in a minute.\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'here; the great\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'me? They\u2019re dreadfully fond of beheading people'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'other parts of\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'quarrelling all the while, and fighting for'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'quarrelling all the while, and fighting'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'soldiers were always getting up and walking off to'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'stamping'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'that it was a very\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'the ground, Alice soon came to the conclusion'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'the hedgehogs; and in\n'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'the'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'the'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'turns,\n'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'wonder is, that there\u2018s any one left alive!\u2019'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'yet'",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/line-flow-with-floats-6-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/line-flow-with-floats-6-expected.txt
index 75fbdbf1..9d54bfc 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/line-flow-with-floats-6-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/line-flow-with-floats-6-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -20,58 +22,6 @@
           "object": "LayoutText #text",
           "rect": [27, 353, 22, 19],
           "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'The players all played at once without waiting'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'difficult game indeed.\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'doubled-up\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'foo'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'other parts of\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'soldiers were always getting up and walking off to'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'that it was a very\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'the ground, Alice soon came to the conclusion'",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/line-flow-with-floats-7-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/line-flow-with-floats-7-expected.txt
index 31808f58..373fdb0 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/line-flow-with-floats-7-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/line-flow-with-floats-7-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -20,78 +22,6 @@
           "object": "LayoutText #text",
           "rect": [368, 422, 1, 54],
           "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox ' was in a furious passion, and went\n'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox ' was in a furious passion, and went\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ''",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ''",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Queen'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox 'a very short time '",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'about, and shouting \u2018Off with his head!\u2019 or \u2018Off with'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'for the hedgehogs; and in\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'for turns,\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'her head!\u2019 about once in a minute.\n'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'quarrelling all the while, and fighting'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'stamping'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'stamping'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'the'",
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutInline SPAN id='theQueen'",
-          "reason": "style change"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/line-flow-with-floats-8-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/line-flow-with-floats-8-expected.txt
index 5404f38..ee1a165 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/line-flow-with-floats-8-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/line-flow-with-floats-8-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -50,310 +52,6 @@
           "object": "LayoutBlockFlow (floating) SPAN id='blueFloat'",
           "rect": [14, 353, 48, 65],
           "reason": "layoutObject removal"
-        },
-        {
-          "object": "InlineTextBox ' twist itself round and look up in her face, with\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ' was in a furious passion, and went\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ' was in a'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'Queen'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'The chief difficulty Alice found at first was in'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'The players all played at once without waiting\n'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'The players all played at once without waiting'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'a very short time '",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'a very short time '",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'about once in a minute.\n'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'about, and shouting \u2018Off with his head!\u2019 or \u2018Off with'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'arm, with its legs hanging down,\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'begin again, it was very provoking to find that the hedgehog'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'besides all\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'body tucked away,\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'but generally, just as'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'comfortably enough, under her'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'difficult game indeed.\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'difficult game indeed.\n'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'doubled-up\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'flamingo: she succeeded in getting its'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'for the hedgehogs; and in\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'for turns,\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'for'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'furious passion, and went\n'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'going to give the hedgehog a blow with its head, it'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'had\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'hedgehogs; and in\n'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'her head!\u2019 about once in a minute.\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'her head!\u2019'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'laughing: and when she had got its head down, and was going'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'managing her\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'other parts of\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'out, and was'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'puzzled expression that she could not help bursting out'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'quarrelling all the while, and fighting for the'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'quarrelling all the while, and fighting'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'she had got its neck nicely straightened\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'she wanted to send the hedgehog to, and, as the'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'shouting \u2018Off with his head!\u2019 or \u2018Off with\n'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'soldiers were always getting up and walking off to'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'stamping about, and'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'stamping'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'such a'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'that it was a very\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'the Queen'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'the ground, Alice soon came to the conclusion'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'the'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'this, there was generally a ridge or furrow in the'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'to\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'turns,\n'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'unrolled itself, and was in the act of crawling away:'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'way wherever\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'would'",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/line-flow-with-floats-9-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/line-flow-with-floats-9-expected.txt
index 4d1803dc..2ee8cf42 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/line-flow-with-floats-9-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/line-flow-with-floats-9-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -110,378 +112,6 @@
           "object": "LayoutText #text",
           "rect": [419, 242, 1, 126],
           "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox ' was in a furious passion, and went\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Alice began to feel very uneasy: to be sure, she had not as\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Alice began to feel very uneasy: to be sure, she had not as\n'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'Alice soon came to the conclusion that it was a very'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'Queen'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'The players all played at once without waiting'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'The players all played at once without waiting'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'a very short time '",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'a very short time '",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'about once in a minute.\n'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'about, and shouting \u2018Off with his head!\u2019 or \u2018Off with'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'always getting up and walking off to other parts of\n'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'become of\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'become of\n'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'begin again, it was very provoking to find that the hedgehog'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'begin again, it was very provoking to find that the'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'besides all\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'crawling away: besides all\n'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'difficult game indeed.\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'difficult game indeed.\n'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'doubled-up\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'for the hedgehogs; and in\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'for the hedgehogs; and in\n'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'for turns,\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'for turns,\n'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'had\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'had any dispute with the Queen, but she knew that it might'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'had any dispute with the Queen, but she knew that it might'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'happen any minute, \u2018and then,\u2019 thought she, \u2018what would'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'happen any minute, \u2018and then,\u2019 thought she, \u2018what would'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'hedgehog had\n'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'her head!\u2019 about once in a minute.\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'her head!\u2019'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'here; the great\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'here; the great\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'here; the great\n'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'laughing: and when she had got its head down, and was going'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'me? They\u2019re dreadfully fond of beheading people'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'me? They\u2019re dreadfully fond of beheading people'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'other parts of\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'puzzled expression that she could not help bursting out'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'quarrelling all the while, and fighting'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'quarrelling all the while, and fighting'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'ridge or furrow in the way wherever\n'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'send the hedgehog to, and, as the doubled-up\n'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'she wanted to send the hedgehog to, and, as the'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'she wanted to'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'shouting \u2018Off with his head!\u2019 or \u2018Off with\n'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'soldiers were always getting up and walking off to'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'soldiers were'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'stamping about, and'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'stamping'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'that it was a very\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'the Queen'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'the ground, Alice soon came to the conclusion'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'the ground,'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'the'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'this, there was generally a ridge or furrow in the'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'this, there was generally a'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'to\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'unrolled itself, and was in the act of crawling away:'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'unrolled itself, and was in the act of'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'was in a furious passion, and went\n'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'way wherever\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'wonder is, that there\u2018s any one left alive!\u2019'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'wonder is, that there\u2018s any one left alive!\u2019'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'wonder is, that there\u2018s any one left alive!\u2019'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'yet'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'yet'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutView #document",
-          "reason": "scroll"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "VerticalScrollbar",
-          "reason": "scroll"
         }
       ]
     }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/line-in-scrolled-clipped-block-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/line-in-scrolled-clipped-block-expected.txt
index 3102233..5fbd970 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/line-in-scrolled-clipped-block-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/line-in-scrolled-clipped-block-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -15,21 +17,23 @@
           "object": "LayoutText #text",
           "rect": [8, 8, 100, 18],
           "reason": "full"
-        },
-        {
-          "object": "InlineTextBox '                         PASS     .'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ''",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV id='target'",
+      "reason": "invalidate paint rectangle"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "full"
+    },
+    {
+      "object": "InlineTextBox '                         PASS     .'",
+      "reason": "full"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/line-overflow-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/line-overflow-expected.txt
index d56cd4a..40ba8c1 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/line-overflow-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/line-overflow-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -35,89 +37,55 @@
           "object": "LayoutText #text",
           "rect": [38, 132, 36, 18],
           "reason": "bounds change"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox ' eleifend lacus,'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ' eleifend'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'at sagittis eros leo pulvinar'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'augue'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'convallis,\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'convallis.'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'lacus, at sagittis eros leo'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'pulvinar velit. Integer'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'purus'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'purus'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'sollicitudin nisi ut urna blandit'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'ut urna blandit convallis.'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'velit. Integer sollicitudin nisi'",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "invalidate paint rectangle"
+    },
+    {
+      "object": "LayoutInline SPAN id='t'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox 'purus'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox ' eleifend'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox 'lacus, at sagittis eros leo'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox 'pulvinar velit. Integer'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox 'sollicitudin nisi ut urna blandit'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox 'convallis.'",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/lines-with-layout-delta-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/lines-with-layout-delta-expected.txt
index 937fdf1..2b7f0c5 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/lines-with-layout-delta-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/lines-with-layout-delta-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -15,21 +17,23 @@
           "object": "LayoutText #text",
           "rect": [8, 58, 37, 18],
           "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ''",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'PASS'",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (floating) DIV id='target'",
+      "reason": "invalidate paint rectangle"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "full"
+    },
+    {
+      "object": "InlineTextBox 'PASS'",
+      "reason": "full"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/list-marker-2-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/list-marker-2-expected.txt
index 8884bc5a..1fd1ba9 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/list-marker-2-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/list-marker-2-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -30,25 +32,31 @@
           "object": "LayoutListMarker (anonymous)",
           "rect": [31, 130, 7, 18],
           "reason": "bounds change"
-        },
-        {
-          "object": "InlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutListItem LI",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutListItem LI",
+      "reason": "invalidate paint rectangle"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutListMarker (anonymous)",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutImage IMG id='target'",
+      "reason": "forced by layout"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/make-children-non-inline-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/make-children-non-inline-expected.txt
index b0437be..9d36555 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/make-children-non-inline-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/make-children-non-inline-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -90,221 +92,171 @@
           "object": "LayoutBlockFlow DIV id='target'",
           "rect": [8, 150, 10, 100],
           "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'I could'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'I could'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'Word,'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Word,'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'about all the stuff'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'about all the stuff'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'after'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'after'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'more words.'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'more words.'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'that comes'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'that comes'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'the break.'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'the break.'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'words,'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'words,'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'write a book'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'write a book'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "LayoutBR BR",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "LayoutBR BR",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "LayoutBR BR",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "LayoutBR BR",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "LayoutBR BR",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "LayoutBR BR",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "LayoutBR BR",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "LayoutBR BR",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutBlockFlow (anonymous)",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'Word,'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutBR BR",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'words,'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutBR BR",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'more words.'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutBR BR",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'I could'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutBR BR",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'write a book'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutBR BR",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='target'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutBlockFlow (anonymous)",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'about all the stuff'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutBR BR",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'that comes'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutBR BR",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'after'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutBR BR",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'the break.'",
+      "reason": "layoutObject insertion"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/multi-layout-one-frame-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/multi-layout-one-frame-expected.txt
index c42de85..75f50dc 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/multi-layout-one-frame-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/multi-layout-one-frame-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -25,33 +27,35 @@
           "object": "LayoutText #text",
           "rect": [11, 11, 43, 13],
           "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ''",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ''",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'PASSED'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'PASSED'",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV id='inner-editor'",
+      "reason": "invalidate paint rectangle"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "full"
+    },
+    {
+      "object": "InlineTextBox 'PASSED'",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='inner-editor'",
+      "reason": "invalidate paint rectangle"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "full"
+    },
+    {
+      "object": "InlineTextBox 'PASSED'",
+      "reason": "full"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/offset-change-wrong-invalidation-with-float-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/offset-change-wrong-invalidation-with-float-expected.txt
index a32dfe2..4a10e0a 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/offset-change-wrong-invalidation-with-float-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/offset-change-wrong-invalidation-with-float-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -25,24 +27,18 @@
           "object": "LayoutListMarker (anonymous)",
           "rect": [71, -158, 7, 18],
           "reason": "bounds change"
-        },
-        {
-          "object": "LayoutListItem LI",
-          "reason": "bounds change"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ],
       "children": [
         {
+          "name": "LayoutListItem (floating) LI id='watches'",
           "position": [31, 42],
           "transformOrigin": [17, 9],
           "bounds": [24, 18],
           "drawsContent": true,
           "children": [
             {
+              "name": "LayoutInline (relative positioned) SPAN id='placeholder'",
               "position": [17, 0],
               "bounds": [0, 18],
               "backfaceVisibility": "hidden"
@@ -50,12 +46,31 @@
           ]
         },
         {
+          "name": "LayoutListItem (relative positioned) (floating) LI id='menu'",
           "position": [31, 42],
           "bounds": [17, 18],
           "drawsContent": true
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (positioned) UL id='submenu'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutListItem LI",
+      "reason": "bounds change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutListMarker (anonymous)",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/outline-continuations-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/outline-continuations-expected.txt
index d2085966..0238235 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/outline-continuations-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/outline-continuations-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -25,41 +27,43 @@
           "object": "LayoutInline SPAN id='outer'",
           "rect": [16, 146, 88, 22],
           "reason": "style change"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox 'CONTENTS'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'CONTENTS'",
-          "reason": "full"
-        },
-        {
-          "object": "LayoutBlockFlow (anonymous)",
-          "reason": "forced by layout"
-        },
-        {
-          "object": "LayoutInline SPAN id='outer'",
-          "reason": "style change"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (anonymous)",
+      "reason": "invalidate paint rectangle"
+    },
+    {
+      "object": "LayoutInline SPAN id='outer'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutBlockFlow (anonymous)",
+      "reason": "invalidate paint rectangle"
+    },
+    {
+      "object": "LayoutInline SPAN id='outer'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutBlockFlow (anonymous)",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutInline SPAN id='outer'",
+      "reason": "style change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/paint-invalidation-with-reparent-across-frame-boundaries-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/paint-invalidation-with-reparent-across-frame-boundaries-expected.txt
index 24b30ea2..03390d0 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/paint-invalidation-with-reparent-across-frame-boundaries-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/paint-invalidation-with-reparent-across-frame-boundaries-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -30,25 +32,27 @@
           "object": "LayoutText #text",
           "rect": [8, 184, 23, 18],
           "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'abc'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'abc'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV id='inner-target'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'abc'",
+      "reason": "layoutObject insertion"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/positioned-document-element-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/positioned-document-element-expected.txt
index 3249a75f..f523e9e 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/positioned-document-element-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/positioned-document-element-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -51,25 +53,39 @@
           "object": "LayoutText #text",
           "rect": [8, 16, 435, 18],
           "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'Tests that the entire viewport is painted with a floated html element.'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Tests that the entire viewport is painted with a floated html element.'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutView #document",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutBlockFlow (positioned) HTML class='changed'",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutBlockFlow BODY",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow P",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox 'Tests that the entire viewport is painted with a floated html element.'",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/quotes-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/quotes-expected.txt
index 8b38293..07acbd9 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/quotes-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/quotes-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -35,57 +37,59 @@
           "object": "LayoutTextFragment (anonymous)",
           "rect": [63, 26, 8, 18],
           "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox ''",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ''",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ''",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'quote 2'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '{'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '}'",
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutInline \u003Cpseudo:after\u003E",
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutInline \u003Cpseudo:before\u003E",
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutInline Q id='q2' class='q-changed'",
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutQuote (anonymous)",
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutQuote (anonymous)",
-          "reason": "style change"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "invalidate paint rectangle"
+    },
+    {
+      "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/fast/repaint/relative-inline-positioned-movement-repaint-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/relative-inline-positioned-movement-repaint-expected.txt
index 4d2408d2..f1791f1 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/relative-inline-positioned-movement-repaint-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/relative-inline-positioned-movement-repaint-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -10,31 +12,24 @@
           "object": "LayoutBlockFlow BODY",
           "rect": [8, 7, 784, 20],
           "reason": "invalidate paint rectangle"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ],
       "children": [
         {
+          "name": "LayoutInline (relative positioned) DIV id='block'",
           "position": [68, 7],
           "bounds": [374, 20],
           "drawsContent": true,
-          "backfaceVisibility": "hidden",
-          "paintInvalidations": [
-            {
-              "object": "InlineFlowBox",
-              "reason": "full"
-            },
-            {
-              "object": "InlineTextBox 'When this layer moves it shouldn't generate a repaint rect.'",
-              "reason": "full"
-            }
-          ]
+          "backfaceVisibility": "hidden"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow BODY",
+      "reason": "invalidate paint rectangle"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/remove-inline-after-layout-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/remove-inline-after-layout-expected.txt
index afdde8b..a849e46 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/remove-inline-after-layout-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/remove-inline-after-layout-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -25,61 +27,27 @@
           "object": "LayoutBlockFlow DIV",
           "rect": [112, 108, 100, 100],
           "reason": "bounds change"
-        },
-        {
-          "object": "InlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'This span should disappear.\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'This span should disappear.'",
-          "reason": "full"
-        },
-        {
-          "object": "LayoutInline SPAN id='target'",
-          "reason": "layoutObject removal"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutText #text",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutInline SPAN id='target'",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutBlockFlow (anonymous)",
+      "reason": "invalidate paint rectangle"
+    },
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/remove-inline-layer-after-layout-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/remove-inline-layer-after-layout-expected.txt
index 16dc2b7..000ae05 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/remove-inline-layer-after-layout-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/remove-inline-layer-after-layout-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -30,57 +32,27 @@
           "object": "LayoutBlockFlow DIV",
           "rect": [112, 108, 100, 100],
           "reason": "bounds change"
-        },
-        {
-          "object": "InlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'This span should disappear.\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'This span should disappear.\n'",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutText #text",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutInline SPAN id='target'",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutBlockFlow (anonymous)",
+      "reason": "invalidate paint rectangle"
+    },
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/repaint-across-writing-mode-boundary-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/repaint-across-writing-mode-boundary-expected.txt
index 156448c..254faff5 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/repaint-across-writing-mode-boundary-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/repaint-across-writing-mode-boundary-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -10,33 +12,39 @@
           "object": "LayoutText #text",
           "rect": [548, 191, 24, 35],
           "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '\u7B2C\u4E00\u6BB5\u843D paragraph 1'",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutBlockFlow BODY",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutBlockFlow DIV class='basic d1 vert'",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutBlockFlow DIV class='lrblock'",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutBlockFlow HTML",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutBlockFlow P",
-          "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/mac/fast/repaint/repaint-during-scroll-with-zoom-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/repaint-during-scroll-with-zoom-expected.txt
index 9d3c3cb..bcd74c9 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/repaint-during-scroll-with-zoom-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/repaint-during-scroll-with-zoom-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -61,25 +63,15 @@
           "object": "LayoutView #document",
           "rect": [237, 300, 15, 15],
           "reason": "scroll"
-        },
-        {
-          "object": "HorizontalScrollbar",
-          "reason": "scroll"
-        },
-        {
-          "object": "InlineTextBox 'scroll me'",
-          "reason": "subtree"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "VerticalScrollbar",
-          "reason": "scroll"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutIFrame (positioned) IFRAME",
+      "reason": "invalidate paint rectangle"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/resize-scrollable-iframe-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/resize-scrollable-iframe-expected.txt
index c99df1b..d22f301 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/resize-scrollable-iframe-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/resize-scrollable-iframe-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -70,33 +72,27 @@
           "object": "LayoutView #document",
           "rect": [93, 193, 15, 15],
           "reason": "scroll"
-        },
-        {
-          "object": "HorizontalScrollbar",
-          "reason": "scroll"
-        },
-        {
-          "object": "InlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "LayoutView #document",
-          "reason": "scroll"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "VerticalScrollbar",
-          "reason": "scroll"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (anonymous)",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutBlockFlow (anonymous)",
+      "reason": "invalidate paint rectangle"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutIFrame IFRAME id='iframe'",
+      "reason": "incremental"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/search-field-cancel-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/search-field-cancel-expected.txt
index 2beb0ca8..fb83687 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/search-field-cancel-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/search-field-cancel-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -15,17 +17,27 @@
           "object": "LayoutText #text",
           "rect": [12, 45, 51, 13],
           "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'some text'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV id='inner-editor'",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'some text'",
+      "reason": "layoutObject insertion"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/select-option-background-color-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/select-option-background-color-expected.txt
index efb52d1..2a600aa 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/select-option-background-color-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/select-option-background-color-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -10,13 +12,19 @@
           "object": "LayoutBlockFlow OPTION id='option'",
           "rect": [1, 35, 12, 15],
           "reason": "style change"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow OPTION id='option'",
+      "reason": "style change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "style change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/selection-after-delete-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/selection-after-delete-expected.txt
index 0895abf9..c890d7a 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/selection-after-delete-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/selection-after-delete-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -30,93 +32,39 @@
           "object": "LayoutBlockFlow DIV id='test'",
           "rect": [38, 74, 3, 20],
           "reason": "invalidate paint rectangle"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox ' '",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ' '",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ' '",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ' '",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ' '",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'hello world hello'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'hello world hello'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'hello world hello'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'world hello world'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'world hello world'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'world hello'",
-          "reason": "full"
-        },
-        {
-          "object": "LayoutBR BR",
-          "reason": "bounds change"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutText #text",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='test'",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='test'",
+      "reason": "invalidate paint rectangle"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutBR BR",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='test'",
+      "reason": "invalidate paint rectangle"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/selection-after-remove-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/selection-after-remove-expected.txt
index 19f3844..92582e4d 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/selection-after-remove-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/selection-after-remove-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -40,133 +42,75 @@
           "object": "LayoutText #text",
           "rect": [39, 75, 36, 18],
           "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox ' '",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ' '",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ' '",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ' '",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ' '",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ' world'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'hello '",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'hello '",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox 'hello world hello'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'hello world hello'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'world hello world'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'world hello world'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'world hello'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'world hello'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'world'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'world'",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutBR BR",
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutBlockFlow BODY",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='test'",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutBlockFlow HTML",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutInline SPAN id='removeme'",
-          "reason": "layoutObject removal"
-        },
-        {
-          "object": "LayoutText #text",
-          "reason": "selection"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutText #text",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutInline SPAN id='removeme'",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutBlockFlow HTML",
+      "reason": "selection"
+    },
+    {
+      "object": "LayoutBlockFlow BODY",
+      "reason": "selection"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='test'",
+      "reason": "selection"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='test'",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='test'",
+      "reason": "invalidate paint rectangle"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "selection"
+    },
+    {
+      "object": "InlineTextBox 'hello '",
+      "reason": "selection"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "selection"
+    },
+    {
+      "object": "InlineTextBox 'world'",
+      "reason": "selection"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox 'world'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBR BR",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/selection-clear-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/selection-clear-expected.txt
index 418f7da..eb2a9d8 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/selection-clear-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/selection-clear-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -30,81 +32,83 @@
           "object": "LayoutText #text",
           "rect": [8, 49, 8, 18],
           "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox 'FAIL: Test did'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'not run'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox '\u00A0'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '\u00A0'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "LayoutBR BR",
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutBR BR",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutBlockFlow (anonymous)",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutBlockFlow BODY",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='firstLine'",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='root'",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutBlockFlow HTML",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutText #text",
-          "reason": "selection"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutText #text",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutBlockFlow HTML",
+      "reason": "selection"
+    },
+    {
+      "object": "LayoutBlockFlow BODY",
+      "reason": "selection"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='root'",
+      "reason": "selection"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='firstLine'",
+      "reason": "selection"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='firstLine'",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "selection"
+    },
+    {
+      "object": "InlineTextBox '\u00A0'",
+      "reason": "selection"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox '\u00A0'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutBlockFlow (anonymous)",
+      "reason": "selection"
+    },
+    {
+      "object": "LayoutBlockFlow (anonymous)",
+      "reason": "bounds change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBR BR",
+      "reason": "selection"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "selection"
+    },
+    {
+      "object": "LayoutBR BR",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/selection-partial-invalidation-between-blocks-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/selection-partial-invalidation-between-blocks-expected.txt
index 82a99fa..8b8dd42 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/selection-partial-invalidation-between-blocks-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/selection-partial-invalidation-between-blocks-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -25,45 +27,63 @@
           "object": "LayoutText #text",
           "rect": [67, 11, 5, 18],
           "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'First cell'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'First cell'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox 'Second cell'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'Second cell'",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutBlockFlow BODY",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutBlockFlow HTML",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutTable TABLE",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutTableCell TD id='firstCell'",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutTableCell TD id='secondCell'",
-          "reason": "selection"
         }
       ]
     }
+  ],
+  "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": "selection"
+    },
+    {
+      "object": "InlineTextBox 'First cell'",
+      "reason": "selection"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "incremental"
+    },
+    {
+      "object": "InlineTextBox 'First cell'",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutTableCell TD id='secondCell'",
+      "reason": "selection"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "selection"
+    },
+    {
+      "object": "InlineTextBox 'Second cell'",
+      "reason": "selection"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "incremental"
+    },
+    {
+      "object": "InlineTextBox 'Second cell'",
+      "reason": "incremental"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/selection-rl-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/selection-rl-expected.txt
index aa17e1183d..484dd55 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/selection-rl-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/selection-rl-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -10,21 +12,27 @@
           "object": "LayoutText #text",
           "rect": [774, 39, 18, 78],
           "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox 'Testing both hit testing'",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutBlockFlow BODY",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutBlockFlow HTML",
-          "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/mac/fast/repaint/stacked-diacritics-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/stacked-diacritics-expected.txt
index d98d4e9..5f5da21 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/stacked-diacritics-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/stacked-diacritics-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -10,17 +12,15 @@
           "object": "LayoutText #text",
           "rect": [18, 153, 132, 47],
           "reason": "layoutObject removal"
-        },
-        {
-          "object": "InlineTextBox '\u1EA6\u1EA4\u1EAA\u1EA8\u1EB0'",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutText #text",
+      "reason": "layoutObject removal"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/subtree-root-skipped-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/subtree-root-skipped-expected.txt
index ca51477..f7b3a83 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/subtree-root-skipped-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/subtree-root-skipped-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -20,21 +22,27 @@
           "object": "LayoutBlockFlow (positioned) DIV id='div'",
           "rect": [8, 288, 10, 20],
           "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox ''",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'PASS'",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV id='inner-editor'",
+      "reason": "invalidate paint rectangle"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "full"
+    },
+    {
+      "object": "InlineTextBox 'PASS'",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='div'",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/table-collapsed-border-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/table-collapsed-border-expected.txt
index 5cdb08a..6d951e20 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/table-collapsed-border-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/table-collapsed-border-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -90,113 +92,123 @@
           "object": "LayoutTable TABLE",
           "rect": [83, 268, 26, 76],
           "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'Lorem'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Lorem'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'dolor'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'ipsum dolor'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'ipsum dolor'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'ipsum dolor'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'sit amet'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'sit amet'",
-          "reason": "full"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "reason": "full"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "reason": "full"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "reason": "full"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "reason": "full"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "reason": "full"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutText #text",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutTableCell TD id='d'",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutTableCell TD id='d2'",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutTableCell TD",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutTableCell TD",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutTableCell TD",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutTableCell TD",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutTableCell TD",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutTableCell TD",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutTable TABLE id='t'",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutTable TABLE",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutTableSection TBODY",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutTableCell TD",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutTableCell TD",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutTable TABLE",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutTableSection TBODY",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutTable TABLE",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutTableCell TD",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutTableCell TD id='d3'",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'ipsum dolor'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutTableCell TD",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "forced by layout"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/table-shrink-row-repaint-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/table-shrink-row-repaint-expected.txt
index 6548d9e..64134274 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/table-shrink-row-repaint-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/table-shrink-row-repaint-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [785, 848],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [785, 848],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -385,105 +387,263 @@
           "object": "LayoutText #text",
           "rect": [13, 141, 8, 18],
           "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox '10'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox '11'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox '12'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox '13'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox '2'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox '3'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox '4'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox '5'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox '6'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox '7'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox '8'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox '9'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutView #document",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutBlockFlow HTML",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutTableCell TD id='resizeMe'",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutTableRow TR",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutTableCell TD",
+      "reason": "bounds change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox '2'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutTableRow TR",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutTableCell TD",
+      "reason": "bounds change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox '3'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutTableRow TR",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutTableCell TD",
+      "reason": "bounds change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox '4'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutTableRow TR",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutTableCell TD",
+      "reason": "bounds change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox '5'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutTableRow TR",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutTableCell TD",
+      "reason": "bounds change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox '6'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutTableRow TR",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutTableCell TD",
+      "reason": "bounds change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox '7'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutTableRow TR",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutTableCell TD",
+      "reason": "bounds change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox '8'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutTableRow TR",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutTableCell TD",
+      "reason": "bounds change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox '9'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutTableRow TR",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutTableCell TD",
+      "reason": "bounds change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox '10'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutTableRow TR",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutTableCell TD",
+      "reason": "bounds change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox '11'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutTableRow TR",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutTableCell TD",
+      "reason": "bounds change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox '12'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutTableRow TR",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutTableCell TD",
+      "reason": "bounds change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox '13'",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/text-append-dirty-lines-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/text-append-dirty-lines-expected.txt
index b86ae9f..39c4b47 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/text-append-dirty-lines-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/text-append-dirty-lines-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -15,53 +17,47 @@
           "object": "LayoutText #text",
           "rect": [8, 42, 775, 126],
           "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Curabitur a velit'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Curabitur a velit.'",
-          "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 'fermentum ut, tortor. Sed rhoncus. Quisque enim metus, luctus tincidunt, vestibulum eu, vestibulum eu, libero. Mauris'",
-          "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 'laoreet feugiat. Phasellus mollis pulvinar mi. Etiam ut neque sed eros egestas laoreet. Vestibulum ullamcorper, nulla non'",
-          "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 'sagittis aliquam nunc. Nullam pharetra molestie eros. Donec tempus purus ut ligula. Phasellus non nisl. Etiam eu 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": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow P id='target'",
+      "reason": "invalidate paint rectangle"
+    },
+    {
+      "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/mac/fast/repaint/text-match-document-change-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/text-match-document-change-expected.txt
index e6eed90..348c859 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/text-match-document-change-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/text-match-document-change-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -35,34 +37,6 @@
           "object": "LayoutView #document",
           "rect": [295, 102, 15, 400],
           "reason": "scroll"
-        },
-        {
-          "object": "InlineTextBox 'After change'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'Find-in-page 'findme', then click here)'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'To be changed: findme (Manual testing:'",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "VerticalScrollbar",
-          "reason": "scroll"
         }
       ]
     }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/text-selection-rect-in-overflow-2-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/text-selection-rect-in-overflow-2-expected.txt
index 18fe316..4d501445 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/text-selection-rect-in-overflow-2-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/text-selection-rect-in-overflow-2-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -10,22 +12,6 @@
           "object": "LayoutText #text",
           "rect": [18, 28, 237, 18],
           "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox 'Should have blue, not gray, highlight'",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutBlockFlow BODY",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='t'",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutBlockFlow HTML",
-          "reason": "selection"
         }
       ]
     }
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/text-selection-rect-in-overflow-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/text-selection-rect-in-overflow-expected.txt
index c783894..3efc9a6f 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/text-selection-rect-in-overflow-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/text-selection-rect-in-overflow-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -10,13 +12,19 @@
           "object": "LayoutText #text",
           "rect": [8, 18, 199, 18],
           "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox 'Should have green background'",
-          "reason": "selection"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutText #text",
+      "reason": "selection"
+    },
+    {
+      "object": "InlineTextBox 'Should have green background'",
+      "reason": "selection"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/transform-layout-repaint-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/transform-layout-repaint-expected.txt
index df33a8b..ba2d4b6 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/transform-layout-repaint-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/transform-layout-repaint-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -15,21 +17,23 @@
           "object": "LayoutText #text",
           "rect": [52, 51, 42, 30],
           "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ''",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'PASS'",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV id='target'",
+      "reason": "invalidate paint rectangle"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "full"
+    },
+    {
+      "object": "InlineTextBox 'PASS'",
+      "reason": "full"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/vertical-align-length1-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/vertical-align-length1-expected.txt
index 7f542e1..2181e9a 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/vertical-align-length1-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/vertical-align-length1-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -35,29 +37,31 @@
           "object": "LayoutBlockFlow DIV class='other'",
           "rect": [0, 100, 20, 20],
           "reason": "bounds change"
-        },
-        {
-          "object": "InlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow BODY",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutBlockFlow BODY",
+      "reason": "invalidate paint rectangle"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutBlockFlow DIV class='other'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV class='other'",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/vertical-align-length2-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/vertical-align-length2-expected.txt
index a5bb72f..d6c9cb2 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/vertical-align-length2-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/vertical-align-length2-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -20,25 +22,19 @@
           "object": "LayoutBlockFlow DIV id='target'",
           "rect": [200, 50, 100, 100],
           "reason": "bounds change"
-        },
-        {
-          "object": "InlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow BODY",
+      "reason": "invalidate paint rectangle"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='target'",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/vertical-align1-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/vertical-align1-expected.txt
index e7a17d9..7133eb1 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/vertical-align1-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/vertical-align1-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -35,29 +37,31 @@
           "object": "LayoutBlockFlow DIV class='other'",
           "rect": [0, 34, 20, 20],
           "reason": "bounds change"
-        },
-        {
-          "object": "InlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow BODY",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutBlockFlow BODY",
+      "reason": "invalidate paint rectangle"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutBlockFlow DIV class='other'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV class='other'",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/window-resize-background-image-fixed-centered-composited-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/window-resize-background-image-fixed-centered-composited-expected.txt
new file mode 100644
index 0000000..276db1195
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/window-resize-background-image-fixed-centered-composited-expected.txt
@@ -0,0 +1,168 @@
+{
+  "name": "Content Root Layer",
+  "bounds": [600, 250],
+  "children": [
+    {
+      "name": "LayoutView #document",
+      "bounds": [600, 250],
+      "drawsContent": true,
+      "paintInvalidations": [
+        {
+          "object": "LayoutView #document",
+          "rect": [0, 250, 600, 250],
+          "reason": "incremental"
+        },
+        {
+          "object": "LayoutBlockFlow HTML",
+          "rect": [0, 0, 600, 8],
+          "reason": "forced by layout"
+        }
+      ]
+    }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutView #document",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutBlockFlow HTML",
+      "reason": "forced by layout"
+    }
+  ]
+}
+{
+  "name": "Content Root Layer",
+  "bounds": [400, 250],
+  "children": [
+    {
+      "name": "LayoutView #document",
+      "bounds": [400, 250],
+      "drawsContent": true,
+      "paintInvalidations": [
+        {
+          "object": "LayoutBlockFlow HTML",
+          "rect": [0, 0, 600, 8],
+          "reason": "forced by layout"
+        },
+        {
+          "object": "LayoutView #document",
+          "rect": [0, 0, 400, 250],
+          "reason": "full"
+        },
+        {
+          "object": "LayoutView #document",
+          "rect": [400, 0, 200, 250],
+          "reason": "incremental"
+        }
+      ]
+    }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutView #document",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutView #document",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutBlockFlow HTML",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutBlockFlow BODY",
+      "reason": "became visible"
+    }
+  ]
+}
+{
+  "name": "Content Root Layer",
+  "bounds": [400, 600],
+  "children": [
+    {
+      "name": "LayoutView #document",
+      "bounds": [400, 600],
+      "drawsContent": true,
+      "paintInvalidations": [
+        {
+          "object": "LayoutView #document",
+          "rect": [0, 0, 400, 600],
+          "reason": "full"
+        },
+        {
+          "object": "LayoutView #document",
+          "rect": [0, 250, 400, 350],
+          "reason": "incremental"
+        },
+        {
+          "object": "LayoutBlockFlow HTML",
+          "rect": [0, 0, 400, 8],
+          "reason": "forced by layout"
+        }
+      ]
+    }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutView #document",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutView #document",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutBlockFlow HTML",
+      "reason": "forced by layout"
+    }
+  ]
+}
+{
+  "name": "Content Root Layer",
+  "bounds": [800, 600],
+  "children": [
+    {
+      "name": "LayoutView #document",
+      "bounds": [800, 600],
+      "drawsContent": true,
+      "paintInvalidations": [
+        {
+          "object": "LayoutView #document",
+          "rect": [0, 0, 800, 600],
+          "reason": "full"
+        },
+        {
+          "object": "LayoutBlockFlow HTML",
+          "rect": [0, 0, 800, 8],
+          "reason": "forced by layout"
+        },
+        {
+          "object": "LayoutView #document",
+          "rect": [400, 0, 400, 600],
+          "reason": "incremental"
+        }
+      ]
+    }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutView #document",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutView #document",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutBlockFlow HTML",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutBlockFlow BODY",
+      "reason": "became visible"
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/window-resize-background-image-fixed-centered-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/window-resize-background-image-fixed-centered-expected.txt
new file mode 100644
index 0000000..d1c60991
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/mac/fast/repaint/window-resize-background-image-fixed-centered-expected.txt
@@ -0,0 +1,181 @@
+{
+  "name": "Content Root Layer",
+  "bounds": [600, 250],
+  "children": [
+    {
+      "name": "LayoutView #document",
+      "bounds": [600, 250],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "paintInvalidations": [
+        {
+          "object": "LayoutView #document",
+          "rect": [0, 250, 600, 250],
+          "reason": "incremental"
+        },
+        {
+          "object": "LayoutView #document",
+          "rect": [0, 0, 600, 250],
+          "reason": "full"
+        },
+        {
+          "object": "LayoutBlockFlow HTML",
+          "rect": [0, 0, 600, 8],
+          "reason": "forced by layout"
+        }
+      ]
+    }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutView #document",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutView #document",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutBlockFlow HTML",
+      "reason": "forced by layout"
+    }
+  ]
+}
+{
+  "name": "Content Root Layer",
+  "bounds": [400, 250],
+  "children": [
+    {
+      "name": "LayoutView #document",
+      "bounds": [400, 250],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "paintInvalidations": [
+        {
+          "object": "LayoutBlockFlow HTML",
+          "rect": [0, 0, 600, 8],
+          "reason": "forced by layout"
+        },
+        {
+          "object": "LayoutView #document",
+          "rect": [0, 0, 400, 250],
+          "reason": "full"
+        },
+        {
+          "object": "LayoutView #document",
+          "rect": [400, 0, 200, 250],
+          "reason": "incremental"
+        }
+      ]
+    }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutView #document",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutView #document",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutBlockFlow HTML",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutBlockFlow BODY",
+      "reason": "became visible"
+    }
+  ]
+}
+{
+  "name": "Content Root Layer",
+  "bounds": [400, 600],
+  "children": [
+    {
+      "name": "LayoutView #document",
+      "bounds": [400, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "paintInvalidations": [
+        {
+          "object": "LayoutView #document",
+          "rect": [0, 0, 400, 600],
+          "reason": "full"
+        },
+        {
+          "object": "LayoutView #document",
+          "rect": [0, 250, 400, 350],
+          "reason": "incremental"
+        },
+        {
+          "object": "LayoutBlockFlow HTML",
+          "rect": [0, 0, 400, 8],
+          "reason": "forced by layout"
+        }
+      ]
+    }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutView #document",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutView #document",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutBlockFlow HTML",
+      "reason": "forced by layout"
+    }
+  ]
+}
+{
+  "name": "Content Root Layer",
+  "bounds": [800, 600],
+  "children": [
+    {
+      "name": "LayoutView #document",
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "paintInvalidations": [
+        {
+          "object": "LayoutView #document",
+          "rect": [0, 0, 800, 600],
+          "reason": "full"
+        },
+        {
+          "object": "LayoutBlockFlow HTML",
+          "rect": [0, 0, 800, 8],
+          "reason": "forced by layout"
+        },
+        {
+          "object": "LayoutView #document",
+          "rect": [400, 0, 400, 600],
+          "reason": "incremental"
+        }
+      ]
+    }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutView #document",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutView #document",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutBlockFlow HTML",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutBlockFlow BODY",
+      "reason": "became visible"
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/table/border-collapsing/cached-change-cell-sl-border-color-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/fast/table/border-collapsing/cached-change-cell-sl-border-color-expected.txt
index 968080c..154c844 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/fast/table/border-collapsing/cached-change-cell-sl-border-color-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/fast/table/border-collapsing/cached-change-cell-sl-border-color-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -15,25 +17,27 @@
           "object": "LayoutText #text",
           "rect": [90, 30, 12, 18],
           "reason": "layoutObject removal"
-        },
-        {
-          "object": "InlineTextBox 'A'",
-          "reason": "full"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "reason": "full"
-        },
-        {
-          "object": "LayoutTableCell TD id='foo'",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutText #text",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutTableCell TD id='foo'",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutTableCell TD",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutTableCell TD id='foo'",
+      "reason": "style change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/table/resize-table-repaint-percent-size-cell-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/fast/table/resize-table-repaint-percent-size-cell-expected.txt
index e8258cc..f90fcf4 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/fast/table/resize-table-repaint-percent-size-cell-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/fast/table/resize-table-repaint-percent-size-cell-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -60,41 +62,55 @@
           "object": "LayoutText #text",
           "rect": [3, 67, 46, 18],
           "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'ROW1'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'ROW1'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'ROW2'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'ROW2'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutTable (positioned) TABLE id='table'",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutTableRow TR",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutTableCell TD",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox 'ROW1'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutTableRow TR",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutTableCell TD",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox 'ROW2'",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/table/resize-table-repaint-vertical-align-cell-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/fast/table/resize-table-repaint-vertical-align-cell-expected.txt
index f1f52a9..d013937 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/fast/table/resize-table-repaint-vertical-align-cell-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/fast/table/resize-table-repaint-vertical-align-cell-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -30,25 +32,35 @@
           "object": "LayoutText #text",
           "rect": [3, 91, 63, 18],
           "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'MIDDLE'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'MIDDLE'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutTable (positioned) TABLE id='table'",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutTableRow TR",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutTableCell TD",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox 'MIDDLE'",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/mac/fast/table/resize-table-row-repaint-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/fast/table/resize-table-row-repaint-expected.txt
index 5c433b4..bac7f33 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/fast/table/resize-table-row-repaint-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/fast/table/resize-table-row-repaint-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -25,25 +27,31 @@
           "object": "LayoutText #text",
           "rect": [3, 143, 63, 18],
           "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'MIDDLE'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'MIDDLE'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutTableRow TR id='row'",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutTableCell TD",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox 'MIDDLE'",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/caret-with-composited-scroll-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/caret-with-composited-scroll-expected.txt
index 07d0f325..d84ad6de 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/caret-with-composited-scroll-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/caret-with-composited-scroll-expected.txt
@@ -1,22 +1,27 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow DIV id='scroller'",
           "position": [8, 44],
           "bounds": [100, 100],
           "shouldFlattenTransform": false,
           "drawsContent": true,
           "children": [
             {
+              "name": "Scrolling Layer",
               "bounds": [100, 100],
               "shouldFlattenTransform": false,
               "children": [
                 {
+                  "name": "Scrolling Contents Layer",
                   "bounds": [205, 1019],
                   "drawsContent": true,
                   "paintInvalidations": [
@@ -40,23 +45,20 @@
               ]
             },
             {
+              "name": "Overflow Controls Host Layer",
               "bounds": [100, 100],
               "children": [
                 {
+                  "name": "Horizontal Scrollbar Layer",
                   "position": [0, 100],
                   "bounds": [100, 0],
                   "drawsContent": true
                 },
                 {
+                  "name": "Vertical Scrollbar Layer",
                   "position": [100, 0],
                   "bounds": [0, 100],
-                  "drawsContent": true,
-                  "paintInvalidations": [
-                    {
-                      "object": "Vertical Scrollbar Layer",
-                      "reason": "full"
-                    }
-                  ]
+                  "drawsContent": true
                 }
               ]
             }
@@ -64,6 +66,20 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutTextControl INPUT id='text'",
+      "reason": "subtree"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='inner-editor'",
+      "reason": "subtree"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='inner-editor'",
+      "reason": "invalidate paint rectangle"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/invalidate-box-shadow-currentColor-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/invalidate-box-shadow-currentColor-expected.txt
index 7ebaa1cb..aa465128 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/invalidate-box-shadow-currentColor-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/invalidate-box-shadow-currentColor-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -15,17 +17,27 @@
           "object": "LayoutText #text",
           "rect": [8, 8, 29, 18],
           "reason": "style change"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox 'Text'",
-          "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/paint/invalidation/non-text-link-invalidation-optimization-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/non-text-link-invalidation-optimization-expected.txt
index 52ec04c..ea4bd11 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/non-text-link-invalidation-optimization-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/non-text-link-invalidation-optimization-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -35,33 +37,59 @@
           "object": "LayoutText #text",
           "rect": [326, 8, 25, 18],
           "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox ' images.'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox ' no '",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox ' passes if '",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox ' text is invalidated and '",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox 'This test '",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox 'only'",
-          "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/mac/paint/selection/selection-within-composited-scroller-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/selection/selection-within-composited-scroller-expected.txt
index 49e82ce..254107d 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/paint/selection/selection-within-composited-scroller-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/paint/selection/selection-within-composited-scroller-expected.txt
@@ -1,44 +1,29 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow BODY",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutBlockFlow HTML",
-          "reason": "selection"
-        }
-      ],
       "children": [
         {
+          "name": "LayoutBlockFlow DIV id='scroller'",
           "position": [8, 8],
           "bounds": [200, 200],
           "contentsOpaque": true,
           "shouldFlattenTransform": false,
           "drawsContent": true,
           "backgroundColor": "#D3D3D3",
-          "paintInvalidations": [
-            {
-              "object": "InlineTextBox 'test'",
-              "reason": "selection"
-            },
-            {
-              "object": "LayoutBlockFlow DIV id='scroller'",
-              "reason": "selection"
-            }
-          ],
           "children": [
             {
+              "name": "Scrolling Layer",
               "bounds": [185, 185],
               "shouldFlattenTransform": false,
               "children": [
                 {
+                  "name": "Scrolling Contents Layer",
                   "bounds": [200, 1620],
                   "drawsContent": true,
                   "paintInvalidations": [
@@ -46,35 +31,27 @@
                       "object": "LayoutText #text",
                       "rect": [0, 610, 23, 18],
                       "reason": "selection"
-                    },
-                    {
-                      "object": "InlineTextBox 'test'",
-                      "reason": "selection"
-                    },
-                    {
-                      "object": "LayoutBlockFlow DIV id='scroller'",
-                      "reason": "selection"
-                    },
-                    {
-                      "object": "LayoutBlockFlow DIV id='target'",
-                      "reason": "selection"
                     }
                   ]
                 }
               ]
             },
             {
+              "name": "Overflow Controls Host Layer",
               "bounds": [200, 200],
               "children": [
                 {
+                  "name": "Horizontal Scrollbar Layer",
                   "position": [0, 185],
                   "bounds": [185, 15]
                 },
                 {
+                  "name": "Vertical Scrollbar Layer",
                   "position": [185, 0],
                   "bounds": [15, 185]
                 },
                 {
+                  "name": "Scroll Corner Layer",
                   "position": [185, 185],
                   "bounds": [15, 15],
                   "drawsContent": true
@@ -85,6 +62,32 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow HTML",
+      "reason": "selection"
+    },
+    {
+      "object": "LayoutBlockFlow BODY",
+      "reason": "selection"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='scroller'",
+      "reason": "selection"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='target'",
+      "reason": "selection"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "selection"
+    },
+    {
+      "object": "InlineTextBox 'test'",
+      "reason": "selection"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/mac/svg/carto.net/tabgroup-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/svg/carto.net/tabgroup-expected.txt
index ef67f42..4567850 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/svg/carto.net/tabgroup-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/svg/carto.net/tabgroup-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -805,717 +807,1195 @@
           "object": "LayoutSVGText text",
           "rect": [181, 128, 14, 36],
           "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox '& Info'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox '& Info'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox ''",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Account'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Account'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'Biography'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Biography'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'Biography'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'Biography'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'Biography'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'Browser'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Browser'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Browser'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'Click on the second tab to see oversize content'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'Download'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Download'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'Events'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Events'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'Events'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'Events'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'Events'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'Folder'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Folder'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'Geodata'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Geodata'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Geodata'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'Help'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Help'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'Portrait'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'Portrait'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'Portrait'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'Portrait'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'Relations'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Relations'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Relations'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'Relations'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'Relations'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'Relations'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'This is a tabgroup with triangular tab corners'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'This is oversize content that can be'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'Your'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Your'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'and a double line tab. (use \"\\n\" as a line separator)'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'hidden on tab-change'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'hidden on tab-change'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "LayoutSVGContainer g",
-          "reason": "layoutObject removal"
-        },
-        {
-          "object": "LayoutSVGContainer g",
-          "reason": "layoutObject removal"
-        },
-        {
-          "object": "LayoutSVGContainer g",
-          "reason": "layoutObject removal"
-        },
-        {
-          "object": "LayoutSVGContainer g",
-          "reason": "layoutObject removal"
-        },
-        {
-          "object": "LayoutSVGContainer g",
-          "reason": "layoutObject removal"
-        },
-        {
-          "object": "LayoutSVGContainer g id='tabgroupRectRound__0_content'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "LayoutSVGContainer g id='tabgroupRectRound__0_content'",
-          "reason": "layoutObject removal"
-        },
-        {
-          "object": "LayoutSVGContainer g id='tabgroupRectRound__1_content'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "LayoutSVGContainer g id='tabgroupRectRound__2_content'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "LayoutSVGContainer g id='tabgroupRectRound__3_content'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "LayoutSVGContainer g id='tabgroupRectTriangle__0_content'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "LayoutSVGContainer g id='tabgroupRectTriangle__1_content'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "LayoutSVGContainer g id='tabgroupRectTriangle__2_content'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "LayoutSVGContainer g id='tabgroupRectTriangle__2_content'",
-          "reason": "layoutObject removal"
-        },
-        {
-          "object": "LayoutSVGContainer g id='tabgroupRectTriangle__3_content'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "LayoutSVGContainer g id='tabgroupRect__0_content'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "LayoutSVGContainer g id='tabgroupRect__1_content'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "LayoutSVGContainer g id='tabgroupRect__1_content'",
-          "reason": "layoutObject removal"
-        },
-        {
-          "object": "LayoutSVGContainer g id='tabgroupRect__2_content'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "LayoutSVGContainer g id='tabgroupRect__3_content'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "LayoutSVGContainer g id='tabgroupRound__0_content'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "LayoutSVGContainer g id='tabgroupRound__1_content'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "LayoutSVGContainer g id='tabgroupRound__1_content'",
-          "reason": "layoutObject removal"
-        },
-        {
-          "object": "LayoutSVGContainer g id='tabgroupRound__2_content'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "LayoutSVGContainer g id='tabgroupRound__3_content'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "LayoutSVGHiddenContainer g id='oversizeContent'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "LayoutSVGHiddenContainer g id='oversizeContent'",
-          "reason": "layoutObject removal"
-        },
-        {
-          "object": "LayoutSVGHiddenContainer g id='tabgroupTriangle__0_content'",
-          "reason": "layoutObject removal"
-        },
-        {
-          "object": "LayoutSVGHiddenContainer g id='tabgroupTriangle__1_content'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "LayoutSVGHiddenContainer g id='tabgroupTriangle__2_content'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "LayoutSVGHiddenContainer g id='tabgroupTriangle__3_content'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "reason": "layoutObject removal"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "reason": "layoutObject removal"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "reason": "layoutObject removal"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "reason": "layoutObject removal"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "reason": "layoutObject removal"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "reason": "layoutObject removal"
-        },
-        {
-          "object": "LayoutSVGPath path",
-          "reason": "layoutObject removal"
-        },
-        {
-          "object": "LayoutSVGPath path",
-          "reason": "layoutObject removal"
-        },
-        {
-          "object": "LayoutSVGPath path",
-          "reason": "layoutObject removal"
-        },
-        {
-          "object": "LayoutSVGPath path",
-          "reason": "layoutObject removal"
-        },
-        {
-          "object": "LayoutSVGPath path",
-          "reason": "layoutObject removal"
-        },
-        {
-          "object": "LayoutSVGPath path id='tabgroupRectRound__0'",
-          "reason": "layoutObject removal"
-        },
-        {
-          "object": "LayoutSVGPath path id='tabgroupRectTriangle__2'",
-          "reason": "layoutObject removal"
-        },
-        {
-          "object": "LayoutSVGPath path id='tabgroupRect__1'",
-          "reason": "layoutObject removal"
-        },
-        {
-          "object": "LayoutSVGPath path id='tabgroupRound__1'",
-          "reason": "layoutObject removal"
-        },
-        {
-          "object": "LayoutSVGPath path id='tabgroupTriangle__0'",
-          "reason": "layoutObject removal"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "reason": "layoutObject removal"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "reason": "layoutObject removal"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "reason": "layoutObject removal"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "reason": "layoutObject removal"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "reason": "layoutObject removal"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "reason": "layoutObject removal"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "reason": "layoutObject removal"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "reason": "layoutObject removal"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "reason": "layoutObject removal"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "reason": "layoutObject removal"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "reason": "layoutObject removal"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutSVGPath path",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGPath path id='tabgroupRect__1'",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGTSpan tspan",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGText text",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGContainer g id='tabgroupRect__1_content'",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGContainer g",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGPath path",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGPath path id='tabgroupTriangle__0'",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGTSpan tspan",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGTSpan tspan",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGText text",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGHiddenContainer g id='tabgroupTriangle__0_content'",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGContainer g",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGPath path",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGPath path id='tabgroupRectTriangle__2'",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGTSpan tspan",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGText text",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGContainer g id='tabgroupRectTriangle__2_content'",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGContainer g",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGPath path",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGPath path id='tabgroupRound__1'",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGTSpan tspan",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGText text",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGContainer g id='tabgroupRound__1_content'",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGContainer g",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGPath path",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGPath path id='tabgroupRectRound__0'",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGTSpan tspan",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGText text",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGContainer g id='tabgroupRectRound__0_content'",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGContainer g",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGRect rect",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGRect rect",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGRect rect",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGTSpan tspan",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGText text",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGHiddenContainer g id='oversizeContent'",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGRoot svg",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGContainer g id='tabgroupRect'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGContainer g",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer g",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGPath path",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGPath path id='tabgroupRect__0'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGText text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGTSpan tspan",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'Biography'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer g id='tabgroupRect__0_content'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer g",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGPath path",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGPath path id='tabgroupRect__2'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGText text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGTSpan tspan",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'Events'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer g id='tabgroupRect__2_content'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer g",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGPath path",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGPath path id='tabgroupRect__3'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGText text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGTSpan tspan",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'Portrait'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer g id='tabgroupRect__3_content'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer g",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGPath path",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGPath path id='tabgroupRect__1'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGText text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGTSpan tspan",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'Relations'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer g id='tabgroupRect__1_content'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer g id='tabgroupTriangle'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGContainer g",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer g",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGPath path",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGPath path id='tabgroupTriangle__1'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGText text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGTSpan tspan",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'Download'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGTSpan tspan",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'Folder'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGHiddenContainer g id='tabgroupTriangle__1_content'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGHiddenContainer g id='oversizeContent'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGRect rect",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGRect rect",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGRect rect",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGText text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'This is oversize content that can be'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGTSpan tspan",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'hidden on tab-change'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer g",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGPath path",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGPath path id='tabgroupTriangle__2'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGText text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGTSpan tspan",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'Your'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGTSpan tspan",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'Account'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGHiddenContainer g id='tabgroupTriangle__2_content'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer g",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGPath path",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGPath path id='tabgroupTriangle__3'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGText text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGTSpan tspan",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'Help'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGTSpan tspan",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox '& Info'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGHiddenContainer g id='tabgroupTriangle__3_content'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer g",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGPath path",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGPath path id='tabgroupTriangle__0'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGText text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGTSpan tspan",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'Geodata'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGTSpan tspan",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'Browser'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer g id='tabgroupTriangle__0_content'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGText text id='contentTabGroupTriangle0'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'This is a tabgroup with triangular tab corners'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGTSpan tspan",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'and a double line tab. (use \"\\n\" as a line separator)'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGTSpan tspan",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'Click on the second tab to see oversize content'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer g id='tabgroupRectTriangle'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGContainer g",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer g",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGPath path",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGPath path id='tabgroupRectTriangle__0'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGText text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGTSpan tspan",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'Biography'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer g id='tabgroupRectTriangle__0_content'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer g",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGPath path",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGPath path id='tabgroupRectTriangle__1'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGText text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGTSpan tspan",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'Relations'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer g id='tabgroupRectTriangle__1_content'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer g",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGPath path",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGPath path id='tabgroupRectTriangle__3'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGText text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGTSpan tspan",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'Portrait'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer g id='tabgroupRectTriangle__3_content'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer g",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGPath path",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGPath path id='tabgroupRectTriangle__2'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGText text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGTSpan tspan",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'Events'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer g id='tabgroupRectTriangle__2_content'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer g id='tabgroupRound'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGContainer g",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer g",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGPath path",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGPath path id='tabgroupRound__0'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGText text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGTSpan tspan",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'Biography'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer g id='tabgroupRound__0_content'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer g",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGPath path",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGPath path id='tabgroupRound__2'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGText text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGTSpan tspan",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'Events'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer g id='tabgroupRound__2_content'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer g",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGPath path",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGPath path id='tabgroupRound__3'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGText text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGTSpan tspan",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'Portrait'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer g id='tabgroupRound__3_content'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer g",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGPath path",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGPath path id='tabgroupRound__1'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGText text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGTSpan tspan",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'Relations'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer g id='tabgroupRound__1_content'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer g id='tabgroupRectRound'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGContainer g",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer g",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGPath path",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGPath path id='tabgroupRectRound__1'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGText text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGTSpan tspan",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'Relations'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer g id='tabgroupRectRound__1_content'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer g",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGPath path",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGPath path id='tabgroupRectRound__2'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGText text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGTSpan tspan",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'Events'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer g id='tabgroupRectRound__2_content'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer g",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGPath path",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGPath path id='tabgroupRectRound__3'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGText text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGTSpan tspan",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'Portrait'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer g id='tabgroupRectRound__3_content'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer g",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGPath path",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGPath path id='tabgroupRectRound__0'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGText text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGTSpan tspan",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'Biography'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer g id='tabgroupRectRound__0_content'",
+      "reason": "layoutObject insertion"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/mac/svg/carto.net/window-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/svg/carto.net/window-expected.txt
index 6de75cbe..0382f9c5 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/svg/carto.net/window-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/svg/carto.net/window-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -1020,269 +1022,1035 @@
           "object": "LayoutSVGPath line",
           "rect": [0, 30, 5, 2],
           "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox ''Resize Navigation Window' for a'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'Big Window'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'Callback function is active'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'Changing a colour changes background'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'Click on button'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'Colour Picker'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'Navigation Window'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'Nested middlesize Window'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'Note that this window also'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'Small Window'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'Status Window'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'Statusbar'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'This is a big movable window'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'This is a minimal window'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'This is a none-moveable'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'This window contains other windows'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'This window has a callback'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'This window should'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'and alerting window'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'contain navigation tools'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'events'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'features a window decoration'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'function indicating mouse'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'it is also not moveable'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'movements in the statusbar'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'none-closeable status'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'random resize of this Window'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'window'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'without title and status bar.'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "LayoutSVGContainer g",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "LayoutSVGContainer g",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "LayoutSVGContainer g",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "LayoutSVGContainer g id='windowTitlebarGroupminimalWindow'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "LayoutSVGHiddenContainer symbol id='closeButton'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "LayoutSVGHiddenContainer symbol id='maximizeButton'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "LayoutSVGHiddenContainer symbol id='minimizeButton'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutSVGHiddenContainer symbol id='closeButton'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGRect rect",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGPath line",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGPath line",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGHiddenContainer symbol id='maximizeButton'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGRect rect",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGHiddenContainer symbol id='minimizeButton'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGRect rect",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGPath line",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer g id='Windows'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer g id='navWindow'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer g id='windowMainGroupnavWindow'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGRect rect",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer g",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGText text id='textNavWindow'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'This window should'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGTSpan tspan",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'contain navigation tools'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGTSpan tspan",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'Click on button'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGTSpan tspan",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox ''Resize Navigation Window' for a'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGTSpan tspan",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'random resize of this Window'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGTSpan tspan",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'Note that this window also'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGTSpan tspan",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'features a window decoration'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGRect rect",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGText text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'Statusbar'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer g id='windowTitlebarGroupnavWindow'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer use id='closeButtonnavWindow'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGViewportContainer svg id='closeButton'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGRect rect",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGPath line",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGPath line",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer use id='maximizeButtonnavWindow'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGViewportContainer svg id='maximizeButton'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGRect rect",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer use id='minimizeButtonnavWindow'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGViewportContainer svg id='minimizeButton'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGRect rect",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGPath line",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer g id='bigWindow'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer g id='windowMainGroupbigWindow'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGRect rect",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer g",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGRect rect",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGText text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'This is a big movable window'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer g id='nestedWindow'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer g id='windowMainGroupnestedWindow'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGRect rect",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer g",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGRect rect",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGText text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'This window contains other windows'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer g id='colourPickerWindow'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer g id='windowMainGroupcolourPickerWindow'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGRect rect",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer g",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGRect rect",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGText text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'Changing a colour changes background'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer g id='windowTitlebarGroupcolourPickerWindow'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGRect rect id='titleBarcolourPickerWindow'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGText text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'Colour Picker'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer use id='closeButtoncolourPickerWindow'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGViewportContainer svg id='closeButton'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGRect rect",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGPath line",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGPath line",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer use id='maximizeButtoncolourPickerWindow'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGViewportContainer svg id='maximizeButton'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGRect rect",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer use id='minimizeButtoncolourPickerWindow'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGViewportContainer svg id='minimizeButton'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGRect rect",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGPath line",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer g id='statusWindow'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer g id='windowMainGroupstatusWindow'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGRect rect",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer g",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGText text id='textStatusWindow'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'This is a none-moveable'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGTSpan tspan",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'none-closeable status'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGTSpan tspan",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'window'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer g id='windowTitlebarGroupstatusWindow'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGRect rect id='titleBarstatusWindow'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGText text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'Status Window'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer use id='maximizeButtonstatusWindow'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGViewportContainer svg id='maximizeButton'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGRect rect",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer use id='minimizeButtonstatusWindow'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGViewportContainer svg id='minimizeButton'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGRect rect",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGPath line",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer g id='windowTitlebarGroupnestedWindow'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGRect rect id='titleBarnestedWindow'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGText text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'Nested middlesize Window'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer use id='closeButtonnestedWindow'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGViewportContainer svg id='closeButton'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGRect rect",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGPath line",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGPath line",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer use id='maximizeButtonnestedWindow'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGViewportContainer svg id='maximizeButton'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGRect rect",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer use id='minimizeButtonnestedWindow'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGViewportContainer svg id='minimizeButton'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGRect rect",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGPath line",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer g id='smallWindow'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer g id='windowMainGroupsmallWindow'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGRect rect",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer g",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGText text id='textSmallWindow'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'This window has a callback'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGTSpan tspan",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'function indicating mouse'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGTSpan tspan",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'movements in the statusbar'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGTSpan tspan",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'and alerting window'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGTSpan tspan",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'events'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGRect rect",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGText text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'Callback function is active'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer g id='windowTitlebarGroupsmallWindow'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGRect rect id='titleBarsmallWindow'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGText text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'Small Window'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer use id='closeButtonsmallWindow'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGViewportContainer svg id='closeButton'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGRect rect",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGPath line",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGPath line",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer use id='maximizeButtonsmallWindow'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGViewportContainer svg id='maximizeButton'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGRect rect",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer use id='minimizeButtonsmallWindow'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGViewportContainer svg id='minimizeButton'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGRect rect",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGPath line",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer g id='minimalWindow'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer g id='windowMainGroupminimalWindow'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGRect rect",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer g",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGText text id='textMinimalWindow'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'This is a minimal window'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGTSpan tspan",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'without title and status bar.'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGTSpan tspan",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'it is also not moveable'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer g id='windowTitlebarGroupminimalWindow'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer g id='windowTitlebarGroupbigWindow'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGRect rect id='titleBarbigWindow'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGText text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'Big Window'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer use id='closeButtonbigWindow'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGViewportContainer svg id='closeButton'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGRect rect",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGPath line",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGPath line",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer use id='maximizeButtonbigWindow'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGViewportContainer svg id='maximizeButton'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGRect rect",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer use id='minimizeButtonbigWindow'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGViewportContainer svg id='minimizeButton'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGRect rect",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGPath line",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer g id='Windows'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGContainer g id='navWindow'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGContainer g id='windowTitlebarGroupnavWindow'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGContainer g id='decoGroupnavWindow'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGRect rect",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGRect rect id='decoGroupMinimizednavWindow'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGText text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'Navigation Window'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer use id='closeButtonnavWindow'",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutSVGViewportContainer svg id='closeButton'",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutSVGRect rect",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGPath line",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGPath line",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGContainer use id='maximizeButtonnavWindow'",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutSVGViewportContainer svg id='maximizeButton'",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutSVGRect rect",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGContainer use id='minimizeButtonnavWindow'",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutSVGViewportContainer svg id='minimizeButton'",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutSVGRect rect",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGPath line",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/mac/svg/custom/js-late-clipPath-and-object-creation-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/svg/custom/js-late-clipPath-and-object-creation-expected.txt
index a3aa99c..b456e16 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/svg/custom/js-late-clipPath-and-object-creation-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/svg/custom/js-late-clipPath-and-object-creation-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -50,37 +52,67 @@
           "object": "LayoutSVGPath path",
           "rect": [0, 0, 334, 500],
           "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'Clipped. INVISIBLE.'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'Clipped. INVISIBLE.'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Clipped. INVISIBLE.'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "LayoutSVGResourceClipper clipPath id='dynClip'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutSVGRoot svg id='svg-root'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGContainer g id='content'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGText text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'Clipped. INVISIBLE.'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGRoot svg id='svg-root'",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutSVGContainer g id='content'",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutSVGText text",
+      "reason": "style change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "incremental"
+    },
+    {
+      "object": "InlineTextBox 'Clipped. INVISIBLE.'",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutSVGResourceClipper clipPath id='dynClip'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGPath path",
+      "reason": "layoutObject insertion"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/mac/svg/custom/js-late-clipPath-creation-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/svg/custom/js-late-clipPath-creation-expected.txt
index 481e35d5..60aa603 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/svg/custom/js-late-clipPath-creation-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/svg/custom/js-late-clipPath-creation-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -30,29 +32,43 @@
           "object": "LayoutSVGPath path",
           "rect": [0, 0, 334, 500],
           "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'Clipped. INVISIBLE.'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'Clipped. INVISIBLE.'",
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGResourceClipper clipPath id='dynClip'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutSVGRoot svg id='svg-root'",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutSVGContainer g id='content'",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutSVGText text",
+      "reason": "style change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "incremental"
+    },
+    {
+      "object": "InlineTextBox 'Clipped. INVISIBLE.'",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutSVGResourceClipper clipPath id='dynClip'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGPath path",
+      "reason": "layoutObject insertion"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/mac/svg/custom/js-late-gradient-and-object-creation-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/svg/custom/js-late-gradient-and-object-creation-expected.txt
index c0df99a..24a843b 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/svg/custom/js-late-gradient-and-object-creation-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/svg/custom/js-late-gradient-and-object-creation-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -45,53 +47,87 @@
           "object": "LayoutSVGText text",
           "rect": [0, 14, 443, 131],
           "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'Gradient on fill'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'Gradient on fill/stroke'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'Gradient on stroke'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "LayoutSVGGradientStop stop",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "LayoutSVGGradientStop stop",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "LayoutSVGGradientStop stop",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "LayoutSVGResourceLinearGradient linearGradient id='fillLinearGradient'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "LayoutSVGResourceLinearGradient linearGradient id='strokeLinearGradient'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutSVGResourceLinearGradient linearGradient id='fillLinearGradient'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGGradientStop stop",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGGradientStop stop",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGResourceLinearGradient linearGradient id='strokeLinearGradient'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGGradientStop stop",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGRoot svg id='svg-root'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGContainer g id='content'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGText text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'Gradient on fill'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGText text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'Gradient on stroke'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGText text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'Gradient on fill/stroke'",
+      "reason": "layoutObject insertion"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/mac/svg/custom/js-late-gradient-creation-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/svg/custom/js-late-gradient-creation-expected.txt
index 06d4bc0..a08c64a00 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/svg/custom/js-late-gradient-creation-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/svg/custom/js-late-gradient-creation-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -10,33 +12,31 @@
           "object": "LayoutSVGText text",
           "rect": [33, 22, 693, 196],
           "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox 'Gradient on fill'",
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGGradientStop stop",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "LayoutSVGGradientStop stop",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "LayoutSVGResourceLinearGradient linearGradient id='dynGrad'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutSVGText text",
+      "reason": "style change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutSVGResourceLinearGradient linearGradient id='dynGrad'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGGradientStop stop",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGGradientStop stop",
+      "reason": "layoutObject insertion"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/mac/svg/custom/js-late-pattern-and-object-creation-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/svg/custom/js-late-pattern-and-object-creation-expected.txt
index 6b5a392..e6801752 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/svg/custom/js-late-pattern-and-object-creation-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/svg/custom/js-late-pattern-and-object-creation-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -65,41 +67,91 @@
           "object": "LayoutSVGRect rect",
           "rect": [8, 8, 17, 17],
           "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'Pattern on fill'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'Pattern on fill/stroke'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'Pattern on stroke'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "LayoutSVGResourcePattern pattern id='fillPattern'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "LayoutSVGResourcePattern pattern id='strokePattern'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutSVGResourcePattern pattern id='fillPattern'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGRect rect",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGRect rect",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGResourcePattern pattern id='strokePattern'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGRect rect",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGRect rect",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGRoot svg id='svg-root'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGContainer g id='content'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGText text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'Pattern on fill'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGText text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'Pattern on stroke'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGText text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'Pattern on fill/stroke'",
+      "reason": "layoutObject insertion"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/mac/svg/custom/js-late-pattern-creation-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/svg/custom/js-late-pattern-creation-expected.txt
index 268ac8d..85a485b 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/svg/custom/js-late-pattern-creation-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/svg/custom/js-late-pattern-creation-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -20,25 +22,31 @@
           "object": "LayoutSVGRect rect",
           "rect": [8, 12, 17, 26],
           "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'Pattern on fill'",
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGResourcePattern pattern id='dynPattern'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutSVGText text",
+      "reason": "style change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutSVGResourcePattern pattern id='dynPattern'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGRect rect",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGRect rect",
+      "reason": "layoutObject insertion"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/mac/svg/custom/scrolling-embedded-svg-file-image-repaint-problem-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/svg/custom/scrolling-embedded-svg-file-image-repaint-problem-expected.txt
index 7059d09..e3bfa76c 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/svg/custom/scrolling-embedded-svg-file-image-repaint-problem-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/svg/custom/scrolling-embedded-svg-file-image-repaint-problem-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [1026, 1016],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [1026, 1016],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -15,37 +17,23 @@
           "object": "LayoutInline A",
           "rect": [378, 987, 55, 29],
           "reason": "style change"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'index'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'pservers-pattern-01-b \u2190'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox '\u2192 script-handle-01-b'",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow P",
+      "reason": "invalidate paint rectangle"
+    },
+    {
+      "object": "LayoutInline A",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "style change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/mac/svg/custom/text-dom-removal-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/svg/custom/text-dom-removal-expected.txt
index 163dfe7..6518288 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/svg/custom/text-dom-removal-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/svg/custom/text-dom-removal-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -25,17 +27,27 @@
           "object": "LayoutSVGRect rect",
           "rect": [0, 0, 20, 20],
           "reason": "layoutObject removal"
-        },
-        {
-          "object": "InlineTextBox ''",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutSVGRect rect",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGText text",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGContainer g id='objectsToRemove'",
+      "reason": "became invisible"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/mac/svg/custom/text-repaint-including-stroke-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/svg/custom/text-repaint-including-stroke-expected.txt
index 7f235adfa..db7621d 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/svg/custom/text-repaint-including-stroke-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/svg/custom/text-repaint-including-stroke-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -35,25 +37,31 @@
           "object": "LayoutSVGText text id='bounce'",
           "rect": [30, 0, 404, 60],
           "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Repaint me!'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Repaint me!'",
-          "reason": "style change"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutSVGRoot svg",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGText text id='bounce'",
+      "reason": "full"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox 'Repaint me!'",
+      "reason": "style change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/mac/svg/custom/text-xy-updates-SVGList-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/svg/custom/text-xy-updates-SVGList-expected.txt
index f807ec7..3057200 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/svg/custom/text-xy-updates-SVGList-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/svg/custom/text-xy-updates-SVGList-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [808, 620],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [808, 620],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -35,25 +37,31 @@
           "object": "LayoutSVGText text id='ttt'",
           "rect": [18, 194, 170, 18],
           "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Passes, if text is at 200x20'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Passes, if text is at 200x20'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutSVGRoot svg:svg",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGText text id='ttt'",
+      "reason": "full"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox 'Passes, if text is at 200x20'",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/mac/svg/custom/use-clipped-hit-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/svg/custom/use-clipped-hit-expected.txt
index a205d52..b8d0d00 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/svg/custom/use-clipped-hit-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/svg/custom/use-clipped-hit-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -25,25 +27,35 @@
           "object": "LayoutSVGText text id='status'",
           "rect": [89, 115, 3, 20],
           "reason": "invalidate paint rectangle"
-        },
-        {
-          "object": "InlineTextBox ''",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Passed'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutSVGText text id='status'",
+      "reason": "invalidate paint rectangle"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGText text id='status'",
+      "reason": "full"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'Passed'",
+      "reason": "layoutObject insertion"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/mac/svg/custom/use-detach-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/svg/custom/use-detach-expected.txt
index 66840681..57d13eb 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/svg/custom/use-detach-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/svg/custom/use-detach-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -170,69 +172,179 @@
           "object": "LayoutSVGEllipse circle id='use_circle'",
           "rect": [218, 94, 28, 28],
           "reason": "layoutObject removal"
-        },
-        {
-          "object": "InlineTextBox ''",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ''",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ''",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'use'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'use'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'use'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "LayoutSVGHiddenContainer g id='use'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "LayoutSVGHiddenContainer g id='use'",
-          "reason": "layoutObject removal"
-        },
-        {
-          "object": "LayoutSVGHiddenContainer g id='use'",
-          "reason": "layoutObject removal"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGText text id='use_text'",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGContainer use",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGEllipse circle id='use_circle'",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGContainer use",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGHiddenContainer g id='use'",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGContainer g id='use'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer use",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGText text id='use_text'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'use'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer use",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGEllipse circle id='use_circle'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGText text id='use_text'",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGContainer use",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGEllipse circle id='use_circle'",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGContainer use",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGContainer g id='use'",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGHiddenContainer g id='use'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer use",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGText text id='use_text'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'use'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer use",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGEllipse circle id='use_circle'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGText text id='use_text'",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGContainer use",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGEllipse circle id='use_circle'",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGContainer use",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGHiddenContainer g id='use'",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGContainer g id='use'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer use",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGText text id='use_text'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'use'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer use",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGEllipse circle id='use_circle'",
+      "reason": "layoutObject insertion"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/mac/svg/custom/use-setAttribute-crash-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/svg/custom/use-setAttribute-crash-expected.txt
index 8332a3f1..284108e 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/svg/custom/use-setAttribute-crash-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/svg/custom/use-setAttribute-crash-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -50,21 +52,51 @@
           "object": "LayoutSVGViewportContainer svg id='symbol'",
           "rect": [53, 53, 10, 10],
           "reason": "layoutObject removal"
-        },
-        {
-          "object": "InlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutSVGEllipse svg:circle id='circle'",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGViewportContainer svg id='symbol'",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutBlockFlow body",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutBlockFlow body",
+      "reason": "invalidate paint rectangle"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutSVGRoot svg:svg id='svg'",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutSVGEllipse svg:circle id='circle'",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutSVGContainer svg:use id='use'",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutSVGViewportContainer svg id='symbol'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGEllipse svg:circle id='circle'",
+      "reason": "layoutObject insertion"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/mac/svg/repaint/focus-element-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/svg/repaint/focus-element-expected.txt
index e73ff91..5d054b02 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/svg/repaint/focus-element-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/svg/repaint/focus-element-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -13,6 +15,12 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutSVGRect rect id='rect'",
+      "reason": "style change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/mac/svg/repaint/outline-offset-text-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/svg/repaint/outline-offset-text-expected.txt
index af429a3..8661abc 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/svg/repaint/outline-offset-text-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/svg/repaint/outline-offset-text-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -35,25 +37,31 @@
           "object": "LayoutSVGRoot svg",
           "rect": [78, 39, 130, 86],
           "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'Foo'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Foo'",
-          "reason": "outline"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutSVGRoot svg",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGText text",
+      "reason": "full"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "outline"
+    },
+    {
+      "object": "InlineTextBox 'Foo'",
+      "reason": "outline"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/mac/svg/repaint/repaint-non-scaling-stroke-text-decoration-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/svg/repaint/repaint-non-scaling-stroke-text-decoration-expected.txt
index 687c674..60bbe8a 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/svg/repaint/repaint-non-scaling-stroke-text-decoration-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/svg/repaint/repaint-non-scaling-stroke-text-decoration-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -25,25 +27,35 @@
           "object": "LayoutSVGText text id='t'",
           "rect": [9, 12, 48, 30],
           "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox 'Hello'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Hello'",
-          "reason": "style change"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutSVGRoot svg",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGContainer g",
+      "reason": "bounds change"
+    },
+    {
+      "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/svg/repaint/repaint-non-scaling-stroke-text-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/svg/repaint/repaint-non-scaling-stroke-text-expected.txt
index 687c674..60bbe8a 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/svg/repaint/repaint-non-scaling-stroke-text-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/svg/repaint/repaint-non-scaling-stroke-text-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -25,25 +27,35 @@
           "object": "LayoutSVGText text id='t'",
           "rect": [9, 12, 48, 30],
           "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox 'Hello'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Hello'",
-          "reason": "style change"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutSVGRoot svg",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGContainer g",
+      "reason": "bounds change"
+    },
+    {
+      "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/svg/repaint/text-mask-update-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/svg/repaint/text-mask-update-expected.txt
index 89436c6..e1346334 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/svg/repaint/text-mask-update-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/svg/repaint/text-mask-update-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -45,25 +47,47 @@
           "object": "LayoutSVGRoot svg",
           "rect": [10, 32, 43, 18],
           "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox ''",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'PASS'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGRoot svg",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGText text id='text1'",
+      "reason": "style change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'PASS'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "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/svg/text/append-text-node-to-tspan-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/svg/text/append-text-node-to-tspan-expected.txt
index f4c8bd2..670ed322 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/svg/text/append-text-node-to-tspan-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/svg/text/append-text-node-to-tspan-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -15,53 +17,27 @@
           "object": "LayoutSVGText text",
           "rect": [10, 62, 306, 378],
           "reason": "style change"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ''",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ''",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'PA'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'PASS'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'PASS'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'SS'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutSVGText text",
+      "reason": "style change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'SS'",
+      "reason": "layoutObject insertion"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/mac/svg/text/ems-display-none-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/svg/text/ems-display-none-expected.txt
index 5d7296c..77a7ae5 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/svg/text/ems-display-none-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/svg/text/ems-display-none-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -45,33 +47,67 @@
           "object": "LayoutSVGText text id='text'",
           "rect": [50, 54, 571, 86],
           "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox ' '",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'Two lines of text should be visible.'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'Two lines of text should be visible.'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutSVGRoot svg",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGContainer g",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGText text id='text'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGTSpan tspan id='tspan'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'Two lines of text should be visible.'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox ' '",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGTSpan tspan",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'Two lines of text should be visible.'",
+      "reason": "layoutObject insertion"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/mac/svg/text/exs-display-none-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/svg/text/exs-display-none-expected.txt
index a8b6095..7a067a63 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/svg/text/exs-display-none-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/svg/text/exs-display-none-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -45,33 +47,67 @@
           "object": "LayoutSVGText text id='text'",
           "rect": [50, 50, 571, 82],
           "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox ' '",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'Two lines of text should be visible.'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'Two lines of text should be visible.'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutSVGRoot svg",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGContainer g",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGText text id='text'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGTSpan tspan id='tspan'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'Two lines of text should be visible.'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox ' '",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGTSpan tspan",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'Two lines of text should be visible.'",
+      "reason": "layoutObject insertion"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/mac/svg/text/modify-text-node-in-tspan-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/svg/text/modify-text-node-in-tspan-expected.txt
index c9230569..80c8100 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/svg/text/modify-text-node-in-tspan-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/svg/text/modify-text-node-in-tspan-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -15,53 +17,27 @@
           "object": "LayoutSVGText text",
           "rect": [10, 62, 306, 378],
           "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ''",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ''",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'PA'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'PASS'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'PASS'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'PASS'",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutSVGText text",
+      "reason": "full"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "full"
+    },
+    {
+      "object": "InlineTextBox 'PASS'",
+      "reason": "full"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/mac/svg/text/remove-text-node-from-tspan-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/svg/text/remove-text-node-from-tspan-expected.txt
index 4f58d8b..1b076751 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/svg/text/remove-text-node-from-tspan-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/svg/text/remove-text-node-from-tspan-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -60,69 +62,79 @@
           "object": "LayoutSVGText text",
           "rect": [10, 62, 306, 378],
           "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox ' '",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox ''",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ''",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'FAIL'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'PASS'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'PASS'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'PASS'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'PASS'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGRoot (positioned) svg",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGText text",
+      "reason": "full"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutSVGTSpan tspan id='modify'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGTSpan tspan",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox 'PASS'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox ' '",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGTSpan tspan",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox 'PASS'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/mac/svg/text/remove-tspan-from-text-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/svg/text/remove-tspan-from-text-expected.txt
index c5d0f94..b44d543 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/svg/text/remove-tspan-from-text-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/svg/text/remove-tspan-from-text-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -20,49 +22,27 @@
           "object": "LayoutSVGText text id='text'",
           "rect": [10, 62, 306, 258],
           "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ''",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ''",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'FAIL'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'PASS'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'PASS'",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGTSpan tspan id='remove'",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGText text id='text'",
+      "reason": "full"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "full"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/mac/svg/text/text-rescale-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/svg/text/text-rescale-expected.txt
index 061aa9d..2f0feae 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/svg/text/text-rescale-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/svg/text/text-rescale-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -270,153 +272,195 @@
           "object": "LayoutText #text",
           "rect": [0, 0, 1, 1],
           "reason": "bounds change"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'PASS '",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'PASS '",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'PASS '",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'PASS '",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'PASS '",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'PASS'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'PASS'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'PASS'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'PASS'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'PASS'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'PASS'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'PASS'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'PASS'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'PASS'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'PASS'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'PASS'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'PASS'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutSVGRoot (positioned) svg",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGContainer g id='text1g'",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutSVGText text",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox 'PASS '",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGTSpan tspan",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox 'PASS'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGForeignObject foreignObject",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow P",
+      "reason": "bounds change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox 'PASS'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGViewportContainer svg",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGText text",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox 'PASS'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGContainer g id='text2g'",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutSVGText text",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutSVGText text",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutSVGContainer g id='text3g'",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutSVGText text",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox 'PASS '",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGTSpan tspan",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox 'PASS'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGForeignObject foreignObject",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow P",
+      "reason": "bounds change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox 'PASS'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGViewportContainer svg",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGText text",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox 'PASS'",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/mac/svg/text/text-selection-text-05-t-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/svg/text/text-selection-text-05-t-expected.txt
index 82324dba..9de7ae3e 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/svg/text/text-selection-text-05-t-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/svg/text/text-selection-text-05-t-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -220,569 +222,743 @@
           "object": "LayoutSVGInlineText #text",
           "rect": [565, 385, 27, 45],
           "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '$Revision: 1.8 $'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '1'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '1'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '1'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '1'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '1'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '1'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '1'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '1'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '1'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '1'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '1'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '1'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '1'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '1'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '1'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '1'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '1'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '1'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '1'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '1'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '1'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '1'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '1'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '1'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '1.x 1.y'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '1.x 2.y'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '1.x 4.y'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '1234'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '1234'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '1234'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '2'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '2'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '2'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '2'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '2'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '2'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '2'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '2'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '2'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '2'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '2'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '2'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '2'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '2'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '2'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '2.x 1.y'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '2.x 2.y'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '2.x 4.y'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '234'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '234'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '234'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '234'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '234'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '234'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '234'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '234'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '234'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '3'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '3'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '3'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '3'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '3'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '3'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '3'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '3'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '3'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '3'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '3'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '3'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '3'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '3'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '3'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '4'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '4'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '4'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '4'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '4'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '4'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '4'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '4'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '4'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '4'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '4'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '4'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '4'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '4'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '4'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '4.x 1.y'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '4.x 2.y'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '4.x 4.y'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox 'end'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox 'middle'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox 'start'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox 'text-anchor'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox 'text-anchor'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox 'text-anchor'",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutSVGText text id='revision'",
-          "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/mac/svg/text/tspan-dynamic-positioning-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/svg/text/tspan-dynamic-positioning-expected.txt
index ce870bd..7ed90266 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/svg/text/tspan-dynamic-positioning-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/svg/text/tspan-dynamic-positioning-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -45,33 +47,39 @@
           "object": "LayoutSVGText text",
           "rect": [20, 6, 256, 18],
           "reason": "forced by layout"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'This text should be at visible at 200,200'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'This text should be at visible at 200,200'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutSVGRoot svg",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGText text",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutSVGTSpan tspan id='ts'",
+      "reason": "full"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox 'This text should be at visible at 200,200'",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/mac/transforms/transform-focus-ring-repaint-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/transforms/transform-focus-ring-repaint-expected.txt
index 4b36009..06f940a 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/transforms/transform-focus-ring-repaint-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/transforms/transform-focus-ring-repaint-expected.txt
@@ -1,12 +1,15 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow (positioned) DIV id='target'",
           "position": [5, 55],
           "bounds": [406, 546],
           "drawsContent": true,
@@ -26,6 +29,7 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow (positioned) DIV",
           "position": [108, 158],
           "transformOrigin": [150, 150],
           "bounds": [440, 300],
@@ -40,6 +44,12 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='target'",
+      "reason": "style change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/prefer_compositing_to_lcd_text/compositing/overflow/selection-gaps-after-removing-scrolling-contents-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/prefer_compositing_to_lcd_text/compositing/overflow/selection-gaps-after-removing-scrolling-contents-expected.txt
index 63c3fb5..a80e1a2 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/prefer_compositing_to_lcd_text/compositing/overflow/selection-gaps-after-removing-scrolling-contents-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/virtual/prefer_compositing_to_lcd_text/compositing/overflow/selection-gaps-after-removing-scrolling-contents-expected.txt
@@ -14,14 +14,17 @@
 *** iteration 1: ***
 
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow DIV id='container'",
           "position": [8, 80],
           "bounds": [300, 500],
           "contentsOpaque": true,
@@ -30,27 +33,33 @@
           "backgroundColor": "#0000FF",
           "children": [
             {
+              "name": "Scrolling Layer",
               "bounds": [285, 485],
               "shouldFlattenTransform": false,
               "children": [
                 {
+                  "name": "Scrolling Contents Layer",
                   "bounds": [285, 665],
                   "drawsContent": true
                 }
               ]
             },
             {
+              "name": "Overflow Controls Host Layer",
               "bounds": [300, 500],
               "children": [
                 {
+                  "name": "Horizontal Scrollbar Layer",
                   "position": [0, 485],
                   "bounds": [285, 15]
                 },
                 {
+                  "name": "Vertical Scrollbar Layer",
                   "position": [285, 0],
                   "bounds": [15, 485]
                 },
                 {
+                  "name": "Scroll Corner Layer",
                   "position": [285, 485],
                   "bounds": [15, 15],
                   "drawsContent": true
@@ -60,6 +69,7 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 95],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -67,6 +77,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 160],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -74,6 +85,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV id='selection' class='scrolled'",
           "position": [23, 225],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -81,6 +93,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 290],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -88,6 +101,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 355],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -95,6 +109,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 420],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -102,6 +117,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 485],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -109,6 +125,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 550],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -116,6 +133,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 615],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -123,6 +141,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 680],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -138,14 +157,17 @@
 *** iteration 2: ***
 
 {
-  "bounds": [785, 2466],
+  "name": "Content Root Layer",
+  "bounds": [785, 2751],
   "children": [
     {
-      "bounds": [785, 2466],
+      "name": "LayoutView #document",
+      "bounds": [785, 2751],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow DIV id='container'",
           "position": [8, 80],
           "bounds": [300, 500],
           "contentsOpaque": true,
@@ -154,27 +176,33 @@
           "backgroundColor": "#0000FF",
           "children": [
             {
+              "name": "Scrolling Layer",
               "bounds": [285, 485],
               "shouldFlattenTransform": false,
               "children": [
                 {
+                  "name": "Scrolling Contents Layer",
                   "bounds": [285, 665],
                   "drawsContent": true
                 }
               ]
             },
             {
+              "name": "Overflow Controls Host Layer",
               "bounds": [300, 500],
               "children": [
                 {
+                  "name": "Horizontal Scrollbar Layer",
                   "position": [0, 485],
                   "bounds": [285, 15]
                 },
                 {
+                  "name": "Vertical Scrollbar Layer",
                   "position": [285, 0],
                   "bounds": [15, 485]
                 },
                 {
+                  "name": "Scroll Corner Layer",
                   "position": [285, 485],
                   "bounds": [15, 15],
                   "drawsContent": true
@@ -184,6 +212,7 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 95],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -191,6 +220,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 160],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -198,6 +228,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV id='selection' class='scrolled'",
           "position": [23, 225],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -205,6 +236,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 290],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -212,6 +244,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 355],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -219,6 +252,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 420],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -226,6 +260,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 485],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -233,6 +268,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 550],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -240,6 +276,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 615],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -247,6 +284,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 680],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -262,40 +300,49 @@
 *** iteration 3: ***
 
 {
-  "bounds": [785, 4326],
+  "name": "Content Root Layer",
+  "bounds": [785, 4896],
   "children": [
     {
-      "bounds": [785, 4326],
+      "name": "LayoutView #document",
+      "bounds": [785, 4896],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow DIV id='container'",
           "position": [8, 80],
           "bounds": [300, 500],
           "shouldFlattenTransform": false,
           "drawsContent": true,
           "children": [
             {
+              "name": "Scrolling Layer",
               "bounds": [285, 485],
               "shouldFlattenTransform": false,
               "children": [
                 {
+                  "name": "Scrolling Contents Layer",
                   "bounds": [285, 665]
                 }
               ]
             },
             {
+              "name": "Overflow Controls Host Layer",
               "bounds": [300, 500],
               "children": [
                 {
+                  "name": "Horizontal Scrollbar Layer",
                   "position": [0, 485],
                   "bounds": [285, 15]
                 },
                 {
+                  "name": "Vertical Scrollbar Layer",
                   "position": [285, 0],
                   "bounds": [15, 485]
                 },
                 {
+                  "name": "Scroll Corner Layer",
                   "position": [285, 485],
                   "bounds": [15, 15],
                   "drawsContent": true
@@ -305,6 +352,7 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 95],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -312,6 +360,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 160],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -319,6 +368,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV id='selection' class='scrolled'",
           "position": [23, 225],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -326,6 +376,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 290],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -333,6 +384,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 355],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -340,6 +392,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 420],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -347,6 +400,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 485],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -354,6 +408,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 550],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -361,6 +416,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 615],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -368,6 +424,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 680],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -383,40 +440,49 @@
 *** iteration 4: ***
 
 {
-  "bounds": [785, 6141],
+  "name": "Content Root Layer",
+  "bounds": [785, 6996],
   "children": [
     {
-      "bounds": [785, 6141],
+      "name": "LayoutView #document",
+      "bounds": [785, 6996],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow DIV id='container'",
           "position": [8, 80],
           "bounds": [300, 500],
           "shouldFlattenTransform": false,
           "drawsContent": true,
           "children": [
             {
+              "name": "Scrolling Layer",
               "bounds": [285, 485],
               "shouldFlattenTransform": false,
               "children": [
                 {
+                  "name": "Scrolling Contents Layer",
                   "bounds": [285, 665]
                 }
               ]
             },
             {
+              "name": "Overflow Controls Host Layer",
               "bounds": [300, 500],
               "children": [
                 {
+                  "name": "Horizontal Scrollbar Layer",
                   "position": [0, 485],
                   "bounds": [285, 15]
                 },
                 {
+                  "name": "Vertical Scrollbar Layer",
                   "position": [285, 0],
                   "bounds": [15, 485]
                 },
                 {
+                  "name": "Scroll Corner Layer",
                   "position": [285, 485],
                   "bounds": [15, 15],
                   "drawsContent": true
@@ -426,6 +492,7 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 95],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -433,6 +500,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 160],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -440,6 +508,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV id='selection' class='scrolled'",
           "position": [23, 225],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -447,6 +516,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 290],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -454,6 +524,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 355],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -461,6 +532,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 420],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -468,6 +540,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 485],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -475,6 +548,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 550],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -482,6 +556,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 615],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -489,6 +564,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 680],
           "bounds": [100, 50],
           "contentsOpaque": true,
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/prefer_compositing_to_lcd_text/compositing/overflow/selection-gaps-toggling-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/prefer_compositing_to_lcd_text/compositing/overflow/selection-gaps-toggling-expected.txt
index 2adaf001..2be9b5fd 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/prefer_compositing_to_lcd_text/compositing/overflow/selection-gaps-toggling-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/virtual/prefer_compositing_to_lcd_text/compositing/overflow/selection-gaps-toggling-expected.txt
@@ -14,40 +14,49 @@
 *** iteration 1: ***
 
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow DIV class='container'",
           "position": [8, 62],
           "bounds": [300, 500],
           "shouldFlattenTransform": false,
           "drawsContent": true,
           "children": [
             {
+              "name": "Scrolling Layer",
               "bounds": [285, 485],
               "shouldFlattenTransform": false,
               "children": [
                 {
+                  "name": "Scrolling Contents Layer",
                   "bounds": [285, 665]
                 }
               ]
             },
             {
+              "name": "Overflow Controls Host Layer",
               "bounds": [300, 500],
               "children": [
                 {
+                  "name": "Horizontal Scrollbar Layer",
                   "position": [0, 485],
                   "bounds": [285, 15]
                 },
                 {
+                  "name": "Vertical Scrollbar Layer",
                   "position": [285, 0],
                   "bounds": [15, 485]
                 },
                 {
+                  "name": "Scroll Corner Layer",
                   "position": [285, 485],
                   "bounds": [15, 15],
                   "drawsContent": true
@@ -57,6 +66,7 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 77],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -64,6 +74,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 142],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -71,6 +82,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV id='selection' class='scrolled'",
           "position": [23, 207],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -78,6 +90,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 272],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -85,6 +98,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 337],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -92,6 +106,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 402],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -99,6 +114,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 467],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -106,6 +122,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 532],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -113,6 +130,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 597],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -120,6 +138,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 662],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -135,40 +154,49 @@
 *** iteration 2: ***
 
 {
-  "bounds": [785, 2403],
+  "name": "Content Root Layer",
+  "bounds": [785, 2688],
   "children": [
     {
-      "bounds": [785, 2403],
+      "name": "LayoutView #document",
+      "bounds": [785, 2688],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow DIV class='container'",
           "position": [8, 62],
           "bounds": [300, 500],
           "shouldFlattenTransform": false,
           "drawsContent": true,
           "children": [
             {
+              "name": "Scrolling Layer",
               "bounds": [285, 485],
               "shouldFlattenTransform": false,
               "children": [
                 {
+                  "name": "Scrolling Contents Layer",
                   "bounds": [285, 665]
                 }
               ]
             },
             {
+              "name": "Overflow Controls Host Layer",
               "bounds": [300, 500],
               "children": [
                 {
+                  "name": "Horizontal Scrollbar Layer",
                   "position": [0, 485],
                   "bounds": [285, 15]
                 },
                 {
+                  "name": "Vertical Scrollbar Layer",
                   "position": [285, 0],
                   "bounds": [15, 485]
                 },
                 {
+                  "name": "Scroll Corner Layer",
                   "position": [285, 485],
                   "bounds": [15, 15],
                   "drawsContent": true
@@ -178,6 +206,7 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 77],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -185,6 +214,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 142],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -192,6 +222,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV id='selection' class='scrolled'",
           "position": [23, 207],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -199,6 +230,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 272],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -206,6 +238,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 337],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -213,6 +246,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 402],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -220,6 +254,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 467],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -227,6 +262,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 532],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -234,6 +270,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 597],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -241,6 +278,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 662],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -256,40 +294,49 @@
 *** iteration 3: ***
 
 {
-  "bounds": [785, 4218],
+  "name": "Content Root Layer",
+  "bounds": [785, 4788],
   "children": [
     {
-      "bounds": [785, 4218],
+      "name": "LayoutView #document",
+      "bounds": [785, 4788],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow DIV class='container'",
           "position": [8, 62],
           "bounds": [300, 500],
           "shouldFlattenTransform": false,
           "drawsContent": true,
           "children": [
             {
+              "name": "Scrolling Layer",
               "bounds": [285, 485],
               "shouldFlattenTransform": false,
               "children": [
                 {
+                  "name": "Scrolling Contents Layer",
                   "bounds": [285, 665]
                 }
               ]
             },
             {
+              "name": "Overflow Controls Host Layer",
               "bounds": [300, 500],
               "children": [
                 {
+                  "name": "Horizontal Scrollbar Layer",
                   "position": [0, 485],
                   "bounds": [285, 15]
                 },
                 {
+                  "name": "Vertical Scrollbar Layer",
                   "position": [285, 0],
                   "bounds": [15, 485]
                 },
                 {
+                  "name": "Scroll Corner Layer",
                   "position": [285, 485],
                   "bounds": [15, 15],
                   "drawsContent": true
@@ -299,6 +346,7 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 77],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -306,6 +354,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 142],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -313,6 +362,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV id='selection' class='scrolled'",
           "position": [23, 207],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -320,6 +370,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 272],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -327,6 +378,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 337],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -334,6 +386,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 402],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -341,6 +394,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 467],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -348,6 +402,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 532],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -355,6 +410,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 597],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -362,6 +418,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 662],
           "bounds": [100, 50],
           "contentsOpaque": true,
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/prefer_compositing_to_lcd_text/compositing/overflow/selection-gaps-toggling-with-scrolling-contents-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/prefer_compositing_to_lcd_text/compositing/overflow/selection-gaps-toggling-with-scrolling-contents-expected.txt
index 8760b3d..5dc67d4d 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/prefer_compositing_to_lcd_text/compositing/overflow/selection-gaps-toggling-with-scrolling-contents-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/virtual/prefer_compositing_to_lcd_text/compositing/overflow/selection-gaps-toggling-with-scrolling-contents-expected.txt
@@ -14,40 +14,49 @@
 *** iteration 1: ***
 
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow DIV id='container'",
           "position": [8, 80],
           "bounds": [300, 500],
           "shouldFlattenTransform": false,
           "drawsContent": true,
           "children": [
             {
+              "name": "Scrolling Layer",
               "bounds": [285, 485],
               "shouldFlattenTransform": false,
               "children": [
                 {
+                  "name": "Scrolling Contents Layer",
                   "bounds": [285, 665]
                 }
               ]
             },
             {
+              "name": "Overflow Controls Host Layer",
               "bounds": [300, 500],
               "children": [
                 {
+                  "name": "Horizontal Scrollbar Layer",
                   "position": [0, 485],
                   "bounds": [285, 15]
                 },
                 {
+                  "name": "Vertical Scrollbar Layer",
                   "position": [285, 0],
                   "bounds": [15, 485]
                 },
                 {
+                  "name": "Scroll Corner Layer",
                   "position": [285, 485],
                   "bounds": [15, 15],
                   "drawsContent": true
@@ -57,6 +66,7 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 95],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -64,6 +74,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 160],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -71,6 +82,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV id='selection' class='scrolled'",
           "position": [23, 225],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -78,6 +90,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 290],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -85,6 +98,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 355],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -92,6 +106,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 420],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -99,6 +114,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 485],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -106,6 +122,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 550],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -113,6 +130,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 615],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -120,6 +138,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 680],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -135,14 +154,17 @@
 *** iteration 2: ***
 
 {
-  "bounds": [785, 2421],
+  "name": "Content Root Layer",
+  "bounds": [785, 2706],
   "children": [
     {
-      "bounds": [785, 2421],
+      "name": "LayoutView #document",
+      "bounds": [785, 2706],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow DIV id='container'",
           "position": [8, 80],
           "bounds": [300, 500],
           "contentsOpaque": true,
@@ -151,27 +173,33 @@
           "backgroundColor": "#0000FF",
           "children": [
             {
+              "name": "Scrolling Layer",
               "bounds": [285, 485],
               "shouldFlattenTransform": false,
               "children": [
                 {
+                  "name": "Scrolling Contents Layer",
                   "bounds": [285, 665],
                   "drawsContent": true
                 }
               ]
             },
             {
+              "name": "Overflow Controls Host Layer",
               "bounds": [300, 500],
               "children": [
                 {
+                  "name": "Horizontal Scrollbar Layer",
                   "position": [0, 485],
                   "bounds": [285, 15]
                 },
                 {
+                  "name": "Vertical Scrollbar Layer",
                   "position": [285, 0],
                   "bounds": [15, 485]
                 },
                 {
+                  "name": "Scroll Corner Layer",
                   "position": [285, 485],
                   "bounds": [15, 15],
                   "drawsContent": true
@@ -181,6 +209,7 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 95],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -188,6 +217,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 160],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -195,6 +225,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV id='selection' class='scrolled'",
           "position": [23, 225],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -202,6 +233,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 290],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -209,6 +241,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 355],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -216,6 +249,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 420],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -223,6 +257,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 485],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -230,6 +265,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 550],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -237,6 +273,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 615],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -244,6 +281,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 680],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -259,14 +297,17 @@
 *** iteration 3: ***
 
 {
-  "bounds": [785, 4281],
+  "name": "Content Root Layer",
+  "bounds": [785, 4851],
   "children": [
     {
-      "bounds": [785, 4281],
+      "name": "LayoutView #document",
+      "bounds": [785, 4851],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow DIV id='container'",
           "position": [8, 80],
           "bounds": [300, 500],
           "contentsOpaque": true,
@@ -275,27 +316,33 @@
           "backgroundColor": "#0000FF",
           "children": [
             {
+              "name": "Scrolling Layer",
               "bounds": [285, 485],
               "shouldFlattenTransform": false,
               "children": [
                 {
+                  "name": "Scrolling Contents Layer",
                   "bounds": [285, 665],
                   "drawsContent": true
                 }
               ]
             },
             {
+              "name": "Overflow Controls Host Layer",
               "bounds": [300, 500],
               "children": [
                 {
+                  "name": "Horizontal Scrollbar Layer",
                   "position": [0, 485],
                   "bounds": [285, 15]
                 },
                 {
+                  "name": "Vertical Scrollbar Layer",
                   "position": [285, 0],
                   "bounds": [15, 485]
                 },
                 {
+                  "name": "Scroll Corner Layer",
                   "position": [285, 485],
                   "bounds": [15, 15],
                   "drawsContent": true
@@ -305,6 +352,7 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 95],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -312,6 +360,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 160],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -319,6 +368,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV id='selection' class='scrolled'",
           "position": [23, 225],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -326,6 +376,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 290],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -333,6 +384,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 355],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -340,6 +392,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 420],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -347,6 +400,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 485],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -354,6 +408,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 550],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -361,6 +416,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 615],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -368,6 +424,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 680],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -383,40 +440,49 @@
 *** iteration 4: ***
 
 {
-  "bounds": [785, 6141],
+  "name": "Content Root Layer",
+  "bounds": [785, 6996],
   "children": [
     {
-      "bounds": [785, 6141],
+      "name": "LayoutView #document",
+      "bounds": [785, 6996],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow DIV id='container'",
           "position": [8, 80],
           "bounds": [300, 500],
           "shouldFlattenTransform": false,
           "drawsContent": true,
           "children": [
             {
+              "name": "Scrolling Layer",
               "bounds": [285, 485],
               "shouldFlattenTransform": false,
               "children": [
                 {
+                  "name": "Scrolling Contents Layer",
                   "bounds": [285, 665]
                 }
               ]
             },
             {
+              "name": "Overflow Controls Host Layer",
               "bounds": [300, 500],
               "children": [
                 {
+                  "name": "Horizontal Scrollbar Layer",
                   "position": [0, 485],
                   "bounds": [285, 15]
                 },
                 {
+                  "name": "Vertical Scrollbar Layer",
                   "position": [285, 0],
                   "bounds": [15, 485]
                 },
                 {
+                  "name": "Scroll Corner Layer",
                   "position": [285, 485],
                   "bounds": [15, 15],
                   "drawsContent": true
@@ -426,6 +492,7 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 95],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -433,6 +500,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 160],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -440,6 +508,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV id='selection' class='scrolled'",
           "position": [23, 225],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -447,6 +516,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 290],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -454,6 +524,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 355],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -461,6 +532,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 420],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -468,6 +540,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 485],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -475,6 +548,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 550],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -482,6 +556,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 615],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -489,6 +564,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 680],
           "bounds": [100, 50],
           "contentsOpaque": true,
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/prefer_compositing_to_lcd_text/compositing/overflow/text-color-change-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/prefer_compositing_to_lcd_text/compositing/overflow/text-color-change-expected.txt
index 1b36919..87c8326 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/prefer_compositing_to_lcd_text/compositing/overflow/text-color-change-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/virtual/prefer_compositing_to_lcd_text/compositing/overflow/text-color-change-expected.txt
@@ -1,352 +1,27 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow PRE id='scroller'",
           "position": [8, 57],
           "bounds": [200, 200],
           "shouldFlattenTransform": false,
           "drawsContent": true,
-          "paintInvalidations": [
-            {
-              "object": "InlineTextBox '\n'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '\n'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '\n'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '\n'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '\n'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '\n'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '\n'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '\n'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '\n'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '\n'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '\n'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '\n'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '\n'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '\n'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '\n'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '\n'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '\n'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '\n'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '\n'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '\n'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '\n'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '\n'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '\n'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '\n'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '\n'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '\n'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '\n'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '\n'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '\n'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '\n'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '\n'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '\n'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '\n'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '\n'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '\n'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '\n'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '\n'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '\n'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '\n'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '\n'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '\n'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '  Text'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '  Text'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '  Text'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '  Text'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '  Text'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '  Text'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '  Text'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '  Text'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '  Text'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '  Text'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '  Text'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '  Text'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '  Text'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '  Text'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '  Text'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '  Text'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '  Text'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '  Text'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '  Text'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '  Text'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '  Text'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '  Text'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '  Text'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '  Text'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '  Text'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '  Text'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '  Text'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '  Text'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '  Text'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '  Text'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '  Text'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '  Text'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '  Text'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '  Text'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '  Text'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '  Text'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '  Text'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '  Text'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '  Text'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '  Text'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '  Text'",
-              "reason": "style change"
-            }
-          ],
           "children": [
             {
+              "name": "Scrolling Layer",
               "bounds": [185, 185],
               "shouldFlattenTransform": false,
               "children": [
                 {
+                  "name": "Scrolling Contents Layer",
                   "bounds": [185, 615],
                   "drawsContent": true,
                   "paintInvalidations": [
@@ -354,351 +29,27 @@
                       "object": "LayoutText #text",
                       "rect": [0, 0, 47, 615],
                       "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '\n'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '\n'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '\n'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '\n'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '\n'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '\n'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '\n'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '\n'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '\n'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '\n'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '\n'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '\n'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '\n'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '\n'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '\n'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '\n'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '\n'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '\n'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '\n'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '\n'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '\n'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '\n'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '\n'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '\n'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '\n'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '\n'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '\n'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '\n'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '\n'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '\n'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '\n'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '\n'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '\n'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '\n'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '\n'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '\n'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '\n'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '\n'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '\n'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '\n'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '\n'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '  Text'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '  Text'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '  Text'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '  Text'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '  Text'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '  Text'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '  Text'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '  Text'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '  Text'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '  Text'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '  Text'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '  Text'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '  Text'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '  Text'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '  Text'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '  Text'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '  Text'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '  Text'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '  Text'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '  Text'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '  Text'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '  Text'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '  Text'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '  Text'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '  Text'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '  Text'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '  Text'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '  Text'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '  Text'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '  Text'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '  Text'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '  Text'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '  Text'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '  Text'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '  Text'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '  Text'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '  Text'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '  Text'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '  Text'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '  Text'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '  Text'",
-                      "reason": "style change"
                     }
                   ]
                 }
               ]
             },
             {
+              "name": "Overflow Controls Host Layer",
               "bounds": [200, 200],
               "children": [
                 {
+                  "name": "Horizontal Scrollbar Layer",
                   "position": [0, 185],
                   "bounds": [185, 15]
                 },
                 {
+                  "name": "Vertical Scrollbar Layer",
                   "position": [185, 0],
                   "bounds": [15, 185]
                 },
                 {
+                  "name": "Scroll Corner Layer",
                   "position": [185, 185],
                   "bounds": [15, 15],
                   "drawsContent": true
@@ -709,6 +60,340 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutText #text",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/prefer_compositing_to_lcd_text/compositing/overflow/text-match-highlight-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/prefer_compositing_to_lcd_text/compositing/overflow/text-match-highlight-expected.txt
index 6391f46..5f916f8 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/prefer_compositing_to_lcd_text/compositing/overflow/text-match-highlight-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/virtual/prefer_compositing_to_lcd_text/compositing/overflow/text-match-highlight-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -10,54 +12,23 @@
           "object": "LayoutText #text",
           "rect": [282, 36, 45, 18],
           "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'findme'",
-          "reason": "full"
         }
       ],
       "children": [
         {
+          "name": "LayoutBlockFlow DIV",
           "position": [0, 54],
           "bounds": [800, 500],
           "shouldFlattenTransform": false,
           "drawsContent": true,
-          "paintInvalidations": [
-            {
-              "object": "InlineTextBox 'Can you findme in this boring text?'",
-              "reason": "full"
-            },
-            {
-              "object": "InlineTextBox 'Findme in a typewriter!'",
-              "reason": "full"
-            },
-            {
-              "object": "InlineTextBox 'Findme on a path! Did you findme?'",
-              "reason": "full"
-            },
-            {
-              "object": "InlineTextBox 'findme'",
-              "reason": "full"
-            },
-            {
-              "object": "InlineTextBox 'findme'",
-              "reason": "full"
-            },
-            {
-              "object": "InlineTextBox 'findme'",
-              "reason": "full"
-            },
-            {
-              "object": "InlineTextBox 'findme'",
-              "reason": "full"
-            }
-          ],
           "children": [
             {
+              "name": "Scrolling Layer",
               "bounds": [785, 485],
               "shouldFlattenTransform": false,
               "children": [
                 {
+                  "name": "Scrolling Contents Layer",
                   "bounds": [785, 1340],
                   "drawsContent": true,
                   "paintInvalidations": [
@@ -95,51 +66,27 @@
                       "object": "LayoutText #text",
                       "rect": [52, 18, 45, 18],
                       "reason": "full"
-                    },
-                    {
-                      "object": "InlineTextBox 'Can you findme in this boring text?'",
-                      "reason": "full"
-                    },
-                    {
-                      "object": "InlineTextBox 'Findme in a typewriter!'",
-                      "reason": "full"
-                    },
-                    {
-                      "object": "InlineTextBox 'Findme on a path! Did you findme?'",
-                      "reason": "full"
-                    },
-                    {
-                      "object": "InlineTextBox 'findme'",
-                      "reason": "full"
-                    },
-                    {
-                      "object": "InlineTextBox 'findme'",
-                      "reason": "full"
-                    },
-                    {
-                      "object": "InlineTextBox 'findme'",
-                      "reason": "full"
-                    },
-                    {
-                      "object": "InlineTextBox 'findme'",
-                      "reason": "full"
                     }
                   ]
                 }
               ]
             },
             {
+              "name": "Overflow Controls Host Layer",
               "bounds": [800, 500],
               "children": [
                 {
+                  "name": "Horizontal Scrollbar Layer",
                   "position": [0, 485],
                   "bounds": [785, 15]
                 },
                 {
+                  "name": "Vertical Scrollbar Layer",
                   "position": [785, 0],
                   "bounds": [15, 485]
                 },
                 {
+                  "name": "Scroll Corner Layer",
                   "position": [785, 485],
                   "bounds": [15, 15],
                   "drawsContent": true
@@ -150,6 +97,72 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutText #text",
+      "reason": "full"
+    },
+    {
+      "object": "InlineTextBox 'findme'",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "full"
+    },
+    {
+      "object": "InlineTextBox 'findme'",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "full"
+    },
+    {
+      "object": "InlineTextBox 'findme'",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "full"
+    },
+    {
+      "object": "InlineTextBox 'findme'",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "full"
+    },
+    {
+      "object": "InlineTextBox 'findme'",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "full"
+    },
+    {
+      "object": "InlineTextBox 'Can you findme in this boring text?'",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "full"
+    },
+    {
+      "object": "InlineTextBox 'Findme in a typewriter!'",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "full"
+    },
+    {
+      "object": "InlineTextBox 'Findme on a path! Did you findme?'",
+      "reason": "full"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/prefer_compositing_to_lcd_text/compositing/overflow/textarea-scroll-touch-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/prefer_compositing_to_lcd_text/compositing/overflow/textarea-scroll-touch-expected.txt
index e023c562d..7200c5f 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/prefer_compositing_to_lcd_text/compositing/overflow/textarea-scroll-touch-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/virtual/prefer_compositing_to_lcd_text/compositing/overflow/textarea-scroll-touch-expected.txt
@@ -1,13 +1,16 @@
   
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutTextControl TEXTAREA",
           "position": [18, 18],
           "bounds": [206, 126],
           "contentsOpaque": true,
@@ -16,24 +19,29 @@
           "backgroundColor": "#CCCCCC",
           "children": [
             {
+              "name": "Scrolling Layer",
               "position": [1, 1],
               "bounds": [189, 124],
               "shouldFlattenTransform": false,
               "children": [
                 {
+                  "name": "Scrolling Contents Layer",
                   "bounds": [189, 270],
                   "drawsContent": true
                 }
               ]
             },
             {
+              "name": "Overflow Controls Host Layer",
               "bounds": [206, 126],
               "children": [
                 {
+                  "name": "Vertical Scrollbar Layer",
                   "position": [190, 1],
                   "bounds": [15, 109]
                 },
                 {
+                  "name": "Scroll Corner Layer",
                   "position": [190, 110],
                   "bounds": [15, 15],
                   "drawsContent": true
@@ -43,6 +51,7 @@
           ]
         },
         {
+          "name": "LayoutTextControl TEXTAREA",
           "position": [248, 18],
           "bounds": [206, 126],
           "contentsOpaque": true,
@@ -51,24 +60,29 @@
           "backgroundColor": "#CCCCCC",
           "children": [
             {
+              "name": "Scrolling Layer",
               "position": [1, 1],
               "bounds": [189, 124],
               "shouldFlattenTransform": false,
               "children": [
                 {
+                  "name": "Scrolling Contents Layer",
                   "bounds": [189, 270],
                   "drawsContent": true
                 }
               ]
             },
             {
+              "name": "Overflow Controls Host Layer",
               "bounds": [206, 126],
               "children": [
                 {
+                  "name": "Vertical Scrollbar Layer",
                   "position": [190, 1],
                   "bounds": [15, 109]
                 },
                 {
+                  "name": "Scroll Corner Layer",
                   "position": [190, 110],
                   "bounds": [15, 15],
                   "drawsContent": true
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/threaded/compositing/visibility/visibility-image-layers-dynamic-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/threaded/compositing/visibility/visibility-image-layers-dynamic-expected.txt
index c263144..f3f1a30 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/threaded/compositing/visibility/visibility-image-layers-dynamic-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/virtual/threaded/compositing/visibility/visibility-image-layers-dynamic-expected.txt
@@ -4,23 +4,28 @@
 Initial
 
 {
+  "name": "Content Root Layer",
   "bounds": [785, 626],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [785, 626],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow DIV class='composited container'",
           "position": [18, 10],
           "bounds": [749, 144]
         },
         {
+          "name": "LayoutBlockFlow DIV class='composited hidden container'",
           "position": [14, 314],
           "bounds": [757, 152],
           "contentsVisible": false,
           "children": [
             {
+              "name": "LayoutImage IMG class='visible composited box'",
               "position": [24, 24],
               "bounds": [100, 100]
             }
@@ -33,29 +38,35 @@
 After step 1
 
 {
-  "bounds": [785, 1051],
+  "name": "Content Root Layer",
+  "bounds": [785, 1126],
   "children": [
     {
-      "bounds": [785, 1051],
+      "name": "LayoutView #document",
+      "bounds": [785, 1126],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow DIV class='composited container'",
           "position": [18, 10],
           "bounds": [749, 144],
           "children": [
             {
+              "name": "LayoutImage IMG class='hidden composited box'",
               "position": [20, 20],
               "bounds": [100, 100]
             }
           ]
         },
         {
+          "name": "LayoutBlockFlow DIV class='composited hidden container'",
           "position": [14, 314],
           "bounds": [757, 152],
           "contentsVisible": false,
           "children": [
             {
+              "name": "LayoutImage IMG class='visible composited box'",
               "position": [24, 24],
               "bounds": [100, 100]
             }
@@ -68,40 +79,48 @@
 After step 2
 
 {
-  "bounds": [785, 1565],
+  "name": "Content Root Layer",
+  "bounds": [785, 1730],
   "children": [
     {
-      "bounds": [785, 1565],
+      "name": "LayoutView #document",
+      "bounds": [785, 1730],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow DIV class='composited container'",
           "position": [18, 10],
           "bounds": [749, 144],
           "children": [
             {
+              "name": "LayoutImage IMG class='hidden composited box'",
               "position": [20, 20],
               "bounds": [100, 100]
             }
           ]
         },
         {
+          "name": "LayoutBlockFlow DIV class='composited hidden container'",
           "position": [14, 160],
           "bounds": [757, 152],
           "drawsContent": true,
           "children": [
             {
+              "name": "LayoutImage IMG class='composited box'",
               "position": [24, 24],
               "bounds": [100, 100]
             }
           ]
         },
         {
+          "name": "LayoutBlockFlow DIV class='composited hidden container'",
           "position": [14, 314],
           "bounds": [757, 152],
           "contentsVisible": false,
           "children": [
             {
+              "name": "LayoutImage IMG class='visible composited box'",
               "position": [24, 24],
               "bounds": [100, 100]
             }
diff --git a/third_party/WebKit/LayoutTests/platform/win/compositing/geometry/layer-due-to-layer-children-deep-switch-expected.txt b/third_party/WebKit/LayoutTests/platform/win/compositing/geometry/layer-due-to-layer-children-deep-switch-expected.txt
index 26139eb..368630e 100644
--- a/third_party/WebKit/LayoutTests/platform/win/compositing/geometry/layer-due-to-layer-children-deep-switch-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/compositing/geometry/layer-due-to-layer-children-deep-switch-expected.txt
@@ -3,9 +3,11 @@
 
 First dump layer tree:
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true
@@ -15,19 +17,23 @@
 
 Second dump layer tree:
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow (relative positioned) DIV id='parent'",
           "position": [8, 8],
           "bounds": [342, 292],
           "drawsContent": true,
           "children": [
             {
+              "name": "LayoutBlockFlow (relative positioned) DIV id='child'",
               "position": [31, 39],
               "bounds": [250, 220],
               "contentsOpaque": true,
@@ -35,6 +41,7 @@
               "backgroundColor": "#0000FF",
               "children": [
                 {
+                  "name": "LayoutBlockFlow (relative positioned) DIV id='grandchild'",
                   "position": [10, 10],
                   "bounds": [200, 200],
                   "contentsOpaque": true,
@@ -48,6 +55,7 @@
                   ],
                   "children": [
                     {
+                      "name": "LayoutBlockFlow (relative positioned) DIV id='greatgrandchild'",
                       "position": [99, 0],
                       "transformOrigin": [126, 50],
                       "bounds": [251, 100],
@@ -73,10 +81,12 @@
 
 Third dump layer tree:
 {
-  "bounds": [785, 1446],
+  "name": "Content Root Layer",
+  "bounds": [785, 1574],
   "children": [
     {
-      "bounds": [785, 1446],
+      "name": "LayoutView #document",
+      "bounds": [785, 1574],
       "contentsOpaque": true,
       "drawsContent": true
     }
diff --git a/third_party/WebKit/LayoutTests/platform/win/compositing/geometry/layer-due-to-layer-children-switch-expected.txt b/third_party/WebKit/LayoutTests/platform/win/compositing/geometry/layer-due-to-layer-children-switch-expected.txt
index 8e864fcc..7eb215dc 100644
--- a/third_party/WebKit/LayoutTests/platform/win/compositing/geometry/layer-due-to-layer-children-switch-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/compositing/geometry/layer-due-to-layer-children-switch-expected.txt
@@ -3,9 +3,11 @@
 
 First dump layer tree:
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true
@@ -15,19 +17,23 @@
 
 Second dump layer tree:
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow (relative positioned) DIV id='parent' class='parent'",
           "position": [8, 8],
           "bounds": [242, 192],
           "drawsContent": true,
           "children": [
             {
+              "name": "LayoutBlockFlow (relative positioned) DIV id='child' class='child'",
               "position": [120, 39],
               "transformOrigin": [126, 50],
               "bounds": [251, 100],
@@ -49,10 +55,12 @@
 
 Third dump layer tree:
 {
-  "bounds": [785, 962],
+  "name": "Content Root Layer",
+  "bounds": [785, 1058],
   "children": [
     {
-      "bounds": [785, 962],
+      "name": "LayoutView #document",
+      "bounds": [785, 1058],
       "contentsOpaque": true,
       "drawsContent": true
     }
diff --git a/third_party/WebKit/LayoutTests/platform/win/compositing/geometry/limit-layer-bounds-overflow-root-expected.txt b/third_party/WebKit/LayoutTests/platform/win/compositing/geometry/limit-layer-bounds-overflow-root-expected.txt
new file mode 100644
index 0000000..6ae2be9
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/win/compositing/geometry/limit-layer-bounds-overflow-root-expected.txt
@@ -0,0 +1,31 @@
+{
+  "name": "Content Root Layer",
+  "bounds": [800, 600],
+  "children": [
+    {
+      "name": "LayoutView #document",
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "name": "Squashing Containment Layer",
+          "shouldFlattenTransform": false,
+          "children": [
+            {
+              "name": "LayoutBlockFlow (positioned) DIV class='compositing'",
+              "position": [21, 21],
+              "bounds": [100, 100]
+            },
+            {
+              "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV class='indicator')",
+              "bounds": [216, 142],
+              "drawsContent": true
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/win/compositing/geometry/preserve-3d-switching-expected.txt b/third_party/WebKit/LayoutTests/platform/win/compositing/geometry/preserve-3d-switching-expected.txt
index 54090a2..e3f6bfed 100644
--- a/third_party/WebKit/LayoutTests/platform/win/compositing/geometry/preserve-3d-switching-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/compositing/geometry/preserve-3d-switching-expected.txt
@@ -2,19 +2,23 @@
 
 transform: translateZ(-100px) rotateY(45deg);
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow (relative positioned) DIV id='container'",
           "position": [108, 72],
           "bounds": [304, 304],
           "drawsContent": true,
           "children": [
             {
+              "name": "Child Transform Layer",
               "bounds": [304, 304],
               "shouldFlattenTransform": false,
               "transform": [
@@ -25,6 +29,7 @@
               ],
               "children": [
                 {
+                  "name": "LayoutBlockFlow DIV id='parent'",
                   "position": [12, 12],
                   "bounds": [280, 280],
                   "opacity": 0.800000011920929,
@@ -41,6 +46,7 @@
                   ],
                   "children": [
                     {
+                      "name": "LayoutBlockFlow (positioned) DIV",
                       "position": [40, 40],
                       "bounds": [200, 200],
                       "opacity": 0.699999988079071,
diff --git a/third_party/WebKit/LayoutTests/platform/win/compositing/layer-creation/no-compositing-for-preserve-3d-expected.txt b/third_party/WebKit/LayoutTests/platform/win/compositing/layer-creation/no-compositing-for-preserve-3d-expected.txt
index fa764fe..1bb1f98 100644
--- a/third_party/WebKit/LayoutTests/platform/win/compositing/layer-creation/no-compositing-for-preserve-3d-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/compositing/layer-creation/no-compositing-for-preserve-3d-expected.txt
@@ -2,14 +2,17 @@
 This layer should not be composited.
 This layer should be composited.
 {
+  "name": "Content Root Layer",
   "bounds": [785, 612],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [785, 612],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow DIV class='preserve3d'",
           "position": [18, 390],
           "bounds": [342, 180],
           "shouldFlattenTransform": false,
@@ -17,6 +20,7 @@
           "drawsContent": true,
           "children": [
             {
+              "name": "LayoutBlockFlow (relative positioned) DIV class='box'",
               "position": [31, 49],
               "bounds": [100, 100],
               "contentsOpaque": true,
diff --git a/third_party/WebKit/LayoutTests/platform/win/compositing/overflow/selection-gaps-after-removing-scrolling-contents-expected.txt b/third_party/WebKit/LayoutTests/platform/win/compositing/overflow/selection-gaps-after-removing-scrolling-contents-expected.txt
index 6de1e896..02d857c 100644
--- a/third_party/WebKit/LayoutTests/platform/win/compositing/overflow/selection-gaps-after-removing-scrolling-contents-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/compositing/overflow/selection-gaps-after-removing-scrolling-contents-expected.txt
@@ -14,14 +14,17 @@
 *** iteration 1: ***
 
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow DIV id='container'",
           "position": [8, 80],
           "bounds": [300, 500],
           "contentsOpaque": true,
@@ -30,27 +33,33 @@
           "backgroundColor": "#0000FF",
           "children": [
             {
+              "name": "Scrolling Layer",
               "bounds": [285, 485],
               "shouldFlattenTransform": false,
               "children": [
                 {
+                  "name": "Scrolling Contents Layer",
                   "bounds": [285, 665],
                   "drawsContent": true
                 }
               ]
             },
             {
+              "name": "Overflow Controls Host Layer",
               "bounds": [300, 500],
               "children": [
                 {
+                  "name": "Horizontal Scrollbar Layer",
                   "position": [0, 485],
                   "bounds": [285, 15]
                 },
                 {
+                  "name": "Vertical Scrollbar Layer",
                   "position": [285, 0],
                   "bounds": [15, 485]
                 },
                 {
+                  "name": "Scroll Corner Layer",
                   "position": [285, 485],
                   "bounds": [15, 15],
                   "drawsContent": true
@@ -60,6 +69,7 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 95],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -67,6 +77,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 160],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -74,6 +85,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV id='selection' class='scrolled'",
           "position": [23, 225],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -81,6 +93,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 290],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -88,6 +101,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 355],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -95,6 +109,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 420],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -102,6 +117,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 485],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -109,6 +125,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 550],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -116,6 +133,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 615],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -123,6 +141,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 680],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -138,14 +157,17 @@
 *** iteration 2: ***
 
 {
-  "bounds": [785, 2590],
+  "name": "Content Root Layer",
+  "bounds": [785, 2894],
   "children": [
     {
-      "bounds": [785, 2590],
+      "name": "LayoutView #document",
+      "bounds": [785, 2894],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow DIV id='container'",
           "position": [8, 80],
           "bounds": [300, 500],
           "contentsOpaque": true,
@@ -154,27 +176,33 @@
           "backgroundColor": "#0000FF",
           "children": [
             {
+              "name": "Scrolling Layer",
               "bounds": [285, 485],
               "shouldFlattenTransform": false,
               "children": [
                 {
+                  "name": "Scrolling Contents Layer",
                   "bounds": [285, 665],
                   "drawsContent": true
                 }
               ]
             },
             {
+              "name": "Overflow Controls Host Layer",
               "bounds": [300, 500],
               "children": [
                 {
+                  "name": "Horizontal Scrollbar Layer",
                   "position": [0, 485],
                   "bounds": [285, 15]
                 },
                 {
+                  "name": "Vertical Scrollbar Layer",
                   "position": [285, 0],
                   "bounds": [15, 485]
                 },
                 {
+                  "name": "Scroll Corner Layer",
                   "position": [285, 485],
                   "bounds": [15, 15],
                   "drawsContent": true
@@ -184,6 +212,7 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 95],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -191,6 +220,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 160],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -198,6 +228,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV id='selection' class='scrolled'",
           "position": [23, 225],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -205,6 +236,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 290],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -212,6 +244,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 355],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -219,6 +252,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 420],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -226,6 +260,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 485],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -233,6 +268,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 550],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -240,6 +276,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 615],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -247,6 +284,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 680],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -262,40 +300,49 @@
 *** iteration 3: ***
 
 {
-  "bounds": [785, 4574],
+  "name": "Content Root Layer",
+  "bounds": [785, 5182],
   "children": [
     {
-      "bounds": [785, 4574],
+      "name": "LayoutView #document",
+      "bounds": [785, 5182],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow DIV id='container'",
           "position": [8, 80],
           "bounds": [300, 500],
           "shouldFlattenTransform": false,
           "drawsContent": true,
           "children": [
             {
+              "name": "Scrolling Layer",
               "bounds": [285, 485],
               "shouldFlattenTransform": false,
               "children": [
                 {
+                  "name": "Scrolling Contents Layer",
                   "bounds": [285, 665]
                 }
               ]
             },
             {
+              "name": "Overflow Controls Host Layer",
               "bounds": [300, 500],
               "children": [
                 {
+                  "name": "Horizontal Scrollbar Layer",
                   "position": [0, 485],
                   "bounds": [285, 15]
                 },
                 {
+                  "name": "Vertical Scrollbar Layer",
                   "position": [285, 0],
                   "bounds": [15, 485]
                 },
                 {
+                  "name": "Scroll Corner Layer",
                   "position": [285, 485],
                   "bounds": [15, 15],
                   "drawsContent": true
@@ -305,6 +352,7 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 95],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -312,6 +360,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 160],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -319,6 +368,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV id='selection' class='scrolled'",
           "position": [23, 225],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -326,6 +376,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 290],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -333,6 +384,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 355],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -340,6 +392,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 420],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -347,6 +400,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 485],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -354,6 +408,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 550],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -361,6 +416,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 615],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -368,6 +424,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 680],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -383,40 +440,49 @@
 *** iteration 4: ***
 
 {
-  "bounds": [785, 6510],
+  "name": "Content Root Layer",
+  "bounds": [785, 7422],
   "children": [
     {
-      "bounds": [785, 6510],
+      "name": "LayoutView #document",
+      "bounds": [785, 7422],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow DIV id='container'",
           "position": [8, 80],
           "bounds": [300, 500],
           "shouldFlattenTransform": false,
           "drawsContent": true,
           "children": [
             {
+              "name": "Scrolling Layer",
               "bounds": [285, 485],
               "shouldFlattenTransform": false,
               "children": [
                 {
+                  "name": "Scrolling Contents Layer",
                   "bounds": [285, 665]
                 }
               ]
             },
             {
+              "name": "Overflow Controls Host Layer",
               "bounds": [300, 500],
               "children": [
                 {
+                  "name": "Horizontal Scrollbar Layer",
                   "position": [0, 485],
                   "bounds": [285, 15]
                 },
                 {
+                  "name": "Vertical Scrollbar Layer",
                   "position": [285, 0],
                   "bounds": [15, 485]
                 },
                 {
+                  "name": "Scroll Corner Layer",
                   "position": [285, 485],
                   "bounds": [15, 15],
                   "drawsContent": true
@@ -426,6 +492,7 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 95],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -433,6 +500,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 160],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -440,6 +508,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV id='selection' class='scrolled'",
           "position": [23, 225],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -447,6 +516,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 290],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -454,6 +524,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 355],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -461,6 +532,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 420],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -468,6 +540,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 485],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -475,6 +548,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 550],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -482,6 +556,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 615],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -489,6 +564,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 680],
           "bounds": [100, 50],
           "contentsOpaque": true,
diff --git a/third_party/WebKit/LayoutTests/platform/win/compositing/overflow/selection-gaps-toggling-expected.txt b/third_party/WebKit/LayoutTests/platform/win/compositing/overflow/selection-gaps-toggling-expected.txt
index 6d2416b..fcade17 100644
--- a/third_party/WebKit/LayoutTests/platform/win/compositing/overflow/selection-gaps-toggling-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/compositing/overflow/selection-gaps-toggling-expected.txt
@@ -14,40 +14,49 @@
 *** iteration 1: ***
 
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow DIV class='container'",
           "position": [8, 62],
           "bounds": [300, 500],
           "shouldFlattenTransform": false,
           "drawsContent": true,
           "children": [
             {
+              "name": "Scrolling Layer",
               "bounds": [285, 485],
               "shouldFlattenTransform": false,
               "children": [
                 {
+                  "name": "Scrolling Contents Layer",
                   "bounds": [285, 665]
                 }
               ]
             },
             {
+              "name": "Overflow Controls Host Layer",
               "bounds": [300, 500],
               "children": [
                 {
+                  "name": "Horizontal Scrollbar Layer",
                   "position": [0, 485],
                   "bounds": [285, 15]
                 },
                 {
+                  "name": "Vertical Scrollbar Layer",
                   "position": [285, 0],
                   "bounds": [15, 485]
                 },
                 {
+                  "name": "Scroll Corner Layer",
                   "position": [285, 485],
                   "bounds": [15, 15],
                   "drawsContent": true
@@ -57,6 +66,7 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 77],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -64,6 +74,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 142],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -71,6 +82,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV id='selection' class='scrolled'",
           "position": [23, 207],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -78,6 +90,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 272],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -85,6 +98,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 337],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -92,6 +106,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 402],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -99,6 +114,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 467],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -106,6 +122,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 532],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -113,6 +130,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 597],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -120,6 +138,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 662],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -135,40 +154,49 @@
 *** iteration 2: ***
 
 {
-  "bounds": [785, 2524],
+  "name": "Content Root Layer",
+  "bounds": [785, 2828],
   "children": [
     {
-      "bounds": [785, 2524],
+      "name": "LayoutView #document",
+      "bounds": [785, 2828],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow DIV class='container'",
           "position": [8, 62],
           "bounds": [300, 500],
           "shouldFlattenTransform": false,
           "drawsContent": true,
           "children": [
             {
+              "name": "Scrolling Layer",
               "bounds": [285, 485],
               "shouldFlattenTransform": false,
               "children": [
                 {
+                  "name": "Scrolling Contents Layer",
                   "bounds": [285, 665]
                 }
               ]
             },
             {
+              "name": "Overflow Controls Host Layer",
               "bounds": [300, 500],
               "children": [
                 {
+                  "name": "Horizontal Scrollbar Layer",
                   "position": [0, 485],
                   "bounds": [285, 15]
                 },
                 {
+                  "name": "Vertical Scrollbar Layer",
                   "position": [285, 0],
                   "bounds": [15, 485]
                 },
                 {
+                  "name": "Scroll Corner Layer",
                   "position": [285, 485],
                   "bounds": [15, 15],
                   "drawsContent": true
@@ -178,6 +206,7 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 77],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -185,6 +214,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 142],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -192,6 +222,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV id='selection' class='scrolled'",
           "position": [23, 207],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -199,6 +230,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 272],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -206,6 +238,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 337],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -213,6 +246,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 402],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -220,6 +254,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 467],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -227,6 +262,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 532],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -234,6 +270,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 597],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -241,6 +278,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 662],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -256,40 +294,49 @@
 *** iteration 3: ***
 
 {
-  "bounds": [785, 4460],
+  "name": "Content Root Layer",
+  "bounds": [785, 5068],
   "children": [
     {
-      "bounds": [785, 4460],
+      "name": "LayoutView #document",
+      "bounds": [785, 5068],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow DIV class='container'",
           "position": [8, 62],
           "bounds": [300, 500],
           "shouldFlattenTransform": false,
           "drawsContent": true,
           "children": [
             {
+              "name": "Scrolling Layer",
               "bounds": [285, 485],
               "shouldFlattenTransform": false,
               "children": [
                 {
+                  "name": "Scrolling Contents Layer",
                   "bounds": [285, 665]
                 }
               ]
             },
             {
+              "name": "Overflow Controls Host Layer",
               "bounds": [300, 500],
               "children": [
                 {
+                  "name": "Horizontal Scrollbar Layer",
                   "position": [0, 485],
                   "bounds": [285, 15]
                 },
                 {
+                  "name": "Vertical Scrollbar Layer",
                   "position": [285, 0],
                   "bounds": [15, 485]
                 },
                 {
+                  "name": "Scroll Corner Layer",
                   "position": [285, 485],
                   "bounds": [15, 15],
                   "drawsContent": true
@@ -299,6 +346,7 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 77],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -306,6 +354,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 142],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -313,6 +362,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV id='selection' class='scrolled'",
           "position": [23, 207],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -320,6 +370,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 272],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -327,6 +378,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 337],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -334,6 +386,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 402],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -341,6 +394,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 467],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -348,6 +402,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 532],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -355,6 +410,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 597],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -362,6 +418,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 662],
           "bounds": [100, 50],
           "contentsOpaque": true,
diff --git a/third_party/WebKit/LayoutTests/platform/win/compositing/overflow/selection-gaps-toggling-with-scrolling-contents-expected.txt b/third_party/WebKit/LayoutTests/platform/win/compositing/overflow/selection-gaps-toggling-with-scrolling-contents-expected.txt
index daed0fe..f6692d5 100644
--- a/third_party/WebKit/LayoutTests/platform/win/compositing/overflow/selection-gaps-toggling-with-scrolling-contents-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/compositing/overflow/selection-gaps-toggling-with-scrolling-contents-expected.txt
@@ -14,40 +14,49 @@
 *** iteration 1: ***
 
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow DIV id='container'",
           "position": [8, 80],
           "bounds": [300, 500],
           "shouldFlattenTransform": false,
           "drawsContent": true,
           "children": [
             {
+              "name": "Scrolling Layer",
               "bounds": [285, 485],
               "shouldFlattenTransform": false,
               "children": [
                 {
+                  "name": "Scrolling Contents Layer",
                   "bounds": [285, 665]
                 }
               ]
             },
             {
+              "name": "Overflow Controls Host Layer",
               "bounds": [300, 500],
               "children": [
                 {
+                  "name": "Horizontal Scrollbar Layer",
                   "position": [0, 485],
                   "bounds": [285, 15]
                 },
                 {
+                  "name": "Vertical Scrollbar Layer",
                   "position": [285, 0],
                   "bounds": [15, 485]
                 },
                 {
+                  "name": "Scroll Corner Layer",
                   "position": [285, 485],
                   "bounds": [15, 15],
                   "drawsContent": true
@@ -57,6 +66,7 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 95],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -64,6 +74,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 160],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -71,6 +82,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV id='selection' class='scrolled'",
           "position": [23, 225],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -78,6 +90,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 290],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -85,6 +98,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 355],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -92,6 +106,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 420],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -99,6 +114,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 485],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -106,6 +122,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 550],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -113,6 +130,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 615],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -120,6 +138,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 680],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -135,14 +154,17 @@
 *** iteration 2: ***
 
 {
-  "bounds": [785, 2542],
+  "name": "Content Root Layer",
+  "bounds": [785, 2846],
   "children": [
     {
-      "bounds": [785, 2542],
+      "name": "LayoutView #document",
+      "bounds": [785, 2846],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow DIV id='container'",
           "position": [8, 80],
           "bounds": [300, 500],
           "contentsOpaque": true,
@@ -151,27 +173,33 @@
           "backgroundColor": "#0000FF",
           "children": [
             {
+              "name": "Scrolling Layer",
               "bounds": [285, 485],
               "shouldFlattenTransform": false,
               "children": [
                 {
+                  "name": "Scrolling Contents Layer",
                   "bounds": [285, 665],
                   "drawsContent": true
                 }
               ]
             },
             {
+              "name": "Overflow Controls Host Layer",
               "bounds": [300, 500],
               "children": [
                 {
+                  "name": "Horizontal Scrollbar Layer",
                   "position": [0, 485],
                   "bounds": [285, 15]
                 },
                 {
+                  "name": "Vertical Scrollbar Layer",
                   "position": [285, 0],
                   "bounds": [15, 485]
                 },
                 {
+                  "name": "Scroll Corner Layer",
                   "position": [285, 485],
                   "bounds": [15, 15],
                   "drawsContent": true
@@ -181,6 +209,7 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 95],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -188,6 +217,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 160],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -195,6 +225,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV id='selection' class='scrolled'",
           "position": [23, 225],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -202,6 +233,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 290],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -209,6 +241,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 355],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -216,6 +249,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 420],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -223,6 +257,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 485],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -230,6 +265,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 550],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -237,6 +273,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 615],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -244,6 +281,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 680],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -259,14 +297,17 @@
 *** iteration 3: ***
 
 {
-  "bounds": [785, 4526],
+  "name": "Content Root Layer",
+  "bounds": [785, 5134],
   "children": [
     {
-      "bounds": [785, 4526],
+      "name": "LayoutView #document",
+      "bounds": [785, 5134],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow DIV id='container'",
           "position": [8, 80],
           "bounds": [300, 500],
           "contentsOpaque": true,
@@ -275,27 +316,33 @@
           "backgroundColor": "#0000FF",
           "children": [
             {
+              "name": "Scrolling Layer",
               "bounds": [285, 485],
               "shouldFlattenTransform": false,
               "children": [
                 {
+                  "name": "Scrolling Contents Layer",
                   "bounds": [285, 665],
                   "drawsContent": true
                 }
               ]
             },
             {
+              "name": "Overflow Controls Host Layer",
               "bounds": [300, 500],
               "children": [
                 {
+                  "name": "Horizontal Scrollbar Layer",
                   "position": [0, 485],
                   "bounds": [285, 15]
                 },
                 {
+                  "name": "Vertical Scrollbar Layer",
                   "position": [285, 0],
                   "bounds": [15, 485]
                 },
                 {
+                  "name": "Scroll Corner Layer",
                   "position": [285, 485],
                   "bounds": [15, 15],
                   "drawsContent": true
@@ -305,6 +352,7 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 95],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -312,6 +360,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 160],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -319,6 +368,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV id='selection' class='scrolled'",
           "position": [23, 225],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -326,6 +376,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 290],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -333,6 +384,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 355],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -340,6 +392,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 420],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -347,6 +400,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 485],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -354,6 +408,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 550],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -361,6 +416,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 615],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -368,6 +424,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 680],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -383,40 +440,49 @@
 *** iteration 4: ***
 
 {
-  "bounds": [785, 6510],
+  "name": "Content Root Layer",
+  "bounds": [785, 7422],
   "children": [
     {
-      "bounds": [785, 6510],
+      "name": "LayoutView #document",
+      "bounds": [785, 7422],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow DIV id='container'",
           "position": [8, 80],
           "bounds": [300, 500],
           "shouldFlattenTransform": false,
           "drawsContent": true,
           "children": [
             {
+              "name": "Scrolling Layer",
               "bounds": [285, 485],
               "shouldFlattenTransform": false,
               "children": [
                 {
+                  "name": "Scrolling Contents Layer",
                   "bounds": [285, 665]
                 }
               ]
             },
             {
+              "name": "Overflow Controls Host Layer",
               "bounds": [300, 500],
               "children": [
                 {
+                  "name": "Horizontal Scrollbar Layer",
                   "position": [0, 485],
                   "bounds": [285, 15]
                 },
                 {
+                  "name": "Vertical Scrollbar Layer",
                   "position": [285, 0],
                   "bounds": [15, 485]
                 },
                 {
+                  "name": "Scroll Corner Layer",
                   "position": [285, 485],
                   "bounds": [15, 15],
                   "drawsContent": true
@@ -426,6 +492,7 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 95],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -433,6 +500,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 160],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -440,6 +508,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV id='selection' class='scrolled'",
           "position": [23, 225],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -447,6 +516,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 290],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -454,6 +524,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 355],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -461,6 +532,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 420],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -468,6 +540,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 485],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -475,6 +548,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 550],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -482,6 +556,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 615],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -489,6 +564,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 680],
           "bounds": [100, 50],
           "contentsOpaque": true,
diff --git a/third_party/WebKit/LayoutTests/platform/win/compositing/overflow/text-color-change-expected.txt b/third_party/WebKit/LayoutTests/platform/win/compositing/overflow/text-color-change-expected.txt
index 2943eaa..f30cc5c 100644
--- a/third_party/WebKit/LayoutTests/platform/win/compositing/overflow/text-color-change-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/compositing/overflow/text-color-change-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -10,337 +12,343 @@
           "object": "LayoutText #text",
           "rect": [8, 57, 48, 185],
           "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '  Text'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '  Text'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '  Text'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '  Text'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '  Text'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '  Text'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '  Text'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '  Text'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '  Text'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '  Text'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '  Text'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '  Text'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '  Text'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '  Text'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '  Text'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '  Text'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '  Text'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '  Text'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '  Text'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '  Text'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '  Text'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '  Text'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '  Text'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '  Text'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '  Text'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '  Text'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '  Text'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '  Text'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '  Text'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '  Text'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '  Text'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '  Text'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '  Text'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '  Text'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '  Text'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '  Text'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '  Text'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '  Text'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '  Text'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '  Text'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '  Text'",
-          "reason": "style change"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutText #text",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/win/compositing/overflow/text-match-highlight-expected.txt b/third_party/WebKit/LayoutTests/platform/win/compositing/overflow/text-match-highlight-expected.txt
index b38b232..07c25aa 100644
--- a/third_party/WebKit/LayoutTests/platform/win/compositing/overflow/text-match-highlight-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/compositing/overflow/text-match-highlight-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -45,41 +47,75 @@
           "object": "LayoutText #text",
           "rect": [52, 72, 46, 17],
           "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Can you findme in this boring text?'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Findme in a typewriter!'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Findme on a path! Did you findme?'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'findme'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'findme'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'findme'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'findme'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'findme'",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutText #text",
+      "reason": "full"
+    },
+    {
+      "object": "InlineTextBox 'findme'",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "full"
+    },
+    {
+      "object": "InlineTextBox 'findme'",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "full"
+    },
+    {
+      "object": "InlineTextBox 'findme'",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "full"
+    },
+    {
+      "object": "InlineTextBox 'findme'",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "full"
+    },
+    {
+      "object": "InlineTextBox 'findme'",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "full"
+    },
+    {
+      "object": "InlineTextBox 'Can you findme in this boring text?'",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "full"
+    },
+    {
+      "object": "InlineTextBox 'Findme in a typewriter!'",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "full"
+    },
+    {
+      "object": "InlineTextBox 'Findme on a path! Did you findme?'",
+      "reason": "full"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/win/compositing/overflow/textarea-scroll-touch-expected.txt b/third_party/WebKit/LayoutTests/platform/win/compositing/overflow/textarea-scroll-touch-expected.txt
index 06a89a1..650f75ec 100644
--- a/third_party/WebKit/LayoutTests/platform/win/compositing/overflow/textarea-scroll-touch-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/compositing/overflow/textarea-scroll-touch-expected.txt
@@ -1,13 +1,16 @@
   
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutTextControl TEXTAREA",
           "position": [18, 18],
           "bounds": [206, 126],
           "contentsOpaque": true,
@@ -16,24 +19,29 @@
           "backgroundColor": "#CCCCCC",
           "children": [
             {
+              "name": "Scrolling Layer",
               "position": [1, 1],
               "bounds": [189, 124],
               "shouldFlattenTransform": false,
               "children": [
                 {
+                  "name": "Scrolling Contents Layer",
                   "bounds": [189, 337],
                   "drawsContent": true
                 }
               ]
             },
             {
+              "name": "Overflow Controls Host Layer",
               "bounds": [206, 126],
               "children": [
                 {
+                  "name": "Vertical Scrollbar Layer",
                   "position": [190, 1],
                   "bounds": [15, 109]
                 },
                 {
+                  "name": "Scroll Corner Layer",
                   "position": [190, 110],
                   "bounds": [15, 15],
                   "drawsContent": true
@@ -43,6 +51,7 @@
           ]
         },
         {
+          "name": "LayoutTextControl TEXTAREA",
           "position": [248, 18],
           "bounds": [206, 126],
           "contentsOpaque": true,
@@ -51,24 +60,29 @@
           "backgroundColor": "#CCCCCC",
           "children": [
             {
+              "name": "Scrolling Layer",
               "position": [1, 1],
               "bounds": [189, 124],
               "shouldFlattenTransform": false,
               "children": [
                 {
+                  "name": "Scrolling Contents Layer",
                   "bounds": [189, 337],
                   "drawsContent": true
                 }
               ]
             },
             {
+              "name": "Overflow Controls Host Layer",
               "bounds": [206, 126],
               "children": [
                 {
+                  "name": "Vertical Scrollbar Layer",
                   "position": [190, 1],
                   "bounds": [15, 109]
                 },
                 {
+                  "name": "Scroll Corner Layer",
                   "position": [190, 110],
                   "bounds": [15, 15],
                   "drawsContent": true
diff --git a/third_party/WebKit/LayoutTests/platform/win/compositing/repaint/fixed-pos-with-abs-pos-child-scroll-expected.txt b/third_party/WebKit/LayoutTests/platform/win/compositing/repaint/fixed-pos-with-abs-pos-child-scroll-expected.txt
index bf2f034..e650e4b 100644
--- a/third_party/WebKit/LayoutTests/platform/win/compositing/repaint/fixed-pos-with-abs-pos-child-scroll-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/compositing/repaint/fixed-pos-with-abs-pos-child-scroll-expected.txt
@@ -1,8 +1,10 @@
 Hi!
 {
+  "name": "Content Root Layer",
   "bounds": [785, 4021],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [785, 4021],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -46,33 +48,51 @@
           "object": "LayoutText #text",
           "rect": [425, 480, 22, 17],
           "reason": "subtree"
-        },
-        {
-          "object": "InlineTextBox 'Hi!'",
-          "reason": "subtree"
-        },
-        {
-          "object": "InlineTextBox 'Hi!'",
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutBlockFlow (positioned) DIV id='fixed'",
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutBlockFlow (positioned) DIV id='fixed'",
-          "reason": "subtree"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "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/compositing/squashing/iframe-inside-squashed-layer-expected.txt b/third_party/WebKit/LayoutTests/platform/win/compositing/squashing/iframe-inside-squashed-layer-expected.txt
index dd52ebf..690afc9 100644
--- a/third_party/WebKit/LayoutTests/platform/win/compositing/squashing/iframe-inside-squashed-layer-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/compositing/squashing/iframe-inside-squashed-layer-expected.txt
@@ -1,15 +1,19 @@
 {
+  "name": "Content Root Layer",
   "bounds": [785, 1016],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [785, 1016],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "Squashing Containment Layer",
           "shouldFlattenTransform": false,
           "children": [
             {
+              "name": "LayoutBlockFlow DIV id='foo'",
               "position": [8, 8],
               "bounds": [200, 1000],
               "contentsOpaque": true,
@@ -17,6 +21,7 @@
               "backgroundColor": "#D3D3D3"
             },
             {
+              "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV)",
               "position": [8, 0],
               "bounds": [300, 653],
               "drawsContent": true,
@@ -55,34 +60,6 @@
                   "object": "LayoutView #document",
                   "rect": [285, 500, 15, 150],
                   "reason": "scroll"
-                },
-                {
-                  "object": "InlineTextBox 'test1'",
-                  "reason": "full"
-                },
-                {
-                  "object": "InlineTextBox 'test1'",
-                  "reason": "full"
-                },
-                {
-                  "object": "LayoutView #document",
-                  "reason": "scroll"
-                },
-                {
-                  "object": "RootInlineBox",
-                  "reason": "full"
-                },
-                {
-                  "object": "RootInlineBox",
-                  "reason": "full"
-                },
-                {
-                  "object": "RootInlineBox",
-                  "reason": "full"
-                },
-                {
-                  "object": "VerticalScrollbar",
-                  "reason": "scroll"
                 }
               ]
             }
diff --git a/third_party/WebKit/LayoutTests/platform/win/compositing/squashing/no-squashing-into-another-clip-layer-expected.txt b/third_party/WebKit/LayoutTests/platform/win/compositing/squashing/no-squashing-into-another-clip-layer-expected.txt
new file mode 100644
index 0000000..08142c1
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/win/compositing/squashing/no-squashing-into-another-clip-layer-expected.txt
@@ -0,0 +1,45 @@
+{
+  "name": "Content Root Layer",
+  "bounds": [800, 600],
+  "children": [
+    {
+      "name": "LayoutView #document",
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "name": "LayoutBlockFlow DIV",
+          "position": [8, 8],
+          "bounds": [784, 10],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#ADD8E6",
+          "children": [
+            {
+              "name": "Child Containment Layer",
+              "bounds": [784, 10],
+              "children": [
+                {
+                  "name": "LayoutBlockFlow DIV id='inner'",
+                  "bounds": [784, 10],
+                  "contentsOpaque": true,
+                  "drawsContent": true,
+                  "backgroundColor": "#F5F5F5"
+                }
+              ]
+            }
+          ]
+        },
+        {
+          "name": "LayoutBlockFlow (positioned) DIV class='hoverable'",
+          "position": [8, 0],
+          "bounds": [216, 100],
+          "drawsContent": true,
+          "backgroundColor": "#90EE90"
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/win/compositing/squashing/remove-squashed-layer-plus-move-expected.txt b/third_party/WebKit/LayoutTests/platform/win/compositing/squashing/remove-squashed-layer-plus-move-expected.txt
index f94b009..3804c20 100644
--- a/third_party/WebKit/LayoutTests/platform/win/compositing/squashing/remove-squashed-layer-plus-move-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/compositing/squashing/remove-squashed-layer-plus-move-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [1418, 1008],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [1418, 1008],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -25,41 +27,20 @@
           "object": "LayoutBlockFlow DIV id='container'",
           "rect": [8, 62, 769, 54],
           "reason": "incremental"
-        },
-        {
-          "object": "LayoutText #text",
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutText #text",
-          "reason": "bounds change"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ],
       "children": [
         {
+          "name": "Squashing Containment Layer",
           "shouldFlattenTransform": false,
           "children": [
             {
+              "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,
@@ -88,14 +69,6 @@
                   "object": "LayoutBlockFlow (relative positioned) DIV id='foo' class='mv-tile'",
                   "rect": [0, 0, 100, 50],
                   "reason": "layoutObject removal"
-                },
-                {
-                  "object": "InlineBox",
-                  "reason": "full"
-                },
-                {
-                  "object": "InlineBox",
-                  "reason": "full"
                 }
               ]
             }
@@ -103,6 +76,56 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (relative positioned) DIV id='foo' class='mv-tile'",
+      "reason": "layoutObject removal"
+    },
+    {
+      "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": "incremental"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='container'",
+      "reason": "invalidate paint rectangle"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutBlockFlow (relative positioned) DIV class='mv-tile'",
+      "reason": "compositing update"
+    },
+    {
+      "object": "LayoutBlockFlow (anonymous)",
+      "reason": "bounds change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow (relative positioned) DIV class='mv-tile'",
+      "reason": "compositing update"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/win/compositing/squashing/selection-repaint-with-gaps-expected.txt b/third_party/WebKit/LayoutTests/platform/win/compositing/squashing/selection-repaint-with-gaps-expected.txt
index f39d5114..09ed903 100644
--- a/third_party/WebKit/LayoutTests/platform/win/compositing/squashing/selection-repaint-with-gaps-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/compositing/squashing/selection-repaint-with-gaps-expected.txt
@@ -1,20 +1,25 @@
 lorem ipsumlorem ipsumlorem ipsum
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "Squashing Containment Layer",
           "shouldFlattenTransform": false,
           "children": [
             {
+              "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,
@@ -28,30 +33,6 @@
                   "object": "LayoutText #text",
                   "rect": [40, 80, 2, 36],
                   "reason": "incremental"
-                },
-                {
-                  "object": "InlineTextBox 'ipsum'",
-                  "reason": "incremental"
-                },
-                {
-                  "object": "InlineTextBox 'ipsum'",
-                  "reason": "selection"
-                },
-                {
-                  "object": "InlineTextBox 'lorem'",
-                  "reason": "incremental"
-                },
-                {
-                  "object": "InlineTextBox 'lorem'",
-                  "reason": "selection"
-                },
-                {
-                  "object": "LayoutBlockFlow (positioned) DIV id='item1' class='item'",
-                  "reason": "selection"
-                },
-                {
-                  "object": "LayoutBlockFlow DIV class='inline-block'",
-                  "reason": "selection"
                 }
               ]
             }
@@ -59,24 +40,63 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='item1' class='item'",
+      "reason": "selection"
+    },
+    {
+      "object": "LayoutBlockFlow DIV class='inline-block'",
+      "reason": "selection"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "selection"
+    },
+    {
+      "object": "InlineTextBox 'lorem'",
+      "reason": "selection"
+    },
+    {
+      "object": "InlineTextBox 'ipsum'",
+      "reason": "selection"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "incremental"
+    },
+    {
+      "object": "InlineTextBox 'lorem'",
+      "reason": "incremental"
+    },
+    {
+      "object": "InlineTextBox 'ipsum'",
+      "reason": "incremental"
+    }
   ]
 }
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "Squashing Containment Layer",
           "shouldFlattenTransform": false,
           "children": [
             {
+              "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,
@@ -100,54 +120,6 @@
                   "object": "LayoutText #text",
                   "rect": [40, 160, 2, 36],
                   "reason": "incremental"
-                },
-                {
-                  "object": "InlineTextBox 'ipsum'",
-                  "reason": "incremental"
-                },
-                {
-                  "object": "InlineTextBox 'ipsum'",
-                  "reason": "incremental"
-                },
-                {
-                  "object": "InlineTextBox 'ipsum'",
-                  "reason": "selection"
-                },
-                {
-                  "object": "InlineTextBox 'ipsum'",
-                  "reason": "selection"
-                },
-                {
-                  "object": "InlineTextBox 'lorem'",
-                  "reason": "incremental"
-                },
-                {
-                  "object": "InlineTextBox 'lorem'",
-                  "reason": "incremental"
-                },
-                {
-                  "object": "InlineTextBox 'lorem'",
-                  "reason": "selection"
-                },
-                {
-                  "object": "InlineTextBox 'lorem'",
-                  "reason": "selection"
-                },
-                {
-                  "object": "LayoutBlockFlow (positioned) DIV id='item1' class='item'",
-                  "reason": "selection"
-                },
-                {
-                  "object": "LayoutBlockFlow (positioned) DIV id='item2' class='item'",
-                  "reason": "selection"
-                },
-                {
-                  "object": "LayoutBlockFlow DIV class='inline-block'",
-                  "reason": "selection"
-                },
-                {
-                  "object": "LayoutBlockFlow DIV class='inline-block'",
-                  "reason": "selection"
                 }
               ]
             }
@@ -155,6 +127,72 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='item1' class='item'",
+      "reason": "selection"
+    },
+    {
+      "object": "LayoutBlockFlow DIV class='inline-block'",
+      "reason": "selection"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "selection"
+    },
+    {
+      "object": "InlineTextBox 'lorem'",
+      "reason": "selection"
+    },
+    {
+      "object": "InlineTextBox 'ipsum'",
+      "reason": "selection"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "incremental"
+    },
+    {
+      "object": "InlineTextBox 'lorem'",
+      "reason": "incremental"
+    },
+    {
+      "object": "InlineTextBox 'ipsum'",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='item2' class='item'",
+      "reason": "selection"
+    },
+    {
+      "object": "LayoutBlockFlow DIV class='inline-block'",
+      "reason": "selection"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "selection"
+    },
+    {
+      "object": "InlineTextBox 'lorem'",
+      "reason": "selection"
+    },
+    {
+      "object": "InlineTextBox 'ipsum'",
+      "reason": "selection"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "incremental"
+    },
+    {
+      "object": "InlineTextBox 'lorem'",
+      "reason": "incremental"
+    },
+    {
+      "object": "InlineTextBox 'ipsum'",
+      "reason": "incremental"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/win/compositing/video/video-poster-expected.txt b/third_party/WebKit/LayoutTests/platform/win/compositing/video/video-poster-expected.txt
index 39b1e7c..d597bff2 100644
--- a/third_party/WebKit/LayoutTests/platform/win/compositing/video/video-poster-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/compositing/video/video-poster-expected.txt
@@ -3,9 +3,11 @@
 
 Case: No src, no poster
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true
@@ -16,10 +18,12 @@
 
 Case: Displaying poster
 {
-  "bounds": [785, 601],
+  "name": "Content Root Layer",
+  "bounds": [785, 633],
   "children": [
     {
-      "bounds": [785, 601],
+      "name": "LayoutView #document",
+      "bounds": [785, 633],
       "contentsOpaque": true,
       "drawsContent": true
     }
@@ -29,26 +33,32 @@
 
 Case: Displaying movie
 {
-  "bounds": [785, 809],
+  "name": "Content Root Layer",
+  "bounds": [785, 873],
   "children": [
     {
-      "bounds": [785, 809],
+      "name": "LayoutView #document",
+      "bounds": [785, 873],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutVideo VIDEO",
           "position": [8, 8],
           "bounds": [352, 288]
         },
         {
+          "name": "Squashing Containment Layer",
           "shouldFlattenTransform": false,
           "children": [
             {
+              "name": "LayoutFlexibleBox (relative positioned) DIV",
               "position": [8, 8],
               "bounds": [352, 288],
               "drawsContent": true
             },
             {
+              "name": "Squashing Layer (first squashed layer: LayoutFlexibleBox (relative positioned) DIV)",
               "position": [8, 8],
               "bounds": [352, 246],
               "drawsContent": true
diff --git a/third_party/WebKit/LayoutTests/platform/win/compositing/visibility/visibility-image-layers-dynamic-expected.txt b/third_party/WebKit/LayoutTests/platform/win/compositing/visibility/visibility-image-layers-dynamic-expected.txt
index 164a7ff2..caa27231 100644
--- a/third_party/WebKit/LayoutTests/platform/win/compositing/visibility/visibility-image-layers-dynamic-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/compositing/visibility/visibility-image-layers-dynamic-expected.txt
@@ -4,23 +4,28 @@
 Initial
 
 {
+  "name": "Content Root Layer",
   "bounds": [785, 623],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [785, 623],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow DIV class='composited container'",
           "position": [18, 10],
           "bounds": [749, 144]
         },
         {
+          "name": "LayoutBlockFlow DIV class='composited hidden container'",
           "position": [14, 314],
           "bounds": [757, 152],
           "contentsVisible": false,
           "children": [
             {
+              "name": "LayoutImage IMG class='visible composited box'",
               "position": [24, 24],
               "bounds": [100, 100]
             }
@@ -33,29 +38,35 @@
 After step 1
 
 {
-  "bounds": [785, 1075],
+  "name": "Content Root Layer",
+  "bounds": [785, 1155],
   "children": [
     {
-      "bounds": [785, 1075],
+      "name": "LayoutView #document",
+      "bounds": [785, 1155],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow DIV class='composited container'",
           "position": [18, 10],
           "bounds": [749, 144],
           "children": [
             {
+              "name": "LayoutImage IMG class='hidden composited box'",
               "position": [20, 20],
               "bounds": [100, 100]
             }
           ]
         },
         {
+          "name": "LayoutBlockFlow DIV class='composited hidden container'",
           "position": [14, 314],
           "bounds": [757, 152],
           "contentsVisible": false,
           "children": [
             {
+              "name": "LayoutImage IMG class='visible composited box'",
               "position": [24, 24],
               "bounds": [100, 100]
             }
@@ -68,40 +79,48 @@
 After step 2
 
 {
-  "bounds": [785, 1622],
+  "name": "Content Root Layer",
+  "bounds": [785, 1798],
   "children": [
     {
-      "bounds": [785, 1622],
+      "name": "LayoutView #document",
+      "bounds": [785, 1798],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow DIV class='composited container'",
           "position": [18, 10],
           "bounds": [749, 144],
           "children": [
             {
+              "name": "LayoutImage IMG class='hidden composited box'",
               "position": [20, 20],
               "bounds": [100, 100]
             }
           ]
         },
         {
+          "name": "LayoutBlockFlow DIV class='composited hidden container'",
           "position": [14, 160],
           "bounds": [757, 152],
           "drawsContent": true,
           "children": [
             {
+              "name": "LayoutImage IMG class='composited box'",
               "position": [24, 24],
               "bounds": [100, 100]
             }
           ]
         },
         {
+          "name": "LayoutBlockFlow DIV class='composited hidden container'",
           "position": [14, 314],
           "bounds": [757, 152],
           "contentsVisible": false,
           "children": [
             {
+              "name": "LayoutImage IMG class='visible composited box'",
               "position": [24, 24],
               "bounds": [100, 100]
             }
diff --git a/third_party/WebKit/LayoutTests/platform/win/css3/blending/mix-blend-mode-composited-layers-expected.txt b/third_party/WebKit/LayoutTests/platform/win/css3/blending/mix-blend-mode-composited-layers-expected.txt
index a1b9f88..ee923c6 100644
--- a/third_party/WebKit/LayoutTests/platform/win/css3/blending/mix-blend-mode-composited-layers-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/css3/blending/mix-blend-mode-composited-layers-expected.txt
@@ -1,16 +1,20 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "children": [
         {
+          "name": "LayoutBlockFlow HTML",
           "bounds": [800, 70],
           "isolate": true,
           "drawsContent": true,
           "children": [
             {
+              "name": "LayoutBlockFlow DIV",
               "position": [8, 18],
               "bounds": [10, 10],
               "blendMode": "multiply",
@@ -19,6 +23,7 @@
               "backgroundColor": "#0000FF",
               "children": [
                 {
+                  "name": "LayoutBlockFlow DIV",
                   "bounds": [10, 10],
                   "contentsOpaque": true,
                   "drawsContent": true,
diff --git a/third_party/WebKit/LayoutTests/platform/win/css3/filters/composited-layer-child-bounds-after-composited-to-sw-shadow-change-expected.txt b/third_party/WebKit/LayoutTests/platform/win/css3/filters/composited-layer-child-bounds-after-composited-to-sw-shadow-change-expected.txt
new file mode 100644
index 0000000..29b949e7
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/win/css3/filters/composited-layer-child-bounds-after-composited-to-sw-shadow-change-expected.txt
@@ -0,0 +1,63 @@
+{
+  "name": "Content Root Layer",
+  "bounds": [800, 600],
+  "children": [
+    {
+      "name": "LayoutView #document",
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "name": "LayoutBlockFlow (positioned) DIV id='composited-parent' class='compositor-painted-shadow'",
+          "position": [100, 100],
+          "bounds": [100, 100],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FF0000",
+          "children": [
+            {
+              "name": "LayoutBlockFlow (positioned) DIV id='absolutely-positioned-composited-child'",
+              "bounds": [100, 100],
+              "contentsOpaque": true,
+              "drawsContent": true,
+              "backgroundColor": "#008000"
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}
+{
+  "name": "Content Root Layer",
+  "bounds": [888, 585],
+  "children": [
+    {
+      "name": "LayoutView #document",
+      "bounds": [888, 585],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "name": "LayoutBlockFlow (positioned) DIV id='composited-parent' class='software-painted-shadow'",
+          "position": [100, 100],
+          "bounds": [100, 100],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FF0000",
+          "children": [
+            {
+              "name": "LayoutBlockFlow (positioned) DIV id='absolutely-positioned-composited-child'",
+              "bounds": [100, 100],
+              "contentsOpaque": true,
+              "drawsContent": true,
+              "backgroundColor": "#008000"
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/win/css3/flexbox/repaint-expected.txt b/third_party/WebKit/LayoutTests/platform/win/css3/flexbox/repaint-expected.txt
index 0a936aa5..a9c5213 100644
--- a/third_party/WebKit/LayoutTests/platform/win/css3/flexbox/repaint-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/css3/flexbox/repaint-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -85,181 +87,95 @@
           "object": "LayoutBlockFlow DIV id='left'",
           "rect": [138, 116, 10, 108],
           "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'Aenean laoreet dolor id urna eleifend aliquet. Nulla vel dolor'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean laoreet dolor id urna eleifend aliquet.'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean laoreet dolor id urna eleifend'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean laoreet dolor id urna eleifend'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'Lorem ipsum dolor sit amet, consectetur adipiscing elit.'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Nulla vel dolor ipsum. Aliquam ut turpis nisl, in vulputate sapien. Cum sociis natoque penatibus et'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'Sed volutpat, tellus vel varius vestibulum, purus quam mollis sapien, in condimentum leo neque sed'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'a lobortis id, faucibus id quam.'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'aliquet. Nulla vel dolor ipsum. Aliquam ut turpis nisl, in vulputate sapien. Cum sociis natoque'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'aliquet. Nulla vel dolor ipsum. Aliquam ut turpis nisl, in vulputate sapien. Cum sociis natoque'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'condimentum leo neque sed nulla. Nunc quis porta elit. Pellentesque erat lectus, ultricies a lobortis'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'condimentum leo neque sed nulla. Nunc quis porta elit. Pellentesque erat lectus, ultricies a lobortis'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'feugiat vehicula. Sed volutpat, tellus vel varius vestibulum, purus quam mollis sapien, in'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'feugiat vehicula. Sed volutpat, tellus vel varius vestibulum, purus quam mollis sapien, in'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'feugiat vehicula. Sed volutpat, tellus vel varius vestibulum,'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'id, faucibus id quam.'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'id, faucibus id quam.'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'ipsum. Aliquam ut turpis nisl, in vulputate sapien. Cum'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'magnis dis parturient montes, nascetur ridiculus mus. Sed congue magna vitae dolor feugiat vehicula.'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'nascetur ridiculus mus. Sed congue magna vitae dolor'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'nulla. Nunc quis porta elit. Pellentesque erat lectus, ultricies a lobortis id, faucibus id quam.'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'nulla. Nunc quis porta elit. Pellentesque erat lectus, ultricies'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed congue magna vitae dolor'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed congue magna vitae dolor'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'purus quam mollis sapien, in condimentum leo neque sed'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'sociis natoque penatibus et magnis dis parturient montes,'",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV id='left'",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='content'",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutBlockFlow P",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean laoreet dolor id urna eleifend'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox 'aliquet. Nulla vel dolor ipsum. Aliquam ut turpis nisl, in vulputate sapien. Cum sociis natoque'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox 'penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed congue magna vitae dolor'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox 'feugiat vehicula. Sed volutpat, tellus vel varius vestibulum, purus quam mollis sapien, in'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox 'condimentum leo neque sed nulla. Nunc quis porta elit. Pellentesque erat lectus, ultricies a lobortis'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox 'id, faucibus id quam.'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='left'",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='content'",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutBlockFlow P",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean laoreet dolor id urna eleifend aliquet.'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox 'Nulla vel dolor ipsum. Aliquam ut turpis nisl, in vulputate sapien. Cum sociis natoque penatibus et'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox 'magnis dis parturient montes, nascetur ridiculus mus. Sed congue magna vitae dolor feugiat vehicula.'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox 'Sed volutpat, tellus vel varius vestibulum, purus quam mollis sapien, in condimentum leo neque sed'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox 'nulla. Nunc quis porta elit. Pellentesque erat lectus, ultricies a lobortis id, faucibus id quam.'",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/win/editing/selection/repaint-rect-for-vertical-writing-mode-with-positioned-root-expected.txt b/third_party/WebKit/LayoutTests/platform/win/editing/selection/repaint-rect-for-vertical-writing-mode-with-positioned-root-expected.txt
index 41c8d11..fb116b8 100644
--- a/third_party/WebKit/LayoutTests/platform/win/editing/selection/repaint-rect-for-vertical-writing-mode-with-positioned-root-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/editing/selection/repaint-rect-for-vertical-writing-mode-with-positioned-root-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -10,21 +12,27 @@
           "object": "LayoutText #text",
           "rect": [186, 201, 17, 173],
           "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox 'Some text in vertical mode'",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutBlockFlow (positioned) DIV id='test'",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutBlockFlow DIV",
-          "reason": "selection"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='test'",
+      "reason": "selection"
+    },
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "selection"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "selection"
+    },
+    {
+      "object": "InlineTextBox 'Some text in vertical mode'",
+      "reason": "selection"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/forms/button/button-reset-focus-by-mouse-then-keydown-expected.txt b/third_party/WebKit/LayoutTests/platform/win/fast/forms/button/button-reset-focus-by-mouse-then-keydown-expected.txt
index 3a2a85e..fcf7120 100644
--- a/third_party/WebKit/LayoutTests/platform/win/fast/forms/button/button-reset-focus-by-mouse-then-keydown-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/fast/forms/button/button-reset-focus-by-mouse-then-keydown-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -20,17 +22,31 @@
           "object": "LayoutText #text",
           "rect": [16, 11, 34, 16],
           "reason": "subtree"
-        },
-        {
-          "object": "InlineTextBox 'Reset'",
-          "reason": "subtree"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "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/fast/forms/checkbox/checkbox-focus-by-mouse-then-keydown-expected.txt b/third_party/WebKit/LayoutTests/platform/win/fast/forms/checkbox/checkbox-focus-by-mouse-then-keydown-expected.txt
index d60ef78..7fe3542 100644
--- a/third_party/WebKit/LayoutTests/platform/win/fast/forms/checkbox/checkbox-focus-by-mouse-then-keydown-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/fast/forms/checkbox/checkbox-focus-by-mouse-then-keydown-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -13,6 +15,12 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow INPUT",
+      "reason": "subtree"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/forms/radio/radio-focus-by-mouse-then-keydown-expected.txt b/third_party/WebKit/LayoutTests/platform/win/fast/forms/radio/radio-focus-by-mouse-then-keydown-expected.txt
index 604b739..af5143a 100644
--- a/third_party/WebKit/LayoutTests/platform/win/fast/forms/radio/radio-focus-by-mouse-then-keydown-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/fast/forms/radio/radio-focus-by-mouse-then-keydown-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -13,6 +15,12 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow INPUT",
+      "reason": "subtree"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/forms/range/range-focus-by-mouse-then-keydown-expected.txt b/third_party/WebKit/LayoutTests/platform/win/fast/forms/range/range-focus-by-mouse-then-keydown-expected.txt
index 4d3309d..e9b984b 100644
--- a/third_party/WebKit/LayoutTests/platform/win/fast/forms/range/range-focus-by-mouse-then-keydown-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/fast/forms/range/range-focus-by-mouse-then-keydown-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -28,6 +30,24 @@
         }
       ]
     }
+  ],
+  "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/fast/forms/submit/submit-focus-by-mouse-then-keydown-expected.txt b/third_party/WebKit/LayoutTests/platform/win/fast/forms/submit/submit-focus-by-mouse-then-keydown-expected.txt
index eb852ae..28397c7 100644
--- a/third_party/WebKit/LayoutTests/platform/win/fast/forms/submit/submit-focus-by-mouse-then-keydown-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/fast/forms/submit/submit-focus-by-mouse-then-keydown-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -20,17 +22,31 @@
           "object": "LayoutText #text",
           "rect": [16, 11, 41, 16],
           "reason": "subtree"
-        },
-        {
-          "object": "InlineTextBox 'Submit'",
-          "reason": "subtree"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "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/fast/repaint/4776765-expected.txt b/third_party/WebKit/LayoutTests/platform/win/fast/repaint/4776765-expected.txt
index 0186c81..8ed9a42 100644
--- a/third_party/WebKit/LayoutTests/platform/win/fast/repaint/4776765-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/fast/repaint/4776765-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -25,21 +27,39 @@
           "object": "LayoutBlockFlow DIV id='div'",
           "rect": [7, 59, 3, 19],
           "reason": "invalidate paint rectangle"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "LayoutBR BR",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "outline"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='div'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutBR BR",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='div'",
+      "reason": "invalidate paint rectangle"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='div'",
+      "reason": "invalidate paint rectangle"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/repaint/abspos-shift-image-incorrect-repaint-expected.txt b/third_party/WebKit/LayoutTests/platform/win/fast/repaint/abspos-shift-image-incorrect-repaint-expected.txt
index ad095fc..7639dd38 100644
--- a/third_party/WebKit/LayoutTests/platform/win/fast/repaint/abspos-shift-image-incorrect-repaint-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/fast/repaint/abspos-shift-image-incorrect-repaint-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [1250, 585],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [1250, 585],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -75,37 +77,71 @@
           "object": "LayoutText #text",
           "rect": [450, 218, 4, 17],
           "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutText #text",
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutText #text",
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutText #text",
-          "reason": "bounds change"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutView #document",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutBlockFlow HTML",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='shiftMe'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow (relative positioned) DIV class='imageWrapper'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutImage IMG",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow (relative positioned) DIV class='imageWrapper'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutImage IMG",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/repaint/block-layout-inline-children-float-positioned-expected.txt b/third_party/WebKit/LayoutTests/platform/win/fast/repaint/block-layout-inline-children-float-positioned-expected.txt
new file mode 100644
index 0000000..421681a6
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/win/fast/repaint/block-layout-inline-children-float-positioned-expected.txt
@@ -0,0 +1,69 @@
+{
+  "name": "Content Root Layer",
+  "bounds": [800, 600],
+  "children": [
+    {
+      "name": "LayoutView #document",
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "paintInvalidations": [
+        {
+          "object": "LayoutText #text",
+          "rect": [305, 35, 297, 18],
+          "reason": "layoutObject insertion"
+        },
+        {
+          "object": "LayoutText #text",
+          "rect": [153, 35, 297, 18],
+          "reason": "layoutObject insertion"
+        },
+        {
+          "object": "LayoutBlockFlow (floating) SPAN",
+          "rect": [305, 35, 296, 18],
+          "reason": "layoutObject insertion"
+        },
+        {
+          "object": "LayoutBlockFlow (positioned) SPAN",
+          "rect": [153, 35, 296, 18],
+          "reason": "layoutObject insertion"
+        }
+      ]
+    }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (floating) SPAN",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'the quick brown fox jumped over the lazy dog'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutBlockFlow (positioned) SPAN",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'the quick brown fox jumped over the lazy dog'",
+      "reason": "layoutObject insertion"
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/repaint/block-no-inflow-children-expected.txt b/third_party/WebKit/LayoutTests/platform/win/fast/repaint/block-no-inflow-children-expected.txt
index 84196c16..b6b9cf0c 100644
--- a/third_party/WebKit/LayoutTests/platform/win/fast/repaint/block-no-inflow-children-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/fast/repaint/block-no-inflow-children-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -15,25 +17,27 @@
           "object": "LayoutText #text",
           "rect": [0, 0, 64, 17],
           "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ''",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'La la la la'",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV id='target'",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "full"
+    },
+    {
+      "object": "InlineTextBox 'La la la la'",
+      "reason": "full"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/repaint/box-inline-resize-expected.txt b/third_party/WebKit/LayoutTests/platform/win/fast/repaint/box-inline-resize-expected.txt
index a276a4f..e79a867d 100644
--- a/third_party/WebKit/LayoutTests/platform/win/fast/repaint/box-inline-resize-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/fast/repaint/box-inline-resize-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -35,33 +37,39 @@
           "object": "LayoutImage IMG id='foo'",
           "rect": [8, 84, 32, 32],
           "reason": "forced by layout"
-        },
-        {
-          "object": "InlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Chromium'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (anonymous)",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutImage IMG id='foo'",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutBlockFlow H2",
+      "reason": "bounds change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox 'Chromium'",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/repaint/bugzilla-5699-expected.txt b/third_party/WebKit/LayoutTests/platform/win/fast/repaint/bugzilla-5699-expected.txt
index e5b506a..e31cbc5f 100644
--- a/third_party/WebKit/LayoutTests/platform/win/fast/repaint/bugzilla-5699-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/fast/repaint/bugzilla-5699-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -40,53 +42,63 @@
           "object": "LayoutText #text",
           "rect": [8, 130, 4, 17],
           "reason": "style change"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox ''",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Hello'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox '\u00A0'",
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutBR BR",
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutBR BR",
-          "reason": "bounds change"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow P",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutBlockFlow P",
+      "reason": "invalidate paint rectangle"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "incremental"
+    },
+    {
+      "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": "bounds change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox 'Hello'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBR BR",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/repaint/bugzilla-6278-expected.txt b/third_party/WebKit/LayoutTests/platform/win/fast/repaint/bugzilla-6278-expected.txt
index cdec19e..5fe0c2cc 100644
--- a/third_party/WebKit/LayoutTests/platform/win/fast/repaint/bugzilla-6278-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/fast/repaint/bugzilla-6278-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -50,117 +52,75 @@
           "object": "LayoutText #text",
           "rect": [250, 132, 36, 144],
           "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'Curabitur pretium, quam quis semper'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'Curabitur pretium, quam quis semper'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Phasellus vehicula, sem at posuere'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'Quisque eu nulla non nisi molestie'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'ac, laoreet non, suscipit sed, sapien.'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'accumsan. Etiam tellus urna, laoreet'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'fringilla orci nibh sed neque. Quisque eu'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'malesuada, est libero feugiat libero, vel'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'malesuada, est libero feugiat libero,'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'nec ullamcorper lacus ante vulputate pede.'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'nec ullamcorper lacus ante vulputate'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'nulla non nisi molestie accumsan. Etiam'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'pede.'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'posuere vehicula, augue nibh molestie nisl,'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'sed, sapien. Phasellus vehicula, sem at'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'tellus urna, laoreet ac, laoreet non, suscipit'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'vehicula, augue nibh molestie nisl,'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'vel fringilla orci nibh sed neque.'",
-          "reason": "incremental"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutTableCell TD id='col1'",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "incremental"
+    },
+    {
+      "object": "InlineTextBox 'Curabitur pretium, quam quis semper'",
+      "reason": "incremental"
+    },
+    {
+      "object": "InlineTextBox 'malesuada, est libero feugiat libero,'",
+      "reason": "incremental"
+    },
+    {
+      "object": "InlineTextBox 'vel fringilla orci nibh sed neque.'",
+      "reason": "incremental"
+    },
+    {
+      "object": "InlineTextBox 'Quisque eu nulla non nisi molestie'",
+      "reason": "incremental"
+    },
+    {
+      "object": "InlineTextBox 'accumsan. Etiam tellus urna, laoreet'",
+      "reason": "incremental"
+    },
+    {
+      "object": "InlineTextBox 'ac, laoreet non, suscipit sed, sapien.'",
+      "reason": "incremental"
+    },
+    {
+      "object": "InlineTextBox 'Phasellus vehicula, sem at posuere'",
+      "reason": "incremental"
+    },
+    {
+      "object": "InlineTextBox 'vehicula, augue nibh molestie nisl,'",
+      "reason": "incremental"
+    },
+    {
+      "object": "InlineTextBox 'nec ullamcorper lacus ante vulputate'",
+      "reason": "incremental"
+    },
+    {
+      "object": "InlineTextBox 'pede.'",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutTableCell TD id='target'",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/repaint/bugzilla-6473-expected.txt b/third_party/WebKit/LayoutTests/platform/win/fast/repaint/bugzilla-6473-expected.txt
index dac3e58..7f2159e 100644
--- a/third_party/WebKit/LayoutTests/platform/win/fast/repaint/bugzilla-6473-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/fast/repaint/bugzilla-6473-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -30,17 +32,31 @@
           "object": "LayoutText #text",
           "rect": [8, 130, 70, 17],
           "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'SUCCESS'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV id='allcontent'",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutBlockFlow (relative positioned) P",
+      "reason": "bounds change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox 'SUCCESS'",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/repaint/bugzilla-7235-expected.txt b/third_party/WebKit/LayoutTests/platform/win/fast/repaint/bugzilla-7235-expected.txt
index a13d168..de6531e 100644
--- a/third_party/WebKit/LayoutTests/platform/win/fast/repaint/bugzilla-7235-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/fast/repaint/bugzilla-7235-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -15,25 +17,19 @@
           "object": "LayoutBlockFlow (positioned) DIV id='t'",
           "rect": [8, 166, 100, 100],
           "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox '\u00A0'",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (anonymous)",
+      "reason": "invalidate paint rectangle"
+    },
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='t'",
+      "reason": "layoutObject insertion"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/repaint/button-checkbox-click-method-repaint-expected.txt b/third_party/WebKit/LayoutTests/platform/win/fast/repaint/button-checkbox-click-method-repaint-expected.txt
index 1998494..f09e604 100644
--- a/third_party/WebKit/LayoutTests/platform/win/fast/repaint/button-checkbox-click-method-repaint-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/fast/repaint/button-checkbox-click-method-repaint-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -13,6 +15,12 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow INPUT id='checkbox'",
+      "reason": "subtree"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/repaint/caret-invalidation-in-overflow-scroll-expected.txt b/third_party/WebKit/LayoutTests/platform/win/fast/repaint/caret-invalidation-in-overflow-scroll-expected.txt
index 196e464..316a40d 100644
--- a/third_party/WebKit/LayoutTests/platform/win/fast/repaint/caret-invalidation-in-overflow-scroll-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/fast/repaint/caret-invalidation-in-overflow-scroll-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -18,6 +20,16 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV id='inner-editor'",
+      "reason": "invalidate paint rectangle"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='inner-editor'",
+      "reason": "invalidate paint rectangle"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/repaint/caret-outside-block-expected.txt b/third_party/WebKit/LayoutTests/platform/win/fast/repaint/caret-outside-block-expected.txt
index 10923dc1..c474be0 100644
--- a/third_party/WebKit/LayoutTests/platform/win/fast/repaint/caret-outside-block-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/fast/repaint/caret-outside-block-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -13,6 +15,12 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV id='target'",
+      "reason": "invalidate paint rectangle"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/repaint/caret-with-transformation-expected.txt b/third_party/WebKit/LayoutTests/platform/win/fast/repaint/caret-with-transformation-expected.txt
index 62ded70..53bd018 100644
--- a/third_party/WebKit/LayoutTests/platform/win/fast/repaint/caret-with-transformation-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/fast/repaint/caret-with-transformation-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -18,6 +20,16 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV id='div'",
+      "reason": "invalidate paint rectangle"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='div'",
+      "reason": "invalidate paint rectangle"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/repaint/change-text-content-and-background-color-expected.txt b/third_party/WebKit/LayoutTests/platform/win/fast/repaint/change-text-content-and-background-color-expected.txt
index 313b342..ae3dfb8 100644
--- a/third_party/WebKit/LayoutTests/platform/win/fast/repaint/change-text-content-and-background-color-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/fast/repaint/change-text-content-and-background-color-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -20,21 +22,27 @@
           "object": "LayoutText #text",
           "rect": [30, 30, 47, 22],
           "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ''",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'NEW'",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutTextControl (positioned) INPUT id='input'",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='inner-editor'",
+      "reason": "invalidate paint rectangle"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "full"
+    },
+    {
+      "object": "InlineTextBox 'NEW'",
+      "reason": "full"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/repaint/clip-with-layout-delta-expected.txt b/third_party/WebKit/LayoutTests/platform/win/fast/repaint/clip-with-layout-delta-expected.txt
index 6ff38ca8e..431c5e0 100644
--- a/third_party/WebKit/LayoutTests/platform/win/fast/repaint/clip-with-layout-delta-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/fast/repaint/clip-with-layout-delta-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -35,41 +37,51 @@
           "object": "LayoutText #text",
           "rect": [8, 8, 4, 17],
           "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox '\u00A0'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox '\u00A0'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox '\u00A0'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox '\u00A0'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "background obscuration change"
+    },
+    {
+      "object": "LayoutBlockFlow SPAN id='t1'",
+      "reason": "style change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox '\u00A0'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow (relative positioned) DIV",
+      "reason": "background obscuration change"
+    },
+    {
+      "object": "LayoutBlockFlow SPAN id='t2' class='blue'",
+      "reason": "style change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox '\u00A0'",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/repaint/control-clip-expected.txt b/third_party/WebKit/LayoutTests/platform/win/fast/repaint/control-clip-expected.txt
index b40c6051..23fc77a 100644
--- a/third_party/WebKit/LayoutTests/platform/win/fast/repaint/control-clip-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/fast/repaint/control-clip-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -25,33 +27,35 @@
           "object": "LayoutText (anonymous)",
           "rect": [9, 83, 63, 16],
           "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ''",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ''",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'SUCCESS'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'SUCCESS'",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (anonymous)",
+      "reason": "invalidate paint rectangle"
+    },
+    {
+      "object": "LayoutText (anonymous)",
+      "reason": "full"
+    },
+    {
+      "object": "InlineTextBox 'SUCCESS'",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutBlockFlow (anonymous)",
+      "reason": "invalidate paint rectangle"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "full"
+    },
+    {
+      "object": "InlineTextBox 'SUCCESS'",
+      "reason": "full"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/repaint/crbug-371640-4-expected.txt b/third_party/WebKit/LayoutTests/platform/win/fast/repaint/crbug-371640-4-expected.txt
index 47539fc..1ef60cc5 100644
--- a/third_party/WebKit/LayoutTests/platform/win/fast/repaint/crbug-371640-4-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/fast/repaint/crbug-371640-4-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -35,45 +37,55 @@
           "object": "LayoutText #text",
           "rect": [208, 84, 4, 17],
           "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox '\u00A0'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox '\u00A0'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutBlockFlow (positioned) DIV class='abs_pos'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutBlockFlow (relative positioned) (floating) DIV id='keep_inner' class='inner'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutBlockFlow (relative positioned) (floating) DIV id='keep_outer' class='outer'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutBlockFlow (relative positioned) (floating) DIV id='node' class='outer'",
-          "reason": "layoutObject removal"
-        },
-        {
-          "object": "LayoutBlockFlow (relative positioned) (floating) DIV id='to_remove_inner' class='inner'",
-          "reason": "layoutObject removal"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutText #text",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='to_remove' class='item'",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutBlockFlow (relative positioned) (floating) DIV id='to_remove_inner' class='inner'",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutBlockFlow (relative positioned) (floating) DIV id='node' class='outer'",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutBlockFlow (relative positioned) (floating) DIV id='keep_outer' class='outer'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow (positioned) DIV class='abs_pos'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow (relative positioned) (floating) DIV id='keep_inner' class='inner'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='keep' class='item'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox '\u00A0'",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/repaint/crbug-371640-expected.txt b/third_party/WebKit/LayoutTests/platform/win/fast/repaint/crbug-371640-expected.txt
index c29b82a..7ce40d1 100644
--- a/third_party/WebKit/LayoutTests/platform/win/fast/repaint/crbug-371640-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/fast/repaint/crbug-371640-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -35,49 +37,59 @@
           "object": "LayoutText #text",
           "rect": [88, 84, 4, 17],
           "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox '\u00A0'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox '\u00A0'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV id='container'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV id='keep_outer' class='outer'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutBlockFlow (floating) DIV id='node' class='outer'",
-          "reason": "layoutObject removal"
-        },
-        {
-          "object": "LayoutBlockFlow (positioned) DIV class='abs_pos'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutBlockFlow (relative positioned) (floating) DIV id='keep_inner' class='inner'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutBlockFlow (relative positioned) (floating) DIV id='to_remove_inner' class='inner'",
-          "reason": "layoutObject removal"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutText #text",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='to_remove' class='item'",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutBlockFlow (relative positioned) (floating) DIV id='to_remove_inner' class='inner'",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutBlockFlow (floating) DIV id='node' class='outer'",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutBlockFlow (floating) DIV id='container'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow (floating) DIV id='keep_outer' class='outer'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow (relative positioned) (floating) DIV id='keep_inner' class='inner'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow (positioned) DIV class='abs_pos'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='keep' class='item'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox '\u00A0'",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/repaint/delete-into-nested-block-expected.txt b/third_party/WebKit/LayoutTests/platform/win/fast/repaint/delete-into-nested-block-expected.txt
index 2f20bdb..d640d71 100644
--- a/third_party/WebKit/LayoutTests/platform/win/fast/repaint/delete-into-nested-block-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/fast/repaint/delete-into-nested-block-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -55,93 +57,75 @@
           "object": "LayoutBlockFlow DIV id='one'",
           "rect": [7, 118, 3, 20],
           "reason": "invalidate paint rectangle"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'one'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'three'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'three'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'three'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'three'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'two'",
-          "reason": "full"
-        },
-        {
-          "object": "LayoutBR BR",
-          "reason": "layoutObject removal"
-        },
-        {
-          "object": "LayoutBR BR",
-          "reason": "layoutObject removal"
-        },
-        {
-          "object": "LayoutInline SPAN",
-          "reason": "layoutObject removal"
-        },
-        {
-          "object": "LayoutText #text",
-          "reason": "layoutObject removal"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutText #text",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutBR BR",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='two'",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutBR BR",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutInline SPAN",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "outline"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='one'",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'three'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='one'",
+      "reason": "invalidate paint rectangle"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/repaint/details-open-repaint-expected.txt b/third_party/WebKit/LayoutTests/platform/win/fast/repaint/details-open-repaint-expected.txt
index 242176b..da9742c 100644
--- a/third_party/WebKit/LayoutTests/platform/win/fast/repaint/details-open-repaint-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/fast/repaint/details-open-repaint-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -25,33 +27,55 @@
           "object": "LayoutDetailsMarker DIV id='details-marker'",
           "rect": [8, 53, 11, 11],
           "reason": "full"
-        },
-        {
-          "object": "HorizontalScrollbar",
-          "reason": "scroll"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='inner-editor'",
-          "reason": "scroll"
-        },
-        {
-          "object": "LayoutText #text",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "LayoutText #text",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "VerticalScrollbar",
-          "reason": "scroll"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutDetailsMarker DIV id='details-marker'",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='details-content'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutTextControl INPUT",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='inner-editor'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='inner-editor'",
+      "reason": "scroll"
+    },
+    {
+      "object": "HorizontalScrollbar",
+      "reason": "scroll"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='inner-editor'",
+      "reason": "scroll"
+    },
+    {
+      "object": "VerticalScrollbar",
+      "reason": "scroll"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "layoutObject insertion"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/repaint/focus-continuations-expected.txt b/third_party/WebKit/LayoutTests/platform/win/fast/repaint/focus-continuations-expected.txt
index 24a6c124..95d80c3 100644
--- a/third_party/WebKit/LayoutTests/platform/win/fast/repaint/focus-continuations-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/fast/repaint/focus-continuations-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -10,21 +12,27 @@
           "object": "LayoutInline SPAN id='outer'",
           "rect": [7, 87, 86, 22],
           "reason": "style change"
-        },
-        {
-          "object": "LayoutBlockFlow (anonymous)",
-          "reason": "forced by layout"
-        },
-        {
-          "object": "LayoutBlockFlow (anonymous)",
-          "reason": "forced by layout"
-        },
-        {
-          "object": "LayoutInline SPAN id='outer'",
-          "reason": "style change"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (anonymous)",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutInline SPAN id='outer'",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutBlockFlow (anonymous)",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutInline SPAN id='outer'",
+      "reason": "style change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/repaint/focus-enable-continuations-expected.txt b/third_party/WebKit/LayoutTests/platform/win/fast/repaint/focus-enable-continuations-expected.txt
index 74544f7..d2aabdb0 100644
--- a/third_party/WebKit/LayoutTests/platform/win/fast/repaint/focus-enable-continuations-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/fast/repaint/focus-enable-continuations-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -10,25 +12,31 @@
           "object": "LayoutInline SPAN id='outer'",
           "rect": [7, 87, 86, 22],
           "reason": "style change"
-        },
-        {
-          "object": "LayoutBlockFlow (anonymous)",
-          "reason": "forced by layout"
-        },
-        {
-          "object": "LayoutBlockFlow (anonymous)",
-          "reason": "forced by layout"
-        },
-        {
-          "object": "LayoutInline SPAN id='outer'",
-          "reason": "full"
-        },
-        {
-          "object": "LayoutInline SPAN id='outer'",
-          "reason": "style change"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (anonymous)",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutInline SPAN id='outer'",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutBlockFlow (anonymous)",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutInline SPAN id='outer'",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutInline SPAN id='outer'",
+      "reason": "style change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/repaint/focus-ring-on-child-move-expected.txt b/third_party/WebKit/LayoutTests/platform/win/fast/repaint/focus-ring-on-child-move-expected.txt
index 44d8c57e..df44a83 100644
--- a/third_party/WebKit/LayoutTests/platform/win/fast/repaint/focus-ring-on-child-move-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/fast/repaint/focus-ring-on-child-move-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -23,6 +25,16 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (positioned) DIV",
+      "reason": "outline"
+    },
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='child'",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/repaint/gradients-em-stops-repaint-expected.txt b/third_party/WebKit/LayoutTests/platform/win/fast/repaint/gradients-em-stops-repaint-expected.txt
index 1cf5bfa..a48da2ee 100644
--- a/third_party/WebKit/LayoutTests/platform/win/fast/repaint/gradients-em-stops-repaint-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/fast/repaint/gradients-em-stops-repaint-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -20,25 +22,23 @@
           "object": "LayoutBlockFlow DIV class='indicator'",
           "rect": [345, 19, 240, 20],
           "reason": "style change"
-        },
-        {
-          "object": "InlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV class='em-units'",
+      "reason": "invalidate paint rectangle"
+    },
+    {
+      "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/fast/repaint/inline-color-change-expected.txt b/third_party/WebKit/LayoutTests/platform/win/fast/repaint/inline-color-change-expected.txt
index 9e4ee2d4..983facd 100644
--- a/third_party/WebKit/LayoutTests/platform/win/fast/repaint/inline-color-change-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/fast/repaint/inline-color-change-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -15,17 +17,27 @@
           "object": "LayoutText #text",
           "rect": [8, 68, 37, 17],
           "reason": "style change"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox 'PASS'",
-          "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/fast/repaint/inline-focus-expected.txt b/third_party/WebKit/LayoutTests/platform/win/fast/repaint/inline-focus-expected.txt
index 6b5390b4..dd4ca778 100644
--- a/third_party/WebKit/LayoutTests/platform/win/fast/repaint/inline-focus-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/fast/repaint/inline-focus-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -20,37 +22,27 @@
           "object": "LayoutBlockFlow P",
           "rect": [0, 34, 800, 18],
           "reason": "invalidate paint rectangle"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox 'Home'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'crbug.com/424078: ensure inline elements get their outline painted'",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (anonymous)",
+      "reason": "invalidate paint rectangle"
+    },
+    {
+      "object": "LayoutInline A id='link'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutBlockFlow P",
+      "reason": "invalidate paint rectangle"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/repaint/inline-outline-repaint-expected.txt b/third_party/WebKit/LayoutTests/platform/win/fast/repaint/inline-outline-repaint-expected.txt
index 4ed4653..feaa191a 100644
--- a/third_party/WebKit/LayoutTests/platform/win/fast/repaint/inline-outline-repaint-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/fast/repaint/inline-outline-repaint-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -25,425 +27,51 @@
           "object": "LayoutBlockFlow DIV",
           "rect": [45, 182, 3, 20],
           "reason": "invalidate paint rectangle"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "outline"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "outline"
-        },
-        {
-          "object": "InlineTextBox ' '",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ' '",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ' '",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ' '",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ' '",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ' '",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ' '",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ' '",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ' '",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ' '",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ' '",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ' '",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ' '",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ' '",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ' '",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ''",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ''",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ''",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ''",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ''",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ''",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ''",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ''",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ''",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Lorem ipsum'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Lorem ipsum'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Lorem ipsum'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Lorem ipsum'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Lorem ipsum'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Lorem ipsum'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Lorem ipsum'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Lorem ipsum'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Lorem ipsum'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Lorem ipsum'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Lorem ipsum'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Lorem ipsum'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Lorem ipsum'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Lorem ipsum'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Lorem ipsum'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'dolor sit amet'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'dolor sit'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'dolor sit'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'dolor'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'dolor'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'dolor\u00A0'",
-          "reason": "full"
-        },
-        {
-          "object": "LayoutText #text",
-          "reason": "layoutObject removal"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutText #text",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "invalidate paint rectangle"
+    },
+    {
+      "object": "LayoutInline SPAN id='test'",
+      "reason": "outline"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "outline"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "outline"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "full"
+    },
+    {
+      "object": "InlineTextBox 'Lorem ipsum'",
+      "reason": "full"
+    },
+    {
+      "object": "InlineTextBox ' '",
+      "reason": "full"
+    },
+    {
+      "object": "InlineTextBox 'dolor\u00A0'",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "invalidate paint rectangle"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/repaint/inline-style-change-in-scrolled-view-expected.txt b/third_party/WebKit/LayoutTests/platform/win/fast/repaint/inline-style-change-in-scrolled-view-expected.txt
index 6b25a9b4..4d7261a6 100644
--- a/third_party/WebKit/LayoutTests/platform/win/fast/repaint/inline-style-change-in-scrolled-view-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/fast/repaint/inline-style-change-in-scrolled-view-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [2000, 2000],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [2000, 2000],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -10,13 +12,19 @@
           "object": "LayoutText #text",
           "rect": [0, 288, 415, 17],
           "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox 'Text Text Text Text Text Text Text Text Text Text Text Text Text'",
-          "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/win/fast/repaint/invalidation-after-opacity-change-subtree-expected.txt b/third_party/WebKit/LayoutTests/platform/win/fast/repaint/invalidation-after-opacity-change-subtree-expected.txt
index b522b9a..c7ddd09 100644
--- a/third_party/WebKit/LayoutTests/platform/win/fast/repaint/invalidation-after-opacity-change-subtree-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/fast/repaint/invalidation-after-opacity-change-subtree-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [785, 2350],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [785, 2350],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -55,57 +57,99 @@
           "object": "LayoutText #text",
           "rect": [8, 2197, 653, 106],
           "reason": "subtree"
-        },
-        {
-          "object": "InlineTextBox 'This test checks that switching opacity'",
-          "reason": "subtree"
-        },
-        {
-          "object": "InlineTextBox 'This test checks that switching opacity'",
-          "reason": "subtree"
-        },
-        {
-          "object": "InlineTextBox 'This text should be visible in the'",
-          "reason": "subtree"
-        },
-        {
-          "object": "InlineTextBox 'This text should be visible in the'",
-          "reason": "subtree"
-        },
-        {
-          "object": "InlineTextBox 'invalidates the full subtree.'",
-          "reason": "subtree"
-        },
-        {
-          "object": "InlineTextBox 'invalidates the full subtree.'",
-          "reason": "subtree"
-        },
-        {
-          "object": "InlineTextBox 'output.'",
-          "reason": "subtree"
-        },
-        {
-          "object": "InlineTextBox 'output.'",
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='container'",
-          "reason": "subtree"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='container'",
-          "reason": "subtree"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV id='container'",
+      "reason": "subtree"
+    },
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='absolute'",
+      "reason": "subtree"
+    },
+    {
+      "object": "LayoutBlockFlow P",
+      "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": "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/fast/repaint/japanese-rl-selection-clear-expected.txt b/third_party/WebKit/LayoutTests/platform/win/fast/repaint/japanese-rl-selection-clear-expected.txt
index 6f1c6e97..6be47fd 100644
--- a/third_party/WebKit/LayoutTests/platform/win/fast/repaint/japanese-rl-selection-clear-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/fast/repaint/japanese-rl-selection-clear-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -15,129 +17,139 @@
           "object": "LayoutText #text",
           "rect": [377, 123, 394, 395],
           "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '\u3044\u8A18\u4E8B\u304C\u3069\u3053\u306B\u3042\u3063\u305F\u304B\u5FD8\u308C\u3066\u3057\u307E\u3063\u305F'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox '\u3044\u8A18\u4E8B\u304C\u3069\u3053\u306B\u3042\u3063\u305F\u304B\u5FD8\u308C\u3066\u3057\u307E\u3063\u305F'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '\u304B\u3089\u3082\u691C\u7D22\u3059\u308B\u3053\u3068\u304C\u3067\u304D\u307E\u3059\u3002\u305B\u3063\u304B'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox '\u304B\u3089\u3082\u691C\u7D22\u3059\u308B\u3053\u3068\u304C\u3067\u304D\u307E\u3059\u3002\u305B\u3063\u304B'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '\u304C\u3067\u304D\u307E\u3059\u3002\u305B\u3063\u304B\u304F\u898B\u3064\u3051\u305F\u3059\u3070\u3089\u3057'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox '\u304C\u3067\u304D\u307E\u3059\u3002\u305B\u3063\u304B\u304F\u898B\u3064\u3051\u305F\u3059\u3070\u3089\u3057'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '\u304F\u3001\u8A2A\u554F\u3057\u305F\u30A6\u30A7\u30D6\u30DA\u30FC\u30B8\u306E\u30B3\u30F3\u30C6\u30F3\u30C4'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox '\u304F\u3001\u8A2A\u554F\u3057\u305F\u30A6\u30A7\u30D6\u30DA\u30FC\u30B8\u306E\u30B3\u30F3\u30C6\u30F3\u30C4'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '\u304F\u898B\u3064\u3051\u305F\u3059\u3070\u3089\u3057\u3044\u8A18\u4E8B\u304C\u3069\u3053\u306B\u3042\u3063'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox '\u304F\u898B\u3064\u3051\u305F\u3059\u3070\u3089\u3057\u3044\u8A18\u4E8B\u304C\u3069\u3053\u306B\u3042\u3063'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '\u3057\u305F\u30A6\u30A7\u30D6\u30DA\u30FC\u30B8\u306E\u30B3\u30F3\u30C6\u30F3\u30C4\u304B\u3089\u3082\u691C'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox '\u3057\u305F\u30A6\u30A7\u30D6\u30DA\u30FC\u30B8\u306E\u30B3\u30F3\u30C6\u30F3\u30C4\u304B\u3089\u3082\u691C'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '\u3059\u304B\u306A\u3089\u30BF\u30A4\u30C8\u30EB\u3068\u30A2\u30C9\u30EC\u30B9\u3060\u3051\u3067\u306A'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox '\u3059\u304B\u306A\u3089\u30BF\u30A4\u30C8\u30EB\u3068\u30A2\u30C9\u30EC\u30B9\u3060\u3051\u3067\u306A'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '\u305B\u3063\u304B\u304F\u898B\u3064\u3051\u305F\u3059\u3070\u3089\u3057\u3044\u8A18\u4E8B\u304C\u3069\u3053'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox '\u305B\u3063\u304B\u304F\u898B\u3064\u3051\u305F\u3059\u3070\u3089\u3057\u3044\u8A18\u4E8B\u304C\u3069\u3053'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '\u305F\u304B\u5FD8\u308C\u3066\u3057\u307E\u3063\u305F\u7D4C\u9A13\u306F\u3042\u308A\u307E\u3059\u304B \u306A'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox '\u305F\u304B\u5FD8\u308C\u3066\u3057\u307E\u3063\u305F\u7D4C\u9A13\u306F\u3042\u308A\u307E\u3059\u304B \u306A'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '\u306B\u3042\u3063\u305F\u304B\u5FD8\u308C\u3066\u3057\u307E\u3063\u305F\u7D4C\u9A13\u306F\u3042\u308A\u307E'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox '\u306B\u3042\u3063\u305F\u304B\u5FD8\u308C\u3066\u3057\u307E\u3063\u305F\u7D4C\u9A13\u306F\u3042\u308A\u307E'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '\u3089\u30BF\u30A4\u30C8\u30EB\u3068\u30A2\u30C9\u30EC\u30B9\u3060\u3051\u3067\u306A\u304F\u3001\u8A2A\u554F'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox '\u3089\u30BF\u30A4\u30C8\u30EB\u3068\u30A2\u30C9\u30EC\u30B9\u3060\u3051\u3067\u306A\u304F\u3001\u8A2A\u554F'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '\u30B9\u3060\u3051\u3067\u306A\u304F\u3001\u8A2A\u554F'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox '\u30B9\u3060\u3051\u3067\u306A\u304F\u3001\u8A2A\u554F'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '\u30DA\u30FC\u30B8\u306E\u30B3\u30F3\u30C6\u30F3\u30C4\u304B\u3089\u3082\u691C\u7D22\u3059\u308B\u3053\u3068'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox '\u30DA\u30FC\u30B8\u306E\u30B3\u30F3\u30C6\u30F3\u30C4\u304B\u3089\u3082\u691C\u7D22\u3059\u308B\u3053\u3068'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '\u7D22\u3059\u308B\u3053\u3068\u304C\u3067\u304D\u307E\u3059\u3002\u8A2A\u554F\u3057\u305F\u30A6\u30A7\u30D6'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox '\u7D22\u3059\u308B\u3053\u3068\u304C\u3067\u304D\u307E\u3059\u3002\u8A2A\u554F\u3057\u305F\u30A6\u30A7\u30D6'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '\u7D4C\u9A13\u306F\u3042\u308A\u307E\u3059\u304B \u306A\u3089\u30BF\u30A4\u30C8\u30EB\u3068\u30A2\u30C9\u30EC'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox '\u7D4C\u9A13\u306F\u3042\u308A\u307E\u3059\u304B \u306A\u3089\u30BF\u30A4\u30C8\u30EB\u3068\u30A2\u30C9\u30EC'",
-          "reason": "selection"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutText #text",
+      "reason": "selection"
+    },
+    {
+      "object": "InlineTextBox '\u305B\u3063\u304B\u304F\u898B\u3064\u3051\u305F\u3059\u3070\u3089\u3057\u3044\u8A18\u4E8B\u304C\u3069\u3053'",
+      "reason": "selection"
+    },
+    {
+      "object": "InlineTextBox '\u306B\u3042\u3063\u305F\u304B\u5FD8\u308C\u3066\u3057\u307E\u3063\u305F\u7D4C\u9A13\u306F\u3042\u308A\u307E'",
+      "reason": "selection"
+    },
+    {
+      "object": "InlineTextBox '\u3059\u304B\u306A\u3089\u30BF\u30A4\u30C8\u30EB\u3068\u30A2\u30C9\u30EC\u30B9\u3060\u3051\u3067\u306A'",
+      "reason": "selection"
+    },
+    {
+      "object": "InlineTextBox '\u304F\u3001\u8A2A\u554F\u3057\u305F\u30A6\u30A7\u30D6\u30DA\u30FC\u30B8\u306E\u30B3\u30F3\u30C6\u30F3\u30C4'",
+      "reason": "selection"
+    },
+    {
+      "object": "InlineTextBox '\u304B\u3089\u3082\u691C\u7D22\u3059\u308B\u3053\u3068\u304C\u3067\u304D\u307E\u3059\u3002\u305B\u3063\u304B'",
+      "reason": "selection"
+    },
+    {
+      "object": "InlineTextBox '\u304F\u898B\u3064\u3051\u305F\u3059\u3070\u3089\u3057\u3044\u8A18\u4E8B\u304C\u3069\u3053\u306B\u3042\u3063'",
+      "reason": "selection"
+    },
+    {
+      "object": "InlineTextBox '\u305F\u304B\u5FD8\u308C\u3066\u3057\u307E\u3063\u305F\u7D4C\u9A13\u306F\u3042\u308A\u307E\u3059\u304B \u306A'",
+      "reason": "selection"
+    },
+    {
+      "object": "InlineTextBox '\u3089\u30BF\u30A4\u30C8\u30EB\u3068\u30A2\u30C9\u30EC\u30B9\u3060\u3051\u3067\u306A\u304F\u3001\u8A2A\u554F'",
+      "reason": "selection"
+    },
+    {
+      "object": "InlineTextBox '\u3057\u305F\u30A6\u30A7\u30D6\u30DA\u30FC\u30B8\u306E\u30B3\u30F3\u30C6\u30F3\u30C4\u304B\u3089\u3082\u691C'",
+      "reason": "selection"
+    },
+    {
+      "object": "InlineTextBox '\u7D22\u3059\u308B\u3053\u3068\u304C\u3067\u304D\u307E\u3059\u3002\u8A2A\u554F\u3057\u305F\u30A6\u30A7\u30D6'",
+      "reason": "selection"
+    },
+    {
+      "object": "InlineTextBox '\u30DA\u30FC\u30B8\u306E\u30B3\u30F3\u30C6\u30F3\u30C4\u304B\u3089\u3082\u691C\u7D22\u3059\u308B\u3053\u3068'",
+      "reason": "selection"
+    },
+    {
+      "object": "InlineTextBox '\u304C\u3067\u304D\u307E\u3059\u3002\u305B\u3063\u304B\u304F\u898B\u3064\u3051\u305F\u3059\u3070\u3089\u3057'",
+      "reason": "selection"
+    },
+    {
+      "object": "InlineTextBox '\u3044\u8A18\u4E8B\u304C\u3069\u3053\u306B\u3042\u3063\u305F\u304B\u5FD8\u308C\u3066\u3057\u307E\u3063\u305F'",
+      "reason": "selection"
+    },
+    {
+      "object": "InlineTextBox '\u7D4C\u9A13\u306F\u3042\u308A\u307E\u3059\u304B \u306A\u3089\u30BF\u30A4\u30C8\u30EB\u3068\u30A2\u30C9\u30EC'",
+      "reason": "selection"
+    },
+    {
+      "object": "InlineTextBox '\u30B9\u3060\u3051\u3067\u306A\u304F\u3001\u8A2A\u554F'",
+      "reason": "selection"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "incremental"
+    },
+    {
+      "object": "InlineTextBox '\u305B\u3063\u304B\u304F\u898B\u3064\u3051\u305F\u3059\u3070\u3089\u3057\u3044\u8A18\u4E8B\u304C\u3069\u3053'",
+      "reason": "incremental"
+    },
+    {
+      "object": "InlineTextBox '\u306B\u3042\u3063\u305F\u304B\u5FD8\u308C\u3066\u3057\u307E\u3063\u305F\u7D4C\u9A13\u306F\u3042\u308A\u307E'",
+      "reason": "incremental"
+    },
+    {
+      "object": "InlineTextBox '\u3059\u304B\u306A\u3089\u30BF\u30A4\u30C8\u30EB\u3068\u30A2\u30C9\u30EC\u30B9\u3060\u3051\u3067\u306A'",
+      "reason": "incremental"
+    },
+    {
+      "object": "InlineTextBox '\u304F\u3001\u8A2A\u554F\u3057\u305F\u30A6\u30A7\u30D6\u30DA\u30FC\u30B8\u306E\u30B3\u30F3\u30C6\u30F3\u30C4'",
+      "reason": "incremental"
+    },
+    {
+      "object": "InlineTextBox '\u304B\u3089\u3082\u691C\u7D22\u3059\u308B\u3053\u3068\u304C\u3067\u304D\u307E\u3059\u3002\u305B\u3063\u304B'",
+      "reason": "incremental"
+    },
+    {
+      "object": "InlineTextBox '\u304F\u898B\u3064\u3051\u305F\u3059\u3070\u3089\u3057\u3044\u8A18\u4E8B\u304C\u3069\u3053\u306B\u3042\u3063'",
+      "reason": "incremental"
+    },
+    {
+      "object": "InlineTextBox '\u305F\u304B\u5FD8\u308C\u3066\u3057\u307E\u3063\u305F\u7D4C\u9A13\u306F\u3042\u308A\u307E\u3059\u304B \u306A'",
+      "reason": "incremental"
+    },
+    {
+      "object": "InlineTextBox '\u3089\u30BF\u30A4\u30C8\u30EB\u3068\u30A2\u30C9\u30EC\u30B9\u3060\u3051\u3067\u306A\u304F\u3001\u8A2A\u554F'",
+      "reason": "incremental"
+    },
+    {
+      "object": "InlineTextBox '\u3057\u305F\u30A6\u30A7\u30D6\u30DA\u30FC\u30B8\u306E\u30B3\u30F3\u30C6\u30F3\u30C4\u304B\u3089\u3082\u691C'",
+      "reason": "incremental"
+    },
+    {
+      "object": "InlineTextBox '\u7D22\u3059\u308B\u3053\u3068\u304C\u3067\u304D\u307E\u3059\u3002\u8A2A\u554F\u3057\u305F\u30A6\u30A7\u30D6'",
+      "reason": "incremental"
+    },
+    {
+      "object": "InlineTextBox '\u30DA\u30FC\u30B8\u306E\u30B3\u30F3\u30C6\u30F3\u30C4\u304B\u3089\u3082\u691C\u7D22\u3059\u308B\u3053\u3068'",
+      "reason": "incremental"
+    },
+    {
+      "object": "InlineTextBox '\u304C\u3067\u304D\u307E\u3059\u3002\u305B\u3063\u304B\u304F\u898B\u3064\u3051\u305F\u3059\u3070\u3089\u3057'",
+      "reason": "incremental"
+    },
+    {
+      "object": "InlineTextBox '\u3044\u8A18\u4E8B\u304C\u3069\u3053\u306B\u3042\u3063\u305F\u304B\u5FD8\u308C\u3066\u3057\u307E\u3063\u305F'",
+      "reason": "incremental"
+    },
+    {
+      "object": "InlineTextBox '\u7D4C\u9A13\u306F\u3042\u308A\u307E\u3059\u304B \u306A\u3089\u30BF\u30A4\u30C8\u30EB\u3068\u30A2\u30C9\u30EC'",
+      "reason": "incremental"
+    },
+    {
+      "object": "InlineTextBox '\u30B9\u3060\u3051\u3067\u306A\u304F\u3001\u8A2A\u554F'",
+      "reason": "incremental"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/repaint/japanese-rl-selection-repaint-expected.txt b/third_party/WebKit/LayoutTests/platform/win/fast/repaint/japanese-rl-selection-repaint-expected.txt
index 1d0df6f..11e97496 100644
--- a/third_party/WebKit/LayoutTests/platform/win/fast/repaint/japanese-rl-selection-repaint-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/fast/repaint/japanese-rl-selection-repaint-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -15,105 +17,115 @@
           "object": "LayoutText #text",
           "rect": [377, 23, 394, 544],
           "reason": "selection"
-        },
-        {
-          "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": "incremental"
-        },
-        {
-          "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": "selection"
-        },
-        {
-          "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": "incremental"
-        },
-        {
-          "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": "selection"
-        },
-        {
-          "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": "incremental"
-        },
-        {
-          "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": "selection"
-        },
-        {
-          "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": "incremental"
-        },
-        {
-          "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": "selection"
-        },
-        {
-          "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": "incremental"
-        },
-        {
-          "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": "selection"
-        },
-        {
-          "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": "incremental"
-        },
-        {
-          "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": "selection"
-        },
-        {
-          "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": "incremental"
-        },
-        {
-          "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": "selection"
-        },
-        {
-          "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": "incremental"
-        },
-        {
-          "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": "selection"
-        },
-        {
-          "object": "InlineTextBox '\u30EC\u30B9\u3060\u3051\u3067\u306A\u304F\u3001\u8A2A\u554F'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox '\u30EC\u30B9\u3060\u3051\u3067\u306A\u304F\u3001\u8A2A\u554F'",
-          "reason": "selection"
-        },
-        {
-          "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": "incremental"
-        },
-        {
-          "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": "selection"
-        },
-        {
-          "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": "incremental"
-        },
-        {
-          "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": "selection"
-        },
-        {
-          "object": "LayoutBlockFlow BODY",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutBlockFlow HTML",
-          "reason": "selection"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow HTML",
+      "reason": "selection"
+    },
+    {
+      "object": "LayoutBlockFlow BODY",
+      "reason": "selection"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "selection"
+    },
+    {
+      "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": "selection"
+    },
+    {
+      "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": "selection"
+    },
+    {
+      "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": "selection"
+    },
+    {
+      "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": "selection"
+    },
+    {
+      "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": "selection"
+    },
+    {
+      "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": "selection"
+    },
+    {
+      "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": "selection"
+    },
+    {
+      "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": "selection"
+    },
+    {
+      "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": "selection"
+    },
+    {
+      "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": "selection"
+    },
+    {
+      "object": "InlineTextBox '\u30EC\u30B9\u3060\u3051\u3067\u306A\u304F\u3001\u8A2A\u554F'",
+      "reason": "selection"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "incremental"
+    },
+    {
+      "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": "incremental"
+    },
+    {
+      "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": "incremental"
+    },
+    {
+      "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": "incremental"
+    },
+    {
+      "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": "incremental"
+    },
+    {
+      "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": "incremental"
+    },
+    {
+      "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": "incremental"
+    },
+    {
+      "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": "incremental"
+    },
+    {
+      "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": "incremental"
+    },
+    {
+      "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": "incremental"
+    },
+    {
+      "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": "incremental"
+    },
+    {
+      "object": "InlineTextBox '\u30EC\u30B9\u3060\u3051\u3067\u306A\u304F\u3001\u8A2A\u554F'",
+      "reason": "incremental"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/repaint/layout-state-relative-expected.txt b/third_party/WebKit/LayoutTests/platform/win/fast/repaint/layout-state-relative-expected.txt
index 3280ed4..878dbb5a 100644
--- a/third_party/WebKit/LayoutTests/platform/win/fast/repaint/layout-state-relative-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/fast/repaint/layout-state-relative-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -15,21 +17,23 @@
           "object": "LayoutText #text",
           "rect": [8, 150, 37, 17],
           "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ''",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'PASS'",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (relative positioned) DIV id='target'",
+      "reason": "invalidate paint rectangle"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "full"
+    },
+    {
+      "object": "InlineTextBox 'PASS'",
+      "reason": "full"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/repaint/layout-state-scrolloffset-expected.txt b/third_party/WebKit/LayoutTests/platform/win/fast/repaint/layout-state-scrolloffset-expected.txt
index 8921fdaa..4cd2760 100644
--- a/third_party/WebKit/LayoutTests/platform/win/fast/repaint/layout-state-scrolloffset-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/fast/repaint/layout-state-scrolloffset-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -15,21 +17,23 @@
           "object": "LayoutText #text",
           "rect": [100, 118, 41, 17],
           "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ''",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'after'",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV id='target'",
+      "reason": "invalidate paint rectangle"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "full"
+    },
+    {
+      "object": "InlineTextBox 'after'",
+      "reason": "full"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/repaint/layout-state-scrolloffset2-expected.txt b/third_party/WebKit/LayoutTests/platform/win/fast/repaint/layout-state-scrolloffset2-expected.txt
index 24bca95..57ff512 100644
--- a/third_party/WebKit/LayoutTests/platform/win/fast/repaint/layout-state-scrolloffset2-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/fast/repaint/layout-state-scrolloffset2-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -15,21 +17,23 @@
           "object": "LayoutText #text",
           "rect": [102, 120, 41, 17],
           "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ''",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'after'",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV id='target'",
+      "reason": "invalidate paint rectangle"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "full"
+    },
+    {
+      "object": "InlineTextBox 'after'",
+      "reason": "full"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/repaint/layout-state-scrolloffset3-expected.txt b/third_party/WebKit/LayoutTests/platform/win/fast/repaint/layout-state-scrolloffset3-expected.txt
index cee4fa1..1edbd8bb 100644
--- a/third_party/WebKit/LayoutTests/platform/win/fast/repaint/layout-state-scrolloffset3-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/fast/repaint/layout-state-scrolloffset3-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -15,21 +17,23 @@
           "object": "LayoutText #text",
           "rect": [100, 118, 34, 17],
           "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ''",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'after'",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV id='target'",
+      "reason": "invalidate paint rectangle"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "full"
+    },
+    {
+      "object": "InlineTextBox 'after'",
+      "reason": "full"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/repaint/layoutstate-invalid-invalidation-inline-relative-positioned-expected.txt b/third_party/WebKit/LayoutTests/platform/win/fast/repaint/layoutstate-invalid-invalidation-inline-relative-positioned-expected.txt
index bc2ac3d..e6afc604a3 100644
--- a/third_party/WebKit/LayoutTests/platform/win/fast/repaint/layoutstate-invalid-invalidation-inline-relative-positioned-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/fast/repaint/layoutstate-invalid-invalidation-inline-relative-positioned-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -40,45 +42,47 @@
           "object": "LayoutText #text",
           "rect": [8, 200, 100, 100],
           "reason": "bounds change"
-        },
-        {
-          "object": "InlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'x'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutText #text",
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutText #text",
-          "reason": "bounds change"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (anonymous)",
+      "reason": "invalidate paint rectangle"
+    },
+    {
+      "object": "LayoutInline (relative positioned) SPAN id='target'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "bounds change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox 'x'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/repaint/line-flow-with-floats-1-expected.txt b/third_party/WebKit/LayoutTests/platform/win/fast/repaint/line-flow-with-floats-1-expected.txt
index afed810f..719a09d 100644
--- a/third_party/WebKit/LayoutTests/platform/win/fast/repaint/line-flow-with-floats-1-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/fast/repaint/line-flow-with-floats-1-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -80,426 +82,6 @@
           "object": "LayoutText #text",
           "rect": [14, 188, 40, 17],
           "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox ' twist itself round and look up in her face, with\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ' twist itself'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox ' was in a furious passion, and went\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Alice began to feel very uneasy: to be sure, she had not as\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Alice soon came to the conclusion that it was a very'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'Queen'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'The chief difficulty Alice found at first was in'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'The players all played at once without waiting'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'a very short time '",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'a very short time '",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'about, and shouting \u2018Off with his head!\u2019 or \u2018Off with'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'always getting up and walking off to other parts of\n'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'and was in the act of crawling away: besides all\n'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'arm, with its legs hanging down,\n'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'arm, with its legs hanging down,\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'become of\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'begin again, it was very provoking to find that the hedgehog'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'begin again, it was'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'besides all\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'body tucked away,\n'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'body tucked away,\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'but generally, just as'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'but generally, just as'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'comfortably enough, under her'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'comfortably enough, under her'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'difficult game indeed.\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'difficult game indeed.\n'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'doubled-up\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'flamingo: she succeeded in getting its'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'for the hedgehogs; and in\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'for the hedgehogs; and in\n'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'for turns,\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'for turns,\n'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'generally a ridge or furrow in the way wherever\n'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'give the hedgehog a blow with its head, it\n'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'going to give the hedgehog a blow with its head, it'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'had\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'had any dispute with the Queen, but she knew that it might'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'had got its head down, and was going to\n'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'happen any minute, \u2018and then,\u2019 thought she, \u2018what would'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'her head!\u2019 about once in a minute.\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'here; the great\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'laughing: and when she had got its head down, and was going'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'laughing: and when she'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'managing her\n'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'me? They\u2019re dreadfully fond of beheading people'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'other parts of\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'out, and was going to'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'out, and was'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'puzzled expression that she could not help bursting out'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'quarrelling all the while, and fighting'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'quarrelling all the while, and fighting'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'round and look up in her face, with\n'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'send the hedgehog to, and, as the doubled-up\n'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'she had got its neck nicely straightened\n'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'she had got its neck nicely straightened\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'she wanted to send the hedgehog to, and, as the'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'she wanted to'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'soldiers were always getting up and walking off to'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'soldiers were'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'stamping'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'such a puzzled expression'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'such a'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'that it was a very\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'that she could not help bursting out\n'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'the Queen'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'the ground, Alice soon came to the conclusion'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'the ground,'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'the'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'this, there was generally a ridge or furrow in the'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'this, there was'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'to\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'unrolled itself, and was in the act of crawling away:'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'unrolled itself,'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'very provoking to find that the hedgehog had\n'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'way wherever\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'wonder is, that there\u2018s any one left alive!\u2019'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'would'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'would'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'yet'",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/repaint/line-flow-with-floats-10-expected.txt b/third_party/WebKit/LayoutTests/platform/win/fast/repaint/line-flow-with-floats-10-expected.txt
index 8259d0a..ce4387a 100644
--- a/third_party/WebKit/LayoutTests/platform/win/fast/repaint/line-flow-with-floats-10-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/fast/repaint/line-flow-with-floats-10-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -25,170 +27,6 @@
           "object": "LayoutBlockFlow (floating) SPAN id='blueFloat'",
           "rect": [14, 364, 48, 64],
           "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox ' was in a furious passion, and went\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Alice began to feel very uneasy: to be sure, she had not as\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Queen'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Queen'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'The players all played at once without waiting'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'a very short time '",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'about, and shouting \u2018Off with his head!\u2019 or \u2018Off with'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'become of\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'difficult game indeed.\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'doubled-up\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'for the hedgehogs; and in\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'for turns,\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'had any dispute with the Queen, but she knew that it might'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'happen any minute, \u2018and then,\u2019 thought she, \u2018what would'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'her head!\u2019 about once in a minute.\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'here; the great\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'me? They\u2019re dreadfully fond of beheading people'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'other parts of\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'quarrelling all the while, and fighting'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'soldiers were always getting up and walking off to'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'stamping'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'that it was a very\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'the ground, Alice soon came to the conclusion'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'the'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'the'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'wonder is, that there\u2018s any one left alive!\u2019'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'yet'",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/repaint/line-flow-with-floats-2-expected.txt b/third_party/WebKit/LayoutTests/platform/win/fast/repaint/line-flow-with-floats-2-expected.txt
index 799ceb2..60c401c9 100644
--- a/third_party/WebKit/LayoutTests/platform/win/fast/repaint/line-flow-with-floats-2-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/fast/repaint/line-flow-with-floats-2-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -125,190 +127,6 @@
           "object": "LayoutText #text",
           "rect": [14, 188, 45, 20],
           "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox ' twist itself round and look up in her face, with\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ' twist itself round and look up in her face, with\n'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox ' was in a furious passion, and went\n'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox ''",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Alice began to feel very uneasy: to be sure, she had not as\n'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'Queen'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'The players all played at once without waiting'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'a very short time '",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'about, and shouting \u2018Off with his head!\u2019 or \u2018Off with'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'become of\n'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'begin again, it was very provoking to find that the hedgehog'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'besides all\n'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'difficult game indeed.\n'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'doubled-up\n'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'for the hedgehogs; and in\n'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'for turns,\n'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'going to give the hedgehog a blow with its head, it'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'had\n'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'had any dispute with the Queen, but she knew that it might'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'happen any minute, \u2018and then,\u2019 thought she, \u2018what would'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'her head!\u2019 about once in a minute.\n'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'here; the great\n'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'laughing: and when she had got its head down, and was going'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'me? They\u2019re dreadfully fond of beheading people'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'other parts of\n'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'puzzled expression that she could not help bursting out'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'quarrelling all the while, and fighting'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'she wanted to send the hedgehog to, and, as the'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'soldiers were always getting up and walking off to'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'stamping'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'such a'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'such a'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'that it was a very\n'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'the ground, Alice soon came to the conclusion'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'the'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'this, there was generally a ridge or furrow in the'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'to\n'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'unrolled itself, and was in the act of crawling away:'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'way wherever\n'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'wonder is, that there\u2018s any one left alive!\u2019'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'would'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox 'yet'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutInline I id='would'",
-          "reason": "style change"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/repaint/line-flow-with-floats-3-expected.txt b/third_party/WebKit/LayoutTests/platform/win/fast/repaint/line-flow-with-floats-3-expected.txt
index 2ca47b7..d72c7aa 100644
--- a/third_party/WebKit/LayoutTests/platform/win/fast/repaint/line-flow-with-floats-3-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/fast/repaint/line-flow-with-floats-3-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -40,194 +42,6 @@
           "object": "LayoutText #text",
           "rect": [353, 422, 16, 53],
           "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox ' was in a furious passion, and went\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ' was in a furious passion, and went'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'Alice began to feel very uneasy: to be sure, she had not as\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Queen'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'The players all played at once without waiting\n'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'The players all played at once without waiting'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'a very short time '",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'a very short time'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'about, and shouting \u2018Off with his head!\u2019 or \u2018Off with'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'become of\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'difficult game indeed.\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'for the hedgehogs; and in\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'for the hedgehogs; and in\n'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'for turns,\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'for'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'had any dispute with the Queen, but she knew that it might'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'happen any minute, \u2018and then,\u2019 thought she, \u2018what would'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'her head!\u2019 about once in a minute.\n'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'her head!\u2019 about once in a minute.\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'here; the great\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'me? They\u2019re dreadfully fond of beheading people'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'other parts of\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'quarrelling all the while, and fighting'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'quarrelling all the while, and fighting'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'stamping about, and shouting \u2018Off with his head!\u2019 or'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'stamping'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'that it was a very\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'the Queen'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'the ground, Alice soon came to the conclusion'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'the'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'turns,\n'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'wonder is, that there\u2018s any one left alive!\u2019'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'yet'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox '\u2018Off with\n'",
-          "reason": "incremental"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/repaint/line-flow-with-floats-4-expected.txt b/third_party/WebKit/LayoutTests/platform/win/fast/repaint/line-flow-with-floats-4-expected.txt
index 541379b..654b8d4f 100644
--- a/third_party/WebKit/LayoutTests/platform/win/fast/repaint/line-flow-with-floats-4-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/fast/repaint/line-flow-with-floats-4-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -20,170 +22,6 @@
           "object": "LayoutBlockFlow (floating) SPAN id='greenFloat'",
           "rect": [372, 435, 48, 17],
           "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox ' was in a furious passion, and went\n'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox ' was in a furious passion, and went\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Alice began to feel very uneasy: to be sure, she had not as\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Queen'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'The players all played at once without waiting'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'a very short time '",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'about, and shouting \u2018Off with his head!\u2019 or \u2018Off with\n'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'about, and shouting \u2018Off with his head!\u2019 or \u2018Off with'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'become of\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'difficult game indeed.\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'for the hedgehogs; and in\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'for turns,\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'had any dispute with the Queen, but she knew that it might'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'happen any minute, \u2018and then,\u2019 thought she, \u2018what would'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'head!\u2019 about once in a minute.\n'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'her head!\u2019 about once in a minute.\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'her'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'here; the great\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'me? They\u2019re dreadfully fond of beheading people'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'other parts of\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'quarrelling all the while, and fighting'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'stamping'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'stamping'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'that it was a very\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'the ground, Alice soon came to the conclusion'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'the'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'wonder is, that there\u2018s any one left alive!\u2019'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'yet'",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/repaint/line-flow-with-floats-5-expected.txt b/third_party/WebKit/LayoutTests/platform/win/fast/repaint/line-flow-with-floats-5-expected.txt
index 1b6d794..697e481 100644
--- a/third_party/WebKit/LayoutTests/platform/win/fast/repaint/line-flow-with-floats-5-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/fast/repaint/line-flow-with-floats-5-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -45,198 +47,6 @@
           "object": "LayoutText #text",
           "rect": [368, 404, 1, 36],
           "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox ' was in a furious passion, and went\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Alice began to feel very uneasy: to be sure, she had not as\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Queen'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'Queen'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'The players all played at once without waiting\n'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'The players all played at once without waiting'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'a very short time '",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'a very short time '",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'about, and shouting \u2018Off with his head!\u2019 or \u2018Off with'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'become of\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'difficult game indeed.\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'difficult game indeed.\n'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'doubled-up\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'for the hedgehogs; and in\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'for turns,\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'for'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'had any dispute with the Queen, but she knew that it might'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'happen any minute, \u2018and then,\u2019 thought she, \u2018what would'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'her head!\u2019 about once in a minute.\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'here; the great\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'me? They\u2019re dreadfully fond of beheading people'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'other parts of\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'quarrelling all the while, and fighting for'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'quarrelling all the while, and fighting'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'soldiers were always getting up and walking off to'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'stamping'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'that it was a very\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'the ground, Alice soon came to the conclusion'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'the hedgehogs; and in\n'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'the'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'the'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'turns,\n'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'wonder is, that there\u2018s any one left alive!\u2019'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'yet'",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/repaint/line-flow-with-floats-6-expected.txt b/third_party/WebKit/LayoutTests/platform/win/fast/repaint/line-flow-with-floats-6-expected.txt
index 94959f8..7094973 100644
--- a/third_party/WebKit/LayoutTests/platform/win/fast/repaint/line-flow-with-floats-6-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/fast/repaint/line-flow-with-floats-6-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -20,58 +22,6 @@
           "object": "LayoutText #text",
           "rect": [27, 353, 22, 18],
           "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'The players all played at once without waiting'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'difficult game indeed.\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'doubled-up\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'foo'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'other parts of\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'soldiers were always getting up and walking off to'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'that it was a very\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'the ground, Alice soon came to the conclusion'",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/repaint/line-flow-with-floats-7-expected.txt b/third_party/WebKit/LayoutTests/platform/win/fast/repaint/line-flow-with-floats-7-expected.txt
new file mode 100644
index 0000000..1b38863
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/win/fast/repaint/line-flow-with-floats-7-expected.txt
@@ -0,0 +1,25 @@
+{
+  "name": "Content Root Layer",
+  "bounds": [800, 600],
+  "children": [
+    {
+      "name": "LayoutView #document",
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "paintInvalidations": [
+        {
+          "object": "LayoutBlockFlow P",
+          "rect": [8, 386, 418, 54],
+          "reason": "invalidate paint rectangle"
+        },
+        {
+          "object": "LayoutText #text",
+          "rect": [14, 404, 355, 36],
+          "reason": "style change"
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/repaint/line-flow-with-floats-8-expected.txt b/third_party/WebKit/LayoutTests/platform/win/fast/repaint/line-flow-with-floats-8-expected.txt
index 500e8f3..7243f74 100644
--- a/third_party/WebKit/LayoutTests/platform/win/fast/repaint/line-flow-with-floats-8-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/fast/repaint/line-flow-with-floats-8-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -55,310 +57,6 @@
           "object": "LayoutBlockFlow (floating) SPAN id='blueFloat'",
           "rect": [14, 353, 48, 65],
           "reason": "layoutObject removal"
-        },
-        {
-          "object": "InlineTextBox ' twist itself round and look up in her face, with\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ' was in a furious passion, and went\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ' was in a'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'Queen'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'The chief difficulty Alice found at first was in'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'The players all played at once without waiting\n'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'The players all played at once without waiting'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'a very short time '",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'a very short time '",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'about once in a minute.\n'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'about, and shouting \u2018Off with his head!\u2019 or \u2018Off with'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'arm, with its legs hanging down,\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'begin again, it was very provoking to find that the hedgehog'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'besides all\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'body tucked away,\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'but generally, just as'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'comfortably enough, under her'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'difficult game indeed.\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'difficult game indeed.\n'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'doubled-up\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'flamingo: she succeeded in getting its'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'for the hedgehogs; and in\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'for turns,\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'for'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'furious passion, and went\n'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'going to give the hedgehog a blow with its head, it'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'had\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'hedgehogs; and in\n'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'her head!\u2019 about once in a minute.\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'her head!\u2019'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'laughing: and when she had got its head down, and was going'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'managing her\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'other parts of\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'out, and was'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'puzzled expression that she could not help bursting out'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'quarrelling all the while, and fighting for the'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'quarrelling all the while, and fighting'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'she had got its neck nicely straightened\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'she wanted to send the hedgehog to, and, as the'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'shouting \u2018Off with his head!\u2019 or \u2018Off with\n'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'soldiers were always getting up and walking off to'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'stamping about, and'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'stamping'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'such a'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'that it was a very\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'the Queen'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'the ground, Alice soon came to the conclusion'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'the'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'this, there was generally a ridge or furrow in the'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'to\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'turns,\n'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'unrolled itself, and was in the act of crawling away:'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'way wherever\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'would'",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/repaint/line-flow-with-floats-9-expected.txt b/third_party/WebKit/LayoutTests/platform/win/fast/repaint/line-flow-with-floats-9-expected.txt
index e58ab79..3d7ba9af 100644
--- a/third_party/WebKit/LayoutTests/platform/win/fast/repaint/line-flow-with-floats-9-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/fast/repaint/line-flow-with-floats-9-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -105,330 +107,6 @@
           "object": "LayoutView #document",
           "rect": [485, 0, 15, 600],
           "reason": "scroll"
-        },
-        {
-          "object": "InlineTextBox ' was in a furious passion, and went\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Alice began to feel very uneasy: to be sure, she had not as\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Alice began to feel very uneasy: to be sure, she had not as\n'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'Queen'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'The players all played at once without waiting'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'The players all played at once without waiting'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'a very short time '",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'a very short time '",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'about once in a minute.\n'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'about, and shouting \u2018Off with his head!\u2019 or \u2018Off with'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'become of\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'become of\n'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'begin again, it was very provoking to find that the hedgehog'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'besides all\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'difficult game indeed.\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'difficult game indeed.\n'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'doubled-up\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'for the hedgehogs; and in\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'for the hedgehogs; and in\n'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'for turns,\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'for turns,\n'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'had\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'had any dispute with the Queen, but she knew that it might'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'had any dispute with the Queen, but she knew that it might'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'happen any minute, \u2018and then,\u2019 thought she, \u2018what would'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'happen any minute, \u2018and then,\u2019 thought she, \u2018what would'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'her head!\u2019 about once in a minute.\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'her head!\u2019'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'here; the great\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'here; the great\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'here; the great\n'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'laughing: and when she had got its head down, and was going'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'me? They\u2019re dreadfully fond of beheading people'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'me? They\u2019re dreadfully fond of beheading people'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'other parts of\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'puzzled expression that she could not help bursting out'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'quarrelling all the while, and fighting'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'quarrelling all the while, and fighting'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'she wanted to send the hedgehog to, and, as the'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'shouting \u2018Off with his head!\u2019 or \u2018Off with\n'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'soldiers were always getting up and walking off to'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'stamping about, and'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'stamping'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'that it was a very\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'the Queen'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'the ground, Alice soon came to the conclusion'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'the'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'this, there was generally a ridge or furrow in the'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'to\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'unrolled itself, and was in the act of crawling away:'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'was in a furious passion, and went\n'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'way wherever\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'wonder is, that there\u2018s any one left alive!\u2019'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'wonder is, that there\u2018s any one left alive!\u2019'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'wonder is, that there\u2018s any one left alive!\u2019'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'yet'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'yet'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutView #document",
-          "reason": "scroll"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "VerticalScrollbar",
-          "reason": "scroll"
         }
       ]
     }
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/repaint/line-in-scrolled-clipped-block-expected.txt b/third_party/WebKit/LayoutTests/platform/win/fast/repaint/line-in-scrolled-clipped-block-expected.txt
index 06626af..c1f45214 100644
--- a/third_party/WebKit/LayoutTests/platform/win/fast/repaint/line-in-scrolled-clipped-block-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/fast/repaint/line-in-scrolled-clipped-block-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -15,21 +17,23 @@
           "object": "LayoutText #text",
           "rect": [8, 8, 100, 17],
           "reason": "full"
-        },
-        {
-          "object": "InlineTextBox '                         PASS     .'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ''",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV id='target'",
+      "reason": "invalidate paint rectangle"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "full"
+    },
+    {
+      "object": "InlineTextBox '                         PASS     .'",
+      "reason": "full"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/repaint/line-overflow-expected.txt b/third_party/WebKit/LayoutTests/platform/win/fast/repaint/line-overflow-expected.txt
index 9bc1285..04ff4e0 100644
--- a/third_party/WebKit/LayoutTests/platform/win/fast/repaint/line-overflow-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/fast/repaint/line-overflow-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -35,89 +37,55 @@
           "object": "LayoutText #text",
           "rect": [37, 132, 37, 18],
           "reason": "bounds change"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox ' eleifend lacus,'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ' eleifend'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'at sagittis eros leo pulvinar'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'augue'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'convallis,\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'convallis.'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'lacus, at sagittis eros leo'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'pulvinar velit. Integer'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'purus'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'purus'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'sollicitudin nisi ut urna blandit'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'ut urna blandit convallis.'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'velit. Integer sollicitudin nisi'",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "invalidate paint rectangle"
+    },
+    {
+      "object": "LayoutInline SPAN id='t'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox 'purus'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox ' eleifend'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox 'lacus, at sagittis eros leo'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox 'pulvinar velit. Integer'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox 'sollicitudin nisi ut urna blandit'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox 'convallis.'",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/repaint/lines-with-layout-delta-expected.txt b/third_party/WebKit/LayoutTests/platform/win/fast/repaint/lines-with-layout-delta-expected.txt
index fc497938..94110061 100644
--- a/third_party/WebKit/LayoutTests/platform/win/fast/repaint/lines-with-layout-delta-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/fast/repaint/lines-with-layout-delta-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -15,21 +17,23 @@
           "object": "LayoutText #text",
           "rect": [8, 58, 37, 17],
           "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ''",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'PASS'",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (floating) DIV id='target'",
+      "reason": "invalidate paint rectangle"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "full"
+    },
+    {
+      "object": "InlineTextBox 'PASS'",
+      "reason": "full"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/repaint/list-marker-2-expected.txt b/third_party/WebKit/LayoutTests/platform/win/fast/repaint/list-marker-2-expected.txt
index 770825f..7f32647 100644
--- a/third_party/WebKit/LayoutTests/platform/win/fast/repaint/list-marker-2-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/fast/repaint/list-marker-2-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -30,25 +32,31 @@
           "object": "LayoutListMarker (anonymous)",
           "rect": [31, 130, 7, 17],
           "reason": "bounds change"
-        },
-        {
-          "object": "InlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutListItem LI",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutListItem LI",
+      "reason": "invalidate paint rectangle"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutListMarker (anonymous)",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutImage IMG id='target'",
+      "reason": "forced by layout"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/repaint/make-children-non-inline-expected.txt b/third_party/WebKit/LayoutTests/platform/win/fast/repaint/make-children-non-inline-expected.txt
index 7fd0450..3a9eb7b 100644
--- a/third_party/WebKit/LayoutTests/platform/win/fast/repaint/make-children-non-inline-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/fast/repaint/make-children-non-inline-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -90,221 +92,171 @@
           "object": "LayoutBlockFlow DIV id='target'",
           "rect": [8, 150, 10, 100],
           "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'I could'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'I could'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'Word,'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Word,'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'about all the stuff'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'about all the stuff'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'after'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'after'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'more words.'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'more words.'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'that comes'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'that comes'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'the break.'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'the break.'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'words,'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'words,'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'write a book'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'write a book'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "LayoutBR BR",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "LayoutBR BR",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "LayoutBR BR",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "LayoutBR BR",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "LayoutBR BR",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "LayoutBR BR",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "LayoutBR BR",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "LayoutBR BR",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutBlockFlow (anonymous)",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'Word,'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutBR BR",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'words,'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutBR BR",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'more words.'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutBR BR",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'I could'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutBR BR",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'write a book'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutBR BR",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='target'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutBlockFlow (anonymous)",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'about all the stuff'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutBR BR",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'that comes'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutBR BR",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'after'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutBR BR",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'the break.'",
+      "reason": "layoutObject insertion"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/repaint/multi-layout-one-frame-expected.txt b/third_party/WebKit/LayoutTests/platform/win/fast/repaint/multi-layout-one-frame-expected.txt
index 7430c8f..f21c369 100644
--- a/third_party/WebKit/LayoutTests/platform/win/fast/repaint/multi-layout-one-frame-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/fast/repaint/multi-layout-one-frame-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -25,33 +27,35 @@
           "object": "LayoutText #text",
           "rect": [10, 11, 53, 16],
           "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ''",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ''",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'PASSED'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'PASSED'",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV id='inner-editor'",
+      "reason": "invalidate paint rectangle"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "full"
+    },
+    {
+      "object": "InlineTextBox 'PASSED'",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='inner-editor'",
+      "reason": "invalidate paint rectangle"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "full"
+    },
+    {
+      "object": "InlineTextBox 'PASSED'",
+      "reason": "full"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/repaint/offset-change-wrong-invalidation-with-float-expected.txt b/third_party/WebKit/LayoutTests/platform/win/fast/repaint/offset-change-wrong-invalidation-with-float-expected.txt
index e06e7c9..7514e20 100644
--- a/third_party/WebKit/LayoutTests/platform/win/fast/repaint/offset-change-wrong-invalidation-with-float-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/fast/repaint/offset-change-wrong-invalidation-with-float-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -25,24 +27,18 @@
           "object": "LayoutListMarker (anonymous)",
           "rect": [71, -158, 7, 17],
           "reason": "bounds change"
-        },
-        {
-          "object": "LayoutListItem LI",
-          "reason": "bounds change"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ],
       "children": [
         {
+          "name": "LayoutListItem (floating) LI id='watches'",
           "position": [31, 42],
           "transformOrigin": [17, 9],
           "bounds": [24, 17],
           "drawsContent": true,
           "children": [
             {
+              "name": "LayoutInline (relative positioned) SPAN id='placeholder'",
               "position": [17, 0],
               "bounds": [0, 17],
               "backfaceVisibility": "hidden"
@@ -50,12 +46,31 @@
           ]
         },
         {
+          "name": "LayoutListItem (relative positioned) (floating) LI id='menu'",
           "position": [31, 42],
           "bounds": [17, 17],
           "drawsContent": true
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (positioned) UL id='submenu'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutListItem LI",
+      "reason": "bounds change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutListMarker (anonymous)",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/repaint/outline-continuations-expected.txt b/third_party/WebKit/LayoutTests/platform/win/fast/repaint/outline-continuations-expected.txt
index f9fcffb2..ba4a63d 100644
--- a/third_party/WebKit/LayoutTests/platform/win/fast/repaint/outline-continuations-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/fast/repaint/outline-continuations-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -25,41 +27,43 @@
           "object": "LayoutInline SPAN id='outer'",
           "rect": [16, 146, 88, 21],
           "reason": "style change"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox 'CONTENTS'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'CONTENTS'",
-          "reason": "full"
-        },
-        {
-          "object": "LayoutBlockFlow (anonymous)",
-          "reason": "forced by layout"
-        },
-        {
-          "object": "LayoutInline SPAN id='outer'",
-          "reason": "style change"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (anonymous)",
+      "reason": "invalidate paint rectangle"
+    },
+    {
+      "object": "LayoutInline SPAN id='outer'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutBlockFlow (anonymous)",
+      "reason": "invalidate paint rectangle"
+    },
+    {
+      "object": "LayoutInline SPAN id='outer'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutBlockFlow (anonymous)",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutInline SPAN id='outer'",
+      "reason": "style change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/repaint/paint-invalidation-with-reparent-across-frame-boundaries-expected.txt b/third_party/WebKit/LayoutTests/platform/win/fast/repaint/paint-invalidation-with-reparent-across-frame-boundaries-expected.txt
index 6200176..48cacad 100644
--- a/third_party/WebKit/LayoutTests/platform/win/fast/repaint/paint-invalidation-with-reparent-across-frame-boundaries-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/fast/repaint/paint-invalidation-with-reparent-across-frame-boundaries-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -30,25 +32,27 @@
           "object": "LayoutText #text",
           "rect": [8, 184, 23, 17],
           "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'abc'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'abc'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV id='inner-target'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'abc'",
+      "reason": "layoutObject insertion"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/repaint/positioned-document-element-expected.txt b/third_party/WebKit/LayoutTests/platform/win/fast/repaint/positioned-document-element-expected.txt
index 1a5ce84..c312de3 100644
--- a/third_party/WebKit/LayoutTests/platform/win/fast/repaint/positioned-document-element-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/fast/repaint/positioned-document-element-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -51,25 +53,39 @@
           "object": "LayoutText #text",
           "rect": [8, 16, 436, 18],
           "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'Tests that the entire viewport is painted with a floated html element.'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Tests that the entire viewport is painted with a floated html element.'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutView #document",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutBlockFlow (positioned) HTML class='changed'",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutBlockFlow BODY",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow P",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox 'Tests that the entire viewport is painted with a floated html element.'",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/repaint/quotes-expected.txt b/third_party/WebKit/LayoutTests/platform/win/fast/repaint/quotes-expected.txt
index 23ba808..8670b975 100644
--- a/third_party/WebKit/LayoutTests/platform/win/fast/repaint/quotes-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/fast/repaint/quotes-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -40,57 +42,59 @@
           "object": "LayoutTextFragment (anonymous)",
           "rect": [8, 26, 8, 18],
           "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox ''",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ''",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ''",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'quote 2'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '{'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '}'",
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutInline \u003Cpseudo:after\u003E",
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutInline \u003Cpseudo:before\u003E",
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutInline Q id='q2' class='q-changed'",
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutQuote (anonymous)",
-          "reason": "style change"
-        },
-        {
-          "object": "LayoutQuote (anonymous)",
-          "reason": "style change"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "invalidate paint rectangle"
+    },
+    {
+      "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/fast/repaint/relative-inline-positioned-movement-repaint-expected.txt b/third_party/WebKit/LayoutTests/platform/win/fast/repaint/relative-inline-positioned-movement-repaint-expected.txt
index ea436d0..f8b4102 100644
--- a/third_party/WebKit/LayoutTests/platform/win/fast/repaint/relative-inline-positioned-movement-repaint-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/fast/repaint/relative-inline-positioned-movement-repaint-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -10,31 +12,24 @@
           "object": "LayoutBlockFlow BODY",
           "rect": [8, 7, 784, 19],
           "reason": "invalidate paint rectangle"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ],
       "children": [
         {
+          "name": "LayoutInline (relative positioned) DIV id='block'",
           "position": [68, 7],
           "bounds": [374, 19],
           "drawsContent": true,
-          "backfaceVisibility": "hidden",
-          "paintInvalidations": [
-            {
-              "object": "InlineFlowBox",
-              "reason": "full"
-            },
-            {
-              "object": "InlineTextBox 'When this layer moves it shouldn't generate a repaint rect.'",
-              "reason": "full"
-            }
-          ]
+          "backfaceVisibility": "hidden"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow BODY",
+      "reason": "invalidate paint rectangle"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/repaint/remove-inline-after-layout-expected.txt b/third_party/WebKit/LayoutTests/platform/win/fast/repaint/remove-inline-after-layout-expected.txt
index a60a747..61bc165 100644
--- a/third_party/WebKit/LayoutTests/platform/win/fast/repaint/remove-inline-after-layout-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/fast/repaint/remove-inline-after-layout-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -25,61 +27,27 @@
           "object": "LayoutBlockFlow DIV",
           "rect": [112, 108, 100, 100],
           "reason": "bounds change"
-        },
-        {
-          "object": "InlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'This span should disappear.\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'This span should disappear.'",
-          "reason": "full"
-        },
-        {
-          "object": "LayoutInline SPAN id='target'",
-          "reason": "layoutObject removal"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutText #text",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutInline SPAN id='target'",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutBlockFlow (anonymous)",
+      "reason": "invalidate paint rectangle"
+    },
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/repaint/remove-inline-layer-after-layout-expected.txt b/third_party/WebKit/LayoutTests/platform/win/fast/repaint/remove-inline-layer-after-layout-expected.txt
index 212776d..9da5dd20 100644
--- a/third_party/WebKit/LayoutTests/platform/win/fast/repaint/remove-inline-layer-after-layout-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/fast/repaint/remove-inline-layer-after-layout-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -30,57 +32,27 @@
           "object": "LayoutBlockFlow DIV",
           "rect": [112, 108, 100, 100],
           "reason": "bounds change"
-        },
-        {
-          "object": "InlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'This span should disappear.\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'This span should disappear.\n'",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutText #text",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutInline SPAN id='target'",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutBlockFlow (anonymous)",
+      "reason": "invalidate paint rectangle"
+    },
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/repaint/repaint-across-writing-mode-boundary-expected.txt b/third_party/WebKit/LayoutTests/platform/win/fast/repaint/repaint-across-writing-mode-boundary-expected.txt
index 8d8c26f..79a77e35 100644
--- a/third_party/WebKit/LayoutTests/platform/win/fast/repaint/repaint-across-writing-mode-boundary-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/fast/repaint/repaint-across-writing-mode-boundary-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -10,33 +12,39 @@
           "object": "LayoutText #text",
           "rect": [548, 191, 23, 35],
           "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '\u7B2C\u4E00\u6BB5\u843D paragraph 1'",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutBlockFlow BODY",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutBlockFlow DIV class='basic d1 vert'",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutBlockFlow DIV class='lrblock'",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutBlockFlow HTML",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutBlockFlow P",
-          "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/win/fast/repaint/repaint-during-scroll-with-zoom-expected.txt b/third_party/WebKit/LayoutTests/platform/win/fast/repaint/repaint-during-scroll-with-zoom-expected.txt
index 18bdfcba..6da94ca 100644
--- a/third_party/WebKit/LayoutTests/platform/win/fast/repaint/repaint-during-scroll-with-zoom-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/fast/repaint/repaint-during-scroll-with-zoom-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -61,25 +63,15 @@
           "object": "LayoutView #document",
           "rect": [237, 300, 15, 15],
           "reason": "scroll"
-        },
-        {
-          "object": "HorizontalScrollbar",
-          "reason": "scroll"
-        },
-        {
-          "object": "InlineTextBox 'scroll me'",
-          "reason": "subtree"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "VerticalScrollbar",
-          "reason": "scroll"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutIFrame (positioned) IFRAME",
+      "reason": "invalidate paint rectangle"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/repaint/resize-scrollable-iframe-expected.txt b/third_party/WebKit/LayoutTests/platform/win/fast/repaint/resize-scrollable-iframe-expected.txt
index 649f4ca..053f002 100644
--- a/third_party/WebKit/LayoutTests/platform/win/fast/repaint/resize-scrollable-iframe-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/fast/repaint/resize-scrollable-iframe-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -70,33 +72,27 @@
           "object": "LayoutView #document",
           "rect": [93, 193, 15, 15],
           "reason": "scroll"
-        },
-        {
-          "object": "HorizontalScrollbar",
-          "reason": "scroll"
-        },
-        {
-          "object": "InlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "LayoutView #document",
-          "reason": "scroll"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "VerticalScrollbar",
-          "reason": "scroll"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (anonymous)",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutBlockFlow (anonymous)",
+      "reason": "invalidate paint rectangle"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutIFrame IFRAME id='iframe'",
+      "reason": "incremental"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/repaint/search-field-cancel-expected.txt b/third_party/WebKit/LayoutTests/platform/win/fast/repaint/search-field-cancel-expected.txt
index 673eb0fb..f44108207 100644
--- a/third_party/WebKit/LayoutTests/platform/win/fast/repaint/search-field-cancel-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/fast/repaint/search-field-cancel-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -15,17 +17,27 @@
           "object": "LayoutText #text",
           "rect": [11, 45, 58, 16],
           "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'some text'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV id='inner-editor'",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'some text'",
+      "reason": "layoutObject insertion"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/repaint/select-option-background-color-expected.txt b/third_party/WebKit/LayoutTests/platform/win/fast/repaint/select-option-background-color-expected.txt
index e4312292..d72c73e 100644
--- a/third_party/WebKit/LayoutTests/platform/win/fast/repaint/select-option-background-color-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/fast/repaint/select-option-background-color-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -10,13 +12,19 @@
           "object": "LayoutBlockFlow OPTION id='option'",
           "rect": [1, 35, 13, 17],
           "reason": "style change"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow OPTION id='option'",
+      "reason": "style change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "style change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/repaint/selection-after-delete-expected.txt b/third_party/WebKit/LayoutTests/platform/win/fast/repaint/selection-after-delete-expected.txt
index a45f3df..96c1f464 100644
--- a/third_party/WebKit/LayoutTests/platform/win/fast/repaint/selection-after-delete-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/fast/repaint/selection-after-delete-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -30,93 +32,39 @@
           "object": "LayoutBlockFlow DIV id='test'",
           "rect": [38, 74, 3, 19],
           "reason": "invalidate paint rectangle"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox ' '",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ' '",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ' '",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ' '",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ' '",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'hello world hello'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'hello world hello'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'hello world hello'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'world hello world'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'world hello world'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'world hello'",
-          "reason": "full"
-        },
-        {
-          "object": "LayoutBR BR",
-          "reason": "bounds change"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutText #text",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='test'",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='test'",
+      "reason": "invalidate paint rectangle"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutBR BR",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='test'",
+      "reason": "invalidate paint rectangle"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/repaint/selection-after-remove-expected.txt b/third_party/WebKit/LayoutTests/platform/win/fast/repaint/selection-after-remove-expected.txt
index 71af1d7..504db331 100644
--- a/third_party/WebKit/LayoutTests/platform/win/fast/repaint/selection-after-remove-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/fast/repaint/selection-after-remove-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -40,133 +42,75 @@
           "object": "LayoutText #text",
           "rect": [39, 75, 36, 17],
           "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox ' '",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ' '",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ' '",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ' '",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ' '",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ' world'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'hello '",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'hello '",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox 'hello world hello'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'hello world hello'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'world hello world'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'world hello world'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'world hello'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'world hello'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'world'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'world'",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutBR BR",
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutBlockFlow BODY",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='test'",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutBlockFlow HTML",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutInline SPAN id='removeme'",
-          "reason": "layoutObject removal"
-        },
-        {
-          "object": "LayoutText #text",
-          "reason": "selection"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutText #text",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutInline SPAN id='removeme'",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutBlockFlow HTML",
+      "reason": "selection"
+    },
+    {
+      "object": "LayoutBlockFlow BODY",
+      "reason": "selection"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='test'",
+      "reason": "selection"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='test'",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='test'",
+      "reason": "invalidate paint rectangle"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "selection"
+    },
+    {
+      "object": "InlineTextBox 'hello '",
+      "reason": "selection"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "selection"
+    },
+    {
+      "object": "InlineTextBox 'world'",
+      "reason": "selection"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox 'world'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBR BR",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/repaint/selection-clear-expected.txt b/third_party/WebKit/LayoutTests/platform/win/fast/repaint/selection-clear-expected.txt
index b67fc83..ded3905e 100644
--- a/third_party/WebKit/LayoutTests/platform/win/fast/repaint/selection-clear-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/fast/repaint/selection-clear-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -30,81 +32,83 @@
           "object": "LayoutText #text",
           "rect": [8, 49, 8, 17],
           "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox 'FAIL: Test did'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'not run'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox '\u00A0'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '\u00A0'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "LayoutBR BR",
-          "reason": "bounds change"
-        },
-        {
-          "object": "LayoutBR BR",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutBlockFlow (anonymous)",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutBlockFlow BODY",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='firstLine'",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='root'",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutBlockFlow HTML",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutText #text",
-          "reason": "selection"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutText #text",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutBlockFlow HTML",
+      "reason": "selection"
+    },
+    {
+      "object": "LayoutBlockFlow BODY",
+      "reason": "selection"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='root'",
+      "reason": "selection"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='firstLine'",
+      "reason": "selection"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='firstLine'",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "selection"
+    },
+    {
+      "object": "InlineTextBox '\u00A0'",
+      "reason": "selection"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox '\u00A0'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutBlockFlow (anonymous)",
+      "reason": "selection"
+    },
+    {
+      "object": "LayoutBlockFlow (anonymous)",
+      "reason": "bounds change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBR BR",
+      "reason": "selection"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "selection"
+    },
+    {
+      "object": "LayoutBR BR",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/repaint/selection-partial-invalidation-between-blocks-expected.txt b/third_party/WebKit/LayoutTests/platform/win/fast/repaint/selection-partial-invalidation-between-blocks-expected.txt
index b8e95d7..578ffee 100644
--- a/third_party/WebKit/LayoutTests/platform/win/fast/repaint/selection-partial-invalidation-between-blocks-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/fast/repaint/selection-partial-invalidation-between-blocks-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -25,45 +27,63 @@
           "object": "LayoutText #text",
           "rect": [67, 11, 5, 17],
           "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'First cell'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'First cell'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox 'Second cell'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'Second cell'",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutBlockFlow BODY",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutBlockFlow HTML",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutTable TABLE",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutTableCell TD id='firstCell'",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutTableCell TD id='secondCell'",
-          "reason": "selection"
         }
       ]
     }
+  ],
+  "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": "selection"
+    },
+    {
+      "object": "InlineTextBox 'First cell'",
+      "reason": "selection"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "incremental"
+    },
+    {
+      "object": "InlineTextBox 'First cell'",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutTableCell TD id='secondCell'",
+      "reason": "selection"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "selection"
+    },
+    {
+      "object": "InlineTextBox 'Second cell'",
+      "reason": "selection"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "incremental"
+    },
+    {
+      "object": "InlineTextBox 'Second cell'",
+      "reason": "incremental"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/repaint/selection-rl-expected.txt b/third_party/WebKit/LayoutTests/platform/win/fast/repaint/selection-rl-expected.txt
index 3763b3f8..b5bf3f2 100644
--- a/third_party/WebKit/LayoutTests/platform/win/fast/repaint/selection-rl-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/fast/repaint/selection-rl-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -10,21 +12,27 @@
           "object": "LayoutText #text",
           "rect": [775, 39, 17, 78],
           "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox 'Testing both hit testing'",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutBlockFlow BODY",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutBlockFlow HTML",
-          "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/win/fast/repaint/stacked-diacritics-expected.txt b/third_party/WebKit/LayoutTests/platform/win/fast/repaint/stacked-diacritics-expected.txt
index f754c798..8b70c00 100644
--- a/third_party/WebKit/LayoutTests/platform/win/fast/repaint/stacked-diacritics-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/fast/repaint/stacked-diacritics-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -10,17 +12,15 @@
           "object": "LayoutText #text",
           "rect": [19, 159, 130, 41],
           "reason": "layoutObject removal"
-        },
-        {
-          "object": "InlineTextBox '\u1EA6\u1EA4\u1EAA\u1EA8\u1EB0'",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutText #text",
+      "reason": "layoutObject removal"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/repaint/subtree-root-skipped-expected.txt b/third_party/WebKit/LayoutTests/platform/win/fast/repaint/subtree-root-skipped-expected.txt
index c9b8291..f1c427d 100644
--- a/third_party/WebKit/LayoutTests/platform/win/fast/repaint/subtree-root-skipped-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/fast/repaint/subtree-root-skipped-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -20,21 +22,27 @@
           "object": "LayoutBlockFlow (positioned) DIV id='div'",
           "rect": [8, 288, 10, 20],
           "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox ''",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'PASS'",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV id='inner-editor'",
+      "reason": "invalidate paint rectangle"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "full"
+    },
+    {
+      "object": "InlineTextBox 'PASS'",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='div'",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/repaint/table-collapsed-border-expected.txt b/third_party/WebKit/LayoutTests/platform/win/fast/repaint/table-collapsed-border-expected.txt
index 21d5c8b..a6ab010e 100644
--- a/third_party/WebKit/LayoutTests/platform/win/fast/repaint/table-collapsed-border-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/fast/repaint/table-collapsed-border-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -90,113 +92,123 @@
           "object": "LayoutTable TABLE",
           "rect": [83, 268, 26, 76],
           "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'Lorem'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Lorem'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'dolor'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'ipsum dolor'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'ipsum dolor'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'ipsum dolor'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'sit amet'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'sit amet'",
-          "reason": "full"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "reason": "full"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "reason": "full"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "reason": "full"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "reason": "full"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "reason": "full"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutText #text",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutTableCell TD id='d'",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutTableCell TD id='d2'",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutTableCell TD",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutTableCell TD",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutTableCell TD",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutTableCell TD",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutTableCell TD",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutTableCell TD",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutTable TABLE id='t'",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutTable TABLE",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutTableSection TBODY",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutTableCell TD",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutTableCell TD",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutTable TABLE",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutTableSection TBODY",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutTable TABLE",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutTableCell TD",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutTableCell TD id='d3'",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'ipsum dolor'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutTableCell TD",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "forced by layout"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/repaint/table-shrink-row-repaint-expected.txt b/third_party/WebKit/LayoutTests/platform/win/fast/repaint/table-shrink-row-repaint-expected.txt
index 4cf3c04..d767b65a 100644
--- a/third_party/WebKit/LayoutTests/platform/win/fast/repaint/table-shrink-row-repaint-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/fast/repaint/table-shrink-row-repaint-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [785, 848],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [785, 848],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -385,105 +387,263 @@
           "object": "LayoutText #text",
           "rect": [13, 141, 8, 17],
           "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox '10'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox '11'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox '12'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox '13'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox '2'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox '3'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox '4'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox '5'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox '6'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox '7'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox '8'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox '9'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutView #document",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutBlockFlow HTML",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutTableCell TD id='resizeMe'",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutTableRow TR",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutTableCell TD",
+      "reason": "bounds change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox '2'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutTableRow TR",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutTableCell TD",
+      "reason": "bounds change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox '3'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutTableRow TR",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutTableCell TD",
+      "reason": "bounds change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox '4'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutTableRow TR",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutTableCell TD",
+      "reason": "bounds change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox '5'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutTableRow TR",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutTableCell TD",
+      "reason": "bounds change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox '6'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutTableRow TR",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutTableCell TD",
+      "reason": "bounds change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox '7'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutTableRow TR",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutTableCell TD",
+      "reason": "bounds change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox '8'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutTableRow TR",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutTableCell TD",
+      "reason": "bounds change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox '9'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutTableRow TR",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutTableCell TD",
+      "reason": "bounds change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox '10'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutTableRow TR",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutTableCell TD",
+      "reason": "bounds change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox '11'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutTableRow TR",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutTableCell TD",
+      "reason": "bounds change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox '12'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutTableRow TR",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutTableCell TD",
+      "reason": "bounds change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox '13'",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/repaint/text-append-dirty-lines-expected.txt b/third_party/WebKit/LayoutTests/platform/win/fast/repaint/text-append-dirty-lines-expected.txt
index fee69c7..b59c266 100644
--- a/third_party/WebKit/LayoutTests/platform/win/fast/repaint/text-append-dirty-lines-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/fast/repaint/text-append-dirty-lines-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -15,53 +17,47 @@
           "object": "LayoutText #text",
           "rect": [7, 42, 776, 125],
           "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Curabitur a velit'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Curabitur a velit.'",
-          "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 'fermentum ut, tortor. Sed rhoncus. Quisque enim metus, luctus tincidunt, vestibulum eu, vestibulum eu, libero. Mauris'",
-          "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 'laoreet feugiat. Phasellus mollis pulvinar mi. Etiam ut neque sed eros egestas laoreet. Vestibulum ullamcorper, nulla non'",
-          "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 'sagittis aliquam nunc. Nullam pharetra molestie eros. Donec tempus purus ut ligula. Phasellus non nisl. Etiam eu 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": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow P id='target'",
+      "reason": "invalidate paint rectangle"
+    },
+    {
+      "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/win/fast/repaint/text-match-document-change-expected.txt b/third_party/WebKit/LayoutTests/platform/win/fast/repaint/text-match-document-change-expected.txt
index def09d9..abd5f67 100644
--- a/third_party/WebKit/LayoutTests/platform/win/fast/repaint/text-match-document-change-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/fast/repaint/text-match-document-change-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -35,34 +37,6 @@
           "object": "LayoutView #document",
           "rect": [295, 102, 15, 400],
           "reason": "scroll"
-        },
-        {
-          "object": "InlineTextBox 'After change'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'Find-in-page 'findme', then click here)'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'To be changed: findme (Manual testing:'",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "VerticalScrollbar",
-          "reason": "scroll"
         }
       ]
     }
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/repaint/text-selection-rect-in-overflow-2-expected.txt b/third_party/WebKit/LayoutTests/platform/win/fast/repaint/text-selection-rect-in-overflow-2-expected.txt
index 3317d23..1947afe 100644
--- a/third_party/WebKit/LayoutTests/platform/win/fast/repaint/text-selection-rect-in-overflow-2-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/fast/repaint/text-selection-rect-in-overflow-2-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -10,22 +12,6 @@
           "object": "LayoutText #text",
           "rect": [18, 27, 237, 18],
           "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox 'Should have blue, not gray, highlight'",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutBlockFlow BODY",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutBlockFlow DIV id='t'",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutBlockFlow HTML",
-          "reason": "selection"
         }
       ]
     }
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/repaint/text-selection-rect-in-overflow-expected.txt b/third_party/WebKit/LayoutTests/platform/win/fast/repaint/text-selection-rect-in-overflow-expected.txt
index dbb6428..74596e9 100644
--- a/third_party/WebKit/LayoutTests/platform/win/fast/repaint/text-selection-rect-in-overflow-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/fast/repaint/text-selection-rect-in-overflow-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -10,21 +12,27 @@
           "object": "LayoutText #text",
           "rect": [8, 17, 199, 19],
           "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'Should have green background'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'Should have green background'",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutText #text",
-          "reason": "selection"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutText #text",
+      "reason": "selection"
+    },
+    {
+      "object": "InlineTextBox 'Should have green background'",
+      "reason": "selection"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox 'Should have green background'",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/repaint/transform-layout-repaint-expected.txt b/third_party/WebKit/LayoutTests/platform/win/fast/repaint/transform-layout-repaint-expected.txt
index a7033051..33b3062 100644
--- a/third_party/WebKit/LayoutTests/platform/win/fast/repaint/transform-layout-repaint-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/fast/repaint/transform-layout-repaint-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -15,21 +17,23 @@
           "object": "LayoutText #text",
           "rect": [52, 51, 42, 29],
           "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ''",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'PASS'",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV id='target'",
+      "reason": "invalidate paint rectangle"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "full"
+    },
+    {
+      "object": "InlineTextBox 'PASS'",
+      "reason": "full"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/repaint/vertical-align-length1-expected.txt b/third_party/WebKit/LayoutTests/platform/win/fast/repaint/vertical-align-length1-expected.txt
index 1ef0685..61a554d1 100644
--- a/third_party/WebKit/LayoutTests/platform/win/fast/repaint/vertical-align-length1-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/fast/repaint/vertical-align-length1-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -35,29 +37,31 @@
           "object": "LayoutBlockFlow DIV class='other'",
           "rect": [0, 100, 20, 20],
           "reason": "bounds change"
-        },
-        {
-          "object": "InlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow BODY",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutBlockFlow BODY",
+      "reason": "invalidate paint rectangle"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutBlockFlow DIV class='other'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV class='other'",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/repaint/vertical-align-length2-expected.txt b/third_party/WebKit/LayoutTests/platform/win/fast/repaint/vertical-align-length2-expected.txt
index 8723b7ed..997055c 100644
--- a/third_party/WebKit/LayoutTests/platform/win/fast/repaint/vertical-align-length2-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/fast/repaint/vertical-align-length2-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -20,25 +22,19 @@
           "object": "LayoutBlockFlow DIV id='target'",
           "rect": [200, 50, 100, 100],
           "reason": "bounds change"
-        },
-        {
-          "object": "InlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow BODY",
+      "reason": "invalidate paint rectangle"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='target'",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/repaint/vertical-align1-expected.txt b/third_party/WebKit/LayoutTests/platform/win/fast/repaint/vertical-align1-expected.txt
index a28d216..42b61b2 100644
--- a/third_party/WebKit/LayoutTests/platform/win/fast/repaint/vertical-align1-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/fast/repaint/vertical-align1-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -35,29 +37,31 @@
           "object": "LayoutBlockFlow DIV class='other'",
           "rect": [0, 34, 20, 20],
           "reason": "bounds change"
-        },
-        {
-          "object": "InlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow BODY",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutBlockFlow BODY",
+      "reason": "invalidate paint rectangle"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutBlockFlow DIV class='other'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow DIV class='other'",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/repaint/window-resize-background-image-fixed-centered-composited-expected.txt b/third_party/WebKit/LayoutTests/platform/win/fast/repaint/window-resize-background-image-fixed-centered-composited-expected.txt
new file mode 100644
index 0000000..6809e2a
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/win/fast/repaint/window-resize-background-image-fixed-centered-composited-expected.txt
@@ -0,0 +1,177 @@
+{
+  "name": "Content Root Layer",
+  "bounds": [600, 250],
+  "children": [
+    {
+      "name": "LayoutView #document",
+      "bounds": [600, 250],
+      "drawsContent": true,
+      "paintInvalidations": [
+        {
+          "object": "LayoutView #document",
+          "rect": [0, 250, 600, 250],
+          "reason": "incremental"
+        },
+        {
+          "object": "LayoutView #document",
+          "rect": [0, 0, 600, 250],
+          "reason": "full"
+        },
+        {
+          "object": "LayoutBlockFlow HTML",
+          "rect": [0, 0, 600, 8],
+          "reason": "forced by layout"
+        }
+      ]
+    }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutView #document",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutBlockFlow HTML",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutView #document",
+      "reason": "full"
+    }
+  ]
+}
+{
+  "name": "Content Root Layer",
+  "bounds": [400, 250],
+  "children": [
+    {
+      "name": "LayoutView #document",
+      "bounds": [400, 250],
+      "drawsContent": true,
+      "paintInvalidations": [
+        {
+          "object": "LayoutBlockFlow HTML",
+          "rect": [0, 0, 600, 8],
+          "reason": "forced by layout"
+        },
+        {
+          "object": "LayoutView #document",
+          "rect": [0, 0, 400, 250],
+          "reason": "full"
+        },
+        {
+          "object": "LayoutView #document",
+          "rect": [400, 0, 200, 250],
+          "reason": "incremental"
+        }
+      ]
+    }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutView #document",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutView #document",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutBlockFlow HTML",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutBlockFlow BODY",
+      "reason": "became visible"
+    }
+  ]
+}
+{
+  "name": "Content Root Layer",
+  "bounds": [400, 600],
+  "children": [
+    {
+      "name": "LayoutView #document",
+      "bounds": [400, 600],
+      "drawsContent": true,
+      "paintInvalidations": [
+        {
+          "object": "LayoutView #document",
+          "rect": [0, 0, 400, 600],
+          "reason": "full"
+        },
+        {
+          "object": "LayoutView #document",
+          "rect": [0, 250, 400, 350],
+          "reason": "incremental"
+        },
+        {
+          "object": "LayoutBlockFlow HTML",
+          "rect": [0, 0, 400, 8],
+          "reason": "forced by layout"
+        }
+      ]
+    }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutView #document",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutView #document",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutBlockFlow HTML",
+      "reason": "forced by layout"
+    }
+  ]
+}
+{
+  "name": "Content Root Layer",
+  "bounds": [800, 600],
+  "children": [
+    {
+      "name": "LayoutView #document",
+      "bounds": [800, 600],
+      "drawsContent": true,
+      "paintInvalidations": [
+        {
+          "object": "LayoutView #document",
+          "rect": [0, 0, 800, 600],
+          "reason": "full"
+        },
+        {
+          "object": "LayoutBlockFlow HTML",
+          "rect": [0, 0, 800, 8],
+          "reason": "forced by layout"
+        },
+        {
+          "object": "LayoutView #document",
+          "rect": [400, 0, 400, 600],
+          "reason": "incremental"
+        }
+      ]
+    }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutView #document",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutView #document",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutBlockFlow HTML",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutBlockFlow BODY",
+      "reason": "became visible"
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/repaint/window-resize-background-image-fixed-centered-expected.txt b/third_party/WebKit/LayoutTests/platform/win/fast/repaint/window-resize-background-image-fixed-centered-expected.txt
new file mode 100644
index 0000000..e7fb3d9
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/win/fast/repaint/window-resize-background-image-fixed-centered-expected.txt
@@ -0,0 +1,181 @@
+{
+  "name": "Content Root Layer",
+  "bounds": [600, 250],
+  "children": [
+    {
+      "name": "LayoutView #document",
+      "bounds": [600, 250],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "paintInvalidations": [
+        {
+          "object": "LayoutView #document",
+          "rect": [0, 250, 600, 250],
+          "reason": "incremental"
+        },
+        {
+          "object": "LayoutView #document",
+          "rect": [0, 0, 600, 250],
+          "reason": "full"
+        },
+        {
+          "object": "LayoutBlockFlow HTML",
+          "rect": [0, 0, 600, 8],
+          "reason": "forced by layout"
+        }
+      ]
+    }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutView #document",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutBlockFlow HTML",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutView #document",
+      "reason": "full"
+    }
+  ]
+}
+{
+  "name": "Content Root Layer",
+  "bounds": [400, 250],
+  "children": [
+    {
+      "name": "LayoutView #document",
+      "bounds": [400, 250],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "paintInvalidations": [
+        {
+          "object": "LayoutBlockFlow HTML",
+          "rect": [0, 0, 600, 8],
+          "reason": "forced by layout"
+        },
+        {
+          "object": "LayoutView #document",
+          "rect": [0, 0, 400, 250],
+          "reason": "full"
+        },
+        {
+          "object": "LayoutView #document",
+          "rect": [400, 0, 200, 250],
+          "reason": "incremental"
+        }
+      ]
+    }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutView #document",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutView #document",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutBlockFlow HTML",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutBlockFlow BODY",
+      "reason": "became visible"
+    }
+  ]
+}
+{
+  "name": "Content Root Layer",
+  "bounds": [400, 600],
+  "children": [
+    {
+      "name": "LayoutView #document",
+      "bounds": [400, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "paintInvalidations": [
+        {
+          "object": "LayoutView #document",
+          "rect": [0, 0, 400, 600],
+          "reason": "full"
+        },
+        {
+          "object": "LayoutView #document",
+          "rect": [0, 250, 400, 350],
+          "reason": "incremental"
+        },
+        {
+          "object": "LayoutBlockFlow HTML",
+          "rect": [0, 0, 400, 8],
+          "reason": "forced by layout"
+        }
+      ]
+    }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutView #document",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutView #document",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutBlockFlow HTML",
+      "reason": "forced by layout"
+    }
+  ]
+}
+{
+  "name": "Content Root Layer",
+  "bounds": [800, 600],
+  "children": [
+    {
+      "name": "LayoutView #document",
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "paintInvalidations": [
+        {
+          "object": "LayoutView #document",
+          "rect": [0, 0, 800, 600],
+          "reason": "full"
+        },
+        {
+          "object": "LayoutBlockFlow HTML",
+          "rect": [0, 0, 800, 8],
+          "reason": "forced by layout"
+        },
+        {
+          "object": "LayoutView #document",
+          "rect": [400, 0, 400, 600],
+          "reason": "incremental"
+        }
+      ]
+    }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutView #document",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutView #document",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutBlockFlow HTML",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutBlockFlow BODY",
+      "reason": "became visible"
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/table/border-collapsing/cached-change-cell-sl-border-color-expected.txt b/third_party/WebKit/LayoutTests/platform/win/fast/table/border-collapsing/cached-change-cell-sl-border-color-expected.txt
index d185193..9f88ae970 100644
--- a/third_party/WebKit/LayoutTests/platform/win/fast/table/border-collapsing/cached-change-cell-sl-border-color-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/fast/table/border-collapsing/cached-change-cell-sl-border-color-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -15,25 +17,27 @@
           "object": "LayoutText #text",
           "rect": [90, 30, 12, 17],
           "reason": "layoutObject removal"
-        },
-        {
-          "object": "InlineTextBox 'A'",
-          "reason": "full"
-        },
-        {
-          "object": "LayoutTableCell TD",
-          "reason": "full"
-        },
-        {
-          "object": "LayoutTableCell TD id='foo'",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutText #text",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutTableCell TD id='foo'",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutTableCell TD",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutTableCell TD id='foo'",
+      "reason": "style change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/table/resize-table-repaint-percent-size-cell-expected.txt b/third_party/WebKit/LayoutTests/platform/win/fast/table/resize-table-repaint-percent-size-cell-expected.txt
index 59574e1..9e2a822 100644
--- a/third_party/WebKit/LayoutTests/platform/win/fast/table/resize-table-repaint-percent-size-cell-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/fast/table/resize-table-repaint-percent-size-cell-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -60,41 +62,55 @@
           "object": "LayoutText #text",
           "rect": [3, 67, 46, 17],
           "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'ROW1'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'ROW1'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'ROW2'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'ROW2'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutTable (positioned) TABLE id='table'",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutTableRow TR",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutTableCell TD",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox 'ROW1'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutTableRow TR",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutTableCell TD",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox 'ROW2'",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/table/resize-table-repaint-vertical-align-cell-expected.txt b/third_party/WebKit/LayoutTests/platform/win/fast/table/resize-table-repaint-vertical-align-cell-expected.txt
index eef8517a3..9a3baf7c 100644
--- a/third_party/WebKit/LayoutTests/platform/win/fast/table/resize-table-repaint-vertical-align-cell-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/fast/table/resize-table-repaint-vertical-align-cell-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -30,25 +32,35 @@
           "object": "LayoutText #text",
           "rect": [3, 91, 63, 17],
           "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'MIDDLE'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'MIDDLE'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutTable (positioned) TABLE id='table'",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutTableRow TR",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutTableCell TD",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox 'MIDDLE'",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/table/resize-table-row-repaint-expected.txt b/third_party/WebKit/LayoutTests/platform/win/fast/table/resize-table-row-repaint-expected.txt
index 05edd7b..60f01bb 100644
--- a/third_party/WebKit/LayoutTests/platform/win/fast/table/resize-table-row-repaint-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/fast/table/resize-table-row-repaint-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -25,25 +27,31 @@
           "object": "LayoutText #text",
           "rect": [3, 143, 63, 17],
           "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'MIDDLE'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'MIDDLE'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutTableRow TR id='row'",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutTableCell TD",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox 'MIDDLE'",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/caret-with-composited-scroll-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/caret-with-composited-scroll-expected.txt
index 225d374..c3d433a7 100644
--- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/caret-with-composited-scroll-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/caret-with-composited-scroll-expected.txt
@@ -1,22 +1,27 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow DIV id='scroller'",
           "position": [8, 44],
           "bounds": [100, 100],
           "shouldFlattenTransform": false,
           "drawsContent": true,
           "children": [
             {
+              "name": "Scrolling Layer",
               "bounds": [100, 100],
               "shouldFlattenTransform": false,
               "children": [
                 {
+                  "name": "Scrolling Contents Layer",
                   "bounds": [205, 1022],
                   "drawsContent": true,
                   "paintInvalidations": [
@@ -40,23 +45,20 @@
               ]
             },
             {
+              "name": "Overflow Controls Host Layer",
               "bounds": [100, 100],
               "children": [
                 {
+                  "name": "Horizontal Scrollbar Layer",
                   "position": [0, 100],
                   "bounds": [100, 0],
                   "drawsContent": true
                 },
                 {
+                  "name": "Vertical Scrollbar Layer",
                   "position": [100, 0],
                   "bounds": [0, 100],
-                  "drawsContent": true,
-                  "paintInvalidations": [
-                    {
-                      "object": "Vertical Scrollbar Layer",
-                      "reason": "full"
-                    }
-                  ]
+                  "drawsContent": true
                 }
               ]
             }
@@ -64,6 +66,20 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutTextControl INPUT id='text'",
+      "reason": "subtree"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='inner-editor'",
+      "reason": "subtree"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='inner-editor'",
+      "reason": "invalidate paint rectangle"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/invalidate-box-shadow-currentColor-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/invalidate-box-shadow-currentColor-expected.txt
index c2388e0..b55d2ba 100644
--- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/invalidate-box-shadow-currentColor-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/invalidate-box-shadow-currentColor-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -15,17 +17,27 @@
           "object": "LayoutText #text",
           "rect": [8, 8, 29, 17],
           "reason": "style change"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox 'Text'",
-          "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/paint/invalidation/non-text-link-invalidation-optimization-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/non-text-link-invalidation-optimization-expected.txt
index 3191b55..1f537cb 100644
--- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/non-text-link-invalidation-optimization-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/non-text-link-invalidation-optimization-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -35,33 +37,59 @@
           "object": "LayoutText #text",
           "rect": [326, 8, 25, 17],
           "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox ' images.'",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox ' no '",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox ' passes if '",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox ' text is invalidated and '",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox 'This test '",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox 'only'",
-          "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/win/paint/selection/selection-within-composited-scroller-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/selection/selection-within-composited-scroller-expected.txt
index 3fdb4d4a..040f23d 100644
--- a/third_party/WebKit/LayoutTests/platform/win/paint/selection/selection-within-composited-scroller-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/paint/selection/selection-within-composited-scroller-expected.txt
@@ -1,44 +1,29 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutBlockFlow BODY",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutBlockFlow HTML",
-          "reason": "selection"
-        }
-      ],
       "children": [
         {
+          "name": "LayoutBlockFlow DIV id='scroller'",
           "position": [8, 8],
           "bounds": [200, 200],
           "contentsOpaque": true,
           "shouldFlattenTransform": false,
           "drawsContent": true,
           "backgroundColor": "#D3D3D3",
-          "paintInvalidations": [
-            {
-              "object": "InlineTextBox 'test'",
-              "reason": "selection"
-            },
-            {
-              "object": "LayoutBlockFlow DIV id='scroller'",
-              "reason": "selection"
-            }
-          ],
           "children": [
             {
+              "name": "Scrolling Layer",
               "bounds": [185, 185],
               "shouldFlattenTransform": false,
               "children": [
                 {
+                  "name": "Scrolling Contents Layer",
                   "bounds": [200, 1620],
                   "drawsContent": true,
                   "paintInvalidations": [
@@ -46,35 +31,27 @@
                       "object": "LayoutText #text",
                       "rect": [0, 610, 23, 17],
                       "reason": "selection"
-                    },
-                    {
-                      "object": "InlineTextBox 'test'",
-                      "reason": "selection"
-                    },
-                    {
-                      "object": "LayoutBlockFlow DIV id='scroller'",
-                      "reason": "selection"
-                    },
-                    {
-                      "object": "LayoutBlockFlow DIV id='target'",
-                      "reason": "selection"
                     }
                   ]
                 }
               ]
             },
             {
+              "name": "Overflow Controls Host Layer",
               "bounds": [200, 200],
               "children": [
                 {
+                  "name": "Horizontal Scrollbar Layer",
                   "position": [0, 185],
                   "bounds": [185, 15]
                 },
                 {
+                  "name": "Vertical Scrollbar Layer",
                   "position": [185, 0],
                   "bounds": [15, 185]
                 },
                 {
+                  "name": "Scroll Corner Layer",
                   "position": [185, 185],
                   "bounds": [15, 15],
                   "drawsContent": true
@@ -85,6 +62,32 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow HTML",
+      "reason": "selection"
+    },
+    {
+      "object": "LayoutBlockFlow BODY",
+      "reason": "selection"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='scroller'",
+      "reason": "selection"
+    },
+    {
+      "object": "LayoutBlockFlow DIV id='target'",
+      "reason": "selection"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "selection"
+    },
+    {
+      "object": "InlineTextBox 'test'",
+      "reason": "selection"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/win/svg/carto.net/tabgroup-expected.txt b/third_party/WebKit/LayoutTests/platform/win/svg/carto.net/tabgroup-expected.txt
index 0463356..eee8c6ec 100644
--- a/third_party/WebKit/LayoutTests/platform/win/svg/carto.net/tabgroup-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/svg/carto.net/tabgroup-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -805,717 +807,1195 @@
           "object": "LayoutSVGText text",
           "rect": [180, 136, 16, 38],
           "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox '& Info'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox '& Info'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox ''",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Account'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Account'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'Biography'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Biography'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'Biography'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'Biography'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'Biography'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'Browser'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Browser'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Browser'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'Click on the second tab to see oversize content'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'Download'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Download'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'Events'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Events'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'Events'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'Events'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'Events'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'Folder'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Folder'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'Geodata'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Geodata'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Geodata'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'Help'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Help'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'Portrait'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'Portrait'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'Portrait'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'Portrait'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'Relations'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Relations'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Relations'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'Relations'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'Relations'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'Relations'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'This is a tabgroup with triangular tab corners'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'This is oversize content that can be'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'Your'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Your'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'and a double line tab. (use \"\\n\" as a line separator)'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'hidden on tab-change'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'hidden on tab-change'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "LayoutSVGContainer g",
-          "reason": "layoutObject removal"
-        },
-        {
-          "object": "LayoutSVGContainer g",
-          "reason": "layoutObject removal"
-        },
-        {
-          "object": "LayoutSVGContainer g",
-          "reason": "layoutObject removal"
-        },
-        {
-          "object": "LayoutSVGContainer g",
-          "reason": "layoutObject removal"
-        },
-        {
-          "object": "LayoutSVGContainer g",
-          "reason": "layoutObject removal"
-        },
-        {
-          "object": "LayoutSVGContainer g id='tabgroupRectRound__0_content'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "LayoutSVGContainer g id='tabgroupRectRound__0_content'",
-          "reason": "layoutObject removal"
-        },
-        {
-          "object": "LayoutSVGContainer g id='tabgroupRectRound__1_content'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "LayoutSVGContainer g id='tabgroupRectRound__2_content'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "LayoutSVGContainer g id='tabgroupRectRound__3_content'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "LayoutSVGContainer g id='tabgroupRectTriangle__0_content'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "LayoutSVGContainer g id='tabgroupRectTriangle__1_content'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "LayoutSVGContainer g id='tabgroupRectTriangle__2_content'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "LayoutSVGContainer g id='tabgroupRectTriangle__2_content'",
-          "reason": "layoutObject removal"
-        },
-        {
-          "object": "LayoutSVGContainer g id='tabgroupRectTriangle__3_content'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "LayoutSVGContainer g id='tabgroupRect__0_content'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "LayoutSVGContainer g id='tabgroupRect__1_content'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "LayoutSVGContainer g id='tabgroupRect__1_content'",
-          "reason": "layoutObject removal"
-        },
-        {
-          "object": "LayoutSVGContainer g id='tabgroupRect__2_content'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "LayoutSVGContainer g id='tabgroupRect__3_content'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "LayoutSVGContainer g id='tabgroupRound__0_content'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "LayoutSVGContainer g id='tabgroupRound__1_content'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "LayoutSVGContainer g id='tabgroupRound__1_content'",
-          "reason": "layoutObject removal"
-        },
-        {
-          "object": "LayoutSVGContainer g id='tabgroupRound__2_content'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "LayoutSVGContainer g id='tabgroupRound__3_content'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "LayoutSVGHiddenContainer g id='oversizeContent'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "LayoutSVGHiddenContainer g id='oversizeContent'",
-          "reason": "layoutObject removal"
-        },
-        {
-          "object": "LayoutSVGHiddenContainer g id='tabgroupTriangle__0_content'",
-          "reason": "layoutObject removal"
-        },
-        {
-          "object": "LayoutSVGHiddenContainer g id='tabgroupTriangle__1_content'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "LayoutSVGHiddenContainer g id='tabgroupTriangle__2_content'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "LayoutSVGHiddenContainer g id='tabgroupTriangle__3_content'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "reason": "layoutObject removal"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "reason": "layoutObject removal"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "reason": "layoutObject removal"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "reason": "layoutObject removal"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "reason": "layoutObject removal"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "reason": "layoutObject removal"
-        },
-        {
-          "object": "LayoutSVGPath path",
-          "reason": "layoutObject removal"
-        },
-        {
-          "object": "LayoutSVGPath path",
-          "reason": "layoutObject removal"
-        },
-        {
-          "object": "LayoutSVGPath path",
-          "reason": "layoutObject removal"
-        },
-        {
-          "object": "LayoutSVGPath path",
-          "reason": "layoutObject removal"
-        },
-        {
-          "object": "LayoutSVGPath path",
-          "reason": "layoutObject removal"
-        },
-        {
-          "object": "LayoutSVGPath path id='tabgroupRectRound__0'",
-          "reason": "layoutObject removal"
-        },
-        {
-          "object": "LayoutSVGPath path id='tabgroupRectTriangle__2'",
-          "reason": "layoutObject removal"
-        },
-        {
-          "object": "LayoutSVGPath path id='tabgroupRect__1'",
-          "reason": "layoutObject removal"
-        },
-        {
-          "object": "LayoutSVGPath path id='tabgroupRound__1'",
-          "reason": "layoutObject removal"
-        },
-        {
-          "object": "LayoutSVGPath path id='tabgroupTriangle__0'",
-          "reason": "layoutObject removal"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "reason": "layoutObject removal"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "reason": "layoutObject removal"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "reason": "layoutObject removal"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "reason": "layoutObject removal"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "reason": "layoutObject removal"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "reason": "layoutObject removal"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "reason": "layoutObject removal"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "reason": "layoutObject removal"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "reason": "layoutObject removal"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "reason": "layoutObject removal"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "reason": "layoutObject removal"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutSVGPath path",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGPath path id='tabgroupRect__1'",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGTSpan tspan",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGText text",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGContainer g id='tabgroupRect__1_content'",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGContainer g",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGPath path",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGPath path id='tabgroupTriangle__0'",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGTSpan tspan",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGTSpan tspan",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGText text",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGHiddenContainer g id='tabgroupTriangle__0_content'",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGContainer g",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGPath path",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGPath path id='tabgroupRectTriangle__2'",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGTSpan tspan",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGText text",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGContainer g id='tabgroupRectTriangle__2_content'",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGContainer g",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGPath path",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGPath path id='tabgroupRound__1'",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGTSpan tspan",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGText text",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGContainer g id='tabgroupRound__1_content'",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGContainer g",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGPath path",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGPath path id='tabgroupRectRound__0'",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGTSpan tspan",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGText text",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGContainer g id='tabgroupRectRound__0_content'",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGContainer g",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGRect rect",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGRect rect",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGRect rect",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGTSpan tspan",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGText text",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGHiddenContainer g id='oversizeContent'",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGRoot svg",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGContainer g id='tabgroupRect'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGContainer g",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer g",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGPath path",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGPath path id='tabgroupRect__0'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGText text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGTSpan tspan",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'Biography'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer g id='tabgroupRect__0_content'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer g",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGPath path",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGPath path id='tabgroupRect__2'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGText text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGTSpan tspan",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'Events'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer g id='tabgroupRect__2_content'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer g",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGPath path",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGPath path id='tabgroupRect__3'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGText text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGTSpan tspan",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'Portrait'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer g id='tabgroupRect__3_content'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer g",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGPath path",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGPath path id='tabgroupRect__1'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGText text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGTSpan tspan",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'Relations'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer g id='tabgroupRect__1_content'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer g id='tabgroupTriangle'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGContainer g",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer g",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGPath path",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGPath path id='tabgroupTriangle__1'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGText text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGTSpan tspan",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'Download'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGTSpan tspan",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'Folder'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGHiddenContainer g id='tabgroupTriangle__1_content'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGHiddenContainer g id='oversizeContent'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGRect rect",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGRect rect",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGRect rect",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGText text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'This is oversize content that can be'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGTSpan tspan",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'hidden on tab-change'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer g",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGPath path",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGPath path id='tabgroupTriangle__2'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGText text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGTSpan tspan",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'Your'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGTSpan tspan",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'Account'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGHiddenContainer g id='tabgroupTriangle__2_content'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer g",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGPath path",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGPath path id='tabgroupTriangle__3'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGText text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGTSpan tspan",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'Help'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGTSpan tspan",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox '& Info'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGHiddenContainer g id='tabgroupTriangle__3_content'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer g",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGPath path",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGPath path id='tabgroupTriangle__0'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGText text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGTSpan tspan",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'Geodata'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGTSpan tspan",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'Browser'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer g id='tabgroupTriangle__0_content'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGText text id='contentTabGroupTriangle0'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'This is a tabgroup with triangular tab corners'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGTSpan tspan",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'and a double line tab. (use \"\\n\" as a line separator)'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGTSpan tspan",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'Click on the second tab to see oversize content'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer g id='tabgroupRectTriangle'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGContainer g",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer g",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGPath path",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGPath path id='tabgroupRectTriangle__0'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGText text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGTSpan tspan",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'Biography'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer g id='tabgroupRectTriangle__0_content'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer g",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGPath path",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGPath path id='tabgroupRectTriangle__1'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGText text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGTSpan tspan",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'Relations'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer g id='tabgroupRectTriangle__1_content'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer g",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGPath path",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGPath path id='tabgroupRectTriangle__3'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGText text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGTSpan tspan",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'Portrait'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer g id='tabgroupRectTriangle__3_content'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer g",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGPath path",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGPath path id='tabgroupRectTriangle__2'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGText text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGTSpan tspan",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'Events'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer g id='tabgroupRectTriangle__2_content'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer g id='tabgroupRound'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGContainer g",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer g",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGPath path",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGPath path id='tabgroupRound__0'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGText text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGTSpan tspan",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'Biography'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer g id='tabgroupRound__0_content'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer g",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGPath path",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGPath path id='tabgroupRound__2'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGText text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGTSpan tspan",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'Events'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer g id='tabgroupRound__2_content'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer g",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGPath path",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGPath path id='tabgroupRound__3'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGText text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGTSpan tspan",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'Portrait'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer g id='tabgroupRound__3_content'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer g",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGPath path",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGPath path id='tabgroupRound__1'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGText text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGTSpan tspan",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'Relations'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer g id='tabgroupRound__1_content'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer g id='tabgroupRectRound'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGContainer g",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer g",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGPath path",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGPath path id='tabgroupRectRound__1'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGText text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGTSpan tspan",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'Relations'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer g id='tabgroupRectRound__1_content'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer g",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGPath path",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGPath path id='tabgroupRectRound__2'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGText text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGTSpan tspan",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'Events'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer g id='tabgroupRectRound__2_content'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer g",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGPath path",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGPath path id='tabgroupRectRound__3'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGText text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGTSpan tspan",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'Portrait'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer g id='tabgroupRectRound__3_content'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer g",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGPath path",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGPath path id='tabgroupRectRound__0'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGText text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGTSpan tspan",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'Biography'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer g id='tabgroupRectRound__0_content'",
+      "reason": "layoutObject insertion"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/win/svg/carto.net/window-expected.txt b/third_party/WebKit/LayoutTests/platform/win/svg/carto.net/window-expected.txt
index 555e984..2b676f31 100644
--- a/third_party/WebKit/LayoutTests/platform/win/svg/carto.net/window-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/svg/carto.net/window-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -1020,269 +1022,1035 @@
           "object": "LayoutSVGPath line",
           "rect": [0, 30, 5, 2],
           "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox ''Resize Navigation Window' for a'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'Big Window'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'Callback function is active'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'Changing a colour changes background'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'Click on button'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'Colour Picker'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'Navigation Window'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'Nested middlesize Window'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'Note that this window also'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'Small Window'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'Status Window'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'Statusbar'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'This is a big movable window'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'This is a minimal window'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'This is a none-moveable'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'This window contains other windows'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'This window has a callback'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'This window should'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'and alerting window'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'contain navigation tools'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'events'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'features a window decoration'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'function indicating mouse'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'it is also not moveable'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'movements in the statusbar'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'none-closeable status'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'random resize of this Window'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'window'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'without title and status bar.'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "LayoutSVGContainer g",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "LayoutSVGContainer g",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "LayoutSVGContainer g",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "LayoutSVGContainer g id='windowTitlebarGroupminimalWindow'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "LayoutSVGHiddenContainer symbol id='closeButton'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "LayoutSVGHiddenContainer symbol id='maximizeButton'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "LayoutSVGHiddenContainer symbol id='minimizeButton'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutSVGHiddenContainer symbol id='closeButton'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGRect rect",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGPath line",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGPath line",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGHiddenContainer symbol id='maximizeButton'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGRect rect",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGHiddenContainer symbol id='minimizeButton'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGRect rect",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGPath line",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer g id='Windows'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer g id='navWindow'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer g id='windowMainGroupnavWindow'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGRect rect",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer g",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGText text id='textNavWindow'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'This window should'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGTSpan tspan",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'contain navigation tools'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGTSpan tspan",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'Click on button'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGTSpan tspan",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox ''Resize Navigation Window' for a'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGTSpan tspan",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'random resize of this Window'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGTSpan tspan",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'Note that this window also'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGTSpan tspan",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'features a window decoration'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGRect rect",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGText text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'Statusbar'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer g id='windowTitlebarGroupnavWindow'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer use id='closeButtonnavWindow'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGViewportContainer svg id='closeButton'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGRect rect",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGPath line",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGPath line",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer use id='maximizeButtonnavWindow'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGViewportContainer svg id='maximizeButton'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGRect rect",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer use id='minimizeButtonnavWindow'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGViewportContainer svg id='minimizeButton'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGRect rect",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGPath line",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer g id='bigWindow'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer g id='windowMainGroupbigWindow'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGRect rect",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer g",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGRect rect",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGText text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'This is a big movable window'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer g id='nestedWindow'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer g id='windowMainGroupnestedWindow'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGRect rect",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer g",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGRect rect",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGText text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'This window contains other windows'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer g id='colourPickerWindow'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer g id='windowMainGroupcolourPickerWindow'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGRect rect",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer g",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGRect rect",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGText text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'Changing a colour changes background'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer g id='windowTitlebarGroupcolourPickerWindow'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGRect rect id='titleBarcolourPickerWindow'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGText text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'Colour Picker'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer use id='closeButtoncolourPickerWindow'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGViewportContainer svg id='closeButton'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGRect rect",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGPath line",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGPath line",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer use id='maximizeButtoncolourPickerWindow'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGViewportContainer svg id='maximizeButton'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGRect rect",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer use id='minimizeButtoncolourPickerWindow'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGViewportContainer svg id='minimizeButton'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGRect rect",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGPath line",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer g id='statusWindow'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer g id='windowMainGroupstatusWindow'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGRect rect",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer g",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGText text id='textStatusWindow'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'This is a none-moveable'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGTSpan tspan",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'none-closeable status'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGTSpan tspan",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'window'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer g id='windowTitlebarGroupstatusWindow'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGRect rect id='titleBarstatusWindow'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGText text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'Status Window'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer use id='maximizeButtonstatusWindow'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGViewportContainer svg id='maximizeButton'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGRect rect",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer use id='minimizeButtonstatusWindow'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGViewportContainer svg id='minimizeButton'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGRect rect",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGPath line",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer g id='windowTitlebarGroupnestedWindow'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGRect rect id='titleBarnestedWindow'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGText text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'Nested middlesize Window'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer use id='closeButtonnestedWindow'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGViewportContainer svg id='closeButton'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGRect rect",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGPath line",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGPath line",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer use id='maximizeButtonnestedWindow'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGViewportContainer svg id='maximizeButton'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGRect rect",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer use id='minimizeButtonnestedWindow'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGViewportContainer svg id='minimizeButton'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGRect rect",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGPath line",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer g id='smallWindow'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer g id='windowMainGroupsmallWindow'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGRect rect",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer g",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGText text id='textSmallWindow'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'This window has a callback'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGTSpan tspan",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'function indicating mouse'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGTSpan tspan",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'movements in the statusbar'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGTSpan tspan",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'and alerting window'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGTSpan tspan",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'events'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGRect rect",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGText text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'Callback function is active'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer g id='windowTitlebarGroupsmallWindow'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGRect rect id='titleBarsmallWindow'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGText text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'Small Window'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer use id='closeButtonsmallWindow'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGViewportContainer svg id='closeButton'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGRect rect",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGPath line",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGPath line",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer use id='maximizeButtonsmallWindow'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGViewportContainer svg id='maximizeButton'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGRect rect",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer use id='minimizeButtonsmallWindow'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGViewportContainer svg id='minimizeButton'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGRect rect",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGPath line",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer g id='minimalWindow'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer g id='windowMainGroupminimalWindow'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGRect rect",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer g",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGText text id='textMinimalWindow'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'This is a minimal window'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGTSpan tspan",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'without title and status bar.'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGTSpan tspan",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'it is also not moveable'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer g id='windowTitlebarGroupminimalWindow'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer g id='windowTitlebarGroupbigWindow'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGRect rect id='titleBarbigWindow'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGText text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'Big Window'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer use id='closeButtonbigWindow'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGViewportContainer svg id='closeButton'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGRect rect",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGPath line",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGPath line",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer use id='maximizeButtonbigWindow'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGViewportContainer svg id='maximizeButton'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGRect rect",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer use id='minimizeButtonbigWindow'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGViewportContainer svg id='minimizeButton'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGRect rect",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGPath line",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer g id='Windows'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGContainer g id='navWindow'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGContainer g id='windowTitlebarGroupnavWindow'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGContainer g id='decoGroupnavWindow'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGRect rect",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGRect rect id='decoGroupMinimizednavWindow'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGText text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'Navigation Window'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer use id='closeButtonnavWindow'",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutSVGViewportContainer svg id='closeButton'",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutSVGRect rect",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGPath line",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGPath line",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGContainer use id='maximizeButtonnavWindow'",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutSVGViewportContainer svg id='maximizeButton'",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutSVGRect rect",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGContainer use id='minimizeButtonnavWindow'",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutSVGViewportContainer svg id='minimizeButton'",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutSVGRect rect",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGPath line",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/win/svg/custom/js-late-clipPath-and-object-creation-expected.txt b/third_party/WebKit/LayoutTests/platform/win/svg/custom/js-late-clipPath-and-object-creation-expected.txt
index e635e26b..3b1b5d1 100644
--- a/third_party/WebKit/LayoutTests/platform/win/svg/custom/js-late-clipPath-and-object-creation-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/svg/custom/js-late-clipPath-and-object-creation-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -50,37 +52,67 @@
           "object": "LayoutSVGPath path",
           "rect": [0, 0, 334, 500],
           "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'Clipped. INVISIBLE.'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'Clipped. INVISIBLE.'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Clipped. INVISIBLE.'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "LayoutSVGResourceClipper clipPath id='dynClip'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutSVGRoot svg id='svg-root'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGContainer g id='content'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGText text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'Clipped. INVISIBLE.'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGRoot svg id='svg-root'",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutSVGContainer g id='content'",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutSVGText text",
+      "reason": "style change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "incremental"
+    },
+    {
+      "object": "InlineTextBox 'Clipped. INVISIBLE.'",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutSVGResourceClipper clipPath id='dynClip'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGPath path",
+      "reason": "layoutObject insertion"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/win/svg/custom/js-late-clipPath-creation-expected.txt b/third_party/WebKit/LayoutTests/platform/win/svg/custom/js-late-clipPath-creation-expected.txt
index 748d396..929c7915 100644
--- a/third_party/WebKit/LayoutTests/platform/win/svg/custom/js-late-clipPath-creation-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/svg/custom/js-late-clipPath-creation-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -30,29 +32,43 @@
           "object": "LayoutSVGPath path",
           "rect": [0, 0, 334, 500],
           "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'Clipped. INVISIBLE.'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'Clipped. INVISIBLE.'",
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGResourceClipper clipPath id='dynClip'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutSVGRoot svg id='svg-root'",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutSVGContainer g id='content'",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutSVGText text",
+      "reason": "style change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "incremental"
+    },
+    {
+      "object": "InlineTextBox 'Clipped. INVISIBLE.'",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutSVGResourceClipper clipPath id='dynClip'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGPath path",
+      "reason": "layoutObject insertion"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/win/svg/custom/js-late-gradient-and-object-creation-expected.txt b/third_party/WebKit/LayoutTests/platform/win/svg/custom/js-late-gradient-and-object-creation-expected.txt
index 48a934e7..b857e71d 100644
--- a/third_party/WebKit/LayoutTests/platform/win/svg/custom/js-late-gradient-and-object-creation-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/svg/custom/js-late-gradient-and-object-creation-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -45,53 +47,87 @@
           "object": "LayoutSVGText text",
           "rect": [0, 15, 449, 127],
           "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'Gradient on fill'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'Gradient on fill/stroke'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'Gradient on stroke'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "LayoutSVGGradientStop stop",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "LayoutSVGGradientStop stop",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "LayoutSVGGradientStop stop",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "LayoutSVGResourceLinearGradient linearGradient id='fillLinearGradient'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "LayoutSVGResourceLinearGradient linearGradient id='strokeLinearGradient'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutSVGResourceLinearGradient linearGradient id='fillLinearGradient'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGGradientStop stop",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGGradientStop stop",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGResourceLinearGradient linearGradient id='strokeLinearGradient'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGGradientStop stop",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGRoot svg id='svg-root'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGContainer g id='content'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGText text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'Gradient on fill'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGText text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'Gradient on stroke'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGText text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'Gradient on fill/stroke'",
+      "reason": "layoutObject insertion"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/win/svg/custom/js-late-gradient-creation-expected.txt b/third_party/WebKit/LayoutTests/platform/win/svg/custom/js-late-gradient-creation-expected.txt
index fdeb44e..b4d11b9 100644
--- a/third_party/WebKit/LayoutTests/platform/win/svg/custom/js-late-gradient-creation-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/svg/custom/js-late-gradient-creation-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -10,33 +12,31 @@
           "object": "LayoutSVGText text",
           "rect": [33, 23, 700, 189],
           "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox 'Gradient on fill'",
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGGradientStop stop",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "LayoutSVGGradientStop stop",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "LayoutSVGResourceLinearGradient linearGradient id='dynGrad'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutSVGText text",
+      "reason": "style change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutSVGResourceLinearGradient linearGradient id='dynGrad'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGGradientStop stop",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGGradientStop stop",
+      "reason": "layoutObject insertion"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/win/svg/custom/js-late-pattern-and-object-creation-expected.txt b/third_party/WebKit/LayoutTests/platform/win/svg/custom/js-late-pattern-and-object-creation-expected.txt
index 591a59b..f9814a5 100644
--- a/third_party/WebKit/LayoutTests/platform/win/svg/custom/js-late-pattern-and-object-creation-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/svg/custom/js-late-pattern-and-object-creation-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -65,41 +67,91 @@
           "object": "LayoutSVGRect rect",
           "rect": [8, 8, 17, 17],
           "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'Pattern on fill'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'Pattern on fill/stroke'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'Pattern on stroke'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "LayoutSVGResourcePattern pattern id='fillPattern'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "LayoutSVGResourcePattern pattern id='strokePattern'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutSVGResourcePattern pattern id='fillPattern'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGRect rect",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGRect rect",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGResourcePattern pattern id='strokePattern'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGRect rect",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGRect rect",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGRoot svg id='svg-root'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGContainer g id='content'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGText text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'Pattern on fill'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGText text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'Pattern on stroke'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGText text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'Pattern on fill/stroke'",
+      "reason": "layoutObject insertion"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/win/svg/custom/js-late-pattern-creation-expected.txt b/third_party/WebKit/LayoutTests/platform/win/svg/custom/js-late-pattern-creation-expected.txt
index 6871365e..4ca74006 100644
--- a/third_party/WebKit/LayoutTests/platform/win/svg/custom/js-late-pattern-creation-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/svg/custom/js-late-pattern-creation-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -20,25 +22,31 @@
           "object": "LayoutSVGRect rect",
           "rect": [8, 12, 17, 26],
           "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'Pattern on fill'",
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGResourcePattern pattern id='dynPattern'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutSVGText text",
+      "reason": "style change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutSVGResourcePattern pattern id='dynPattern'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGRect rect",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGRect rect",
+      "reason": "layoutObject insertion"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/win/svg/custom/scrolling-embedded-svg-file-image-repaint-problem-expected.txt b/third_party/WebKit/LayoutTests/platform/win/svg/custom/scrolling-embedded-svg-file-image-repaint-problem-expected.txt
index 85604ee..3ed078a 100644
--- a/third_party/WebKit/LayoutTests/platform/win/svg/custom/scrolling-embedded-svg-file-image-repaint-problem-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/svg/custom/scrolling-embedded-svg-file-image-repaint-problem-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [1026, 1036],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [1026, 1036],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -15,37 +17,23 @@
           "object": "LayoutInline A",
           "rect": [384, 1010, 47, 22],
           "reason": "style change"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox '\n'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'index'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'pservers-pattern-01-b \u2190'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox '\u2192 script-handle-01-b'",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow P",
+      "reason": "invalidate paint rectangle"
+    },
+    {
+      "object": "LayoutInline A",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "style change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/win/svg/custom/text-dom-removal-expected.txt b/third_party/WebKit/LayoutTests/platform/win/svg/custom/text-dom-removal-expected.txt
index 0b5bfb2..fd7324a6 100644
--- a/third_party/WebKit/LayoutTests/platform/win/svg/custom/text-dom-removal-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/svg/custom/text-dom-removal-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -25,17 +27,27 @@
           "object": "LayoutSVGRect rect",
           "rect": [0, 0, 20, 20],
           "reason": "layoutObject removal"
-        },
-        {
-          "object": "InlineTextBox ''",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutSVGRect rect",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGText text",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGContainer g id='objectsToRemove'",
+      "reason": "became invisible"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/win/svg/custom/text-repaint-including-stroke-expected.txt b/third_party/WebKit/LayoutTests/platform/win/svg/custom/text-repaint-including-stroke-expected.txt
index 019b9af..d1a6899 100644
--- a/third_party/WebKit/LayoutTests/platform/win/svg/custom/text-repaint-including-stroke-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/svg/custom/text-repaint-including-stroke-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -35,25 +37,31 @@
           "object": "LayoutSVGText text id='bounce'",
           "rect": [30, 0, 404, 58],
           "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Repaint me!'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Repaint me!'",
-          "reason": "style change"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutSVGRoot svg",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGText text id='bounce'",
+      "reason": "full"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox 'Repaint me!'",
+      "reason": "style change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/win/svg/custom/text-xy-updates-SVGList-expected.txt b/third_party/WebKit/LayoutTests/platform/win/svg/custom/text-xy-updates-SVGList-expected.txt
index b9caa38..c805a54 100644
--- a/third_party/WebKit/LayoutTests/platform/win/svg/custom/text-xy-updates-SVGList-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/svg/custom/text-xy-updates-SVGList-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [808, 620],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [808, 620],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -35,25 +37,31 @@
           "object": "LayoutSVGText text id='ttt'",
           "rect": [18, 194, 170, 17],
           "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Passes, if text is at 200x20'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Passes, if text is at 200x20'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutSVGRoot svg:svg",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGText text id='ttt'",
+      "reason": "full"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox 'Passes, if text is at 200x20'",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/win/svg/custom/use-clipped-hit-expected.txt b/third_party/WebKit/LayoutTests/platform/win/svg/custom/use-clipped-hit-expected.txt
index 427bf4e9..adfabeed 100644
--- a/third_party/WebKit/LayoutTests/platform/win/svg/custom/use-clipped-hit-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/svg/custom/use-clipped-hit-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -25,25 +27,35 @@
           "object": "LayoutSVGText text id='status'",
           "rect": [89, 115, 3, 19],
           "reason": "invalidate paint rectangle"
-        },
-        {
-          "object": "InlineTextBox ''",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Passed'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutSVGText text id='status'",
+      "reason": "invalidate paint rectangle"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGText text id='status'",
+      "reason": "full"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'Passed'",
+      "reason": "layoutObject insertion"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/win/svg/custom/use-detach-expected.txt b/third_party/WebKit/LayoutTests/platform/win/svg/custom/use-detach-expected.txt
index 7d544d1..d0fe576 100644
--- a/third_party/WebKit/LayoutTests/platform/win/svg/custom/use-detach-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/svg/custom/use-detach-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -170,69 +172,179 @@
           "object": "LayoutSVGEllipse circle id='use_circle'",
           "rect": [218, 94, 28, 28],
           "reason": "layoutObject removal"
-        },
-        {
-          "object": "InlineTextBox ''",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ''",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ''",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'use'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'use'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'use'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "LayoutSVGHiddenContainer g id='use'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "LayoutSVGHiddenContainer g id='use'",
-          "reason": "layoutObject removal"
-        },
-        {
-          "object": "LayoutSVGHiddenContainer g id='use'",
-          "reason": "layoutObject removal"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGText text id='use_text'",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGContainer use",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGEllipse circle id='use_circle'",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGContainer use",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGHiddenContainer g id='use'",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGContainer g id='use'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer use",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGText text id='use_text'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'use'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer use",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGEllipse circle id='use_circle'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGText text id='use_text'",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGContainer use",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGEllipse circle id='use_circle'",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGContainer use",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGContainer g id='use'",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGHiddenContainer g id='use'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer use",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGText text id='use_text'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'use'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer use",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGEllipse circle id='use_circle'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGText text id='use_text'",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGContainer use",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGEllipse circle id='use_circle'",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGContainer use",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGHiddenContainer g id='use'",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGContainer g id='use'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer use",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGText text id='use_text'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'use'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer use",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGEllipse circle id='use_circle'",
+      "reason": "layoutObject insertion"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/win/svg/custom/use-setAttribute-crash-expected.txt b/third_party/WebKit/LayoutTests/platform/win/svg/custom/use-setAttribute-crash-expected.txt
index 68442ca..3d82a52 100644
--- a/third_party/WebKit/LayoutTests/platform/win/svg/custom/use-setAttribute-crash-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/svg/custom/use-setAttribute-crash-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -50,21 +52,51 @@
           "object": "LayoutSVGViewportContainer svg id='symbol'",
           "rect": [53, 53, 10, 10],
           "reason": "layoutObject removal"
-        },
-        {
-          "object": "InlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutSVGEllipse svg:circle id='circle'",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGViewportContainer svg id='symbol'",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutBlockFlow body",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutBlockFlow body",
+      "reason": "invalidate paint rectangle"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutSVGRoot svg:svg id='svg'",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutSVGEllipse svg:circle id='circle'",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutSVGContainer svg:use id='use'",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutSVGViewportContainer svg id='symbol'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGEllipse svg:circle id='circle'",
+      "reason": "layoutObject insertion"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/win/svg/repaint/focus-element-expected.txt b/third_party/WebKit/LayoutTests/platform/win/svg/repaint/focus-element-expected.txt
index 99a921f9..bd8994e 100644
--- a/third_party/WebKit/LayoutTests/platform/win/svg/repaint/focus-element-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/svg/repaint/focus-element-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -13,6 +15,12 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutSVGRect rect id='rect'",
+      "reason": "style change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/win/svg/repaint/inner-svg-change-viewBox-contract-expected.png b/third_party/WebKit/LayoutTests/platform/win/svg/repaint/inner-svg-change-viewBox-contract-expected.png
index 03cdc1c..deace76 100644
--- a/third_party/WebKit/LayoutTests/platform/win/svg/repaint/inner-svg-change-viewBox-contract-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/svg/repaint/inner-svg-change-viewBox-contract-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/svg/repaint/inner-svg-change-viewBox-contract-expected.txt b/third_party/WebKit/LayoutTests/platform/win/svg/repaint/inner-svg-change-viewBox-contract-expected.txt
deleted file mode 100644
index 243468e..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/svg/repaint/inner-svg-change-viewBox-contract-expected.txt
+++ /dev/null
@@ -1,7 +0,0 @@
-layer at (0,0) size 800x600
-  LayoutView at (0,0) size 800x600
-layer at (0,0) size 300x300
-  LayoutSVGRoot {svg} at (0,0) size 200x200
-    LayoutSVGRect {rect} at (0,0) size 200x200 [fill={[type=SOLID] [color=#0000FF]}] [x=0.00] [y=0.00] [width=200.00] [height=200.00]
-    LayoutSVGViewportContainer {svg} at (0,0) size 200x200
-      LayoutSVGRect {rect} at (0,0) size 200x200 [fill={[type=SOLID] [color=#008000]}] [x=0.00] [y=0.00] [width=100.00] [height=100.00]
diff --git a/third_party/WebKit/LayoutTests/platform/win/svg/repaint/mask-clip-target-transform-expected.png b/third_party/WebKit/LayoutTests/platform/win/svg/repaint/mask-clip-target-transform-expected.png
deleted file mode 100644
index cfef02c..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/svg/repaint/mask-clip-target-transform-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/svg/repaint/mask-clip-target-transform-expected.txt b/third_party/WebKit/LayoutTests/platform/win/svg/repaint/mask-clip-target-transform-expected.txt
deleted file mode 100644
index cb63499..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/svg/repaint/mask-clip-target-transform-expected.txt
+++ /dev/null
@@ -1,18 +0,0 @@
-layer at (0,0) size 800x600
-  LayoutView at (0,0) size 800x600
-layer at (0,0) size 800x600
-  LayoutSVGRoot {svg} at (50,50) size 200x200
-    LayoutSVGHiddenContainer {defs} at (0,0) size 0x0
-      LayoutSVGResourceMasker {mask} [id="mask"] [maskUnits=objectBoundingBox] [maskContentUnits=userSpaceOnUse]
-        LayoutSVGEllipse {circle} at (150,50) size 100x100 [fill={[type=SOLID] [color=#FFFFFF]}] [cx=100.00] [cy=0.00] [r=50.00]
-      LayoutSVGResourceClipper {clipPath} [id="clip"] [clipPathUnits=userSpaceOnUse]
-        LayoutSVGEllipse {circle} at (50,150) size 100x100 [fill={[type=SOLID] [color=#000000]}] [cx=0.00] [cy=100.00] [r=50.00]
-        LayoutSVGEllipse {circle} at (0,0) size 0x0 [fill={[type=SOLID] [color=#000000]}] [cx=0.00] [cy=0.00] [r=0.00]
-    LayoutSVGEllipse {circle} at (150,50) size 100x100 [fill={[type=SOLID] [color=#FF0000]}] [cx=100.00] [cy=0.00] [r=50.00]
-    LayoutSVGContainer {g} at (150,50) size 100x50
-      [masker="mask"] LayoutSVGResourceMasker {mask} at (50,-50) size 100x70
-      LayoutSVGRect {rect} at (0,0) size 300x100 [fill={[type=SOLID] [color=#008000]}] [x=-200.00] [y=-200.00] [width=400.00] [height=200.00]
-    LayoutSVGEllipse {circle} at (50,150) size 100x100 [fill={[type=SOLID] [color=#FF0000]}] [cx=0.00] [cy=100.00] [r=50.00]
-    LayoutSVGContainer {g} at (100,150) size 50x100
-      [clipPath="clip"] LayoutSVGResourceClipper {clipPath} at (-50,50) size 100x100
-      LayoutSVGRect {rect} at (100,0) size 200x300 [fill={[type=SOLID] [color=#008000]}] [x=0.00] [y=-200.00] [width=200.00] [height=400.00]
diff --git a/third_party/WebKit/LayoutTests/platform/win/svg/repaint/outline-offset-text-expected.txt b/third_party/WebKit/LayoutTests/platform/win/svg/repaint/outline-offset-text-expected.txt
index 0c1467b..fd5f25b 100644
--- a/third_party/WebKit/LayoutTests/platform/win/svg/repaint/outline-offset-text-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/svg/repaint/outline-offset-text-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -35,25 +37,31 @@
           "object": "LayoutSVGRoot svg",
           "rect": [78, 40, 130, 84],
           "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'Foo'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Foo'",
-          "reason": "outline"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutSVGRoot svg",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGText text",
+      "reason": "full"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "outline"
+    },
+    {
+      "object": "InlineTextBox 'Foo'",
+      "reason": "outline"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/win/svg/repaint/repaint-non-scaling-stroke-text-decoration-expected.txt b/third_party/WebKit/LayoutTests/platform/win/svg/repaint/repaint-non-scaling-stroke-text-decoration-expected.txt
index b08adaf..6ae5fc07 100644
--- a/third_party/WebKit/LayoutTests/platform/win/svg/repaint/repaint-non-scaling-stroke-text-decoration-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/svg/repaint/repaint-non-scaling-stroke-text-decoration-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -25,25 +27,35 @@
           "object": "LayoutSVGText text id='t'",
           "rect": [9, 13, 48, 28],
           "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox 'Hello'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Hello'",
-          "reason": "style change"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutSVGRoot svg",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGContainer g",
+      "reason": "bounds change"
+    },
+    {
+      "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/svg/repaint/repaint-non-scaling-stroke-text-expected.txt b/third_party/WebKit/LayoutTests/platform/win/svg/repaint/repaint-non-scaling-stroke-text-expected.txt
index b08adaf..6ae5fc07 100644
--- a/third_party/WebKit/LayoutTests/platform/win/svg/repaint/repaint-non-scaling-stroke-text-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/svg/repaint/repaint-non-scaling-stroke-text-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -25,25 +27,35 @@
           "object": "LayoutSVGText text id='t'",
           "rect": [9, 13, 48, 28],
           "reason": "style change"
-        },
-        {
-          "object": "InlineTextBox 'Hello'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Hello'",
-          "reason": "style change"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutSVGRoot svg",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGContainer g",
+      "reason": "bounds change"
+    },
+    {
+      "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/svg/repaint/text-mask-update-expected.txt b/third_party/WebKit/LayoutTests/platform/win/svg/repaint/text-mask-update-expected.txt
index 1cf0fec..c611dd3 100644
--- a/third_party/WebKit/LayoutTests/platform/win/svg/repaint/text-mask-update-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/svg/repaint/text-mask-update-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -45,25 +47,47 @@
           "object": "LayoutSVGRoot svg",
           "rect": [10, 32, 43, 18],
           "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox ''",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'PASS'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGRoot svg",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGText text id='text1'",
+      "reason": "style change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'PASS'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "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/svg/text/append-text-node-to-tspan-expected.txt b/third_party/WebKit/LayoutTests/platform/win/svg/text/append-text-node-to-tspan-expected.txt
index 065d5a0..1b7dccfb 100644
--- a/third_party/WebKit/LayoutTests/platform/win/svg/text/append-text-node-to-tspan-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/svg/text/append-text-node-to-tspan-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -15,53 +17,27 @@
           "object": "LayoutSVGText text",
           "rect": [10, 63, 306, 374],
           "reason": "style change"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ''",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ''",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'PA'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'PASS'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'PASS'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'SS'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutSVGText text",
+      "reason": "style change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'SS'",
+      "reason": "layoutObject insertion"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/win/svg/text/ems-display-none-expected.txt b/third_party/WebKit/LayoutTests/platform/win/svg/text/ems-display-none-expected.txt
index c3b0735..73ea5b16 100644
--- a/third_party/WebKit/LayoutTests/platform/win/svg/text/ems-display-none-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/svg/text/ems-display-none-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -45,33 +47,67 @@
           "object": "LayoutSVGText text id='text'",
           "rect": [50, 54, 571, 85],
           "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox ' '",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'Two lines of text should be visible.'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'Two lines of text should be visible.'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutSVGRoot svg",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGContainer g",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGText text id='text'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGTSpan tspan id='tspan'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'Two lines of text should be visible.'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox ' '",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGTSpan tspan",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'Two lines of text should be visible.'",
+      "reason": "layoutObject insertion"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/win/svg/text/exs-display-none-expected.txt b/third_party/WebKit/LayoutTests/platform/win/svg/text/exs-display-none-expected.txt
index 4135e42..12dc595 100644
--- a/third_party/WebKit/LayoutTests/platform/win/svg/text/exs-display-none-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/svg/text/exs-display-none-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -45,33 +47,67 @@
           "object": "LayoutSVGText text id='text'",
           "rect": [50, 50, 571, 81],
           "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox ' '",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'Two lines of text should be visible.'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "InlineTextBox 'Two lines of text should be visible.'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutSVGRoot svg",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGContainer g",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGText text id='text'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGTSpan tspan id='tspan'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'Two lines of text should be visible.'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox ' '",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGTSpan tspan",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "InlineTextBox 'Two lines of text should be visible.'",
+      "reason": "layoutObject insertion"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/win/svg/text/modify-text-node-in-tspan-expected.txt b/third_party/WebKit/LayoutTests/platform/win/svg/text/modify-text-node-in-tspan-expected.txt
index fbf451b..a8b5dbc 100644
--- a/third_party/WebKit/LayoutTests/platform/win/svg/text/modify-text-node-in-tspan-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/svg/text/modify-text-node-in-tspan-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -15,53 +17,27 @@
           "object": "LayoutSVGText text",
           "rect": [10, 63, 306, 374],
           "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ''",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ''",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'PA'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'PASS'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'PASS'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'PASS'",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutSVGText text",
+      "reason": "full"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "full"
+    },
+    {
+      "object": "InlineTextBox 'PASS'",
+      "reason": "full"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/win/svg/text/remove-text-node-from-tspan-expected.txt b/third_party/WebKit/LayoutTests/platform/win/svg/text/remove-text-node-from-tspan-expected.txt
index 4210acc..aaf3ba4 100644
--- a/third_party/WebKit/LayoutTests/platform/win/svg/text/remove-text-node-from-tspan-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/svg/text/remove-text-node-from-tspan-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -60,69 +62,79 @@
           "object": "LayoutSVGText text",
           "rect": [10, 63, 306, 374],
           "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox ' '",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox ''",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ''",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'FAIL'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'PASS'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'PASS'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'PASS'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'PASS'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGRoot (positioned) svg",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGText text",
+      "reason": "full"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutSVGTSpan tspan id='modify'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGTSpan tspan",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox 'PASS'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox ' '",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGTSpan tspan",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox 'PASS'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/win/svg/text/remove-tspan-from-text-expected.txt b/third_party/WebKit/LayoutTests/platform/win/svg/text/remove-tspan-from-text-expected.txt
index ffc89f5..7d1d6e9 100644
--- a/third_party/WebKit/LayoutTests/platform/win/svg/text/remove-tspan-from-text-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/svg/text/remove-tspan-from-text-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -20,49 +22,27 @@
           "object": "LayoutSVGText text id='text'",
           "rect": [10, 63, 306, 254],
           "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ''",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ''",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'FAIL'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'PASS'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'PASS'",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGTSpan tspan id='remove'",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGText text id='text'",
+      "reason": "full"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "full"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/win/svg/text/text-rescale-expected.txt b/third_party/WebKit/LayoutTests/platform/win/svg/text/text-rescale-expected.txt
index 9c81529b..be11fff 100644
--- a/third_party/WebKit/LayoutTests/platform/win/svg/text/text-rescale-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/svg/text/text-rescale-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -230,153 +232,195 @@
           "object": "LayoutText #text",
           "rect": [0, 0, 1, 1],
           "reason": "bounds change"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'PASS '",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'PASS '",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'PASS '",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'PASS '",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'PASS '",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'PASS'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'PASS'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'PASS'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'PASS'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'PASS'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'PASS'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'PASS'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'PASS'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'PASS'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'PASS'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'PASS'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "InlineTextBox 'PASS'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutSVGRoot (positioned) svg",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGContainer g id='text1g'",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutSVGText text",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox 'PASS '",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGTSpan tspan",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox 'PASS'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGForeignObject foreignObject",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow P",
+      "reason": "bounds change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox 'PASS'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGViewportContainer svg",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGText text",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox 'PASS'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGContainer g id='text2g'",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutSVGText text",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutSVGText text",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutSVGContainer g id='text3g'",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutSVGText text",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox 'PASS '",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGTSpan tspan",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox 'PASS'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGForeignObject foreignObject",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow P",
+      "reason": "bounds change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox 'PASS'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGViewportContainer svg",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGText text",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox 'PASS'",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/win/svg/text/text-selection-text-05-t-expected.txt b/third_party/WebKit/LayoutTests/platform/win/svg/text/text-selection-text-05-t-expected.txt
index b3207b17..cf34bf95 100644
--- a/third_party/WebKit/LayoutTests/platform/win/svg/text/text-selection-text-05-t-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/svg/text/text-selection-text-05-t-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -220,569 +222,743 @@
           "object": "LayoutSVGInlineText #text",
           "rect": [565, 385, 27, 45],
           "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '$Revision: 1.8 $'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '1'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '1'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '1'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '1'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '1'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '1'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '1'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '1'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '1'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '1'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '1'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '1'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '1'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '1'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '1'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '1'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '1'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '1'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '1'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '1'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '1'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '1'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '1'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '1'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '1.x 1.y'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '1.x 2.y'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '1.x 4.y'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '1234'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '1234'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '1234'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '2'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '2'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '2'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '2'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '2'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '2'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '2'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '2'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '2'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '2'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '2'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '2'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '2'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '2'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '2'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '2.x 1.y'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '2.x 2.y'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '2.x 4.y'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '234'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '234'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '234'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '234'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '234'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '234'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '234'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '234'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '234'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '3'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '3'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '3'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '3'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '3'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '3'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '3'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '3'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '3'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '3'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '3'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '3'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '3'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '3'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '3'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '4'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '4'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '4'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '4'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '4'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '4'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '4'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '4'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '4'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '4'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '4'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '4'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '4'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '4'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '4'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '4.x 1.y'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '4.x 2.y'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '4.x 4.y'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox 'end'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox 'middle'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox 'start'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox 'text-anchor'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox 'text-anchor'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox 'text-anchor'",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutSVGText text",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutSVGText text id='revision'",
-          "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/win/svg/text/tspan-dynamic-positioning-expected.txt b/third_party/WebKit/LayoutTests/platform/win/svg/text/tspan-dynamic-positioning-expected.txt
index 8dd943c..d824c523 100644
--- a/third_party/WebKit/LayoutTests/platform/win/svg/text/tspan-dynamic-positioning-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/svg/text/tspan-dynamic-positioning-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -45,33 +47,39 @@
           "object": "LayoutSVGText text",
           "rect": [20, 6, 256, 17],
           "reason": "forced by layout"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'This text should be at visible at 200,200'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'This text should be at visible at 200,200'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutSVGRoot svg",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGText text",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutSVGTSpan tspan id='ts'",
+      "reason": "full"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "bounds change"
+    },
+    {
+      "object": "InlineTextBox 'This text should be at visible at 200,200'",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/win/transforms/transform-focus-ring-repaint-expected.txt b/third_party/WebKit/LayoutTests/platform/win/transforms/transform-focus-ring-repaint-expected.txt
index 37b44c4..833d900 100644
--- a/third_party/WebKit/LayoutTests/platform/win/transforms/transform-focus-ring-repaint-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/transforms/transform-focus-ring-repaint-expected.txt
@@ -1,12 +1,15 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow (positioned) DIV id='target'",
           "position": [7, 57],
           "bounds": [402, 542],
           "drawsContent": true,
@@ -26,6 +29,7 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow (positioned) DIV",
           "position": [108, 158],
           "transformOrigin": [150, 150],
           "bounds": [440, 300],
@@ -40,6 +44,12 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='target'",
+      "reason": "style change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/prefer_compositing_to_lcd_text/compositing/overflow/selection-gaps-after-removing-scrolling-contents-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/prefer_compositing_to_lcd_text/compositing/overflow/selection-gaps-after-removing-scrolling-contents-expected.txt
index 6de1e896..02d857c 100644
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/prefer_compositing_to_lcd_text/compositing/overflow/selection-gaps-after-removing-scrolling-contents-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/virtual/prefer_compositing_to_lcd_text/compositing/overflow/selection-gaps-after-removing-scrolling-contents-expected.txt
@@ -14,14 +14,17 @@
 *** iteration 1: ***
 
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow DIV id='container'",
           "position": [8, 80],
           "bounds": [300, 500],
           "contentsOpaque": true,
@@ -30,27 +33,33 @@
           "backgroundColor": "#0000FF",
           "children": [
             {
+              "name": "Scrolling Layer",
               "bounds": [285, 485],
               "shouldFlattenTransform": false,
               "children": [
                 {
+                  "name": "Scrolling Contents Layer",
                   "bounds": [285, 665],
                   "drawsContent": true
                 }
               ]
             },
             {
+              "name": "Overflow Controls Host Layer",
               "bounds": [300, 500],
               "children": [
                 {
+                  "name": "Horizontal Scrollbar Layer",
                   "position": [0, 485],
                   "bounds": [285, 15]
                 },
                 {
+                  "name": "Vertical Scrollbar Layer",
                   "position": [285, 0],
                   "bounds": [15, 485]
                 },
                 {
+                  "name": "Scroll Corner Layer",
                   "position": [285, 485],
                   "bounds": [15, 15],
                   "drawsContent": true
@@ -60,6 +69,7 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 95],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -67,6 +77,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 160],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -74,6 +85,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV id='selection' class='scrolled'",
           "position": [23, 225],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -81,6 +93,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 290],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -88,6 +101,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 355],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -95,6 +109,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 420],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -102,6 +117,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 485],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -109,6 +125,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 550],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -116,6 +133,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 615],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -123,6 +141,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 680],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -138,14 +157,17 @@
 *** iteration 2: ***
 
 {
-  "bounds": [785, 2590],
+  "name": "Content Root Layer",
+  "bounds": [785, 2894],
   "children": [
     {
-      "bounds": [785, 2590],
+      "name": "LayoutView #document",
+      "bounds": [785, 2894],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow DIV id='container'",
           "position": [8, 80],
           "bounds": [300, 500],
           "contentsOpaque": true,
@@ -154,27 +176,33 @@
           "backgroundColor": "#0000FF",
           "children": [
             {
+              "name": "Scrolling Layer",
               "bounds": [285, 485],
               "shouldFlattenTransform": false,
               "children": [
                 {
+                  "name": "Scrolling Contents Layer",
                   "bounds": [285, 665],
                   "drawsContent": true
                 }
               ]
             },
             {
+              "name": "Overflow Controls Host Layer",
               "bounds": [300, 500],
               "children": [
                 {
+                  "name": "Horizontal Scrollbar Layer",
                   "position": [0, 485],
                   "bounds": [285, 15]
                 },
                 {
+                  "name": "Vertical Scrollbar Layer",
                   "position": [285, 0],
                   "bounds": [15, 485]
                 },
                 {
+                  "name": "Scroll Corner Layer",
                   "position": [285, 485],
                   "bounds": [15, 15],
                   "drawsContent": true
@@ -184,6 +212,7 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 95],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -191,6 +220,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 160],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -198,6 +228,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV id='selection' class='scrolled'",
           "position": [23, 225],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -205,6 +236,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 290],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -212,6 +244,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 355],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -219,6 +252,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 420],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -226,6 +260,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 485],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -233,6 +268,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 550],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -240,6 +276,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 615],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -247,6 +284,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 680],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -262,40 +300,49 @@
 *** iteration 3: ***
 
 {
-  "bounds": [785, 4574],
+  "name": "Content Root Layer",
+  "bounds": [785, 5182],
   "children": [
     {
-      "bounds": [785, 4574],
+      "name": "LayoutView #document",
+      "bounds": [785, 5182],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow DIV id='container'",
           "position": [8, 80],
           "bounds": [300, 500],
           "shouldFlattenTransform": false,
           "drawsContent": true,
           "children": [
             {
+              "name": "Scrolling Layer",
               "bounds": [285, 485],
               "shouldFlattenTransform": false,
               "children": [
                 {
+                  "name": "Scrolling Contents Layer",
                   "bounds": [285, 665]
                 }
               ]
             },
             {
+              "name": "Overflow Controls Host Layer",
               "bounds": [300, 500],
               "children": [
                 {
+                  "name": "Horizontal Scrollbar Layer",
                   "position": [0, 485],
                   "bounds": [285, 15]
                 },
                 {
+                  "name": "Vertical Scrollbar Layer",
                   "position": [285, 0],
                   "bounds": [15, 485]
                 },
                 {
+                  "name": "Scroll Corner Layer",
                   "position": [285, 485],
                   "bounds": [15, 15],
                   "drawsContent": true
@@ -305,6 +352,7 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 95],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -312,6 +360,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 160],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -319,6 +368,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV id='selection' class='scrolled'",
           "position": [23, 225],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -326,6 +376,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 290],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -333,6 +384,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 355],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -340,6 +392,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 420],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -347,6 +400,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 485],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -354,6 +408,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 550],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -361,6 +416,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 615],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -368,6 +424,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 680],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -383,40 +440,49 @@
 *** iteration 4: ***
 
 {
-  "bounds": [785, 6510],
+  "name": "Content Root Layer",
+  "bounds": [785, 7422],
   "children": [
     {
-      "bounds": [785, 6510],
+      "name": "LayoutView #document",
+      "bounds": [785, 7422],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow DIV id='container'",
           "position": [8, 80],
           "bounds": [300, 500],
           "shouldFlattenTransform": false,
           "drawsContent": true,
           "children": [
             {
+              "name": "Scrolling Layer",
               "bounds": [285, 485],
               "shouldFlattenTransform": false,
               "children": [
                 {
+                  "name": "Scrolling Contents Layer",
                   "bounds": [285, 665]
                 }
               ]
             },
             {
+              "name": "Overflow Controls Host Layer",
               "bounds": [300, 500],
               "children": [
                 {
+                  "name": "Horizontal Scrollbar Layer",
                   "position": [0, 485],
                   "bounds": [285, 15]
                 },
                 {
+                  "name": "Vertical Scrollbar Layer",
                   "position": [285, 0],
                   "bounds": [15, 485]
                 },
                 {
+                  "name": "Scroll Corner Layer",
                   "position": [285, 485],
                   "bounds": [15, 15],
                   "drawsContent": true
@@ -426,6 +492,7 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 95],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -433,6 +500,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 160],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -440,6 +508,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV id='selection' class='scrolled'",
           "position": [23, 225],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -447,6 +516,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 290],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -454,6 +524,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 355],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -461,6 +532,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 420],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -468,6 +540,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 485],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -475,6 +548,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 550],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -482,6 +556,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 615],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -489,6 +564,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 680],
           "bounds": [100, 50],
           "contentsOpaque": true,
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/prefer_compositing_to_lcd_text/compositing/overflow/selection-gaps-toggling-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/prefer_compositing_to_lcd_text/compositing/overflow/selection-gaps-toggling-expected.txt
index 6d2416b..fcade17 100644
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/prefer_compositing_to_lcd_text/compositing/overflow/selection-gaps-toggling-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/virtual/prefer_compositing_to_lcd_text/compositing/overflow/selection-gaps-toggling-expected.txt
@@ -14,40 +14,49 @@
 *** iteration 1: ***
 
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow DIV class='container'",
           "position": [8, 62],
           "bounds": [300, 500],
           "shouldFlattenTransform": false,
           "drawsContent": true,
           "children": [
             {
+              "name": "Scrolling Layer",
               "bounds": [285, 485],
               "shouldFlattenTransform": false,
               "children": [
                 {
+                  "name": "Scrolling Contents Layer",
                   "bounds": [285, 665]
                 }
               ]
             },
             {
+              "name": "Overflow Controls Host Layer",
               "bounds": [300, 500],
               "children": [
                 {
+                  "name": "Horizontal Scrollbar Layer",
                   "position": [0, 485],
                   "bounds": [285, 15]
                 },
                 {
+                  "name": "Vertical Scrollbar Layer",
                   "position": [285, 0],
                   "bounds": [15, 485]
                 },
                 {
+                  "name": "Scroll Corner Layer",
                   "position": [285, 485],
                   "bounds": [15, 15],
                   "drawsContent": true
@@ -57,6 +66,7 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 77],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -64,6 +74,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 142],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -71,6 +82,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV id='selection' class='scrolled'",
           "position": [23, 207],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -78,6 +90,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 272],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -85,6 +98,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 337],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -92,6 +106,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 402],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -99,6 +114,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 467],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -106,6 +122,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 532],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -113,6 +130,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 597],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -120,6 +138,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 662],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -135,40 +154,49 @@
 *** iteration 2: ***
 
 {
-  "bounds": [785, 2524],
+  "name": "Content Root Layer",
+  "bounds": [785, 2828],
   "children": [
     {
-      "bounds": [785, 2524],
+      "name": "LayoutView #document",
+      "bounds": [785, 2828],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow DIV class='container'",
           "position": [8, 62],
           "bounds": [300, 500],
           "shouldFlattenTransform": false,
           "drawsContent": true,
           "children": [
             {
+              "name": "Scrolling Layer",
               "bounds": [285, 485],
               "shouldFlattenTransform": false,
               "children": [
                 {
+                  "name": "Scrolling Contents Layer",
                   "bounds": [285, 665]
                 }
               ]
             },
             {
+              "name": "Overflow Controls Host Layer",
               "bounds": [300, 500],
               "children": [
                 {
+                  "name": "Horizontal Scrollbar Layer",
                   "position": [0, 485],
                   "bounds": [285, 15]
                 },
                 {
+                  "name": "Vertical Scrollbar Layer",
                   "position": [285, 0],
                   "bounds": [15, 485]
                 },
                 {
+                  "name": "Scroll Corner Layer",
                   "position": [285, 485],
                   "bounds": [15, 15],
                   "drawsContent": true
@@ -178,6 +206,7 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 77],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -185,6 +214,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 142],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -192,6 +222,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV id='selection' class='scrolled'",
           "position": [23, 207],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -199,6 +230,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 272],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -206,6 +238,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 337],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -213,6 +246,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 402],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -220,6 +254,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 467],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -227,6 +262,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 532],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -234,6 +270,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 597],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -241,6 +278,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 662],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -256,40 +294,49 @@
 *** iteration 3: ***
 
 {
-  "bounds": [785, 4460],
+  "name": "Content Root Layer",
+  "bounds": [785, 5068],
   "children": [
     {
-      "bounds": [785, 4460],
+      "name": "LayoutView #document",
+      "bounds": [785, 5068],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow DIV class='container'",
           "position": [8, 62],
           "bounds": [300, 500],
           "shouldFlattenTransform": false,
           "drawsContent": true,
           "children": [
             {
+              "name": "Scrolling Layer",
               "bounds": [285, 485],
               "shouldFlattenTransform": false,
               "children": [
                 {
+                  "name": "Scrolling Contents Layer",
                   "bounds": [285, 665]
                 }
               ]
             },
             {
+              "name": "Overflow Controls Host Layer",
               "bounds": [300, 500],
               "children": [
                 {
+                  "name": "Horizontal Scrollbar Layer",
                   "position": [0, 485],
                   "bounds": [285, 15]
                 },
                 {
+                  "name": "Vertical Scrollbar Layer",
                   "position": [285, 0],
                   "bounds": [15, 485]
                 },
                 {
+                  "name": "Scroll Corner Layer",
                   "position": [285, 485],
                   "bounds": [15, 15],
                   "drawsContent": true
@@ -299,6 +346,7 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 77],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -306,6 +354,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 142],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -313,6 +362,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV id='selection' class='scrolled'",
           "position": [23, 207],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -320,6 +370,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 272],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -327,6 +378,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 337],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -334,6 +386,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 402],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -341,6 +394,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 467],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -348,6 +402,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 532],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -355,6 +410,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 597],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -362,6 +418,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 662],
           "bounds": [100, 50],
           "contentsOpaque": true,
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/prefer_compositing_to_lcd_text/compositing/overflow/selection-gaps-toggling-with-scrolling-contents-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/prefer_compositing_to_lcd_text/compositing/overflow/selection-gaps-toggling-with-scrolling-contents-expected.txt
index daed0fe..f6692d5 100644
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/prefer_compositing_to_lcd_text/compositing/overflow/selection-gaps-toggling-with-scrolling-contents-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/virtual/prefer_compositing_to_lcd_text/compositing/overflow/selection-gaps-toggling-with-scrolling-contents-expected.txt
@@ -14,40 +14,49 @@
 *** iteration 1: ***
 
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow DIV id='container'",
           "position": [8, 80],
           "bounds": [300, 500],
           "shouldFlattenTransform": false,
           "drawsContent": true,
           "children": [
             {
+              "name": "Scrolling Layer",
               "bounds": [285, 485],
               "shouldFlattenTransform": false,
               "children": [
                 {
+                  "name": "Scrolling Contents Layer",
                   "bounds": [285, 665]
                 }
               ]
             },
             {
+              "name": "Overflow Controls Host Layer",
               "bounds": [300, 500],
               "children": [
                 {
+                  "name": "Horizontal Scrollbar Layer",
                   "position": [0, 485],
                   "bounds": [285, 15]
                 },
                 {
+                  "name": "Vertical Scrollbar Layer",
                   "position": [285, 0],
                   "bounds": [15, 485]
                 },
                 {
+                  "name": "Scroll Corner Layer",
                   "position": [285, 485],
                   "bounds": [15, 15],
                   "drawsContent": true
@@ -57,6 +66,7 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 95],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -64,6 +74,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 160],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -71,6 +82,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV id='selection' class='scrolled'",
           "position": [23, 225],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -78,6 +90,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 290],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -85,6 +98,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 355],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -92,6 +106,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 420],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -99,6 +114,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 485],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -106,6 +122,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 550],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -113,6 +130,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 615],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -120,6 +138,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 680],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -135,14 +154,17 @@
 *** iteration 2: ***
 
 {
-  "bounds": [785, 2542],
+  "name": "Content Root Layer",
+  "bounds": [785, 2846],
   "children": [
     {
-      "bounds": [785, 2542],
+      "name": "LayoutView #document",
+      "bounds": [785, 2846],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow DIV id='container'",
           "position": [8, 80],
           "bounds": [300, 500],
           "contentsOpaque": true,
@@ -151,27 +173,33 @@
           "backgroundColor": "#0000FF",
           "children": [
             {
+              "name": "Scrolling Layer",
               "bounds": [285, 485],
               "shouldFlattenTransform": false,
               "children": [
                 {
+                  "name": "Scrolling Contents Layer",
                   "bounds": [285, 665],
                   "drawsContent": true
                 }
               ]
             },
             {
+              "name": "Overflow Controls Host Layer",
               "bounds": [300, 500],
               "children": [
                 {
+                  "name": "Horizontal Scrollbar Layer",
                   "position": [0, 485],
                   "bounds": [285, 15]
                 },
                 {
+                  "name": "Vertical Scrollbar Layer",
                   "position": [285, 0],
                   "bounds": [15, 485]
                 },
                 {
+                  "name": "Scroll Corner Layer",
                   "position": [285, 485],
                   "bounds": [15, 15],
                   "drawsContent": true
@@ -181,6 +209,7 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 95],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -188,6 +217,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 160],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -195,6 +225,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV id='selection' class='scrolled'",
           "position": [23, 225],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -202,6 +233,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 290],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -209,6 +241,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 355],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -216,6 +249,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 420],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -223,6 +257,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 485],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -230,6 +265,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 550],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -237,6 +273,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 615],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -244,6 +281,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 680],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -259,14 +297,17 @@
 *** iteration 3: ***
 
 {
-  "bounds": [785, 4526],
+  "name": "Content Root Layer",
+  "bounds": [785, 5134],
   "children": [
     {
-      "bounds": [785, 4526],
+      "name": "LayoutView #document",
+      "bounds": [785, 5134],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow DIV id='container'",
           "position": [8, 80],
           "bounds": [300, 500],
           "contentsOpaque": true,
@@ -275,27 +316,33 @@
           "backgroundColor": "#0000FF",
           "children": [
             {
+              "name": "Scrolling Layer",
               "bounds": [285, 485],
               "shouldFlattenTransform": false,
               "children": [
                 {
+                  "name": "Scrolling Contents Layer",
                   "bounds": [285, 665],
                   "drawsContent": true
                 }
               ]
             },
             {
+              "name": "Overflow Controls Host Layer",
               "bounds": [300, 500],
               "children": [
                 {
+                  "name": "Horizontal Scrollbar Layer",
                   "position": [0, 485],
                   "bounds": [285, 15]
                 },
                 {
+                  "name": "Vertical Scrollbar Layer",
                   "position": [285, 0],
                   "bounds": [15, 485]
                 },
                 {
+                  "name": "Scroll Corner Layer",
                   "position": [285, 485],
                   "bounds": [15, 15],
                   "drawsContent": true
@@ -305,6 +352,7 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 95],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -312,6 +360,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 160],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -319,6 +368,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV id='selection' class='scrolled'",
           "position": [23, 225],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -326,6 +376,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 290],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -333,6 +384,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 355],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -340,6 +392,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 420],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -347,6 +400,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 485],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -354,6 +408,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 550],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -361,6 +416,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 615],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -368,6 +424,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 680],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -383,40 +440,49 @@
 *** iteration 4: ***
 
 {
-  "bounds": [785, 6510],
+  "name": "Content Root Layer",
+  "bounds": [785, 7422],
   "children": [
     {
-      "bounds": [785, 6510],
+      "name": "LayoutView #document",
+      "bounds": [785, 7422],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow DIV id='container'",
           "position": [8, 80],
           "bounds": [300, 500],
           "shouldFlattenTransform": false,
           "drawsContent": true,
           "children": [
             {
+              "name": "Scrolling Layer",
               "bounds": [285, 485],
               "shouldFlattenTransform": false,
               "children": [
                 {
+                  "name": "Scrolling Contents Layer",
                   "bounds": [285, 665]
                 }
               ]
             },
             {
+              "name": "Overflow Controls Host Layer",
               "bounds": [300, 500],
               "children": [
                 {
+                  "name": "Horizontal Scrollbar Layer",
                   "position": [0, 485],
                   "bounds": [285, 15]
                 },
                 {
+                  "name": "Vertical Scrollbar Layer",
                   "position": [285, 0],
                   "bounds": [15, 485]
                 },
                 {
+                  "name": "Scroll Corner Layer",
                   "position": [285, 485],
                   "bounds": [15, 15],
                   "drawsContent": true
@@ -426,6 +492,7 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 95],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -433,6 +500,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 160],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -440,6 +508,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV id='selection' class='scrolled'",
           "position": [23, 225],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -447,6 +516,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 290],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -454,6 +524,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 355],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -461,6 +532,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 420],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -468,6 +540,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 485],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -475,6 +548,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 550],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -482,6 +556,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 615],
           "bounds": [100, 50],
           "contentsOpaque": true,
@@ -489,6 +564,7 @@
           "backgroundColor": "#FFA500"
         },
         {
+          "name": "LayoutBlockFlow DIV class='scrolled'",
           "position": [23, 680],
           "bounds": [100, 50],
           "contentsOpaque": true,
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/prefer_compositing_to_lcd_text/compositing/overflow/text-color-change-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/prefer_compositing_to_lcd_text/compositing/overflow/text-color-change-expected.txt
index f3bee6e8..8775a1f7 100644
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/prefer_compositing_to_lcd_text/compositing/overflow/text-color-change-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/virtual/prefer_compositing_to_lcd_text/compositing/overflow/text-color-change-expected.txt
@@ -1,352 +1,27 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow PRE id='scroller'",
           "position": [8, 57],
           "bounds": [200, 200],
           "shouldFlattenTransform": false,
           "drawsContent": true,
-          "paintInvalidations": [
-            {
-              "object": "InlineTextBox '\n'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '\n'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '\n'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '\n'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '\n'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '\n'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '\n'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '\n'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '\n'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '\n'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '\n'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '\n'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '\n'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '\n'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '\n'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '\n'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '\n'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '\n'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '\n'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '\n'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '\n'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '\n'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '\n'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '\n'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '\n'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '\n'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '\n'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '\n'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '\n'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '\n'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '\n'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '\n'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '\n'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '\n'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '\n'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '\n'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '\n'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '\n'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '\n'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '\n'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '\n'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '  Text'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '  Text'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '  Text'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '  Text'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '  Text'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '  Text'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '  Text'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '  Text'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '  Text'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '  Text'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '  Text'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '  Text'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '  Text'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '  Text'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '  Text'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '  Text'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '  Text'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '  Text'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '  Text'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '  Text'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '  Text'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '  Text'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '  Text'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '  Text'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '  Text'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '  Text'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '  Text'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '  Text'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '  Text'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '  Text'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '  Text'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '  Text'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '  Text'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '  Text'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '  Text'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '  Text'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '  Text'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '  Text'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '  Text'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '  Text'",
-              "reason": "style change"
-            },
-            {
-              "object": "InlineTextBox '  Text'",
-              "reason": "style change"
-            }
-          ],
           "children": [
             {
+              "name": "Scrolling Layer",
               "bounds": [185, 185],
               "shouldFlattenTransform": false,
               "children": [
                 {
+                  "name": "Scrolling Contents Layer",
                   "bounds": [185, 656],
                   "drawsContent": true,
                   "paintInvalidations": [
@@ -354,351 +29,27 @@
                       "object": "LayoutText #text",
                       "rect": [0, 0, 48, 656],
                       "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '\n'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '\n'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '\n'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '\n'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '\n'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '\n'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '\n'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '\n'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '\n'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '\n'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '\n'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '\n'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '\n'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '\n'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '\n'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '\n'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '\n'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '\n'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '\n'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '\n'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '\n'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '\n'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '\n'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '\n'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '\n'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '\n'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '\n'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '\n'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '\n'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '\n'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '\n'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '\n'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '\n'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '\n'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '\n'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '\n'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '\n'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '\n'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '\n'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '\n'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '\n'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '  Text'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '  Text'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '  Text'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '  Text'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '  Text'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '  Text'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '  Text'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '  Text'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '  Text'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '  Text'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '  Text'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '  Text'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '  Text'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '  Text'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '  Text'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '  Text'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '  Text'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '  Text'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '  Text'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '  Text'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '  Text'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '  Text'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '  Text'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '  Text'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '  Text'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '  Text'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '  Text'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '  Text'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '  Text'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '  Text'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '  Text'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '  Text'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '  Text'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '  Text'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '  Text'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '  Text'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '  Text'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '  Text'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '  Text'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '  Text'",
-                      "reason": "style change"
-                    },
-                    {
-                      "object": "InlineTextBox '  Text'",
-                      "reason": "style change"
                     }
                   ]
                 }
               ]
             },
             {
+              "name": "Overflow Controls Host Layer",
               "bounds": [200, 200],
               "children": [
                 {
+                  "name": "Horizontal Scrollbar Layer",
                   "position": [0, 185],
                   "bounds": [185, 15]
                 },
                 {
+                  "name": "Vertical Scrollbar Layer",
                   "position": [185, 0],
                   "bounds": [15, 185]
                 },
                 {
+                  "name": "Scroll Corner Layer",
                   "position": [185, 185],
                   "bounds": [15, 15],
                   "drawsContent": true
@@ -709,6 +60,340 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutText #text",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '  Text'",
+      "reason": "style change"
+    },
+    {
+      "object": "InlineTextBox '\n'",
+      "reason": "style change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/prefer_compositing_to_lcd_text/compositing/overflow/text-match-highlight-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/prefer_compositing_to_lcd_text/compositing/overflow/text-match-highlight-expected.txt
index 1447a35..693aa0db 100644
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/prefer_compositing_to_lcd_text/compositing/overflow/text-match-highlight-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/virtual/prefer_compositing_to_lcd_text/compositing/overflow/text-match-highlight-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -10,54 +12,23 @@
           "object": "LayoutText #text",
           "rect": [282, 36, 46, 17],
           "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'findme'",
-          "reason": "full"
         }
       ],
       "children": [
         {
+          "name": "LayoutBlockFlow DIV",
           "position": [0, 54],
           "bounds": [800, 500],
           "shouldFlattenTransform": false,
           "drawsContent": true,
-          "paintInvalidations": [
-            {
-              "object": "InlineTextBox 'Can you findme in this boring text?'",
-              "reason": "full"
-            },
-            {
-              "object": "InlineTextBox 'Findme in a typewriter!'",
-              "reason": "full"
-            },
-            {
-              "object": "InlineTextBox 'Findme on a path! Did you findme?'",
-              "reason": "full"
-            },
-            {
-              "object": "InlineTextBox 'findme'",
-              "reason": "full"
-            },
-            {
-              "object": "InlineTextBox 'findme'",
-              "reason": "full"
-            },
-            {
-              "object": "InlineTextBox 'findme'",
-              "reason": "full"
-            },
-            {
-              "object": "InlineTextBox 'findme'",
-              "reason": "full"
-            }
-          ],
           "children": [
             {
+              "name": "Scrolling Layer",
               "bounds": [785, 485],
               "shouldFlattenTransform": false,
               "children": [
                 {
+                  "name": "Scrolling Contents Layer",
                   "bounds": [785, 1340],
                   "drawsContent": true,
                   "paintInvalidations": [
@@ -95,51 +66,27 @@
                       "object": "LayoutText #text",
                       "rect": [52, 18, 46, 17],
                       "reason": "full"
-                    },
-                    {
-                      "object": "InlineTextBox 'Can you findme in this boring text?'",
-                      "reason": "full"
-                    },
-                    {
-                      "object": "InlineTextBox 'Findme in a typewriter!'",
-                      "reason": "full"
-                    },
-                    {
-                      "object": "InlineTextBox 'Findme on a path! Did you findme?'",
-                      "reason": "full"
-                    },
-                    {
-                      "object": "InlineTextBox 'findme'",
-                      "reason": "full"
-                    },
-                    {
-                      "object": "InlineTextBox 'findme'",
-                      "reason": "full"
-                    },
-                    {
-                      "object": "InlineTextBox 'findme'",
-                      "reason": "full"
-                    },
-                    {
-                      "object": "InlineTextBox 'findme'",
-                      "reason": "full"
                     }
                   ]
                 }
               ]
             },
             {
+              "name": "Overflow Controls Host Layer",
               "bounds": [800, 500],
               "children": [
                 {
+                  "name": "Horizontal Scrollbar Layer",
                   "position": [0, 485],
                   "bounds": [785, 15]
                 },
                 {
+                  "name": "Vertical Scrollbar Layer",
                   "position": [785, 0],
                   "bounds": [15, 485]
                 },
                 {
+                  "name": "Scroll Corner Layer",
                   "position": [785, 485],
                   "bounds": [15, 15],
                   "drawsContent": true
@@ -150,6 +97,72 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutText #text",
+      "reason": "full"
+    },
+    {
+      "object": "InlineTextBox 'findme'",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "full"
+    },
+    {
+      "object": "InlineTextBox 'findme'",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "full"
+    },
+    {
+      "object": "InlineTextBox 'findme'",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "full"
+    },
+    {
+      "object": "InlineTextBox 'findme'",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "full"
+    },
+    {
+      "object": "InlineTextBox 'findme'",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "full"
+    },
+    {
+      "object": "InlineTextBox 'Can you findme in this boring text?'",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "full"
+    },
+    {
+      "object": "InlineTextBox 'Findme in a typewriter!'",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "full"
+    },
+    {
+      "object": "InlineTextBox 'Findme on a path! Did you findme?'",
+      "reason": "full"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/prefer_compositing_to_lcd_text/compositing/overflow/textarea-scroll-touch-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/prefer_compositing_to_lcd_text/compositing/overflow/textarea-scroll-touch-expected.txt
index 06a89a1..650f75ec 100644
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/prefer_compositing_to_lcd_text/compositing/overflow/textarea-scroll-touch-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/virtual/prefer_compositing_to_lcd_text/compositing/overflow/textarea-scroll-touch-expected.txt
@@ -1,13 +1,16 @@
   
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutTextControl TEXTAREA",
           "position": [18, 18],
           "bounds": [206, 126],
           "contentsOpaque": true,
@@ -16,24 +19,29 @@
           "backgroundColor": "#CCCCCC",
           "children": [
             {
+              "name": "Scrolling Layer",
               "position": [1, 1],
               "bounds": [189, 124],
               "shouldFlattenTransform": false,
               "children": [
                 {
+                  "name": "Scrolling Contents Layer",
                   "bounds": [189, 337],
                   "drawsContent": true
                 }
               ]
             },
             {
+              "name": "Overflow Controls Host Layer",
               "bounds": [206, 126],
               "children": [
                 {
+                  "name": "Vertical Scrollbar Layer",
                   "position": [190, 1],
                   "bounds": [15, 109]
                 },
                 {
+                  "name": "Scroll Corner Layer",
                   "position": [190, 110],
                   "bounds": [15, 15],
                   "drawsContent": true
@@ -43,6 +51,7 @@
           ]
         },
         {
+          "name": "LayoutTextControl TEXTAREA",
           "position": [248, 18],
           "bounds": [206, 126],
           "contentsOpaque": true,
@@ -51,24 +60,29 @@
           "backgroundColor": "#CCCCCC",
           "children": [
             {
+              "name": "Scrolling Layer",
               "position": [1, 1],
               "bounds": [189, 124],
               "shouldFlattenTransform": false,
               "children": [
                 {
+                  "name": "Scrolling Contents Layer",
                   "bounds": [189, 337],
                   "drawsContent": true
                 }
               ]
             },
             {
+              "name": "Overflow Controls Host Layer",
               "bounds": [206, 126],
               "children": [
                 {
+                  "name": "Vertical Scrollbar Layer",
                   "position": [190, 1],
                   "bounds": [15, 109]
                 },
                 {
+                  "name": "Scroll Corner Layer",
                   "position": [190, 110],
                   "bounds": [15, 15],
                   "drawsContent": true
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/threaded/compositing/visibility/visibility-image-layers-dynamic-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/threaded/compositing/visibility/visibility-image-layers-dynamic-expected.txt
index 164a7ff2..caa27231 100644
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/threaded/compositing/visibility/visibility-image-layers-dynamic-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/virtual/threaded/compositing/visibility/visibility-image-layers-dynamic-expected.txt
@@ -4,23 +4,28 @@
 Initial
 
 {
+  "name": "Content Root Layer",
   "bounds": [785, 623],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [785, 623],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow DIV class='composited container'",
           "position": [18, 10],
           "bounds": [749, 144]
         },
         {
+          "name": "LayoutBlockFlow DIV class='composited hidden container'",
           "position": [14, 314],
           "bounds": [757, 152],
           "contentsVisible": false,
           "children": [
             {
+              "name": "LayoutImage IMG class='visible composited box'",
               "position": [24, 24],
               "bounds": [100, 100]
             }
@@ -33,29 +38,35 @@
 After step 1
 
 {
-  "bounds": [785, 1075],
+  "name": "Content Root Layer",
+  "bounds": [785, 1155],
   "children": [
     {
-      "bounds": [785, 1075],
+      "name": "LayoutView #document",
+      "bounds": [785, 1155],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow DIV class='composited container'",
           "position": [18, 10],
           "bounds": [749, 144],
           "children": [
             {
+              "name": "LayoutImage IMG class='hidden composited box'",
               "position": [20, 20],
               "bounds": [100, 100]
             }
           ]
         },
         {
+          "name": "LayoutBlockFlow DIV class='composited hidden container'",
           "position": [14, 314],
           "bounds": [757, 152],
           "contentsVisible": false,
           "children": [
             {
+              "name": "LayoutImage IMG class='visible composited box'",
               "position": [24, 24],
               "bounds": [100, 100]
             }
@@ -68,40 +79,48 @@
 After step 2
 
 {
-  "bounds": [785, 1622],
+  "name": "Content Root Layer",
+  "bounds": [785, 1798],
   "children": [
     {
-      "bounds": [785, 1622],
+      "name": "LayoutView #document",
+      "bounds": [785, 1798],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow DIV class='composited container'",
           "position": [18, 10],
           "bounds": [749, 144],
           "children": [
             {
+              "name": "LayoutImage IMG class='hidden composited box'",
               "position": [20, 20],
               "bounds": [100, 100]
             }
           ]
         },
         {
+          "name": "LayoutBlockFlow DIV class='composited hidden container'",
           "position": [14, 160],
           "bounds": [757, 152],
           "drawsContent": true,
           "children": [
             {
+              "name": "LayoutImage IMG class='composited box'",
               "position": [24, 24],
               "bounds": [100, 100]
             }
           ]
         },
         {
+          "name": "LayoutBlockFlow DIV class='composited hidden container'",
           "position": [14, 314],
           "bounds": [757, 152],
           "contentsVisible": false,
           "children": [
             {
+              "name": "LayoutImage IMG class='visible composited box'",
               "position": [24, 24],
               "bounds": [100, 100]
             }
diff --git a/third_party/WebKit/LayoutTests/platform/win7/fast/repaint/japanese-rl-selection-clear-expected.txt b/third_party/WebKit/LayoutTests/platform/win7/fast/repaint/japanese-rl-selection-clear-expected.txt
index f1a8d7c..176aee3 100644
--- a/third_party/WebKit/LayoutTests/platform/win7/fast/repaint/japanese-rl-selection-clear-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win7/fast/repaint/japanese-rl-selection-clear-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -15,129 +17,139 @@
           "object": "LayoutText #text",
           "rect": [397, 123, 376, 395],
           "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '\u3044\u8A18\u4E8B\u304C\u3069\u3053\u306B\u3042\u3063\u305F\u304B\u5FD8\u308C\u3066\u3057\u307E\u3063\u305F'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox '\u3044\u8A18\u4E8B\u304C\u3069\u3053\u306B\u3042\u3063\u305F\u304B\u5FD8\u308C\u3066\u3057\u307E\u3063\u305F'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '\u304B\u3089\u3082\u691C\u7D22\u3059\u308B\u3053\u3068\u304C\u3067\u304D\u307E\u3059\u3002\u305B\u3063\u304B'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox '\u304B\u3089\u3082\u691C\u7D22\u3059\u308B\u3053\u3068\u304C\u3067\u304D\u307E\u3059\u3002\u305B\u3063\u304B'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '\u304C\u3067\u304D\u307E\u3059\u3002\u305B\u3063\u304B\u304F\u898B\u3064\u3051\u305F\u3059\u3070\u3089\u3057'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox '\u304C\u3067\u304D\u307E\u3059\u3002\u305B\u3063\u304B\u304F\u898B\u3064\u3051\u305F\u3059\u3070\u3089\u3057'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '\u304F\u3001\u8A2A\u554F\u3057\u305F\u30A6\u30A7\u30D6\u30DA\u30FC\u30B8\u306E\u30B3\u30F3\u30C6\u30F3\u30C4'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox '\u304F\u3001\u8A2A\u554F\u3057\u305F\u30A6\u30A7\u30D6\u30DA\u30FC\u30B8\u306E\u30B3\u30F3\u30C6\u30F3\u30C4'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '\u304F\u898B\u3064\u3051\u305F\u3059\u3070\u3089\u3057\u3044\u8A18\u4E8B\u304C\u3069\u3053\u306B\u3042\u3063'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox '\u304F\u898B\u3064\u3051\u305F\u3059\u3070\u3089\u3057\u3044\u8A18\u4E8B\u304C\u3069\u3053\u306B\u3042\u3063'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '\u3057\u305F\u30A6\u30A7\u30D6\u30DA\u30FC\u30B8\u306E\u30B3\u30F3\u30C6\u30F3\u30C4\u304B\u3089\u3082\u691C'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox '\u3057\u305F\u30A6\u30A7\u30D6\u30DA\u30FC\u30B8\u306E\u30B3\u30F3\u30C6\u30F3\u30C4\u304B\u3089\u3082\u691C'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '\u3059\u304B\u306A\u3089\u30BF\u30A4\u30C8\u30EB\u3068\u30A2\u30C9\u30EC\u30B9\u3060\u3051\u3067\u306A'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox '\u3059\u304B\u306A\u3089\u30BF\u30A4\u30C8\u30EB\u3068\u30A2\u30C9\u30EC\u30B9\u3060\u3051\u3067\u306A'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '\u305B\u3063\u304B\u304F\u898B\u3064\u3051\u305F\u3059\u3070\u3089\u3057\u3044\u8A18\u4E8B\u304C\u3069\u3053'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox '\u305B\u3063\u304B\u304F\u898B\u3064\u3051\u305F\u3059\u3070\u3089\u3057\u3044\u8A18\u4E8B\u304C\u3069\u3053'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '\u305F\u304B\u5FD8\u308C\u3066\u3057\u307E\u3063\u305F\u7D4C\u9A13\u306F\u3042\u308A\u307E\u3059\u304B \u306A'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox '\u305F\u304B\u5FD8\u308C\u3066\u3057\u307E\u3063\u305F\u7D4C\u9A13\u306F\u3042\u308A\u307E\u3059\u304B \u306A'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '\u306B\u3042\u3063\u305F\u304B\u5FD8\u308C\u3066\u3057\u307E\u3063\u305F\u7D4C\u9A13\u306F\u3042\u308A\u307E'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox '\u306B\u3042\u3063\u305F\u304B\u5FD8\u308C\u3066\u3057\u307E\u3063\u305F\u7D4C\u9A13\u306F\u3042\u308A\u307E'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '\u3089\u30BF\u30A4\u30C8\u30EB\u3068\u30A2\u30C9\u30EC\u30B9\u3060\u3051\u3067\u306A\u304F\u3001\u8A2A\u554F'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox '\u3089\u30BF\u30A4\u30C8\u30EB\u3068\u30A2\u30C9\u30EC\u30B9\u3060\u3051\u3067\u306A\u304F\u3001\u8A2A\u554F'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '\u30B9\u3060\u3051\u3067\u306A\u304F\u3001\u8A2A\u554F'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox '\u30B9\u3060\u3051\u3067\u306A\u304F\u3001\u8A2A\u554F'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '\u30DA\u30FC\u30B8\u306E\u30B3\u30F3\u30C6\u30F3\u30C4\u304B\u3089\u3082\u691C\u7D22\u3059\u308B\u3053\u3068'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox '\u30DA\u30FC\u30B8\u306E\u30B3\u30F3\u30C6\u30F3\u30C4\u304B\u3089\u3082\u691C\u7D22\u3059\u308B\u3053\u3068'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '\u7D22\u3059\u308B\u3053\u3068\u304C\u3067\u304D\u307E\u3059\u3002\u8A2A\u554F\u3057\u305F\u30A6\u30A7\u30D6'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox '\u7D22\u3059\u308B\u3053\u3068\u304C\u3067\u304D\u307E\u3059\u3002\u8A2A\u554F\u3057\u305F\u30A6\u30A7\u30D6'",
-          "reason": "selection"
-        },
-        {
-          "object": "InlineTextBox '\u7D4C\u9A13\u306F\u3042\u308A\u307E\u3059\u304B \u306A\u3089\u30BF\u30A4\u30C8\u30EB\u3068\u30A2\u30C9\u30EC'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox '\u7D4C\u9A13\u306F\u3042\u308A\u307E\u3059\u304B \u306A\u3089\u30BF\u30A4\u30C8\u30EB\u3068\u30A2\u30C9\u30EC'",
-          "reason": "selection"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutText #text",
+      "reason": "selection"
+    },
+    {
+      "object": "InlineTextBox '\u305B\u3063\u304B\u304F\u898B\u3064\u3051\u305F\u3059\u3070\u3089\u3057\u3044\u8A18\u4E8B\u304C\u3069\u3053'",
+      "reason": "selection"
+    },
+    {
+      "object": "InlineTextBox '\u306B\u3042\u3063\u305F\u304B\u5FD8\u308C\u3066\u3057\u307E\u3063\u305F\u7D4C\u9A13\u306F\u3042\u308A\u307E'",
+      "reason": "selection"
+    },
+    {
+      "object": "InlineTextBox '\u3059\u304B\u306A\u3089\u30BF\u30A4\u30C8\u30EB\u3068\u30A2\u30C9\u30EC\u30B9\u3060\u3051\u3067\u306A'",
+      "reason": "selection"
+    },
+    {
+      "object": "InlineTextBox '\u304F\u3001\u8A2A\u554F\u3057\u305F\u30A6\u30A7\u30D6\u30DA\u30FC\u30B8\u306E\u30B3\u30F3\u30C6\u30F3\u30C4'",
+      "reason": "selection"
+    },
+    {
+      "object": "InlineTextBox '\u304B\u3089\u3082\u691C\u7D22\u3059\u308B\u3053\u3068\u304C\u3067\u304D\u307E\u3059\u3002\u305B\u3063\u304B'",
+      "reason": "selection"
+    },
+    {
+      "object": "InlineTextBox '\u304F\u898B\u3064\u3051\u305F\u3059\u3070\u3089\u3057\u3044\u8A18\u4E8B\u304C\u3069\u3053\u306B\u3042\u3063'",
+      "reason": "selection"
+    },
+    {
+      "object": "InlineTextBox '\u305F\u304B\u5FD8\u308C\u3066\u3057\u307E\u3063\u305F\u7D4C\u9A13\u306F\u3042\u308A\u307E\u3059\u304B \u306A'",
+      "reason": "selection"
+    },
+    {
+      "object": "InlineTextBox '\u3089\u30BF\u30A4\u30C8\u30EB\u3068\u30A2\u30C9\u30EC\u30B9\u3060\u3051\u3067\u306A\u304F\u3001\u8A2A\u554F'",
+      "reason": "selection"
+    },
+    {
+      "object": "InlineTextBox '\u3057\u305F\u30A6\u30A7\u30D6\u30DA\u30FC\u30B8\u306E\u30B3\u30F3\u30C6\u30F3\u30C4\u304B\u3089\u3082\u691C'",
+      "reason": "selection"
+    },
+    {
+      "object": "InlineTextBox '\u7D22\u3059\u308B\u3053\u3068\u304C\u3067\u304D\u307E\u3059\u3002\u8A2A\u554F\u3057\u305F\u30A6\u30A7\u30D6'",
+      "reason": "selection"
+    },
+    {
+      "object": "InlineTextBox '\u30DA\u30FC\u30B8\u306E\u30B3\u30F3\u30C6\u30F3\u30C4\u304B\u3089\u3082\u691C\u7D22\u3059\u308B\u3053\u3068'",
+      "reason": "selection"
+    },
+    {
+      "object": "InlineTextBox '\u304C\u3067\u304D\u307E\u3059\u3002\u305B\u3063\u304B\u304F\u898B\u3064\u3051\u305F\u3059\u3070\u3089\u3057'",
+      "reason": "selection"
+    },
+    {
+      "object": "InlineTextBox '\u3044\u8A18\u4E8B\u304C\u3069\u3053\u306B\u3042\u3063\u305F\u304B\u5FD8\u308C\u3066\u3057\u307E\u3063\u305F'",
+      "reason": "selection"
+    },
+    {
+      "object": "InlineTextBox '\u7D4C\u9A13\u306F\u3042\u308A\u307E\u3059\u304B \u306A\u3089\u30BF\u30A4\u30C8\u30EB\u3068\u30A2\u30C9\u30EC'",
+      "reason": "selection"
+    },
+    {
+      "object": "InlineTextBox '\u30B9\u3060\u3051\u3067\u306A\u304F\u3001\u8A2A\u554F'",
+      "reason": "selection"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "incremental"
+    },
+    {
+      "object": "InlineTextBox '\u305B\u3063\u304B\u304F\u898B\u3064\u3051\u305F\u3059\u3070\u3089\u3057\u3044\u8A18\u4E8B\u304C\u3069\u3053'",
+      "reason": "incremental"
+    },
+    {
+      "object": "InlineTextBox '\u306B\u3042\u3063\u305F\u304B\u5FD8\u308C\u3066\u3057\u307E\u3063\u305F\u7D4C\u9A13\u306F\u3042\u308A\u307E'",
+      "reason": "incremental"
+    },
+    {
+      "object": "InlineTextBox '\u3059\u304B\u306A\u3089\u30BF\u30A4\u30C8\u30EB\u3068\u30A2\u30C9\u30EC\u30B9\u3060\u3051\u3067\u306A'",
+      "reason": "incremental"
+    },
+    {
+      "object": "InlineTextBox '\u304F\u3001\u8A2A\u554F\u3057\u305F\u30A6\u30A7\u30D6\u30DA\u30FC\u30B8\u306E\u30B3\u30F3\u30C6\u30F3\u30C4'",
+      "reason": "incremental"
+    },
+    {
+      "object": "InlineTextBox '\u304B\u3089\u3082\u691C\u7D22\u3059\u308B\u3053\u3068\u304C\u3067\u304D\u307E\u3059\u3002\u305B\u3063\u304B'",
+      "reason": "incremental"
+    },
+    {
+      "object": "InlineTextBox '\u304F\u898B\u3064\u3051\u305F\u3059\u3070\u3089\u3057\u3044\u8A18\u4E8B\u304C\u3069\u3053\u306B\u3042\u3063'",
+      "reason": "incremental"
+    },
+    {
+      "object": "InlineTextBox '\u305F\u304B\u5FD8\u308C\u3066\u3057\u307E\u3063\u305F\u7D4C\u9A13\u306F\u3042\u308A\u307E\u3059\u304B \u306A'",
+      "reason": "incremental"
+    },
+    {
+      "object": "InlineTextBox '\u3089\u30BF\u30A4\u30C8\u30EB\u3068\u30A2\u30C9\u30EC\u30B9\u3060\u3051\u3067\u306A\u304F\u3001\u8A2A\u554F'",
+      "reason": "incremental"
+    },
+    {
+      "object": "InlineTextBox '\u3057\u305F\u30A6\u30A7\u30D6\u30DA\u30FC\u30B8\u306E\u30B3\u30F3\u30C6\u30F3\u30C4\u304B\u3089\u3082\u691C'",
+      "reason": "incremental"
+    },
+    {
+      "object": "InlineTextBox '\u7D22\u3059\u308B\u3053\u3068\u304C\u3067\u304D\u307E\u3059\u3002\u8A2A\u554F\u3057\u305F\u30A6\u30A7\u30D6'",
+      "reason": "incremental"
+    },
+    {
+      "object": "InlineTextBox '\u30DA\u30FC\u30B8\u306E\u30B3\u30F3\u30C6\u30F3\u30C4\u304B\u3089\u3082\u691C\u7D22\u3059\u308B\u3053\u3068'",
+      "reason": "incremental"
+    },
+    {
+      "object": "InlineTextBox '\u304C\u3067\u304D\u307E\u3059\u3002\u305B\u3063\u304B\u304F\u898B\u3064\u3051\u305F\u3059\u3070\u3089\u3057'",
+      "reason": "incremental"
+    },
+    {
+      "object": "InlineTextBox '\u3044\u8A18\u4E8B\u304C\u3069\u3053\u306B\u3042\u3063\u305F\u304B\u5FD8\u308C\u3066\u3057\u307E\u3063\u305F'",
+      "reason": "incremental"
+    },
+    {
+      "object": "InlineTextBox '\u7D4C\u9A13\u306F\u3042\u308A\u307E\u3059\u304B \u306A\u3089\u30BF\u30A4\u30C8\u30EB\u3068\u30A2\u30C9\u30EC'",
+      "reason": "incremental"
+    },
+    {
+      "object": "InlineTextBox '\u30B9\u3060\u3051\u3067\u306A\u304F\u3001\u8A2A\u554F'",
+      "reason": "incremental"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/win7/fast/repaint/japanese-rl-selection-repaint-expected.txt b/third_party/WebKit/LayoutTests/platform/win7/fast/repaint/japanese-rl-selection-repaint-expected.txt
index e191f6d..7661f75f 100644
--- a/third_party/WebKit/LayoutTests/platform/win7/fast/repaint/japanese-rl-selection-repaint-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win7/fast/repaint/japanese-rl-selection-repaint-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -15,105 +17,115 @@
           "object": "LayoutText #text",
           "rect": [429, 23, 344, 544],
           "reason": "selection"
-        },
-        {
-          "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": "incremental"
-        },
-        {
-          "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": "selection"
-        },
-        {
-          "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": "incremental"
-        },
-        {
-          "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": "selection"
-        },
-        {
-          "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": "incremental"
-        },
-        {
-          "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": "selection"
-        },
-        {
-          "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": "incremental"
-        },
-        {
-          "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": "selection"
-        },
-        {
-          "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": "incremental"
-        },
-        {
-          "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": "selection"
-        },
-        {
-          "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": "incremental"
-        },
-        {
-          "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": "selection"
-        },
-        {
-          "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": "incremental"
-        },
-        {
-          "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": "selection"
-        },
-        {
-          "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": "incremental"
-        },
-        {
-          "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": "selection"
-        },
-        {
-          "object": "InlineTextBox '\u30EC\u30B9\u3060\u3051\u3067\u306A\u304F\u3001\u8A2A\u554F'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox '\u30EC\u30B9\u3060\u3051\u3067\u306A\u304F\u3001\u8A2A\u554F'",
-          "reason": "selection"
-        },
-        {
-          "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": "incremental"
-        },
-        {
-          "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": "selection"
-        },
-        {
-          "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": "incremental"
-        },
-        {
-          "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": "selection"
-        },
-        {
-          "object": "LayoutBlockFlow BODY",
-          "reason": "selection"
-        },
-        {
-          "object": "LayoutBlockFlow HTML",
-          "reason": "selection"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow HTML",
+      "reason": "selection"
+    },
+    {
+      "object": "LayoutBlockFlow BODY",
+      "reason": "selection"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "selection"
+    },
+    {
+      "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": "selection"
+    },
+    {
+      "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": "selection"
+    },
+    {
+      "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": "selection"
+    },
+    {
+      "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": "selection"
+    },
+    {
+      "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": "selection"
+    },
+    {
+      "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": "selection"
+    },
+    {
+      "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": "selection"
+    },
+    {
+      "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": "selection"
+    },
+    {
+      "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": "selection"
+    },
+    {
+      "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": "selection"
+    },
+    {
+      "object": "InlineTextBox '\u30EC\u30B9\u3060\u3051\u3067\u306A\u304F\u3001\u8A2A\u554F'",
+      "reason": "selection"
+    },
+    {
+      "object": "LayoutText #text",
+      "reason": "incremental"
+    },
+    {
+      "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": "incremental"
+    },
+    {
+      "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": "incremental"
+    },
+    {
+      "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": "incremental"
+    },
+    {
+      "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": "incremental"
+    },
+    {
+      "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": "incremental"
+    },
+    {
+      "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": "incremental"
+    },
+    {
+      "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": "incremental"
+    },
+    {
+      "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": "incremental"
+    },
+    {
+      "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": "incremental"
+    },
+    {
+      "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": "incremental"
+    },
+    {
+      "object": "InlineTextBox '\u30EC\u30B9\u3060\u3051\u3067\u306A\u304F\u3001\u8A2A\u554F'",
+      "reason": "incremental"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/platform/win7/fast/repaint/window-resize-background-image-fixed-centered-composited-expected.txt b/third_party/WebKit/LayoutTests/platform/win7/fast/repaint/window-resize-background-image-fixed-centered-composited-expected.txt
new file mode 100644
index 0000000..276db1195
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/win7/fast/repaint/window-resize-background-image-fixed-centered-composited-expected.txt
@@ -0,0 +1,168 @@
+{
+  "name": "Content Root Layer",
+  "bounds": [600, 250],
+  "children": [
+    {
+      "name": "LayoutView #document",
+      "bounds": [600, 250],
+      "drawsContent": true,
+      "paintInvalidations": [
+        {
+          "object": "LayoutView #document",
+          "rect": [0, 250, 600, 250],
+          "reason": "incremental"
+        },
+        {
+          "object": "LayoutBlockFlow HTML",
+          "rect": [0, 0, 600, 8],
+          "reason": "forced by layout"
+        }
+      ]
+    }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutView #document",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutBlockFlow HTML",
+      "reason": "forced by layout"
+    }
+  ]
+}
+{
+  "name": "Content Root Layer",
+  "bounds": [400, 250],
+  "children": [
+    {
+      "name": "LayoutView #document",
+      "bounds": [400, 250],
+      "drawsContent": true,
+      "paintInvalidations": [
+        {
+          "object": "LayoutBlockFlow HTML",
+          "rect": [0, 0, 600, 8],
+          "reason": "forced by layout"
+        },
+        {
+          "object": "LayoutView #document",
+          "rect": [0, 0, 400, 250],
+          "reason": "full"
+        },
+        {
+          "object": "LayoutView #document",
+          "rect": [400, 0, 200, 250],
+          "reason": "incremental"
+        }
+      ]
+    }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutView #document",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutView #document",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutBlockFlow HTML",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutBlockFlow BODY",
+      "reason": "became visible"
+    }
+  ]
+}
+{
+  "name": "Content Root Layer",
+  "bounds": [400, 600],
+  "children": [
+    {
+      "name": "LayoutView #document",
+      "bounds": [400, 600],
+      "drawsContent": true,
+      "paintInvalidations": [
+        {
+          "object": "LayoutView #document",
+          "rect": [0, 0, 400, 600],
+          "reason": "full"
+        },
+        {
+          "object": "LayoutView #document",
+          "rect": [0, 250, 400, 350],
+          "reason": "incremental"
+        },
+        {
+          "object": "LayoutBlockFlow HTML",
+          "rect": [0, 0, 400, 8],
+          "reason": "forced by layout"
+        }
+      ]
+    }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutView #document",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutView #document",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutBlockFlow HTML",
+      "reason": "forced by layout"
+    }
+  ]
+}
+{
+  "name": "Content Root Layer",
+  "bounds": [800, 600],
+  "children": [
+    {
+      "name": "LayoutView #document",
+      "bounds": [800, 600],
+      "drawsContent": true,
+      "paintInvalidations": [
+        {
+          "object": "LayoutView #document",
+          "rect": [0, 0, 800, 600],
+          "reason": "full"
+        },
+        {
+          "object": "LayoutBlockFlow HTML",
+          "rect": [0, 0, 800, 8],
+          "reason": "forced by layout"
+        },
+        {
+          "object": "LayoutView #document",
+          "rect": [400, 0, 400, 600],
+          "reason": "incremental"
+        }
+      ]
+    }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutView #document",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutView #document",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutBlockFlow HTML",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutBlockFlow BODY",
+      "reason": "became visible"
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/win7/fast/repaint/window-resize-background-image-fixed-centered-expected.txt b/third_party/WebKit/LayoutTests/platform/win7/fast/repaint/window-resize-background-image-fixed-centered-expected.txt
new file mode 100644
index 0000000..d1c60991
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/platform/win7/fast/repaint/window-resize-background-image-fixed-centered-expected.txt
@@ -0,0 +1,181 @@
+{
+  "name": "Content Root Layer",
+  "bounds": [600, 250],
+  "children": [
+    {
+      "name": "LayoutView #document",
+      "bounds": [600, 250],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "paintInvalidations": [
+        {
+          "object": "LayoutView #document",
+          "rect": [0, 250, 600, 250],
+          "reason": "incremental"
+        },
+        {
+          "object": "LayoutView #document",
+          "rect": [0, 0, 600, 250],
+          "reason": "full"
+        },
+        {
+          "object": "LayoutBlockFlow HTML",
+          "rect": [0, 0, 600, 8],
+          "reason": "forced by layout"
+        }
+      ]
+    }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutView #document",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutView #document",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutBlockFlow HTML",
+      "reason": "forced by layout"
+    }
+  ]
+}
+{
+  "name": "Content Root Layer",
+  "bounds": [400, 250],
+  "children": [
+    {
+      "name": "LayoutView #document",
+      "bounds": [400, 250],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "paintInvalidations": [
+        {
+          "object": "LayoutBlockFlow HTML",
+          "rect": [0, 0, 600, 8],
+          "reason": "forced by layout"
+        },
+        {
+          "object": "LayoutView #document",
+          "rect": [0, 0, 400, 250],
+          "reason": "full"
+        },
+        {
+          "object": "LayoutView #document",
+          "rect": [400, 0, 200, 250],
+          "reason": "incremental"
+        }
+      ]
+    }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutView #document",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutView #document",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutBlockFlow HTML",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutBlockFlow BODY",
+      "reason": "became visible"
+    }
+  ]
+}
+{
+  "name": "Content Root Layer",
+  "bounds": [400, 600],
+  "children": [
+    {
+      "name": "LayoutView #document",
+      "bounds": [400, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "paintInvalidations": [
+        {
+          "object": "LayoutView #document",
+          "rect": [0, 0, 400, 600],
+          "reason": "full"
+        },
+        {
+          "object": "LayoutView #document",
+          "rect": [0, 250, 400, 350],
+          "reason": "incremental"
+        },
+        {
+          "object": "LayoutBlockFlow HTML",
+          "rect": [0, 0, 400, 8],
+          "reason": "forced by layout"
+        }
+      ]
+    }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutView #document",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutView #document",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutBlockFlow HTML",
+      "reason": "forced by layout"
+    }
+  ]
+}
+{
+  "name": "Content Root Layer",
+  "bounds": [800, 600],
+  "children": [
+    {
+      "name": "LayoutView #document",
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "paintInvalidations": [
+        {
+          "object": "LayoutView #document",
+          "rect": [0, 0, 800, 600],
+          "reason": "full"
+        },
+        {
+          "object": "LayoutBlockFlow HTML",
+          "rect": [0, 0, 800, 8],
+          "reason": "forced by layout"
+        },
+        {
+          "object": "LayoutView #document",
+          "rect": [400, 0, 400, 600],
+          "reason": "incremental"
+        }
+      ]
+    }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutView #document",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutView #document",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutBlockFlow HTML",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutBlockFlow BODY",
+      "reason": "became visible"
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/platform/win7/paint/selection/selection-drag-image-in-iframe-expected.png b/third_party/WebKit/LayoutTests/platform/win7/paint/selection/selection-drag-image-in-iframe-expected.png
deleted file mode 100644
index 155593a..0000000
--- a/third_party/WebKit/LayoutTests/platform/win7/paint/selection/selection-drag-image-in-iframe-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win7/svg/repaint/inner-svg-change-viewBox-contract-expected.png b/third_party/WebKit/LayoutTests/platform/win7/svg/repaint/inner-svg-change-viewBox-contract-expected.png
deleted file mode 100644
index deace76..0000000
--- a/third_party/WebKit/LayoutTests/platform/win7/svg/repaint/inner-svg-change-viewBox-contract-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win7/svg/repaint/inner-svg-change-viewBox-contract-expected.txt b/third_party/WebKit/LayoutTests/platform/win7/svg/repaint/inner-svg-change-viewBox-contract-expected.txt
deleted file mode 100644
index 95210be8..0000000
--- a/third_party/WebKit/LayoutTests/platform/win7/svg/repaint/inner-svg-change-viewBox-contract-expected.txt
+++ /dev/null
@@ -1,23 +0,0 @@
-{
-  "bounds": [800, 600],
-  "children": [
-    {
-      "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"
-        }
-      ]
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win7/svg/repaint/mask-clip-target-transform-expected.png b/third_party/WebKit/LayoutTests/platform/win7/svg/repaint/mask-clip-target-transform-expected.png
deleted file mode 100644
index f7a39d1a..0000000
--- a/third_party/WebKit/LayoutTests/platform/win7/svg/repaint/mask-clip-target-transform-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win7/svg/repaint/mask-clip-target-transform-expected.txt b/third_party/WebKit/LayoutTests/platform/win7/svg/repaint/mask-clip-target-transform-expected.txt
deleted file mode 100644
index 4e9a471..0000000
--- a/third_party/WebKit/LayoutTests/platform/win7/svg/repaint/mask-clip-target-transform-expected.txt
+++ /dev/null
@@ -1,43 +0,0 @@
-{
-  "bounds": [800, 600],
-  "children": [
-    {
-      "bounds": [800, 600],
-      "contentsOpaque": true,
-      "drawsContent": true,
-      "paintInvalidations": [
-        {
-          "object": "LayoutSVGRect rect id='clipper'",
-          "rect": [0, 100, 300, 200],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGRect rect id='masker'",
-          "rect": [0, 0, 300, 100],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGRect rect id='clipper'",
-          "rect": [100, 0, 200, 300],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGRect rect id='masker'",
-          "rect": [100, 0, 200, 300],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGContainer g",
-          "rect": [150, 50, 100, 100],
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGContainer g",
-          "rect": [50, 150, 100, 100],
-          "reason": "bounds change"
-        }
-      ]
-    }
-  ]
-}
-
diff --git a/third_party/WebKit/LayoutTests/platform/win7/svg/repaint/rounded-rect-height-change-expected.txt b/third_party/WebKit/LayoutTests/platform/win7/svg/repaint/rounded-rect-height-change-expected.txt
deleted file mode 100644
index 9f0ab462..0000000
--- a/third_party/WebKit/LayoutTests/platform/win7/svg/repaint/rounded-rect-height-change-expected.txt
+++ /dev/null
@@ -1,7 +0,0 @@
-layer at (0,0) size 800x600
-  LayoutView at (0,0) size 800x600
-layer at (0,0) size 800x220
-  LayoutBlockFlow {HTML} at (0,0) size 800x220
-    LayoutBlockFlow {BODY} at (8,8) size 784x204
-      LayoutSVGRoot {svg} at (8,8) size 100x200
-        LayoutSVGRect {rect} at (8,8) size 100x200 [fill={[type=SOLID] [color=#0000FF]}] [x=0.00] [y=0.00] [width=100.00] [height=200.00]
diff --git a/third_party/WebKit/LayoutTests/platform/win7/tables/mozilla/marvin/backgr_simple-table-column-group-expected.png b/third_party/WebKit/LayoutTests/platform/win7/tables/mozilla/marvin/backgr_simple-table-column-group-expected.png
index 0dbf0ec..c6ab4ce 100644
--- a/third_party/WebKit/LayoutTests/platform/win7/tables/mozilla/marvin/backgr_simple-table-column-group-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win7/tables/mozilla/marvin/backgr_simple-table-column-group-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/shadow-dom/slotchange-event.html b/third_party/WebKit/LayoutTests/shadow-dom/slotchange-event.html
deleted file mode 100644
index ec272dc..0000000
--- a/third_party/WebKit/LayoutTests/shadow-dom/slotchange-event.html
+++ /dev/null
@@ -1,76 +0,0 @@
-<!DOCTYPE html>
-<script src='../resources/testharness.js'></script>
-<script src='../resources/testharnessreport.js'></script>
-<script src='resources/shadow-dom.js'></script>
-<div id='d1'>
-  <template data-mode='open' data-expose-as='d1_shadow'>
-    <div id='d1-d1'>
-      <template data-mode='open' data-expose-as='d1_d1_shadow'>
-        <slot name='d1-d1-s1'></slot>
-      </template>
-      <slot name='d1-s1' slot='d1-d1-s1'></slot>
-    </div>
-  </template>
-  <div id='d2' slot='d1-s1'></div>
-</div>
-<script>
-'use strict';
-convertTemplatesToShadowRootsWithin(d1);
-removeWhiteSpaceOnlyTextNodes(d1);
-
-async_test((test) => {
-  var count_for_d1_s1 = 0;
-  var count_for_d1_d1_s1 = 0;
-
-  const d1_s1 = d1_shadow.querySelector('slot');
-  const d1_d1_s1 = d1_d1_shadow.querySelector('slot');
-
-  assert_array_equals(d1_s1.assignedNodes(), [d2]);
-  assert_array_equals(d1_s1.assignedNodes({'flatten': true}), [d2]);
-
-  assert_array_equals(d1_d1_s1.assignedNodes(), [d1_s1]);
-  assert_array_equals(d1_d1_s1.assignedNodes({'flatten': true}), [d2]);
-
-  d1_s1.addEventListener('slotchange', (e) => {
-    test.step(() => {
-      count_for_d1_s1++;
-      if (count_for_d1_s1 == 1) {
-        assert_equals(e.target, d1_s1);
-        assert_array_equals(d1_s1.assignedNodes(), [d2, d3]);
-        assert_array_equals(d1_s1.assignedNodes({'flatten': true}), [d2, d3]);
-      } else if (count_for_d1_s1 == 2) {
-        assert_equals(e.target, d1_s1);
-        assert_array_equals(d1_s1.assignedNodes(), [d2]);
-        assert_array_equals(d1_s1.assignedNodes({'flatten': true}), [d2]);
-        test.done();
-      }
-    });
-  });
-
-  d1_d1_s1.addEventListener('slotchange', (e) => {
-    test.step(() => {
-      count_for_d1_d1_s1++;
-      if (count_for_d1_d1_s1 == 1) {
-        assert_equals(e.target, d1_d1_s1);
-        assert_array_equals(d1_d1_s1.assignedNodes(), [d1_s1]);
-        assert_array_equals(d1_d1_s1.assignedNodes({'flatten': true}), [d2, d3]);
-      } else if (count_for_d1_d1_s1 == 2){
-        assert_equals(e.target, d1_d1_s1);
-        assert_array_equals(d1_d1_s1.assignedNodes(), [d1_s1]);
-        assert_array_equals(d1_d1_s1.assignedNodes({'flatten': true}), [d2]);
-        test.done();
-      }
-    });
-  });
-
-  const d3 = document.createElement('div');
-  d3.setAttribute('id', 'd3');
-  d3.setAttribute('slot', 'd1-s1');
-  d1.appendChild(d3);
-  // Different microtask.
-  setTimeout(function(){
-    d3.remove();
-  }, 0);
-
-}, "slotchange event should be dispatched for a slot at most once per microtask.");
-</script>
diff --git a/third_party/WebKit/LayoutTests/svg/as-background-image/svg-background-partial-redraw-expected.txt b/third_party/WebKit/LayoutTests/svg/as-background-image/svg-background-partial-redraw-expected.txt
index 24e5846..4c335b7b 100644
--- a/third_party/WebKit/LayoutTests/svg/as-background-image/svg-background-partial-redraw-expected.txt
+++ b/third_party/WebKit/LayoutTests/svg/as-background-image/svg-background-partial-redraw-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -13,6 +15,12 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='revealer'",
+      "reason": "layoutObject removal"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/svg/as-image/svg-image-change-content-size-expected.txt b/third_party/WebKit/LayoutTests/svg/as-image/svg-image-change-content-size-expected.txt
index 21e48e3..8c8763a 100644
--- a/third_party/WebKit/LayoutTests/svg/as-image/svg-image-change-content-size-expected.txt
+++ b/third_party/WebKit/LayoutTests/svg/as-image/svg-image-change-content-size-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -10,21 +12,19 @@
           "object": "LayoutBlockFlow div id='contentBox'",
           "rect": [8, 50, 602, 422],
           "reason": "forced by layout"
-        },
-        {
-          "object": "InlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow div id='contentBox'",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "forced by layout"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/svg/as-object/deep-nested-embedded-svg-size-changes-no-layout-triggers-1-expected.txt b/third_party/WebKit/LayoutTests/svg/as-object/deep-nested-embedded-svg-size-changes-no-layout-triggers-1-expected.txt
index 8b13789..222772c7 100644
--- a/third_party/WebKit/LayoutTests/svg/as-object/deep-nested-embedded-svg-size-changes-no-layout-triggers-1-expected.txt
+++ b/third_party/WebKit/LayoutTests/svg/as-object/deep-nested-embedded-svg-size-changes-no-layout-triggers-1-expected.txt
@@ -1 +1,13 @@
+{
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow BODY",
+      "reason": "invalidate paint rectangle"
+    },
+    {
+      "object": "LayoutEmbeddedObject OBJECT",
+      "reason": "style change"
+    }
+  ]
+}
 
diff --git a/third_party/WebKit/LayoutTests/svg/as-object/deep-nested-embedded-svg-size-changes-no-layout-triggers-2-expected.txt b/third_party/WebKit/LayoutTests/svg/as-object/deep-nested-embedded-svg-size-changes-no-layout-triggers-2-expected.txt
index 8b13789..222772c7 100644
--- a/third_party/WebKit/LayoutTests/svg/as-object/deep-nested-embedded-svg-size-changes-no-layout-triggers-2-expected.txt
+++ b/third_party/WebKit/LayoutTests/svg/as-object/deep-nested-embedded-svg-size-changes-no-layout-triggers-2-expected.txt
@@ -1 +1,13 @@
+{
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow BODY",
+      "reason": "invalidate paint rectangle"
+    },
+    {
+      "object": "LayoutEmbeddedObject OBJECT",
+      "reason": "style change"
+    }
+  ]
+}
 
diff --git a/third_party/WebKit/LayoutTests/svg/as-object/embedded-svg-size-changes-no-layout-triggers-expected.txt b/third_party/WebKit/LayoutTests/svg/as-object/embedded-svg-size-changes-no-layout-triggers-expected.txt
index b91dc1ad..1585649 100644
--- a/third_party/WebKit/LayoutTests/svg/as-object/embedded-svg-size-changes-no-layout-triggers-expected.txt
+++ b/third_party/WebKit/LayoutTests/svg/as-object/embedded-svg-size-changes-no-layout-triggers-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -15,17 +17,19 @@
           "object": "LayoutEmbeddedObject OBJECT",
           "rect": [0, 0, 402, 202],
           "reason": "style change"
-        },
-        {
-          "object": "InlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow BODY",
+      "reason": "invalidate paint rectangle"
+    },
+    {
+      "object": "LayoutEmbeddedObject OBJECT",
+      "reason": "style change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/svg/as-object/nested-embedded-svg-size-changes-no-layout-triggers-1-expected.txt b/third_party/WebKit/LayoutTests/svg/as-object/nested-embedded-svg-size-changes-no-layout-triggers-1-expected.txt
index e6b4d1f..d461fee9 100644
--- a/third_party/WebKit/LayoutTests/svg/as-object/nested-embedded-svg-size-changes-no-layout-triggers-1-expected.txt
+++ b/third_party/WebKit/LayoutTests/svg/as-object/nested-embedded-svg-size-changes-no-layout-triggers-1-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -115,53 +117,19 @@
           "object": "LayoutView #document",
           "rect": [285, 135, 15, 15],
           "reason": "scroll"
-        },
-        {
-          "object": "HorizontalScrollbar",
-          "reason": "full"
-        },
-        {
-          "object": "InlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "LayoutText #text",
-          "reason": "none"
-        },
-        {
-          "object": "LayoutView #document",
-          "reason": "scroll"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "VerticalScrollbar",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow BODY",
+      "reason": "invalidate paint rectangle"
+    },
+    {
+      "object": "LayoutEmbeddedObject OBJECT",
+      "reason": "style change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/svg/as-object/nested-embedded-svg-size-changes-no-layout-triggers-2-expected.txt b/third_party/WebKit/LayoutTests/svg/as-object/nested-embedded-svg-size-changes-no-layout-triggers-2-expected.txt
index e6b4d1f..d461fee9 100644
--- a/third_party/WebKit/LayoutTests/svg/as-object/nested-embedded-svg-size-changes-no-layout-triggers-2-expected.txt
+++ b/third_party/WebKit/LayoutTests/svg/as-object/nested-embedded-svg-size-changes-no-layout-triggers-2-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -115,53 +117,19 @@
           "object": "LayoutView #document",
           "rect": [285, 135, 15, 15],
           "reason": "scroll"
-        },
-        {
-          "object": "HorizontalScrollbar",
-          "reason": "full"
-        },
-        {
-          "object": "InlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "InlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "LayoutText #text",
-          "reason": "none"
-        },
-        {
-          "object": "LayoutView #document",
-          "reason": "scroll"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "VerticalScrollbar",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow BODY",
+      "reason": "invalidate paint rectangle"
+    },
+    {
+      "object": "LayoutEmbeddedObject OBJECT",
+      "reason": "style change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/svg/custom/absolute-sized-content-with-resources-expected.txt b/third_party/WebKit/LayoutTests/svg/custom/absolute-sized-content-with-resources-expected.txt
index 2345bf8..3c0ae4cc 100644
--- a/third_party/WebKit/LayoutTests/svg/custom/absolute-sized-content-with-resources-expected.txt
+++ b/third_party/WebKit/LayoutTests/svg/custom/absolute-sized-content-with-resources-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -20,21 +22,23 @@
           "object": "LayoutSVGRoot svg",
           "rect": [17, 217, 84, 68],
           "reason": "bounds change"
-        },
-        {
-          "object": "InlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow div id='contentBox'",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutSVGRoot svg",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/svg/custom/animate-target-id-changed-expected.txt b/third_party/WebKit/LayoutTests/svg/custom/animate-target-id-changed-expected.txt
index 1da3d17..40fe5ff 100644
--- a/third_party/WebKit/LayoutTests/svg/custom/animate-target-id-changed-expected.txt
+++ b/third_party/WebKit/LayoutTests/svg/custom/animate-target-id-changed-expected.txt
@@ -1,8 +1,10 @@
 CONSOLE WARNING: SVG's SMIL animations (<animate>, <set>, etc.) are deprecated and will be removed. Please use CSS animations or Web animations instead.
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -14,6 +16,12 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutSVGRect rect id='newId'",
+      "reason": "style change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/svg/custom/circle-move-invalidation-expected.txt b/third_party/WebKit/LayoutTests/svg/custom/circle-move-invalidation-expected.txt
index 3def519..9804ed6 100644
--- a/third_party/WebKit/LayoutTests/svg/custom/circle-move-invalidation-expected.txt
+++ b/third_party/WebKit/LayoutTests/svg/custom/circle-move-invalidation-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -18,6 +20,12 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutSVGEllipse circle id='c1'",
+      "reason": "full"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/svg/custom/clip-path-child-changes-expected.txt b/third_party/WebKit/LayoutTests/svg/custom/clip-path-child-changes-expected.txt
index fe19989..135fbd8 100644
--- a/third_party/WebKit/LayoutTests/svg/custom/clip-path-child-changes-expected.txt
+++ b/third_party/WebKit/LayoutTests/svg/custom/clip-path-child-changes-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -28,6 +30,20 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutSVGRoot svg",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutSVGPath path",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutSVGContainer g",
+      "reason": "full"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/svg/custom/clip-path-href-changes-expected.txt b/third_party/WebKit/LayoutTests/svg/custom/clip-path-href-changes-expected.txt
index 33327f3..adba74e3 100644
--- a/third_party/WebKit/LayoutTests/svg/custom/clip-path-href-changes-expected.txt
+++ b/third_party/WebKit/LayoutTests/svg/custom/clip-path-href-changes-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -23,6 +25,16 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutSVGRoot svg",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutSVGContainer g",
+      "reason": "style change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/svg/custom/clip-path-id-changes-expected.txt b/third_party/WebKit/LayoutTests/svg/custom/clip-path-id-changes-expected.txt
index 9e50511..cd54429 100644
--- a/third_party/WebKit/LayoutTests/svg/custom/clip-path-id-changes-expected.txt
+++ b/third_party/WebKit/LayoutTests/svg/custom/clip-path-id-changes-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -23,6 +25,16 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutSVGRoot svg",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutSVGContainer g",
+      "reason": "full"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/svg/custom/clip-path-units-changes-expected.txt b/third_party/WebKit/LayoutTests/svg/custom/clip-path-units-changes-expected.txt
index d490b3e..039243a 100644
--- a/third_party/WebKit/LayoutTests/svg/custom/clip-path-units-changes-expected.txt
+++ b/third_party/WebKit/LayoutTests/svg/custom/clip-path-units-changes-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -20,13 +22,23 @@
           "object": "LayoutSVGRoot svg",
           "rect": [100, 0, 100, 200],
           "reason": "incremental"
-        },
-        {
-          "object": "LayoutSVGResourceClipper clipPath id='myclip'",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutSVGRoot svg",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutSVGResourceClipper clipPath id='myclip'",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutSVGContainer g",
+      "reason": "full"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/svg/custom/deep-dynamic-updates-expected.txt b/third_party/WebKit/LayoutTests/svg/custom/deep-dynamic-updates-expected.txt
index 5072678..527ee6ce 100644
--- a/third_party/WebKit/LayoutTests/svg/custom/deep-dynamic-updates-expected.txt
+++ b/third_party/WebKit/LayoutTests/svg/custom/deep-dynamic-updates-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -20,13 +22,27 @@
           "object": "LayoutSVGRect rect",
           "rect": [0, 0, 121, 21],
           "reason": "SVG resource change"
-        },
-        {
-          "object": "LayoutSVGGradientStop stop id='stop1'",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "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/svg/custom/fill-opacity-update-expected.txt b/third_party/WebKit/LayoutTests/svg/custom/fill-opacity-update-expected.txt
index 8ddcbde..c52c4aa0 100644
--- a/third_party/WebKit/LayoutTests/svg/custom/fill-opacity-update-expected.txt
+++ b/third_party/WebKit/LayoutTests/svg/custom/fill-opacity-update-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -13,6 +15,12 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutSVGEllipse circle",
+      "reason": "style change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/svg/custom/foreignObject-crash-on-hover-expected.txt b/third_party/WebKit/LayoutTests/svg/custom/foreignObject-crash-on-hover-expected.txt
index e9f7954d..10aa3faf 100644
--- a/third_party/WebKit/LayoutTests/svg/custom/foreignObject-crash-on-hover-expected.txt
+++ b/third_party/WebKit/LayoutTests/svg/custom/foreignObject-crash-on-hover-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true
diff --git a/third_party/WebKit/LayoutTests/svg/custom/gradient-add-stops-expected.txt b/third_party/WebKit/LayoutTests/svg/custom/gradient-add-stops-expected.txt
index 8ea37f51..6f4c2f5 100644
--- a/third_party/WebKit/LayoutTests/svg/custom/gradient-add-stops-expected.txt
+++ b/third_party/WebKit/LayoutTests/svg/custom/gradient-add-stops-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -10,17 +12,23 @@
           "object": "LayoutSVGRect rect",
           "rect": [0, 0, 100, 100],
           "reason": "SVG resource change"
-        },
-        {
-          "object": "LayoutSVGGradientStop stop",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "LayoutSVGResourceLinearGradient linearGradient id='test'",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutSVGResourceLinearGradient linearGradient id='test'",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutSVGGradientStop stop",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGRect rect",
+      "reason": "SVG resource change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/svg/custom/gradient-stop-style-change-expected.txt b/third_party/WebKit/LayoutTests/svg/custom/gradient-stop-style-change-expected.txt
index ecccd78..d8a4a372 100644
--- a/third_party/WebKit/LayoutTests/svg/custom/gradient-stop-style-change-expected.txt
+++ b/third_party/WebKit/LayoutTests/svg/custom/gradient-stop-style-change-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -10,13 +12,19 @@
           "object": "LayoutSVGRect rect",
           "rect": [0, 0, 100, 100],
           "reason": "SVG resource change"
-        },
-        {
-          "object": "LayoutSVGGradientStop stop id='stop'",
-          "reason": "style change"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutSVGGradientStop stop id='stop'",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutSVGRect rect",
+      "reason": "SVG resource change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/svg/custom/js-late-marker-and-object-creation-expected.txt b/third_party/WebKit/LayoutTests/svg/custom/js-late-marker-and-object-creation-expected.txt
index 410b7ca..45fc4c1 100644
--- a/third_party/WebKit/LayoutTests/svg/custom/js-late-marker-and-object-creation-expected.txt
+++ b/third_party/WebKit/LayoutTests/svg/custom/js-late-marker-and-object-creation-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -30,13 +32,35 @@
           "object": "LayoutSVGEllipse circle",
           "rect": [0, 0, 4, 4],
           "reason": "layoutObject insertion"
-        },
-        {
-          "object": "LayoutSVGResourceMarker marker id='markerMiddle'",
-          "reason": "layoutObject insertion"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutSVGRoot svg id='svg-root'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGContainer g id='content'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGPath path",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGResourceMarker marker id='markerMiddle'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGEllipse circle",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGPath path",
+      "reason": "style change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/svg/custom/js-late-marker-creation-expected.txt b/third_party/WebKit/LayoutTests/svg/custom/js-late-marker-creation-expected.txt
index 7133096..91dc857f 100644
--- a/third_party/WebKit/LayoutTests/svg/custom/js-late-marker-creation-expected.txt
+++ b/third_party/WebKit/LayoutTests/svg/custom/js-late-marker-creation-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -15,13 +17,23 @@
           "object": "LayoutSVGEllipse circle",
           "rect": [0, 0, 4, 4],
           "reason": "layoutObject insertion"
-        },
-        {
-          "object": "LayoutSVGResourceMarker marker id='markerMiddle'",
-          "reason": "layoutObject insertion"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutSVGResourceMarker marker id='markerMiddle'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGEllipse circle",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGPath path",
+      "reason": "style change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/svg/custom/js-late-mask-and-object-creation-expected.txt b/third_party/WebKit/LayoutTests/svg/custom/js-late-mask-and-object-creation-expected.txt
index 9d3c906..a45722e0 100644
--- a/third_party/WebKit/LayoutTests/svg/custom/js-late-mask-and-object-creation-expected.txt
+++ b/third_party/WebKit/LayoutTests/svg/custom/js-late-mask-and-object-creation-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -30,13 +32,35 @@
           "object": "LayoutSVGRoot svg id='svg-root'",
           "rect": [0, 100, 800, 100],
           "reason": "bounds change"
-        },
-        {
-          "object": "LayoutSVGResourceMasker mask id='dynMask'",
-          "reason": "layoutObject insertion"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutSVGRoot svg id='svg-root'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGContainer g id='content'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGRect rect",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGRect rect",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutSVGResourceMasker mask id='dynMask'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGRect rect",
+      "reason": "layoutObject insertion"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/svg/custom/js-late-mask-creation-expected.txt b/third_party/WebKit/LayoutTests/svg/custom/js-late-mask-creation-expected.txt
index ec286445..15a3a8ec 100644
--- a/third_party/WebKit/LayoutTests/svg/custom/js-late-mask-creation-expected.txt
+++ b/third_party/WebKit/LayoutTests/svg/custom/js-late-mask-creation-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -15,13 +17,23 @@
           "object": "LayoutSVGRect rect",
           "rect": [0, 100, 800, 100],
           "reason": "style change"
-        },
-        {
-          "object": "LayoutSVGResourceMasker mask id='dynMask'",
-          "reason": "layoutObject insertion"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutSVGRect rect",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutSVGResourceMasker mask id='dynMask'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGRect rect",
+      "reason": "layoutObject insertion"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/svg/custom/js-repaint-rect-on-path-with-stroke-expected.txt b/third_party/WebKit/LayoutTests/svg/custom/js-repaint-rect-on-path-with-stroke-expected.txt
index e3854a6..e8accf0 100644
--- a/third_party/WebKit/LayoutTests/svg/custom/js-repaint-rect-on-path-with-stroke-expected.txt
+++ b/third_party/WebKit/LayoutTests/svg/custom/js-repaint-rect-on-path-with-stroke-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -28,6 +30,16 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutSVGRoot svg",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGPath path id='path'",
+      "reason": "full"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/svg/custom/js-update-bounce-expected.txt b/third_party/WebKit/LayoutTests/svg/custom/js-update-bounce-expected.txt
index 85b0403c..6225bca 100644
--- a/third_party/WebKit/LayoutTests/svg/custom/js-update-bounce-expected.txt
+++ b/third_party/WebKit/LayoutTests/svg/custom/js-update-bounce-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -28,6 +30,16 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutSVGRoot svg",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGEllipse circle id='bounce'",
+      "reason": "subtree"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/svg/custom/js-update-container-expected.txt b/third_party/WebKit/LayoutTests/svg/custom/js-update-container-expected.txt
index 641b9560..9a6151b 100644
--- a/third_party/WebKit/LayoutTests/svg/custom/js-update-container-expected.txt
+++ b/third_party/WebKit/LayoutTests/svg/custom/js-update-container-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -28,6 +30,20 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutSVGRoot svg",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutSVGContainer g id='group'",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutSVGRect rect",
+      "reason": "style change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/svg/custom/js-update-gradient-expected.txt b/third_party/WebKit/LayoutTests/svg/custom/js-update-gradient-expected.txt
index 0494ad7..f67d615 100644
--- a/third_party/WebKit/LayoutTests/svg/custom/js-update-gradient-expected.txt
+++ b/third_party/WebKit/LayoutTests/svg/custom/js-update-gradient-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -15,17 +17,27 @@
           "object": "LayoutSVGRect rect",
           "rect": [10, 10, 430, 80],
           "reason": "SVG resource change"
-        },
-        {
-          "object": "LayoutSVGGradientStop stop id='stop1'",
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGResourceLinearGradient linearGradient id='Gradient'",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "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/svg/custom/js-update-image-expected.txt b/third_party/WebKit/LayoutTests/svg/custom/js-update-image-expected.txt
index 1bc41cb..51fc176 100644
--- a/third_party/WebKit/LayoutTests/svg/custom/js-update-image-expected.txt
+++ b/third_party/WebKit/LayoutTests/svg/custom/js-update-image-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -18,6 +20,16 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutSVGRoot svg",
+      "reason": "became visible"
+    },
+    {
+      "object": "LayoutSVGImage image id='image'",
+      "reason": "full"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/svg/custom/js-update-pattern-child-expected.txt b/third_party/WebKit/LayoutTests/svg/custom/js-update-pattern-child-expected.txt
index e6830478..5ebc174 100644
--- a/third_party/WebKit/LayoutTests/svg/custom/js-update-pattern-child-expected.txt
+++ b/third_party/WebKit/LayoutTests/svg/custom/js-update-pattern-child-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -28,6 +30,20 @@
         }
       ]
     }
+  ],
+  "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/svg/custom/js-update-pattern-expected.txt b/third_party/WebKit/LayoutTests/svg/custom/js-update-pattern-expected.txt
index 8696b37..9c89663 100644
--- a/third_party/WebKit/LayoutTests/svg/custom/js-update-pattern-expected.txt
+++ b/third_party/WebKit/LayoutTests/svg/custom/js-update-pattern-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -25,13 +27,27 @@
           "object": "LayoutSVGRect rect id='rect'",
           "rect": [0, 10, 10, 10],
           "reason": "full"
-        },
-        {
-          "object": "LayoutSVGResourcePattern pattern id='Pattern'",
-          "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/svg/custom/js-update-polygon-changes-expected.txt b/third_party/WebKit/LayoutTests/svg/custom/js-update-polygon-changes-expected.txt
index aed4a39..b5b541dc 100644
--- a/third_party/WebKit/LayoutTests/svg/custom/js-update-polygon-changes-expected.txt
+++ b/third_party/WebKit/LayoutTests/svg/custom/js-update-polygon-changes-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -28,6 +30,16 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutSVGRoot svg",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGPath polygon id='polygon'",
+      "reason": "full"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/svg/custom/js-update-polygon-removal-expected.txt b/third_party/WebKit/LayoutTests/svg/custom/js-update-polygon-removal-expected.txt
index 502bd9e9..4a7a021 100644
--- a/third_party/WebKit/LayoutTests/svg/custom/js-update-polygon-removal-expected.txt
+++ b/third_party/WebKit/LayoutTests/svg/custom/js-update-polygon-removal-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -28,6 +30,16 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutSVGRoot svg",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGPath polygon id='polygon'",
+      "reason": "full"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/svg/custom/js-update-stop-expected.txt b/third_party/WebKit/LayoutTests/svg/custom/js-update-stop-expected.txt
index 8498b83..b887a27d 100644
--- a/third_party/WebKit/LayoutTests/svg/custom/js-update-stop-expected.txt
+++ b/third_party/WebKit/LayoutTests/svg/custom/js-update-stop-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -15,13 +17,23 @@
           "object": "LayoutSVGRect rect",
           "rect": [10, 10, 430, 80],
           "reason": "SVG resource change"
-        },
-        {
-          "object": "LayoutSVGGradientStop stop id='stop1'",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "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/svg/custom/js-update-stop-linked-gradient-expected.txt b/third_party/WebKit/LayoutTests/svg/custom/js-update-stop-linked-gradient-expected.txt
index 7ef9a59..225600c 100644
--- a/third_party/WebKit/LayoutTests/svg/custom/js-update-stop-linked-gradient-expected.txt
+++ b/third_party/WebKit/LayoutTests/svg/custom/js-update-stop-linked-gradient-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -20,17 +22,31 @@
           "object": "LayoutSVGRect rect",
           "rect": [10, 10, 430, 80],
           "reason": "SVG resource change"
-        },
-        {
-          "object": "LayoutSVGGradientStop stop id='stop1'",
-          "reason": "layoutObject removal"
-        },
-        {
-          "object": "LayoutSVGResourceLinearGradient linearGradient id='gradient'",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutSVGGradientStop stop id='stop1'",
+      "reason": "layoutObject removal"
+    },
+    {
+      "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/svg/custom/js-update-style-expected.txt b/third_party/WebKit/LayoutTests/svg/custom/js-update-style-expected.txt
index 48f91c1..7523d99 100644
--- a/third_party/WebKit/LayoutTests/svg/custom/js-update-style-expected.txt
+++ b/third_party/WebKit/LayoutTests/svg/custom/js-update-style-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -38,6 +40,32 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutSVGRoot svg",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGContainer g",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutSVGRect rect",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutSVGRect rect",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutSVGRect rect",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutSVGRect rect",
+      "reason": "style change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/svg/custom/js-update-transform-addition-expected.txt b/third_party/WebKit/LayoutTests/svg/custom/js-update-transform-addition-expected.txt
index 0ebaeb09..691f678c 100644
--- a/third_party/WebKit/LayoutTests/svg/custom/js-update-transform-addition-expected.txt
+++ b/third_party/WebKit/LayoutTests/svg/custom/js-update-transform-addition-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -18,6 +20,16 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutSVGRoot svg",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGPath polygon id='polygon'",
+      "reason": "full"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/svg/custom/js-update-transform-changes-expected.txt b/third_party/WebKit/LayoutTests/svg/custom/js-update-transform-changes-expected.txt
index 0ebaeb09..691f678c 100644
--- a/third_party/WebKit/LayoutTests/svg/custom/js-update-transform-changes-expected.txt
+++ b/third_party/WebKit/LayoutTests/svg/custom/js-update-transform-changes-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -18,6 +20,16 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutSVGRoot svg",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGPath polygon id='polygon'",
+      "reason": "full"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/svg/custom/marker-child-changes-css-expected.txt b/third_party/WebKit/LayoutTests/svg/custom/marker-child-changes-css-expected.txt
index 0c04a36..da66ee8 100644
--- a/third_party/WebKit/LayoutTests/svg/custom/marker-child-changes-css-expected.txt
+++ b/third_party/WebKit/LayoutTests/svg/custom/marker-child-changes-css-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -18,6 +20,16 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutSVGRect rect id='rect'",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutSVGPath path",
+      "reason": "style change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/svg/custom/marker-child-changes-expected.txt b/third_party/WebKit/LayoutTests/svg/custom/marker-child-changes-expected.txt
index 0c04a36..da66ee8 100644
--- a/third_party/WebKit/LayoutTests/svg/custom/marker-child-changes-expected.txt
+++ b/third_party/WebKit/LayoutTests/svg/custom/marker-child-changes-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -18,6 +20,16 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutSVGRect rect id='rect'",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutSVGPath path",
+      "reason": "style change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/svg/custom/marker-strokeWidth-changes-expected.txt b/third_party/WebKit/LayoutTests/svg/custom/marker-strokeWidth-changes-expected.txt
index 392a685..c28f50f 100644
--- a/third_party/WebKit/LayoutTests/svg/custom/marker-strokeWidth-changes-expected.txt
+++ b/third_party/WebKit/LayoutTests/svg/custom/marker-strokeWidth-changes-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -23,6 +25,20 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutSVGRoot svg",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGContainer g",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGPath path id='path'",
+      "reason": "style change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/svg/custom/marker-viewBox-changes-expected.txt b/third_party/WebKit/LayoutTests/svg/custom/marker-viewBox-changes-expected.txt
index 47bfcb2..60ac9ce 100644
--- a/third_party/WebKit/LayoutTests/svg/custom/marker-viewBox-changes-expected.txt
+++ b/third_party/WebKit/LayoutTests/svg/custom/marker-viewBox-changes-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -25,13 +27,31 @@
           "object": "LayoutSVGRect rect",
           "rect": [0, 0, 10, 10],
           "reason": "full"
-        },
-        {
-          "object": "LayoutSVGResourceMarker marker id='markerStart'",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutSVGRoot svg",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGResourceMarker marker id='markerStart'",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutSVGRect rect",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutSVGContainer g",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGPath path id='go'",
+      "reason": "full"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/svg/custom/mask-child-changes-expected.txt b/third_party/WebKit/LayoutTests/svg/custom/mask-child-changes-expected.txt
index 1dabdc8..93a60d7 100644
--- a/third_party/WebKit/LayoutTests/svg/custom/mask-child-changes-expected.txt
+++ b/third_party/WebKit/LayoutTests/svg/custom/mask-child-changes-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -18,6 +20,16 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutSVGRect rect",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutSVGRect rect",
+      "reason": "style change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/svg/custom/mask-invalidation-expected.txt b/third_party/WebKit/LayoutTests/svg/custom/mask-invalidation-expected.txt
index fcb6e64..dc6fdff 100644
--- a/third_party/WebKit/LayoutTests/svg/custom/mask-invalidation-expected.txt
+++ b/third_party/WebKit/LayoutTests/svg/custom/mask-invalidation-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -38,6 +40,28 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutSVGRect rect",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGRoot svg",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGRect rect id='maskRect'",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutSVGContainer g id='root'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGRect rect",
+      "reason": "layoutObject insertion"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/svg/custom/object-sizing-no-width-height-change-content-box-size-expected.txt b/third_party/WebKit/LayoutTests/svg/custom/object-sizing-no-width-height-change-content-box-size-expected.txt
index aa5b612..48303f8 100644
--- a/third_party/WebKit/LayoutTests/svg/custom/object-sizing-no-width-height-change-content-box-size-expected.txt
+++ b/third_party/WebKit/LayoutTests/svg/custom/object-sizing-no-width-height-change-content-box-size-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -45,21 +47,23 @@
           "object": "LayoutSVGEllipse circle",
           "rect": [89, 189, 40, 40],
           "reason": "forced by layout"
-        },
-        {
-          "object": "InlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow div id='contentBox'",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutEmbeddedObject object",
+      "reason": "incremental"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/svg/custom/pending-resource-after-removal-expected.txt b/third_party/WebKit/LayoutTests/svg/custom/pending-resource-after-removal-expected.txt
index d7db6fdb..3ef83cf 100644
--- a/third_party/WebKit/LayoutTests/svg/custom/pending-resource-after-removal-expected.txt
+++ b/third_party/WebKit/LayoutTests/svg/custom/pending-resource-after-removal-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -30,17 +32,43 @@
           "object": "LayoutSVGRect rect id='shape'",
           "rect": [0, 0, 200, 200],
           "reason": "SVG resource change"
-        },
-        {
-          "object": "LayoutSVGResourcePattern pattern id='pat'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "LayoutSVGResourcePattern pattern id='pat'",
-          "reason": "layoutObject removal"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutSVGResourcePattern pattern id='pat'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGRect rect",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGRect rect id='shape'",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutSVGRect rect",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGResourcePattern pattern id='pat'",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGResourcePattern pattern id='pat'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGRect rect",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGRect rect id='shape'",
+      "reason": "SVG resource change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/svg/custom/relative-sized-content-expected.txt b/third_party/WebKit/LayoutTests/svg/custom/relative-sized-content-expected.txt
index 856efc2..86ce263 100644
--- a/third_party/WebKit/LayoutTests/svg/custom/relative-sized-content-expected.txt
+++ b/third_party/WebKit/LayoutTests/svg/custom/relative-sized-content-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -20,21 +22,27 @@
           "object": "LayoutSVGRoot svg",
           "rect": [109, 69, 300, 400],
           "reason": "incremental"
-        },
-        {
-          "object": "InlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow div id='contentBox'",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutSVGRoot svg",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutSVGRect rect id='targetRect'",
+      "reason": "full"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/svg/custom/relative-sized-content-with-resources-expected.txt b/third_party/WebKit/LayoutTests/svg/custom/relative-sized-content-with-resources-expected.txt
index 1ad4bd6b..6af37b2 100644
--- a/third_party/WebKit/LayoutTests/svg/custom/relative-sized-content-with-resources-expected.txt
+++ b/third_party/WebKit/LayoutTests/svg/custom/relative-sized-content-with-resources-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -30,21 +32,27 @@
           "object": "LayoutSVGRoot svg",
           "rect": [9, 151, 100, 236],
           "reason": "bounds change"
-        },
-        {
-          "object": "InlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow div id='contentBox'",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutSVGRoot svg",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGEllipse circle",
+      "reason": "SVG resource change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/svg/custom/relative-sized-deep-shadow-tree-content-expected.txt b/third_party/WebKit/LayoutTests/svg/custom/relative-sized-deep-shadow-tree-content-expected.txt
index 721e8a8d..ddca6ba8 100644
--- a/third_party/WebKit/LayoutTests/svg/custom/relative-sized-deep-shadow-tree-content-expected.txt
+++ b/third_party/WebKit/LayoutTests/svg/custom/relative-sized-deep-shadow-tree-content-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -75,21 +77,47 @@
           "object": "LayoutSVGRect rect id='targetRect'",
           "rect": [34, 169, 50, 200],
           "reason": "bounds change"
-        },
-        {
-          "object": "InlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow div id='contentBox'",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutSVGRoot svg",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGRect rect id='targetRect'",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutSVGContainer use id='targetUse'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGRect rect id='targetRect'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGContainer use",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGContainer g id='targetUse'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGRect rect id='targetRect'",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/svg/custom/relative-sized-image-expected.txt b/third_party/WebKit/LayoutTests/svg/custom/relative-sized-image-expected.txt
index 483aad1..cbe985d 100644
--- a/third_party/WebKit/LayoutTests/svg/custom/relative-sized-image-expected.txt
+++ b/third_party/WebKit/LayoutTests/svg/custom/relative-sized-image-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -20,21 +22,27 @@
           "object": "LayoutSVGRoot svg",
           "rect": [109, 69, 300, 400],
           "reason": "incremental"
-        },
-        {
-          "object": "InlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow div id='contentBox'",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutSVGRoot svg",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutSVGImage image",
+      "reason": "full"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/svg/custom/relative-sized-inner-svg-expected.txt b/third_party/WebKit/LayoutTests/svg/custom/relative-sized-inner-svg-expected.txt
index ea244fd..72625e6 100644
--- a/third_party/WebKit/LayoutTests/svg/custom/relative-sized-inner-svg-expected.txt
+++ b/third_party/WebKit/LayoutTests/svg/custom/relative-sized-inner-svg-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -40,21 +42,31 @@
           "object": "LayoutSVGViewportContainer svg",
           "rect": [13, 205, 92, 91],
           "reason": "bounds change"
-        },
-        {
-          "object": "InlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow div id='contentBox'",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutSVGRoot svg",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGViewportContainer svg",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGPath path",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/svg/custom/relative-sized-shadow-tree-content-expected.txt b/third_party/WebKit/LayoutTests/svg/custom/relative-sized-shadow-tree-content-expected.txt
index e45ca83..e27c7d3 100644
--- a/third_party/WebKit/LayoutTests/svg/custom/relative-sized-shadow-tree-content-expected.txt
+++ b/third_party/WebKit/LayoutTests/svg/custom/relative-sized-shadow-tree-content-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -70,21 +72,59 @@
           "object": "LayoutSVGRect rect id='targetRect'",
           "rect": [59, 269, 50, 200],
           "reason": "bounds change"
-        },
-        {
-          "object": "InlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow div id='contentBox'",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutSVGRoot svg",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutSVGRect rect id='targetRect'",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutSVGRect rect id='targetRect1'",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutSVGContainer use id='targetUse'",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutSVGRect rect id='targetRect1'",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutSVGContainer use",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGRect rect id='targetRect'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGContainer use",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutSVGContainer g id='targetUse'",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutSVGRect rect id='targetRect1'",
+      "reason": "full"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/svg/custom/relative-sized-shadow-tree-content-with-symbol-expected.txt b/third_party/WebKit/LayoutTests/svg/custom/relative-sized-shadow-tree-content-with-symbol-expected.txt
index bfcc75b..8b87fabc 100644
--- a/third_party/WebKit/LayoutTests/svg/custom/relative-sized-shadow-tree-content-with-symbol-expected.txt
+++ b/third_party/WebKit/LayoutTests/svg/custom/relative-sized-shadow-tree-content-with-symbol-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -40,21 +42,39 @@
           "object": "LayoutSVGRect rect",
           "rect": [59, 269, 50, 50],
           "reason": "bounds change"
-        },
-        {
-          "object": "InlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow div id='contentBox'",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutSVGRoot svg",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGContainer use",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGViewportContainer svg id='targetSymbol'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGRect rect",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGRect rect",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/svg/custom/relative-sized-use-on-symbol-expected.txt b/third_party/WebKit/LayoutTests/svg/custom/relative-sized-use-on-symbol-expected.txt
index b48c4e3..3d0da32 100644
--- a/third_party/WebKit/LayoutTests/svg/custom/relative-sized-use-on-symbol-expected.txt
+++ b/third_party/WebKit/LayoutTests/svg/custom/relative-sized-use-on-symbol-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -50,21 +52,35 @@
           "object": "LayoutSVGViewportContainer svg id='gamesBorder'",
           "rect": [18, 209, 82, 83],
           "reason": "bounds change"
-        },
-        {
-          "object": "InlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow div id='contentBox'",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutSVGRoot svg",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGContainer use",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGViewportContainer svg id='gamesBorder'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGPath path",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/svg/custom/relative-sized-use-without-attributes-on-symbol-expected.txt b/third_party/WebKit/LayoutTests/svg/custom/relative-sized-use-without-attributes-on-symbol-expected.txt
index efcf631..651c49e 100644
--- a/third_party/WebKit/LayoutTests/svg/custom/relative-sized-use-without-attributes-on-symbol-expected.txt
+++ b/third_party/WebKit/LayoutTests/svg/custom/relative-sized-use-without-attributes-on-symbol-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -50,21 +52,35 @@
           "object": "LayoutSVGViewportContainer svg id='gamesBorder'",
           "rect": [13, 205, 92, 91],
           "reason": "bounds change"
-        },
-        {
-          "object": "InlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow div id='contentBox'",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "forced by layout"
+    },
+    {
+      "object": "LayoutSVGRoot svg",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGContainer use",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGViewportContainer svg id='gamesBorder'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGPath path",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/svg/custom/repaint-moving-svg-and-div-expected.txt b/third_party/WebKit/LayoutTests/svg/custom/repaint-moving-svg-and-div-expected.txt
index 8b30c2f..02b1574c 100644
--- a/third_party/WebKit/LayoutTests/svg/custom/repaint-moving-svg-and-div-expected.txt
+++ b/third_party/WebKit/LayoutTests/svg/custom/repaint-moving-svg-and-div-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -368,6 +370,152 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutSVGRoot (positioned) svg id='svg'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGRect rect",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow (positioned) div id='html' class='outerBox'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow div class='innerBox'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGRoot (positioned) svg id='svg'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGRect rect",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow (positioned) div id='html' class='outerBox'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow div class='innerBox'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGRoot (positioned) svg id='svg'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGRect rect",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow (positioned) div id='html' class='outerBox'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow div class='innerBox'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGRoot (positioned) svg id='svg'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGRect rect",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow (positioned) div id='html' class='outerBox'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow div class='innerBox'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGRoot (positioned) svg id='svg'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGRect rect",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow (positioned) div id='html' class='outerBox'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow div class='innerBox'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGRoot (positioned) svg id='svg'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGRect rect",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow (positioned) div id='html' class='outerBox'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow div class='innerBox'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGRoot (positioned) svg id='svg'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGRect rect",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow (positioned) div id='html' class='outerBox'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow div class='innerBox'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGRoot (positioned) svg id='svg'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGRect rect",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow (positioned) div id='html' class='outerBox'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow div class='innerBox'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGRoot (positioned) svg id='svg'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGRect rect",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow (positioned) div id='html' class='outerBox'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow div class='innerBox'",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/svg/custom/repaint-on-image-bounds-change-expected.txt b/third_party/WebKit/LayoutTests/svg/custom/repaint-on-image-bounds-change-expected.txt
index 517ab166..a018ae5 100644
--- a/third_party/WebKit/LayoutTests/svg/custom/repaint-on-image-bounds-change-expected.txt
+++ b/third_party/WebKit/LayoutTests/svg/custom/repaint-on-image-bounds-change-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -13,6 +15,12 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutSVGImage image id='target'",
+      "reason": "full"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/svg/custom/repaint-stroke-width-changes-expected.txt b/third_party/WebKit/LayoutTests/svg/custom/repaint-stroke-width-changes-expected.txt
index 075b53d..09a17a6 100644
--- a/third_party/WebKit/LayoutTests/svg/custom/repaint-stroke-width-changes-expected.txt
+++ b/third_party/WebKit/LayoutTests/svg/custom/repaint-stroke-width-changes-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -18,6 +20,16 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutSVGRoot svg",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGRect rect",
+      "reason": "style change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/svg/custom/resource-client-removal-expected.txt b/third_party/WebKit/LayoutTests/svg/custom/resource-client-removal-expected.txt
index b0ae1da5..4a1fb26f 100644
--- a/third_party/WebKit/LayoutTests/svg/custom/resource-client-removal-expected.txt
+++ b/third_party/WebKit/LayoutTests/svg/custom/resource-client-removal-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -205,29 +207,191 @@
           "object": "LayoutSVGPath path id='hp'",
           "rect": [0, 0, 100, 100],
           "reason": "SVG resource change"
-        },
-        {
-          "object": "LayoutSVGGradientStop stop id='offset'",
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGGradientStop stop id='offset'",
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGGradientStop stop id='offset'",
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGGradientStop stop id='offset'",
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGGradientStop stop id='offset'",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutSVGPath path id='hp'",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGContainer g",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGContainer g id='inneruse'",
+      "reason": "layoutObject removal"
+    },
+    {
+      "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": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer g",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGPath path id='hp'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGPath path id='hp'",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGContainer g",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGContainer g id='inneruse'",
+      "reason": "layoutObject removal"
+    },
+    {
+      "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": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer g",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGPath path id='hp'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGPath path id='hp'",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGContainer g",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGContainer g id='inneruse'",
+      "reason": "layoutObject removal"
+    },
+    {
+      "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": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer g",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGPath path id='hp'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGPath path id='hp'",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGContainer g",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGContainer g id='inneruse'",
+      "reason": "layoutObject removal"
+    },
+    {
+      "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": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer g",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGPath path id='hp'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGPath path id='hp'",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGContainer g",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGContainer g id='inneruse'",
+      "reason": "layoutObject removal"
+    },
+    {
+      "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": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer g",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGPath path id='hp'",
+      "reason": "layoutObject insertion"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/svg/custom/resource-invalidate-on-target-update-expected.txt b/third_party/WebKit/LayoutTests/svg/custom/resource-invalidate-on-target-update-expected.txt
index beb07bb2..e2b4284 100644
--- a/third_party/WebKit/LayoutTests/svg/custom/resource-invalidate-on-target-update-expected.txt
+++ b/third_party/WebKit/LayoutTests/svg/custom/resource-invalidate-on-target-update-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -33,6 +35,28 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutSVGRoot svg",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutSVGContainer g id='box'",
+      "reason": "full"
+    },
+    {
+      "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/svg/custom/stroke-opacity-update-expected.txt b/third_party/WebKit/LayoutTests/svg/custom/stroke-opacity-update-expected.txt
index 935600f..c1bcff7 100644
--- a/third_party/WebKit/LayoutTests/svg/custom/stroke-opacity-update-expected.txt
+++ b/third_party/WebKit/LayoutTests/svg/custom/stroke-opacity-update-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -13,6 +15,12 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutSVGEllipse circle",
+      "reason": "style change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/svg/custom/svg-absolute-children-expected.txt b/third_party/WebKit/LayoutTests/svg/custom/svg-absolute-children-expected.txt
index d21113d..7061d80 100644
--- a/third_party/WebKit/LayoutTests/svg/custom/svg-absolute-children-expected.txt
+++ b/third_party/WebKit/LayoutTests/svg/custom/svg-absolute-children-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -13,6 +15,12 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutSVGRect rect id='rect'",
+      "reason": "full"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/svg/custom/svg-image-par-resize-expected.txt b/third_party/WebKit/LayoutTests/svg/custom/svg-image-par-resize-expected.txt
index 4a15329..da3bb8b 100644
--- a/third_party/WebKit/LayoutTests/svg/custom/svg-image-par-resize-expected.txt
+++ b/third_party/WebKit/LayoutTests/svg/custom/svg-image-par-resize-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -18,6 +20,16 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutSVGRoot svg",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutSVGImage image",
+      "reason": "full"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/svg/custom/use-disappears-after-style-update-expected.txt b/third_party/WebKit/LayoutTests/svg/custom/use-disappears-after-style-update-expected.txt
index 7fd9d57..675236a 100644
--- a/third_party/WebKit/LayoutTests/svg/custom/use-disappears-after-style-update-expected.txt
+++ b/third_party/WebKit/LayoutTests/svg/custom/use-disappears-after-style-update-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -38,6 +40,32 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutSVGRect rect id='rect'",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGRect rect id='rect'",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGRect rect id='rect'",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutSVGRect rect id='rect'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer use",
+      "reason": "SVG resource change"
+    },
+    {
+      "object": "LayoutSVGRect rect id='rect'",
+      "reason": "layoutObject insertion"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/svg/custom/use-inherit-style-expected.txt b/third_party/WebKit/LayoutTests/svg/custom/use-inherit-style-expected.txt
index 2b004b3..ea29733 100644
--- a/third_party/WebKit/LayoutTests/svg/custom/use-inherit-style-expected.txt
+++ b/third_party/WebKit/LayoutTests/svg/custom/use-inherit-style-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -23,6 +25,20 @@
         }
       ]
     }
+  ],
+  "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/svg/dom/SVGRectElement/rect-modify-rx-expected.txt b/third_party/WebKit/LayoutTests/svg/dom/SVGRectElement/rect-modify-rx-expected.txt
index ba06188f..5d48f41f 100644
--- a/third_party/WebKit/LayoutTests/svg/dom/SVGRectElement/rect-modify-rx-expected.txt
+++ b/third_party/WebKit/LayoutTests/svg/dom/SVGRectElement/rect-modify-rx-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -13,6 +15,12 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutSVGRect rect id='r'",
+      "reason": "full"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/svg/filters/animate-fill-expected.txt b/third_party/WebKit/LayoutTests/svg/filters/animate-fill-expected.txt
index ee2e418..bd951aa 100644
--- a/third_party/WebKit/LayoutTests/svg/filters/animate-fill-expected.txt
+++ b/third_party/WebKit/LayoutTests/svg/filters/animate-fill-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -13,6 +15,12 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutSVGRect rect id='rect'",
+      "reason": "style change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/svg/filters/feImage-change-target-id-expected.txt b/third_party/WebKit/LayoutTests/svg/filters/feImage-change-target-id-expected.txt
index 138eda48..0ad0a696 100644
--- a/third_party/WebKit/LayoutTests/svg/filters/feImage-change-target-id-expected.txt
+++ b/third_party/WebKit/LayoutTests/svg/filters/feImage-change-target-id-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -10,13 +12,19 @@
           "object": "LayoutSVGRect rect",
           "rect": [0, 0, 110, 110],
           "reason": "full"
-        },
-        {
-          "object": "LayoutSVGResourceFilterPrimitive feImage id='feimage'",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutSVGResourceFilterPrimitive feImage id='feimage'",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutSVGRect rect",
+      "reason": "full"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/svg/filters/feImage-multiple-targets-id-change-expected.txt b/third_party/WebKit/LayoutTests/svg/filters/feImage-multiple-targets-id-change-expected.txt
index a26cad9..003056c 100644
--- a/third_party/WebKit/LayoutTests/svg/filters/feImage-multiple-targets-id-change-expected.txt
+++ b/third_party/WebKit/LayoutTests/svg/filters/feImage-multiple-targets-id-change-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -20,17 +22,31 @@
           "object": "LayoutSVGRect rect",
           "rect": [0, 0, 55, 110],
           "reason": "full"
-        },
-        {
-          "object": "LayoutSVGResourceFilterPrimitive feImage id='feimage1'",
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGResourceFilterPrimitive feImage id='feimage2'",
-          "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/svg/filters/feImage-reference-invalidation-expected.txt b/third_party/WebKit/LayoutTests/svg/filters/feImage-reference-invalidation-expected.txt
index 138eda48..0ad0a696 100644
--- a/third_party/WebKit/LayoutTests/svg/filters/feImage-reference-invalidation-expected.txt
+++ b/third_party/WebKit/LayoutTests/svg/filters/feImage-reference-invalidation-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -10,13 +12,19 @@
           "object": "LayoutSVGRect rect",
           "rect": [0, 0, 110, 110],
           "reason": "full"
-        },
-        {
-          "object": "LayoutSVGResourceFilterPrimitive feImage id='feimage'",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutSVGResourceFilterPrimitive feImage id='feimage'",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutSVGRect rect",
+      "reason": "full"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/svg/filters/feImage-remove-target-expected.txt b/third_party/WebKit/LayoutTests/svg/filters/feImage-remove-target-expected.txt
index 49945f3..d3baefb7 100644
--- a/third_party/WebKit/LayoutTests/svg/filters/feImage-remove-target-expected.txt
+++ b/third_party/WebKit/LayoutTests/svg/filters/feImage-remove-target-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -15,13 +17,23 @@
           "object": "LayoutSVGRect rect id='rect'",
           "rect": [0, 0, 100, 100],
           "reason": "layoutObject removal"
-        },
-        {
-          "object": "LayoutSVGResourceFilterPrimitive feImage id='feimage'",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutSVGRect rect id='rect'",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGResourceFilterPrimitive feImage id='feimage'",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutSVGRect rect",
+      "reason": "full"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/svg/filters/feImage-target-add-to-document-expected.txt b/third_party/WebKit/LayoutTests/svg/filters/feImage-target-add-to-document-expected.txt
index 02de95ee..9465969 100644
--- a/third_party/WebKit/LayoutTests/svg/filters/feImage-target-add-to-document-expected.txt
+++ b/third_party/WebKit/LayoutTests/svg/filters/feImage-target-add-to-document-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -10,17 +12,23 @@
           "object": "LayoutSVGRect rect",
           "rect": [0, 0, 110, 110],
           "reason": "style change"
-        },
-        {
-          "object": "LayoutSVGResourceFilter filter id='filter'",
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGResourceFilterPrimitive feImage",
-          "reason": "layoutObject insertion"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutSVGResourceFilter filter id='filter'",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutSVGResourceFilterPrimitive feImage",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGRect rect",
+      "reason": "style change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/svg/filters/feImage-target-attribute-change-expected.txt b/third_party/WebKit/LayoutTests/svg/filters/feImage-target-attribute-change-expected.txt
index d96e22c..ba70af4 100644
--- a/third_party/WebKit/LayoutTests/svg/filters/feImage-target-attribute-change-expected.txt
+++ b/third_party/WebKit/LayoutTests/svg/filters/feImage-target-attribute-change-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -15,13 +17,23 @@
           "object": "LayoutSVGRect rect id='rect'",
           "rect": [0, 0, 100, 100],
           "reason": "full"
-        },
-        {
-          "object": "LayoutSVGResourceFilterPrimitive feImage id='feimage'",
-          "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/svg/filters/feImage-target-attribute-change-with-use-indirection-2-expected.txt b/third_party/WebKit/LayoutTests/svg/filters/feImage-target-attribute-change-with-use-indirection-2-expected.txt
index 086106c..171563b 100644
--- a/third_party/WebKit/LayoutTests/svg/filters/feImage-target-attribute-change-with-use-indirection-2-expected.txt
+++ b/third_party/WebKit/LayoutTests/svg/filters/feImage-target-attribute-change-with-use-indirection-2-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -20,13 +22,27 @@
           "object": "LayoutSVGRect rect id='rect'",
           "rect": [0, 0, 100, 100],
           "reason": "location change"
-        },
-        {
-          "object": "LayoutSVGResourceFilterPrimitive feImage id='feimage'",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutSVGContainer use id='use'",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutSVGRect rect id='rect'",
+      "reason": "location change"
+    },
+    {
+      "object": "LayoutSVGResourceFilterPrimitive feImage id='feimage'",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutSVGRect rect",
+      "reason": "full"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/svg/filters/feImage-target-attribute-change-with-use-indirection-expected.txt b/third_party/WebKit/LayoutTests/svg/filters/feImage-target-attribute-change-with-use-indirection-expected.txt
index 4d4f8ec..090e905 100644
--- a/third_party/WebKit/LayoutTests/svg/filters/feImage-target-attribute-change-with-use-indirection-expected.txt
+++ b/third_party/WebKit/LayoutTests/svg/filters/feImage-target-attribute-change-with-use-indirection-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -33,6 +35,28 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutSVGRect rect id='rect'",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGRect rect id='rect'",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutSVGContainer use id='use'",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutSVGRect rect id='rect'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGRect rect",
+      "reason": "full"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/svg/filters/feImage-target-changes-id-expected.txt b/third_party/WebKit/LayoutTests/svg/filters/feImage-target-changes-id-expected.txt
index 138eda48..0ad0a696 100644
--- a/third_party/WebKit/LayoutTests/svg/filters/feImage-target-changes-id-expected.txt
+++ b/third_party/WebKit/LayoutTests/svg/filters/feImage-target-changes-id-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -10,13 +12,19 @@
           "object": "LayoutSVGRect rect",
           "rect": [0, 0, 110, 110],
           "reason": "full"
-        },
-        {
-          "object": "LayoutSVGResourceFilterPrimitive feImage id='feimage'",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutSVGResourceFilterPrimitive feImage id='feimage'",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutSVGRect rect",
+      "reason": "full"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/svg/filters/feImage-target-id-change-expected.txt b/third_party/WebKit/LayoutTests/svg/filters/feImage-target-id-change-expected.txt
index 138eda48..0ad0a696 100644
--- a/third_party/WebKit/LayoutTests/svg/filters/feImage-target-id-change-expected.txt
+++ b/third_party/WebKit/LayoutTests/svg/filters/feImage-target-id-change-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -10,13 +12,19 @@
           "object": "LayoutSVGRect rect",
           "rect": [0, 0, 110, 110],
           "reason": "full"
-        },
-        {
-          "object": "LayoutSVGResourceFilterPrimitive feImage id='feimage'",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutSVGResourceFilterPrimitive feImage id='feimage'",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutSVGRect rect",
+      "reason": "full"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/svg/filters/feImage-target-inline-style-change-expected.txt b/third_party/WebKit/LayoutTests/svg/filters/feImage-target-inline-style-change-expected.txt
index f65e75e..634f14a9 100644
--- a/third_party/WebKit/LayoutTests/svg/filters/feImage-target-inline-style-change-expected.txt
+++ b/third_party/WebKit/LayoutTests/svg/filters/feImage-target-inline-style-change-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -18,6 +20,16 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutSVGRect rect id='rect'",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutSVGRect rect",
+      "reason": "style change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/svg/filters/feImage-target-property-change-expected.txt b/third_party/WebKit/LayoutTests/svg/filters/feImage-target-property-change-expected.txt
index d96e22c..ba70af4 100644
--- a/third_party/WebKit/LayoutTests/svg/filters/feImage-target-property-change-expected.txt
+++ b/third_party/WebKit/LayoutTests/svg/filters/feImage-target-property-change-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -15,13 +17,23 @@
           "object": "LayoutSVGRect rect id='rect'",
           "rect": [0, 0, 100, 100],
           "reason": "full"
-        },
-        {
-          "object": "LayoutSVGResourceFilterPrimitive feImage id='feimage'",
-          "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/svg/filters/feImage-target-reappend-to-document-expected.txt b/third_party/WebKit/LayoutTests/svg/filters/feImage-target-reappend-to-document-expected.txt
index 1fbc9b5..ec35950 100644
--- a/third_party/WebKit/LayoutTests/svg/filters/feImage-target-reappend-to-document-expected.txt
+++ b/third_party/WebKit/LayoutTests/svg/filters/feImage-target-reappend-to-document-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -15,25 +17,35 @@
           "object": "LayoutSVGRect rect",
           "rect": [0, 0, 110, 110],
           "reason": "style change"
-        },
-        {
-          "object": "LayoutSVGResourceFilter filter id='filter'",
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGResourceFilter filter id='filter'",
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGResourceFilterPrimitive feImage id='feimage-green'",
-          "reason": "layoutObject insertion"
-        },
-        {
-          "object": "LayoutSVGResourceFilterPrimitive feImage id='feimage-green'",
-          "reason": "layoutObject removal"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutSVGResourceFilterPrimitive feImage id='feimage-green'",
+      "reason": "layoutObject removal"
+    },
+    {
+      "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": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGRect rect",
+      "reason": "style change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/svg/filters/feImage-target-remove-from-document-expected.txt b/third_party/WebKit/LayoutTests/svg/filters/feImage-target-remove-from-document-expected.txt
index 055a402b..ec62f8f 100644
--- a/third_party/WebKit/LayoutTests/svg/filters/feImage-target-remove-from-document-expected.txt
+++ b/third_party/WebKit/LayoutTests/svg/filters/feImage-target-remove-from-document-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -10,17 +12,23 @@
           "object": "LayoutSVGRect rect",
           "rect": [0, 0, 110, 110],
           "reason": "full"
-        },
-        {
-          "object": "LayoutSVGResourceFilter filter id='filter'",
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGResourceFilterPrimitive feImage id='feimage-red'",
-          "reason": "layoutObject removal"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutSVGResourceFilterPrimitive feImage id='feimage-red'",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGResourceFilter filter id='filter'",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutSVGRect rect",
+      "reason": "full"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/svg/filters/feImage-target-style-change-expected.txt b/third_party/WebKit/LayoutTests/svg/filters/feImage-target-style-change-expected.txt
index f65e75e..634f14a9 100644
--- a/third_party/WebKit/LayoutTests/svg/filters/feImage-target-style-change-expected.txt
+++ b/third_party/WebKit/LayoutTests/svg/filters/feImage-target-style-change-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -18,6 +20,16 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutSVGRect rect id='rect'",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutSVGRect rect",
+      "reason": "style change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/svg/filters/filter-refresh-expected.txt b/third_party/WebKit/LayoutTests/svg/filters/filter-refresh-expected.txt
index 2691d26..7bb3e43 100644
--- a/third_party/WebKit/LayoutTests/svg/filters/filter-refresh-expected.txt
+++ b/third_party/WebKit/LayoutTests/svg/filters/filter-refresh-expected.txt
@@ -1,8 +1,10 @@
 CONSOLE WARNING: SVG's SMIL animations (<animate>, <set>, etc.) are deprecated and will be removed. Please use CSS animations or Web animations instead.
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -231,57 +233,239 @@
           "object": "LayoutSVGRect rect id='rect'",
           "rect": [0, 10, 30, 30],
           "reason": "style change"
-        },
-        {
-          "object": "LayoutSVGContainer use",
-          "reason": "none"
-        },
-        {
-          "object": "LayoutSVGContainer use",
-          "reason": "none"
-        },
-        {
-          "object": "LayoutSVGContainer use",
-          "reason": "none"
-        },
-        {
-          "object": "LayoutSVGContainer use",
-          "reason": "none"
-        },
-        {
-          "object": "LayoutSVGContainer use",
-          "reason": "none"
-        },
-        {
-          "object": "LayoutSVGContainer use",
-          "reason": "none"
-        },
-        {
-          "object": "LayoutSVGContainer use",
-          "reason": "none"
-        },
-        {
-          "object": "LayoutSVGContainer use",
-          "reason": "none"
-        },
-        {
-          "object": "LayoutSVGContainer use",
-          "reason": "none"
-        },
-        {
-          "object": "LayoutSVGContainer use",
-          "reason": "none"
-        },
-        {
-          "object": "LayoutSVGContainer use",
-          "reason": "none"
-        },
-        {
-          "object": "LayoutSVGContainer use",
-          "reason": "none"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutSVGRect rect id='rect'",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGRect rect id='rect'",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGRect rect id='rect'",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGRect rect id='rect'",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGRect rect id='rect'",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGRect rect id='rect'",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGRect rect id='rect'",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGRect rect id='rect'",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGRect rect id='rect'",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGRect rect id='rect'",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGRect rect id='rect'",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGRect rect id='rect'",
+      "reason": "layoutObject removal"
+    },
+    {
+      "object": "LayoutSVGRect rect id='rect'",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutSVGContainer g",
+      "reason": "SVG resource change"
+    },
+    {
+      "object": "LayoutSVGContainer use",
+      "reason": "none"
+    },
+    {
+      "object": "LayoutSVGRect rect id='rect'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer g",
+      "reason": "SVG resource change"
+    },
+    {
+      "object": "LayoutSVGContainer g",
+      "reason": "SVG resource change"
+    },
+    {
+      "object": "LayoutSVGContainer use",
+      "reason": "none"
+    },
+    {
+      "object": "LayoutSVGRect rect id='rect'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer g",
+      "reason": "SVG resource change"
+    },
+    {
+      "object": "LayoutSVGContainer g",
+      "reason": "SVG resource change"
+    },
+    {
+      "object": "LayoutSVGContainer use",
+      "reason": "none"
+    },
+    {
+      "object": "LayoutSVGRect rect id='rect'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer g",
+      "reason": "SVG resource change"
+    },
+    {
+      "object": "LayoutSVGContainer use",
+      "reason": "none"
+    },
+    {
+      "object": "LayoutSVGRect rect id='rect'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer g",
+      "reason": "SVG resource change"
+    },
+    {
+      "object": "LayoutSVGContainer g",
+      "reason": "SVG resource change"
+    },
+    {
+      "object": "LayoutSVGContainer use",
+      "reason": "none"
+    },
+    {
+      "object": "LayoutSVGRect rect id='rect'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer g",
+      "reason": "SVG resource change"
+    },
+    {
+      "object": "LayoutSVGContainer g",
+      "reason": "SVG resource change"
+    },
+    {
+      "object": "LayoutSVGContainer use",
+      "reason": "none"
+    },
+    {
+      "object": "LayoutSVGRect rect id='rect'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer g",
+      "reason": "SVG resource change"
+    },
+    {
+      "object": "LayoutSVGContainer use",
+      "reason": "none"
+    },
+    {
+      "object": "LayoutSVGRect rect id='rect'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer g",
+      "reason": "SVG resource change"
+    },
+    {
+      "object": "LayoutSVGContainer use",
+      "reason": "none"
+    },
+    {
+      "object": "LayoutSVGRect rect id='rect'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer g",
+      "reason": "SVG resource change"
+    },
+    {
+      "object": "LayoutSVGContainer use",
+      "reason": "none"
+    },
+    {
+      "object": "LayoutSVGRect rect id='rect'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer g",
+      "reason": "SVG resource change"
+    },
+    {
+      "object": "LayoutSVGContainer use",
+      "reason": "none"
+    },
+    {
+      "object": "LayoutSVGRect rect id='rect'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer g",
+      "reason": "SVG resource change"
+    },
+    {
+      "object": "LayoutSVGContainer use",
+      "reason": "none"
+    },
+    {
+      "object": "LayoutSVGRect rect id='rect'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer g",
+      "reason": "SVG resource change"
+    },
+    {
+      "object": "LayoutSVGContainer use",
+      "reason": "none"
+    },
+    {
+      "object": "LayoutSVGRect rect id='rect'",
+      "reason": "layoutObject insertion"
+    },
+    {
+      "object": "LayoutSVGContainer g",
+      "reason": "SVG resource change"
+    },
+    {
+      "object": "LayoutSVGRect rect id='separate1'",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutSVGRect rect id='filtered'",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutSVGRect rect id='separate2'",
+      "reason": "style change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/svg/filters/filter-width-update-expected.txt b/third_party/WebKit/LayoutTests/svg/filters/filter-width-update-expected.txt
index 8be7b5d..21e77abd 100644
--- a/third_party/WebKit/LayoutTests/svg/filters/filter-width-update-expected.txt
+++ b/third_party/WebKit/LayoutTests/svg/filters/filter-width-update-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -10,13 +12,19 @@
           "object": "LayoutSVGRect rect",
           "rect": [0, 0, 140, 140],
           "reason": "full"
-        },
-        {
-          "object": "LayoutSVGResourceFilter filter id='blur'",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutSVGResourceFilter filter id='blur'",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutSVGRect rect",
+      "reason": "full"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/svg/filters/invalidate-on-child-layout-expected.txt b/third_party/WebKit/LayoutTests/svg/filters/invalidate-on-child-layout-expected.txt
index d9c0915c..e5d4a922 100644
--- a/third_party/WebKit/LayoutTests/svg/filters/invalidate-on-child-layout-expected.txt
+++ b/third_party/WebKit/LayoutTests/svg/filters/invalidate-on-child-layout-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -38,6 +40,20 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutSVGRoot svg",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGContainer g",
+      "reason": "SVG resource change"
+    },
+    {
+      "object": "LayoutSVGEllipse circle id='circle'",
+      "reason": "full"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/svg/repaint/add-background-property-on-root-expected.txt b/third_party/WebKit/LayoutTests/svg/repaint/add-background-property-on-root-expected.txt
index 1de46f9..6c3d8f1 100644
--- a/third_party/WebKit/LayoutTests/svg/repaint/add-background-property-on-root-expected.txt
+++ b/third_party/WebKit/LayoutTests/svg/repaint/add-background-property-on-root-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -15,13 +17,23 @@
           "object": "LayoutSVGRoot svg",
           "rect": [8, 8, 100, 100],
           "reason": "style change"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "background obscuration change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "background obscuration change"
+    },
+    {
+      "object": "LayoutSVGRoot svg",
+      "reason": "style change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/svg/repaint/add-border-property-on-root-expected.txt b/third_party/WebKit/LayoutTests/svg/repaint/add-border-property-on-root-expected.txt
index 47e4ebfe..9c6c841 100644
--- a/third_party/WebKit/LayoutTests/svg/repaint/add-border-property-on-root-expected.txt
+++ b/third_party/WebKit/LayoutTests/svg/repaint/add-border-property-on-root-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -13,6 +15,12 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutSVGRoot (positioned) svg",
+      "reason": "style change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/svg/repaint/add-outline-property-on-root-expected.txt b/third_party/WebKit/LayoutTests/svg/repaint/add-outline-property-on-root-expected.txt
index 25d8345..24a9076 100644
--- a/third_party/WebKit/LayoutTests/svg/repaint/add-outline-property-on-root-expected.txt
+++ b/third_party/WebKit/LayoutTests/svg/repaint/add-outline-property-on-root-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -15,17 +17,19 @@
           "object": "LayoutSVGRoot svg",
           "rect": [-2, -2, 120, 120],
           "reason": "style change"
-        },
-        {
-          "object": "InlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow BODY",
+      "reason": "invalidate paint rectangle"
+    },
+    {
+      "object": "LayoutSVGRoot svg",
+      "reason": "style change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/svg/repaint/change-background-color-expected.txt b/third_party/WebKit/LayoutTests/svg/repaint/change-background-color-expected.txt
index 9089540..55485be9 100644
--- a/third_party/WebKit/LayoutTests/svg/repaint/change-background-color-expected.txt
+++ b/third_party/WebKit/LayoutTests/svg/repaint/change-background-color-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -13,6 +15,12 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutSVGRoot svg",
+      "reason": "style change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/svg/repaint/color-fill-currentColor-and-css-expected.txt b/third_party/WebKit/LayoutTests/svg/repaint/color-fill-currentColor-and-css-expected.txt
index b60ade149..e59476c 100644
--- a/third_party/WebKit/LayoutTests/svg/repaint/color-fill-currentColor-and-css-expected.txt
+++ b/third_party/WebKit/LayoutTests/svg/repaint/color-fill-currentColor-and-css-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -18,6 +20,16 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutSVGEllipse circle",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutSVGEllipse circle",
+      "reason": "style change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/svg/repaint/container-repaint-expected.txt b/third_party/WebKit/LayoutTests/svg/repaint/container-repaint-expected.txt
index 7ee47ec..f2467848 100644
--- a/third_party/WebKit/LayoutTests/svg/repaint/container-repaint-expected.txt
+++ b/third_party/WebKit/LayoutTests/svg/repaint/container-repaint-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -28,6 +30,16 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutSVGViewportContainer svg id='mover'",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutSVGRect rect",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/svg/repaint/fecomponenttransfer-in1-change-expected.txt b/third_party/WebKit/LayoutTests/svg/repaint/fecomponenttransfer-in1-change-expected.txt
index 891d9f1..7c64324 100644
--- a/third_party/WebKit/LayoutTests/svg/repaint/fecomponenttransfer-in1-change-expected.txt
+++ b/third_party/WebKit/LayoutTests/svg/repaint/fecomponenttransfer-in1-change-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -10,13 +12,19 @@
           "object": "LayoutSVGRect rect",
           "rect": [0, 0, 100, 100],
           "reason": "full"
-        },
-        {
-          "object": "LayoutSVGResourceFilterPrimitive feComponentTransfer id='fe'",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutSVGResourceFilterPrimitive feComponentTransfer id='fe'",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutSVGRect rect",
+      "reason": "full"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/svg/repaint/filter-child-repaint-expected.txt b/third_party/WebKit/LayoutTests/svg/repaint/filter-child-repaint-expected.txt
index 4012d26..7e11efb 100644
--- a/third_party/WebKit/LayoutTests/svg/repaint/filter-child-repaint-expected.txt
+++ b/third_party/WebKit/LayoutTests/svg/repaint/filter-child-repaint-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -15,13 +17,23 @@
           "object": "LayoutSVGRect rect id='poke'",
           "rect": [32, 32, 64, 64],
           "reason": "style change"
-        },
-        {
-          "object": "LayoutSVGRect rect",
-          "reason": "none"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutSVGContainer g",
+      "reason": "SVG resource change"
+    },
+    {
+      "object": "LayoutSVGRect rect",
+      "reason": "none"
+    },
+    {
+      "object": "LayoutSVGRect rect id='poke'",
+      "reason": "style change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/svg/repaint/foreign-object-repaint-expected.txt b/third_party/WebKit/LayoutTests/svg/repaint/foreign-object-repaint-expected.txt
index 9017afd..5872190 100644
--- a/third_party/WebKit/LayoutTests/svg/repaint/foreign-object-repaint-expected.txt
+++ b/third_party/WebKit/LayoutTests/svg/repaint/foreign-object-repaint-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -18,6 +20,16 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow div id='div1'",
+      "reason": "style change"
+    },
+    {
+      "object": "LayoutBlockFlow div id='div2'",
+      "reason": "style change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/svg/repaint/image-animation-with-zoom-expected.txt b/third_party/WebKit/LayoutTests/svg/repaint/image-animation-with-zoom-expected.txt
index 8c3f9899..49f952d 100644
--- a/third_party/WebKit/LayoutTests/svg/repaint/image-animation-with-zoom-expected.txt
+++ b/third_party/WebKit/LayoutTests/svg/repaint/image-animation-with-zoom-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -13,6 +15,12 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutImage IMG id='targetImage'",
+      "reason": "full"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/svg/repaint/image-href-change-expected.txt b/third_party/WebKit/LayoutTests/svg/repaint/image-href-change-expected.txt
index d9be53e..4c9d503f 100644
--- a/third_party/WebKit/LayoutTests/svg/repaint/image-href-change-expected.txt
+++ b/third_party/WebKit/LayoutTests/svg/repaint/image-href-change-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -13,6 +15,12 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutSVGImage image id='image'",
+      "reason": "full"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/svg/repaint/image-with-clip-path-expected.txt b/third_party/WebKit/LayoutTests/svg/repaint/image-with-clip-path-expected.txt
index 6e530e0..1c4951c 100644
--- a/third_party/WebKit/LayoutTests/svg/repaint/image-with-clip-path-expected.txt
+++ b/third_party/WebKit/LayoutTests/svg/repaint/image-with-clip-path-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -73,6 +75,40 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutSVGRoot svg",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutSVGContainer g id='g'",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutSVGRect rect id='r'",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutSVGImage image",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutSVGRoot svg",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutSVGContainer g id='g'",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutSVGRect rect id='r'",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutSVGImage image",
+      "reason": "full"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/svg/repaint/inner-svg-change-viewBox-contract-expected.txt b/third_party/WebKit/LayoutTests/svg/repaint/inner-svg-change-viewBox-contract-expected.txt
index 95210be8..a313fe7 100644
--- a/third_party/WebKit/LayoutTests/svg/repaint/inner-svg-change-viewBox-contract-expected.txt
+++ b/third_party/WebKit/LayoutTests/svg/repaint/inner-svg-change-viewBox-contract-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -18,6 +20,16 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutSVGViewportContainer svg id='inner'",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutSVGRect rect",
+      "reason": "full"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/svg/repaint/inner-svg-change-viewBox-expected.txt b/third_party/WebKit/LayoutTests/svg/repaint/inner-svg-change-viewBox-expected.txt
index 85468dc..01e91dc 100644
--- a/third_party/WebKit/LayoutTests/svg/repaint/inner-svg-change-viewBox-expected.txt
+++ b/third_party/WebKit/LayoutTests/svg/repaint/inner-svg-change-viewBox-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -18,6 +20,16 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutSVGViewportContainer svg id='s'",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutSVGRect rect",
+      "reason": "full"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/svg/repaint/inner-svg-change-viewPort-relative-expected.txt b/third_party/WebKit/LayoutTests/svg/repaint/inner-svg-change-viewPort-relative-expected.txt
index cd7b1dd..536333d 100644
--- a/third_party/WebKit/LayoutTests/svg/repaint/inner-svg-change-viewPort-relative-expected.txt
+++ b/third_party/WebKit/LayoutTests/svg/repaint/inner-svg-change-viewPort-relative-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -70,25 +72,51 @@
           "object": "LayoutSVGRect rect",
           "rect": [80, 60, 20, 20],
           "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'right-aligned text'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'right-aligned text'",
-          "reason": "bounds change"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutSVGRoot svg",
+      "reason": "incremental"
+    },
+    {
+      "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": "bounds change"
+    },
+    {
+      "object": "InlineTextBox 'right-aligned text'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGContainer use",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutSVGPath polygon id='triangle'",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/svg/repaint/mask-clip-target-transform-expected.txt b/third_party/WebKit/LayoutTests/svg/repaint/mask-clip-target-transform-expected.txt
index 4e9a471..c716b94 100644
--- a/third_party/WebKit/LayoutTests/svg/repaint/mask-clip-target-transform-expected.txt
+++ b/third_party/WebKit/LayoutTests/svg/repaint/mask-clip-target-transform-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -38,6 +40,24 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutSVGContainer g",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutSVGRect rect id='masker'",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutSVGContainer g",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGRect rect id='clipper'",
+      "reason": "full"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/svg/repaint/modify-inserted-listitem-expected.txt b/third_party/WebKit/LayoutTests/svg/repaint/modify-inserted-listitem-expected.txt
index d2ccf2b5..af01135 100644
--- a/third_party/WebKit/LayoutTests/svg/repaint/modify-inserted-listitem-expected.txt
+++ b/third_party/WebKit/LayoutTests/svg/repaint/modify-inserted-listitem-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -23,6 +25,16 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutSVGRoot svg",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGRect rect id='move'",
+      "reason": "full"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/svg/repaint/modify-transferred-listitem-different-attr-expected.txt b/third_party/WebKit/LayoutTests/svg/repaint/modify-transferred-listitem-different-attr-expected.txt
index 7b67902..da40d6ae 100644
--- a/third_party/WebKit/LayoutTests/svg/repaint/modify-transferred-listitem-different-attr-expected.txt
+++ b/third_party/WebKit/LayoutTests/svg/repaint/modify-transferred-listitem-different-attr-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -30,53 +32,51 @@
           "object": "LayoutSVGInlineText #text",
           "rect": [103, 8, 5, 24],
           "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox ' B C'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox ' B C'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox ' Y Z'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'A'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'A'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'X Y Z'",
-          "reason": "incremental"
-        },
-        {
-          "object": "InlineTextBox 'X'",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutSVGRoot svg",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutSVGText text id='target'",
+      "reason": "full"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "incremental"
+    },
+    {
+      "object": "InlineTextBox 'A'",
+      "reason": "incremental"
+    },
+    {
+      "object": "InlineTextBox ' B C'",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutSVGText text id='source'",
+      "reason": "full"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "incremental"
+    },
+    {
+      "object": "InlineTextBox 'X Y Z'",
+      "reason": "incremental"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/svg/repaint/modify-transferred-listitem-expected.txt b/third_party/WebKit/LayoutTests/svg/repaint/modify-transferred-listitem-expected.txt
index 1681152..b80aac4a4 100644
--- a/third_party/WebKit/LayoutTests/svg/repaint/modify-transferred-listitem-expected.txt
+++ b/third_party/WebKit/LayoutTests/svg/repaint/modify-transferred-listitem-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -10,13 +12,19 @@
           "object": "LayoutSVGPath polygon id='target'",
           "rect": [18, 18, 30, 20],
           "reason": "full"
-        },
-        {
-          "object": "LayoutSVGPath polygon id='source'",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutSVGPath polygon id='target'",
+      "reason": "full"
+    },
+    {
+      "object": "LayoutSVGPath polygon id='source'",
+      "reason": "full"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/svg/repaint/outline-offset-shape-expected.txt b/third_party/WebKit/LayoutTests/svg/repaint/outline-offset-shape-expected.txt
index e9f6cb66..edb11098 100644
--- a/third_party/WebKit/LayoutTests/svg/repaint/outline-offset-shape-expected.txt
+++ b/third_party/WebKit/LayoutTests/svg/repaint/outline-offset-shape-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -28,6 +30,16 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutSVGRoot svg",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGRect rect",
+      "reason": "full"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/svg/repaint/paintorder-filtered-expected.txt b/third_party/WebKit/LayoutTests/svg/repaint/paintorder-filtered-expected.txt
index f911512..a8be332 100644
--- a/third_party/WebKit/LayoutTests/svg/repaint/paintorder-filtered-expected.txt
+++ b/third_party/WebKit/LayoutTests/svg/repaint/paintorder-filtered-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -65,13 +67,63 @@
           "object": "LayoutSVGEllipse circle id='t4'",
           "rect": [46, 28, 7, 7],
           "reason": "style change"
-        },
-        {
-          "object": "LayoutSVGViewportContainer svg id='poly2'",
-          "reason": "none"
         }
       ]
     }
+  ],
+  "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": "none"
+    },
+    {
+      "object": "LayoutSVGPath polygon",
+      "reason": "style change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/svg/repaint/path-pathlength-change-expected.txt b/third_party/WebKit/LayoutTests/svg/repaint/path-pathlength-change-expected.txt
index be853ee..c653680d 100644
--- a/third_party/WebKit/LayoutTests/svg/repaint/path-pathlength-change-expected.txt
+++ b/third_party/WebKit/LayoutTests/svg/repaint/path-pathlength-change-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -13,6 +15,12 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutSVGPath path",
+      "reason": "full"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/svg/repaint/remove-background-property-on-root-expected.txt b/third_party/WebKit/LayoutTests/svg/repaint/remove-background-property-on-root-expected.txt
index 1de46f9..6c3d8f1 100644
--- a/third_party/WebKit/LayoutTests/svg/repaint/remove-background-property-on-root-expected.txt
+++ b/third_party/WebKit/LayoutTests/svg/repaint/remove-background-property-on-root-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -15,13 +17,23 @@
           "object": "LayoutSVGRoot svg",
           "rect": [8, 8, 100, 100],
           "reason": "style change"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "background obscuration change"
+    },
+    {
+      "object": "RootInlineBox",
+      "reason": "background obscuration change"
+    },
+    {
+      "object": "LayoutSVGRoot svg",
+      "reason": "style change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/svg/repaint/remove-border-property-on-root-expected.txt b/third_party/WebKit/LayoutTests/svg/repaint/remove-border-property-on-root-expected.txt
index 47e4ebfe..9c6c841 100644
--- a/third_party/WebKit/LayoutTests/svg/repaint/remove-border-property-on-root-expected.txt
+++ b/third_party/WebKit/LayoutTests/svg/repaint/remove-border-property-on-root-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -13,6 +15,12 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutSVGRoot (positioned) svg",
+      "reason": "style change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/svg/repaint/remove-outline-property-on-root-expected.txt b/third_party/WebKit/LayoutTests/svg/repaint/remove-outline-property-on-root-expected.txt
index f7030eb..b7d19c2 100644
--- a/third_party/WebKit/LayoutTests/svg/repaint/remove-outline-property-on-root-expected.txt
+++ b/third_party/WebKit/LayoutTests/svg/repaint/remove-outline-property-on-root-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -15,17 +17,19 @@
           "object": "LayoutSVGRoot svg",
           "rect": [-2, -2, 120, 120],
           "reason": "style change"
-        },
-        {
-          "object": "InlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow BODY",
+      "reason": "invalidate paint rectangle"
+    },
+    {
+      "object": "LayoutSVGRoot svg",
+      "reason": "style change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/svg/repaint/repaint-in-scrolled-view-expected.txt b/third_party/WebKit/LayoutTests/svg/repaint/repaint-in-scrolled-view-expected.txt
index 0065afa..73a0bb8 100644
--- a/third_party/WebKit/LayoutTests/svg/repaint/repaint-in-scrolled-view-expected.txt
+++ b/third_party/WebKit/LayoutTests/svg/repaint/repaint-in-scrolled-view-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [2000, 2000],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [2000, 2000],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -13,6 +15,12 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutSVGRect rect id='rect'",
+      "reason": "style change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/svg/repaint/repaint-paintorder-expected.txt b/third_party/WebKit/LayoutTests/svg/repaint/repaint-paintorder-expected.txt
index dd284939..5961b5a 100644
--- a/third_party/WebKit/LayoutTests/svg/repaint/repaint-paintorder-expected.txt
+++ b/third_party/WebKit/LayoutTests/svg/repaint/repaint-paintorder-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -58,6 +60,48 @@
         }
       ]
     }
+  ],
+  "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/svg/repaint/rounded-rect-height-change-expected.txt b/third_party/WebKit/LayoutTests/svg/repaint/rounded-rect-height-change-expected.txt
index 6d0f004..22ffc9d 100644
--- a/third_party/WebKit/LayoutTests/svg/repaint/rounded-rect-height-change-expected.txt
+++ b/third_party/WebKit/LayoutTests/svg/repaint/rounded-rect-height-change-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -18,6 +20,16 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutSVGRoot svg",
+      "reason": "incremental"
+    },
+    {
+      "object": "LayoutSVGRect rect",
+      "reason": "full"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/svg/repaint/shape-transform-change-expected.txt b/third_party/WebKit/LayoutTests/svg/repaint/shape-transform-change-expected.txt
index 01d0010..c89c5f7b 100644
--- a/third_party/WebKit/LayoutTests/svg/repaint/shape-transform-change-expected.txt
+++ b/third_party/WebKit/LayoutTests/svg/repaint/shape-transform-change-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -13,6 +15,12 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutSVGRect rect",
+      "reason": "full"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/svg/repaint/shape-with-nested-outline-expected.txt b/third_party/WebKit/LayoutTests/svg/repaint/shape-with-nested-outline-expected.txt
index d268993e..860176d 100644
--- a/third_party/WebKit/LayoutTests/svg/repaint/shape-with-nested-outline-expected.txt
+++ b/third_party/WebKit/LayoutTests/svg/repaint/shape-with-nested-outline-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -18,6 +20,16 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutSVGContainer g",
+      "reason": "outline"
+    },
+    {
+      "object": "LayoutSVGRect rect id='r'",
+      "reason": "style change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/svg/repaint/svgsvgelement-repaint-children-expected.txt b/third_party/WebKit/LayoutTests/svg/repaint/svgsvgelement-repaint-children-expected.txt
index 805ffe0..a61e5fa 100644
--- a/third_party/WebKit/LayoutTests/svg/repaint/svgsvgelement-repaint-children-expected.txt
+++ b/third_party/WebKit/LayoutTests/svg/repaint/svgsvgelement-repaint-children-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -13,6 +15,12 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutSVGPath path id='path'",
+      "reason": "full"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/svg/repaint/text-pattern-update-2-expected.txt b/third_party/WebKit/LayoutTests/svg/repaint/text-pattern-update-2-expected.txt
index 2b1a242..77b3cb6 100644
--- a/third_party/WebKit/LayoutTests/svg/repaint/text-pattern-update-2-expected.txt
+++ b/third_party/WebKit/LayoutTests/svg/repaint/text-pattern-update-2-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -10,49 +12,55 @@
           "object": "LayoutSVGText text",
           "rect": [8, 8, 300, 100],
           "reason": "SVG resource change"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "none"
-        },
-        {
-          "object": "InlineTextBox 'X'",
-          "reason": "none"
-        },
-        {
-          "object": "InlineTextBox 'Y'",
-          "reason": "none"
-        },
-        {
-          "object": "InlineTextBox 'Z'",
-          "reason": "none"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "reason": "none"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "reason": "none"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "reason": "none"
-        },
-        {
-          "object": "LayoutSVGResourcePattern pattern id='pat'",
-          "reason": "full"
-        },
-        {
-          "object": "LayoutSVGTSpan tspan",
-          "reason": "none"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "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": "none"
+    },
+    {
+      "object": "InlineTextBox 'X'",
+      "reason": "none"
+    },
+    {
+      "object": "LayoutSVGTSpan tspan",
+      "reason": "none"
+    },
+    {
+      "object": "InlineFlowBox",
+      "reason": "none"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "none"
+    },
+    {
+      "object": "InlineTextBox 'Y'",
+      "reason": "none"
+    },
+    {
+      "object": "LayoutSVGInlineText #text",
+      "reason": "none"
+    },
+    {
+      "object": "InlineTextBox 'Z'",
+      "reason": "none"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/svg/repaint/text-pattern-update-expected.txt b/third_party/WebKit/LayoutTests/svg/repaint/text-pattern-update-expected.txt
index 9e890ed..3784c48 100644
--- a/third_party/WebKit/LayoutTests/svg/repaint/text-pattern-update-expected.txt
+++ b/third_party/WebKit/LayoutTests/svg/repaint/text-pattern-update-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -10,25 +12,31 @@
           "object": "LayoutSVGText text",
           "rect": [8, 8, 100, 100],
           "reason": "SVG resource change"
-        },
-        {
-          "object": "InlineTextBox 'X'",
-          "reason": "none"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "reason": "none"
-        },
-        {
-          "object": "LayoutSVGResourcePattern pattern id='pat'",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "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": "none"
+    },
+    {
+      "object": "InlineTextBox 'X'",
+      "reason": "none"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/svg/repaint/transform-changed-state-expected.txt b/third_party/WebKit/LayoutTests/svg/repaint/transform-changed-state-expected.txt
index 0391ec1..6faf656 100644
--- a/third_party/WebKit/LayoutTests/svg/repaint/transform-changed-state-expected.txt
+++ b/third_party/WebKit/LayoutTests/svg/repaint/transform-changed-state-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -38,6 +40,20 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutSVGRoot svg",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGContainer g",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGRect rect",
+      "reason": "full"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/svg/repaint/transform-foreign-object-expected.txt b/third_party/WebKit/LayoutTests/svg/repaint/transform-foreign-object-expected.txt
index ad50b16d..cc19898 100644
--- a/third_party/WebKit/LayoutTests/svg/repaint/transform-foreign-object-expected.txt
+++ b/third_party/WebKit/LayoutTests/svg/repaint/transform-foreign-object-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -38,6 +40,20 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutSVGRoot svg",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutSVGForeignObject foreignObject",
+      "reason": "subtree"
+    },
+    {
+      "object": "LayoutBlockFlow DIV",
+      "reason": "subtree"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/svg/repaint/transform-text-element-expected.txt b/third_party/WebKit/LayoutTests/svg/repaint/transform-text-element-expected.txt
index 7ce525cd..1e06e5c 100644
--- a/third_party/WebKit/LayoutTests/svg/repaint/transform-text-element-expected.txt
+++ b/third_party/WebKit/LayoutTests/svg/repaint/transform-text-element-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -35,25 +37,31 @@
           "object": "LayoutSVGText text",
           "rect": [8, 8, 400, 100],
           "reason": "subtree"
-        },
-        {
-          "object": "InlineTextBox 'Test'",
-          "reason": "full"
-        },
-        {
-          "object": "InlineTextBox 'Test'",
-          "reason": "subtree"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
-        },
-        {
-          "object": "RootInlineBox",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutSVGRoot svg",
+      "reason": "bounds change"
+    },
+    {
+      "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/svg/repaint/tspan-pattern-update-expected.txt b/third_party/WebKit/LayoutTests/svg/repaint/tspan-pattern-update-expected.txt
index 902cdd39..c28fabc8 100644
--- a/third_party/WebKit/LayoutTests/svg/repaint/tspan-pattern-update-expected.txt
+++ b/third_party/WebKit/LayoutTests/svg/repaint/tspan-pattern-update-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -10,25 +12,31 @@
           "object": "LayoutSVGTSpan tspan",
           "rect": [8, 8, 300, 100],
           "reason": "SVG resource change"
-        },
-        {
-          "object": "InlineFlowBox",
-          "reason": "SVG resource change"
-        },
-        {
-          "object": "InlineTextBox 'Y'",
-          "reason": "none"
-        },
-        {
-          "object": "LayoutSVGInlineText #text",
-          "reason": "none"
-        },
-        {
-          "object": "LayoutSVGResourcePattern pattern id='pat'",
-          "reason": "full"
         }
       ]
     }
+  ],
+  "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": "none"
+    },
+    {
+      "object": "InlineTextBox 'Y'",
+      "reason": "none"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/svg/zoom/page/absolute-sized-document-no-scrollbars-expected.txt b/third_party/WebKit/LayoutTests/svg/zoom/page/absolute-sized-document-no-scrollbars-expected.txt
index 2b8c5c1..884668b 100644
--- a/third_party/WebKit/LayoutTests/svg/zoom/page/absolute-sized-document-no-scrollbars-expected.txt
+++ b/third_party/WebKit/LayoutTests/svg/zoom/page/absolute-sized-document-no-scrollbars-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -15,13 +17,23 @@
           "object": "LayoutSVGRoot svg",
           "rect": [0, 0, 576, 432],
           "reason": "style change"
-        },
-        {
-          "object": "LayoutSVGHiddenContainer defs",
-          "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/svg/zoom/page/relative-sized-document-scrollbars-expected.txt b/third_party/WebKit/LayoutTests/svg/zoom/page/relative-sized-document-scrollbars-expected.txt
index 818a9a0..32e13cc8 100644
--- a/third_party/WebKit/LayoutTests/svg/zoom/page/relative-sized-document-scrollbars-expected.txt
+++ b/third_party/WebKit/LayoutTests/svg/zoom/page/relative-sized-document-scrollbars-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -15,13 +17,23 @@
           "object": "LayoutSVGRoot svg",
           "rect": [7, 5, 786, 590],
           "reason": "style change"
-        },
-        {
-          "object": "LayoutSVGHiddenContainer defs",
-          "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/asyncawait/README.txt b/third_party/WebKit/LayoutTests/virtual/asyncawait/README.txt
new file mode 100644
index 0000000..50bb8342
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/virtual/asyncawait/README.txt
@@ -0,0 +1 @@
+# This suite runs the inspector/debugger-async/async-await tests with --js-flags=--harmony-async-await
diff --git a/third_party/WebKit/LayoutTests/virtual/asyncawait/inspector/sources/debugger-async/async-await/README.txt b/third_party/WebKit/LayoutTests/virtual/asyncawait/inspector/sources/debugger-async/async-await/README.txt
new file mode 100644
index 0000000..414d55bd
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/virtual/asyncawait/inspector/sources/debugger-async/async-await/README.txt
@@ -0,0 +1 @@
+Tests for V8 that depend on the new experimental async/await feature
\ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/virtual/display_list_2d_canvas/fast/canvas/canvas-composite-repaint-by-all-imagesource-expected.txt b/third_party/WebKit/LayoutTests/virtual/display_list_2d_canvas/fast/canvas/canvas-composite-repaint-by-all-imagesource-expected.txt
index dd70329..fa45300 100644
--- a/third_party/WebKit/LayoutTests/virtual/display_list_2d_canvas/fast/canvas/canvas-composite-repaint-by-all-imagesource-expected.txt
+++ b/third_party/WebKit/LayoutTests/virtual/display_list_2d_canvas/fast/canvas/canvas-composite-repaint-by-all-imagesource-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [785, 928],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [785, 928],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -230,18 +232,22 @@
       ],
       "children": [
         {
+          "name": "LayoutVideo VIDEO id='video'",
           "position": [15, 854],
           "bounds": [150, 60]
         },
         {
+          "name": "Squashing Containment Layer",
           "shouldFlattenTransform": false,
           "children": [
             {
+              "name": "LayoutFlexibleBox (relative positioned) DIV",
               "position": [15, 854],
               "bounds": [150, 60],
               "drawsContent": true
             },
             {
+              "name": "Squashing Layer (first squashed layer: LayoutFlexibleBox (relative positioned) DIV)",
               "position": [15, 854],
               "bounds": [150, 18],
               "drawsContent": true
@@ -250,6 +256,184 @@
         }
       ]
     }
+  ],
+  "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/virtual/gpu-rasterization/fast/images/do-not-paint-below-image-baseline-expected.txt b/third_party/WebKit/LayoutTests/virtual/gpu-rasterization/fast/images/do-not-paint-below-image-baseline-expected.txt
index b322389..6132ff95 100644
--- a/third_party/WebKit/LayoutTests/virtual/gpu-rasterization/fast/images/do-not-paint-below-image-baseline-expected.txt
+++ b/third_party/WebKit/LayoutTests/virtual/gpu-rasterization/fast/images/do-not-paint-below-image-baseline-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -13,6 +15,12 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutImage IMG",
+      "reason": "style change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/virtual/gpu-rasterization/fast/images/fixed-img-src-change-after-scroll-expected.txt b/third_party/WebKit/LayoutTests/virtual/gpu-rasterization/fast/images/fixed-img-src-change-after-scroll-expected.txt
index 7114806..9c6158a 100644
--- a/third_party/WebKit/LayoutTests/virtual/gpu-rasterization/fast/images/fixed-img-src-change-after-scroll-expected.txt
+++ b/third_party/WebKit/LayoutTests/virtual/gpu-rasterization/fast/images/fixed-img-src-change-after-scroll-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [785, 2016],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [785, 2016],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -18,6 +20,12 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutImage (positioned) IMG id='img'",
+      "reason": "subtree"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/virtual/gpu-rasterization/fast/images/repaint-subrect-grid-expected.txt b/third_party/WebKit/LayoutTests/virtual/gpu-rasterization/fast/images/repaint-subrect-grid-expected.txt
index b668340..a73c870c 100644
--- a/third_party/WebKit/LayoutTests/virtual/gpu-rasterization/fast/images/repaint-subrect-grid-expected.txt
+++ b/third_party/WebKit/LayoutTests/virtual/gpu-rasterization/fast/images/repaint-subrect-grid-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
@@ -118,6 +120,52 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='mask'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='mask'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='mask'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='mask'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='mask'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='mask'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='mask'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='mask'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='mask'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='mask'",
+      "reason": "bounds change"
+    },
+    {
+      "object": "LayoutBlockFlow (positioned) DIV id='mask'",
+      "reason": "bounds change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/virtual/gpu/fast/canvas/canvas-composite-repaint-by-all-imagesource-expected.txt b/third_party/WebKit/LayoutTests/virtual/gpu/fast/canvas/canvas-composite-repaint-by-all-imagesource-expected.txt
index 0fdc4321a..cda11ac 100644
--- a/third_party/WebKit/LayoutTests/virtual/gpu/fast/canvas/canvas-composite-repaint-by-all-imagesource-expected.txt
+++ b/third_party/WebKit/LayoutTests/virtual/gpu/fast/canvas/canvas-composite-repaint-by-all-imagesource-expected.txt
@@ -1,250 +1,301 @@
 {
+  "name": "Content Root Layer",
   "bounds": [785, 928],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [785, 928],
       "contentsOpaque": true,
       "drawsContent": true,
       "backgroundColor": "#FFFFFF",
       "children": [
         {
+          "name": "LayoutHTMLCanvas CANVAS id='source-oversolid color'",
           "position": [144, 62],
           "bounds": [132, 42],
           "drawsContent": true
         },
         {
+          "name": "LayoutHTMLCanvas CANVAS id='source-overimage'",
           "position": [286, 62],
           "bounds": [132, 42],
           "drawsContent": true
         },
         {
+          "name": "LayoutHTMLCanvas CANVAS id='source-overcanvas'",
           "position": [428, 62],
           "bounds": [132, 42],
           "drawsContent": true
         },
         {
+          "name": "LayoutHTMLCanvas CANVAS id='source-overvideo'",
           "position": [570, 62],
           "bounds": [132, 42],
           "drawsContent": true
         },
         {
+          "name": "LayoutHTMLCanvas CANVAS id='source-insolid color'",
           "position": [144, 112],
           "bounds": [132, 42],
           "drawsContent": true
         },
         {
+          "name": "LayoutHTMLCanvas CANVAS id='source-inimage'",
           "position": [286, 112],
           "bounds": [132, 42],
           "drawsContent": true
         },
         {
+          "name": "LayoutHTMLCanvas CANVAS id='source-incanvas'",
           "position": [428, 112],
           "bounds": [132, 42],
           "drawsContent": true
         },
         {
+          "name": "LayoutHTMLCanvas CANVAS id='source-invideo'",
           "position": [570, 112],
           "bounds": [132, 42],
           "drawsContent": true
         },
         {
+          "name": "LayoutHTMLCanvas CANVAS id='source-outsolid color'",
           "position": [144, 162],
           "bounds": [132, 42],
           "drawsContent": true
         },
         {
+          "name": "LayoutHTMLCanvas CANVAS id='source-outimage'",
           "position": [286, 162],
           "bounds": [132, 42],
           "drawsContent": true
         },
         {
+          "name": "LayoutHTMLCanvas CANVAS id='source-outcanvas'",
           "position": [428, 162],
           "bounds": [132, 42],
           "drawsContent": true
         },
         {
+          "name": "LayoutHTMLCanvas CANVAS id='source-outvideo'",
           "position": [570, 162],
           "bounds": [132, 42],
           "drawsContent": true
         },
         {
+          "name": "LayoutHTMLCanvas CANVAS id='source-atopsolid color'",
           "position": [144, 212],
           "bounds": [132, 42],
           "drawsContent": true
         },
         {
+          "name": "LayoutHTMLCanvas CANVAS id='source-atopimage'",
           "position": [286, 212],
           "bounds": [132, 42],
           "drawsContent": true
         },
         {
+          "name": "LayoutHTMLCanvas CANVAS id='source-atopcanvas'",
           "position": [428, 212],
           "bounds": [132, 42],
           "drawsContent": true
         },
         {
+          "name": "LayoutHTMLCanvas CANVAS id='source-atopvideo'",
           "position": [570, 212],
           "bounds": [132, 42],
           "drawsContent": true
         },
         {
+          "name": "LayoutHTMLCanvas CANVAS id='destination-oversolid color'",
           "position": [144, 262],
           "bounds": [132, 42],
           "drawsContent": true
         },
         {
+          "name": "LayoutHTMLCanvas CANVAS id='destination-overimage'",
           "position": [286, 262],
           "bounds": [132, 42],
           "drawsContent": true
         },
         {
+          "name": "LayoutHTMLCanvas CANVAS id='destination-overcanvas'",
           "position": [428, 262],
           "bounds": [132, 42],
           "drawsContent": true
         },
         {
+          "name": "LayoutHTMLCanvas CANVAS id='destination-overvideo'",
           "position": [570, 262],
           "bounds": [132, 42],
           "drawsContent": true
         },
         {
+          "name": "LayoutHTMLCanvas CANVAS id='destination-insolid color'",
           "position": [144, 312],
           "bounds": [132, 42],
           "drawsContent": true
         },
         {
+          "name": "LayoutHTMLCanvas CANVAS id='destination-inimage'",
           "position": [286, 312],
           "bounds": [132, 42],
           "drawsContent": true
         },
         {
+          "name": "LayoutHTMLCanvas CANVAS id='destination-incanvas'",
           "position": [428, 312],
           "bounds": [132, 42],
           "drawsContent": true
         },
         {
+          "name": "LayoutHTMLCanvas CANVAS id='destination-invideo'",
           "position": [570, 312],
           "bounds": [132, 42],
           "drawsContent": true
         },
         {
+          "name": "LayoutHTMLCanvas CANVAS id='destination-outsolid color'",
           "position": [144, 362],
           "bounds": [132, 42],
           "drawsContent": true
         },
         {
+          "name": "LayoutHTMLCanvas CANVAS id='destination-outimage'",
           "position": [286, 362],
           "bounds": [132, 42],
           "drawsContent": true
         },
         {
+          "name": "LayoutHTMLCanvas CANVAS id='destination-outcanvas'",
           "position": [428, 362],
           "bounds": [132, 42],
           "drawsContent": true
         },
         {
+          "name": "LayoutHTMLCanvas CANVAS id='destination-outvideo'",
           "position": [570, 362],
           "bounds": [132, 42],
           "drawsContent": true
         },
         {
+          "name": "LayoutHTMLCanvas CANVAS id='destination-atopsolid color'",
           "position": [144, 412],
           "bounds": [132, 42],
           "drawsContent": true
         },
         {
+          "name": "LayoutHTMLCanvas CANVAS id='destination-atopimage'",
           "position": [286, 412],
           "bounds": [132, 42],
           "drawsContent": true
         },
         {
+          "name": "LayoutHTMLCanvas CANVAS id='destination-atopcanvas'",
           "position": [428, 412],
           "bounds": [132, 42],
           "drawsContent": true
         },
         {
+          "name": "LayoutHTMLCanvas CANVAS id='destination-atopvideo'",
           "position": [570, 412],
           "bounds": [132, 42],
           "drawsContent": true
         },
         {
+          "name": "LayoutHTMLCanvas CANVAS id='lightersolid color'",
           "position": [144, 462],
           "bounds": [132, 42],
           "drawsContent": true
         },
         {
+          "name": "LayoutHTMLCanvas CANVAS id='lighterimage'",
           "position": [286, 462],
           "bounds": [132, 42],
           "drawsContent": true
         },
         {
+          "name": "LayoutHTMLCanvas CANVAS id='lightercanvas'",
           "position": [428, 462],
           "bounds": [132, 42],
           "drawsContent": true
         },
         {
+          "name": "LayoutHTMLCanvas CANVAS id='lightervideo'",
           "position": [570, 462],
           "bounds": [132, 42],
           "drawsContent": true
         },
         {
+          "name": "LayoutHTMLCanvas CANVAS id='copysolid color'",
           "position": [144, 512],
           "bounds": [132, 42],
           "drawsContent": true
         },
         {
+          "name": "LayoutHTMLCanvas CANVAS id='copyimage'",
           "position": [286, 512],
           "bounds": [132, 42],
           "drawsContent": true
         },
         {
+          "name": "LayoutHTMLCanvas CANVAS id='copycanvas'",
           "position": [428, 512],
           "bounds": [132, 42],
           "drawsContent": true
         },
         {
+          "name": "LayoutHTMLCanvas CANVAS id='copyvideo'",
           "position": [570, 512],
           "bounds": [132, 42],
           "drawsContent": true
         },
         {
+          "name": "LayoutHTMLCanvas CANVAS id='xorsolid color'",
           "position": [144, 562],
           "bounds": [132, 42],
           "drawsContent": true
         },
         {
+          "name": "LayoutHTMLCanvas CANVAS id='xorimage'",
           "position": [286, 562],
           "bounds": [132, 42],
           "drawsContent": true
         },
         {
+          "name": "LayoutHTMLCanvas CANVAS id='xorcanvas'",
           "position": [428, 562],
           "bounds": [132, 42],
           "drawsContent": true
         },
         {
+          "name": "LayoutHTMLCanvas CANVAS id='xorvideo'",
           "position": [570, 562],
           "bounds": [132, 42],
           "drawsContent": true
         },
         {
+          "name": "LayoutHTMLCanvas CANVAS id='source-canvas'",
           "position": [15, 750],
           "bounds": [152, 62],
           "drawsContent": true
         },
         {
+          "name": "LayoutVideo VIDEO id='video'",
           "position": [15, 854],
           "bounds": [150, 60]
         },
         {
+          "name": "Squashing Containment Layer",
           "shouldFlattenTransform": false,
           "children": [
             {
+              "name": "LayoutFlexibleBox (relative positioned) DIV",
               "position": [15, 854],
               "bounds": [150, 60],
               "drawsContent": true
             },
             {
+              "name": "Squashing Layer (first squashed layer: LayoutFlexibleBox (relative positioned) DIV)",
               "position": [15, 854],
               "bounds": [150, 18],
               "drawsContent": true
diff --git a/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/accelerated-overflow-scroll-should-not-affect-perspective-expected.txt b/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/accelerated-overflow-scroll-should-not-affect-perspective-expected.txt
index ad67ede..1685faa 100644
--- a/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/accelerated-overflow-scroll-should-not-affect-perspective-expected.txt
+++ b/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/accelerated-overflow-scroll-should-not-affect-perspective-expected.txt
@@ -1,18 +1,22 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow (positioned) DIV class='container'",
           "position": [8, 8],
           "bounds": [200, 200],
           "shouldFlattenTransform": false,
           "drawsContent": true,
           "children": [
             {
+              "name": "Child Transform Layer",
               "bounds": [200, 200],
               "shouldFlattenTransform": false,
               "transform": [
@@ -23,14 +27,17 @@
               ],
               "children": [
                 {
+                  "name": "Scrolling Layer",
                   "bounds": [185, 185],
                   "shouldFlattenTransform": false,
                   "children": [
                     {
+                      "name": "Scrolling Contents Layer",
                       "bounds": [185, 265],
                       "shouldFlattenTransform": false,
                       "children": [
                         {
+                          "name": "LayoutBlockFlow (positioned) DIV class='child first'",
                           "position": [0, 65],
                           "bounds": [60, 200],
                           "contentsOpaque": true,
@@ -44,6 +51,7 @@
                           ]
                         },
                         {
+                          "name": "LayoutBlockFlow (positioned) DIV class='child second'",
                           "position": [65, 65],
                           "bounds": [60, 200],
                           "contentsOpaque": true,
@@ -63,17 +71,21 @@
               ]
             },
             {
+              "name": "Overflow Controls Host Layer",
               "bounds": [200, 200],
               "children": [
                 {
+                  "name": "Horizontal Scrollbar Layer",
                   "position": [0, 185],
                   "bounds": [185, 15]
                 },
                 {
+                  "name": "Vertical Scrollbar Layer",
                   "position": [185, 0],
                   "bounds": [15, 185]
                 },
                 {
+                  "name": "Scroll Corner Layer",
                   "position": [185, 185],
                   "bounds": [15, 15],
                   "drawsContent": true
diff --git a/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/clip-descendents-expected.txt b/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/clip-descendents-expected.txt
index 68ecea3e..1ee5c1f 100644
--- a/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/clip-descendents-expected.txt
+++ b/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/clip-descendents-expected.txt
@@ -1,17 +1,21 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "Ancestor Clipping Layer",
           "position": [48, 38],
           "bounds": [60, 70],
           "shouldFlattenTransform": false,
           "children": [
             {
+              "name": "LayoutBlockFlow DIV class='box'",
               "position": [2, 12],
               "bounds": [100, 150],
               "contentsOpaque": true,
@@ -27,11 +31,13 @@
           ]
         },
         {
+          "name": "Ancestor Clipping Layer",
           "position": [240, 38],
           "bounds": [60, 70],
           "shouldFlattenTransform": false,
           "children": [
             {
+              "name": "LayoutBlockFlow DIV class='box'",
               "position": [2, 12],
               "bounds": [100, 150],
               "contentsOpaque": true,
@@ -47,14 +53,17 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow (positioned) DIV class='container'",
           "position": [48, 230],
           "bounds": [60, 70],
           "drawsContent": true,
           "children": [
             {
+              "name": "Child Containment Layer",
               "bounds": [60, 70],
               "children": [
                 {
+                  "name": "LayoutBlockFlow DIV class='box'",
                   "position": [2, 12],
                   "bounds": [100, 150],
                   "contentsOpaque": true,
@@ -72,14 +81,17 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow (positioned) DIV class='container'",
           "position": [240, 230],
           "bounds": [60, 70],
           "drawsContent": true,
           "children": [
             {
+              "name": "Child Containment Layer",
               "bounds": [60, 70],
               "children": [
                 {
+                  "name": "LayoutBlockFlow DIV class='box'",
                   "position": [2, 12],
                   "bounds": [100, 150],
                   "contentsOpaque": true,
diff --git a/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/composited-scrolling-paint-phases-expected.txt b/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/composited-scrolling-paint-phases-expected.txt
index 4013b92d..074f4b6 100644
--- a/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/composited-scrolling-paint-phases-expected.txt
+++ b/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/composited-scrolling-paint-phases-expected.txt
@@ -1,4 +1,5 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "paintingPhases": [
     "GraphicsLayerPaintBackground",
@@ -7,6 +8,7 @@
   ],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "paintingPhases": [
@@ -16,6 +18,7 @@
       ],
       "children": [
         {
+          "name": "LayoutBlockFlow HTML",
           "bounds": [800, 242],
           "drawsContent": true,
           "paintingPhases": [
@@ -24,6 +27,7 @@
           ],
           "children": [
             {
+              "name": "LayoutBlockFlow (relative positioned) DIV class='composited'",
               "position": [29, 31],
               "bounds": [80, 10],
               "contentsOpaque": true,
@@ -36,6 +40,7 @@
               ]
             },
             {
+              "name": "LayoutBlockFlow HTML (foreground) Layer",
               "bounds": [800, 242],
               "drawsContent": true,
               "paintingPhases": [
@@ -43,6 +48,7 @@
               ]
             },
             {
+              "name": "LayoutBlockFlow DIV class='container'",
               "position": [28, 20],
               "bounds": [202, 202],
               "shouldFlattenTransform": false,
@@ -54,6 +60,7 @@
               ],
               "children": [
                 {
+                  "name": "Scrolling Layer",
                   "position": [1, 1],
                   "bounds": [185, 185],
                   "shouldFlattenTransform": false,
@@ -64,6 +71,7 @@
                   ],
                   "children": [
                     {
+                      "name": "Scrolling Contents Layer",
                       "bounds": [185, 715],
                       "drawsContent": true,
                       "paintingPhases": [
@@ -75,6 +83,7 @@
                   ]
                 },
                 {
+                  "name": "Overflow Controls Host Layer",
                   "bounds": [202, 202],
                   "paintingPhases": [
                     "GraphicsLayerPaintBackground",
@@ -83,6 +92,7 @@
                   ],
                   "children": [
                     {
+                      "name": "Horizontal Scrollbar Layer",
                       "position": [1, 186],
                       "bounds": [185, 15],
                       "paintingPhases": [
@@ -92,6 +102,7 @@
                       ]
                     },
                     {
+                      "name": "Vertical Scrollbar Layer",
                       "position": [186, 1],
                       "bounds": [15, 185],
                       "paintingPhases": [
@@ -101,6 +112,7 @@
                       ]
                     },
                     {
+                      "name": "Scroll Corner Layer",
                       "position": [186, 186],
                       "bounds": [15, 15],
                       "drawsContent": true,
diff --git a/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/content-gains-scrollbars-expected.txt b/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/content-gains-scrollbars-expected.txt
index 10f2551..ac01f9bb 100644
--- a/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/content-gains-scrollbars-expected.txt
+++ b/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/content-gains-scrollbars-expected.txt
@@ -1,25 +1,31 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow (positioned) DIV class='container'",
           "position": [8, 13],
           "bounds": [100, 100],
           "shouldFlattenTransform": false,
           "drawsContent": true,
           "children": [
             {
+              "name": "Scrolling Layer",
               "bounds": [85, 100],
               "shouldFlattenTransform": false,
               "children": [
                 {
+                  "name": "Scrolling Contents Layer",
                   "bounds": [85, 200],
                   "children": [
                     {
+                      "name": "LayoutBlockFlow (positioned) DIV id='vertical' class='content tall'",
                       "bounds": [10, 200]
                     }
                   ]
@@ -27,9 +33,11 @@
               ]
             },
             {
+              "name": "Overflow Controls Host Layer",
               "bounds": [100, 100],
               "children": [
                 {
+                  "name": "Vertical Scrollbar Layer",
                   "position": [85, 0],
                   "bounds": [15, 100]
                 }
@@ -38,19 +46,23 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow (positioned) DIV class='container'",
           "position": [8, 13],
           "bounds": [100, 100],
           "shouldFlattenTransform": false,
           "drawsContent": true,
           "children": [
             {
+              "name": "Scrolling Layer",
               "bounds": [100, 85],
               "shouldFlattenTransform": false,
               "children": [
                 {
+                  "name": "Scrolling Contents Layer",
                   "bounds": [200, 85],
                   "children": [
                     {
+                      "name": "LayoutBlockFlow (positioned) DIV id='horizontal' class='content wide'",
                       "bounds": [200, 10]
                     }
                   ]
@@ -58,9 +70,11 @@
               ]
             },
             {
+              "name": "Overflow Controls Host Layer",
               "bounds": [100, 100],
               "children": [
                 {
+                  "name": "Horizontal Scrollbar Layer",
                   "position": [0, 85],
                   "bounds": [100, 15]
                 }
@@ -69,19 +83,23 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow (positioned) DIV class='container'",
           "position": [8, 13],
           "bounds": [100, 100],
           "shouldFlattenTransform": false,
           "drawsContent": true,
           "children": [
             {
+              "name": "Scrolling Layer",
               "bounds": [85, 85],
               "shouldFlattenTransform": false,
               "children": [
                 {
+                  "name": "Scrolling Contents Layer",
                   "bounds": [200, 200],
                   "children": [
                     {
+                      "name": "LayoutBlockFlow (positioned) DIV id='both' class='content wide tall'",
                       "bounds": [200, 200]
                     }
                   ]
@@ -89,17 +107,21 @@
               ]
             },
             {
+              "name": "Overflow Controls Host Layer",
               "bounds": [100, 100],
               "children": [
                 {
+                  "name": "Horizontal Scrollbar Layer",
                   "position": [0, 85],
                   "bounds": [85, 15]
                 },
                 {
+                  "name": "Vertical Scrollbar Layer",
                   "position": [85, 0],
                   "bounds": [15, 85]
                 },
                 {
+                  "name": "Scroll Corner Layer",
                   "position": [85, 85],
                   "bounds": [15, 15],
                   "drawsContent": true
@@ -109,22 +131,27 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow (positioned) DIV id='corner' class='container resizeWidget'",
           "position": [8, 13],
           "bounds": [100, 100],
           "drawsContent": true,
           "children": [
             {
+              "name": "Child Containment Layer",
               "bounds": [100, 100],
               "children": [
                 {
+                  "name": "LayoutBlockFlow (positioned) DIV class='content'",
                   "bounds": [10, 10]
                 }
               ]
             },
             {
+              "name": "Overflow Controls Host Layer",
               "bounds": [100, 100],
               "children": [
                 {
+                  "name": "Scroll Corner Layer",
                   "position": [85, 85],
                   "bounds": [15, 15],
                   "drawsContent": true
diff --git a/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/content-loses-scrollbars-expected.txt b/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/content-loses-scrollbars-expected.txt
new file mode 100644
index 0000000..5a1ec2e
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/content-loses-scrollbars-expected.txt
@@ -0,0 +1,83 @@
+{
+  "name": "Content Root Layer",
+  "bounds": [800, 600],
+  "children": [
+    {
+      "name": "LayoutView #document",
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "name": "LayoutBlockFlow (positioned) DIV class='container'",
+          "position": [8, 13],
+          "bounds": [100, 100],
+          "children": [
+            {
+              "name": "Child Containment Layer",
+              "bounds": [100, 100],
+              "children": [
+                {
+                  "name": "LayoutBlockFlow (positioned) DIV id='vertical' class='content'",
+                  "bounds": [10, 10]
+                }
+              ]
+            }
+          ]
+        },
+        {
+          "name": "LayoutBlockFlow (positioned) DIV class='container'",
+          "position": [8, 13],
+          "bounds": [100, 100],
+          "children": [
+            {
+              "name": "Child Containment Layer",
+              "bounds": [100, 100],
+              "children": [
+                {
+                  "name": "LayoutBlockFlow (positioned) DIV id='horizontal' class='content'",
+                  "bounds": [10, 10]
+                }
+              ]
+            }
+          ]
+        },
+        {
+          "name": "LayoutBlockFlow (positioned) DIV class='container'",
+          "position": [8, 13],
+          "bounds": [100, 100],
+          "children": [
+            {
+              "name": "Child Containment Layer",
+              "bounds": [100, 100],
+              "children": [
+                {
+                  "name": "LayoutBlockFlow (positioned) DIV id='both' class='content'",
+                  "bounds": [10, 10]
+                }
+              ]
+            }
+          ]
+        },
+        {
+          "name": "LayoutBlockFlow (positioned) DIV id='corner' class='container'",
+          "position": [8, 13],
+          "bounds": [100, 100],
+          "children": [
+            {
+              "name": "Child Containment Layer",
+              "bounds": [100, 100],
+              "children": [
+                {
+                  "name": "LayoutBlockFlow (positioned) DIV class='content'",
+                  "bounds": [10, 10]
+                }
+              ]
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/fixed-scroll-in-empty-root-layer-expected.txt b/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/fixed-scroll-in-empty-root-layer-expected.txt
index f49119b..62035da3 100644
--- a/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/fixed-scroll-in-empty-root-layer-expected.txt
+++ b/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/fixed-scroll-in-empty-root-layer-expected.txt
@@ -1,15 +1,19 @@
 {
+  "name": "Content Root Layer",
   "bounds": [785, 2016],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [785, 2016],
       "contentsOpaque": true,
       "children": [
         {
+          "name": "LayoutBlockFlow HTML",
           "bounds": [785, 2016],
           "drawsContent": true,
           "children": [
             {
+              "name": "LayoutBlockFlow (positioned) DIV",
               "position": [0, 250],
               "bounds": [100, 100],
               "contentsOpaque": true,
@@ -18,10 +22,12 @@
               "backgroundColor": "#FF0000"
             },
             {
+              "name": "LayoutBlockFlow HTML (foreground) Layer",
               "bounds": [785, 2016],
               "drawsContent": true
             },
             {
+              "name": "LayoutBlockFlow (positioned) DIV",
               "position": [0, 250],
               "bounds": [100, 100],
               "contentsOpaque": true,
diff --git a/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/overflow-auto-with-touch-expected.txt b/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/overflow-auto-with-touch-expected.txt
index e62037c..4288656 100644
--- a/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/overflow-auto-with-touch-expected.txt
+++ b/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/overflow-auto-with-touch-expected.txt
@@ -1,39 +1,48 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow DIV class='scroller'",
           "position": [8, 8],
           "bounds": [300, 300],
           "shouldFlattenTransform": false,
           "drawsContent": true,
           "children": [
             {
+              "name": "Scrolling Layer",
               "bounds": [285, 285],
               "shouldFlattenTransform": false,
               "children": [
                 {
+                  "name": "Scrolling Contents Layer",
                   "bounds": [1000, 1000],
                   "drawsContent": true
                 }
               ]
             },
             {
+              "name": "Overflow Controls Host Layer",
               "bounds": [300, 300],
               "children": [
                 {
+                  "name": "Horizontal Scrollbar Layer",
                   "position": [0, 285],
                   "bounds": [285, 15]
                 },
                 {
+                  "name": "Vertical Scrollbar Layer",
                   "position": [285, 0],
                   "bounds": [15, 285]
                 },
                 {
+                  "name": "Scroll Corner Layer",
                   "position": [285, 285],
                   "bounds": [15, 15],
                   "drawsContent": true
diff --git a/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/overflow-auto-with-touch-no-overflow-expected.txt b/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/overflow-auto-with-touch-no-overflow-expected.txt
index e9f7954d..10aa3faf 100644
--- a/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/overflow-auto-with-touch-no-overflow-expected.txt
+++ b/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/overflow-auto-with-touch-no-overflow-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true
diff --git a/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/overflow-auto-with-touch-toggle-expected.txt b/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/overflow-auto-with-touch-toggle-expected.txt
index e62037c..4288656 100644
--- a/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/overflow-auto-with-touch-toggle-expected.txt
+++ b/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/overflow-auto-with-touch-toggle-expected.txt
@@ -1,39 +1,48 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow DIV class='scroller'",
           "position": [8, 8],
           "bounds": [300, 300],
           "shouldFlattenTransform": false,
           "drawsContent": true,
           "children": [
             {
+              "name": "Scrolling Layer",
               "bounds": [285, 285],
               "shouldFlattenTransform": false,
               "children": [
                 {
+                  "name": "Scrolling Contents Layer",
                   "bounds": [1000, 1000],
                   "drawsContent": true
                 }
               ]
             },
             {
+              "name": "Overflow Controls Host Layer",
               "bounds": [300, 300],
               "children": [
                 {
+                  "name": "Horizontal Scrollbar Layer",
                   "position": [0, 285],
                   "bounds": [285, 15]
                 },
                 {
+                  "name": "Vertical Scrollbar Layer",
                   "position": [285, 0],
                   "bounds": [15, 285]
                 },
                 {
+                  "name": "Scroll Corner Layer",
                   "position": [285, 285],
                   "bounds": [15, 15],
                   "drawsContent": true
diff --git a/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/overflow-hidden-with-touch-expected.txt b/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/overflow-hidden-with-touch-expected.txt
index e9f7954d..10aa3faf 100644
--- a/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/overflow-hidden-with-touch-expected.txt
+++ b/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/overflow-hidden-with-touch-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true
diff --git a/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/overflow-overlay-with-touch-expected.txt b/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/overflow-overlay-with-touch-expected.txt
index e62037c..4288656 100644
--- a/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/overflow-overlay-with-touch-expected.txt
+++ b/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/overflow-overlay-with-touch-expected.txt
@@ -1,39 +1,48 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow DIV class='scroller'",
           "position": [8, 8],
           "bounds": [300, 300],
           "shouldFlattenTransform": false,
           "drawsContent": true,
           "children": [
             {
+              "name": "Scrolling Layer",
               "bounds": [285, 285],
               "shouldFlattenTransform": false,
               "children": [
                 {
+                  "name": "Scrolling Contents Layer",
                   "bounds": [1000, 1000],
                   "drawsContent": true
                 }
               ]
             },
             {
+              "name": "Overflow Controls Host Layer",
               "bounds": [300, 300],
               "children": [
                 {
+                  "name": "Horizontal Scrollbar Layer",
                   "position": [0, 285],
                   "bounds": [285, 15]
                 },
                 {
+                  "name": "Vertical Scrollbar Layer",
                   "position": [285, 0],
                   "bounds": [15, 285]
                 },
                 {
+                  "name": "Scroll Corner Layer",
                   "position": [285, 285],
                   "bounds": [15, 15],
                   "drawsContent": true
diff --git a/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/overflow-overlay-with-touch-no-overflow-expected.txt b/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/overflow-overlay-with-touch-no-overflow-expected.txt
index e9f7954d..10aa3faf 100644
--- a/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/overflow-overlay-with-touch-no-overflow-expected.txt
+++ b/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/overflow-overlay-with-touch-no-overflow-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true
diff --git a/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/overflow-scroll-with-touch-no-overflow-expected.txt b/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/overflow-scroll-with-touch-no-overflow-expected.txt
index e9f7954d..10aa3faf 100644
--- a/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/overflow-scroll-with-touch-no-overflow-expected.txt
+++ b/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/overflow-scroll-with-touch-no-overflow-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true
diff --git a/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/overflow-scrollbar-layers-expected.txt b/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/overflow-scrollbar-layers-expected.txt
index 10f2551..17971a30 100644
--- a/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/overflow-scrollbar-layers-expected.txt
+++ b/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/overflow-scrollbar-layers-expected.txt
@@ -1,25 +1,31 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow (positioned) DIV class='container'",
           "position": [8, 13],
           "bounds": [100, 100],
           "shouldFlattenTransform": false,
           "drawsContent": true,
           "children": [
             {
+              "name": "Scrolling Layer",
               "bounds": [85, 100],
               "shouldFlattenTransform": false,
               "children": [
                 {
+                  "name": "Scrolling Contents Layer",
                   "bounds": [85, 200],
                   "children": [
                     {
+                      "name": "LayoutBlockFlow (positioned) DIV class='content tall'",
                       "bounds": [10, 200]
                     }
                   ]
@@ -27,9 +33,11 @@
               ]
             },
             {
+              "name": "Overflow Controls Host Layer",
               "bounds": [100, 100],
               "children": [
                 {
+                  "name": "Vertical Scrollbar Layer",
                   "position": [85, 0],
                   "bounds": [15, 100]
                 }
@@ -38,19 +46,23 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow (positioned) DIV class='container'",
           "position": [8, 13],
           "bounds": [100, 100],
           "shouldFlattenTransform": false,
           "drawsContent": true,
           "children": [
             {
+              "name": "Scrolling Layer",
               "bounds": [100, 85],
               "shouldFlattenTransform": false,
               "children": [
                 {
+                  "name": "Scrolling Contents Layer",
                   "bounds": [200, 85],
                   "children": [
                     {
+                      "name": "LayoutBlockFlow (positioned) DIV class='content wide'",
                       "bounds": [200, 10]
                     }
                   ]
@@ -58,9 +70,11 @@
               ]
             },
             {
+              "name": "Overflow Controls Host Layer",
               "bounds": [100, 100],
               "children": [
                 {
+                  "name": "Horizontal Scrollbar Layer",
                   "position": [0, 85],
                   "bounds": [100, 15]
                 }
@@ -69,19 +83,23 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow (positioned) DIV class='container'",
           "position": [8, 13],
           "bounds": [100, 100],
           "shouldFlattenTransform": false,
           "drawsContent": true,
           "children": [
             {
+              "name": "Scrolling Layer",
               "bounds": [85, 85],
               "shouldFlattenTransform": false,
               "children": [
                 {
+                  "name": "Scrolling Contents Layer",
                   "bounds": [200, 200],
                   "children": [
                     {
+                      "name": "LayoutBlockFlow (positioned) DIV class='content wide tall'",
                       "bounds": [200, 200]
                     }
                   ]
@@ -89,17 +107,21 @@
               ]
             },
             {
+              "name": "Overflow Controls Host Layer",
               "bounds": [100, 100],
               "children": [
                 {
+                  "name": "Horizontal Scrollbar Layer",
                   "position": [0, 85],
                   "bounds": [85, 15]
                 },
                 {
+                  "name": "Vertical Scrollbar Layer",
                   "position": [85, 0],
                   "bounds": [15, 85]
                 },
                 {
+                  "name": "Scroll Corner Layer",
                   "position": [85, 85],
                   "bounds": [15, 15],
                   "drawsContent": true
@@ -109,22 +131,27 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow (positioned) DIV class='container resizeWidget'",
           "position": [8, 13],
           "bounds": [100, 100],
           "drawsContent": true,
           "children": [
             {
+              "name": "Child Containment Layer",
               "bounds": [100, 100],
               "children": [
                 {
+                  "name": "LayoutBlockFlow (positioned) DIV class='content'",
                   "bounds": [10, 10]
                 }
               ]
             },
             {
+              "name": "Overflow Controls Host Layer",
               "bounds": [100, 100],
               "children": [
                 {
+                  "name": "Scroll Corner Layer",
                   "position": [85, 85],
                   "bounds": [15, 15],
                   "drawsContent": true
diff --git a/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/overflow-visible-with-touch-expected.txt b/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/overflow-visible-with-touch-expected.txt
index 45363138..30e6d64 100644
--- a/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/overflow-visible-with-touch-expected.txt
+++ b/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/overflow-visible-with-touch-expected.txt
@@ -1,7 +1,9 @@
 {
+  "name": "Content Root Layer",
   "bounds": [1008, 1008],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [1008, 1008],
       "contentsOpaque": true,
       "drawsContent": true
diff --git a/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/reparented-scrollbars-non-sc-anc-expected.txt b/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/reparented-scrollbars-non-sc-anc-expected.txt
index 5244c6e..954f46d 100644
--- a/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/reparented-scrollbars-non-sc-anc-expected.txt
+++ b/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/reparented-scrollbars-non-sc-anc-expected.txt
@@ -1,37 +1,46 @@
 {
+  "name": "Content Root Layer",
   "bounds": [1208, 821],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [1208, 821],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "Ancestor Clipping Layer",
           "position": [8, 8],
           "bounds": [1200, 800],
           "shouldFlattenTransform": false,
           "children": [
             {
+              "name": "LayoutBlockFlow (relative positioned) DIV id='positioned'",
               "bounds": [1200, 800],
               "drawsContent": true,
               "children": [
                 {
+                  "name": "Child Containment Layer",
                   "bounds": [1200, 800],
                   "children": [
                     {
+                      "name": "Ancestor Clipping Layer",
                       "bounds": [1200, 1000],
                       "shouldFlattenTransform": false,
                       "children": [
                         {
+                          "name": "LayoutBlockFlow DIV id='scroller'",
                           "bounds": [1200, 1000],
                           "shouldFlattenTransform": false,
                           "drawsContent": true,
                           "children": [
                             {
+                              "name": "Scrolling Layer",
                               "bounds": [1200, 1000],
                               "shouldFlattenTransform": false,
                               "children": [
                                 {
+                                  "name": "Scrolling Contents Layer",
                                   "bounds": [1200, 10000],
                                   "drawsContent": true
                                 }
@@ -48,17 +57,21 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow (relative positioned) DIV id='foreground'",
           "position": [8, 10008],
           "bounds": [1200, 0]
         },
         {
+          "name": "Overflow Controls Ancestor Clipping Layer",
           "position": [8, 8],
           "bounds": [1200, 1000],
           "children": [
             {
+              "name": "Overflow Controls Host Layer",
               "bounds": [1200, 1000],
               "children": [
                 {
+                  "name": "Vertical Scrollbar Layer",
                   "position": [1193, 0],
                   "bounds": [7, 1000]
                 }
diff --git a/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/resize-painting-expected.txt b/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/resize-painting-expected.txt
index 7cd1352..65516bd 100644
--- a/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/resize-painting-expected.txt
+++ b/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/resize-painting-expected.txt
@@ -1,20 +1,25 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow DIV class='resizable composited box'",
           "position": [18, 10],
           "bounds": [100, 100],
           "drawsContent": true,
           "children": [
             {
+              "name": "Overflow Controls Host Layer",
               "bounds": [100, 100],
               "children": [
                 {
+                  "name": "Scroll Corner Layer",
                   "position": [85, 85],
                   "bounds": [15, 15],
                   "drawsContent": true
diff --git a/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/scroll-parent-absolute-expected.txt b/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/scroll-parent-absolute-expected.txt
index 631b21d..34d70810 100644
--- a/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/scroll-parent-absolute-expected.txt
+++ b/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/scroll-parent-absolute-expected.txt
@@ -1,15 +1,19 @@
 {
+  "name": "Content Root Layer",
   "bounds": [785, 5516],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [785, 5516],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "Squashing Containment Layer",
           "shouldFlattenTransform": false,
           "children": [
             {
+              "name": "LayoutBlockFlow DIV id='top'",
               "position": [8, 8],
               "bounds": [500, 500],
               "contentsOpaque": true,
@@ -18,27 +22,33 @@
               "backgroundColor": "#0000FF",
               "children": [
                 {
+                  "name": "Scrolling Layer",
                   "bounds": [485, 485],
                   "shouldFlattenTransform": false,
                   "children": [
                     {
+                      "name": "Scrolling Contents Layer",
                       "bounds": [485, 5000],
                       "drawsContent": true
                     }
                   ]
                 },
                 {
+                  "name": "Overflow Controls Host Layer",
                   "bounds": [500, 500],
                   "children": [
                     {
+                      "name": "Horizontal Scrollbar Layer",
                       "position": [0, 485],
                       "bounds": [485, 15]
                     },
                     {
+                      "name": "Vertical Scrollbar Layer",
                       "position": [485, 0],
                       "bounds": [15, 485]
                     },
                     {
+                      "name": "Scroll Corner Layer",
                       "position": [485, 485],
                       "bounds": [15, 15],
                       "drawsContent": true
@@ -48,6 +58,7 @@
               ]
             },
             {
+              "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV id='middle')",
               "position": [8, 8],
               "bounds": [400, 400],
               "drawsContent": true
@@ -55,6 +66,7 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow (relative positioned) DIV id='child'",
           "position": [8, 8],
           "bounds": [300, 300],
           "contentsOpaque": true,
@@ -63,6 +75,7 @@
           "backgroundColor": "#FFFF00"
         },
         {
+          "name": "LayoutBlockFlow (relative positioned) DIV id='tall'",
           "position": [8, 8],
           "bounds": [20, 5000],
           "contentsOpaque": true,
diff --git a/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/scroll-parent-absolute-with-backdrop-filter-expected.txt b/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/scroll-parent-absolute-with-backdrop-filter-expected.txt
new file mode 100644
index 0000000..6c04687f
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/scroll-parent-absolute-with-backdrop-filter-expected.txt
@@ -0,0 +1,88 @@
+{
+  "name": "Content Root Layer",
+  "bounds": [785, 5516],
+  "children": [
+    {
+      "name": "LayoutView #document",
+      "bounds": [785, 5516],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "name": "Squashing Containment Layer",
+          "shouldFlattenTransform": false,
+          "children": [
+            {
+              "name": "LayoutBlockFlow DIV id='top'",
+              "position": [8, 8],
+              "bounds": [500, 500],
+              "shouldFlattenTransform": false,
+              "drawsContent": true,
+              "children": [
+                {
+                  "name": "Scrolling Layer",
+                  "bounds": [485, 485],
+                  "shouldFlattenTransform": false,
+                  "children": [
+                    {
+                      "name": "Scrolling Contents Layer",
+                      "bounds": [485, 5000],
+                      "drawsContent": true
+                    }
+                  ]
+                },
+                {
+                  "name": "Overflow Controls Host Layer",
+                  "bounds": [500, 500],
+                  "children": [
+                    {
+                      "name": "Horizontal Scrollbar Layer",
+                      "position": [0, 485],
+                      "bounds": [485, 15]
+                    },
+                    {
+                      "name": "Vertical Scrollbar Layer",
+                      "position": [485, 0],
+                      "bounds": [15, 485]
+                    },
+                    {
+                      "name": "Scroll Corner Layer",
+                      "position": [485, 485],
+                      "bounds": [15, 15],
+                      "drawsContent": true
+                    }
+                  ]
+                }
+              ]
+            },
+            {
+              "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV id='middle')",
+              "position": [8, 8],
+              "bounds": [400, 400],
+              "drawsContent": true
+            }
+          ]
+        },
+        {
+          "name": "LayoutBlockFlow (relative positioned) DIV id='child'",
+          "position": [8, 8],
+          "bounds": [300, 300],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backfaceVisibility": "hidden",
+          "backgroundColor": "#FFFF00"
+        },
+        {
+          "name": "LayoutBlockFlow (relative positioned) DIV id='tall'",
+          "position": [8, 8],
+          "bounds": [20, 5000],
+          "contentsOpaque": true,
+          "drawsContent": true,
+          "backgroundColor": "#FA8072",
+          "hasScrollParent": true
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/scroll-parent-with-non-stacking-context-composited-ancestor-expected.txt b/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/scroll-parent-with-non-stacking-context-composited-ancestor-expected.txt
index de97ec2..c1061fb 100644
--- a/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/scroll-parent-with-non-stacking-context-composited-ancestor-expected.txt
+++ b/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/scroll-parent-with-non-stacking-context-composited-ancestor-expected.txt
@@ -1,12 +1,15 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow DIV id='intervening'",
           "position": [98, 90],
           "bounds": [300, 300],
           "contentsOpaque": true,
@@ -15,16 +18,19 @@
           "backgroundColor": "#FFEFD5",
           "children": [
             {
+              "name": "LayoutBlockFlow DIV id='scroller'",
               "bounds": [102, 102],
               "shouldFlattenTransform": false,
               "drawsContent": true,
               "children": [
                 {
+                  "name": "Scrolling Layer",
                   "position": [1, 1],
                   "bounds": [100, 100],
                   "shouldFlattenTransform": false,
                   "children": [
                     {
+                      "name": "Scrolling Contents Layer",
                       "bounds": [100, 180]
                     }
                   ]
@@ -34,6 +40,7 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow (positioned) DIV id='fixed'",
           "position": [60, 60],
           "bounds": [80, 80],
           "contentsOpaque": true,
@@ -41,9 +48,11 @@
           "backgroundColor": "#008000"
         },
         {
+          "name": "Squashing Containment Layer",
           "shouldFlattenTransform": false,
           "children": [
             {
+              "name": "LayoutBlockFlow (relative positioned) DIV class='scrolled'",
               "position": [103, 95],
               "bounds": [60, 40],
               "contentsOpaque": true,
@@ -51,6 +60,7 @@
               "backgroundColor": "#0000FF"
             },
             {
+              "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV class='scrolled')",
               "position": [103, 139],
               "bounds": [60, 128],
               "drawsContent": true
@@ -58,10 +68,12 @@
           ]
         },
         {
+          "name": "Overflow Controls Host Layer",
           "position": [98, 90],
           "bounds": [102, 102],
           "children": [
             {
+              "name": "Vertical Scrollbar Layer",
               "position": [94, 1],
               "bounds": [7, 100]
             }
diff --git a/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/scrolling-content-clip-to-viewport-expected.txt b/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/scrolling-content-clip-to-viewport-expected.txt
index e456a58..f20658431 100644
--- a/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/scrolling-content-clip-to-viewport-expected.txt
+++ b/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/scrolling-content-clip-to-viewport-expected.txt
@@ -1,37 +1,46 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow DIV class='scroller'",
           "bounds": [320, 340],
           "shouldFlattenTransform": false,
           "drawsContent": true,
           "children": [
             {
+              "name": "Scrolling Layer",
               "bounds": [305, 325],
               "shouldFlattenTransform": false,
               "children": [
                 {
+                  "name": "Scrolling Contents Layer",
                   "bounds": [305, 1224]
                 }
               ]
             },
             {
+              "name": "Overflow Controls Host Layer",
               "bounds": [320, 340],
               "children": [
                 {
+                  "name": "Horizontal Scrollbar Layer",
                   "position": [0, 325],
                   "bounds": [305, 15]
                 },
                 {
+                  "name": "Vertical Scrollbar Layer",
                   "position": [305, 0],
                   "bounds": [15, 325]
                 },
                 {
+                  "name": "Scroll Corner Layer",
                   "position": [305, 325],
                   "bounds": [15, 15],
                   "drawsContent": true
@@ -41,6 +50,7 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow (relative positioned) DIV class='column'",
           "position": [10, 10],
           "bounds": [284, 1204],
           "contentsOpaque": true,
diff --git a/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/scrolling-without-painting-expected.txt b/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/scrolling-without-painting-expected.txt
index 50a714d..1d7eab2 100644
--- a/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/scrolling-without-painting-expected.txt
+++ b/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/scrolling-without-painting-expected.txt
@@ -1,36 +1,44 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow DIV id='scroller'",
           "position": [8, 8],
           "bounds": [202, 202],
           "shouldFlattenTransform": false,
           "drawsContent": true,
           "children": [
             {
+              "name": "Scrolling Layer",
               "position": [1, 1],
               "bounds": [185, 185],
               "shouldFlattenTransform": false,
               "children": [
                 {
+                  "name": "Scrolling Contents Layer",
                   "bounds": [185, 1025],
                   "drawsContent": true
                 }
               ]
             },
             {
+              "name": "Overflow Controls Host Layer",
               "bounds": [202, 202],
               "children": [
                 {
+                  "name": "Horizontal Scrollbar Layer",
                   "position": [1, 186],
                   "bounds": [185, 15]
                 },
                 {
+                  "name": "Vertical Scrollbar Layer",
                   "position": [186, 1],
                   "bounds": [15, 185],
                   "paintInvalidations": [
@@ -42,6 +50,7 @@
                   ]
                 },
                 {
+                  "name": "Scroll Corner Layer",
                   "position": [186, 186],
                   "bounds": [15, 15],
                   "drawsContent": true
diff --git a/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/universal-accelerated-overflow-scroll-expected.txt b/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/universal-accelerated-overflow-scroll-expected.txt
index 6ca1829..5f3fe6d2 100644
--- a/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/universal-accelerated-overflow-scroll-expected.txt
+++ b/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/universal-accelerated-overflow-scroll-expected.txt
@@ -1,43 +1,53 @@
 {
+  "name": "Content Root Layer",
   "bounds": [785, 2016],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [785, 2016],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "Squashing Containment Layer",
           "shouldFlattenTransform": false,
           "children": [
             {
+              "name": "LayoutBlockFlow DIV id='container-absolute-grandchildren-not-contained' class='overflow'",
               "position": [10, 10],
               "bounds": [104, 104],
               "shouldFlattenTransform": false,
               "drawsContent": true,
               "children": [
                 {
+                  "name": "Scrolling Layer",
                   "position": [2, 2],
                   "bounds": [85, 85],
                   "shouldFlattenTransform": false,
                   "children": [
                     {
+                      "name": "Scrolling Contents Layer",
                       "bounds": [85, 144],
                       "drawsContent": true
                     }
                   ]
                 },
                 {
+                  "name": "Overflow Controls Host Layer",
                   "bounds": [104, 104],
                   "children": [
                     {
+                      "name": "Horizontal Scrollbar Layer",
                       "position": [2, 87],
                       "bounds": [85, 15]
                     },
                     {
+                      "name": "Vertical Scrollbar Layer",
                       "position": [87, 2],
                       "bounds": [15, 85]
                     },
                     {
+                      "name": "Scroll Corner Layer",
                       "position": [87, 87],
                       "bounds": [15, 15],
                       "drawsContent": true
@@ -47,6 +57,7 @@
               ]
             },
             {
+              "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV id='positioned-absolute-grandchildren-not-contained' class='positionAbsolute positioned')",
               "position": [35, 75],
               "bounds": [80, 40],
               "drawsContent": true
@@ -54,9 +65,11 @@
           ]
         },
         {
+          "name": "Squashing Containment Layer",
           "shouldFlattenTransform": false,
           "children": [
             {
+              "name": "LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute-grandchildren-not-contained' class='scrolled'",
               "position": [16, -15],
               "bounds": [75, 24],
               "contentsOpaque": true,
@@ -64,6 +77,7 @@
               "backgroundColor": "#0000FF"
             },
             {
+              "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute-grandchildren-not-contained' class='scrolled')",
               "position": [16, 41],
               "bounds": [75, 24],
               "drawsContent": true
@@ -71,34 +85,41 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow (positioned) DIV id='container-absolute-grandchildren' class='positionAbsolute overflow'",
           "position": [130, 10],
           "bounds": [104, 104],
           "shouldFlattenTransform": false,
           "drawsContent": true,
           "children": [
             {
+              "name": "Scrolling Layer",
               "position": [2, 2],
               "bounds": [85, 85],
               "shouldFlattenTransform": false,
               "children": [
                 {
+                  "name": "Scrolling Contents Layer",
                   "bounds": [105, 144],
                   "drawsContent": true
                 }
               ]
             },
             {
+              "name": "Overflow Controls Host Layer",
               "bounds": [104, 104],
               "children": [
                 {
+                  "name": "Horizontal Scrollbar Layer",
                   "position": [2, 87],
                   "bounds": [85, 15]
                 },
                 {
+                  "name": "Vertical Scrollbar Layer",
                   "position": [87, 2],
                   "bounds": [15, 85]
                 },
                 {
+                  "name": "Scroll Corner Layer",
                   "position": [87, 87],
                   "bounds": [15, 15],
                   "drawsContent": true
@@ -108,9 +129,11 @@
           ]
         },
         {
+          "name": "Squashing Containment Layer",
           "shouldFlattenTransform": false,
           "children": [
             {
+              "name": "LayoutBlockFlow (positioned) DIV id='positioned-absolute-grandchildren' class='positionAbsolute positioned'",
               "position": [157, 18],
               "bounds": [80, 40],
               "contentsOpaque": true,
@@ -118,6 +141,7 @@
               "backgroundColor": "#800080"
             },
             {
+              "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute-grandchildren' class='scrolled')",
               "position": [136, -15],
               "bounds": [75, 80],
               "drawsContent": true
@@ -125,36 +149,44 @@
           ]
         },
         {
+          "name": "Squashing Containment Layer",
           "shouldFlattenTransform": false,
           "children": [
             {
+              "name": "LayoutBlockFlow DIV id='container-absolute-not-contained' class='overflow'",
               "position": [250, 10],
               "bounds": [104, 104],
               "shouldFlattenTransform": false,
               "drawsContent": true,
               "children": [
                 {
+                  "name": "Scrolling Layer",
                   "position": [2, 2],
                   "bounds": [85, 85],
                   "shouldFlattenTransform": false,
                   "children": [
                     {
+                      "name": "Scrolling Contents Layer",
                       "bounds": [85, 144]
                     }
                   ]
                 },
                 {
+                  "name": "Overflow Controls Host Layer",
                   "bounds": [104, 104],
                   "children": [
                     {
+                      "name": "Horizontal Scrollbar Layer",
                       "position": [2, 87],
                       "bounds": [85, 15]
                     },
                     {
+                      "name": "Vertical Scrollbar Layer",
                       "position": [87, 2],
                       "bounds": [15, 85]
                     },
                     {
+                      "name": "Scroll Corner Layer",
                       "position": [87, 87],
                       "bounds": [15, 15],
                       "drawsContent": true
@@ -164,6 +196,7 @@
               ]
             },
             {
+              "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV id='positioned-absolute-not-contained' class='positionAbsolute positioned')",
               "position": [275, 75],
               "bounds": [80, 40],
               "drawsContent": true
@@ -171,9 +204,11 @@
           ]
         },
         {
+          "name": "Squashing Containment Layer",
           "shouldFlattenTransform": false,
           "children": [
             {
+              "name": "LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute-not-contained' class='scrolled'",
               "position": [256, -15],
               "bounds": [75, 24],
               "contentsOpaque": true,
@@ -181,6 +216,7 @@
               "backgroundColor": "#0000FF"
             },
             {
+              "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute-not-contained' class='scrolled')",
               "position": [256, 41],
               "bounds": [75, 24],
               "drawsContent": true
@@ -188,37 +224,45 @@
           ]
         },
         {
+          "name": "Squashing Containment Layer",
           "shouldFlattenTransform": false,
           "children": [
             {
+              "name": "LayoutBlockFlow DIV id='container-absolute-sibling-grandchildren-not-contained' class='overflow'",
               "position": [370, 10],
               "bounds": [104, 104],
               "shouldFlattenTransform": false,
               "drawsContent": true,
               "children": [
                 {
+                  "name": "Scrolling Layer",
                   "position": [2, 2],
                   "bounds": [85, 85],
                   "shouldFlattenTransform": false,
                   "children": [
                     {
+                      "name": "Scrolling Contents Layer",
                       "bounds": [85, 144],
                       "drawsContent": true
                     }
                   ]
                 },
                 {
+                  "name": "Overflow Controls Host Layer",
                   "bounds": [104, 104],
                   "children": [
                     {
+                      "name": "Horizontal Scrollbar Layer",
                       "position": [2, 87],
                       "bounds": [85, 15]
                     },
                     {
+                      "name": "Vertical Scrollbar Layer",
                       "position": [87, 2],
                       "bounds": [15, 85]
                     },
                     {
+                      "name": "Scroll Corner Layer",
                       "position": [87, 87],
                       "bounds": [15, 15],
                       "drawsContent": true
@@ -228,6 +272,7 @@
               ]
             },
             {
+              "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV id='positioned-absolute-sibling-grandchildren-not-contained' class='positionAbsolute positioned')",
               "position": [395, 75],
               "bounds": [80, 40],
               "drawsContent": true
@@ -235,9 +280,11 @@
           ]
         },
         {
+          "name": "Squashing Containment Layer",
           "shouldFlattenTransform": false,
           "children": [
             {
+              "name": "LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute-sibling-grandchildren-not-contained' class='scrolled'",
               "position": [376, -15],
               "bounds": [75, 24],
               "contentsOpaque": true,
@@ -245,6 +292,7 @@
               "backgroundColor": "#0000FF"
             },
             {
+              "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute-sibling-grandchildren-not-contained' class='scrolled')",
               "position": [376, 41],
               "bounds": [75, 24],
               "drawsContent": true
@@ -252,34 +300,41 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow (positioned) DIV id='container-absolute-sibling-grandchildren' class='positionAbsolute overflow'",
           "position": [10, 130],
           "bounds": [104, 104],
           "shouldFlattenTransform": false,
           "drawsContent": true,
           "children": [
             {
+              "name": "Scrolling Layer",
               "position": [2, 2],
               "bounds": [85, 85],
               "shouldFlattenTransform": false,
               "children": [
                 {
+                  "name": "Scrolling Contents Layer",
                   "bounds": [105, 144],
                   "drawsContent": true
                 }
               ]
             },
             {
+              "name": "Overflow Controls Host Layer",
               "bounds": [104, 104],
               "children": [
                 {
+                  "name": "Horizontal Scrollbar Layer",
                   "position": [2, 87],
                   "bounds": [85, 15]
                 },
                 {
+                  "name": "Vertical Scrollbar Layer",
                   "position": [87, 2],
                   "bounds": [15, 85]
                 },
                 {
+                  "name": "Scroll Corner Layer",
                   "position": [87, 87],
                   "bounds": [15, 15],
                   "drawsContent": true
@@ -289,9 +344,11 @@
           ]
         },
         {
+          "name": "Squashing Containment Layer",
           "shouldFlattenTransform": false,
           "children": [
             {
+              "name": "LayoutBlockFlow (positioned) DIV id='positioned-absolute-sibling-grandchildren' class='positionAbsolute positioned'",
               "position": [37, 138],
               "bounds": [80, 40],
               "contentsOpaque": true,
@@ -299,6 +356,7 @@
               "backgroundColor": "#800080"
             },
             {
+              "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute-sibling-grandchildren' class='scrolled')",
               "position": [16, 105],
               "bounds": [75, 80],
               "drawsContent": true
@@ -306,36 +364,44 @@
           ]
         },
         {
+          "name": "Squashing Containment Layer",
           "shouldFlattenTransform": false,
           "children": [
             {
+              "name": "LayoutBlockFlow DIV id='container-absolute-sibling-not-contained' class='overflow'",
               "position": [130, 130],
               "bounds": [104, 104],
               "shouldFlattenTransform": false,
               "drawsContent": true,
               "children": [
                 {
+                  "name": "Scrolling Layer",
                   "position": [2, 2],
                   "bounds": [85, 85],
                   "shouldFlattenTransform": false,
                   "children": [
                     {
+                      "name": "Scrolling Contents Layer",
                       "bounds": [85, 144]
                     }
                   ]
                 },
                 {
+                  "name": "Overflow Controls Host Layer",
                   "bounds": [104, 104],
                   "children": [
                     {
+                      "name": "Horizontal Scrollbar Layer",
                       "position": [2, 87],
                       "bounds": [85, 15]
                     },
                     {
+                      "name": "Vertical Scrollbar Layer",
                       "position": [87, 2],
                       "bounds": [15, 85]
                     },
                     {
+                      "name": "Scroll Corner Layer",
                       "position": [87, 87],
                       "bounds": [15, 15],
                       "drawsContent": true
@@ -345,6 +411,7 @@
               ]
             },
             {
+              "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV id='positioned-absolute-sibling-not-contained' class='positionAbsolute positioned')",
               "position": [155, 195],
               "bounds": [80, 40],
               "drawsContent": true
@@ -352,9 +419,11 @@
           ]
         },
         {
+          "name": "Squashing Containment Layer",
           "shouldFlattenTransform": false,
           "children": [
             {
+              "name": "LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute-sibling-not-contained' class='scrolled'",
               "position": [136, 105],
               "bounds": [75, 24],
               "contentsOpaque": true,
@@ -362,6 +431,7 @@
               "backgroundColor": "#0000FF"
             },
             {
+              "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute-sibling-not-contained' class='scrolled')",
               "position": [136, 161],
               "bounds": [75, 24],
               "drawsContent": true
@@ -369,33 +439,40 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow (positioned) DIV id='container-absolute-sibling' class='positionAbsolute overflow'",
           "position": [250, 130],
           "bounds": [104, 104],
           "shouldFlattenTransform": false,
           "drawsContent": true,
           "children": [
             {
+              "name": "Scrolling Layer",
               "position": [2, 2],
               "bounds": [85, 85],
               "shouldFlattenTransform": false,
               "children": [
                 {
+                  "name": "Scrolling Contents Layer",
                   "bounds": [105, 144]
                 }
               ]
             },
             {
+              "name": "Overflow Controls Host Layer",
               "bounds": [104, 104],
               "children": [
                 {
+                  "name": "Horizontal Scrollbar Layer",
                   "position": [2, 87],
                   "bounds": [85, 15]
                 },
                 {
+                  "name": "Vertical Scrollbar Layer",
                   "position": [87, 2],
                   "bounds": [15, 85]
                 },
                 {
+                  "name": "Scroll Corner Layer",
                   "position": [87, 87],
                   "bounds": [15, 15],
                   "drawsContent": true
@@ -405,9 +482,11 @@
           ]
         },
         {
+          "name": "Squashing Containment Layer",
           "shouldFlattenTransform": false,
           "children": [
             {
+              "name": "LayoutBlockFlow (positioned) DIV id='positioned-absolute-sibling' class='positionAbsolute positioned'",
               "position": [277, 138],
               "bounds": [80, 40],
               "contentsOpaque": true,
@@ -415,6 +494,7 @@
               "backgroundColor": "#800080"
             },
             {
+              "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute-sibling' class='scrolled')",
               "position": [256, 105],
               "bounds": [75, 80],
               "drawsContent": true
@@ -422,33 +502,40 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow (positioned) DIV id='container-absolute' class='positionAbsolute overflow'",
           "position": [370, 130],
           "bounds": [104, 104],
           "shouldFlattenTransform": false,
           "drawsContent": true,
           "children": [
             {
+              "name": "Scrolling Layer",
               "position": [2, 2],
               "bounds": [85, 85],
               "shouldFlattenTransform": false,
               "children": [
                 {
+                  "name": "Scrolling Contents Layer",
                   "bounds": [105, 144]
                 }
               ]
             },
             {
+              "name": "Overflow Controls Host Layer",
               "bounds": [104, 104],
               "children": [
                 {
+                  "name": "Horizontal Scrollbar Layer",
                   "position": [2, 87],
                   "bounds": [85, 15]
                 },
                 {
+                  "name": "Vertical Scrollbar Layer",
                   "position": [87, 2],
                   "bounds": [15, 85]
                 },
                 {
+                  "name": "Scroll Corner Layer",
                   "position": [87, 87],
                   "bounds": [15, 15],
                   "drawsContent": true
@@ -458,9 +545,11 @@
           ]
         },
         {
+          "name": "Squashing Containment Layer",
           "shouldFlattenTransform": false,
           "children": [
             {
+              "name": "LayoutBlockFlow (positioned) DIV id='positioned-absolute' class='positionAbsolute positioned'",
               "position": [397, 138],
               "bounds": [80, 40],
               "contentsOpaque": true,
@@ -468,6 +557,7 @@
               "backgroundColor": "#800080"
             },
             {
+              "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute' class='scrolled')",
               "position": [376, 105],
               "bounds": [75, 80],
               "drawsContent": true
@@ -475,34 +565,41 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow (positioned) DIV id='container-fixed-sibling-grandchildren' class='positionAbsolute overflow'",
           "position": [10, 250],
           "bounds": [104, 104],
           "shouldFlattenTransform": false,
           "drawsContent": true,
           "children": [
             {
+              "name": "Scrolling Layer",
               "position": [2, 2],
               "bounds": [85, 85],
               "shouldFlattenTransform": false,
               "children": [
                 {
+                  "name": "Scrolling Contents Layer",
                   "bounds": [85, 144],
                   "drawsContent": true
                 }
               ]
             },
             {
+              "name": "Overflow Controls Host Layer",
               "bounds": [104, 104],
               "children": [
                 {
+                  "name": "Horizontal Scrollbar Layer",
                   "position": [2, 87],
                   "bounds": [85, 15]
                 },
                 {
+                  "name": "Vertical Scrollbar Layer",
                   "position": [87, 2],
                   "bounds": [15, 85]
                 },
                 {
+                  "name": "Scroll Corner Layer",
                   "position": [87, 87],
                   "bounds": [15, 15],
                   "drawsContent": true
@@ -512,6 +609,7 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow (positioned) DIV id='positioned-fixed-sibling-grandchildren' class='positionFixed positioned'",
           "position": [35, 315],
           "bounds": [80, 40],
           "contentsOpaque": true,
@@ -519,9 +617,11 @@
           "backgroundColor": "#800080"
         },
         {
+          "name": "Squashing Containment Layer",
           "shouldFlattenTransform": false,
           "children": [
             {
+              "name": "LayoutBlockFlow (relative positioned) DIV id='scrolled-fixed-sibling-grandchildren' class='scrolled'",
               "position": [16, 225],
               "bounds": [75, 24],
               "contentsOpaque": true,
@@ -529,6 +629,7 @@
               "backgroundColor": "#0000FF"
             },
             {
+              "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='scrolled-fixed-sibling-grandchildren' class='scrolled')",
               "position": [16, 281],
               "bounds": [75, 24],
               "drawsContent": true
@@ -536,33 +637,40 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow (positioned) DIV id='container-fixed-sibling' class='positionAbsolute overflow'",
           "position": [130, 250],
           "bounds": [104, 104],
           "shouldFlattenTransform": false,
           "drawsContent": true,
           "children": [
             {
+              "name": "Scrolling Layer",
               "position": [2, 2],
               "bounds": [85, 85],
               "shouldFlattenTransform": false,
               "children": [
                 {
+                  "name": "Scrolling Contents Layer",
                   "bounds": [85, 144]
                 }
               ]
             },
             {
+              "name": "Overflow Controls Host Layer",
               "bounds": [104, 104],
               "children": [
                 {
+                  "name": "Horizontal Scrollbar Layer",
                   "position": [2, 87],
                   "bounds": [85, 15]
                 },
                 {
+                  "name": "Vertical Scrollbar Layer",
                   "position": [87, 2],
                   "bounds": [15, 85]
                 },
                 {
+                  "name": "Scroll Corner Layer",
                   "position": [87, 87],
                   "bounds": [15, 15],
                   "drawsContent": true
@@ -572,6 +680,7 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow (positioned) DIV id='positioned-fixed-sibling' class='positionFixed positioned'",
           "position": [155, 315],
           "bounds": [80, 40],
           "contentsOpaque": true,
@@ -579,9 +688,11 @@
           "backgroundColor": "#800080"
         },
         {
+          "name": "Squashing Containment Layer",
           "shouldFlattenTransform": false,
           "children": [
             {
+              "name": "LayoutBlockFlow (relative positioned) DIV id='scrolled-fixed-sibling' class='scrolled'",
               "position": [136, 225],
               "bounds": [75, 24],
               "contentsOpaque": true,
@@ -589,6 +700,7 @@
               "backgroundColor": "#0000FF"
             },
             {
+              "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='scrolled-fixed-sibling' class='scrolled')",
               "position": [136, 281],
               "bounds": [75, 24],
               "drawsContent": true
@@ -596,34 +708,41 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow (positioned) DIV id='container-fixed-grandchildren' class='positionAbsolute overflow'",
           "position": [250, 250],
           "bounds": [104, 104],
           "shouldFlattenTransform": false,
           "drawsContent": true,
           "children": [
             {
+              "name": "Scrolling Layer",
               "position": [2, 2],
               "bounds": [85, 85],
               "shouldFlattenTransform": false,
               "children": [
                 {
+                  "name": "Scrolling Contents Layer",
                   "bounds": [85, 144],
                   "drawsContent": true
                 }
               ]
             },
             {
+              "name": "Overflow Controls Host Layer",
               "bounds": [104, 104],
               "children": [
                 {
+                  "name": "Horizontal Scrollbar Layer",
                   "position": [2, 87],
                   "bounds": [85, 15]
                 },
                 {
+                  "name": "Vertical Scrollbar Layer",
                   "position": [87, 2],
                   "bounds": [15, 85]
                 },
                 {
+                  "name": "Scroll Corner Layer",
                   "position": [87, 87],
                   "bounds": [15, 15],
                   "drawsContent": true
@@ -633,6 +752,7 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow (positioned) DIV id='positioned-fixed-grandchildren' class='positionFixed positioned'",
           "position": [275, 315],
           "bounds": [80, 40],
           "contentsOpaque": true,
@@ -640,9 +760,11 @@
           "backgroundColor": "#800080"
         },
         {
+          "name": "Squashing Containment Layer",
           "shouldFlattenTransform": false,
           "children": [
             {
+              "name": "LayoutBlockFlow (relative positioned) DIV id='scrolled-fixed-grandchildren' class='scrolled'",
               "position": [256, 225],
               "bounds": [75, 24],
               "contentsOpaque": true,
@@ -650,6 +772,7 @@
               "backgroundColor": "#0000FF"
             },
             {
+              "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='scrolled-fixed-grandchildren' class='scrolled')",
               "position": [256, 281],
               "bounds": [75, 24],
               "drawsContent": true
@@ -657,33 +780,40 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow (positioned) DIV id='container-fixed' class='positionAbsolute overflow'",
           "position": [370, 250],
           "bounds": [104, 104],
           "shouldFlattenTransform": false,
           "drawsContent": true,
           "children": [
             {
+              "name": "Scrolling Layer",
               "position": [2, 2],
               "bounds": [85, 85],
               "shouldFlattenTransform": false,
               "children": [
                 {
+                  "name": "Scrolling Contents Layer",
                   "bounds": [85, 144]
                 }
               ]
             },
             {
+              "name": "Overflow Controls Host Layer",
               "bounds": [104, 104],
               "children": [
                 {
+                  "name": "Horizontal Scrollbar Layer",
                   "position": [2, 87],
                   "bounds": [85, 15]
                 },
                 {
+                  "name": "Vertical Scrollbar Layer",
                   "position": [87, 2],
                   "bounds": [15, 85]
                 },
                 {
+                  "name": "Scroll Corner Layer",
                   "position": [87, 87],
                   "bounds": [15, 15],
                   "drawsContent": true
@@ -693,6 +823,7 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow (positioned) DIV id='positioned-fixed' class='positionFixed positioned'",
           "position": [395, 315],
           "bounds": [80, 40],
           "contentsOpaque": true,
@@ -700,9 +831,11 @@
           "backgroundColor": "#800080"
         },
         {
+          "name": "Squashing Containment Layer",
           "shouldFlattenTransform": false,
           "children": [
             {
+              "name": "LayoutBlockFlow (relative positioned) DIV id='scrolled-fixed' class='scrolled'",
               "position": [376, 225],
               "bounds": [75, 24],
               "contentsOpaque": true,
@@ -710,6 +843,7 @@
               "backgroundColor": "#0000FF"
             },
             {
+              "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='scrolled-fixed' class='scrolled')",
               "position": [376, 281],
               "bounds": [75, 24],
               "drawsContent": true
@@ -717,6 +851,7 @@
           ]
         },
         {
+          "name": "LayoutBlockFlow (positioned) DIV id='sibling-absolute-sibling-grandchildren-not-contained' class='positionFixed sibling'",
           "position": [375, 20],
           "bounds": [50, 100],
           "contentsOpaque": true,
@@ -724,6 +859,7 @@
           "backgroundColor": "#008000"
         },
         {
+          "name": "LayoutBlockFlow (positioned) DIV id='sibling-absolute-sibling-grandchildren' class='positionFixed sibling'",
           "position": [15, 140],
           "bounds": [50, 100],
           "contentsOpaque": true,
@@ -731,6 +867,7 @@
           "backgroundColor": "#008000"
         },
         {
+          "name": "LayoutBlockFlow (positioned) DIV id='sibling-absolute-sibling-not-contained' class='positionFixed sibling'",
           "position": [135, 140],
           "bounds": [50, 100],
           "contentsOpaque": true,
@@ -738,6 +875,7 @@
           "backgroundColor": "#008000"
         },
         {
+          "name": "LayoutBlockFlow (positioned) DIV id='sibling-absolute-sibling' class='positionFixed sibling'",
           "position": [255, 140],
           "bounds": [50, 100],
           "contentsOpaque": true,
@@ -745,6 +883,7 @@
           "backgroundColor": "#008000"
         },
         {
+          "name": "LayoutBlockFlow (positioned) DIV id='sibling-fixed-sibling-grandchildren' class='positionFixed sibling'",
           "position": [15, 260],
           "bounds": [50, 100],
           "contentsOpaque": true,
@@ -752,6 +891,7 @@
           "backgroundColor": "#008000"
         },
         {
+          "name": "LayoutBlockFlow (positioned) DIV id='sibling-fixed-sibling' class='positionFixed sibling'",
           "position": [135, 260],
           "bounds": [50, 100],
           "contentsOpaque": true,
@@ -759,9 +899,11 @@
           "backgroundColor": "#008000"
         },
         {
+          "name": "Squashing Containment Layer",
           "shouldFlattenTransform": false,
           "children": [
             {
+              "name": "LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute-grandchildren-not-contained' class='scrolled onTop'",
               "position": [16, -43],
               "bounds": [75, 24],
               "contentsOpaque": true,
@@ -769,6 +911,7 @@
               "backgroundColor": "#0000FF"
             },
             {
+              "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute-grandchildren-not-contained' class='scrolled onTop')",
               "position": [16, 13],
               "bounds": [75, 80],
               "drawsContent": true
@@ -776,9 +919,11 @@
           ]
         },
         {
+          "name": "Squashing Containment Layer",
           "shouldFlattenTransform": false,
           "children": [
             {
+              "name": "LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute-grandchildren' class='scrolled onTop'",
               "position": [136, -43],
               "bounds": [75, 24],
               "contentsOpaque": true,
@@ -786,6 +931,7 @@
               "backgroundColor": "#0000FF"
             },
             {
+              "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute-grandchildren' class='scrolled onTop')",
               "position": [136, 13],
               "bounds": [75, 80],
               "drawsContent": true
@@ -793,9 +939,11 @@
           ]
         },
         {
+          "name": "Squashing Containment Layer",
           "shouldFlattenTransform": false,
           "children": [
             {
+              "name": "LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute-not-contained' class='scrolled onTop'",
               "position": [256, -43],
               "bounds": [75, 24],
               "contentsOpaque": true,
@@ -803,6 +951,7 @@
               "backgroundColor": "#0000FF"
             },
             {
+              "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute-not-contained' class='scrolled onTop')",
               "position": [256, 13],
               "bounds": [75, 80],
               "drawsContent": true
@@ -810,9 +959,11 @@
           ]
         },
         {
+          "name": "Squashing Containment Layer",
           "shouldFlattenTransform": false,
           "children": [
             {
+              "name": "LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute-sibling-grandchildren-not-contained' class='scrolled onTop'",
               "position": [376, -43],
               "bounds": [75, 24],
               "contentsOpaque": true,
@@ -820,6 +971,7 @@
               "backgroundColor": "#0000FF"
             },
             {
+              "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute-sibling-grandchildren-not-contained' class='scrolled onTop')",
               "position": [376, 13],
               "bounds": [75, 80],
               "drawsContent": true
@@ -827,9 +979,11 @@
           ]
         },
         {
+          "name": "Squashing Containment Layer",
           "shouldFlattenTransform": false,
           "children": [
             {
+              "name": "LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute-sibling-grandchildren' class='scrolled onTop'",
               "position": [16, 77],
               "bounds": [75, 24],
               "contentsOpaque": true,
@@ -837,6 +991,7 @@
               "backgroundColor": "#0000FF"
             },
             {
+              "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute-sibling-grandchildren' class='scrolled onTop')",
               "position": [16, 133],
               "bounds": [75, 80],
               "drawsContent": true
@@ -844,9 +999,11 @@
           ]
         },
         {
+          "name": "Squashing Containment Layer",
           "shouldFlattenTransform": false,
           "children": [
             {
+              "name": "LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute-sibling-not-contained' class='scrolled onTop'",
               "position": [136, 77],
               "bounds": [75, 24],
               "contentsOpaque": true,
@@ -854,6 +1011,7 @@
               "backgroundColor": "#0000FF"
             },
             {
+              "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute-sibling-not-contained' class='scrolled onTop')",
               "position": [136, 133],
               "bounds": [75, 80],
               "drawsContent": true
@@ -861,9 +1019,11 @@
           ]
         },
         {
+          "name": "Squashing Containment Layer",
           "shouldFlattenTransform": false,
           "children": [
             {
+              "name": "LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute-sibling' class='scrolled onTop'",
               "position": [256, 77],
               "bounds": [75, 24],
               "contentsOpaque": true,
@@ -871,6 +1031,7 @@
               "backgroundColor": "#0000FF"
             },
             {
+              "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute-sibling' class='scrolled onTop')",
               "position": [256, 133],
               "bounds": [75, 80],
               "drawsContent": true
@@ -878,9 +1039,11 @@
           ]
         },
         {
+          "name": "Squashing Containment Layer",
           "shouldFlattenTransform": false,
           "children": [
             {
+              "name": "LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute' class='scrolled onTop'",
               "position": [376, 77],
               "bounds": [75, 24],
               "contentsOpaque": true,
@@ -888,6 +1051,7 @@
               "backgroundColor": "#0000FF"
             },
             {
+              "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute' class='scrolled onTop')",
               "position": [376, 133],
               "bounds": [75, 80],
               "drawsContent": true
@@ -895,9 +1059,11 @@
           ]
         },
         {
+          "name": "Squashing Containment Layer",
           "shouldFlattenTransform": false,
           "children": [
             {
+              "name": "LayoutBlockFlow (relative positioned) DIV id='scrolled-fixed-sibling-grandchildren' class='scrolled onTop'",
               "position": [16, 197],
               "bounds": [75, 24],
               "contentsOpaque": true,
@@ -905,6 +1071,7 @@
               "backgroundColor": "#0000FF"
             },
             {
+              "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='scrolled-fixed-sibling-grandchildren' class='scrolled onTop')",
               "position": [16, 253],
               "bounds": [75, 80],
               "drawsContent": true
@@ -912,9 +1079,11 @@
           ]
         },
         {
+          "name": "Squashing Containment Layer",
           "shouldFlattenTransform": false,
           "children": [
             {
+              "name": "LayoutBlockFlow (relative positioned) DIV id='scrolled-fixed-sibling' class='scrolled onTop'",
               "position": [136, 197],
               "bounds": [75, 24],
               "contentsOpaque": true,
@@ -922,6 +1091,7 @@
               "backgroundColor": "#0000FF"
             },
             {
+              "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='scrolled-fixed-sibling' class='scrolled onTop')",
               "position": [136, 253],
               "bounds": [75, 80],
               "drawsContent": true
@@ -929,9 +1099,11 @@
           ]
         },
         {
+          "name": "Squashing Containment Layer",
           "shouldFlattenTransform": false,
           "children": [
             {
+              "name": "LayoutBlockFlow (relative positioned) DIV id='scrolled-fixed-grandchildren' class='scrolled onTop'",
               "position": [256, 197],
               "bounds": [75, 24],
               "contentsOpaque": true,
@@ -939,6 +1111,7 @@
               "backgroundColor": "#0000FF"
             },
             {
+              "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='scrolled-fixed-grandchildren' class='scrolled onTop')",
               "position": [256, 253],
               "bounds": [75, 80],
               "drawsContent": true
@@ -946,9 +1119,11 @@
           ]
         },
         {
+          "name": "Squashing Containment Layer",
           "shouldFlattenTransform": false,
           "children": [
             {
+              "name": "LayoutBlockFlow (relative positioned) DIV id='scrolled-fixed' class='scrolled onTop'",
               "position": [376, 197],
               "bounds": [75, 24],
               "contentsOpaque": true,
@@ -956,6 +1131,7 @@
               "backgroundColor": "#0000FF"
             },
             {
+              "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='scrolled-fixed' class='scrolled onTop')",
               "position": [376, 253],
               "bounds": [75, 80],
               "drawsContent": true
diff --git a/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/updating-scrolling-container-expected.txt b/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/updating-scrolling-container-expected.txt
index 3a005d3..2e53aec 100644
--- a/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/updating-scrolling-container-expected.txt
+++ b/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/updating-scrolling-container-expected.txt
@@ -1,12 +1,15 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow DIV id='container'",
           "position": [8, 108],
           "bounds": [210, 210],
           "shouldFlattenTransform": false,
@@ -20,34 +23,34 @@
           ],
           "children": [
             {
+              "name": "Scrolling Layer",
               "position": [5, 5],
               "bounds": [185, 185],
               "shouldFlattenTransform": false,
               "children": [
                 {
+                  "name": "Scrolling Contents Layer",
                   "bounds": [400, 400],
-                  "drawsContent": true,
-                  "paintInvalidations": [
-                    {
-                      "object": "LayoutBlockFlow DIV id='container'",
-                      "reason": "style change"
-                    }
-                  ]
+                  "drawsContent": true
                 }
               ]
             },
             {
+              "name": "Overflow Controls Host Layer",
               "bounds": [210, 210],
               "children": [
                 {
+                  "name": "Horizontal Scrollbar Layer",
                   "position": [5, 190],
                   "bounds": [185, 15]
                 },
                 {
+                  "name": "Vertical Scrollbar Layer",
                   "position": [190, 5],
                   "bounds": [15, 185]
                 },
                 {
+                  "name": "Scroll Corner Layer",
                   "position": [190, 190],
                   "bounds": [15, 15],
                   "drawsContent": true
@@ -58,6 +61,12 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV id='container'",
+      "reason": "style change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/updating-scrolling-content-expected.txt b/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/updating-scrolling-content-expected.txt
index 7368f083..b06a918 100644
--- a/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/updating-scrolling-content-expected.txt
+++ b/third_party/WebKit/LayoutTests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/updating-scrolling-content-expected.txt
@@ -1,22 +1,27 @@
 {
+  "name": "Content Root Layer",
   "bounds": [800, 600],
   "children": [
     {
+      "name": "LayoutView #document",
       "bounds": [800, 600],
       "contentsOpaque": true,
       "drawsContent": true,
       "children": [
         {
+          "name": "LayoutBlockFlow DIV id='scroller'",
           "position": [8, 8],
           "bounds": [200, 200],
           "shouldFlattenTransform": false,
           "drawsContent": true,
           "children": [
             {
+              "name": "Scrolling Layer",
               "bounds": [185, 185],
               "shouldFlattenTransform": false,
               "children": [
                 {
+                  "name": "Scrolling Contents Layer",
                   "bounds": [185, 1200],
                   "drawsContent": true,
                   "paintInvalidations": [
@@ -30,13 +35,16 @@
               ]
             },
             {
+              "name": "Overflow Controls Host Layer",
               "bounds": [200, 200],
               "children": [
                 {
+                  "name": "Horizontal Scrollbar Layer",
                   "position": [0, 185],
                   "bounds": [185, 15]
                 },
                 {
+                  "name": "Vertical Scrollbar Layer",
                   "position": [185, 0],
                   "bounds": [15, 185],
                   "paintInvalidations": [
@@ -48,6 +56,7 @@
                   ]
                 },
                 {
+                  "name": "Scroll Corner Layer",
                   "position": [185, 185],
                   "bounds": [15, 15],
                   "drawsContent": true
@@ -58,6 +67,12 @@
         }
       ]
     }
+  ],
+  "objectPaintInvalidations": [
+    {
+      "object": "LayoutBlockFlow DIV id='indicator'",
+      "reason": "style change"
+    }
   ]
 }
 
diff --git a/third_party/WebKit/LayoutTests/virtual/threaded/compositing/visibility/layer-visible-content-expected.txt b/third_party/WebKit/LayoutTests/virtual/threaded/compositing/visibility/layer-visible-content-expected.txt
new file mode 100644
index 0000000..5bb50d264
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/virtual/threaded/compositing/visibility/layer-visible-content-expected.txt
@@ -0,0 +1,38 @@
+{
+  "name": "Content Root Layer",
+  "bounds": [800, 600],
+  "children": [
+    {
+      "name": "LayoutView #document",
+      "bounds": [800, 600],
+      "contentsOpaque": true,
+      "drawsContent": true,
+      "children": [
+        {
+          "name": "LayoutBlockFlow (positioned) DIV class='container'",
+          "bounds": [200, 200],
+          "drawsContent": true,
+          "children": [
+            {
+              "name": "Child Containment Layer",
+              "bounds": [200, 200],
+              "children": [
+                {
+                  "name": "LayoutBlockFlow DIV class='composited box'",
+                  "bounds": [10, 10]
+                }
+              ]
+            }
+          ]
+        },
+        {
+          "name": "LayoutBlockFlow PRE id='layer-tree'",
+          "bounds": [800, 16],
+          "opacity": 0,
+          "drawsContent": true
+        }
+      ]
+    }
+  ]
+}
+
diff --git a/third_party/WebKit/Source/bindings/core/v8/ActiveDOMCallback.h b/third_party/WebKit/Source/bindings/core/v8/ActiveDOMCallback.h
index 2ad759d..c3335ddc 100644
--- a/third_party/WebKit/Source/bindings/core/v8/ActiveDOMCallback.h
+++ b/third_party/WebKit/Source/bindings/core/v8/ActiveDOMCallback.h
@@ -33,7 +33,6 @@
 
 #include "core/CoreExport.h"
 #include "core/dom/ContextLifecycleObserver.h"
-#include "wtf/OwnPtr.h"
 
 namespace blink {
 
diff --git a/third_party/WebKit/Source/bindings/core/v8/CallbackPromiseAdapter.h b/third_party/WebKit/Source/bindings/core/v8/CallbackPromiseAdapter.h
index ef7959d..ee01896 100644
--- a/third_party/WebKit/Source/bindings/core/v8/CallbackPromiseAdapter.h
+++ b/third_party/WebKit/Source/bindings/core/v8/CallbackPromiseAdapter.h
@@ -33,10 +33,8 @@
 
 #include "bindings/core/v8/ScriptPromiseResolver.h"
 #include "public/platform/WebCallbacks.h"
-#include "wtf/OwnPtr.h"
-#include "wtf/PassOwnPtr.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/TypeTraits.h"
-
 #include <memory>
 
 namespace blink {
@@ -50,7 +48,7 @@
 //    called trivial WebType holder is used. For example,
 //    CallbackPromiseAdapter<bool, void> is a subclass of
 //    WebCallbacks<bool, void>.
-//  - If a WebType is OwnPtr<T>, its corresponding type parameter on
+//  - If a WebType is std::unique_ptr<T>, its corresponding type parameter on
 //    WebCallbacks is std::unique_ptr<T>, because WebCallbacks must be exposed to
 //    Chromium.
 //
@@ -64,9 +62,9 @@
 // Example:
 // class MyClass {
 // public:
-//     using WebType = OwnPtr<WebMyClass>;
+//     using WebType = std::unique_ptr<WebMyClass>;
 //     static PassRefPtr<MyClass> take(ScriptPromiseResolver* resolver,
-//         PassOwnPtr<WebMyClass> webInstance)
+//         std::unique_ptr<WebMyClass> webInstance)
 //     {
 //         return MyClass::create(webInstance);
 //     }
@@ -82,20 +80,20 @@
 //     }
 //     ...
 // };
-// OwnPtr<WebCallbacks<std::unique_ptr<WebMyClass>, const WebMyErrorClass&>>
-//     callbacks = adoptPtr(new CallbackPromiseAdapter<MyClass, MyErrorClass>(
+// std::unique_ptr<WebCallbacks<std::unique_ptr<WebMyClass>, const WebMyErrorClass&>>
+//     callbacks = wrapUnique(new CallbackPromiseAdapter<MyClass, MyErrorClass>(
 //     resolver));
 // ...
 //
-// OwnPtr<WebCallbacks<bool, const WebMyErrorClass&>> callbacks2 =
-//     adoptPtr(new CallbackPromiseAdapter<bool, MyErrorClass>(resolver));
+// std::unique_ptr<WebCallbacks<bool, const WebMyErrorClass&>> callbacks2 =
+//     wrapUnique(new CallbackPromiseAdapter<bool, MyErrorClass>(resolver));
 // ...
 //
 //
 // In order to implement the above exceptions, we have template classes below.
 // OnSuccess and OnError provide onSuccess and onError implementation, and there
 // are utility templates that provide
-//  - OwnPtr - WebPassOwnPtr translation ([Web]PassType[Impl], adopt, pass),
+//  - std::unique_ptr - WebPassOwnPtr translation ([Web]PassType[Impl], adopt, pass),
 //  - trivial WebType holder (TrivialWebTypeHolder).
 
 namespace internal {
@@ -125,24 +123,24 @@
         using Type = T;
     };
     template <typename T>
-    struct PassTypeImpl<OwnPtr<T>> {
-        using Type = PassOwnPtr<T>;
+    struct PassTypeImpl<std::unique_ptr<T>> {
+        using Type = std::unique_ptr<T>;
     };
     template <typename T>
     struct WebPassTypeImpl {
         using Type = T;
     };
     template <typename T>
-    struct WebPassTypeImpl<OwnPtr<T>> {
+    struct WebPassTypeImpl<std::unique_ptr<T>> {
         using Type = std::unique_ptr<T>;
     };
     template <typename T> using PassType = typename PassTypeImpl<T>::Type;
     template <typename T> using WebPassType = typename WebPassTypeImpl<T>::Type;
     template <typename T> static T& adopt(T& x) { return x; }
     template <typename T>
-    static PassOwnPtr<T> adopt(std::unique_ptr<T>& x) { return adoptPtr(x.release()); }
+    static std::unique_ptr<T> adopt(std::unique_ptr<T>& x) { return std::move(x); }
     template <typename T> static PassType<T> pass(T& x) { return x; }
-    template <typename T> static PassOwnPtr<T> pass(OwnPtr<T>& x) { return std::move(x); }
+    template <typename T> static std::unique_ptr<T> pass(std::unique_ptr<T>& x) { return std::move(x); }
 
     template <typename S, typename T>
     class Base : public WebCallbacks<WebPassType<typename S::WebType>, WebPassType<typename T::WebType>> {
diff --git a/third_party/WebKit/Source/bindings/core/v8/DOMDataStore.h b/third_party/WebKit/Source/bindings/core/v8/DOMDataStore.h
index 0798125..23eab6a 100644
--- a/third_party/WebKit/Source/bindings/core/v8/DOMDataStore.h
+++ b/third_party/WebKit/Source/bindings/core/v8/DOMDataStore.h
@@ -37,8 +37,9 @@
 #include "bindings/core/v8/WrapperTypeInfo.h"
 #include "wtf/Allocator.h"
 #include "wtf/Noncopyable.h"
-#include "wtf/OwnPtr.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/StdLibExtras.h"
+#include <memory>
 #include <v8.h>
 
 namespace blink {
@@ -52,7 +53,7 @@
     DOMDataStore(v8::Isolate* isolate, bool isMainWorld)
         : m_isMainWorld(isMainWorld)
         // We never use |m_wrapperMap| when it's the main world.
-        , m_wrapperMap(adoptPtr(
+        , m_wrapperMap(wrapUnique(
             isMainWorld
             ? nullptr
             : new DOMWrapperMap<ScriptWrappable>(isolate))) { }
@@ -216,7 +217,7 @@
     }
 
     bool m_isMainWorld;
-    OwnPtr<DOMWrapperMap<ScriptWrappable>> m_wrapperMap;
+    std::unique_ptr<DOMWrapperMap<ScriptWrappable>> m_wrapperMap;
 };
 
 template<>
diff --git a/third_party/WebKit/Source/bindings/core/v8/DOMWrapperWorld.cpp b/third_party/WebKit/Source/bindings/core/v8/DOMWrapperWorld.cpp
index ee0a071..40a6326e 100644
--- a/third_party/WebKit/Source/bindings/core/v8/DOMWrapperWorld.cpp
+++ b/third_party/WebKit/Source/bindings/core/v8/DOMWrapperWorld.cpp
@@ -40,7 +40,9 @@
 #include "bindings/core/v8/WrapperTypeInfo.h"
 #include "core/dom/ExecutionContext.h"
 #include "wtf/HashTraits.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/StdLibExtras.h"
+#include <memory>
 
 namespace blink {
 
@@ -69,9 +71,9 @@
 template<typename T>
 class DOMObjectHolder : public DOMObjectHolderBase {
 public:
-    static PassOwnPtr<DOMObjectHolder<T>> create(v8::Isolate* isolate, T* object, v8::Local<v8::Value> wrapper)
+    static std::unique_ptr<DOMObjectHolder<T>> create(v8::Isolate* isolate, T* object, v8::Local<v8::Value> wrapper)
     {
-        return adoptPtr(new DOMObjectHolder(isolate, object, wrapper));
+        return wrapUnique(new DOMObjectHolder(isolate, object, wrapper));
     }
 
 private:
@@ -94,7 +96,7 @@
 DOMWrapperWorld::DOMWrapperWorld(v8::Isolate* isolate, int worldId, int extensionGroup)
     : m_worldId(worldId)
     , m_extensionGroup(extensionGroup)
-    , m_domDataStore(adoptPtr(new DOMDataStore(isolate, isMainWorld())))
+    , m_domDataStore(wrapUnique(new DOMDataStore(isolate, isMainWorld())))
 {
 }
 
@@ -305,7 +307,7 @@
 
 template void DOMWrapperWorld::registerDOMObjectHolder(v8::Isolate*, ScriptFunction*, v8::Local<v8::Value>);
 
-void DOMWrapperWorld::registerDOMObjectHolderInternal(PassOwnPtr<DOMObjectHolderBase> holderBase)
+void DOMWrapperWorld::registerDOMObjectHolderInternal(std::unique_ptr<DOMObjectHolderBase> holderBase)
 {
     ASSERT(!m_domObjectHolders.contains(holderBase.get()));
     holderBase->setWorld(this);
diff --git a/third_party/WebKit/Source/bindings/core/v8/DOMWrapperWorld.h b/third_party/WebKit/Source/bindings/core/v8/DOMWrapperWorld.h
index 6fa14ed..ae73701 100644
--- a/third_party/WebKit/Source/bindings/core/v8/DOMWrapperWorld.h
+++ b/third_party/WebKit/Source/bindings/core/v8/DOMWrapperWorld.h
@@ -37,6 +37,7 @@
 #include "wtf/PassRefPtr.h"
 #include "wtf/RefCounted.h"
 #include "wtf/RefPtr.h"
+#include <memory>
 #include <v8.h>
 
 namespace blink {
@@ -123,15 +124,15 @@
     DOMWrapperWorld(v8::Isolate*, int worldId, int extensionGroup);
 
     static void weakCallbackForDOMObjectHolder(const v8::WeakCallbackInfo<DOMObjectHolderBase>&);
-    void registerDOMObjectHolderInternal(PassOwnPtr<DOMObjectHolderBase>);
+    void registerDOMObjectHolderInternal(std::unique_ptr<DOMObjectHolderBase>);
     void unregisterDOMObjectHolder(DOMObjectHolderBase*);
 
     static unsigned isolatedWorldCount;
 
     const int m_worldId;
     const int m_extensionGroup;
-    OwnPtr<DOMDataStore> m_domDataStore;
-    HashSet<OwnPtr<DOMObjectHolderBase>> m_domObjectHolders;
+    std::unique_ptr<DOMDataStore> m_domDataStore;
+    HashSet<std::unique_ptr<DOMObjectHolderBase>> m_domObjectHolders;
 };
 
 } // namespace blink
diff --git a/third_party/WebKit/Source/bindings/core/v8/DocumentWriteEvaluator.h b/third_party/WebKit/Source/bindings/core/v8/DocumentWriteEvaluator.h
index b7f1914..1dffc3e 100644
--- a/third_party/WebKit/Source/bindings/core/v8/DocumentWriteEvaluator.h
+++ b/third_party/WebKit/Source/bindings/core/v8/DocumentWriteEvaluator.h
@@ -11,6 +11,8 @@
 #include "core/html/parser/CompactHTMLToken.h"
 #include "core/html/parser/HTMLToken.h"
 #include "core/html/parser/HTMLTokenizer.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
@@ -26,9 +28,9 @@
     // For unit testing.
     DocumentWriteEvaluator(const String& pathName, const String& hostName, const String& protocol, const String& userAgent);
 
-    static PassOwnPtr<DocumentWriteEvaluator> create(const Document& document)
+    static std::unique_ptr<DocumentWriteEvaluator> create(const Document& document)
     {
-        return adoptPtr(new DocumentWriteEvaluator(document));
+        return wrapUnique(new DocumentWriteEvaluator(document));
     }
     virtual ~DocumentWriteEvaluator();
 
diff --git a/third_party/WebKit/Source/bindings/core/v8/Microtask.h b/third_party/WebKit/Source/bindings/core/v8/Microtask.h
index 2a686dc..c27774f 100644
--- a/third_party/WebKit/Source/bindings/core/v8/Microtask.h
+++ b/third_party/WebKit/Source/bindings/core/v8/Microtask.h
@@ -35,7 +35,6 @@
 #include "public/platform/WebTaskRunner.h"
 #include "wtf/Allocator.h"
 #include "wtf/Functional.h"
-#include "wtf/PassOwnPtr.h"
 #include <v8.h>
 
 namespace blink {
diff --git a/third_party/WebKit/Source/bindings/core/v8/RejectedPromises.cpp b/third_party/WebKit/Source/bindings/core/v8/RejectedPromises.cpp
index 2661227..b06ec4f 100644
--- a/third_party/WebKit/Source/bindings/core/v8/RejectedPromises.cpp
+++ b/third_party/WebKit/Source/bindings/core/v8/RejectedPromises.cpp
@@ -19,6 +19,8 @@
 #include "public/platform/WebTaskRunner.h"
 #include "public/platform/WebThread.h"
 #include "wtf/Functional.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
@@ -26,9 +28,9 @@
 
 class RejectedPromises::Message final {
 public:
-    static PassOwnPtr<Message> create(ScriptState* scriptState, v8::Local<v8::Promise> promise, v8::Local<v8::Value> exception, const String& errorMessage, PassOwnPtr<SourceLocation> location, AccessControlStatus corsStatus)
+    static std::unique_ptr<Message> create(ScriptState* scriptState, v8::Local<v8::Promise> promise, v8::Local<v8::Value> exception, const String& errorMessage, std::unique_ptr<SourceLocation> location, AccessControlStatus corsStatus)
     {
-        return adoptPtr(new Message(scriptState, promise, exception, errorMessage, std::move(location), corsStatus));
+        return wrapUnique(new Message(scriptState, promise, exception, errorMessage, std::move(location), corsStatus));
     }
 
     bool isCollected()
@@ -145,7 +147,7 @@
     }
 
 private:
-    Message(ScriptState* scriptState, v8::Local<v8::Promise> promise, v8::Local<v8::Value> exception, const String& errorMessage, PassOwnPtr<SourceLocation> location, AccessControlStatus corsStatus)
+    Message(ScriptState* scriptState, v8::Local<v8::Promise> promise, v8::Local<v8::Value> exception, const String& errorMessage, std::unique_ptr<SourceLocation> location, AccessControlStatus corsStatus)
         : m_scriptState(scriptState)
         , m_promise(scriptState->isolate(), promise)
         , m_exception(scriptState->isolate(), exception)
@@ -175,7 +177,7 @@
     ScopedPersistent<v8::Value> m_exception;
     String m_errorMessage;
     String m_resourceName;
-    OwnPtr<SourceLocation> m_location;
+    std::unique_ptr<SourceLocation> m_location;
     unsigned m_consoleMessageId;
     bool m_collected;
     bool m_shouldLogToConsole;
@@ -190,7 +192,7 @@
 {
 }
 
-void RejectedPromises::rejectedWithNoHandler(ScriptState* scriptState, v8::PromiseRejectMessage data, const String& errorMessage, PassOwnPtr<SourceLocation> location, AccessControlStatus corsStatus)
+void RejectedPromises::rejectedWithNoHandler(ScriptState* scriptState, v8::PromiseRejectMessage data, const String& errorMessage, std::unique_ptr<SourceLocation> location, AccessControlStatus corsStatus)
 {
     m_queue.append(Message::create(scriptState, data.GetPromise(), data.GetValue(), errorMessage, std::move(location), corsStatus));
 }
@@ -207,19 +209,19 @@
 
     // Then look it up in the reported errors.
     for (size_t i = 0; i < m_reportedAsErrors.size(); ++i) {
-        OwnPtr<Message>& message = m_reportedAsErrors.at(i);
+        std::unique_ptr<Message>& message = m_reportedAsErrors.at(i);
         if (!message->isCollected() && message->hasPromise(data.GetPromise())) {
             message->makePromiseStrong();
-            Platform::current()->currentThread()->scheduler()->timerTaskRunner()->postTask(BLINK_FROM_HERE, bind(&RejectedPromises::revokeNow, this, passed(std::move(message))));
+            Platform::current()->currentThread()->scheduler()->timerTaskRunner()->postTask(BLINK_FROM_HERE, WTF::bind(&RejectedPromises::revokeNow, this, passed(std::move(message))));
             m_reportedAsErrors.remove(i);
             return;
         }
     }
 }
 
-PassOwnPtr<RejectedPromises::MessageQueue> RejectedPromises::createMessageQueue()
+std::unique_ptr<RejectedPromises::MessageQueue> RejectedPromises::createMessageQueue()
 {
-    return adoptPtr(new MessageQueue());
+    return wrapUnique(new MessageQueue());
 }
 
 void RejectedPromises::dispose()
@@ -227,7 +229,7 @@
     if (m_queue.isEmpty())
         return;
 
-    OwnPtr<MessageQueue> queue = createMessageQueue();
+    std::unique_ptr<MessageQueue> queue = createMessageQueue();
     queue->swap(m_queue);
     processQueueNow(std::move(queue));
 }
@@ -237,12 +239,12 @@
     if (m_queue.isEmpty())
         return;
 
-    OwnPtr<MessageQueue> queue = createMessageQueue();
+    std::unique_ptr<MessageQueue> queue = createMessageQueue();
     queue->swap(m_queue);
-    Platform::current()->currentThread()->scheduler()->timerTaskRunner()->postTask(BLINK_FROM_HERE, bind(&RejectedPromises::processQueueNow, PassRefPtr<RejectedPromises>(this), passed(std::move(queue))));
+    Platform::current()->currentThread()->scheduler()->timerTaskRunner()->postTask(BLINK_FROM_HERE, WTF::bind(&RejectedPromises::processQueueNow, PassRefPtr<RejectedPromises>(this), passed(std::move(queue))));
 }
 
-void RejectedPromises::processQueueNow(PassOwnPtr<MessageQueue> queue)
+void RejectedPromises::processQueueNow(std::unique_ptr<MessageQueue> queue)
 {
     // Remove collected handlers.
     for (size_t i = 0; i < m_reportedAsErrors.size();) {
@@ -253,7 +255,7 @@
     }
 
     while (!queue->isEmpty()) {
-        OwnPtr<Message> message = queue->takeFirst();
+        std::unique_ptr<Message> message = queue->takeFirst();
         if (message->isCollected())
             continue;
         if (!message->hasHandler()) {
@@ -266,7 +268,7 @@
     }
 }
 
-void RejectedPromises::revokeNow(PassOwnPtr<Message> message)
+void RejectedPromises::revokeNow(std::unique_ptr<Message> message)
 {
     message->revoke();
 }
diff --git a/third_party/WebKit/Source/bindings/core/v8/RejectedPromises.h b/third_party/WebKit/Source/bindings/core/v8/RejectedPromises.h
index 5fd0239f..add3226 100644
--- a/third_party/WebKit/Source/bindings/core/v8/RejectedPromises.h
+++ b/third_party/WebKit/Source/bindings/core/v8/RejectedPromises.h
@@ -11,6 +11,7 @@
 #include "wtf/Forward.h"
 #include "wtf/RefCounted.h"
 #include "wtf/Vector.h"
+#include <memory>
 
 namespace v8 {
 class PromiseRejectMessage;
@@ -31,7 +32,7 @@
     ~RejectedPromises();
     void dispose();
 
-    void rejectedWithNoHandler(ScriptState*, v8::PromiseRejectMessage, const String& errorMessage, PassOwnPtr<SourceLocation>, AccessControlStatus);
+    void rejectedWithNoHandler(ScriptState*, v8::PromiseRejectMessage, const String& errorMessage, std::unique_ptr<SourceLocation>, AccessControlStatus);
     void handlerAdded(v8::PromiseRejectMessage);
 
     void processQueue();
@@ -41,14 +42,14 @@
 
     RejectedPromises();
 
-    using MessageQueue = Deque<OwnPtr<Message>>;
-    PassOwnPtr<MessageQueue> createMessageQueue();
+    using MessageQueue = Deque<std::unique_ptr<Message>>;
+    std::unique_ptr<MessageQueue> createMessageQueue();
 
-    void processQueueNow(PassOwnPtr<MessageQueue>);
-    void revokeNow(PassOwnPtr<Message>);
+    void processQueueNow(std::unique_ptr<MessageQueue>);
+    void revokeNow(std::unique_ptr<Message>);
 
     MessageQueue m_queue;
-    Vector<OwnPtr<Message>> m_reportedAsErrors;
+    Vector<std::unique_ptr<Message>> m_reportedAsErrors;
 };
 
 } // namespace blink
diff --git a/third_party/WebKit/Source/bindings/core/v8/ScopedPersistent.h b/third_party/WebKit/Source/bindings/core/v8/ScopedPersistent.h
index 83b87cd..c1d44ec 100644
--- a/third_party/WebKit/Source/bindings/core/v8/ScopedPersistent.h
+++ b/third_party/WebKit/Source/bindings/core/v8/ScopedPersistent.h
@@ -33,6 +33,7 @@
 
 #include "wtf/Allocator.h"
 #include "wtf/Noncopyable.h"
+#include <memory>
 #include <v8.h>
 
 namespace blink {
@@ -92,7 +93,7 @@
         m_handle.Reset(isolate, handle);
     }
 
-    // Note: This is clear in the OwnPtr sense, not the v8::Handle sense.
+    // Note: This is clear in the std::unique_ptr sense, not the v8::Handle sense.
     void clear()
     {
         m_handle.Reset();
diff --git a/third_party/WebKit/Source/bindings/core/v8/ScriptPromisePropertyBase.cpp b/third_party/WebKit/Source/bindings/core/v8/ScriptPromisePropertyBase.cpp
index ad130a9..7c23a8f1 100644
--- a/third_party/WebKit/Source/bindings/core/v8/ScriptPromisePropertyBase.cpp
+++ b/third_party/WebKit/Source/bindings/core/v8/ScriptPromisePropertyBase.cpp
@@ -9,6 +9,8 @@
 #include "bindings/core/v8/V8Binding.h"
 #include "bindings/core/v8/V8HiddenValue.h"
 #include "core/dom/ExecutionContext.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
@@ -81,7 +83,7 @@
     v8::HandleScope handleScope(m_isolate);
     size_t i = 0;
     while (i < m_wrappers.size()) {
-        const OwnPtr<ScopedPersistent<v8::Object>>& persistent = m_wrappers[i];
+        const std::unique_ptr<ScopedPersistent<v8::Object>>& persistent = m_wrappers[i];
         if (persistent->isEmpty()) {
             // wrapper has died.
             // Since v8 GC can run during the iteration and clear the reference,
@@ -129,7 +131,7 @@
     v8::Local<v8::Context> context = scriptState->context();
     size_t i = 0;
     while (i < m_wrappers.size()) {
-        const OwnPtr<ScopedPersistent<v8::Object>>& persistent = m_wrappers[i];
+        const std::unique_ptr<ScopedPersistent<v8::Object>>& persistent = m_wrappers[i];
         if (persistent->isEmpty()) {
             // wrapper has died.
             // Since v8 GC can run during the iteration and clear the reference,
@@ -144,7 +146,7 @@
         ++i;
     }
     v8::Local<v8::Object> wrapper = holder(m_isolate, context->Global());
-    OwnPtr<ScopedPersistent<v8::Object>> weakPersistent = adoptPtr(new ScopedPersistent<v8::Object>);
+    std::unique_ptr<ScopedPersistent<v8::Object>> weakPersistent = wrapUnique(new ScopedPersistent<v8::Object>);
     weakPersistent->set(m_isolate, wrapper);
     weakPersistent->setWeak(weakPersistent.get(), &clearHandle);
     m_wrappers.append(std::move(weakPersistent));
diff --git a/third_party/WebKit/Source/bindings/core/v8/ScriptPromisePropertyBase.h b/third_party/WebKit/Source/bindings/core/v8/ScriptPromisePropertyBase.h
index 2aa2cdc..4b0a07f2 100644
--- a/third_party/WebKit/Source/bindings/core/v8/ScriptPromisePropertyBase.h
+++ b/third_party/WebKit/Source/bindings/core/v8/ScriptPromisePropertyBase.h
@@ -11,9 +11,9 @@
 #include "core/CoreExport.h"
 #include "core/dom/ContextLifecycleObserver.h"
 #include "wtf/Compiler.h"
-#include "wtf/OwnPtr.h"
 #include "wtf/RefCounted.h"
 #include "wtf/Vector.h"
+#include <memory>
 #include <v8.h>
 
 namespace blink {
@@ -63,7 +63,7 @@
     NEVER_INLINE void resetBase();
 
 private:
-    typedef Vector<OwnPtr<ScopedPersistent<v8::Object>>> WeakPersistentSet;
+    typedef Vector<std::unique_ptr<ScopedPersistent<v8::Object>>> WeakPersistentSet;
 
     void resolveOrRejectInternal(v8::Local<v8::Promise::Resolver>);
     v8::Local<v8::Object> ensureHolderWrapper(ScriptState*);
diff --git a/third_party/WebKit/Source/bindings/core/v8/ScriptPromisePropertyTest.cpp b/third_party/WebKit/Source/bindings/core/v8/ScriptPromisePropertyTest.cpp
index b39a29e3..1cc2e7f 100644
--- a/third_party/WebKit/Source/bindings/core/v8/ScriptPromisePropertyTest.cpp
+++ b/third_party/WebKit/Source/bindings/core/v8/ScriptPromisePropertyTest.cpp
@@ -18,10 +18,9 @@
 #include "core/testing/GarbageCollectedScriptWrappable.h"
 #include "platform/heap/Handle.h"
 #include "testing/gtest/include/gtest/gtest.h"
-#include "wtf/OwnPtr.h"
-#include "wtf/PassOwnPtr.h"
 #include "wtf/PassRefPtr.h"
 #include "wtf/RefPtr.h"
+#include <memory>
 #include <v8.h>
 
 using namespace blink;
@@ -144,7 +143,7 @@
     }
 
 private:
-    OwnPtr<DummyPageHolder> m_page;
+    std::unique_ptr<DummyPageHolder> m_page;
     RefPtr<ScriptState> m_otherScriptState;
 };
 
diff --git a/third_party/WebKit/Source/bindings/core/v8/ScriptPromiseResolverTest.cpp b/third_party/WebKit/Source/bindings/core/v8/ScriptPromiseResolverTest.cpp
index 10a1cf5..e1f7e55 100644
--- a/third_party/WebKit/Source/bindings/core/v8/ScriptPromiseResolverTest.cpp
+++ b/third_party/WebKit/Source/bindings/core/v8/ScriptPromiseResolverTest.cpp
@@ -11,6 +11,7 @@
 #include "core/dom/Document.h"
 #include "core/testing/DummyPageHolder.h"
 #include "testing/gtest/include/gtest/gtest.h"
+#include <memory>
 #include <v8.h>
 
 namespace blink {
@@ -62,7 +63,7 @@
         v8::MicrotasksScope::PerformCheckpoint(isolate());
     }
 
-    OwnPtr<DummyPageHolder> m_pageHolder;
+    std::unique_ptr<DummyPageHolder> m_pageHolder;
     ScriptState* getScriptState() const { return ScriptState::forMainWorld(&m_pageHolder->frame()); }
     ExecutionContext* getExecutionContext() const { return &m_pageHolder->document(); }
     v8::Isolate* isolate() const { return getScriptState()->isolate(); }
diff --git a/third_party/WebKit/Source/bindings/core/v8/ScriptState.h b/third_party/WebKit/Source/bindings/core/v8/ScriptState.h
index b5555e2..58d48a9 100644
--- a/third_party/WebKit/Source/bindings/core/v8/ScriptState.h
+++ b/third_party/WebKit/Source/bindings/core/v8/ScriptState.h
@@ -9,6 +9,7 @@
 #include "bindings/core/v8/V8PerContextData.h"
 #include "core/CoreExport.h"
 #include "wtf/RefCounted.h"
+#include <memory>
 #include <v8-debug.h>
 #include <v8.h>
 
@@ -115,11 +116,11 @@
     // This RefPtr doesn't cause a cycle because all persistent handles that DOMWrapperWorld holds are weak.
     RefPtr<DOMWrapperWorld> m_world;
 
-    // This OwnPtr causes a cycle:
-    // V8PerContextData --(Persistent)--> v8::Context --(RefPtr)--> ScriptState --(OwnPtr)--> V8PerContextData
-    // So you must explicitly clear the OwnPtr by calling disposePerContextData()
+    // This std::unique_ptr causes a cycle:
+    // V8PerContextData --(Persistent)--> v8::Context --(RefPtr)--> ScriptState --(std::unique_ptr)--> V8PerContextData
+    // So you must explicitly clear the std::unique_ptr by calling disposePerContextData()
     // once you no longer need V8PerContextData. Otherwise, the v8::Context will leak.
-    OwnPtr<V8PerContextData> m_perContextData;
+    std::unique_ptr<V8PerContextData> m_perContextData;
 
 #if ENABLE(ASSERT)
     bool m_globalObjectDetached;
diff --git a/third_party/WebKit/Source/bindings/core/v8/ScriptStreamer.cpp b/third_party/WebKit/Source/bindings/core/v8/ScriptStreamer.cpp
index 642cb5c..d286f91 100644
--- a/third_party/WebKit/Source/bindings/core/v8/ScriptStreamer.cpp
+++ b/third_party/WebKit/Source/bindings/core/v8/ScriptStreamer.cpp
@@ -18,7 +18,9 @@
 #include "platform/TraceEvent.h"
 #include "public/platform/WebScheduler.h"
 #include "wtf/Deque.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/text/TextEncodingRegistry.h"
+#include <memory>
 
 namespace blink {
 
@@ -179,7 +181,7 @@
         , m_queueTailPosition(0)
         , m_bookmarkPosition(0)
         , m_lengthOfBOM(0)
-        , m_loadingTaskRunner(adoptPtr(loadingTaskRunner->clone()))
+        , m_loadingTaskRunner(wrapUnique(loadingTaskRunner->clone()))
     {
     }
 
@@ -387,7 +389,7 @@
     // m_queueLeadPosition references with a mutex.
     size_t m_lengthOfBOM; // Used by both threads; guarded by m_mutex.
 
-    OwnPtr<WebTaskRunner> m_loadingTaskRunner;
+    std::unique_ptr<WebTaskRunner> m_loadingTaskRunner;
 };
 
 size_t ScriptStreamer::s_smallScriptThreshold = 30 * 1024;
@@ -500,7 +502,7 @@
         const char* data = 0;
         size_t length = resource->resourceBuffer()->getSomeData(data, static_cast<size_t>(0));
 
-        OwnPtr<TextResourceDecoder> decoder(TextResourceDecoder::create("application/javascript", resource->encoding()));
+        std::unique_ptr<TextResourceDecoder> decoder(TextResourceDecoder::create("application/javascript", resource->encoding()));
         lengthOfBOM = decoder->checkForBOM(data, length);
 
         // Maybe the encoding changed because we saw the BOM; get the encoding
@@ -533,10 +535,10 @@
         ASSERT(!m_source);
         m_stream = new SourceStream(m_loadingTaskRunner.get());
         // m_source takes ownership of m_stream.
-        m_source = adoptPtr(new v8::ScriptCompiler::StreamedSource(m_stream, m_encoding));
+        m_source = wrapUnique(new v8::ScriptCompiler::StreamedSource(m_stream, m_encoding));
 
         ScriptState::Scope scope(m_scriptState.get());
-        OwnPtr<v8::ScriptCompiler::ScriptStreamingTask> scriptStreamingTask(adoptPtr(v8::ScriptCompiler::StartStreamingScript(m_scriptState->isolate(), m_source.get(), m_compileOptions)));
+        std::unique_ptr<v8::ScriptCompiler::ScriptStreamingTask> scriptStreamingTask(wrapUnique(v8::ScriptCompiler::StartStreamingScript(m_scriptState->isolate(), m_source.get(), m_compileOptions)));
         if (!scriptStreamingTask) {
             // V8 cannot stream the script.
             suppressStreaming();
@@ -589,7 +591,7 @@
     , m_scriptURLString(m_resource->url().copy().getString())
     , m_scriptResourceIdentifier(m_resource->identifier())
     , m_encoding(v8::ScriptCompiler::StreamedSource::TWO_BYTE) // Unfortunately there's no dummy encoding value in the enum; let's use one we don't stream.
-    , m_loadingTaskRunner(adoptPtr(loadingTaskRunner->clone()))
+    , m_loadingTaskRunner(wrapUnique(loadingTaskRunner->clone()))
 {
 }
 
diff --git a/third_party/WebKit/Source/bindings/core/v8/ScriptStreamer.h b/third_party/WebKit/Source/bindings/core/v8/ScriptStreamer.h
index bf02e5b7..ac2e4e1 100644
--- a/third_party/WebKit/Source/bindings/core/v8/ScriptStreamer.h
+++ b/third_party/WebKit/Source/bindings/core/v8/ScriptStreamer.h
@@ -9,7 +9,7 @@
 #include "platform/heap/Handle.h"
 #include "wtf/Noncopyable.h"
 #include "wtf/text/WTFString.h"
-
+#include <memory>
 #include <v8.h>
 
 namespace blink {
@@ -120,7 +120,7 @@
     bool m_detached;
 
     SourceStream* m_stream;
-    OwnPtr<v8::ScriptCompiler::StreamedSource> m_source;
+    std::unique_ptr<v8::ScriptCompiler::StreamedSource> m_source;
     bool m_loadingFinished; // Whether loading from the network is done.
     // Whether the V8 side processing is done. Will be used by the main thread
     // and the streamer thread; guarded by m_mutex.
@@ -151,7 +151,7 @@
     // Encoding of the streamed script. Saved for sanity checking purposes.
     v8::ScriptCompiler::StreamedSource::Encoding m_encoding;
 
-    OwnPtr<WebTaskRunner> m_loadingTaskRunner;
+    std::unique_ptr<WebTaskRunner> m_loadingTaskRunner;
 };
 
 } // namespace blink
diff --git a/third_party/WebKit/Source/bindings/core/v8/ScriptStreamerTest.cpp b/third_party/WebKit/Source/bindings/core/v8/ScriptStreamerTest.cpp
index 755bc90..f2227688 100644
--- a/third_party/WebKit/Source/bindings/core/v8/ScriptStreamerTest.cpp
+++ b/third_party/WebKit/Source/bindings/core/v8/ScriptStreamerTest.cpp
@@ -18,6 +18,7 @@
 #include "public/platform/Platform.h"
 #include "public/platform/WebScheduler.h"
 #include "testing/gtest/include/gtest/gtest.h"
+#include <memory>
 #include <v8.h>
 
 namespace blink {
@@ -84,7 +85,7 @@
     }
 
     WebTaskRunner* m_loadingTaskRunner; // NOT OWNED
-    OwnPtr<Settings> m_settings;
+    std::unique_ptr<Settings> m_settings;
     // The Resource and PendingScript where we stream from. These don't really
     // fetch any data outside the test; the test controls the data by calling
     // ScriptResource::appendData.
diff --git a/third_party/WebKit/Source/bindings/core/v8/ScriptStreamerThread.cpp b/third_party/WebKit/Source/bindings/core/v8/ScriptStreamerThread.cpp
index f6f1fed2..0eec3d3 100644
--- a/third_party/WebKit/Source/bindings/core/v8/ScriptStreamerThread.cpp
+++ b/third_party/WebKit/Source/bindings/core/v8/ScriptStreamerThread.cpp
@@ -10,6 +10,8 @@
 #include "public/platform/Platform.h"
 #include "public/platform/WebTaskRunner.h"
 #include "public/platform/WebTraceLocation.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
@@ -72,11 +74,11 @@
 WebThread& ScriptStreamerThread::platformThread()
 {
     if (!isRunning())
-        m_thread = adoptPtr(Platform::current()->createThread("ScriptStreamerThread"));
+        m_thread = wrapUnique(Platform::current()->createThread("ScriptStreamerThread"));
     return *m_thread;
 }
 
-void ScriptStreamerThread::runScriptStreamingTask(PassOwnPtr<v8::ScriptCompiler::ScriptStreamingTask> task, ScriptStreamer* streamer)
+void ScriptStreamerThread::runScriptStreamingTask(std::unique_ptr<v8::ScriptCompiler::ScriptStreamingTask> task, ScriptStreamer* streamer)
 {
     TRACE_EVENT1("v8,devtools.timeline", "v8.parseOnBackground", "data", InspectorParseScriptEvent::data(streamer->scriptResourceIdentifier(), streamer->scriptURLString()));
     // Running the task can and will block: SourceStream::GetSomeData will get
diff --git a/third_party/WebKit/Source/bindings/core/v8/ScriptStreamerThread.h b/third_party/WebKit/Source/bindings/core/v8/ScriptStreamerThread.h
index 65a5dfbc..9eb13bc 100644
--- a/third_party/WebKit/Source/bindings/core/v8/ScriptStreamerThread.h
+++ b/third_party/WebKit/Source/bindings/core/v8/ScriptStreamerThread.h
@@ -9,9 +9,7 @@
 #include "platform/TaskSynchronizer.h"
 #include "public/platform/WebThread.h"
 #include "wtf/Functional.h"
-#include "wtf/OwnPtr.h"
-#include "wtf/PassOwnPtr.h"
-
+#include <memory>
 #include <v8.h>
 
 namespace blink {
@@ -37,7 +35,7 @@
 
     void taskDone();
 
-    static void runScriptStreamingTask(PassOwnPtr<v8::ScriptCompiler::ScriptStreamingTask>, ScriptStreamer*);
+    static void runScriptStreamingTask(std::unique_ptr<v8::ScriptCompiler::ScriptStreamingTask>, ScriptStreamer*);
 
 private:
     ScriptStreamerThread()
@@ -52,7 +50,7 @@
 
     // At the moment, we only use one thread, so we can only stream one script
     // at a time. FIXME: Use a thread pool and stream multiple scripts.
-    OwnPtr<WebThread> m_thread;
+    std::unique_ptr<WebThread> m_thread;
     bool m_runningTask;
     mutable Mutex m_mutex; // Guards m_runningTask.
 };
diff --git a/third_party/WebKit/Source/bindings/core/v8/ScriptValueSerializer.cpp b/third_party/WebKit/Source/bindings/core/v8/ScriptValueSerializer.cpp
index bafbf8f..e6e90663 100644
--- a/third_party/WebKit/Source/bindings/core/v8/ScriptValueSerializer.cpp
+++ b/third_party/WebKit/Source/bindings/core/v8/ScriptValueSerializer.cpp
@@ -29,6 +29,7 @@
 #include "wtf/DateMath.h"
 #include "wtf/text/StringHash.h"
 #include "wtf/text/StringUTF8Adaptor.h"
+#include <memory>
 
 // FIXME: consider crashing in debug mode on deserialization errors
 // NOTE: be sure to change wireFormatVersion as necessary!
@@ -1106,7 +1107,7 @@
         m_writer.writeTransferredImageBitmap(index);
     } else {
         greyObject(object);
-        OwnPtr<uint8_t[]> pixelData = imageBitmap->copyBitmapData(PremultiplyAlpha);
+        std::unique_ptr<uint8_t[]> pixelData = imageBitmap->copyBitmapData(PremultiplyAlpha);
         m_writer.writeImageBitmap(imageBitmap->width(), imageBitmap->height(), pixelData.get(), imageBitmap->width() * imageBitmap->height() * 4);
     }
     return nullptr;
diff --git a/third_party/WebKit/Source/bindings/core/v8/SerializedScriptValue.cpp b/third_party/WebKit/Source/bindings/core/v8/SerializedScriptValue.cpp
index 407a22ef..b2c7ce23 100644
--- a/third_party/WebKit/Source/bindings/core/v8/SerializedScriptValue.cpp
+++ b/third_party/WebKit/Source/bindings/core/v8/SerializedScriptValue.cpp
@@ -52,9 +52,11 @@
 #include "platform/heap/Handle.h"
 #include "wtf/Assertions.h"
 #include "wtf/ByteOrder.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/Vector.h"
 #include "wtf/text/StringBuffer.h"
 #include "wtf/text/StringHash.h"
+#include <memory>
 
 namespace blink {
 
@@ -176,7 +178,7 @@
         }
     }
 
-    OwnPtr<ImageBitmapContentsArray> contents = adoptPtr(new ImageBitmapContentsArray);
+    std::unique_ptr<ImageBitmapContentsArray> contents = wrapUnique(new ImageBitmapContentsArray);
     HeapHashSet<Member<ImageBitmap>> visited;
     for (size_t i = 0; i < imageBitmaps.size(); ++i) {
         if (visited.contains(imageBitmaps[i]))
@@ -221,7 +223,7 @@
         }
     }
 
-    OwnPtr<ArrayBufferContentsArray> contents = adoptPtr(new ArrayBufferContentsArray(arrayBuffers.size()));
+    std::unique_ptr<ArrayBufferContentsArray> contents = wrapUnique(new ArrayBufferContentsArray(arrayBuffers.size()));
 
     HeapHashSet<Member<DOMArrayBufferBase>> visited;
     for (size_t i = 0; i < arrayBuffers.size(); ++i) {
diff --git a/third_party/WebKit/Source/bindings/core/v8/SerializedScriptValue.h b/third_party/WebKit/Source/bindings/core/v8/SerializedScriptValue.h
index c3261ae..5fbefc2 100644
--- a/third_party/WebKit/Source/bindings/core/v8/SerializedScriptValue.h
+++ b/third_party/WebKit/Source/bindings/core/v8/SerializedScriptValue.h
@@ -36,14 +36,10 @@
 #include "core/CoreExport.h"
 #include "wtf/HashMap.h"
 #include "wtf/ThreadSafeRefCounted.h"
+#include "wtf/typed_arrays/ArrayBufferContents.h"
+#include <memory>
 #include <v8.h>
 
-namespace WTF {
-
-class ArrayBufferContents;
-
-}
-
 namespace blink {
 
 class BlobDataHandle;
@@ -131,8 +127,8 @@
 
 private:
     String m_data;
-    OwnPtr<ArrayBufferContentsArray> m_arrayBufferContentsArray;
-    OwnPtr<ImageBitmapContentsArray> m_imageBitmapContentsArray;
+    std::unique_ptr<ArrayBufferContentsArray> m_arrayBufferContentsArray;
+    std::unique_ptr<ImageBitmapContentsArray> m_imageBitmapContentsArray;
     BlobDataHandleMap m_blobDataHandles;
     intptr_t m_externallyAllocatedMemory;
 
diff --git a/third_party/WebKit/Source/bindings/core/v8/SourceLocation.cpp b/third_party/WebKit/Source/bindings/core/v8/SourceLocation.cpp
index 4195437..61a7f42 100644
--- a/third_party/WebKit/Source/bindings/core/v8/SourceLocation.cpp
+++ b/third_party/WebKit/Source/bindings/core/v8/SourceLocation.cpp
@@ -15,6 +15,8 @@
 #include "platform/ScriptForbiddenScope.h"
 #include "platform/TracedValue.h"
 #include "platform/v8_inspector/public/V8Debugger.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
@@ -38,7 +40,7 @@
 }
 
 // static
-PassOwnPtr<SourceLocation> SourceLocation::capture(const String& url, unsigned lineNumber, unsigned columnNumber)
+std::unique_ptr<SourceLocation> SourceLocation::capture(const String& url, unsigned lineNumber, unsigned columnNumber)
 {
     std::unique_ptr<V8StackTrace> stackTrace = captureStackTrace(false);
     if (stackTrace && !stackTrace->isEmpty())
@@ -47,7 +49,7 @@
 }
 
 // static
-PassOwnPtr<SourceLocation> SourceLocation::capture(ExecutionContext* executionContext)
+std::unique_ptr<SourceLocation> SourceLocation::capture(ExecutionContext* executionContext)
 {
     std::unique_ptr<V8StackTrace> stackTrace = captureStackTrace(false);
     if (stackTrace && !stackTrace->isEmpty())
@@ -67,7 +69,7 @@
 }
 
 // static
-PassOwnPtr<SourceLocation> SourceLocation::fromMessage(v8::Isolate* isolate, v8::Local<v8::Message> message, ExecutionContext* executionContext)
+std::unique_ptr<SourceLocation> SourceLocation::fromMessage(v8::Isolate* isolate, v8::Local<v8::Message> message, ExecutionContext* executionContext)
 {
     v8::Local<v8::StackTrace> stack = message->GetStackTrace();
     std::unique_ptr<V8StackTrace> stackTrace = nullptr;
@@ -98,23 +100,23 @@
 }
 
 // static
-PassOwnPtr<SourceLocation> SourceLocation::create(const String& url, unsigned lineNumber, unsigned columnNumber, std::unique_ptr<V8StackTrace> stackTrace, int scriptId)
+std::unique_ptr<SourceLocation> SourceLocation::create(const String& url, unsigned lineNumber, unsigned columnNumber, std::unique_ptr<V8StackTrace> stackTrace, int scriptId)
 {
-    return adoptPtr(new SourceLocation(url, lineNumber, columnNumber, std::move(stackTrace), scriptId));
+    return wrapUnique(new SourceLocation(url, lineNumber, columnNumber, std::move(stackTrace), scriptId));
 }
 
 // static
-PassOwnPtr<SourceLocation> SourceLocation::createFromNonEmptyV8StackTrace(std::unique_ptr<V8StackTrace> stackTrace, int scriptId)
+std::unique_ptr<SourceLocation> SourceLocation::createFromNonEmptyV8StackTrace(std::unique_ptr<V8StackTrace> stackTrace, int scriptId)
 {
     // Retrieve the data before passing the ownership to SourceLocation.
     const String& url = stackTrace->topSourceURL();
     unsigned lineNumber = stackTrace->topLineNumber();
     unsigned columnNumber = stackTrace->topColumnNumber();
-    return adoptPtr(new SourceLocation(url, lineNumber, columnNumber, std::move(stackTrace), scriptId));
+    return wrapUnique(new SourceLocation(url, lineNumber, columnNumber, std::move(stackTrace), scriptId));
 }
 
 // static
-PassOwnPtr<SourceLocation> SourceLocation::fromFunction(v8::Local<v8::Function> function)
+std::unique_ptr<SourceLocation> SourceLocation::fromFunction(v8::Local<v8::Function> function)
 {
     if (!function.IsEmpty())
         return SourceLocation::create(toCoreStringWithUndefinedOrNullCheck(function->GetScriptOrigin().ResourceName()), function->GetScriptLineNumber() + 1, function->GetScriptColumnNumber() + 1, nullptr, function->ScriptId());
@@ -122,7 +124,7 @@
 }
 
 // static
-PassOwnPtr<SourceLocation> SourceLocation::captureWithFullStackTrace()
+std::unique_ptr<SourceLocation> SourceLocation::captureWithFullStackTrace()
 {
     std::unique_ptr<V8StackTrace> stackTrace = captureStackTrace(true);
     if (stackTrace && !stackTrace->isEmpty())
@@ -158,14 +160,14 @@
     value->endArray();
 }
 
-PassOwnPtr<SourceLocation> SourceLocation::clone() const
+std::unique_ptr<SourceLocation> SourceLocation::clone() const
 {
-    return adoptPtr(new SourceLocation(m_url, m_lineNumber, m_columnNumber, m_stackTrace ? m_stackTrace->clone() : nullptr, m_scriptId));
+    return wrapUnique(new SourceLocation(m_url, m_lineNumber, m_columnNumber, m_stackTrace ? m_stackTrace->clone() : nullptr, m_scriptId));
 }
 
-PassOwnPtr<SourceLocation> SourceLocation::isolatedCopy() const
+std::unique_ptr<SourceLocation> SourceLocation::isolatedCopy() const
 {
-    return adoptPtr(new SourceLocation(m_url.isolatedCopy(), m_lineNumber, m_columnNumber, m_stackTrace ? m_stackTrace->isolatedCopy() : nullptr, m_scriptId));
+    return wrapUnique(new SourceLocation(m_url.isolatedCopy(), m_lineNumber, m_columnNumber, m_stackTrace ? m_stackTrace->isolatedCopy() : nullptr, m_scriptId));
 }
 
 std::unique_ptr<protocol::Runtime::StackTrace> SourceLocation::buildInspectorObject() const
diff --git a/third_party/WebKit/Source/bindings/core/v8/SourceLocation.h b/third_party/WebKit/Source/bindings/core/v8/SourceLocation.h
index d5b6baf..5581621 100644
--- a/third_party/WebKit/Source/bindings/core/v8/SourceLocation.h
+++ b/third_party/WebKit/Source/bindings/core/v8/SourceLocation.h
@@ -9,8 +9,8 @@
 #include "platform/CrossThreadCopier.h"
 #include "platform/v8_inspector/public/V8StackTrace.h"
 #include "wtf/Forward.h"
-#include "wtf/PassOwnPtr.h"
 #include "wtf/text/WTFString.h"
+#include <memory>
 
 namespace blink {
 
@@ -23,19 +23,19 @@
 class CORE_EXPORT SourceLocation {
 public:
     // Zero lineNumber and columnNumber mean unknown. Captures current stack trace.
-    static PassOwnPtr<SourceLocation> capture(const String& url, unsigned lineNumber, unsigned columnNumber);
+    static std::unique_ptr<SourceLocation> capture(const String& url, unsigned lineNumber, unsigned columnNumber);
 
     // Shortcut when location is unknown. Tries to capture call stack or parsing location if available.
-    static PassOwnPtr<SourceLocation> capture(ExecutionContext* = nullptr);
+    static std::unique_ptr<SourceLocation> capture(ExecutionContext* = nullptr);
 
-    static PassOwnPtr<SourceLocation> fromMessage(v8::Isolate*, v8::Local<v8::Message>, ExecutionContext*);
+    static std::unique_ptr<SourceLocation> fromMessage(v8::Isolate*, v8::Local<v8::Message>, ExecutionContext*);
 
-    static PassOwnPtr<SourceLocation> fromFunction(v8::Local<v8::Function>);
+    static std::unique_ptr<SourceLocation> fromFunction(v8::Local<v8::Function>);
 
     // Forces full stack trace.
-    static PassOwnPtr<SourceLocation> captureWithFullStackTrace();
+    static std::unique_ptr<SourceLocation> captureWithFullStackTrace();
 
-    static PassOwnPtr<SourceLocation> create(const String& url, unsigned lineNumber, unsigned columnNumber, std::unique_ptr<V8StackTrace>, int scriptId = 0);
+    static std::unique_ptr<SourceLocation> create(const String& url, unsigned lineNumber, unsigned columnNumber, std::unique_ptr<V8StackTrace>, int scriptId = 0);
     ~SourceLocation();
 
     bool isUnknown() const { return m_url.isNull() && !m_scriptId && !m_lineNumber; }
@@ -44,8 +44,8 @@
     unsigned columnNumber() const { return m_columnNumber; }
     int scriptId() const { return m_scriptId; }
 
-    PassOwnPtr<SourceLocation> clone() const;
-    PassOwnPtr<SourceLocation> isolatedCopy() const; // Safe to pass between threads.
+    std::unique_ptr<SourceLocation> clone() const;
+    std::unique_ptr<SourceLocation> isolatedCopy() const; // Safe to pass between threads.
 
     // No-op when stack trace is unknown.
     void toTracedValue(TracedValue*, const char* name) const;
@@ -58,7 +58,7 @@
 
 private:
     SourceLocation(const String& url, unsigned lineNumber, unsigned columnNumber, std::unique_ptr<V8StackTrace>, int scriptId);
-    static PassOwnPtr<SourceLocation> createFromNonEmptyV8StackTrace(std::unique_ptr<V8StackTrace>, int scriptId);
+    static std::unique_ptr<SourceLocation> createFromNonEmptyV8StackTrace(std::unique_ptr<V8StackTrace>, int scriptId);
 
     String m_url;
     unsigned m_lineNumber;
@@ -68,9 +68,9 @@
 };
 
 template <>
-struct CrossThreadCopier<PassOwnPtr<SourceLocation>> {
-    using Type = PassOwnPtr<SourceLocation>;
-    static Type copy(PassOwnPtr<SourceLocation> location)
+struct CrossThreadCopier<std::unique_ptr<SourceLocation>> {
+    using Type = std::unique_ptr<SourceLocation>;
+    static Type copy(std::unique_ptr<SourceLocation> location)
     {
         return location ? location->isolatedCopy() : nullptr;
     }
diff --git a/third_party/WebKit/Source/bindings/core/v8/V0CustomElementBinding.cpp b/third_party/WebKit/Source/bindings/core/v8/V0CustomElementBinding.cpp
index 91dcdd93..518a119 100644
--- a/third_party/WebKit/Source/bindings/core/v8/V0CustomElementBinding.cpp
+++ b/third_party/WebKit/Source/bindings/core/v8/V0CustomElementBinding.cpp
@@ -30,11 +30,14 @@
 
 #include "bindings/core/v8/V0CustomElementBinding.h"
 
+#include "wtf/PtrUtil.h"
+#include <memory>
+
 namespace blink {
 
-PassOwnPtr<V0CustomElementBinding> V0CustomElementBinding::create(v8::Isolate* isolate, v8::Local<v8::Object> prototype)
+std::unique_ptr<V0CustomElementBinding> V0CustomElementBinding::create(v8::Isolate* isolate, v8::Local<v8::Object> prototype)
 {
-    return adoptPtr(new V0CustomElementBinding(isolate, prototype));
+    return wrapUnique(new V0CustomElementBinding(isolate, prototype));
 }
 
 V0CustomElementBinding::V0CustomElementBinding(v8::Isolate* isolate, v8::Local<v8::Object> prototype)
diff --git a/third_party/WebKit/Source/bindings/core/v8/V0CustomElementBinding.h b/third_party/WebKit/Source/bindings/core/v8/V0CustomElementBinding.h
index 2f5ef1c..ff26119d 100644
--- a/third_party/WebKit/Source/bindings/core/v8/V0CustomElementBinding.h
+++ b/third_party/WebKit/Source/bindings/core/v8/V0CustomElementBinding.h
@@ -33,7 +33,7 @@
 
 #include "bindings/core/v8/ScopedPersistent.h"
 #include "wtf/Allocator.h"
-#include "wtf/PassOwnPtr.h"
+#include <memory>
 #include <v8.h>
 
 namespace blink {
@@ -41,7 +41,7 @@
 class V0CustomElementBinding {
     USING_FAST_MALLOC(V0CustomElementBinding);
 public:
-    static PassOwnPtr<V0CustomElementBinding> create(v8::Isolate*, v8::Local<v8::Object> prototype);
+    static std::unique_ptr<V0CustomElementBinding> create(v8::Isolate*, v8::Local<v8::Object> prototype);
     ~V0CustomElementBinding();
 
 private:
diff --git a/third_party/WebKit/Source/bindings/core/v8/V8BindingForTesting.h b/third_party/WebKit/Source/bindings/core/v8/V8BindingForTesting.h
index bc2810b..564634a 100644
--- a/third_party/WebKit/Source/bindings/core/v8/V8BindingForTesting.h
+++ b/third_party/WebKit/Source/bindings/core/v8/V8BindingForTesting.h
@@ -9,8 +9,6 @@
 #include "bindings/core/v8/ScriptState.h"
 #include "wtf/Allocator.h"
 #include "wtf/Forward.h"
-#include "wtf/OwnPtr.h"
-
 #include <v8.h>
 
 namespace blink {
@@ -47,7 +45,7 @@
     ~V8TestingScope();
 
 private:
-    OwnPtr<DummyPageHolder> m_holder;
+    std::unique_ptr<DummyPageHolder> m_holder;
     v8::HandleScope m_handleScope;
     v8::Local<v8::Context> m_context;
     v8::Context::Scope m_contextScope;
diff --git a/third_party/WebKit/Source/bindings/core/v8/V8DOMActivityLogger.cpp b/third_party/WebKit/Source/bindings/core/v8/V8DOMActivityLogger.cpp
index 26b67a52..ffeb8a0 100644
--- a/third_party/WebKit/Source/bindings/core/v8/V8DOMActivityLogger.cpp
+++ b/third_party/WebKit/Source/bindings/core/v8/V8DOMActivityLogger.cpp
@@ -8,11 +8,12 @@
 #include "platform/weborigin/KURL.h"
 #include "wtf/HashMap.h"
 #include "wtf/text/StringHash.h"
+#include <memory>
 
 namespace blink {
 
-typedef HashMap<String, OwnPtr<V8DOMActivityLogger>> DOMActivityLoggerMapForMainWorld;
-typedef HashMap<int, OwnPtr<V8DOMActivityLogger>, WTF::IntHash<int>, WTF::UnsignedWithZeroKeyHashTraits<int>> DOMActivityLoggerMapForIsolatedWorld;
+typedef HashMap<String, std::unique_ptr<V8DOMActivityLogger>> DOMActivityLoggerMapForMainWorld;
+typedef HashMap<int, std::unique_ptr<V8DOMActivityLogger>, WTF::IntHash<int>, WTF::UnsignedWithZeroKeyHashTraits<int>> DOMActivityLoggerMapForIsolatedWorld;
 
 static DOMActivityLoggerMapForMainWorld& domActivityLoggersForMainWorld()
 {
@@ -28,7 +29,7 @@
     return map;
 }
 
-void V8DOMActivityLogger::setActivityLogger(int worldId, const String& extensionId, PassOwnPtr<V8DOMActivityLogger> logger)
+void V8DOMActivityLogger::setActivityLogger(int worldId, const String& extensionId, std::unique_ptr<V8DOMActivityLogger> logger)
 {
     if (worldId)
         domActivityLoggersForIsolatedWorld().set(worldId, std::move(logger));
diff --git a/third_party/WebKit/Source/bindings/core/v8/V8DOMActivityLogger.h b/third_party/WebKit/Source/bindings/core/v8/V8DOMActivityLogger.h
index de76eca..5c79314 100644
--- a/third_party/WebKit/Source/bindings/core/v8/V8DOMActivityLogger.h
+++ b/third_party/WebKit/Source/bindings/core/v8/V8DOMActivityLogger.h
@@ -32,8 +32,8 @@
 #define V8DOMActivityLogger_h
 
 #include "core/CoreExport.h"
-#include "wtf/PassOwnPtr.h"
 #include "wtf/text/WTFString.h"
+#include <memory>
 #include <v8.h>
 
 namespace blink {
@@ -61,7 +61,7 @@
     // extensions and their activity loggers in the main world, we require an
     // extension ID. Otherwise, extension activities may be logged under
     // a wrong extension ID.
-    static void setActivityLogger(int worldId, const String&, PassOwnPtr<V8DOMActivityLogger>);
+    static void setActivityLogger(int worldId, const String&, std::unique_ptr<V8DOMActivityLogger>);
     static V8DOMActivityLogger* activityLogger(int worldId, const String& extensionId);
     static V8DOMActivityLogger* activityLogger(int worldId, const KURL&);
 
diff --git a/third_party/WebKit/Source/bindings/core/v8/V8GCController.cpp b/third_party/WebKit/Source/bindings/core/v8/V8GCController.cpp
index e8d9a27..ebf4175d 100644
--- a/third_party/WebKit/Source/bindings/core/v8/V8GCController.cpp
+++ b/third_party/WebKit/Source/bindings/core/v8/V8GCController.cpp
@@ -353,41 +353,41 @@
     if (BlameContext* blameContext = Platform::current()->topLevelBlameContext())
         blameContext->Leave();
 
-    // v8::kGCCallbackFlagForced forces a Blink heap garbage collection
-    // when a garbage collection was forced from V8. This is either used
-    // for tests that force GCs from JavaScript to verify that objects die
-    // when expected.
-    if (flags & v8::kGCCallbackFlagForced) {
-        // This single GC is not enough for two reasons:
-        //   (1) The GC is not precise because the GC scans on-stack pointers conservatively.
-        //   (2) One GC is not enough to break a chain of persistent handles. It's possible that
-        //       some heap allocated objects own objects that contain persistent handles
-        //       pointing to other heap allocated objects. To break the chain, we need multiple GCs.
-        //
-        // Regarding (1), we force a precise GC at the end of the current event loop. So if you want
-        // to collect all garbage, you need to wait until the next event loop.
-        // Regarding (2), it would be OK in practice to trigger only one GC per gcEpilogue, because
-        // GCController.collectAll() forces multiple V8's GC.
-        ThreadHeap::collectGarbage(BlinkGC::HeapPointersOnStack, BlinkGC::GCWithSweep, BlinkGC::ForcedGC);
+    if (ThreadState::current() && !ThreadState::current()->isGCForbidden()) {
+        // v8::kGCCallbackFlagForced forces a Blink heap garbage collection
+        // when a garbage collection was forced from V8. This is either used
+        // for tests that force GCs from JavaScript to verify that objects die
+        // when expected.
+        if (flags & v8::kGCCallbackFlagForced) {
+            // This single GC is not enough for two reasons:
+            //   (1) The GC is not precise because the GC scans on-stack pointers conservatively.
+            //   (2) One GC is not enough to break a chain of persistent handles. It's possible that
+            //       some heap allocated objects own objects that contain persistent handles
+            //       pointing to other heap allocated objects. To break the chain, we need multiple GCs.
+            //
+            // Regarding (1), we force a precise GC at the end of the current event loop. So if you want
+            // to collect all garbage, you need to wait until the next event loop.
+            // Regarding (2), it would be OK in practice to trigger only one GC per gcEpilogue, because
+            // GCController.collectAll() forces multiple V8's GC.
+            ThreadHeap::collectGarbage(BlinkGC::HeapPointersOnStack, BlinkGC::GCWithSweep, BlinkGC::ForcedGC);
 
-        // Forces a precise GC at the end of the current event loop.
-        if (ThreadState::current()) {
+            // Forces a precise GC at the end of the current event loop.
             RELEASE_ASSERT(!ThreadState::current()->isInGC());
             ThreadState::current()->setGCState(ThreadState::FullGCScheduled);
         }
-    }
 
-    // v8::kGCCallbackFlagCollectAllAvailableGarbage is used when V8 handles
-    // low memory notifications.
-    if (flags & v8::kGCCallbackFlagCollectAllAvailableGarbage) {
-        // This single GC is not enough. See the above comment.
-        ThreadHeap::collectGarbage(BlinkGC::HeapPointersOnStack, BlinkGC::GCWithSweep, BlinkGC::ForcedGC);
+        // v8::kGCCallbackFlagCollectAllAvailableGarbage is used when V8 handles
+        // low memory notifications.
+        if (flags & v8::kGCCallbackFlagCollectAllAvailableGarbage) {
+            // This single GC is not enough. See the above comment.
+            ThreadHeap::collectGarbage(BlinkGC::HeapPointersOnStack, BlinkGC::GCWithSweep, BlinkGC::ForcedGC);
 
-        // Do not force a precise GC at the end of the current event loop.
-        // According to UMA stats, the collection rate of the precise GC
-        // scheduled at the end of the low memory handling is extremely low,
-        // because the above conservative GC is sufficient for collecting
-        // most objects. So we intentionally don't schedule a precise GC here.
+            // Do not force a precise GC at the end of the current event loop.
+            // According to UMA stats, the collection rate of the precise GC
+            // scheduled at the end of the low memory handling is extremely low,
+            // because the above conservative GC is sufficient for collecting
+            // most objects. So we intentionally don't schedule a precise GC here.
+        }
     }
 
     TRACE_EVENT_INSTANT1(TRACE_DISABLED_BY_DEFAULT("devtools.timeline"), "UpdateCounters", TRACE_EVENT_SCOPE_THREAD, "data", InspectorUpdateCountersEvent::data());
diff --git a/third_party/WebKit/Source/bindings/core/v8/V8HiddenValue.h b/third_party/WebKit/Source/bindings/core/v8/V8HiddenValue.h
index b9bb81f..6b20039 100644
--- a/third_party/WebKit/Source/bindings/core/v8/V8HiddenValue.h
+++ b/third_party/WebKit/Source/bindings/core/v8/V8HiddenValue.h
@@ -9,7 +9,8 @@
 #include "bindings/core/v8/ScriptPromiseProperties.h"
 #include "core/CoreExport.h"
 #include "wtf/Allocator.h"
-#include "wtf/PassOwnPtr.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 #include <v8.h>
 
 namespace blink {
@@ -28,7 +29,6 @@
     V(customElementTagName) \
     V(customElementType) \
     V(customElementsRegistryMap) \
-    V(document) \
     V(error) \
     V(event) \
     V(idbCursorRequest) \
@@ -61,7 +61,7 @@
     USING_FAST_MALLOC(V8HiddenValue);
     WTF_MAKE_NONCOPYABLE(V8HiddenValue);
 public:
-    static PassOwnPtr<V8HiddenValue> create() { return adoptPtr(new V8HiddenValue()); }
+    static std::unique_ptr<V8HiddenValue> create() { return wrapUnique(new V8HiddenValue()); }
 
 #define V8_DECLARE_METHOD(name) static v8::Local<v8::String> name(v8::Isolate* isolate);
     V8_HIDDEN_VALUES(V8_DECLARE_METHOD);
diff --git a/third_party/WebKit/Source/bindings/core/v8/V8IdleTaskRunner.h b/third_party/WebKit/Source/bindings/core/v8/V8IdleTaskRunner.h
index d4718d4..6aebe28d 100644
--- a/third_party/WebKit/Source/bindings/core/v8/V8IdleTaskRunner.h
+++ b/third_party/WebKit/Source/bindings/core/v8/V8IdleTaskRunner.h
@@ -33,7 +33,8 @@
 #include "public/platform/WebScheduler.h"
 #include "public/platform/WebThread.h"
 #include "public/platform/WebTraceLocation.h"
-#include "wtf/OwnPtr.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
@@ -41,14 +42,14 @@
     USING_FAST_MALLOC(V8IdleTaskAdapter);
     WTF_MAKE_NONCOPYABLE(V8IdleTaskAdapter);
 public:
-    V8IdleTaskAdapter(v8::IdleTask* task) : m_task(adoptPtr(task)) { }
+    V8IdleTaskAdapter(v8::IdleTask* task) : m_task(wrapUnique(task)) { }
     ~V8IdleTaskAdapter() override { }
     void run(double delaySeconds) override
     {
         m_task->Run(delaySeconds);
     }
 private:
-    OwnPtr<v8::IdleTask> m_task;
+    std::unique_ptr<v8::IdleTask> m_task;
 };
 
 class V8IdleTaskRunner : public gin::V8IdleTaskRunner {
diff --git a/third_party/WebKit/Source/bindings/core/v8/V8Initializer.cpp b/third_party/WebKit/Source/bindings/core/v8/V8Initializer.cpp
index 1cd98091..0c28189 100644
--- a/third_party/WebKit/Source/bindings/core/v8/V8Initializer.cpp
+++ b/third_party/WebKit/Source/bindings/core/v8/V8Initializer.cpp
@@ -58,9 +58,11 @@
 #include "public/platform/WebScheduler.h"
 #include "public/platform/WebThread.h"
 #include "wtf/AddressSanitizer.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/RefPtr.h"
 #include "wtf/text/WTFString.h"
 #include "wtf/typed_arrays/ArrayBufferContents.h"
+#include <memory>
 #include <v8-debug.h>
 #include <v8-profiler.h>
 
@@ -123,7 +125,7 @@
         return;
 
     ExecutionContext* context = scriptState->getExecutionContext();
-    OwnPtr<SourceLocation> location = SourceLocation::fromMessage(isolate, message, context);
+    std::unique_ptr<SourceLocation> location = SourceLocation::fromMessage(isolate, message, context);
 
     AccessControlStatus accessControlStatus = NotSharableCrossOrigin;
     if (message->IsOpaque())
@@ -202,7 +204,7 @@
 
     String errorMessage;
     AccessControlStatus corsStatus = NotSharableCrossOrigin;
-    OwnPtr<SourceLocation> location;
+    std::unique_ptr<SourceLocation> location;
 
     v8::Local<v8::Message> message = v8::Exception::CreateMessage(isolate, exception);
     if (!message.IsEmpty()) {
@@ -362,7 +364,7 @@
 
     if (RuntimeEnabledFeatures::v8IdleTasksEnabled()) {
         WebScheduler* scheduler = Platform::current()->currentThread()->scheduler();
-        V8PerIsolateData::enableIdleTasks(isolate, adoptPtr(new V8IdleTaskRunner(scheduler)));
+        V8PerIsolateData::enableIdleTasks(isolate, wrapUnique(new V8IdleTaskRunner(scheduler)));
     }
 
     isolate->SetPromiseRejectCallback(promiseRejectHandlerInMainThread);
@@ -371,7 +373,7 @@
         profiler->SetWrapperClassInfoProvider(WrapperTypeInfo::NodeClassId, &RetainedDOMInfo::createRetainedDOMInfo);
 
     ASSERT(ThreadState::mainThreadState());
-    ThreadState::mainThreadState()->addInterruptor(adoptPtr(new V8IsolateInterruptor(isolate)));
+    ThreadState::mainThreadState()->addInterruptor(wrapUnique(new V8IsolateInterruptor(isolate)));
     if (RuntimeEnabledFeatures::traceWrappablesEnabled()) {
         ThreadState::mainThreadState()->registerTraceDOMWrappers(isolate,
             V8GCController::traceDOMWrappers,
@@ -382,7 +384,7 @@
             nullptr);
     }
 
-    V8PerIsolateData::from(isolate)->setThreadDebugger(adoptPtr(new MainThreadDebugger(isolate)));
+    V8PerIsolateData::from(isolate)->setThreadDebugger(wrapUnique(new MainThreadDebugger(isolate)));
 }
 
 void V8Initializer::shutdownMainThread()
@@ -417,7 +419,7 @@
     perIsolateData->setReportingException(true);
 
     ExecutionContext* context = scriptState->getExecutionContext();
-    OwnPtr<SourceLocation> location = SourceLocation::fromMessage(isolate, message, context);
+    std::unique_ptr<SourceLocation> location = SourceLocation::fromMessage(isolate, message, context);
     ErrorEvent* event = ErrorEvent::create(toCoreStringWithNullCheck(message->Get()), std::move(location), &scriptState->world());
 
     AccessControlStatus corsStatus = message->IsSharedCrossOrigin() ? SharableCrossOrigin : NotSharableCrossOrigin;
diff --git a/third_party/WebKit/Source/bindings/core/v8/V8PerContextData.cpp b/third_party/WebKit/Source/bindings/core/v8/V8PerContextData.cpp
index 4bf774c..d34f3786 100644
--- a/third_party/WebKit/Source/bindings/core/v8/V8PerContextData.cpp
+++ b/third_party/WebKit/Source/bindings/core/v8/V8PerContextData.cpp
@@ -34,8 +34,9 @@
 #include "bindings/core/v8/V8Binding.h"
 #include "bindings/core/v8/V8ObjectConstructor.h"
 #include "core/inspector/InstanceCounters.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/StringExtras.h"
-
+#include <memory>
 #include <stdlib.h>
 
 namespace blink {
@@ -44,7 +45,7 @@
     : m_isolate(context->GetIsolate())
     , m_wrapperBoilerplates(m_isolate)
     , m_constructorMap(m_isolate)
-    , m_contextHolder(adoptPtr(new gin::ContextHolder(m_isolate)))
+    , m_contextHolder(wrapUnique(new gin::ContextHolder(m_isolate)))
     , m_context(m_isolate, context)
     , m_activityLogger(0)
     , m_compiledPrivateScript(m_isolate)
@@ -67,9 +68,9 @@
         InstanceCounters::decrementCounter(InstanceCounters::V8PerContextDataCounter);
 }
 
-PassOwnPtr<V8PerContextData> V8PerContextData::create(v8::Local<v8::Context> context)
+std::unique_ptr<V8PerContextData> V8PerContextData::create(v8::Local<v8::Context> context)
 {
-    return adoptPtr(new V8PerContextData(context));
+    return wrapUnique(new V8PerContextData(context));
 }
 
 V8PerContextData* V8PerContextData::from(v8::Local<v8::Context> context)
@@ -145,7 +146,7 @@
     return prototypeValue.As<v8::Object>();
 }
 
-void V8PerContextData::addCustomElementBinding(PassOwnPtr<V0CustomElementBinding> binding)
+void V8PerContextData::addCustomElementBinding(std::unique_ptr<V0CustomElementBinding> binding)
 {
     m_customElementBindings.append(std::move(binding));
 }
diff --git a/third_party/WebKit/Source/bindings/core/v8/V8PerContextData.h b/third_party/WebKit/Source/bindings/core/v8/V8PerContextData.h
index 0b97318..7352b64d 100644
--- a/third_party/WebKit/Source/bindings/core/v8/V8PerContextData.h
+++ b/third_party/WebKit/Source/bindings/core/v8/V8PerContextData.h
@@ -40,10 +40,10 @@
 #include "gin/public/gin_embedders.h"
 #include "wtf/Allocator.h"
 #include "wtf/HashMap.h"
-#include "wtf/PassOwnPtr.h"
 #include "wtf/Vector.h"
 #include "wtf/text/AtomicString.h"
 #include "wtf/text/AtomicStringHash.h"
+#include <memory>
 #include <v8.h>
 
 namespace blink {
@@ -59,7 +59,7 @@
     USING_FAST_MALLOC(V8PerContextData);
     WTF_MAKE_NONCOPYABLE(V8PerContextData);
 public:
-    static PassOwnPtr<V8PerContextData> create(v8::Local<v8::Context>);
+    static std::unique_ptr<V8PerContextData> create(v8::Local<v8::Context>);
 
     static V8PerContextData* from(v8::Local<v8::Context>);
 
@@ -84,7 +84,7 @@
 
     v8::Local<v8::Object> prototypeForType(const WrapperTypeInfo*);
 
-    void addCustomElementBinding(PassOwnPtr<V0CustomElementBinding>);
+    void addCustomElementBinding(std::unique_ptr<V0CustomElementBinding>);
 
     V8DOMActivityLogger* activityLogger() const { return m_activityLogger; }
     void setActivityLogger(V8DOMActivityLogger* activityLogger) { m_activityLogger = activityLogger; }
@@ -108,12 +108,12 @@
     typedef V8GlobalValueMap<const WrapperTypeInfo*, v8::Function, v8::kNotWeak> ConstructorMap;
     ConstructorMap m_constructorMap;
 
-    OwnPtr<gin::ContextHolder> m_contextHolder;
+    std::unique_ptr<gin::ContextHolder> m_contextHolder;
 
     ScopedPersistent<v8::Context> m_context;
     ScopedPersistent<v8::Value> m_errorPrototype;
 
-    typedef Vector<OwnPtr<V0CustomElementBinding>> V0CustomElementBindingList;
+    typedef Vector<std::unique_ptr<V0CustomElementBinding>> V0CustomElementBindingList;
     V0CustomElementBindingList m_customElementBindings;
 
     // This is owned by a static hash map in V8DOMActivityLogger.
diff --git a/third_party/WebKit/Source/bindings/core/v8/V8PerIsolateData.cpp b/third_party/WebKit/Source/bindings/core/v8/V8PerIsolateData.cpp
index 9596c370..baeb5c3 100644
--- a/third_party/WebKit/Source/bindings/core/v8/V8PerIsolateData.cpp
+++ b/third_party/WebKit/Source/bindings/core/v8/V8PerIsolateData.cpp
@@ -37,6 +37,7 @@
 #include "platform/ScriptForbiddenScope.h"
 #include "public/platform/Platform.h"
 #include "wtf/LeakAnnotations.h"
+#include "wtf/PtrUtil.h"
 #include <memory>
 
 namespace blink {
@@ -54,8 +55,8 @@
 }
 
 V8PerIsolateData::V8PerIsolateData()
-    : m_isolateHolder(adoptPtr(new gin::IsolateHolder()))
-    , m_stringCache(adoptPtr(new StringCache(isolate())))
+    : m_isolateHolder(wrapUnique(new gin::IsolateHolder()))
+    , m_stringCache(wrapUnique(new StringCache(isolate())))
     , m_hiddenValue(V8HiddenValue::create())
     , m_privateProperty(V8PrivateProperty::create())
     , m_constructorMode(ConstructorMode::CreateNewObject)
@@ -90,9 +91,9 @@
     return isolate;
 }
 
-void V8PerIsolateData::enableIdleTasks(v8::Isolate* isolate, PassOwnPtr<gin::V8IdleTaskRunner> taskRunner)
+void V8PerIsolateData::enableIdleTasks(v8::Isolate* isolate, std::unique_ptr<gin::V8IdleTaskRunner> taskRunner)
 {
-    from(isolate)->m_isolateHolder->EnableIdleTasks(std::unique_ptr<gin::V8IdleTaskRunner>(taskRunner.leakPtr()));
+    from(isolate)->m_isolateHolder->EnableIdleTasks(std::unique_ptr<gin::V8IdleTaskRunner>(taskRunner.release()));
 }
 
 void V8PerIsolateData::useCounterCallback(v8::Isolate* isolate, v8::Isolate::UseCounterFeature feature)
@@ -346,14 +347,14 @@
     return v8::Local<v8::Object>::Cast(value)->FindInstanceInPrototypeChain(templ);
 }
 
-void V8PerIsolateData::addEndOfScopeTask(PassOwnPtr<EndOfScopeTask> task)
+void V8PerIsolateData::addEndOfScopeTask(std::unique_ptr<EndOfScopeTask> task)
 {
     m_endOfScopeTasks.append(std::move(task));
 }
 
 void V8PerIsolateData::runEndOfScopeTasks()
 {
-    Vector<OwnPtr<EndOfScopeTask>> tasks;
+    Vector<std::unique_ptr<EndOfScopeTask>> tasks;
     tasks.swap(m_endOfScopeTasks);
     for (const auto& task : tasks)
         task->run();
@@ -365,7 +366,7 @@
     m_endOfScopeTasks.clear();
 }
 
-void V8PerIsolateData::setThreadDebugger(PassOwnPtr<ThreadDebugger> threadDebugger)
+void V8PerIsolateData::setThreadDebugger(std::unique_ptr<ThreadDebugger> threadDebugger)
 {
     ASSERT(!m_threadDebugger);
     m_threadDebugger = std::move(threadDebugger);
diff --git a/third_party/WebKit/Source/bindings/core/v8/V8PerIsolateData.h b/third_party/WebKit/Source/bindings/core/v8/V8PerIsolateData.h
index 35f921e..009e4db 100644
--- a/third_party/WebKit/Source/bindings/core/v8/V8PerIsolateData.h
+++ b/third_party/WebKit/Source/bindings/core/v8/V8PerIsolateData.h
@@ -37,8 +37,8 @@
 #include "platform/heap/Handle.h"
 #include "wtf/HashMap.h"
 #include "wtf/Noncopyable.h"
-#include "wtf/OwnPtr.h"
 #include "wtf/Vector.h"
+#include <memory>
 #include <v8.h>
 
 namespace blink {
@@ -101,7 +101,7 @@
     static void destroy(v8::Isolate*);
     static v8::Isolate* mainThreadIsolate();
 
-    static void enableIdleTasks(v8::Isolate*, PassOwnPtr<gin::V8IdleTaskRunner>);
+    static void enableIdleTasks(v8::Isolate*, std::unique_ptr<gin::V8IdleTaskRunner>);
 
     v8::Isolate* isolate() { return m_isolateHolder->isolate(); }
 
@@ -136,11 +136,11 @@
     // to C++ from script, after executing a script task (e.g. callback,
     // event) or microtasks (e.g. promise). This is explicitly needed for
     // Indexed DB transactions per spec, but should in general be avoided.
-    void addEndOfScopeTask(PassOwnPtr<EndOfScopeTask>);
+    void addEndOfScopeTask(std::unique_ptr<EndOfScopeTask>);
     void runEndOfScopeTasks();
     void clearEndOfScopeTasks();
 
-    void setThreadDebugger(PassOwnPtr<ThreadDebugger>);
+    void setThreadDebugger(std::unique_ptr<ThreadDebugger>);
     ThreadDebugger* threadDebugger();
 
     using ActiveScriptWrappableSet = HeapHashSet<WeakMember<ActiveScriptWrappable>>;
@@ -162,7 +162,7 @@
     bool hasInstance(const WrapperTypeInfo* untrusted, v8::Local<v8::Value>, V8FunctionTemplateMap&);
     v8::Local<v8::Object> findInstanceInPrototypeChain(const WrapperTypeInfo*, v8::Local<v8::Value>, V8FunctionTemplateMap&);
 
-    OwnPtr<gin::IsolateHolder> m_isolateHolder;
+    std::unique_ptr<gin::IsolateHolder> m_isolateHolder;
 
     // m_interfaceTemplateMapFor{,Non}MainWorld holds function templates for
     // the inerface objects.
@@ -173,8 +173,8 @@
     V8FunctionTemplateMap m_operationTemplateMapForMainWorld;
     V8FunctionTemplateMap m_operationTemplateMapForNonMainWorld;
 
-    OwnPtr<StringCache> m_stringCache;
-    OwnPtr<V8HiddenValue> m_hiddenValue;
+    std::unique_ptr<StringCache> m_stringCache;
+    std::unique_ptr<V8HiddenValue> m_hiddenValue;
     std::unique_ptr<V8PrivateProperty> m_privateProperty;
     ScopedPersistent<v8::Value> m_liveRoot;
     RefPtr<ScriptState> m_scriptRegexpScriptState;
@@ -188,8 +188,8 @@
     bool m_isHandlingRecursionLevelError;
     bool m_isReportingException;
 
-    Vector<OwnPtr<EndOfScopeTask>> m_endOfScopeTasks;
-    OwnPtr<ThreadDebugger> m_threadDebugger;
+    Vector<std::unique_ptr<EndOfScopeTask>> m_endOfScopeTasks;
+    std::unique_ptr<ThreadDebugger> m_threadDebugger;
 
     Persistent<ActiveScriptWrappableSet> m_activeScriptWrappables;
     std::unique_ptr<ScriptWrappableVisitor> m_scriptWrappableVisitor;
diff --git a/third_party/WebKit/Source/bindings/core/v8/V8V0CustomElementLifecycleCallbacks.cpp b/third_party/WebKit/Source/bindings/core/v8/V8V0CustomElementLifecycleCallbacks.cpp
index c5f51b2..b0da31f 100644
--- a/third_party/WebKit/Source/bindings/core/v8/V8V0CustomElementLifecycleCallbacks.cpp
+++ b/third_party/WebKit/Source/bindings/core/v8/V8V0CustomElementLifecycleCallbacks.cpp
@@ -38,7 +38,7 @@
 #include "bindings/core/v8/V8HiddenValue.h"
 #include "bindings/core/v8/V8PerContextData.h"
 #include "core/dom/ExecutionContext.h"
-#include "wtf/PassOwnPtr.h"
+#include <memory>
 
 namespace blink {
 
@@ -123,7 +123,7 @@
 {
 }
 
-bool V8V0CustomElementLifecycleCallbacks::setBinding(PassOwnPtr<V0CustomElementBinding> binding)
+bool V8V0CustomElementLifecycleCallbacks::setBinding(std::unique_ptr<V0CustomElementBinding> binding)
 {
     V8PerContextData* perContextData = creationContextData();
     if (!perContextData)
diff --git a/third_party/WebKit/Source/bindings/core/v8/V8V0CustomElementLifecycleCallbacks.h b/third_party/WebKit/Source/bindings/core/v8/V8V0CustomElementLifecycleCallbacks.h
index 6acc290..b610dff6 100644
--- a/third_party/WebKit/Source/bindings/core/v8/V8V0CustomElementLifecycleCallbacks.h
+++ b/third_party/WebKit/Source/bindings/core/v8/V8V0CustomElementLifecycleCallbacks.h
@@ -35,8 +35,8 @@
 #include "bindings/core/v8/ScriptState.h"
 #include "core/dom/ContextLifecycleObserver.h"
 #include "core/dom/custom/V0CustomElementLifecycleCallbacks.h"
-#include "wtf/PassOwnPtr.h"
 #include "wtf/PassRefPtr.h"
+#include <memory>
 #include <v8.h>
 
 namespace blink {
@@ -52,7 +52,7 @@
 
     ~V8V0CustomElementLifecycleCallbacks() override;
 
-    bool setBinding(PassOwnPtr<V0CustomElementBinding>);
+    bool setBinding(std::unique_ptr<V0CustomElementBinding>);
 
     DECLARE_VIRTUAL_TRACE();
 
diff --git a/third_party/WebKit/Source/bindings/core/v8/WindowProxy.cpp b/third_party/WebKit/Source/bindings/core/v8/WindowProxy.cpp
index 849eeed1..0ad55527 100644
--- a/third_party/WebKit/Source/bindings/core/v8/WindowProxy.cpp
+++ b/third_party/WebKit/Source/bindings/core/v8/WindowProxy.cpp
@@ -62,7 +62,6 @@
 #include "platform/weborigin/SecurityOrigin.h"
 #include "public/platform/Platform.h"
 #include "wtf/Assertions.h"
-#include "wtf/OwnPtr.h"
 #include "wtf/StringExtras.h"
 #include "wtf/text/CString.h"
 #include <algorithm>
@@ -412,11 +411,6 @@
     // TODO(jochen): Don't replace the accessor with a data value. We need a way to tell v8 that the accessor's return value won't change after this point.
     if (!v8CallBoolean(context->Global()->ForceSet(context, v8AtomicString(m_isolate, "document"), documentWrapper, static_cast<v8::PropertyAttribute>(v8::ReadOnly | v8::DontDelete))))
         return;
-
-    // We also stash a reference to the document on the inner global object so that
-    // LocalDOMWindow objects we obtain from JavaScript references are guaranteed to have
-    // live Document objects.
-    V8HiddenValue::setHiddenValue(m_scriptState.get(), v8::Local<v8::Object>::Cast(context->Global()->GetPrototype()), V8HiddenValue::document(m_isolate), documentWrapper);
 }
 
 void WindowProxy::updateActivityLogger()
diff --git a/third_party/WebKit/Source/bindings/core/v8/WorkerOrWorkletScriptController.cpp b/third_party/WebKit/Source/bindings/core/v8/WorkerOrWorkletScriptController.cpp
index 8223a91e..af04d355 100644
--- a/third_party/WebKit/Source/bindings/core/v8/WorkerOrWorkletScriptController.cpp
+++ b/third_party/WebKit/Source/bindings/core/v8/WorkerOrWorkletScriptController.cpp
@@ -51,6 +51,7 @@
 #include "core/workers/WorkerThread.h"
 #include "platform/heap/ThreadState.h"
 #include "public/platform/Platform.h"
+#include <memory>
 #include <v8.h>
 
 namespace blink {
@@ -79,7 +80,7 @@
 
     bool hadException;
     String errorMessage;
-    OwnPtr<SourceLocation> m_location;
+    std::unique_ptr<SourceLocation> m_location;
     ScriptValue exception;
     Member<ErrorEvent> m_errorEventFromImportedScript;
 
diff --git a/third_party/WebKit/Source/bindings/core/v8/WorkerOrWorkletScriptController.h b/third_party/WebKit/Source/bindings/core/v8/WorkerOrWorkletScriptController.h
index 4da92c9..e2c8914 100644
--- a/third_party/WebKit/Source/bindings/core/v8/WorkerOrWorkletScriptController.h
+++ b/third_party/WebKit/Source/bindings/core/v8/WorkerOrWorkletScriptController.h
@@ -38,7 +38,6 @@
 #include "core/CoreExport.h"
 #include "platform/text/CompressibleString.h"
 #include "wtf/Allocator.h"
-#include "wtf/OwnPtr.h"
 #include "wtf/ThreadingPrimitives.h"
 #include "wtf/text/TextPosition.h"
 #include <v8.h>
diff --git a/third_party/WebKit/Source/bindings/core/v8/custom/V8DocumentCustom.cpp b/third_party/WebKit/Source/bindings/core/v8/custom/V8DocumentCustom.cpp
index fc4c3d7..045d989 100644
--- a/third_party/WebKit/Source/bindings/core/v8/custom/V8DocumentCustom.cpp
+++ b/third_party/WebKit/Source/bindings/core/v8/custom/V8DocumentCustom.cpp
@@ -43,9 +43,10 @@
 #include "core/html/HTMLAllCollection.h"
 #include "core/html/HTMLCollection.h"
 #include "core/html/HTMLIFrameElement.h"
-#include "wtf/OwnPtr.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/RefPtr.h"
 #include "wtf/StdLibExtras.h"
+#include <memory>
 
 namespace blink {
 
@@ -76,7 +77,7 @@
             return;
         }
         // Wrap up the arguments and call the function.
-        OwnPtr<v8::Local<v8::Value>[]> params = adoptArrayPtr(new v8::Local<v8::Value>[info.Length()]);
+        std::unique_ptr<v8::Local<v8::Value>[]> params = wrapArrayUnique(new v8::Local<v8::Value>[info.Length()]);
         for (int i = 0; i < info.Length(); i++)
             params[i] = info[i];
 
diff --git a/third_party/WebKit/Source/bindings/core/v8/custom/V8HTMLPlugInElementCustom.cpp b/third_party/WebKit/Source/bindings/core/v8/custom/V8HTMLPlugInElementCustom.cpp
index 4439850f..b277398 100644
--- a/third_party/WebKit/Source/bindings/core/v8/custom/V8HTMLPlugInElementCustom.cpp
+++ b/third_party/WebKit/Source/bindings/core/v8/custom/V8HTMLPlugInElementCustom.cpp
@@ -34,8 +34,8 @@
 #include "bindings/core/v8/V8HTMLEmbedElement.h"
 #include "bindings/core/v8/V8HTMLObjectElement.h"
 #include "core/frame/UseCounter.h"
-#include "wtf/OwnPtr.h"
-#include "wtf/PassOwnPtr.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
@@ -146,7 +146,7 @@
     if (instance.IsEmpty())
         return;
 
-    WTF::OwnPtr<v8::Local<v8::Value>[] > arguments = adoptArrayPtr(new v8::Local<v8::Value>[info.Length()]);
+    std::unique_ptr<v8::Local<v8::Value>[] > arguments = wrapArrayUnique(new v8::Local<v8::Value>[info.Length()]);
     for (int i = 0; i < info.Length(); ++i)
         arguments[i] = info[i];
 
diff --git a/third_party/WebKit/Source/bindings/core/v8/custom/V8WindowCustom.cpp b/third_party/WebKit/Source/bindings/core/v8/custom/V8WindowCustom.cpp
index f85adae9..730dd279 100644
--- a/third_party/WebKit/Source/bindings/core/v8/custom/V8WindowCustom.cpp
+++ b/third_party/WebKit/Source/bindings/core/v8/custom/V8WindowCustom.cpp
@@ -62,7 +62,6 @@
 #include "core/loader/FrameLoaderClient.h"
 #include "platform/LayoutTestSupport.h"
 #include "wtf/Assertions.h"
-#include "wtf/OwnPtr.h"
 
 namespace blink {
 
diff --git a/third_party/WebKit/Source/bindings/modules/v8/ScriptValueSerializerForModules.cpp b/third_party/WebKit/Source/bindings/modules/v8/ScriptValueSerializerForModules.cpp
index d65e406..0c6a6d58 100644
--- a/third_party/WebKit/Source/bindings/modules/v8/ScriptValueSerializerForModules.cpp
+++ b/third_party/WebKit/Source/bindings/modules/v8/ScriptValueSerializerForModules.cpp
@@ -14,6 +14,8 @@
 #include "public/platform/Platform.h"
 #include "public/platform/WebRTCCertificate.h"
 #include "public/platform/WebRTCCertificateGenerator.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
@@ -443,7 +445,7 @@
     if (!readWebCoreString(&pemCertificate))
         return false;
 
-    OwnPtr<WebRTCCertificateGenerator> certificateGenerator = adoptPtr(
+    std::unique_ptr<WebRTCCertificateGenerator> certificateGenerator = wrapUnique(
         Platform::current()->createRTCCertificateGenerator());
 
     std::unique_ptr<WebRTCCertificate> certificate(
diff --git a/third_party/WebKit/Source/build/scripts/templates/MakeQualifiedNames.cpp.tmpl b/third_party/WebKit/Source/build/scripts/templates/MakeQualifiedNames.cpp.tmpl
index cef5ab8..56f373113 100644
--- a/third_party/WebKit/Source/build/scripts/templates/MakeQualifiedNames.cpp.tmpl
+++ b/third_party/WebKit/Source/build/scripts/templates/MakeQualifiedNames.cpp.tmpl
@@ -3,8 +3,10 @@
 
 #include "{{namespace}}Names.h"
 
+#include "wtf/PtrUtil.h"
 #include "wtf/StaticConstructors.h"
 #include "wtf/StdLibExtras.h"
+#include <memory>
 
 namespace blink {
 namespace {{namespace}}Names {
@@ -22,9 +24,9 @@
 {% endfor %}
 
 
-PassOwnPtr<const {{namespace}}QualifiedName*[]> get{{namespace}}Tags()
+std::unique_ptr<const {{namespace}}QualifiedName*[]> get{{namespace}}Tags()
 {
-    OwnPtr<const {{namespace}}QualifiedName*[]> tags = adoptArrayPtr(new const {{namespace}}QualifiedName*[{{namespace}}TagsCount]);
+    std::unique_ptr<const {{namespace}}QualifiedName*[]> tags = wrapArrayUnique(new const {{namespace}}QualifiedName*[{{namespace}}TagsCount]);
     for (size_t i = 0; i < {{namespace}}TagsCount; i++)
         tags[i] = reinterpret_cast<{{namespace}}QualifiedName*>(&{{suffix}}TagStorage) + i;
     return tags;
@@ -40,9 +42,9 @@
 {% endfor %}
 
 {% if namespace != 'HTML' %}
-PassOwnPtr<const QualifiedName*[]> get{{namespace}}Attrs()
+std::unique_ptr<const QualifiedName*[]> get{{namespace}}Attrs()
 {
-    OwnPtr<const QualifiedName*[]> attrs = adoptArrayPtr(new const QualifiedName*[{{namespace}}AttrsCount]);
+    std::unique_ptr<const QualifiedName*[]> attrs = wrapArrayUnique(new const QualifiedName*[{{namespace}}AttrsCount]);
     for (size_t i = 0; i < {{namespace}}AttrsCount; i++)
         attrs[i] = reinterpret_cast<QualifiedName*>(&{{suffix}}AttrStorage) + i;
     return attrs;
diff --git a/third_party/WebKit/Source/build/scripts/templates/MakeQualifiedNames.h.tmpl b/third_party/WebKit/Source/build/scripts/templates/MakeQualifiedNames.h.tmpl
index 21de2b62..d9368d2 100644
--- a/third_party/WebKit/Source/build/scripts/templates/MakeQualifiedNames.h.tmpl
+++ b/third_party/WebKit/Source/build/scripts/templates/MakeQualifiedNames.h.tmpl
@@ -8,7 +8,7 @@
 #include "core/CoreExport.h"
 {% endif %}
 #include "core/dom/QualifiedName.h"
-#include "wtf/PassOwnPtr.h"
+#include <memory>
 
 namespace blink {
 
@@ -32,12 +32,12 @@
 
 {% if tags %}
 const unsigned {{namespace}}TagsCount = {{tags|count}};
-{{symbol_export}}PassOwnPtr<const {{namespace}}QualifiedName*[]> get{{namespace}}Tags();
+{{symbol_export}}std::unique_ptr<const {{namespace}}QualifiedName*[]> get{{namespace}}Tags();
 {% endif %}
 
 const unsigned {{namespace}}AttrsCount = {{attrs|count}};
 {% if namespace != 'HTML' %}
-PassOwnPtr<const QualifiedName*[]> get{{namespace}}Attrs();
+std::unique_ptr<const QualifiedName*[]> get{{namespace}}Attrs();
 {% endif %}
 
 void init();
diff --git a/third_party/WebKit/Source/core/animation/Animation.cpp b/third_party/WebKit/Source/core/animation/Animation.cpp
index 14cbc42..9cd519a2b 100644
--- a/third_party/WebKit/Source/core/animation/Animation.cpp
+++ b/third_party/WebKit/Source/core/animation/Animation.cpp
@@ -45,6 +45,7 @@
 #include "public/platform/Platform.h"
 #include "public/platform/WebCompositorSupport.h"
 #include "wtf/MathExtras.h"
+#include "wtf/PtrUtil.h"
 
 namespace blink {
 
@@ -293,7 +294,7 @@
                 createCompositorPlayer();
 
             if (maybeStartAnimationOnCompositor())
-                m_compositorState = adoptPtr(new CompositorState(*this));
+                m_compositorState = wrapUnique(new CompositorState(*this));
             else
                 cancelIncompatibleAnimationsOnCompositor();
         }
diff --git a/third_party/WebKit/Source/core/animation/Animation.h b/third_party/WebKit/Source/core/animation/Animation.h
index 5cfc053..24d45f9 100644
--- a/third_party/WebKit/Source/core/animation/Animation.h
+++ b/third_party/WebKit/Source/core/animation/Animation.h
@@ -45,6 +45,7 @@
 #include "platform/animation/CompositorAnimationPlayerClient.h"
 #include "platform/heap/Handle.h"
 #include "wtf/RefPtr.h"
+#include <memory>
 
 namespace blink {
 
@@ -294,11 +295,11 @@
     // This mirrors the known compositor state. It is created when a compositor
     // animation is started. Updated once the start time is known and each time
     // modifications are pushed to the compositor.
-    OwnPtr<CompositorState> m_compositorState;
+    std::unique_ptr<CompositorState> m_compositorState;
     bool m_compositorPending;
     int m_compositorGroup;
 
-    OwnPtr<CompositorAnimationPlayer> m_compositorPlayer;
+    std::unique_ptr<CompositorAnimationPlayer> m_compositorPlayer;
 
     bool m_currentTimePending;
     bool m_stateIsBeingUpdated;
diff --git a/third_party/WebKit/Source/core/animation/AnimationClock.h b/third_party/WebKit/Source/core/animation/AnimationClock.h
index 0b05963..b1416eb 100644
--- a/third_party/WebKit/Source/core/animation/AnimationClock.h
+++ b/third_party/WebKit/Source/core/animation/AnimationClock.h
@@ -35,7 +35,6 @@
 #include "wtf/Allocator.h"
 #include "wtf/CurrentTime.h"
 #include "wtf/Noncopyable.h"
-#include "wtf/PassOwnPtr.h"
 #include <limits>
 
 namespace blink {
diff --git a/third_party/WebKit/Source/core/animation/AnimationClockTest.cpp b/third_party/WebKit/Source/core/animation/AnimationClockTest.cpp
index 9eaddbc..fa657ca 100644
--- a/third_party/WebKit/Source/core/animation/AnimationClockTest.cpp
+++ b/third_party/WebKit/Source/core/animation/AnimationClockTest.cpp
@@ -31,7 +31,6 @@
 #include "core/animation/AnimationClock.h"
 
 #include "testing/gtest/include/gtest/gtest.h"
-#include "wtf/OwnPtr.h"
 
 namespace blink {
 
diff --git a/third_party/WebKit/Source/core/animation/AnimationInputHelpersTest.cpp b/third_party/WebKit/Source/core/animation/AnimationInputHelpersTest.cpp
index e272e35..ef7b9bf7 100644
--- a/third_party/WebKit/Source/core/animation/AnimationInputHelpersTest.cpp
+++ b/third_party/WebKit/Source/core/animation/AnimationInputHelpersTest.cpp
@@ -9,6 +9,7 @@
 #include "core/testing/DummyPageHolder.h"
 #include "platform/animation/TimingFunction.h"
 #include "testing/gtest/include/gtest/gtest.h"
+#include <memory>
 
 namespace blink {
 
@@ -52,7 +53,7 @@
         ThreadHeap::collectAllGarbage();
     }
 
-    OwnPtr<DummyPageHolder> pageHolder;
+    std::unique_ptr<DummyPageHolder> pageHolder;
     Persistent<Document> document;
     TrackExceptionState exceptionState;
 };
diff --git a/third_party/WebKit/Source/core/animation/AnimationStackTest.cpp b/third_party/WebKit/Source/core/animation/AnimationStackTest.cpp
index bdccc72d..c7ddd8b 100644
--- a/third_party/WebKit/Source/core/animation/AnimationStackTest.cpp
+++ b/third_party/WebKit/Source/core/animation/AnimationStackTest.cpp
@@ -13,6 +13,7 @@
 #include "core/animation/animatable/AnimatableDouble.h"
 #include "core/testing/DummyPageHolder.h"
 #include "testing/gtest/include/gtest/gtest.h"
+#include <memory>
 
 namespace blink {
 
@@ -79,7 +80,7 @@
         return toLegacyStyleInterpolation(interpolation).currentValue().get();
     }
 
-    OwnPtr<DummyPageHolder> pageHolder;
+    std::unique_ptr<DummyPageHolder> pageHolder;
     Persistent<Document> document;
     Persistent<AnimationTimeline> timeline;
     Persistent<Element> element;
diff --git a/third_party/WebKit/Source/core/animation/AnimationTest.cpp b/third_party/WebKit/Source/core/animation/AnimationTest.cpp
index 15b7bae8..0b8a59e 100644
--- a/third_party/WebKit/Source/core/animation/AnimationTest.cpp
+++ b/third_party/WebKit/Source/core/animation/AnimationTest.cpp
@@ -40,6 +40,7 @@
 #include "core/testing/DummyPageHolder.h"
 #include "platform/weborigin/KURL.h"
 #include "testing/gtest/include/gtest/gtest.h"
+#include <memory>
 
 namespace blink {
 
@@ -88,7 +89,7 @@
     Persistent<AnimationTimeline> timeline;
     Persistent<Animation> animation;
     TrackExceptionState exceptionState;
-    OwnPtr<DummyPageHolder> pageHolder;
+    std::unique_ptr<DummyPageHolder> pageHolder;
 };
 
 TEST_F(AnimationAnimationTest, InitialState)
diff --git a/third_party/WebKit/Source/core/animation/AnimationTimeline.cpp b/third_party/WebKit/Source/core/animation/AnimationTimeline.cpp
index f3820aca..e753bba 100644
--- a/third_party/WebKit/Source/core/animation/AnimationTimeline.cpp
+++ b/third_party/WebKit/Source/core/animation/AnimationTimeline.cpp
@@ -41,6 +41,7 @@
 #include "platform/animation/CompositorAnimationTimeline.h"
 #include "public/platform/Platform.h"
 #include "public/platform/WebCompositorSupport.h"
+#include "wtf/PtrUtil.h"
 #include <algorithm>
 
 namespace blink {
diff --git a/third_party/WebKit/Source/core/animation/AnimationTimeline.h b/third_party/WebKit/Source/core/animation/AnimationTimeline.h
index 4dc8e86..caddbf3 100644
--- a/third_party/WebKit/Source/core/animation/AnimationTimeline.h
+++ b/third_party/WebKit/Source/core/animation/AnimationTimeline.h
@@ -41,6 +41,7 @@
 #include "platform/heap/Handle.h"
 #include "wtf/RefPtr.h"
 #include "wtf/Vector.h"
+#include <memory>
 
 namespace blink {
 
@@ -123,7 +124,7 @@
     Member<PlatformTiming> m_timing;
     double m_lastCurrentTimeInternal;
 
-    OwnPtr<CompositorAnimationTimeline> m_compositorTimeline;
+    std::unique_ptr<CompositorAnimationTimeline> m_compositorTimeline;
 
     class AnimationTimelineTiming final : public PlatformTiming {
     public:
diff --git a/third_party/WebKit/Source/core/animation/AnimationTimelineTest.cpp b/third_party/WebKit/Source/core/animation/AnimationTimelineTest.cpp
index 7e39d16..e3912b3 100644
--- a/third_party/WebKit/Source/core/animation/AnimationTimelineTest.cpp
+++ b/third_party/WebKit/Source/core/animation/AnimationTimelineTest.cpp
@@ -42,6 +42,7 @@
 #include "platform/weborigin/KURL.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
+#include <memory>
 
 namespace blink {
 
@@ -87,7 +88,7 @@
         timeline->scheduleNextService();
     }
 
-    OwnPtr<DummyPageHolder> pageHolder;
+    std::unique_ptr<DummyPageHolder> pageHolder;
     Persistent<Document> document;
     Persistent<Element> element;
     Persistent<AnimationTimeline> timeline;
diff --git a/third_party/WebKit/Source/core/animation/BasicShapeInterpolationFunctions.cpp b/third_party/WebKit/Source/core/animation/BasicShapeInterpolationFunctions.cpp
index 8a1975bf..5501da5b 100644
--- a/third_party/WebKit/Source/core/animation/BasicShapeInterpolationFunctions.cpp
+++ b/third_party/WebKit/Source/core/animation/BasicShapeInterpolationFunctions.cpp
@@ -9,6 +9,7 @@
 #include "core/css/CSSBasicShapeValues.h"
 #include "core/css/resolver/StyleResolverState.h"
 #include "core/style/BasicShapes.h"
+#include <memory>
 
 namespace blink {
 
@@ -72,25 +73,25 @@
 
 namespace {
 
-PassOwnPtr<InterpolableValue> unwrap(InterpolationValue&& value)
+std::unique_ptr<InterpolableValue> unwrap(InterpolationValue&& value)
 {
     ASSERT(value.interpolableValue);
     return std::move(value.interpolableValue);
 }
 
-PassOwnPtr<InterpolableValue> convertCSSCoordinate(const CSSValue* coordinate)
+std::unique_ptr<InterpolableValue> convertCSSCoordinate(const CSSValue* coordinate)
 {
     if (coordinate)
         return unwrap(CSSPositionAxisListInterpolationType::convertPositionAxisCSSValue(*coordinate));
     return unwrap(CSSLengthInterpolationType::maybeConvertLength(Length(50, Percent), 1));
 }
 
-PassOwnPtr<InterpolableValue> convertCoordinate(const BasicShapeCenterCoordinate& coordinate, double zoom)
+std::unique_ptr<InterpolableValue> convertCoordinate(const BasicShapeCenterCoordinate& coordinate, double zoom)
 {
     return unwrap(CSSLengthInterpolationType::maybeConvertLength(coordinate.computedLength(), zoom));
 }
 
-PassOwnPtr<InterpolableValue> createNeutralInterpolableCoordinate()
+std::unique_ptr<InterpolableValue> createNeutralInterpolableCoordinate()
 {
     return CSSLengthInterpolationType::createNeutralInterpolableValue();
 }
@@ -102,21 +103,21 @@
         CSSLengthInterpolationType::resolveInterpolableLength(interpolableValue, nullptr, conversionData));
 }
 
-PassOwnPtr<InterpolableValue> convertCSSRadius(const CSSPrimitiveValue* radius)
+std::unique_ptr<InterpolableValue> convertCSSRadius(const CSSPrimitiveValue* radius)
 {
     if (!radius || radius->isValueID())
         return nullptr;
     return unwrap(CSSLengthInterpolationType::maybeConvertCSSValue(*radius));
 }
 
-PassOwnPtr<InterpolableValue> convertRadius(const BasicShapeRadius& radius, double zoom)
+std::unique_ptr<InterpolableValue> convertRadius(const BasicShapeRadius& radius, double zoom)
 {
     if (radius.type() != BasicShapeRadius::Value)
         return nullptr;
     return unwrap(CSSLengthInterpolationType::maybeConvertLength(radius.value(), zoom));
 }
 
-PassOwnPtr<InterpolableValue> createNeutralInterpolableRadius()
+std::unique_ptr<InterpolableValue> createNeutralInterpolableRadius()
 {
     return CSSLengthInterpolationType::createNeutralInterpolableValue();
 }
@@ -126,24 +127,24 @@
     return BasicShapeRadius(CSSLengthInterpolationType::resolveInterpolableLength(interpolableValue, nullptr, conversionData, ValueRangeNonNegative));
 }
 
-PassOwnPtr<InterpolableValue> convertCSSLength(const CSSValue* length)
+std::unique_ptr<InterpolableValue> convertCSSLength(const CSSValue* length)
 {
     if (!length)
         return CSSLengthInterpolationType::createNeutralInterpolableValue();
     return unwrap(CSSLengthInterpolationType::maybeConvertCSSValue(*length));
 }
 
-PassOwnPtr<InterpolableValue> convertLength(const Length& length, double zoom)
+std::unique_ptr<InterpolableValue> convertLength(const Length& length, double zoom)
 {
     return unwrap(CSSLengthInterpolationType::maybeConvertLength(length, zoom));
 }
 
-PassOwnPtr<InterpolableValue> convertCSSBorderRadiusWidth(const CSSValuePair* pair)
+std::unique_ptr<InterpolableValue> convertCSSBorderRadiusWidth(const CSSValuePair* pair)
 {
     return convertCSSLength(pair ? &pair->first() : nullptr);
 }
 
-PassOwnPtr<InterpolableValue> convertCSSBorderRadiusHeight(const CSSValuePair* pair)
+std::unique_ptr<InterpolableValue> convertCSSBorderRadiusHeight(const CSSValuePair* pair)
 {
     return convertCSSLength(pair ? &pair->second() : nullptr);
 }
@@ -166,11 +167,11 @@
 
 InterpolationValue convertCSSValue(const CSSBasicShapeCircleValue& circle)
 {
-    OwnPtr<InterpolableList> list = InterpolableList::create(CircleComponentIndexCount);
+    std::unique_ptr<InterpolableList> list = InterpolableList::create(CircleComponentIndexCount);
     list->set(CircleCenterXIndex, convertCSSCoordinate(circle.centerX()));
     list->set(CircleCenterYIndex, convertCSSCoordinate(circle.centerY()));
 
-    OwnPtr<InterpolableValue> radius;
+    std::unique_ptr<InterpolableValue> radius;
     if (!(radius = convertCSSRadius(circle.radius())))
         return nullptr;
     list->set(CircleRadiusIndex, std::move(radius));
@@ -180,11 +181,11 @@
 
 InterpolationValue convertBasicShape(const BasicShapeCircle& circle, double zoom)
 {
-    OwnPtr<InterpolableList> list = InterpolableList::create(CircleComponentIndexCount);
+    std::unique_ptr<InterpolableList> list = InterpolableList::create(CircleComponentIndexCount);
     list->set(CircleCenterXIndex, convertCoordinate(circle.centerX(), zoom));
     list->set(CircleCenterYIndex, convertCoordinate(circle.centerY(), zoom));
 
-    OwnPtr<InterpolableValue> radius;
+    std::unique_ptr<InterpolableValue> radius;
     if (!(radius = convertRadius(circle.radius(), zoom)))
         return nullptr;
     list->set(CircleRadiusIndex, std::move(radius));
@@ -192,9 +193,9 @@
     return InterpolationValue(std::move(list), BasicShapeNonInterpolableValue::create(BasicShape::BasicShapeCircleType));
 }
 
-PassOwnPtr<InterpolableValue> createNeutralValue()
+std::unique_ptr<InterpolableValue> createNeutralValue()
 {
-    OwnPtr<InterpolableList> list = InterpolableList::create(CircleComponentIndexCount);
+    std::unique_ptr<InterpolableList> list = InterpolableList::create(CircleComponentIndexCount);
     list->set(CircleCenterXIndex, createNeutralInterpolableCoordinate());
     list->set(CircleCenterYIndex, createNeutralInterpolableCoordinate());
     list->set(CircleRadiusIndex, createNeutralInterpolableRadius());
@@ -225,11 +226,11 @@
 
 InterpolationValue convertCSSValue(const CSSBasicShapeEllipseValue& ellipse)
 {
-    OwnPtr<InterpolableList> list = InterpolableList::create(EllipseComponentIndexCount);
+    std::unique_ptr<InterpolableList> list = InterpolableList::create(EllipseComponentIndexCount);
     list->set(EllipseCenterXIndex, convertCSSCoordinate(ellipse.centerX()));
     list->set(EllipseCenterYIndex, convertCSSCoordinate(ellipse.centerY()));
 
-    OwnPtr<InterpolableValue> radius;
+    std::unique_ptr<InterpolableValue> radius;
     if (!(radius = convertCSSRadius(ellipse.radiusX())))
         return nullptr;
     list->set(EllipseRadiusXIndex, std::move(radius));
@@ -242,11 +243,11 @@
 
 InterpolationValue convertBasicShape(const BasicShapeEllipse& ellipse, double zoom)
 {
-    OwnPtr<InterpolableList> list = InterpolableList::create(EllipseComponentIndexCount);
+    std::unique_ptr<InterpolableList> list = InterpolableList::create(EllipseComponentIndexCount);
     list->set(EllipseCenterXIndex, convertCoordinate(ellipse.centerX(), zoom));
     list->set(EllipseCenterYIndex, convertCoordinate(ellipse.centerY(), zoom));
 
-    OwnPtr<InterpolableValue> radius;
+    std::unique_ptr<InterpolableValue> radius;
     if (!(radius = convertRadius(ellipse.radiusX(), zoom)))
         return nullptr;
     list->set(EllipseRadiusXIndex, std::move(radius));
@@ -257,9 +258,9 @@
     return InterpolationValue(std::move(list), BasicShapeNonInterpolableValue::create(BasicShape::BasicShapeEllipseType));
 }
 
-PassOwnPtr<InterpolableValue> createNeutralValue()
+std::unique_ptr<InterpolableValue> createNeutralValue()
 {
-    OwnPtr<InterpolableList> list = InterpolableList::create(EllipseComponentIndexCount);
+    std::unique_ptr<InterpolableList> list = InterpolableList::create(EllipseComponentIndexCount);
     list->set(EllipseCenterXIndex, createNeutralInterpolableCoordinate());
     list->set(EllipseCenterYIndex, createNeutralInterpolableCoordinate());
     list->set(EllipseRadiusXIndex, createNeutralInterpolableRadius());
@@ -300,7 +301,7 @@
 
 InterpolationValue convertCSSValue(const CSSBasicShapeInsetValue& inset)
 {
-    OwnPtr<InterpolableList> list = InterpolableList::create(InsetComponentIndexCount);
+    std::unique_ptr<InterpolableList> list = InterpolableList::create(InsetComponentIndexCount);
     list->set(InsetTopIndex, convertCSSLength(inset.top()));
     list->set(InsetRightIndex, convertCSSLength(inset.right()));
     list->set(InsetBottomIndex, convertCSSLength(inset.bottom()));
@@ -319,7 +320,7 @@
 
 InterpolationValue convertBasicShape(const BasicShapeInset& inset, double zoom)
 {
-    OwnPtr<InterpolableList> list = InterpolableList::create(InsetComponentIndexCount);
+    std::unique_ptr<InterpolableList> list = InterpolableList::create(InsetComponentIndexCount);
     list->set(InsetTopIndex, convertLength(inset.top(), zoom));
     list->set(InsetRightIndex, convertLength(inset.right(), zoom));
     list->set(InsetBottomIndex, convertLength(inset.bottom(), zoom));
@@ -336,9 +337,9 @@
     return InterpolationValue(std::move(list), BasicShapeNonInterpolableValue::create(BasicShape::BasicShapeInsetType));
 }
 
-PassOwnPtr<InterpolableValue> createNeutralValue()
+std::unique_ptr<InterpolableValue> createNeutralValue()
 {
-    OwnPtr<InterpolableList> list = InterpolableList::create(InsetComponentIndexCount);
+    std::unique_ptr<InterpolableList> list = InterpolableList::create(InsetComponentIndexCount);
     list->set(InsetTopIndex, CSSLengthInterpolationType::createNeutralInterpolableValue());
     list->set(InsetRightIndex, CSSLengthInterpolationType::createNeutralInterpolableValue());
     list->set(InsetBottomIndex, CSSLengthInterpolationType::createNeutralInterpolableValue());
@@ -378,7 +379,7 @@
 InterpolationValue convertCSSValue(const CSSBasicShapePolygonValue& polygon)
 {
     size_t size = polygon.values().size();
-    OwnPtr<InterpolableList> list = InterpolableList::create(size);
+    std::unique_ptr<InterpolableList> list = InterpolableList::create(size);
     for (size_t i = 0; i < size; i++)
         list->set(i, convertCSSLength(polygon.values()[i].get()));
     return InterpolationValue(std::move(list), BasicShapeNonInterpolableValue::createPolygon(polygon.getWindRule(), size));
@@ -387,15 +388,15 @@
 InterpolationValue convertBasicShape(const BasicShapePolygon& polygon, double zoom)
 {
     size_t size = polygon.values().size();
-    OwnPtr<InterpolableList> list = InterpolableList::create(size);
+    std::unique_ptr<InterpolableList> list = InterpolableList::create(size);
     for (size_t i = 0; i < size; i++)
         list->set(i, convertLength(polygon.values()[i], zoom));
     return InterpolationValue(std::move(list), BasicShapeNonInterpolableValue::createPolygon(polygon.getWindRule(), size));
 }
 
-PassOwnPtr<InterpolableValue> createNeutralValue(const BasicShapeNonInterpolableValue& nonInterpolableValue)
+std::unique_ptr<InterpolableValue> createNeutralValue(const BasicShapeNonInterpolableValue& nonInterpolableValue)
 {
-    OwnPtr<InterpolableList> list = InterpolableList::create(nonInterpolableValue.size());
+    std::unique_ptr<InterpolableList> list = InterpolableList::create(nonInterpolableValue.size());
     for (size_t i = 0; i < nonInterpolableValue.size(); i++)
         list->set(i, CSSLengthInterpolationType::createNeutralInterpolableValue());
     return std::move(list);
@@ -453,7 +454,7 @@
     }
 }
 
-PassOwnPtr<InterpolableValue> BasicShapeInterpolationFunctions::createNeutralValue(const NonInterpolableValue& untypedNonInterpolableValue)
+std::unique_ptr<InterpolableValue> BasicShapeInterpolationFunctions::createNeutralValue(const NonInterpolableValue& untypedNonInterpolableValue)
 {
     const BasicShapeNonInterpolableValue& nonInterpolableValue = toBasicShapeNonInterpolableValue(untypedNonInterpolableValue);
     switch (nonInterpolableValue.type()) {
diff --git a/third_party/WebKit/Source/core/animation/BasicShapeInterpolationFunctions.h b/third_party/WebKit/Source/core/animation/BasicShapeInterpolationFunctions.h
index 6dfcf411..c1d8431 100644
--- a/third_party/WebKit/Source/core/animation/BasicShapeInterpolationFunctions.h
+++ b/third_party/WebKit/Source/core/animation/BasicShapeInterpolationFunctions.h
@@ -6,6 +6,7 @@
 #define BasicShapeInterpolationFunctions_h
 
 #include "core/animation/InterpolationValue.h"
+#include <memory>
 
 namespace blink {
 
@@ -17,7 +18,7 @@
 
 InterpolationValue maybeConvertCSSValue(const CSSValue&);
 InterpolationValue maybeConvertBasicShape(const BasicShape*, double zoom);
-PassOwnPtr<InterpolableValue> createNeutralValue(const NonInterpolableValue&);
+std::unique_ptr<InterpolableValue> createNeutralValue(const NonInterpolableValue&);
 bool shapesAreCompatible(const NonInterpolableValue&, const NonInterpolableValue&);
 PassRefPtr<BasicShape> createBasicShape(const InterpolableValue&, const NonInterpolableValue&, const CSSToLengthConversionData&);
 
diff --git a/third_party/WebKit/Source/core/animation/CSSBasicShapeInterpolationType.cpp b/third_party/WebKit/Source/core/animation/CSSBasicShapeInterpolationType.cpp
index 71790836..4ac573a 100644
--- a/third_party/WebKit/Source/core/animation/CSSBasicShapeInterpolationType.cpp
+++ b/third_party/WebKit/Source/core/animation/CSSBasicShapeInterpolationType.cpp
@@ -10,6 +10,8 @@
 #include "core/css/resolver/StyleResolverState.h"
 #include "core/style/BasicShapes.h"
 #include "core/style/DataEquivalency.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
@@ -17,9 +19,9 @@
 
 class UnderlyingCompatibilityChecker : public InterpolationType::ConversionChecker {
 public:
-    static PassOwnPtr<UnderlyingCompatibilityChecker> create(PassRefPtr<NonInterpolableValue> underlyingNonInterpolableValue)
+    static std::unique_ptr<UnderlyingCompatibilityChecker> create(PassRefPtr<NonInterpolableValue> underlyingNonInterpolableValue)
     {
-        return adoptPtr(new UnderlyingCompatibilityChecker(underlyingNonInterpolableValue));
+        return wrapUnique(new UnderlyingCompatibilityChecker(underlyingNonInterpolableValue));
     }
 
 private:
@@ -37,9 +39,9 @@
 
 class InheritedShapeChecker : public InterpolationType::ConversionChecker {
 public:
-    static PassOwnPtr<InheritedShapeChecker> create(CSSPropertyID property, PassRefPtr<BasicShape> inheritedShape)
+    static std::unique_ptr<InheritedShapeChecker> create(CSSPropertyID property, PassRefPtr<BasicShape> inheritedShape)
     {
-        return adoptPtr(new InheritedShapeChecker(property, inheritedShape));
+        return wrapUnique(new InheritedShapeChecker(property, inheritedShape));
     }
 
 private:
diff --git a/third_party/WebKit/Source/core/animation/CSSBorderImageLengthBoxInterpolationType.cpp b/third_party/WebKit/Source/core/animation/CSSBorderImageLengthBoxInterpolationType.cpp
index e3247cc..3ff1615 100644
--- a/third_party/WebKit/Source/core/animation/CSSBorderImageLengthBoxInterpolationType.cpp
+++ b/third_party/WebKit/Source/core/animation/CSSBorderImageLengthBoxInterpolationType.cpp
@@ -8,6 +8,8 @@
 #include "core/animation/CSSLengthInterpolationType.h"
 #include "core/css/CSSQuadValue.h"
 #include "core/css/resolver/StyleResolverState.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
@@ -84,9 +86,9 @@
 
 class UnderlyingSideNumbersChecker : public InterpolationType::ConversionChecker {
 public:
-    static PassOwnPtr<UnderlyingSideNumbersChecker> create(const SideNumbers& underlyingSideNumbers)
+    static std::unique_ptr<UnderlyingSideNumbersChecker> create(const SideNumbers& underlyingSideNumbers)
     {
-        return adoptPtr(new UnderlyingSideNumbersChecker(underlyingSideNumbers));
+        return wrapUnique(new UnderlyingSideNumbersChecker(underlyingSideNumbers));
     }
 
     static SideNumbers getUnderlyingSideNumbers(const InterpolationValue& underlying)
@@ -109,9 +111,9 @@
 
 class InheritedSideNumbersChecker : public InterpolationType::ConversionChecker {
 public:
-    static PassOwnPtr<InheritedSideNumbersChecker> create(CSSPropertyID property, const SideNumbers& inheritedSideNumbers)
+    static std::unique_ptr<InheritedSideNumbersChecker> create(CSSPropertyID property, const SideNumbers& inheritedSideNumbers)
     {
-        return adoptPtr(new InheritedSideNumbersChecker(property, inheritedSideNumbers));
+        return wrapUnique(new InheritedSideNumbersChecker(property, inheritedSideNumbers));
     }
 
 private:
@@ -131,7 +133,7 @@
 
 InterpolationValue convertBorderImageLengthBox(const BorderImageLengthBox& box, double zoom)
 {
-    OwnPtr<InterpolableList> list = InterpolableList::create(SideIndexCount);
+    std::unique_ptr<InterpolableList> list = InterpolableList::create(SideIndexCount);
     Vector<RefPtr<NonInterpolableValue>> nonInterpolableValues(SideIndexCount);
     const BorderImageLength* sides[SideIndexCount] = {};
     sides[SideTop] = &box.top();
@@ -191,7 +193,7 @@
         return nullptr;
 
     const CSSQuadValue& quad = toCSSQuadValue(value);
-    OwnPtr<InterpolableList> list = InterpolableList::create(SideIndexCount);
+    std::unique_ptr<InterpolableList> list = InterpolableList::create(SideIndexCount);
     Vector<RefPtr<NonInterpolableValue>> nonInterpolableValues(SideIndexCount);
     const CSSPrimitiveValue* sides[SideIndexCount] = {};
     sides[SideTop] = quad.top();
diff --git a/third_party/WebKit/Source/core/animation/CSSClipInterpolationType.cpp b/third_party/WebKit/Source/core/animation/CSSClipInterpolationType.cpp
index 898dd59..f3d3a35 100644
--- a/third_party/WebKit/Source/core/animation/CSSClipInterpolationType.cpp
+++ b/third_party/WebKit/Source/core/animation/CSSClipInterpolationType.cpp
@@ -7,6 +7,8 @@
 #include "core/animation/CSSLengthInterpolationType.h"
 #include "core/css/CSSQuadValue.h"
 #include "core/css/resolver/StyleResolverState.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
@@ -63,9 +65,9 @@
 
 class ParentAutosChecker : public InterpolationType::ConversionChecker {
 public:
-    static PassOwnPtr<ParentAutosChecker> create(const ClipAutos& parentAutos)
+    static std::unique_ptr<ParentAutosChecker> create(const ClipAutos& parentAutos)
     {
-        return adoptPtr(new ParentAutosChecker(parentAutos));
+        return wrapUnique(new ParentAutosChecker(parentAutos));
     }
 
 private:
@@ -111,9 +113,9 @@
 public:
     ~UnderlyingAutosChecker() final {}
 
-    static PassOwnPtr<UnderlyingAutosChecker> create(const ClipAutos& underlyingAutos)
+    static std::unique_ptr<UnderlyingAutosChecker> create(const ClipAutos& underlyingAutos)
     {
-        return adoptPtr(new UnderlyingAutosChecker(underlyingAutos));
+        return wrapUnique(new UnderlyingAutosChecker(underlyingAutos));
     }
 
     static ClipAutos getUnderlyingAutos(const InterpolationValue& underlying)
@@ -144,7 +146,7 @@
     ClipComponentIndexCount,
 };
 
-static PassOwnPtr<InterpolableValue> convertClipComponent(const Length& length, double zoom)
+static std::unique_ptr<InterpolableValue> convertClipComponent(const Length& length, double zoom)
 {
     if (length.isAuto())
         return InterpolableList::create(0);
@@ -153,7 +155,7 @@
 
 static InterpolationValue createClipValue(const LengthBox& clip, double zoom)
 {
-    OwnPtr<InterpolableList> list = InterpolableList::create(ClipComponentIndexCount);
+    std::unique_ptr<InterpolableList> list = InterpolableList::create(ClipComponentIndexCount);
     list->set(ClipTop, convertClipComponent(clip.top(), zoom));
     list->set(ClipRight, convertClipComponent(clip.right(), zoom));
     list->set(ClipBottom, convertClipComponent(clip.bottom(), zoom));
@@ -194,7 +196,7 @@
     return value.getValueID() == CSSValueAuto;
 }
 
-static PassOwnPtr<InterpolableValue> convertClipComponent(const CSSPrimitiveValue& length)
+static std::unique_ptr<InterpolableValue> convertClipComponent(const CSSPrimitiveValue& length)
 {
     if (isCSSAuto(length))
         return InterpolableList::create(0);
@@ -206,7 +208,7 @@
     if (!value.isQuadValue())
         return nullptr;
     const CSSQuadValue& quad = toCSSQuadValue(value);
-    OwnPtr<InterpolableList> list = InterpolableList::create(ClipComponentIndexCount);
+    std::unique_ptr<InterpolableList> list = InterpolableList::create(ClipComponentIndexCount);
     list->set(ClipTop, convertClipComponent(*quad.top()));
     list->set(ClipRight, convertClipComponent(*quad.right()));
     list->set(ClipBottom, convertClipComponent(*quad.bottom()));
diff --git a/third_party/WebKit/Source/core/animation/CSSColorInterpolationType.cpp b/third_party/WebKit/Source/core/animation/CSSColorInterpolationType.cpp
index 19c50847..06264b1 100644
--- a/third_party/WebKit/Source/core/animation/CSSColorInterpolationType.cpp
+++ b/third_party/WebKit/Source/core/animation/CSSColorInterpolationType.cpp
@@ -8,6 +8,8 @@
 #include "core/css/CSSColorValue.h"
 #include "core/css/resolver/StyleResolverState.h"
 #include "core/layout/LayoutTheme.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
@@ -23,18 +25,18 @@
     InterpolableColorIndexCount,
 };
 
-static PassOwnPtr<InterpolableValue> createInterpolableColorForIndex(InterpolableColorIndex index)
+static std::unique_ptr<InterpolableValue> createInterpolableColorForIndex(InterpolableColorIndex index)
 {
     ASSERT(index < InterpolableColorIndexCount);
-    OwnPtr<InterpolableList> list = InterpolableList::create(InterpolableColorIndexCount);
+    std::unique_ptr<InterpolableList> list = InterpolableList::create(InterpolableColorIndexCount);
     for (int i = 0; i < InterpolableColorIndexCount; i++)
         list->set(i, InterpolableNumber::create(i == index));
     return std::move(list);
 }
 
-PassOwnPtr<InterpolableValue> CSSColorInterpolationType::createInterpolableColor(const Color& color)
+std::unique_ptr<InterpolableValue> CSSColorInterpolationType::createInterpolableColor(const Color& color)
 {
-    OwnPtr<InterpolableList> list = InterpolableList::create(InterpolableColorIndexCount);
+    std::unique_ptr<InterpolableList> list = InterpolableList::create(InterpolableColorIndexCount);
     list->set(Red, InterpolableNumber::create(color.red() * color.alpha()));
     list->set(Green, InterpolableNumber::create(color.green() * color.alpha()));
     list->set(Blue, InterpolableNumber::create(color.blue() * color.alpha()));
@@ -46,7 +48,7 @@
     return std::move(list);
 }
 
-PassOwnPtr<InterpolableValue> CSSColorInterpolationType::createInterpolableColor(CSSValueID keyword)
+std::unique_ptr<InterpolableValue> CSSColorInterpolationType::createInterpolableColor(CSSValueID keyword)
 {
     switch (keyword) {
     case CSSValueCurrentcolor:
@@ -65,14 +67,14 @@
     }
 }
 
-PassOwnPtr<InterpolableValue> CSSColorInterpolationType::createInterpolableColor(const StyleColor& color)
+std::unique_ptr<InterpolableValue> CSSColorInterpolationType::createInterpolableColor(const StyleColor& color)
 {
     if (color.isCurrentColor())
         return createInterpolableColorForIndex(Currentcolor);
     return createInterpolableColor(color.getColor());
 }
 
-PassOwnPtr<InterpolableValue> CSSColorInterpolationType::maybeCreateInterpolableColor(const CSSValue& value)
+std::unique_ptr<InterpolableValue> CSSColorInterpolationType::maybeCreateInterpolableColor(const CSSValue& value)
 {
     if (value.isColorValue())
         return createInterpolableColor(toCSSColorValue(value).value());
@@ -135,9 +137,9 @@
 
 class ParentColorChecker : public InterpolationType::ConversionChecker {
 public:
-    static PassOwnPtr<ParentColorChecker> create(CSSPropertyID property, const StyleColor& color)
+    static std::unique_ptr<ParentColorChecker> create(CSSPropertyID property, const StyleColor& color)
     {
-        return adoptPtr(new ParentColorChecker(property, color));
+        return wrapUnique(new ParentColorChecker(property, color));
     }
 
 private:
@@ -187,10 +189,10 @@
     if (cssProperty() == CSSPropertyColor && value.isPrimitiveValue() && toCSSPrimitiveValue(value).getValueID() == CSSValueCurrentcolor)
         return maybeConvertInherit(state, conversionCheckers);
 
-    OwnPtr<InterpolableValue> interpolableColor = maybeCreateInterpolableColor(value);
+    std::unique_ptr<InterpolableValue> interpolableColor = maybeCreateInterpolableColor(value);
     if (!interpolableColor)
         return nullptr;
-    OwnPtr<InterpolableList> colorPair = InterpolableList::create(InterpolableColorPairIndexCount);
+    std::unique_ptr<InterpolableList> colorPair = InterpolableList::create(InterpolableColorPairIndexCount);
     colorPair->set(Unvisited, interpolableColor->clone());
     colorPair->set(Visited, std::move(interpolableColor));
     return InterpolationValue(std::move(colorPair));
@@ -198,7 +200,7 @@
 
 InterpolationValue CSSColorInterpolationType::convertStyleColorPair(const StyleColor& unvisitedColor, const StyleColor& visitedColor) const
 {
-    OwnPtr<InterpolableList> colorPair = InterpolableList::create(InterpolableColorPairIndexCount);
+    std::unique_ptr<InterpolableList> colorPair = InterpolableList::create(InterpolableColorPairIndexCount);
     colorPair->set(Unvisited, createInterpolableColor(unvisitedColor));
     colorPair->set(Visited, createInterpolableColor(visitedColor));
     return InterpolationValue(std::move(colorPair));
diff --git a/third_party/WebKit/Source/core/animation/CSSColorInterpolationType.h b/third_party/WebKit/Source/core/animation/CSSColorInterpolationType.h
index 02f60d8..23c64f43 100644
--- a/third_party/WebKit/Source/core/animation/CSSColorInterpolationType.h
+++ b/third_party/WebKit/Source/core/animation/CSSColorInterpolationType.h
@@ -8,6 +8,7 @@
 #include "core/CSSValueKeywords.h"
 #include "core/animation/CSSInterpolationType.h"
 #include "platform/graphics/Color.h"
+#include <memory>
 
 namespace blink {
 
@@ -22,10 +23,10 @@
     InterpolationValue maybeConvertUnderlyingValue(const InterpolationEnvironment&) const final;
     void apply(const InterpolableValue&, const NonInterpolableValue*, InterpolationEnvironment&) const final;
 
-    static PassOwnPtr<InterpolableValue> createInterpolableColor(const Color&);
-    static PassOwnPtr<InterpolableValue> createInterpolableColor(CSSValueID);
-    static PassOwnPtr<InterpolableValue> createInterpolableColor(const StyleColor&);
-    static PassOwnPtr<InterpolableValue> maybeCreateInterpolableColor(const CSSValue&);
+    static std::unique_ptr<InterpolableValue> createInterpolableColor(const Color&);
+    static std::unique_ptr<InterpolableValue> createInterpolableColor(CSSValueID);
+    static std::unique_ptr<InterpolableValue> createInterpolableColor(const StyleColor&);
+    static std::unique_ptr<InterpolableValue> maybeCreateInterpolableColor(const CSSValue&);
     static Color resolveInterpolableColor(const InterpolableValue& interpolableColor, const StyleResolverState&, bool isVisited = false, bool isTextDecoration = false);
 
 private:
diff --git a/third_party/WebKit/Source/core/animation/CSSFilterListInterpolationType.cpp b/third_party/WebKit/Source/core/animation/CSSFilterListInterpolationType.cpp
index 7ddefa2..7e28a0e 100644
--- a/third_party/WebKit/Source/core/animation/CSSFilterListInterpolationType.cpp
+++ b/third_party/WebKit/Source/core/animation/CSSFilterListInterpolationType.cpp
@@ -9,6 +9,8 @@
 #include "core/animation/ListInterpolationFunctions.h"
 #include "core/css/CSSValueList.h"
 #include "core/css/resolver/StyleResolverState.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
@@ -16,9 +18,9 @@
 
 class UnderlyingFilterListChecker : public InterpolationType::ConversionChecker {
 public:
-    static PassOwnPtr<UnderlyingFilterListChecker> create(PassRefPtr<NonInterpolableList> nonInterpolableList)
+    static std::unique_ptr<UnderlyingFilterListChecker> create(PassRefPtr<NonInterpolableList> nonInterpolableList)
     {
-        return adoptPtr(new UnderlyingFilterListChecker(nonInterpolableList));
+        return wrapUnique(new UnderlyingFilterListChecker(nonInterpolableList));
     }
 
     bool isValid(const InterpolationEnvironment&, const InterpolationValue& underlying) const final
@@ -43,9 +45,9 @@
 
 class InheritedFilterListChecker : public InterpolationType::ConversionChecker {
 public:
-    static PassOwnPtr<InheritedFilterListChecker> create(CSSPropertyID property, const FilterOperations& filterOperations)
+    static std::unique_ptr<InheritedFilterListChecker> create(CSSPropertyID property, const FilterOperations& filterOperations)
     {
-        return adoptPtr(new InheritedFilterListChecker(property, filterOperations));
+        return wrapUnique(new InheritedFilterListChecker(property, filterOperations));
     }
 
     bool isValid(const InterpolationEnvironment& environment, const InterpolationValue&) const final
@@ -67,7 +69,7 @@
 InterpolationValue convertFilterList(const FilterOperations& filterOperations, double zoom)
 {
     size_t length = filterOperations.size();
-    OwnPtr<InterpolableList> interpolableList = InterpolableList::create(length);
+    std::unique_ptr<InterpolableList> interpolableList = InterpolableList::create(length);
     Vector<RefPtr<NonInterpolableValue>> nonInterpolableValues(length);
     for (size_t i = 0; i < length; i++) {
         InterpolationValue filterResult = FilterInterpolationFunctions::maybeConvertFilter(*filterOperations.operations()[i], zoom);
@@ -111,7 +113,7 @@
 
     const CSSValueList& list = toCSSValueList(value);
     size_t length = list.length();
-    OwnPtr<InterpolableList> interpolableList = InterpolableList::create(length);
+    std::unique_ptr<InterpolableList> interpolableList = InterpolableList::create(length);
     Vector<RefPtr<NonInterpolableValue>> nonInterpolableValues(length);
     for (size_t i = 0; i < length; i++) {
         InterpolationValue itemResult = FilterInterpolationFunctions::maybeConvertCSSFilter(list.item(i));
@@ -151,7 +153,7 @@
     size_t longerLength = toNonInterpolableList(*longer.nonInterpolableValue).length();
     InterpolableList& shorterInterpolableList = toInterpolableList(*shorter.interpolableValue);
     const NonInterpolableList& longerNonInterpolableList = toNonInterpolableList(*longer.nonInterpolableValue);
-    OwnPtr<InterpolableList> extendedInterpolableList = InterpolableList::create(longerLength);
+    std::unique_ptr<InterpolableList> extendedInterpolableList = InterpolableList::create(longerLength);
     for (size_t i = 0; i < longerLength; i++) {
         if (i < shorterLength)
             extendedInterpolableList->set(i, std::move(shorterInterpolableList.getMutable(i)));
@@ -188,7 +190,7 @@
     if (length <= underlyingLength)
         return;
 
-    OwnPtr<InterpolableList> extendedInterpolableList = InterpolableList::create(length);
+    std::unique_ptr<InterpolableList> extendedInterpolableList = InterpolableList::create(length);
     for (size_t i = 0; i < length; i++) {
         if (i < underlyingLength)
             extendedInterpolableList->set(i, std::move(underlyingInterpolableList.getMutable(i)));
diff --git a/third_party/WebKit/Source/core/animation/CSSFontSizeInterpolationType.cpp b/third_party/WebKit/Source/core/animation/CSSFontSizeInterpolationType.cpp
index b409ffc..5499639 100644
--- a/third_party/WebKit/Source/core/animation/CSSFontSizeInterpolationType.cpp
+++ b/third_party/WebKit/Source/core/animation/CSSFontSizeInterpolationType.cpp
@@ -9,6 +9,8 @@
 #include "core/css/resolver/StyleResolverState.h"
 #include "platform/LengthFunctions.h"
 #include "platform/fonts/FontDescription.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
@@ -16,9 +18,9 @@
 
 class IsMonospaceChecker : public InterpolationType::ConversionChecker {
 public:
-    static PassOwnPtr<IsMonospaceChecker> create(bool isMonospace)
+    static std::unique_ptr<IsMonospaceChecker> create(bool isMonospace)
     {
-        return adoptPtr(new IsMonospaceChecker(isMonospace));
+        return wrapUnique(new IsMonospaceChecker(isMonospace));
     }
 private:
     IsMonospaceChecker(bool isMonospace)
@@ -35,9 +37,9 @@
 
 class InheritedFontSizeChecker : public InterpolationType::ConversionChecker {
 public:
-    static PassOwnPtr<InheritedFontSizeChecker> create(const FontDescription::Size& inheritedFontSize)
+    static std::unique_ptr<InheritedFontSizeChecker> create(const FontDescription::Size& inheritedFontSize)
     {
-        return adoptPtr(new InheritedFontSizeChecker(inheritedFontSize));
+        return wrapUnique(new InheritedFontSizeChecker(inheritedFontSize));
     }
 
 private:
@@ -97,7 +99,7 @@
 
 InterpolationValue CSSFontSizeInterpolationType::maybeConvertValue(const CSSValue& value, const StyleResolverState& state, ConversionCheckers& conversionCheckers) const
 {
-    OwnPtr<InterpolableValue> result = CSSLengthInterpolationType::maybeConvertCSSValue(value).interpolableValue;
+    std::unique_ptr<InterpolableValue> result = CSSLengthInterpolationType::maybeConvertCSSValue(value).interpolableValue;
     if (result)
         return InterpolationValue(std::move(result));
 
diff --git a/third_party/WebKit/Source/core/animation/CSSFontWeightInterpolationType.cpp b/third_party/WebKit/Source/core/animation/CSSFontWeightInterpolationType.cpp
index cbc644c..9fa8de3 100644
--- a/third_party/WebKit/Source/core/animation/CSSFontWeightInterpolationType.cpp
+++ b/third_party/WebKit/Source/core/animation/CSSFontWeightInterpolationType.cpp
@@ -6,6 +6,8 @@
 
 #include "core/css/CSSPrimitiveValueMappings.h"
 #include "core/css/resolver/StyleResolverState.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
@@ -57,9 +59,9 @@
 
 class ParentFontWeightChecker : public InterpolationType::ConversionChecker {
 public:
-    static PassOwnPtr<ParentFontWeightChecker> create(FontWeight fontWeight)
+    static std::unique_ptr<ParentFontWeightChecker> create(FontWeight fontWeight)
     {
-        return adoptPtr(new ParentFontWeightChecker(fontWeight));
+        return wrapUnique(new ParentFontWeightChecker(fontWeight));
     }
 
 private:
diff --git a/third_party/WebKit/Source/core/animation/CSSImageInterpolationType.cpp b/third_party/WebKit/Source/core/animation/CSSImageInterpolationType.cpp
index 60a9a0a3..415a388 100644
--- a/third_party/WebKit/Source/core/animation/CSSImageInterpolationType.cpp
+++ b/third_party/WebKit/Source/core/animation/CSSImageInterpolationType.cpp
@@ -9,6 +9,8 @@
 #include "core/css/CSSPrimitiveValue.h"
 #include "core/css/resolver/StyleResolverState.h"
 #include "core/style/StyleImage.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
@@ -113,9 +115,9 @@
 public:
     ~UnderlyingImageChecker() final {}
 
-    static PassOwnPtr<UnderlyingImageChecker> create(const InterpolationValue& underlying)
+    static std::unique_ptr<UnderlyingImageChecker> create(const InterpolationValue& underlying)
     {
-        return adoptPtr(new UnderlyingImageChecker(underlying));
+        return wrapUnique(new UnderlyingImageChecker(underlying));
     }
 
 private:
@@ -151,9 +153,9 @@
 public:
     ~ParentImageChecker() final {}
 
-    static PassOwnPtr<ParentImageChecker> create(CSSPropertyID property, StyleImage* inheritedImage)
+    static std::unique_ptr<ParentImageChecker> create(CSSPropertyID property, StyleImage* inheritedImage)
     {
-        return adoptPtr(new ParentImageChecker(property, inheritedImage));
+        return wrapUnique(new ParentImageChecker(property, inheritedImage));
     }
 
 private:
diff --git a/third_party/WebKit/Source/core/animation/CSSImageListInterpolationType.cpp b/third_party/WebKit/Source/core/animation/CSSImageListInterpolationType.cpp
index d18b6ee..90c0168b 100644
--- a/third_party/WebKit/Source/core/animation/CSSImageListInterpolationType.cpp
+++ b/third_party/WebKit/Source/core/animation/CSSImageListInterpolationType.cpp
@@ -10,6 +10,8 @@
 #include "core/css/CSSPrimitiveValue.h"
 #include "core/css/CSSValueList.h"
 #include "core/css/resolver/StyleResolverState.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
@@ -17,9 +19,9 @@
 public:
     ~UnderlyingImageListChecker() final {}
 
-    static PassOwnPtr<UnderlyingImageListChecker> create(const InterpolationValue& underlying)
+    static std::unique_ptr<UnderlyingImageListChecker> create(const InterpolationValue& underlying)
     {
-        return adoptPtr(new UnderlyingImageListChecker(underlying));
+        return wrapUnique(new UnderlyingImageListChecker(underlying));
     }
 
 private:
@@ -62,9 +64,9 @@
 public:
     ~ParentImageListChecker() final {}
 
-    static PassOwnPtr<ParentImageListChecker> create(CSSPropertyID property, const StyleImageList& inheritedImageList)
+    static std::unique_ptr<ParentImageListChecker> create(CSSPropertyID property, const StyleImageList& inheritedImageList)
     {
-        return adoptPtr(new ParentImageListChecker(property, inheritedImageList));
+        return wrapUnique(new ParentImageListChecker(property, inheritedImageList));
     }
 
 private:
@@ -108,7 +110,7 @@
     const CSSValueList& valueList = tempList ? *tempList : toCSSValueList(value);
 
     const size_t length = valueList.length();
-    OwnPtr<InterpolableList> interpolableList = InterpolableList::create(length);
+    std::unique_ptr<InterpolableList> interpolableList = InterpolableList::create(length);
     Vector<RefPtr<NonInterpolableValue>> nonInterpolableValues(length);
     for (size_t i = 0; i < length; i++) {
         InterpolationValue component = CSSImageInterpolationType::maybeConvertCSSValue(valueList.item(i), false);
diff --git a/third_party/WebKit/Source/core/animation/CSSImageSliceInterpolationType.cpp b/third_party/WebKit/Source/core/animation/CSSImageSliceInterpolationType.cpp
index 76890c03..1a6aff64 100644
--- a/third_party/WebKit/Source/core/animation/CSSImageSliceInterpolationType.cpp
+++ b/third_party/WebKit/Source/core/animation/CSSImageSliceInterpolationType.cpp
@@ -8,6 +8,8 @@
 #include "core/animation/ImageSlicePropertyFunctions.h"
 #include "core/css/CSSBorderImageSliceValue.h"
 #include "core/css/resolver/StyleResolverState.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
@@ -82,9 +84,9 @@
 
 class UnderlyingSliceTypesChecker : public InterpolationType::ConversionChecker {
 public:
-    static PassOwnPtr<UnderlyingSliceTypesChecker> create(const SliceTypes& underlyingTypes)
+    static std::unique_ptr<UnderlyingSliceTypesChecker> create(const SliceTypes& underlyingTypes)
     {
-        return adoptPtr(new UnderlyingSliceTypesChecker(underlyingTypes));
+        return wrapUnique(new UnderlyingSliceTypesChecker(underlyingTypes));
     }
 
     static SliceTypes getUnderlyingSliceTypes(const InterpolationValue& underlying)
@@ -107,9 +109,9 @@
 
 class InheritedSliceTypesChecker : public InterpolationType::ConversionChecker {
 public:
-    static PassOwnPtr<InheritedSliceTypesChecker> create(CSSPropertyID property, const SliceTypes& inheritedTypes)
+    static std::unique_ptr<InheritedSliceTypesChecker> create(CSSPropertyID property, const SliceTypes& inheritedTypes)
     {
-        return adoptPtr(new InheritedSliceTypesChecker(property, inheritedTypes));
+        return wrapUnique(new InheritedSliceTypesChecker(property, inheritedTypes));
     }
 
 private:
@@ -129,7 +131,7 @@
 
 InterpolationValue convertImageSlice(const ImageSlice& slice, double zoom)
 {
-    OwnPtr<InterpolableList> list = InterpolableList::create(SideIndexCount);
+    std::unique_ptr<InterpolableList> list = InterpolableList::create(SideIndexCount);
     const Length* sides[SideIndexCount] = {};
     sides[SideTop] = &slice.slices.top();
     sides[SideRight] = &slice.slices.right();
@@ -176,7 +178,7 @@
         return nullptr;
 
     const CSSBorderImageSliceValue& slice = toCSSBorderImageSliceValue(value);
-    OwnPtr<InterpolableList> list = InterpolableList::create(SideIndexCount);
+    std::unique_ptr<InterpolableList> list = InterpolableList::create(SideIndexCount);
     const CSSPrimitiveValue* sides[SideIndexCount];
     sides[SideTop] = slice.slices().top();
     sides[SideRight] = slice.slices().right();
diff --git a/third_party/WebKit/Source/core/animation/CSSInterpolationType.cpp b/third_party/WebKit/Source/core/animation/CSSInterpolationType.cpp
index 0778f77..a5041dc 100644
--- a/third_party/WebKit/Source/core/animation/CSSInterpolationType.cpp
+++ b/third_party/WebKit/Source/core/animation/CSSInterpolationType.cpp
@@ -10,14 +10,16 @@
 #include "core/css/resolver/CSSVariableResolver.h"
 #include "core/css/resolver/StyleResolverState.h"
 #include "platform/RuntimeEnabledFeatures.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
 class ResolvedVariableChecker : public InterpolationType::ConversionChecker {
 public:
-    static PassOwnPtr<ResolvedVariableChecker> create(CSSPropertyID property, const CSSVariableReferenceValue* variableReference, const CSSValue* resolvedValue)
+    static std::unique_ptr<ResolvedVariableChecker> create(CSSPropertyID property, const CSSVariableReferenceValue* variableReference, const CSSValue* resolvedValue)
     {
-        return adoptPtr(new ResolvedVariableChecker(property, variableReference, resolvedValue));
+        return wrapUnique(new ResolvedVariableChecker(property, variableReference, resolvedValue));
     }
 
 private:
diff --git a/third_party/WebKit/Source/core/animation/CSSLengthInterpolationType.cpp b/third_party/WebKit/Source/core/animation/CSSLengthInterpolationType.cpp
index 8296f3ff..15ed438 100644
--- a/third_party/WebKit/Source/core/animation/CSSLengthInterpolationType.cpp
+++ b/third_party/WebKit/Source/core/animation/CSSLengthInterpolationType.cpp
@@ -9,6 +9,8 @@
 #include "core/css/CSSCalculationValue.h"
 #include "core/css/resolver/StyleBuilder.h"
 #include "core/css/resolver/StyleResolverState.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
@@ -52,16 +54,16 @@
     return LengthPropertyFunctions::isZoomedLength(cssProperty()) ? style.effectiveZoom() : 1;
 }
 
-PassOwnPtr<InterpolableValue> CSSLengthInterpolationType::createInterpolablePixels(double pixels)
+std::unique_ptr<InterpolableValue> CSSLengthInterpolationType::createInterpolablePixels(double pixels)
 {
-    OwnPtr<InterpolableList> interpolableList = createNeutralInterpolableValue();
+    std::unique_ptr<InterpolableList> interpolableList = createNeutralInterpolableValue();
     interpolableList->set(CSSPrimitiveValue::UnitTypePixels, InterpolableNumber::create(pixels));
     return std::move(interpolableList);
 }
 
 InterpolationValue CSSLengthInterpolationType::createInterpolablePercent(double percent)
 {
-    OwnPtr<InterpolableList> interpolableList = createNeutralInterpolableValue();
+    std::unique_ptr<InterpolableList> interpolableList = createNeutralInterpolableValue();
     interpolableList->set(CSSPrimitiveValue::UnitTypePercentage, InterpolableNumber::create(percent));
     return InterpolationValue(std::move(interpolableList), CSSLengthNonInterpolableValue::create(true));
 }
@@ -72,17 +74,17 @@
         return nullptr;
 
     PixelsAndPercent pixelsAndPercent = length.getPixelsAndPercent();
-    OwnPtr<InterpolableList> values = createNeutralInterpolableValue();
+    std::unique_ptr<InterpolableList> values = createNeutralInterpolableValue();
     values->set(CSSPrimitiveValue::UnitTypePixels, InterpolableNumber::create(pixelsAndPercent.pixels / zoom));
     values->set(CSSPrimitiveValue::UnitTypePercentage, InterpolableNumber::create(pixelsAndPercent.percent));
 
     return InterpolationValue(std::move(values), CSSLengthNonInterpolableValue::create(length.hasPercent()));
 }
 
-PassOwnPtr<InterpolableList> CSSLengthInterpolationType::createNeutralInterpolableValue()
+std::unique_ptr<InterpolableList> CSSLengthInterpolationType::createNeutralInterpolableValue()
 {
     const size_t length = CSSPrimitiveValue::LengthUnitTypeCount;
-    OwnPtr<InterpolableList> values = InterpolableList::create(length);
+    std::unique_ptr<InterpolableList> values = InterpolableList::create(length);
     for (size_t i = 0; i < length; i++)
         values->set(i, InterpolableNumber::create(0));
     return values;
@@ -102,7 +104,7 @@
 }
 
 void CSSLengthInterpolationType::composite(
-    OwnPtr<InterpolableValue>& underlyingInterpolableValue,
+    std::unique_ptr<InterpolableValue>& underlyingInterpolableValue,
     RefPtr<NonInterpolableValue>& underlyingNonInterpolableValue,
     double underlyingFraction,
     const InterpolableValue& interpolableValue,
@@ -136,7 +138,7 @@
     CSSLengthArray lengthArray;
     primitiveValue.accumulateLengthArray(lengthArray);
 
-    OwnPtr<InterpolableList> values = InterpolableList::create(CSSPrimitiveValue::LengthUnitTypeCount);
+    std::unique_ptr<InterpolableList> values = InterpolableList::create(CSSPrimitiveValue::LengthUnitTypeCount);
     for (size_t i = 0; i < CSSPrimitiveValue::LengthUnitTypeCount; i++)
         values->set(i, InterpolableNumber::create(lengthArray.values[i]));
 
@@ -146,9 +148,9 @@
 
 class ParentLengthChecker : public InterpolationType::ConversionChecker {
 public:
-    static PassOwnPtr<ParentLengthChecker> create(CSSPropertyID property, const Length& length)
+    static std::unique_ptr<ParentLengthChecker> create(CSSPropertyID property, const Length& length)
     {
-        return adoptPtr(new ParentLengthChecker(property, length));
+        return wrapUnique(new ParentLengthChecker(property, length));
     }
 
 private:
diff --git a/third_party/WebKit/Source/core/animation/CSSLengthInterpolationType.h b/third_party/WebKit/Source/core/animation/CSSLengthInterpolationType.h
index 84f9b94..2537a204 100644
--- a/third_party/WebKit/Source/core/animation/CSSLengthInterpolationType.h
+++ b/third_party/WebKit/Source/core/animation/CSSLengthInterpolationType.h
@@ -7,6 +7,7 @@
 
 #include "core/animation/CSSInterpolationType.h"
 #include "core/animation/LengthPropertyFunctions.h"
+#include <memory>
 
 namespace blink {
 
@@ -22,14 +23,14 @@
     void apply(const InterpolableValue&, const NonInterpolableValue*, InterpolationEnvironment&) const final;
 
     static Length resolveInterpolableLength(const InterpolableValue&, const NonInterpolableValue*, const CSSToLengthConversionData&, ValueRange = ValueRangeAll);
-    static PassOwnPtr<InterpolableValue> createInterpolablePixels(double pixels);
+    static std::unique_ptr<InterpolableValue> createInterpolablePixels(double pixels);
     static InterpolationValue createInterpolablePercent(double percent);
     static InterpolationValue maybeConvertCSSValue(const CSSValue&);
     static InterpolationValue maybeConvertLength(const Length&, float zoom);
-    static PassOwnPtr<InterpolableList> createNeutralInterpolableValue();
+    static std::unique_ptr<InterpolableList> createNeutralInterpolableValue();
     static PairwiseInterpolationValue staticMergeSingleConversions(InterpolationValue&& start, InterpolationValue&& end);
     static bool nonInterpolableValuesAreCompatible(const NonInterpolableValue*, const NonInterpolableValue*);
-    static void composite(OwnPtr<InterpolableValue>&, RefPtr<NonInterpolableValue>&, double underlyingFraction, const InterpolableValue&, const NonInterpolableValue*);
+    static void composite(std::unique_ptr<InterpolableValue>&, RefPtr<NonInterpolableValue>&, double underlyingFraction, const InterpolableValue&, const NonInterpolableValue*);
     static void subtractFromOneHundredPercent(InterpolationValue& result);
 
 private:
diff --git a/third_party/WebKit/Source/core/animation/CSSLengthListInterpolationType.cpp b/third_party/WebKit/Source/core/animation/CSSLengthListInterpolationType.cpp
index 8e38df9..e9822d6 100644
--- a/third_party/WebKit/Source/core/animation/CSSLengthListInterpolationType.cpp
+++ b/third_party/WebKit/Source/core/animation/CSSLengthListInterpolationType.cpp
@@ -11,6 +11,8 @@
 #include "core/css/CSSPrimitiveValue.h"
 #include "core/css/CSSValueList.h"
 #include "core/css/resolver/StyleResolverState.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
@@ -55,9 +57,9 @@
 public:
     ~ParentLengthListChecker() final {}
 
-    static PassOwnPtr<ParentLengthListChecker> create(CSSPropertyID property, const Vector<Length>& inheritedLengthList)
+    static std::unique_ptr<ParentLengthListChecker> create(CSSPropertyID property, const Vector<Length>& inheritedLengthList)
     {
-        return adoptPtr(new ParentLengthListChecker(property, inheritedLengthList));
+        return wrapUnique(new ParentLengthListChecker(property, inheritedLengthList));
     }
 
 private:
diff --git a/third_party/WebKit/Source/core/animation/CSSMotionRotationInterpolationType.cpp b/third_party/WebKit/Source/core/animation/CSSMotionRotationInterpolationType.cpp
index 4f50495..3a55984 100644
--- a/third_party/WebKit/Source/core/animation/CSSMotionRotationInterpolationType.cpp
+++ b/third_party/WebKit/Source/core/animation/CSSMotionRotationInterpolationType.cpp
@@ -6,6 +6,8 @@
 
 #include "core/css/resolver/StyleBuilderConverter.h"
 #include "core/style/StyleMotionRotation.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
@@ -37,9 +39,9 @@
 
 class UnderlyingRotationTypeChecker : public InterpolationType::ConversionChecker {
 public:
-    static PassOwnPtr<UnderlyingRotationTypeChecker> create(MotionRotationType underlyingRotationType)
+    static std::unique_ptr<UnderlyingRotationTypeChecker> create(MotionRotationType underlyingRotationType)
     {
-        return adoptPtr(new UnderlyingRotationTypeChecker(underlyingRotationType));
+        return wrapUnique(new UnderlyingRotationTypeChecker(underlyingRotationType));
     }
 
     bool isValid(const InterpolationEnvironment&, const InterpolationValue& underlying) const final
@@ -57,9 +59,9 @@
 
 class InheritedRotationTypeChecker : public InterpolationType::ConversionChecker {
 public:
-    static PassOwnPtr<InheritedRotationTypeChecker> create(MotionRotationType inheritedRotationType)
+    static std::unique_ptr<InheritedRotationTypeChecker> create(MotionRotationType inheritedRotationType)
     {
-        return adoptPtr(new InheritedRotationTypeChecker(inheritedRotationType));
+        return wrapUnique(new InheritedRotationTypeChecker(inheritedRotationType));
     }
 
     bool isValid(const InterpolationEnvironment& environment, const InterpolationValue& underlying) const final
diff --git a/third_party/WebKit/Source/core/animation/CSSNumberInterpolationType.cpp b/third_party/WebKit/Source/core/animation/CSSNumberInterpolationType.cpp
index 1d759e0..b2df15d 100644
--- a/third_party/WebKit/Source/core/animation/CSSNumberInterpolationType.cpp
+++ b/third_party/WebKit/Source/core/animation/CSSNumberInterpolationType.cpp
@@ -7,14 +7,16 @@
 #include "core/animation/NumberPropertyFunctions.h"
 #include "core/css/resolver/StyleBuilder.h"
 #include "core/css/resolver/StyleResolverState.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
 class ParentNumberChecker : public InterpolationType::ConversionChecker {
 public:
-    static PassOwnPtr<ParentNumberChecker> create(CSSPropertyID property, double number)
+    static std::unique_ptr<ParentNumberChecker> create(CSSPropertyID property, double number)
     {
-        return adoptPtr(new ParentNumberChecker(property, number));
+        return wrapUnique(new ParentNumberChecker(property, number));
     }
 
 private:
diff --git a/third_party/WebKit/Source/core/animation/CSSPaintInterpolationType.cpp b/third_party/WebKit/Source/core/animation/CSSPaintInterpolationType.cpp
index 33fb0e1..63b49383 100644
--- a/third_party/WebKit/Source/core/animation/CSSPaintInterpolationType.cpp
+++ b/third_party/WebKit/Source/core/animation/CSSPaintInterpolationType.cpp
@@ -7,6 +7,8 @@
 #include "core/animation/CSSColorInterpolationType.h"
 #include "core/animation/PaintPropertyFunctions.h"
 #include "core/css/resolver/StyleResolverState.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
@@ -25,13 +27,13 @@
 
 class ParentPaintChecker : public InterpolationType::ConversionChecker {
 public:
-    static PassOwnPtr<ParentPaintChecker> create(CSSPropertyID property, const StyleColor& color)
+    static std::unique_ptr<ParentPaintChecker> create(CSSPropertyID property, const StyleColor& color)
     {
-        return adoptPtr(new ParentPaintChecker(property, color));
+        return wrapUnique(new ParentPaintChecker(property, color));
     }
-    static PassOwnPtr<ParentPaintChecker> create(CSSPropertyID property)
+    static std::unique_ptr<ParentPaintChecker> create(CSSPropertyID property)
     {
-        return adoptPtr(new ParentPaintChecker(property));
+        return wrapUnique(new ParentPaintChecker(property));
     }
 
 private:
@@ -73,7 +75,7 @@
 
 InterpolationValue CSSPaintInterpolationType::maybeConvertValue(const CSSValue& value, const StyleResolverState&, ConversionCheckers&) const
 {
-    OwnPtr<InterpolableValue> interpolableColor = CSSColorInterpolationType::maybeCreateInterpolableColor(value);
+    std::unique_ptr<InterpolableValue> interpolableColor = CSSColorInterpolationType::maybeCreateInterpolableColor(value);
     if (!interpolableColor)
         return nullptr;
     return InterpolationValue(std::move(interpolableColor));
diff --git a/third_party/WebKit/Source/core/animation/CSSPathInterpolationType.cpp b/third_party/WebKit/Source/core/animation/CSSPathInterpolationType.cpp
index 03c87db..f406ced 100644
--- a/third_party/WebKit/Source/core/animation/CSSPathInterpolationType.cpp
+++ b/third_party/WebKit/Source/core/animation/CSSPathInterpolationType.cpp
@@ -7,13 +7,15 @@
 #include "core/animation/PathInterpolationFunctions.h"
 #include "core/css/CSSPathValue.h"
 #include "core/css/resolver/StyleResolverState.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
 void CSSPathInterpolationType::apply(const InterpolableValue& interpolableValue, const NonInterpolableValue* nonInterpolableValue, InterpolationEnvironment& environment) const
 {
     ASSERT(cssProperty() == CSSPropertyD);
-    OwnPtr<SVGPathByteStream> pathByteStream = PathInterpolationFunctions::appliedValue(interpolableValue, nonInterpolableValue);
+    std::unique_ptr<SVGPathByteStream> pathByteStream = PathInterpolationFunctions::appliedValue(interpolableValue, nonInterpolableValue);
     if (pathByteStream->isEmpty()) {
         environment.state().style()->setD(nullptr);
         return;
@@ -38,9 +40,9 @@
 
 class ParentPathChecker : public InterpolationType::ConversionChecker {
 public:
-    static PassOwnPtr<ParentPathChecker> create(PassRefPtr<StylePath> stylePath)
+    static std::unique_ptr<ParentPathChecker> create(PassRefPtr<StylePath> stylePath)
     {
-        return adoptPtr(new ParentPathChecker(stylePath));
+        return wrapUnique(new ParentPathChecker(stylePath));
     }
 
 private:
diff --git a/third_party/WebKit/Source/core/animation/CSSRotateInterpolationType.cpp b/third_party/WebKit/Source/core/animation/CSSRotateInterpolationType.cpp
index c060bcad..d9eb7a8 100644
--- a/third_party/WebKit/Source/core/animation/CSSRotateInterpolationType.cpp
+++ b/third_party/WebKit/Source/core/animation/CSSRotateInterpolationType.cpp
@@ -7,6 +7,8 @@
 #include "core/css/resolver/StyleBuilderConverter.h"
 #include "platform/transforms/RotateTransformOperation.h"
 #include "platform/transforms/Rotation.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
@@ -90,9 +92,9 @@
 
 class InheritedRotationChecker : public InterpolationType::ConversionChecker {
 public:
-    static PassOwnPtr<InheritedRotationChecker> create(const Rotation& inheritedRotation)
+    static std::unique_ptr<InheritedRotationChecker> create(const Rotation& inheritedRotation)
     {
-        return adoptPtr(new InheritedRotationChecker(inheritedRotation));
+        return wrapUnique(new InheritedRotationChecker(inheritedRotation));
     }
 
     bool isValid(const InterpolationEnvironment& environment, const InterpolationValue& underlying) const final
diff --git a/third_party/WebKit/Source/core/animation/CSSScaleInterpolationType.cpp b/third_party/WebKit/Source/core/animation/CSSScaleInterpolationType.cpp
index 1c4bb4e..8ff23f43 100644
--- a/third_party/WebKit/Source/core/animation/CSSScaleInterpolationType.cpp
+++ b/third_party/WebKit/Source/core/animation/CSSScaleInterpolationType.cpp
@@ -7,6 +7,8 @@
 #include "core/css/CSSPrimitiveValue.h"
 #include "core/css/CSSValueList.h"
 #include "core/css/resolver/StyleResolverState.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
@@ -37,9 +39,9 @@
         array[2] = z;
     }
 
-    PassOwnPtr<InterpolableValue> createInterpolableValue() const
+    std::unique_ptr<InterpolableValue> createInterpolableValue() const
     {
-        OwnPtr<InterpolableList> result = InterpolableList::create(3);
+        std::unique_ptr<InterpolableList> result = InterpolableList::create(3);
         for (size_t i = 0; i < 3; i++)
             result->set(i, InterpolableNumber::create(array[i]));
         return std::move(result);
@@ -59,9 +61,9 @@
 
 class ParentScaleChecker : public InterpolationType::ConversionChecker {
 public:
-    static PassOwnPtr<ParentScaleChecker> create(const Scale& scale)
+    static std::unique_ptr<ParentScaleChecker> create(const Scale& scale)
     {
-        return adoptPtr(new ParentScaleChecker(scale));
+        return wrapUnique(new ParentScaleChecker(scale));
     }
 
 private:
diff --git a/third_party/WebKit/Source/core/animation/CSSShadowListInterpolationType.cpp b/third_party/WebKit/Source/core/animation/CSSShadowListInterpolationType.cpp
index 1a08cd58..eff2bd9 100644
--- a/third_party/WebKit/Source/core/animation/CSSShadowListInterpolationType.cpp
+++ b/third_party/WebKit/Source/core/animation/CSSShadowListInterpolationType.cpp
@@ -11,6 +11,8 @@
 #include "core/css/resolver/StyleBuilder.h"
 #include "core/css/resolver/StyleResolverState.h"
 #include "core/style/ShadowList.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
@@ -41,9 +43,9 @@
 
 class ParentShadowListChecker : public InterpolationType::ConversionChecker {
 public:
-    static PassOwnPtr<ParentShadowListChecker> create(CSSPropertyID property, PassRefPtr<ShadowList> shadowList)
+    static std::unique_ptr<ParentShadowListChecker> create(CSSPropertyID property, PassRefPtr<ShadowList> shadowList)
     {
-        return adoptPtr(new ParentShadowListChecker(property, shadowList));
+        return wrapUnique(new ParentShadowListChecker(property, shadowList));
     }
 
 private:
diff --git a/third_party/WebKit/Source/core/animation/CSSTextIndentInterpolationType.cpp b/third_party/WebKit/Source/core/animation/CSSTextIndentInterpolationType.cpp
index 4cf925d..019fe08 100644
--- a/third_party/WebKit/Source/core/animation/CSSTextIndentInterpolationType.cpp
+++ b/third_party/WebKit/Source/core/animation/CSSTextIndentInterpolationType.cpp
@@ -9,6 +9,8 @@
 #include "core/css/CSSValueList.h"
 #include "core/css/resolver/StyleResolverState.h"
 #include "core/style/ComputedStyle.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
@@ -63,9 +65,9 @@
 
 class UnderlyingIndentModeChecker : public InterpolationType::ConversionChecker {
 public:
-    static PassOwnPtr<UnderlyingIndentModeChecker> create(const IndentMode& mode)
+    static std::unique_ptr<UnderlyingIndentModeChecker> create(const IndentMode& mode)
     {
-        return adoptPtr(new UnderlyingIndentModeChecker(mode));
+        return wrapUnique(new UnderlyingIndentModeChecker(mode));
     }
 
     bool isValid(const InterpolationEnvironment&, const InterpolationValue& underlying) const final
@@ -83,9 +85,9 @@
 
 class InheritedIndentModeChecker : public InterpolationType::ConversionChecker {
 public:
-    static PassOwnPtr<InheritedIndentModeChecker> create(const IndentMode& mode)
+    static std::unique_ptr<InheritedIndentModeChecker> create(const IndentMode& mode)
     {
-        return adoptPtr(new InheritedIndentModeChecker(mode));
+        return wrapUnique(new InheritedIndentModeChecker(mode));
     }
 
     bool isValid(const InterpolationEnvironment& environment, const InterpolationValue&) const final
diff --git a/third_party/WebKit/Source/core/animation/CSSTransformInterpolationType.cpp b/third_party/WebKit/Source/core/animation/CSSTransformInterpolationType.cpp
index b44eb40..f938343 100644
--- a/third_party/WebKit/Source/core/animation/CSSTransformInterpolationType.cpp
+++ b/third_party/WebKit/Source/core/animation/CSSTransformInterpolationType.cpp
@@ -12,6 +12,8 @@
 #include "core/css/resolver/TransformBuilder.h"
 #include "platform/transforms/TransformOperations.h"
 #include "platform/transforms/TranslateTransformOperation.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
@@ -107,9 +109,9 @@
 
 class InheritedTransformChecker : public InterpolationType::ConversionChecker {
 public:
-    static PassOwnPtr<InheritedTransformChecker> create(const TransformOperations& inheritedTransform)
+    static std::unique_ptr<InheritedTransformChecker> create(const TransformOperations& inheritedTransform)
     {
-        return adoptPtr(new InheritedTransformChecker(inheritedTransform));
+        return wrapUnique(new InheritedTransformChecker(inheritedTransform));
     }
 
     bool isValid(const InterpolationEnvironment& environment, const InterpolationValue& underlying) const final
@@ -160,7 +162,7 @@
                 primitiveValue.accumulateLengthArray(lengthArray);
             }
         }
-        OwnPtr<InterpolationType::ConversionChecker> lengthUnitsChecker = LengthUnitsChecker::maybeCreate(std::move(lengthArray), state);
+        std::unique_ptr<InterpolationType::ConversionChecker> lengthUnitsChecker = LengthUnitsChecker::maybeCreate(std::move(lengthArray), state);
 
         if (lengthUnitsChecker)
             conversionCheckers.append(std::move(lengthUnitsChecker));
diff --git a/third_party/WebKit/Source/core/animation/CSSTranslateInterpolationType.cpp b/third_party/WebKit/Source/core/animation/CSSTranslateInterpolationType.cpp
index a544cb2..87e1460 100644
--- a/third_party/WebKit/Source/core/animation/CSSTranslateInterpolationType.cpp
+++ b/third_party/WebKit/Source/core/animation/CSSTranslateInterpolationType.cpp
@@ -8,6 +8,8 @@
 #include "core/css/CSSValueList.h"
 #include "core/css/resolver/StyleResolverState.h"
 #include "platform/transforms/TranslateTransformOperation.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
@@ -17,9 +19,9 @@
 public:
     ~ParentTranslateChecker() {}
 
-    static PassOwnPtr<ParentTranslateChecker> create(PassRefPtr<TranslateTransformOperation> parentTranslate)
+    static std::unique_ptr<ParentTranslateChecker> create(PassRefPtr<TranslateTransformOperation> parentTranslate)
     {
-        return adoptPtr(new ParentTranslateChecker(parentTranslate));
+        return wrapUnique(new ParentTranslateChecker(parentTranslate));
     }
 
     bool isValid(const InterpolationEnvironment& environment, const InterpolationValue& underlying) const final
@@ -49,7 +51,7 @@
 
 InterpolationValue createNeutralValue()
 {
-    OwnPtr<InterpolableList> result = InterpolableList::create(TranslateComponentIndexCount);
+    std::unique_ptr<InterpolableList> result = InterpolableList::create(TranslateComponentIndexCount);
     result->set(TranslateX, CSSLengthInterpolationType::createNeutralInterpolableValue());
     result->set(TranslateY, CSSLengthInterpolationType::createNeutralInterpolableValue());
     result->set(TranslateZ, CSSLengthInterpolationType::createNeutralInterpolableValue());
@@ -61,7 +63,7 @@
     if (!translate)
         return createNeutralValue();
 
-    OwnPtr<InterpolableList> result = InterpolableList::create(TranslateComponentIndexCount);
+    std::unique_ptr<InterpolableList> result = InterpolableList::create(TranslateComponentIndexCount);
     result->set(TranslateX, CSSLengthInterpolationType::maybeConvertLength(translate->x(), zoom).interpolableValue);
     result->set(TranslateY, CSSLengthInterpolationType::maybeConvertLength(translate->y(), zoom).interpolableValue);
     result->set(TranslateZ, CSSLengthInterpolationType::maybeConvertLength(Length(translate->z(), Fixed), zoom).interpolableValue);
@@ -96,7 +98,7 @@
     if (list.length() < 1 || list.length() > 3)
         return nullptr;
 
-    OwnPtr<InterpolableList> result = InterpolableList::create(TranslateComponentIndexCount);
+    std::unique_ptr<InterpolableList> result = InterpolableList::create(TranslateComponentIndexCount);
     for (size_t i = 0; i < TranslateComponentIndexCount; i++) {
         InterpolationValue component = nullptr;
         if (i < list.length()) {
diff --git a/third_party/WebKit/Source/core/animation/CSSVisibilityInterpolationType.cpp b/third_party/WebKit/Source/core/animation/CSSVisibilityInterpolationType.cpp
index f620da1..40fc30ea 100644
--- a/third_party/WebKit/Source/core/animation/CSSVisibilityInterpolationType.cpp
+++ b/third_party/WebKit/Source/core/animation/CSSVisibilityInterpolationType.cpp
@@ -6,6 +6,8 @@
 
 #include "core/css/CSSPrimitiveValueMappings.h"
 #include "core/css/resolver/StyleResolverState.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
@@ -56,9 +58,9 @@
 public:
     ~UnderlyingVisibilityChecker() final {}
 
-    static PassOwnPtr<UnderlyingVisibilityChecker> create(EVisibility visibility)
+    static std::unique_ptr<UnderlyingVisibilityChecker> create(EVisibility visibility)
     {
-        return adoptPtr(new UnderlyingVisibilityChecker(visibility));
+        return wrapUnique(new UnderlyingVisibilityChecker(visibility));
     }
 
 private:
@@ -78,9 +80,9 @@
 
 class ParentVisibilityChecker : public InterpolationType::ConversionChecker {
 public:
-    static PassOwnPtr<ParentVisibilityChecker> create(EVisibility visibility)
+    static std::unique_ptr<ParentVisibilityChecker> create(EVisibility visibility)
     {
-        return adoptPtr(new ParentVisibilityChecker(visibility));
+        return wrapUnique(new ParentVisibilityChecker(visibility));
     }
 
 private:
diff --git a/third_party/WebKit/Source/core/animation/CompositorAnimations.cpp b/third_party/WebKit/Source/core/animation/CompositorAnimations.cpp
index 31e504c..a4bd613 100644
--- a/third_party/WebKit/Source/core/animation/CompositorAnimations.cpp
+++ b/third_party/WebKit/Source/core/animation/CompositorAnimations.cpp
@@ -53,9 +53,10 @@
 #include "platform/geometry/FloatBox.h"
 #include "public/platform/Platform.h"
 #include "public/platform/WebCompositorSupport.h"
-
+#include "wtf/PtrUtil.h"
 #include <algorithm>
 #include <cmath>
+#include <memory>
 
 namespace blink {
 
@@ -332,14 +333,14 @@
 
     const KeyframeEffectModelBase& keyframeEffect = toKeyframeEffectModelBase(effect);
 
-    Vector<OwnPtr<CompositorAnimation>> animations;
+    Vector<std::unique_ptr<CompositorAnimation>> animations;
     getAnimationOnCompositor(timing, group, startTime, timeOffset, keyframeEffect, animations, animationPlaybackRate);
     ASSERT(!animations.isEmpty());
     for (auto& compositorAnimation : animations) {
         int id = compositorAnimation->id();
         CompositorAnimationPlayer* compositorPlayer = animation.compositorPlayer();
         ASSERT(compositorPlayer);
-        compositorPlayer->addAnimation(compositorAnimation.leakPtr());
+        compositorPlayer->addAnimation(compositorAnimation.release());
         startedAnimationIds.append(id);
     }
     ASSERT(!startedAnimationIds.isEmpty());
@@ -510,7 +511,7 @@
 void addKeyframeToCurve(CompositorFilterAnimationCurve& curve, Keyframe::PropertySpecificKeyframe* keyframe,
     const AnimatableValue* value, const TimingFunction* keyframeTimingFunction)
 {
-    OwnPtr<CompositorFilterOperations> ops = CompositorFilterOperations::create();
+    std::unique_ptr<CompositorFilterOperations> ops = CompositorFilterOperations::create();
     toCompositorFilterOperations(toAnimatableFilterOperations(value)->operations(), ops.get());
 
     CompositorFilterKeyframe filterKeyframe(keyframe->offset(), std::move(ops));
@@ -527,7 +528,7 @@
 void addKeyframeToCurve(CompositorTransformAnimationCurve& curve, Keyframe::PropertySpecificKeyframe* keyframe,
     const AnimatableValue* value, const TimingFunction* keyframeTimingFunction)
 {
-    OwnPtr<CompositorTransformOperations> ops = CompositorTransformOperations::create();
+    std::unique_ptr<CompositorTransformOperations> ops = CompositorTransformOperations::create();
     toCompositorTransformOperations(toAnimatableTransform(value)->transformOperations(), ops.get());
 
     CompositorTransformKeyframe transformKeyframe(keyframe->offset(), std::move(ops));
@@ -555,7 +556,7 @@
 
 } // namespace
 
-void CompositorAnimations::getAnimationOnCompositor(const Timing& timing, int group, double startTime, double timeOffset, const KeyframeEffectModelBase& effect, Vector<OwnPtr<CompositorAnimation>>& animations, double animationPlaybackRate)
+void CompositorAnimations::getAnimationOnCompositor(const Timing& timing, int group, double startTime, double timeOffset, const KeyframeEffectModelBase& effect, Vector<std::unique_ptr<CompositorAnimation>>& animations, double animationPlaybackRate)
 {
     ASSERT(animations.isEmpty());
     CompositorTiming compositorTiming;
@@ -576,11 +577,11 @@
         getKeyframeValuesForProperty(&effect, property, scale, values);
 
         CompositorTargetProperty::Type targetProperty;
-        OwnPtr<CompositorAnimationCurve> curve;
+        std::unique_ptr<CompositorAnimationCurve> curve;
         switch (property.cssProperty()) {
         case CSSPropertyOpacity: {
             targetProperty = CompositorTargetProperty::OPACITY;
-            OwnPtr<CompositorFloatAnimationCurve> floatCurve = CompositorFloatAnimationCurve::create();
+            std::unique_ptr<CompositorFloatAnimationCurve> floatCurve = CompositorFloatAnimationCurve::create();
             addKeyframesToCurve(*floatCurve, values);
             setTimingFunctionOnCurve(*floatCurve, timing.timingFunction.get());
             curve = std::move(floatCurve);
@@ -589,7 +590,7 @@
         case CSSPropertyWebkitFilter:
         case CSSPropertyBackdropFilter: {
             targetProperty = CompositorTargetProperty::FILTER;
-            OwnPtr<CompositorFilterAnimationCurve> filterCurve = CompositorFilterAnimationCurve::create();
+            std::unique_ptr<CompositorFilterAnimationCurve> filterCurve = CompositorFilterAnimationCurve::create();
             addKeyframesToCurve(*filterCurve, values);
             setTimingFunctionOnCurve(*filterCurve, timing.timingFunction.get());
             curve = std::move(filterCurve);
@@ -600,7 +601,7 @@
         case CSSPropertyTranslate:
         case CSSPropertyTransform: {
             targetProperty = CompositorTargetProperty::TRANSFORM;
-            OwnPtr<CompositorTransformAnimationCurve> transformCurve = CompositorTransformAnimationCurve::create();
+            std::unique_ptr<CompositorTransformAnimationCurve> transformCurve = CompositorTransformAnimationCurve::create();
             addKeyframesToCurve(*transformCurve, values);
             setTimingFunctionOnCurve(*transformCurve, timing.timingFunction.get());
             curve = std::move(transformCurve);
@@ -612,7 +613,7 @@
         }
         ASSERT(curve.get());
 
-        OwnPtr<CompositorAnimation> animation = CompositorAnimation::create(*curve, targetProperty, group, 0);
+        std::unique_ptr<CompositorAnimation> animation = CompositorAnimation::create(*curve, targetProperty, group, 0);
 
         if (!std::isnan(startTime))
             animation->setStartTime(startTime);
diff --git a/third_party/WebKit/Source/core/animation/CompositorAnimations.h b/third_party/WebKit/Source/core/animation/CompositorAnimations.h
index 7aa79b6..4770aa2 100644
--- a/third_party/WebKit/Source/core/animation/CompositorAnimations.h
+++ b/third_party/WebKit/Source/core/animation/CompositorAnimations.h
@@ -37,6 +37,7 @@
 #include "platform/animation/TimingFunction.h"
 #include "wtf/Allocator.h"
 #include "wtf/Vector.h"
+#include <memory>
 
 namespace blink {
 
@@ -76,7 +77,7 @@
 
     static bool convertTimingForCompositor(const Timing&, double timeOffset, CompositorTiming& out, double animationPlaybackRate);
 
-    static void getAnimationOnCompositor(const Timing&, int group, double startTime, double timeOffset, const KeyframeEffectModelBase&, Vector<OwnPtr<CompositorAnimation>>& animations, double animationPlaybackRate);
+    static void getAnimationOnCompositor(const Timing&, int group, double startTime, double timeOffset, const KeyframeEffectModelBase&, Vector<std::unique_ptr<CompositorAnimation>>& animations, double animationPlaybackRate);
 };
 
 } // namespace blink
diff --git a/third_party/WebKit/Source/core/animation/CompositorAnimationsTest.cpp b/third_party/WebKit/Source/core/animation/CompositorAnimationsTest.cpp
index bd1ef13..dad1ada 100644
--- a/third_party/WebKit/Source/core/animation/CompositorAnimationsTest.cpp
+++ b/third_party/WebKit/Source/core/animation/CompositorAnimationsTest.cpp
@@ -53,10 +53,10 @@
 #include "platform/transforms/TranslateTransformOperation.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "wtf/HashFunctions.h"
-#include "wtf/OwnPtr.h"
-#include "wtf/PassOwnPtr.h"
 #include "wtf/PassRefPtr.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/RefPtr.h"
+#include <memory>
 
 namespace blink {
 
@@ -69,15 +69,15 @@
 
     Timing m_timing;
     CompositorAnimations::CompositorTiming m_compositorTiming;
-    OwnPtr<AnimatableValueKeyframeVector> m_keyframeVector2;
+    std::unique_ptr<AnimatableValueKeyframeVector> m_keyframeVector2;
     Persistent<AnimatableValueKeyframeEffectModel> m_keyframeAnimationEffect2;
-    OwnPtr<AnimatableValueKeyframeVector> m_keyframeVector5;
+    std::unique_ptr<AnimatableValueKeyframeVector> m_keyframeVector5;
     Persistent<AnimatableValueKeyframeEffectModel> m_keyframeAnimationEffect5;
 
     Persistent<Document> m_document;
     Persistent<Element> m_element;
     Persistent<AnimationTimeline> m_timeline;
-    OwnPtr<DummyPageHolder> m_pageHolder;
+    std::unique_ptr<DummyPageHolder> m_pageHolder;
 
     void SetUp() override
     {
@@ -116,11 +116,11 @@
     {
         return CompositorAnimations::isCandidateForAnimationOnCompositor(timing, *m_element.get(), nullptr, effect, 1);
     }
-    void getAnimationOnCompositor(Timing& timing, AnimatableValueKeyframeEffectModel& effect, Vector<OwnPtr<CompositorAnimation>>& animations)
+    void getAnimationOnCompositor(Timing& timing, AnimatableValueKeyframeEffectModel& effect, Vector<std::unique_ptr<CompositorAnimation>>& animations)
     {
         getAnimationOnCompositor(timing, effect, animations, 1);
     }
-    void getAnimationOnCompositor(Timing& timing, AnimatableValueKeyframeEffectModel& effect, Vector<OwnPtr<CompositorAnimation>>& animations, double playerPlaybackRate)
+    void getAnimationOnCompositor(Timing& timing, AnimatableValueKeyframeEffectModel& effect, Vector<std::unique_ptr<CompositorAnimation>>& animations, double playerPlaybackRate)
     {
         CompositorAnimations::getAnimationOnCompositor(timing, 0, std::numeric_limits<double>::quiet_NaN(), 0, effect, animations, playerPlaybackRate);
     }
@@ -180,7 +180,7 @@
         return keyframe;
     }
 
-    PassOwnPtr<AnimatableValueKeyframeVector> createCompositableFloatKeyframeVector(size_t n)
+    std::unique_ptr<AnimatableValueKeyframeVector> createCompositableFloatKeyframeVector(size_t n)
     {
         Vector<double> values;
         for (size_t i = 0; i < n; i++) {
@@ -189,9 +189,9 @@
         return createCompositableFloatKeyframeVector(values);
     }
 
-    PassOwnPtr<AnimatableValueKeyframeVector> createCompositableFloatKeyframeVector(Vector<double>& values)
+    std::unique_ptr<AnimatableValueKeyframeVector> createCompositableFloatKeyframeVector(Vector<double>& values)
     {
-        OwnPtr<AnimatableValueKeyframeVector> frames = adoptPtr(new AnimatableValueKeyframeVector);
+        std::unique_ptr<AnimatableValueKeyframeVector> frames = wrapUnique(new AnimatableValueKeyframeVector);
         for (size_t i = 0; i < values.size(); i++) {
             double offset = 1.0 / (values.size() - 1) * i;
             RefPtr<AnimatableDouble> value = AnimatableDouble::create(values[i]);
@@ -200,9 +200,9 @@
         return frames;
     }
 
-    PassOwnPtr<AnimatableValueKeyframeVector> createCompositableTransformKeyframeVector(const Vector<TransformOperations>& values)
+    std::unique_ptr<AnimatableValueKeyframeVector> createCompositableTransformKeyframeVector(const Vector<TransformOperations>& values)
     {
-        OwnPtr<AnimatableValueKeyframeVector> frames = adoptPtr(new AnimatableValueKeyframeVector);
+        std::unique_ptr<AnimatableValueKeyframeVector> frames = wrapUnique(new AnimatableValueKeyframeVector);
         for (size_t i = 0; i < values.size(); ++i) {
             double offset = 1.0f / (values.size() - 1) * i;
             RefPtr<AnimatableTransform> value = AnimatableTransform::create(values[i], 1);
@@ -247,15 +247,15 @@
         m_timeline->serviceAnimations(TimingUpdateForAnimationFrame);
     }
 
-    PassOwnPtr<CompositorAnimation> convertToCompositorAnimation(AnimatableValueKeyframeEffectModel& effect, double playerPlaybackRate)
+    std::unique_ptr<CompositorAnimation> convertToCompositorAnimation(AnimatableValueKeyframeEffectModel& effect, double playerPlaybackRate)
     {
-        Vector<OwnPtr<CompositorAnimation>> result;
+        Vector<std::unique_ptr<CompositorAnimation>> result;
         getAnimationOnCompositor(m_timing, effect, result, playerPlaybackRate);
         DCHECK_EQ(1U, result.size());
         return std::move(result[0]);
     }
 
-    PassOwnPtr<CompositorAnimation> convertToCompositorAnimation(AnimatableValueKeyframeEffectModel& effect)
+    std::unique_ptr<CompositorAnimation> convertToCompositorAnimation(AnimatableValueKeyframeEffectModel& effect)
     {
         return convertToCompositorAnimation(effect, 1.0);
     }
@@ -348,7 +348,7 @@
     transformVector.last().operations().append(TranslateTransformOperation::create(Length(0, Fixed), Length(0, Fixed), 0.0, TransformOperation::Translate3D));
     transformVector.append(TransformOperations());
     transformVector.last().operations().append(TranslateTransformOperation::create(Length(200, Fixed), Length(200, Fixed), 0.0, TransformOperation::Translate3D));
-    OwnPtr<AnimatableValueKeyframeVector> frames = createCompositableTransformKeyframeVector(transformVector);
+    std::unique_ptr<AnimatableValueKeyframeVector> frames = createCompositableTransformKeyframeVector(transformVector);
     FloatBox bounds;
     EXPECT_TRUE(getAnimationBounds(bounds, *AnimatableValueKeyframeEffectModel::create(*frames), 0, 1));
     EXPECT_EQ(FloatBox(0.0f, 0.f, 0.0f, 200.0f, 200.0f, 0.0f), bounds);
@@ -646,14 +646,14 @@
         createReplaceOpKeyframe(CSSPropertyOpacity, AnimatableDouble::create(2.0).get(), 0),
         createReplaceOpKeyframe(CSSPropertyOpacity, AnimatableDouble::create(5.0).get(), 1.0));
 
-    OwnPtr<CompositorAnimation> animation = convertToCompositorAnimation(*effect);
+    std::unique_ptr<CompositorAnimation> animation = convertToCompositorAnimation(*effect);
     EXPECT_EQ(CompositorTargetProperty::OPACITY, animation->targetProperty());
     EXPECT_EQ(1.0, animation->iterations());
     EXPECT_EQ(0, animation->timeOffset());
     EXPECT_EQ(CompositorAnimation::Direction::NORMAL, animation->getDirection());
     EXPECT_EQ(1.0, animation->playbackRate());
 
-    OwnPtr<CompositorFloatAnimationCurve> keyframedFloatCurve = animation->floatCurveForTesting();
+    std::unique_ptr<CompositorFloatAnimationCurve> keyframedFloatCurve = animation->floatCurveForTesting();
 
     Vector<CompositorFloatKeyframe> keyframes = keyframedFloatCurve->keyframesForTesting();
     ASSERT_EQ(2UL, keyframes.size());
@@ -677,8 +677,8 @@
     const double duration = 10.0;
     m_timing.iterationDuration = duration;
 
-    OwnPtr<CompositorAnimation> animation = convertToCompositorAnimation(*effect);
-    OwnPtr<CompositorFloatAnimationCurve> keyframedFloatCurve = animation->floatCurveForTesting();
+    std::unique_ptr<CompositorAnimation> animation = convertToCompositorAnimation(*effect);
+    std::unique_ptr<CompositorFloatAnimationCurve> keyframedFloatCurve = animation->floatCurveForTesting();
 
     Vector<CompositorFloatKeyframe> keyframes = keyframedFloatCurve->keyframesForTesting();
     ASSERT_EQ(2UL, keyframes.size());
@@ -699,14 +699,14 @@
     m_timing.direction = Timing::PlaybackDirectionAlternate;
     m_timing.playbackRate = 2.0;
 
-    OwnPtr<CompositorAnimation> animation = convertToCompositorAnimation(*effect);
+    std::unique_ptr<CompositorAnimation> animation = convertToCompositorAnimation(*effect);
     EXPECT_EQ(CompositorTargetProperty::OPACITY, animation->targetProperty());
     EXPECT_EQ(5.0, animation->iterations());
     EXPECT_EQ(0, animation->timeOffset());
     EXPECT_EQ(CompositorAnimation::Direction::ALTERNATE_NORMAL, animation->getDirection());
     EXPECT_EQ(2.0, animation->playbackRate());
 
-    OwnPtr<CompositorFloatAnimationCurve> keyframedFloatCurve = animation->floatCurveForTesting();
+    std::unique_ptr<CompositorFloatAnimationCurve> keyframedFloatCurve = animation->floatCurveForTesting();
 
     Vector<CompositorFloatKeyframe> keyframes = keyframedFloatCurve->keyframesForTesting();
     ASSERT_EQ(4UL, keyframes.size());
@@ -741,13 +741,13 @@
     m_timing.iterationDuration = 1.75;
     m_timing.startDelay = startDelay;
 
-    OwnPtr<CompositorAnimation> animation = convertToCompositorAnimation(*effect);
+    std::unique_ptr<CompositorAnimation> animation = convertToCompositorAnimation(*effect);
 
     EXPECT_EQ(CompositorTargetProperty::OPACITY, animation->targetProperty());
     EXPECT_EQ(5.0, animation->iterations());
     EXPECT_EQ(-startDelay, animation->timeOffset());
 
-    OwnPtr<CompositorFloatAnimationCurve> keyframedFloatCurve = animation->floatCurveForTesting();
+    std::unique_ptr<CompositorFloatAnimationCurve> keyframedFloatCurve = animation->floatCurveForTesting();
 
     Vector<CompositorFloatKeyframe> keyframes = keyframedFloatCurve->keyframesForTesting();
     ASSERT_EQ(2UL, keyframes.size());
@@ -774,14 +774,14 @@
     m_timing.iterationCount = 10;
     m_timing.direction = Timing::PlaybackDirectionAlternate;
 
-    OwnPtr<CompositorAnimation> animation = convertToCompositorAnimation(*effect);
+    std::unique_ptr<CompositorAnimation> animation = convertToCompositorAnimation(*effect);
     EXPECT_EQ(CompositorTargetProperty::OPACITY, animation->targetProperty());
     EXPECT_EQ(10.0, animation->iterations());
     EXPECT_EQ(0, animation->timeOffset());
     EXPECT_EQ(CompositorAnimation::Direction::ALTERNATE_NORMAL, animation->getDirection());
     EXPECT_EQ(1.0, animation->playbackRate());
 
-    OwnPtr<CompositorFloatAnimationCurve> keyframedFloatCurve = animation->floatCurveForTesting();
+    std::unique_ptr<CompositorFloatAnimationCurve> keyframedFloatCurve = animation->floatCurveForTesting();
 
     Vector<CompositorFloatKeyframe> keyframes = keyframedFloatCurve->keyframesForTesting();
     ASSERT_EQ(4UL, keyframes.size());
@@ -822,14 +822,14 @@
     m_timing.iterationCount = 10;
     m_timing.direction = Timing::PlaybackDirectionAlternateReverse;
 
-    OwnPtr<CompositorAnimation> animation = convertToCompositorAnimation(*effect);
+    std::unique_ptr<CompositorAnimation> animation = convertToCompositorAnimation(*effect);
     EXPECT_EQ(CompositorTargetProperty::OPACITY, animation->targetProperty());
     EXPECT_EQ(10.0, animation->iterations());
     EXPECT_EQ(0, animation->timeOffset());
     EXPECT_EQ(CompositorAnimation::Direction::ALTERNATE_REVERSE, animation->getDirection());
     EXPECT_EQ(1.0, animation->playbackRate());
 
-    OwnPtr<CompositorFloatAnimationCurve> keyframedFloatCurve = animation->floatCurveForTesting();
+    std::unique_ptr<CompositorFloatAnimationCurve> keyframedFloatCurve = animation->floatCurveForTesting();
 
     Vector<CompositorFloatKeyframe> keyframes = keyframedFloatCurve->keyframesForTesting();
     ASSERT_EQ(4UL, keyframes.size());
@@ -867,14 +867,14 @@
     m_timing.startDelay = negativeStartDelay;
     m_timing.direction = Timing::PlaybackDirectionAlternateReverse;
 
-    OwnPtr<CompositorAnimation> animation = convertToCompositorAnimation(*effect);
+    std::unique_ptr<CompositorAnimation> animation = convertToCompositorAnimation(*effect);
     EXPECT_EQ(CompositorTargetProperty::OPACITY, animation->targetProperty());
     EXPECT_EQ(5.0, animation->iterations());
     EXPECT_EQ(-negativeStartDelay, animation->timeOffset());
     EXPECT_EQ(CompositorAnimation::Direction::ALTERNATE_REVERSE, animation->getDirection());
     EXPECT_EQ(1.0, animation->playbackRate());
 
-    OwnPtr<CompositorFloatAnimationCurve> keyframedFloatCurve = animation->floatCurveForTesting();
+    std::unique_ptr<CompositorFloatAnimationCurve> keyframedFloatCurve = animation->floatCurveForTesting();
 
     Vector<CompositorFloatKeyframe> keyframes = keyframedFloatCurve->keyframesForTesting();
     ASSERT_EQ(2UL, keyframes.size());
@@ -892,14 +892,14 @@
 
     m_timing.playbackRate = playbackRate;
 
-    OwnPtr<CompositorAnimation> animation = convertToCompositorAnimation(*effect, playerPlaybackRate);
+    std::unique_ptr<CompositorAnimation> animation = convertToCompositorAnimation(*effect, playerPlaybackRate);
     EXPECT_EQ(CompositorTargetProperty::OPACITY, animation->targetProperty());
     EXPECT_EQ(1.0, animation->iterations());
     EXPECT_EQ(0, animation->timeOffset());
     EXPECT_EQ(CompositorAnimation::Direction::NORMAL, animation->getDirection());
     EXPECT_EQ(playbackRate * playerPlaybackRate, animation->playbackRate());
 
-    OwnPtr<CompositorFloatAnimationCurve> keyframedFloatCurve = animation->floatCurveForTesting();
+    std::unique_ptr<CompositorFloatAnimationCurve> keyframedFloatCurve = animation->floatCurveForTesting();
 
     Vector<CompositorFloatKeyframe> keyframes = keyframedFloatCurve->keyframesForTesting();
     ASSERT_EQ(2UL, keyframes.size());
@@ -914,7 +914,7 @@
 
     m_timing.fillMode = Timing::FillModeNone;
 
-    OwnPtr<CompositorAnimation> animation = convertToCompositorAnimation(*effect);
+    std::unique_ptr<CompositorAnimation> animation = convertToCompositorAnimation(*effect);
     EXPECT_EQ(CompositorAnimation::FillMode::NONE, animation->getFillMode());
 }
 
@@ -927,7 +927,7 @@
 
     m_timing.fillMode = Timing::FillModeAuto;
 
-    OwnPtr<CompositorAnimation> animation = convertToCompositorAnimation(*effect);
+    std::unique_ptr<CompositorAnimation> animation = convertToCompositorAnimation(*effect);
     EXPECT_EQ(CompositorTargetProperty::OPACITY, animation->targetProperty());
     EXPECT_EQ(1.0, animation->iterations());
     EXPECT_EQ(0, animation->timeOffset());
@@ -945,9 +945,9 @@
 
     m_timing.timingFunction = m_cubicCustomTimingFunction;
 
-    OwnPtr<CompositorAnimation> animation = convertToCompositorAnimation(*effect);
+    std::unique_ptr<CompositorAnimation> animation = convertToCompositorAnimation(*effect);
 
-    OwnPtr<CompositorFloatAnimationCurve> keyframedFloatCurve = animation->floatCurveForTesting();
+    std::unique_ptr<CompositorFloatAnimationCurve> keyframedFloatCurve = animation->floatCurveForTesting();
 
     Vector<CompositorFloatKeyframe> keyframes = keyframedFloatCurve->keyframesForTesting();
     ASSERT_EQ(2UL, keyframes.size());
diff --git a/third_party/WebKit/Source/core/animation/EffectInputTest.cpp b/third_party/WebKit/Source/core/animation/EffectInputTest.cpp
index 3c307d2d1..32cf30f 100644
--- a/third_party/WebKit/Source/core/animation/EffectInputTest.cpp
+++ b/third_party/WebKit/Source/core/animation/EffectInputTest.cpp
@@ -14,6 +14,7 @@
 #include "core/dom/ExceptionCode.h"
 #include "core/testing/DummyPageHolder.h"
 #include "testing/gtest/include/gtest/gtest.h"
+#include <memory>
 #include <v8.h>
 
 namespace blink {
diff --git a/third_party/WebKit/Source/core/animation/EffectModel.h b/third_party/WebKit/Source/core/animation/EffectModel.h
index 9bf46e3..cdf0cb6 100644
--- a/third_party/WebKit/Source/core/animation/EffectModel.h
+++ b/third_party/WebKit/Source/core/animation/EffectModel.h
@@ -37,7 +37,6 @@
 #include "core/animation/PropertyHandle.h"
 #include "platform/heap/Handle.h"
 #include "wtf/HashMap.h"
-#include "wtf/PassOwnPtr.h"
 
 namespace blink {
 
diff --git a/third_party/WebKit/Source/core/animation/FilterInterpolationFunctions.cpp b/third_party/WebKit/Source/core/animation/FilterInterpolationFunctions.cpp
index 8d5b166..47d19883aa 100644
--- a/third_party/WebKit/Source/core/animation/FilterInterpolationFunctions.cpp
+++ b/third_party/WebKit/Source/core/animation/FilterInterpolationFunctions.cpp
@@ -12,6 +12,7 @@
 #include "core/css/resolver/StyleResolverState.h"
 #include "core/style/ShadowData.h"
 #include "platform/graphics/filters/FilterOperations.h"
+#include <memory>
 
 namespace blink {
 
@@ -195,7 +196,7 @@
     return result;
 }
 
-PassOwnPtr<InterpolableValue> FilterInterpolationFunctions::createNoneValue(const NonInterpolableValue& untypedNonInterpolableValue)
+std::unique_ptr<InterpolableValue> FilterInterpolationFunctions::createNoneValue(const NonInterpolableValue& untypedNonInterpolableValue)
 {
     switch (toFilterNonInterpolableValue(untypedNonInterpolableValue).type()) {
     case FilterOperation::GRAYSCALE:
diff --git a/third_party/WebKit/Source/core/animation/FilterInterpolationFunctions.h b/third_party/WebKit/Source/core/animation/FilterInterpolationFunctions.h
index 0f9c6c96..38f18a09 100644
--- a/third_party/WebKit/Source/core/animation/FilterInterpolationFunctions.h
+++ b/third_party/WebKit/Source/core/animation/FilterInterpolationFunctions.h
@@ -7,6 +7,7 @@
 
 #include "core/animation/InterpolationValue.h"
 #include "platform/heap/Handle.h"
+#include <memory>
 
 namespace blink {
 
@@ -18,7 +19,7 @@
 
 InterpolationValue maybeConvertCSSFilter(const CSSValue&);
 InterpolationValue maybeConvertFilter(const FilterOperation&, double zoom);
-PassOwnPtr<InterpolableValue> createNoneValue(const NonInterpolableValue&);
+std::unique_ptr<InterpolableValue> createNoneValue(const NonInterpolableValue&);
 bool filtersAreCompatible(const NonInterpolableValue&, const NonInterpolableValue&);
 FilterOperation* createFilter(const InterpolableValue&, const NonInterpolableValue&, const StyleResolverState&);
 
diff --git a/third_party/WebKit/Source/core/animation/InterpolableValue.cpp b/third_party/WebKit/Source/core/animation/InterpolableValue.cpp
index 084ecf8..de958c4b 100644
--- a/third_party/WebKit/Source/core/animation/InterpolableValue.cpp
+++ b/third_party/WebKit/Source/core/animation/InterpolableValue.cpp
@@ -4,6 +4,8 @@
 
 #include "core/animation/InterpolableValue.h"
 
+#include <memory>
+
 namespace blink {
 
 bool InterpolableNumber::equals(const InterpolableValue& other) const
@@ -62,9 +64,9 @@
     }
 }
 
-PassOwnPtr<InterpolableValue> InterpolableList::cloneAndZero() const
+std::unique_ptr<InterpolableValue> InterpolableList::cloneAndZero() const
 {
-    OwnPtr<InterpolableList> result = InterpolableList::create(m_size);
+    std::unique_ptr<InterpolableList> result = InterpolableList::create(m_size);
     for (size_t i = 0; i < m_size; i++)
         result->set(i, m_values[i]->cloneAndZero());
     return std::move(result);
diff --git a/third_party/WebKit/Source/core/animation/InterpolableValue.h b/third_party/WebKit/Source/core/animation/InterpolableValue.h
index a3d30a8d..d1720e841 100644
--- a/third_party/WebKit/Source/core/animation/InterpolableValue.h
+++ b/third_party/WebKit/Source/core/animation/InterpolableValue.h
@@ -8,9 +8,9 @@
 #include "core/CoreExport.h"
 #include "core/animation/animatable/AnimatableValue.h"
 #include "platform/heap/Handle.h"
-#include "wtf/OwnPtr.h"
-#include "wtf/PassOwnPtr.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/Vector.h"
+#include <memory>
 
 namespace blink {
 
@@ -26,8 +26,8 @@
     virtual bool isAnimatableValue() const { return false; }
 
     virtual bool equals(const InterpolableValue&) const = 0;
-    virtual PassOwnPtr<InterpolableValue> clone() const = 0;
-    virtual PassOwnPtr<InterpolableValue> cloneAndZero() const = 0;
+    virtual std::unique_ptr<InterpolableValue> clone() const = 0;
+    virtual std::unique_ptr<InterpolableValue> cloneAndZero() const = 0;
     virtual void scale(double scale) = 0;
     virtual void scaleAndAdd(double scale, const InterpolableValue& other) = 0;
 
@@ -49,16 +49,16 @@
 
 class CORE_EXPORT InterpolableNumber final : public InterpolableValue {
 public:
-    static PassOwnPtr<InterpolableNumber> create(double value)
+    static std::unique_ptr<InterpolableNumber> create(double value)
     {
-        return adoptPtr(new InterpolableNumber(value));
+        return wrapUnique(new InterpolableNumber(value));
     }
 
     bool isNumber() const final { return true; }
     double value() const { return m_value; }
     bool equals(const InterpolableValue& other) const final;
-    PassOwnPtr<InterpolableValue> clone() const final { return create(m_value); }
-    PassOwnPtr<InterpolableValue> cloneAndZero() const final { return create(0); }
+    std::unique_ptr<InterpolableValue> clone() const final { return create(m_value); }
+    std::unique_ptr<InterpolableValue> cloneAndZero() const final { return create(0); }
     void scale(double scale) final;
     void scaleAndAdd(double scale, const InterpolableValue& other) final;
     void set(double value) { m_value = value; }
@@ -76,16 +76,16 @@
 
 class CORE_EXPORT InterpolableBool final : public InterpolableValue {
 public:
-    static PassOwnPtr<InterpolableBool> create(bool value)
+    static std::unique_ptr<InterpolableBool> create(bool value)
     {
-        return adoptPtr(new InterpolableBool(value));
+        return wrapUnique(new InterpolableBool(value));
     }
 
     bool isBool() const final { return true; }
     bool value() const { return m_value; }
     bool equals(const InterpolableValue&) const final { ASSERT_NOT_REACHED(); return false; }
-    PassOwnPtr<InterpolableValue> clone() const final { return create(m_value); }
-    PassOwnPtr<InterpolableValue> cloneAndZero() const final { ASSERT_NOT_REACHED(); return nullptr; }
+    std::unique_ptr<InterpolableValue> clone() const final { return create(m_value); }
+    std::unique_ptr<InterpolableValue> cloneAndZero() const final { ASSERT_NOT_REACHED(); return nullptr; }
     void scale(double scale) final { ASSERT_NOT_REACHED(); }
     void scaleAndAdd(double scale, const InterpolableValue& other) final { ASSERT_NOT_REACHED(); }
 
@@ -110,18 +110,18 @@
     // has its own copy constructor. So just delete operator= here.
     InterpolableList& operator=(const InterpolableList&) = delete;
 
-    static PassOwnPtr<InterpolableList> create(const InterpolableList &other)
+    static std::unique_ptr<InterpolableList> create(const InterpolableList &other)
     {
-        return adoptPtr(new InterpolableList(other));
+        return wrapUnique(new InterpolableList(other));
     }
 
-    static PassOwnPtr<InterpolableList> create(size_t size)
+    static std::unique_ptr<InterpolableList> create(size_t size)
     {
-        return adoptPtr(new InterpolableList(size));
+        return wrapUnique(new InterpolableList(size));
     }
 
     bool isList() const final { return true; }
-    void set(size_t position, PassOwnPtr<InterpolableValue> value)
+    void set(size_t position, std::unique_ptr<InterpolableValue> value)
     {
         ASSERT(position < m_size);
         m_values[position] = std::move(value);
@@ -131,15 +131,15 @@
         ASSERT(position < m_size);
         return m_values[position].get();
     }
-    OwnPtr<InterpolableValue>& getMutable(size_t position)
+    std::unique_ptr<InterpolableValue>& getMutable(size_t position)
     {
         ASSERT(position < m_size);
         return m_values[position];
     }
     size_t length() const { return m_size; }
     bool equals(const InterpolableValue& other) const final;
-    PassOwnPtr<InterpolableValue> clone() const final { return create(*this); }
-    PassOwnPtr<InterpolableValue> cloneAndZero() const final;
+    std::unique_ptr<InterpolableValue> clone() const final { return create(*this); }
+    std::unique_ptr<InterpolableValue> cloneAndZero() const final;
     void scale(double scale) final;
     void scaleAndAdd(double scale, const InterpolableValue& other) final;
 
@@ -160,22 +160,22 @@
     }
 
     size_t m_size;
-    Vector<OwnPtr<InterpolableValue>> m_values;
+    Vector<std::unique_ptr<InterpolableValue>> m_values;
 };
 
 // FIXME: Remove this when we can.
 class InterpolableAnimatableValue : public InterpolableValue {
 public:
-    static PassOwnPtr<InterpolableAnimatableValue> create(PassRefPtr<AnimatableValue> value)
+    static std::unique_ptr<InterpolableAnimatableValue> create(PassRefPtr<AnimatableValue> value)
     {
-        return adoptPtr(new InterpolableAnimatableValue(value));
+        return wrapUnique(new InterpolableAnimatableValue(value));
     }
 
     bool isAnimatableValue() const final { return true; }
     AnimatableValue* value() const { return m_value.get(); }
     bool equals(const InterpolableValue&) const final { ASSERT_NOT_REACHED(); return false; }
-    PassOwnPtr<InterpolableValue> clone() const final { return create(m_value); }
-    PassOwnPtr<InterpolableValue> cloneAndZero() const final { ASSERT_NOT_REACHED(); return nullptr; }
+    std::unique_ptr<InterpolableValue> clone() const final { return create(m_value); }
+    std::unique_ptr<InterpolableValue> cloneAndZero() const final { ASSERT_NOT_REACHED(); return nullptr; }
     void scale(double scale) final { ASSERT_NOT_REACHED(); }
     void scaleAndAdd(double scale, const InterpolableValue& other) final { ASSERT_NOT_REACHED(); }
 
diff --git a/third_party/WebKit/Source/core/animation/InterpolableValueTest.cpp b/third_party/WebKit/Source/core/animation/InterpolableValueTest.cpp
index b65d8255fc..3b96588 100644
--- a/third_party/WebKit/Source/core/animation/InterpolableValueTest.cpp
+++ b/third_party/WebKit/Source/core/animation/InterpolableValueTest.cpp
@@ -7,6 +7,7 @@
 #include "core/animation/Interpolation.h"
 #include "core/animation/PropertyHandle.h"
 #include "testing/gtest/include/gtest/gtest.h"
+#include <memory>
 
 namespace blink {
 
@@ -14,7 +15,7 @@
 
 class SampleInterpolation : public Interpolation {
 public:
-    static PassRefPtr<Interpolation> create(PassOwnPtr<InterpolableValue> start, PassOwnPtr<InterpolableValue> end)
+    static PassRefPtr<Interpolation> create(std::unique_ptr<InterpolableValue> start, std::unique_ptr<InterpolableValue> end)
     {
         return adoptRef(new SampleInterpolation(std::move(start), std::move(end)));
     }
@@ -24,7 +25,7 @@
         return PropertyHandle(CSSPropertyBackgroundColor);
     }
 private:
-    SampleInterpolation(PassOwnPtr<InterpolableValue> start, PassOwnPtr<InterpolableValue> end)
+    SampleInterpolation(std::unique_ptr<InterpolableValue> start, std::unique_ptr<InterpolableValue> end)
         : Interpolation(std::move(start), std::move(end))
     {
     }
@@ -58,7 +59,7 @@
         base.scaleAndAdd(scale, add);
     }
 
-    PassRefPtr<Interpolation> interpolateLists(PassOwnPtr<InterpolableList> listA, PassOwnPtr<InterpolableList> listB, double progress)
+    PassRefPtr<Interpolation> interpolateLists(std::unique_ptr<InterpolableList> listA, std::unique_ptr<InterpolableList> listB, double progress)
     {
         RefPtr<Interpolation> i = SampleInterpolation::create(std::move(listA), std::move(listB));
         i->interpolate(0, progress);
@@ -88,12 +89,12 @@
 
 TEST_F(AnimationInterpolableValueTest, SimpleList)
 {
-    OwnPtr<InterpolableList> listA = InterpolableList::create(3);
+    std::unique_ptr<InterpolableList> listA = InterpolableList::create(3);
     listA->set(0, InterpolableNumber::create(0));
     listA->set(1, InterpolableNumber::create(42));
     listA->set(2, InterpolableNumber::create(20.5));
 
-    OwnPtr<InterpolableList> listB = InterpolableList::create(3);
+    std::unique_ptr<InterpolableList> listB = InterpolableList::create(3);
     listB->set(0, InterpolableNumber::create(100));
     listB->set(1, InterpolableNumber::create(-200));
     listB->set(2, InterpolableNumber::create(300));
@@ -107,16 +108,16 @@
 
 TEST_F(AnimationInterpolableValueTest, NestedList)
 {
-    OwnPtr<InterpolableList> listA = InterpolableList::create(3);
+    std::unique_ptr<InterpolableList> listA = InterpolableList::create(3);
     listA->set(0, InterpolableNumber::create(0));
-    OwnPtr<InterpolableList> subListA = InterpolableList::create(1);
+    std::unique_ptr<InterpolableList> subListA = InterpolableList::create(1);
     subListA->set(0, InterpolableNumber::create(100));
     listA->set(1, std::move(subListA));
     listA->set(2, InterpolableBool::create(false));
 
-    OwnPtr<InterpolableList> listB = InterpolableList::create(3);
+    std::unique_ptr<InterpolableList> listB = InterpolableList::create(3);
     listB->set(0, InterpolableNumber::create(100));
-    OwnPtr<InterpolableList> subListB = InterpolableList::create(1);
+    std::unique_ptr<InterpolableList> subListB = InterpolableList::create(1);
     subListB->set(0, InterpolableNumber::create(50));
     listB->set(1, std::move(subListB));
     listB->set(2, InterpolableBool::create(true));
@@ -130,7 +131,7 @@
 
 TEST_F(AnimationInterpolableValueTest, ScaleAndAddNumbers)
 {
-    OwnPtr<InterpolableNumber> base = InterpolableNumber::create(10);
+    std::unique_ptr<InterpolableNumber> base = InterpolableNumber::create(10);
     scaleAndAdd(*base, 2, *InterpolableNumber::create(1));
     EXPECT_FLOAT_EQ(21, base->value());
 
@@ -145,11 +146,11 @@
 
 TEST_F(AnimationInterpolableValueTest, ScaleAndAddLists)
 {
-    OwnPtr<InterpolableList> baseList = InterpolableList::create(3);
+    std::unique_ptr<InterpolableList> baseList = InterpolableList::create(3);
     baseList->set(0, InterpolableNumber::create(5));
     baseList->set(1, InterpolableNumber::create(10));
     baseList->set(2, InterpolableNumber::create(15));
-    OwnPtr<InterpolableList> addList = InterpolableList::create(3);
+    std::unique_ptr<InterpolableList> addList = InterpolableList::create(3);
     addList->set(0, InterpolableNumber::create(1));
     addList->set(1, InterpolableNumber::create(2));
     addList->set(2, InterpolableNumber::create(3));
diff --git a/third_party/WebKit/Source/core/animation/Interpolation.cpp b/third_party/WebKit/Source/core/animation/Interpolation.cpp
index 2a6012c..87da640 100644
--- a/third_party/WebKit/Source/core/animation/Interpolation.cpp
+++ b/third_party/WebKit/Source/core/animation/Interpolation.cpp
@@ -4,6 +4,8 @@
 
 #include "core/animation/Interpolation.h"
 
+#include <memory>
+
 namespace blink {
 
 namespace {
@@ -33,7 +35,7 @@
 
 } // namespace
 
-Interpolation::Interpolation(PassOwnPtr<InterpolableValue> start, PassOwnPtr<InterpolableValue> end)
+Interpolation::Interpolation(std::unique_ptr<InterpolableValue> start, std::unique_ptr<InterpolableValue> end)
     : m_start(std::move(start))
     , m_end(std::move(end))
     , m_cachedFraction(0)
diff --git a/third_party/WebKit/Source/core/animation/Interpolation.h b/third_party/WebKit/Source/core/animation/Interpolation.h
index e613163..6131a985 100644
--- a/third_party/WebKit/Source/core/animation/Interpolation.h
+++ b/third_party/WebKit/Source/core/animation/Interpolation.h
@@ -9,6 +9,7 @@
 #include "core/animation/InterpolableValue.h"
 #include "wtf/Forward.h"
 #include "wtf/RefCounted.h"
+#include <memory>
 
 namespace blink {
 
@@ -30,14 +31,14 @@
     virtual bool dependsOnUnderlyingValue() const { return false; }
 
 protected:
-    const OwnPtr<InterpolableValue> m_start;
-    const OwnPtr<InterpolableValue> m_end;
+    const std::unique_ptr<InterpolableValue> m_start;
+    const std::unique_ptr<InterpolableValue> m_end;
 
     mutable double m_cachedFraction;
     mutable int m_cachedIteration;
-    mutable OwnPtr<InterpolableValue> m_cachedValue;
+    mutable std::unique_ptr<InterpolableValue> m_cachedValue;
 
-    Interpolation(PassOwnPtr<InterpolableValue> start, PassOwnPtr<InterpolableValue> end);
+    Interpolation(std::unique_ptr<InterpolableValue> start, std::unique_ptr<InterpolableValue> end);
 
 private:
     InterpolableValue* getCachedValueForTesting() const { return m_cachedValue.get(); }
diff --git a/third_party/WebKit/Source/core/animation/InterpolationEffect.h b/third_party/WebKit/Source/core/animation/InterpolationEffect.h
index a99f8eb..43f3550 100644
--- a/third_party/WebKit/Source/core/animation/InterpolationEffect.h
+++ b/third_party/WebKit/Source/core/animation/InterpolationEffect.h
@@ -10,7 +10,6 @@
 #include "core/animation/Keyframe.h"
 #include "platform/RuntimeEnabledFeatures.h"
 #include "platform/animation/TimingFunction.h"
-#include "wtf/PassOwnPtr.h"
 
 namespace blink {
 
diff --git a/third_party/WebKit/Source/core/animation/InterpolationEffectTest.cpp b/third_party/WebKit/Source/core/animation/InterpolationEffectTest.cpp
index 0c4e9c4..1d59730 100644
--- a/third_party/WebKit/Source/core/animation/InterpolationEffectTest.cpp
+++ b/third_party/WebKit/Source/core/animation/InterpolationEffectTest.cpp
@@ -5,6 +5,7 @@
 #include "core/animation/InterpolationEffect.h"
 
 #include "testing/gtest/include/gtest/gtest.h"
+#include <memory>
 
 namespace blink {
 
@@ -12,7 +13,7 @@
 
 class SampleInterpolation : public Interpolation {
 public:
-    static PassRefPtr<Interpolation> create(PassOwnPtr<InterpolableValue> start, PassOwnPtr<InterpolableValue> end)
+    static PassRefPtr<Interpolation> create(std::unique_ptr<InterpolableValue> start, std::unique_ptr<InterpolableValue> end)
     {
         return adoptRef(new SampleInterpolation(std::move(start), std::move(end)));
     }
@@ -22,7 +23,7 @@
         return PropertyHandle(CSSPropertyBackgroundColor);
     }
 private:
-    SampleInterpolation(PassOwnPtr<InterpolableValue> start, PassOwnPtr<InterpolableValue> end)
+    SampleInterpolation(std::unique_ptr<InterpolableValue> start, std::unique_ptr<InterpolableValue> end)
         : Interpolation(std::move(start), std::move(end))
     {
     }
diff --git a/third_party/WebKit/Source/core/animation/InterpolationType.h b/third_party/WebKit/Source/core/animation/InterpolationType.h
index 68ddba1..07f61ad 100644
--- a/third_party/WebKit/Source/core/animation/InterpolationType.h
+++ b/third_party/WebKit/Source/core/animation/InterpolationType.h
@@ -13,6 +13,7 @@
 #include "core/animation/UnderlyingValueOwner.h"
 #include "platform/heap/Handle.h"
 #include "wtf/Allocator.h"
+#include <memory>
 
 namespace blink {
 
@@ -46,7 +47,7 @@
         { }
         const InterpolationType* m_type;
     };
-    using ConversionCheckers = Vector<OwnPtr<ConversionChecker>>;
+    using ConversionCheckers = Vector<std::unique_ptr<ConversionChecker>>;
 
     virtual PairwiseInterpolationValue maybeConvertPairwise(const PropertySpecificKeyframe& startKeyframe, const PropertySpecificKeyframe& endKeyframe, const InterpolationEnvironment& environment, const InterpolationValue& underlying, ConversionCheckers& conversionCheckers) const
     {
diff --git a/third_party/WebKit/Source/core/animation/InterpolationValue.h b/third_party/WebKit/Source/core/animation/InterpolationValue.h
index f3d2d84..10acf58c 100644
--- a/third_party/WebKit/Source/core/animation/InterpolationValue.h
+++ b/third_party/WebKit/Source/core/animation/InterpolationValue.h
@@ -8,6 +8,7 @@
 #include "core/animation/InterpolableValue.h"
 #include "core/animation/NonInterpolableValue.h"
 #include "platform/heap/Handle.h"
+#include <memory>
 
 namespace blink {
 
@@ -16,7 +17,7 @@
 struct InterpolationValue {
     DISALLOW_NEW_EXCEPT_PLACEMENT_NEW();
 
-    explicit InterpolationValue(PassOwnPtr<InterpolableValue> interpolableValue, PassRefPtr<NonInterpolableValue> nonInterpolableValue = nullptr)
+    explicit InterpolationValue(std::unique_ptr<InterpolableValue> interpolableValue, PassRefPtr<NonInterpolableValue> nonInterpolableValue = nullptr)
         : interpolableValue(std::move(interpolableValue))
         , nonInterpolableValue(nonInterpolableValue)
     { }
@@ -47,7 +48,7 @@
         nonInterpolableValue.clear();
     }
 
-    OwnPtr<InterpolableValue> interpolableValue;
+    std::unique_ptr<InterpolableValue> interpolableValue;
     RefPtr<NonInterpolableValue> nonInterpolableValue;
 };
 
diff --git a/third_party/WebKit/Source/core/animation/InvalidatableInterpolation.cpp b/third_party/WebKit/Source/core/animation/InvalidatableInterpolation.cpp
index 816d580..7f1b47cf0 100644
--- a/third_party/WebKit/Source/core/animation/InvalidatableInterpolation.cpp
+++ b/third_party/WebKit/Source/core/animation/InvalidatableInterpolation.cpp
@@ -7,6 +7,7 @@
 #include "core/animation/InterpolationEnvironment.h"
 #include "core/animation/StringKeyframe.h"
 #include "core/css/resolver/StyleResolverState.h"
+#include <memory>
 
 namespace blink {
 
@@ -24,7 +25,7 @@
     // We defer the interpolation to ensureValidInterpolation() if m_cachedPairConversion is null.
 }
 
-PassOwnPtr<PairwisePrimitiveInterpolation> InvalidatableInterpolation::maybeConvertPairwise(const InterpolationEnvironment& environment, const UnderlyingValueOwner& underlyingValueOwner) const
+std::unique_ptr<PairwisePrimitiveInterpolation> InvalidatableInterpolation::maybeConvertPairwise(const InterpolationEnvironment& environment, const UnderlyingValueOwner& underlyingValueOwner) const
 {
     ASSERT(m_currentFraction != 0 && m_currentFraction != 1);
     for (const auto& interpolationType : m_interpolationTypes) {
@@ -43,7 +44,7 @@
     return nullptr;
 }
 
-PassOwnPtr<TypedInterpolationValue> InvalidatableInterpolation::convertSingleKeyframe(const PropertySpecificKeyframe& keyframe, const InterpolationEnvironment& environment, const UnderlyingValueOwner& underlyingValueOwner) const
+std::unique_ptr<TypedInterpolationValue> InvalidatableInterpolation::convertSingleKeyframe(const PropertySpecificKeyframe& keyframe, const InterpolationEnvironment& environment, const UnderlyingValueOwner& underlyingValueOwner) const
 {
     if (keyframe.isNeutral() && !underlyingValueOwner)
         return nullptr;
@@ -68,7 +69,7 @@
     }
 }
 
-PassOwnPtr<TypedInterpolationValue> InvalidatableInterpolation::maybeConvertUnderlyingValue(const InterpolationEnvironment& environment) const
+std::unique_ptr<TypedInterpolationValue> InvalidatableInterpolation::maybeConvertUnderlyingValue(const InterpolationEnvironment& environment) const
 {
     for (const auto& interpolationType : m_interpolationTypes) {
         InterpolationValue result = interpolationType->maybeConvertUnderlyingValue(environment);
@@ -125,7 +126,7 @@
     } else if (m_currentFraction == 1) {
         m_cachedValue = convertSingleKeyframe(*m_endKeyframe, environment, underlyingValueOwner);
     } else {
-        OwnPtr<PairwisePrimitiveInterpolation> pairwiseConversion = maybeConvertPairwise(environment, underlyingValueOwner);
+        std::unique_ptr<PairwisePrimitiveInterpolation> pairwiseConversion = maybeConvertPairwise(environment, underlyingValueOwner);
         if (pairwiseConversion) {
             m_cachedValue = pairwiseConversion->initialValue();
             m_cachedPairConversion = std::move(pairwiseConversion);
diff --git a/third_party/WebKit/Source/core/animation/InvalidatableInterpolation.h b/third_party/WebKit/Source/core/animation/InvalidatableInterpolation.h
index fd977dd..7292583 100644
--- a/third_party/WebKit/Source/core/animation/InvalidatableInterpolation.h
+++ b/third_party/WebKit/Source/core/animation/InvalidatableInterpolation.h
@@ -10,6 +10,7 @@
 #include "core/animation/PropertyInterpolationTypesMapping.h"
 #include "core/animation/StyleInterpolation.h"
 #include "core/animation/TypedInterpolationValue.h"
+#include <memory>
 
 namespace blink {
 
@@ -51,13 +52,13 @@
 
     using ConversionCheckers = InterpolationType::ConversionCheckers;
 
-    PassOwnPtr<TypedInterpolationValue> maybeConvertUnderlyingValue(const InterpolationEnvironment&) const;
+    std::unique_ptr<TypedInterpolationValue> maybeConvertUnderlyingValue(const InterpolationEnvironment&) const;
     const TypedInterpolationValue* ensureValidInterpolation(const InterpolationEnvironment&, const UnderlyingValueOwner&) const;
     void clearCache() const;
     bool isCacheValid(const InterpolationEnvironment&, const UnderlyingValueOwner&) const;
     bool isNeutralKeyframeActive() const;
-    PassOwnPtr<PairwisePrimitiveInterpolation> maybeConvertPairwise(const InterpolationEnvironment&, const UnderlyingValueOwner&) const;
-    PassOwnPtr<TypedInterpolationValue> convertSingleKeyframe(const PropertySpecificKeyframe&, const InterpolationEnvironment&, const UnderlyingValueOwner&) const;
+    std::unique_ptr<PairwisePrimitiveInterpolation> maybeConvertPairwise(const InterpolationEnvironment&, const UnderlyingValueOwner&) const;
+    std::unique_ptr<TypedInterpolationValue> convertSingleKeyframe(const PropertySpecificKeyframe&, const InterpolationEnvironment&, const UnderlyingValueOwner&) const;
     void addConversionCheckers(const InterpolationType&, ConversionCheckers&) const;
     void setFlagIfInheritUsed(InterpolationEnvironment&) const;
     double underlyingFraction() const;
@@ -68,9 +69,9 @@
     RefPtr<PropertySpecificKeyframe> m_endKeyframe;
     double m_currentFraction;
     mutable bool m_isCached;
-    mutable OwnPtr<PrimitiveInterpolation> m_cachedPairConversion;
+    mutable std::unique_ptr<PrimitiveInterpolation> m_cachedPairConversion;
     mutable ConversionCheckers m_conversionCheckers;
-    mutable OwnPtr<TypedInterpolationValue> m_cachedValue;
+    mutable std::unique_ptr<TypedInterpolationValue> m_cachedValue;
 };
 
 DEFINE_TYPE_CASTS(InvalidatableInterpolation, Interpolation, value, value->isInvalidatableInterpolation(), value.isInvalidatableInterpolation());
diff --git a/third_party/WebKit/Source/core/animation/KeyframeEffectModel.cpp b/third_party/WebKit/Source/core/animation/KeyframeEffectModel.cpp
index 2c483b5..30e6198 100644
--- a/third_party/WebKit/Source/core/animation/KeyframeEffectModel.cpp
+++ b/third_party/WebKit/Source/core/animation/KeyframeEffectModel.cpp
@@ -39,6 +39,7 @@
 #include "platform/animation/AnimationUtilities.h"
 #include "platform/geometry/FloatBox.h"
 #include "platform/transforms/TransformationMatrix.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/text/StringHash.h"
 
 namespace blink {
@@ -171,7 +172,7 @@
     if (m_keyframeGroups)
         return;
 
-    m_keyframeGroups = adoptPtr(new KeyframeGroupMap);
+    m_keyframeGroups = wrapUnique(new KeyframeGroupMap);
     RefPtr<TimingFunction> zeroOffsetEasing = m_defaultKeyframeEasing;
     for (const auto& keyframe : normalizedKeyframes(getFrames())) {
         if (keyframe->offset() == 0)
@@ -181,7 +182,7 @@
             KeyframeGroupMap::iterator groupIter = m_keyframeGroups->find(property);
             PropertySpecificKeyframeGroup* group;
             if (groupIter == m_keyframeGroups->end())
-                group = m_keyframeGroups->add(property, adoptPtr(new PropertySpecificKeyframeGroup)).storedValue->value.get();
+                group = m_keyframeGroups->add(property, wrapUnique(new PropertySpecificKeyframeGroup)).storedValue->value.get();
             else
                 group = groupIter->value.get();
 
diff --git a/third_party/WebKit/Source/core/animation/KeyframeEffectModel.h b/third_party/WebKit/Source/core/animation/KeyframeEffectModel.h
index cd2d332..28502f05 100644
--- a/third_party/WebKit/Source/core/animation/KeyframeEffectModel.h
+++ b/third_party/WebKit/Source/core/animation/KeyframeEffectModel.h
@@ -44,6 +44,7 @@
 #include "wtf/HashSet.h"
 #include "wtf/PassRefPtr.h"
 #include "wtf/Vector.h"
+#include <memory>
 
 namespace blink {
 
@@ -83,7 +84,7 @@
         return m_keyframeGroups->get(property)->keyframes();
     }
 
-    using KeyframeGroupMap = HashMap<PropertyHandle, OwnPtr<PropertySpecificKeyframeGroup>>;
+    using KeyframeGroupMap = HashMap<PropertyHandle, std::unique_ptr<PropertySpecificKeyframeGroup>>;
     const KeyframeGroupMap& getPropertySpecificKeyframeGroups() const
     {
         ensureKeyframeGroups();
@@ -140,7 +141,7 @@
     // The spec describes filtering the normalized keyframes at sampling time
     // to get the 'property-specific keyframes'. For efficiency, we cache the
     // property-specific lists.
-    mutable OwnPtr<KeyframeGroupMap> m_keyframeGroups;
+    mutable std::unique_ptr<KeyframeGroupMap> m_keyframeGroups;
     mutable InterpolationEffect m_interpolationEffect;
     mutable int m_lastIteration;
     mutable double m_lastFraction;
diff --git a/third_party/WebKit/Source/core/animation/KeyframeEffectTest.cpp b/third_party/WebKit/Source/core/animation/KeyframeEffectTest.cpp
index a93c4ec..00f2c28 100644
--- a/third_party/WebKit/Source/core/animation/KeyframeEffectTest.cpp
+++ b/third_party/WebKit/Source/core/animation/KeyframeEffectTest.cpp
@@ -17,6 +17,7 @@
 #include "core/dom/Document.h"
 #include "core/testing/DummyPageHolder.h"
 #include "testing/gtest/include/gtest/gtest.h"
+#include <memory>
 #include <v8.h>
 
 namespace blink {
@@ -35,7 +36,7 @@
 
     Document& document() const { return pageHolder->document(); }
 
-    OwnPtr<DummyPageHolder> pageHolder;
+    std::unique_ptr<DummyPageHolder> pageHolder;
     Persistent<Element> element;
     TrackExceptionState exceptionState;
 };
diff --git a/third_party/WebKit/Source/core/animation/LegacyStyleInterpolation.h b/third_party/WebKit/Source/core/animation/LegacyStyleInterpolation.h
index 3307373..cf7f0241 100644
--- a/third_party/WebKit/Source/core/animation/LegacyStyleInterpolation.h
+++ b/third_party/WebKit/Source/core/animation/LegacyStyleInterpolation.h
@@ -7,6 +7,7 @@
 
 #include "core/animation/StyleInterpolation.h"
 #include "core/css/resolver/AnimatedStyleBuilder.h"
+#include <memory>
 
 namespace blink {
 
@@ -29,7 +30,7 @@
     }
 
 private:
-    LegacyStyleInterpolation(PassOwnPtr<InterpolableValue> start, PassOwnPtr<InterpolableValue> end, CSSPropertyID id)
+    LegacyStyleInterpolation(std::unique_ptr<InterpolableValue> start, std::unique_ptr<InterpolableValue> end, CSSPropertyID id)
         : StyleInterpolation(std::move(start), std::move(end), id)
     {
     }
diff --git a/third_party/WebKit/Source/core/animation/LengthUnitsChecker.h b/third_party/WebKit/Source/core/animation/LengthUnitsChecker.h
index 65570c4..67fbe70 100644
--- a/third_party/WebKit/Source/core/animation/LengthUnitsChecker.h
+++ b/third_party/WebKit/Source/core/animation/LengthUnitsChecker.h
@@ -8,12 +8,14 @@
 #include "core/animation/InterpolationType.h"
 #include "core/css/CSSPrimitiveValue.h"
 #include "core/css/resolver/StyleResolverState.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
 class LengthUnitsChecker : public InterpolationType::ConversionChecker {
 public:
-    static PassOwnPtr<LengthUnitsChecker> maybeCreate(CSSLengthArray&& lengthArray, const StyleResolverState& state)
+    static std::unique_ptr<LengthUnitsChecker> maybeCreate(CSSLengthArray&& lengthArray, const StyleResolverState& state)
     {
         bool create = false;
         size_t lastIndex = 0;
@@ -26,7 +28,7 @@
         }
         if (!create)
             return nullptr;
-        return adoptPtr(new LengthUnitsChecker(std::move(lengthArray), lastIndex));
+        return wrapUnique(new LengthUnitsChecker(std::move(lengthArray), lastIndex));
     }
 
     bool isValid(const InterpolationEnvironment& environment, const InterpolationValue& underlying) const final
diff --git a/third_party/WebKit/Source/core/animation/ListInterpolationFunctions.cpp b/third_party/WebKit/Source/core/animation/ListInterpolationFunctions.cpp
index 32c42ff..20566719 100644
--- a/third_party/WebKit/Source/core/animation/ListInterpolationFunctions.cpp
+++ b/third_party/WebKit/Source/core/animation/ListInterpolationFunctions.cpp
@@ -7,6 +7,7 @@
 #include "core/animation/UnderlyingValueOwner.h"
 #include "core/css/CSSValueList.h"
 #include "wtf/MathExtras.h"
+#include <memory>
 
 namespace blink {
 
@@ -53,7 +54,7 @@
     }
 
     if (startLength == 0) {
-        OwnPtr<InterpolableValue> startInterpolableValue = end.interpolableValue->cloneAndZero();
+        std::unique_ptr<InterpolableValue> startInterpolableValue = end.interpolableValue->cloneAndZero();
         return PairwiseInterpolationValue(
             std::move(startInterpolableValue),
             std::move(end.interpolableValue),
@@ -61,7 +62,7 @@
     }
 
     if (endLength == 0) {
-        OwnPtr<InterpolableValue> endInterpolableValue = start.interpolableValue->cloneAndZero();
+        std::unique_ptr<InterpolableValue> endInterpolableValue = start.interpolableValue->cloneAndZero();
         return PairwiseInterpolationValue(
             std::move(start.interpolableValue),
             std::move(endInterpolableValue),
@@ -69,8 +70,8 @@
     }
 
     size_t finalLength = lowestCommonMultiple(startLength, endLength);
-    OwnPtr<InterpolableList> resultStartInterpolableList = InterpolableList::create(finalLength);
-    OwnPtr<InterpolableList> resultEndInterpolableList = InterpolableList::create(finalLength);
+    std::unique_ptr<InterpolableList> resultStartInterpolableList = InterpolableList::create(finalLength);
+    std::unique_ptr<InterpolableList> resultEndInterpolableList = InterpolableList::create(finalLength);
     Vector<RefPtr<NonInterpolableValue>> resultNonInterpolableValues(finalLength);
 
     InterpolableList& startInterpolableList = toInterpolableList(*start.interpolableValue);
@@ -104,7 +105,7 @@
     if (currentLength == length)
         return;
     ASSERT(currentLength < length);
-    OwnPtr<InterpolableList> newInterpolableList = InterpolableList::create(length);
+    std::unique_ptr<InterpolableList> newInterpolableList = InterpolableList::create(length);
     Vector<RefPtr<NonInterpolableValue>> newNonInterpolableValues(length);
     for (size_t i = length; i-- > 0;) {
         newInterpolableList->set(i, i < currentLength ? std::move(interpolableList.getMutable(i)) : interpolableList.get(i % currentLength)->clone());
diff --git a/third_party/WebKit/Source/core/animation/ListInterpolationFunctions.h b/third_party/WebKit/Source/core/animation/ListInterpolationFunctions.h
index b80dd09f..57764dc 100644
--- a/third_party/WebKit/Source/core/animation/ListInterpolationFunctions.h
+++ b/third_party/WebKit/Source/core/animation/ListInterpolationFunctions.h
@@ -8,6 +8,7 @@
 #include "core/animation/InterpolationValue.h"
 #include "core/animation/PairwiseInterpolationValue.h"
 #include "wtf/Vector.h"
+#include <memory>
 
 namespace blink {
 
@@ -28,7 +29,7 @@
     static bool equalValues(const InterpolationValue&, const InterpolationValue&, EqualNonInterpolableValuesCallback);
 
     using NonInterpolableValuesAreCompatibleCallback = bool (*)(const NonInterpolableValue*, const NonInterpolableValue*);
-    using CompositeItemCallback = void (*)(OwnPtr<InterpolableValue>&, RefPtr<NonInterpolableValue>&, double underlyingFraction, const InterpolableValue&, const NonInterpolableValue*);
+    using CompositeItemCallback = void (*)(std::unique_ptr<InterpolableValue>&, RefPtr<NonInterpolableValue>&, double underlyingFraction, const InterpolableValue&, const NonInterpolableValue*);
     static void composite(UnderlyingValueOwner&, double underlyingFraction, const InterpolationType&, const InterpolationValue&, NonInterpolableValuesAreCompatibleCallback, CompositeItemCallback);
 };
 
@@ -69,7 +70,7 @@
 {
     if (length == 0)
         return createEmptyList();
-    OwnPtr<InterpolableList> interpolableList = InterpolableList::create(length);
+    std::unique_ptr<InterpolableList> interpolableList = InterpolableList::create(length);
     Vector<RefPtr<NonInterpolableValue>> nonInterpolableValues(length);
     for (size_t i = 0; i < length; i++) {
         InterpolationValue item = createItem(i);
diff --git a/third_party/WebKit/Source/core/animation/PairwiseInterpolationValue.h b/third_party/WebKit/Source/core/animation/PairwiseInterpolationValue.h
index 6f1d96c2..bc63e054 100644
--- a/third_party/WebKit/Source/core/animation/PairwiseInterpolationValue.h
+++ b/third_party/WebKit/Source/core/animation/PairwiseInterpolationValue.h
@@ -8,6 +8,7 @@
 #include "core/animation/InterpolableValue.h"
 #include "core/animation/NonInterpolableValue.h"
 #include "platform/heap/Handle.h"
+#include <memory>
 
 namespace blink {
 
@@ -15,7 +16,7 @@
 struct PairwiseInterpolationValue {
     DISALLOW_NEW_EXCEPT_PLACEMENT_NEW();
 
-    PairwiseInterpolationValue(PassOwnPtr<InterpolableValue> startInterpolableValue, PassOwnPtr<InterpolableValue> endInterpolableValue, PassRefPtr<NonInterpolableValue> nonInterpolableValue = nullptr)
+    PairwiseInterpolationValue(std::unique_ptr<InterpolableValue> startInterpolableValue, std::unique_ptr<InterpolableValue> endInterpolableValue, PassRefPtr<NonInterpolableValue> nonInterpolableValue = nullptr)
         : startInterpolableValue(std::move(startInterpolableValue))
         , endInterpolableValue(std::move(endInterpolableValue))
         , nonInterpolableValue(std::move(nonInterpolableValue))
@@ -31,8 +32,8 @@
 
     operator bool() const { return startInterpolableValue.get(); }
 
-    OwnPtr<InterpolableValue> startInterpolableValue;
-    OwnPtr<InterpolableValue> endInterpolableValue;
+    std::unique_ptr<InterpolableValue> startInterpolableValue;
+    std::unique_ptr<InterpolableValue> endInterpolableValue;
     RefPtr<NonInterpolableValue> nonInterpolableValue;
 };
 
diff --git a/third_party/WebKit/Source/core/animation/PathInterpolationFunctions.cpp b/third_party/WebKit/Source/core/animation/PathInterpolationFunctions.cpp
index c69d7ec..206964f2 100644
--- a/third_party/WebKit/Source/core/animation/PathInterpolationFunctions.cpp
+++ b/third_party/WebKit/Source/core/animation/PathInterpolationFunctions.cpp
@@ -12,6 +12,8 @@
 #include "core/svg/SVGPathByteStreamBuilder.h"
 #include "core/svg/SVGPathByteStreamSource.h"
 #include "core/svg/SVGPathParser.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
@@ -51,7 +53,7 @@
     SVGPathByteStreamSource pathSource(byteStream);
     size_t length = 0;
     PathCoordinates currentCoordinates;
-    Vector<OwnPtr<InterpolableValue>> interpolablePathSegs;
+    Vector<std::unique_ptr<InterpolableValue>> interpolablePathSegs;
     Vector<SVGPathSegType> pathSegTypes;
 
     while (pathSource.hasMoreData()) {
@@ -61,11 +63,11 @@
         length++;
     }
 
-    OwnPtr<InterpolableList> pathArgs = InterpolableList::create(length);
+    std::unique_ptr<InterpolableList> pathArgs = InterpolableList::create(length);
     for (size_t i = 0; i < interpolablePathSegs.size(); i++)
         pathArgs->set(i, std::move(interpolablePathSegs[i]));
 
-    OwnPtr<InterpolableList> result = InterpolableList::create(PathComponentIndexCount);
+    std::unique_ptr<InterpolableList> result = InterpolableList::create(PathComponentIndexCount);
     result->set(PathArgsIndex, std::move(pathArgs));
     result->set(PathNeutralIndex, InterpolableNumber::create(0));
 
@@ -77,7 +79,7 @@
     if (stylePath)
         return convertValue(stylePath->byteStream());
 
-    OwnPtr<SVGPathByteStream> emptyPath = SVGPathByteStream::create();
+    std::unique_ptr<SVGPathByteStream> emptyPath = SVGPathByteStream::create();
     return convertValue(*emptyPath);
 }
 
@@ -85,9 +87,9 @@
 public:
     ~UnderlyingPathSegTypesChecker() final {}
 
-    static PassOwnPtr<UnderlyingPathSegTypesChecker> create(const InterpolationValue& underlying)
+    static std::unique_ptr<UnderlyingPathSegTypesChecker> create(const InterpolationValue& underlying)
     {
-        return adoptPtr(new UnderlyingPathSegTypesChecker(getPathSegTypes(underlying)));
+        return wrapUnique(new UnderlyingPathSegTypesChecker(getPathSegTypes(underlying)));
     }
 
 private:
@@ -111,7 +113,7 @@
 InterpolationValue PathInterpolationFunctions::maybeConvertNeutral(const InterpolationValue& underlying, InterpolationType::ConversionCheckers& conversionCheckers)
 {
     conversionCheckers.append(UnderlyingPathSegTypesChecker::create(underlying));
-    OwnPtr<InterpolableList> result = InterpolableList::create(PathComponentIndexCount);
+    std::unique_ptr<InterpolableList> result = InterpolableList::create(PathComponentIndexCount);
     result->set(PathArgsIndex, toInterpolableList(*underlying.interpolableValue).get(PathArgsIndex)->cloneAndZero());
     result->set(PathNeutralIndex, InterpolableNumber::create(1));
     return InterpolationValue(std::move(result), underlying.nonInterpolableValue.get());
@@ -157,9 +159,9 @@
     underlyingValueOwner.mutableValue().nonInterpolableValue = value.nonInterpolableValue.get();
 }
 
-PassOwnPtr<SVGPathByteStream> PathInterpolationFunctions::appliedValue(const InterpolableValue& interpolableValue, const NonInterpolableValue* nonInterpolableValue)
+std::unique_ptr<SVGPathByteStream> PathInterpolationFunctions::appliedValue(const InterpolableValue& interpolableValue, const NonInterpolableValue* nonInterpolableValue)
 {
-    OwnPtr<SVGPathByteStream> pathByteStream = SVGPathByteStream::create();
+    std::unique_ptr<SVGPathByteStream> pathByteStream = SVGPathByteStream::create();
     InterpolatedSVGPathSource source(
         toInterpolableList(*toInterpolableList(interpolableValue).get(PathArgsIndex)),
         toSVGPathNonInterpolableValue(nonInterpolableValue)->pathSegTypes());
diff --git a/third_party/WebKit/Source/core/animation/PathInterpolationFunctions.h b/third_party/WebKit/Source/core/animation/PathInterpolationFunctions.h
index 188aeb4..662e13104 100644
--- a/third_party/WebKit/Source/core/animation/PathInterpolationFunctions.h
+++ b/third_party/WebKit/Source/core/animation/PathInterpolationFunctions.h
@@ -7,6 +7,7 @@
 
 #include "core/animation/InterpolationType.h"
 #include "core/svg/SVGPathByteStream.h"
+#include <memory>
 
 namespace blink {
 
@@ -14,7 +15,7 @@
 
 class PathInterpolationFunctions {
 public:
-    static PassOwnPtr<SVGPathByteStream> appliedValue(const InterpolableValue&, const NonInterpolableValue*);
+    static std::unique_ptr<SVGPathByteStream> appliedValue(const InterpolableValue&, const NonInterpolableValue*);
 
     static void composite(UnderlyingValueOwner&, double underlyingFraction, const InterpolationType&, const InterpolationValue&);
 
diff --git a/third_party/WebKit/Source/core/animation/PrimitiveInterpolation.h b/third_party/WebKit/Source/core/animation/PrimitiveInterpolation.h
index cc07984..5a74b4be 100644
--- a/third_party/WebKit/Source/core/animation/PrimitiveInterpolation.h
+++ b/third_party/WebKit/Source/core/animation/PrimitiveInterpolation.h
@@ -8,8 +8,10 @@
 #include "core/animation/TypedInterpolationValue.h"
 #include "platform/animation/AnimationUtilities.h"
 #include "platform/heap/Handle.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/Vector.h"
 #include <cmath>
+#include <memory>
 
 namespace blink {
 
@@ -23,7 +25,7 @@
 public:
     virtual ~PrimitiveInterpolation() { }
 
-    virtual void interpolateValue(double fraction, OwnPtr<TypedInterpolationValue>& result) const = 0;
+    virtual void interpolateValue(double fraction, std::unique_ptr<TypedInterpolationValue>& result) const = 0;
     virtual double interpolateUnderlyingFraction(double start, double end, double fraction) const = 0;
     virtual bool isFlip() const { return false; }
 
@@ -36,20 +38,20 @@
 public:
     ~PairwisePrimitiveInterpolation() override { }
 
-    static PassOwnPtr<PairwisePrimitiveInterpolation> create(const InterpolationType& type, PassOwnPtr<InterpolableValue> start, PassOwnPtr<InterpolableValue> end, PassRefPtr<NonInterpolableValue> nonInterpolableValue)
+    static std::unique_ptr<PairwisePrimitiveInterpolation> create(const InterpolationType& type, std::unique_ptr<InterpolableValue> start, std::unique_ptr<InterpolableValue> end, PassRefPtr<NonInterpolableValue> nonInterpolableValue)
     {
-        return adoptPtr(new PairwisePrimitiveInterpolation(type, std::move(start), std::move(end), nonInterpolableValue));
+        return wrapUnique(new PairwisePrimitiveInterpolation(type, std::move(start), std::move(end), nonInterpolableValue));
     }
 
     const InterpolationType& type() const { return m_type; }
 
-    PassOwnPtr<TypedInterpolationValue> initialValue() const
+    std::unique_ptr<TypedInterpolationValue> initialValue() const
     {
         return TypedInterpolationValue::create(m_type, m_start->clone(), m_nonInterpolableValue);
     }
 
 private:
-    PairwisePrimitiveInterpolation(const InterpolationType& type, PassOwnPtr<InterpolableValue> start, PassOwnPtr<InterpolableValue> end, PassRefPtr<NonInterpolableValue> nonInterpolableValue)
+    PairwisePrimitiveInterpolation(const InterpolationType& type, std::unique_ptr<InterpolableValue> start, std::unique_ptr<InterpolableValue> end, PassRefPtr<NonInterpolableValue> nonInterpolableValue)
         : m_type(type)
         , m_start(std::move(start))
         , m_end(std::move(end))
@@ -59,7 +61,7 @@
         ASSERT(m_end);
     }
 
-    void interpolateValue(double fraction, OwnPtr<TypedInterpolationValue>& result) const final
+    void interpolateValue(double fraction, std::unique_ptr<TypedInterpolationValue>& result) const final
     {
         ASSERT(result);
         ASSERT(&result->type() == &m_type);
@@ -70,8 +72,8 @@
     double interpolateUnderlyingFraction(double start, double end, double fraction) const final { return blend(start, end, fraction); }
 
     const InterpolationType& m_type;
-    OwnPtr<InterpolableValue> m_start;
-    OwnPtr<InterpolableValue> m_end;
+    std::unique_ptr<InterpolableValue> m_start;
+    std::unique_ptr<InterpolableValue> m_end;
     RefPtr<NonInterpolableValue> m_nonInterpolableValue;
 };
 
@@ -80,19 +82,19 @@
 public:
     ~FlipPrimitiveInterpolation() override { }
 
-    static PassOwnPtr<FlipPrimitiveInterpolation> create(PassOwnPtr<TypedInterpolationValue> start, PassOwnPtr<TypedInterpolationValue> end)
+    static std::unique_ptr<FlipPrimitiveInterpolation> create(std::unique_ptr<TypedInterpolationValue> start, std::unique_ptr<TypedInterpolationValue> end)
     {
-        return adoptPtr(new FlipPrimitiveInterpolation(std::move(start), std::move(end)));
+        return wrapUnique(new FlipPrimitiveInterpolation(std::move(start), std::move(end)));
     }
 
 private:
-    FlipPrimitiveInterpolation(PassOwnPtr<TypedInterpolationValue> start, PassOwnPtr<TypedInterpolationValue> end)
+    FlipPrimitiveInterpolation(std::unique_ptr<TypedInterpolationValue> start, std::unique_ptr<TypedInterpolationValue> end)
         : m_start(std::move(start))
         , m_end(std::move(end))
         , m_lastFraction(std::numeric_limits<double>::quiet_NaN())
     { }
 
-    void interpolateValue(double fraction, OwnPtr<TypedInterpolationValue>& result) const final
+    void interpolateValue(double fraction, std::unique_ptr<TypedInterpolationValue>& result) const final
     {
         // TODO(alancutter): Remove this optimisation once Oilpan is default.
         if (!std::isnan(m_lastFraction) && (fraction < 0.5) == (m_lastFraction < 0.5))
@@ -106,8 +108,8 @@
 
     bool isFlip() const final { return true; }
 
-    OwnPtr<TypedInterpolationValue> m_start;
-    OwnPtr<TypedInterpolationValue> m_end;
+    std::unique_ptr<TypedInterpolationValue> m_start;
+    std::unique_ptr<TypedInterpolationValue> m_end;
     mutable double m_lastFraction;
 };
 
diff --git a/third_party/WebKit/Source/core/animation/PropertyInterpolationTypesMapping.cpp b/third_party/WebKit/Source/core/animation/PropertyInterpolationTypesMapping.cpp
index 2e830b0..7071a27c 100644
--- a/third_party/WebKit/Source/core/animation/PropertyInterpolationTypesMapping.cpp
+++ b/third_party/WebKit/Source/core/animation/PropertyInterpolationTypesMapping.cpp
@@ -48,18 +48,20 @@
 #include "core/animation/SVGRectInterpolationType.h"
 #include "core/animation/SVGTransformListInterpolationType.h"
 #include "core/animation/SVGValueInterpolationType.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
 const InterpolationTypes& PropertyInterpolationTypesMapping::get(const PropertyHandle& property)
 {
-    using ApplicableTypesMap = HashMap<PropertyHandle, OwnPtr<const InterpolationTypes>>;
+    using ApplicableTypesMap = HashMap<PropertyHandle, std::unique_ptr<const InterpolationTypes>>;
     DEFINE_STATIC_LOCAL(ApplicableTypesMap, applicableTypesMap, ());
     auto entry = applicableTypesMap.find(property);
     if (entry != applicableTypesMap.end())
         return *entry->value.get();
 
-    OwnPtr<InterpolationTypes> applicableTypes = adoptPtr(new InterpolationTypes());
+    std::unique_ptr<InterpolationTypes> applicableTypes = wrapUnique(new InterpolationTypes());
 
     if (property.isCSSProperty() || property.isPresentationAttribute()) {
         CSSPropertyID cssProperty = property.isCSSProperty() ? property.cssProperty() : property.presentationAttribute();
@@ -115,7 +117,7 @@
         case CSSPropertyWordSpacing:
         case CSSPropertyX:
         case CSSPropertyY:
-            applicableTypes->append(adoptPtr(new CSSLengthInterpolationType(cssProperty)));
+            applicableTypes->append(wrapUnique(new CSSLengthInterpolationType(cssProperty)));
             break;
         case CSSPropertyFlexGrow:
         case CSSPropertyFlexShrink:
@@ -131,11 +133,11 @@
         case CSSPropertyColumnCount:
         case CSSPropertyWidows:
         case CSSPropertyZIndex:
-            applicableTypes->append(adoptPtr(new CSSNumberInterpolationType(cssProperty)));
+            applicableTypes->append(wrapUnique(new CSSNumberInterpolationType(cssProperty)));
             break;
         case CSSPropertyLineHeight:
-            applicableTypes->append(adoptPtr(new CSSLengthInterpolationType(cssProperty)));
-            applicableTypes->append(adoptPtr(new CSSNumberInterpolationType(cssProperty)));
+            applicableTypes->append(wrapUnique(new CSSLengthInterpolationType(cssProperty)));
+            applicableTypes->append(wrapUnique(new CSSNumberInterpolationType(cssProperty)));
             break;
         case CSSPropertyBackgroundColor:
         case CSSPropertyBorderBottomColor:
@@ -150,118 +152,118 @@
         case CSSPropertyTextDecorationColor:
         case CSSPropertyColumnRuleColor:
         case CSSPropertyWebkitTextStrokeColor:
-            applicableTypes->append(adoptPtr(new CSSColorInterpolationType(cssProperty)));
+            applicableTypes->append(wrapUnique(new CSSColorInterpolationType(cssProperty)));
             break;
         case CSSPropertyFill:
         case CSSPropertyStroke:
-            applicableTypes->append(adoptPtr(new CSSPaintInterpolationType(cssProperty)));
+            applicableTypes->append(wrapUnique(new CSSPaintInterpolationType(cssProperty)));
             break;
         case CSSPropertyD:
-            applicableTypes->append(adoptPtr(new CSSPathInterpolationType(cssProperty)));
+            applicableTypes->append(wrapUnique(new CSSPathInterpolationType(cssProperty)));
             break;
         case CSSPropertyBoxShadow:
         case CSSPropertyTextShadow:
-            applicableTypes->append(adoptPtr(new CSSShadowListInterpolationType(cssProperty)));
+            applicableTypes->append(wrapUnique(new CSSShadowListInterpolationType(cssProperty)));
             break;
         case CSSPropertyBorderImageSource:
         case CSSPropertyListStyleImage:
         case CSSPropertyWebkitMaskBoxImageSource:
-            applicableTypes->append(adoptPtr(new CSSImageInterpolationType(cssProperty)));
+            applicableTypes->append(wrapUnique(new CSSImageInterpolationType(cssProperty)));
             break;
         case CSSPropertyBackgroundImage:
         case CSSPropertyWebkitMaskImage:
-            applicableTypes->append(adoptPtr(new CSSImageListInterpolationType(cssProperty)));
+            applicableTypes->append(wrapUnique(new CSSImageListInterpolationType(cssProperty)));
             break;
         case CSSPropertyStrokeDasharray:
-            applicableTypes->append(adoptPtr(new CSSLengthListInterpolationType(cssProperty)));
+            applicableTypes->append(wrapUnique(new CSSLengthListInterpolationType(cssProperty)));
             break;
         case CSSPropertyFontWeight:
-            applicableTypes->append(adoptPtr(new CSSFontWeightInterpolationType(cssProperty)));
+            applicableTypes->append(wrapUnique(new CSSFontWeightInterpolationType(cssProperty)));
             break;
         case CSSPropertyVisibility:
-            applicableTypes->append(adoptPtr(new CSSVisibilityInterpolationType(cssProperty)));
+            applicableTypes->append(wrapUnique(new CSSVisibilityInterpolationType(cssProperty)));
             break;
         case CSSPropertyClip:
-            applicableTypes->append(adoptPtr(new CSSClipInterpolationType(cssProperty)));
+            applicableTypes->append(wrapUnique(new CSSClipInterpolationType(cssProperty)));
             break;
         case CSSPropertyMotionRotation:
-            applicableTypes->append(adoptPtr(new CSSMotionRotationInterpolationType(cssProperty)));
+            applicableTypes->append(wrapUnique(new CSSMotionRotationInterpolationType(cssProperty)));
             break;
         case CSSPropertyBackgroundPositionX:
         case CSSPropertyBackgroundPositionY:
         case CSSPropertyWebkitMaskPositionX:
         case CSSPropertyWebkitMaskPositionY:
-            applicableTypes->append(adoptPtr(new CSSPositionAxisListInterpolationType(cssProperty)));
+            applicableTypes->append(wrapUnique(new CSSPositionAxisListInterpolationType(cssProperty)));
             break;
         case CSSPropertyPerspectiveOrigin:
         case CSSPropertyObjectPosition:
-            applicableTypes->append(adoptPtr(new CSSPositionInterpolationType(cssProperty)));
+            applicableTypes->append(wrapUnique(new CSSPositionInterpolationType(cssProperty)));
             break;
         case CSSPropertyBorderBottomLeftRadius:
         case CSSPropertyBorderBottomRightRadius:
         case CSSPropertyBorderTopLeftRadius:
         case CSSPropertyBorderTopRightRadius:
-            applicableTypes->append(adoptPtr(new CSSLengthPairInterpolationType(cssProperty)));
+            applicableTypes->append(wrapUnique(new CSSLengthPairInterpolationType(cssProperty)));
             break;
         case CSSPropertyTranslate:
-            applicableTypes->append(adoptPtr(new CSSTranslateInterpolationType(cssProperty)));
+            applicableTypes->append(wrapUnique(new CSSTranslateInterpolationType(cssProperty)));
             break;
         case CSSPropertyTransformOrigin:
-            applicableTypes->append(adoptPtr(new CSSTransformOriginInterpolationType(cssProperty)));
+            applicableTypes->append(wrapUnique(new CSSTransformOriginInterpolationType(cssProperty)));
             break;
         case CSSPropertyBackgroundSize:
         case CSSPropertyWebkitMaskSize:
-            applicableTypes->append(adoptPtr(new CSSSizeListInterpolationType(cssProperty)));
+            applicableTypes->append(wrapUnique(new CSSSizeListInterpolationType(cssProperty)));
             break;
         case CSSPropertyBorderImageOutset:
         case CSSPropertyBorderImageWidth:
         case CSSPropertyWebkitMaskBoxImageOutset:
         case CSSPropertyWebkitMaskBoxImageWidth:
-            applicableTypes->append(adoptPtr(new CSSBorderImageLengthBoxInterpolationType(cssProperty)));
+            applicableTypes->append(wrapUnique(new CSSBorderImageLengthBoxInterpolationType(cssProperty)));
             break;
         case CSSPropertyScale:
-            applicableTypes->append(adoptPtr(new CSSScaleInterpolationType(cssProperty)));
+            applicableTypes->append(wrapUnique(new CSSScaleInterpolationType(cssProperty)));
             break;
         case CSSPropertyFontSize:
-            applicableTypes->append(adoptPtr(new CSSFontSizeInterpolationType(cssProperty)));
+            applicableTypes->append(wrapUnique(new CSSFontSizeInterpolationType(cssProperty)));
             break;
         case CSSPropertyTextIndent:
-            applicableTypes->append(adoptPtr(new CSSTextIndentInterpolationType(cssProperty)));
+            applicableTypes->append(wrapUnique(new CSSTextIndentInterpolationType(cssProperty)));
             break;
         case CSSPropertyBorderImageSlice:
         case CSSPropertyWebkitMaskBoxImageSlice:
-            applicableTypes->append(adoptPtr(new CSSImageSliceInterpolationType(cssProperty)));
+            applicableTypes->append(wrapUnique(new CSSImageSliceInterpolationType(cssProperty)));
             break;
         case CSSPropertyWebkitClipPath:
         case CSSPropertyShapeOutside:
-            applicableTypes->append(adoptPtr(new CSSBasicShapeInterpolationType(cssProperty)));
+            applicableTypes->append(wrapUnique(new CSSBasicShapeInterpolationType(cssProperty)));
             break;
         case CSSPropertyRotate:
-            applicableTypes->append(adoptPtr(new CSSRotateInterpolationType(cssProperty)));
+            applicableTypes->append(wrapUnique(new CSSRotateInterpolationType(cssProperty)));
             break;
         case CSSPropertyBackdropFilter:
         case CSSPropertyWebkitFilter:
-            applicableTypes->append(adoptPtr(new CSSFilterListInterpolationType(cssProperty)));
+            applicableTypes->append(wrapUnique(new CSSFilterListInterpolationType(cssProperty)));
             break;
         case CSSPropertyTransform:
-            applicableTypes->append(adoptPtr(new CSSTransformInterpolationType(cssProperty)));
+            applicableTypes->append(wrapUnique(new CSSTransformInterpolationType(cssProperty)));
             break;
         default:
             ASSERT(!CSSPropertyMetadata::isInterpolableProperty(cssProperty));
         }
 
-        applicableTypes->append(adoptPtr(new CSSValueInterpolationType(cssProperty)));
+        applicableTypes->append(wrapUnique(new CSSValueInterpolationType(cssProperty)));
 
     } else {
         const QualifiedName& attribute = property.svgAttribute();
         if (attribute == SVGNames::orientAttr) {
-            applicableTypes->append(adoptPtr(new SVGAngleInterpolationType(attribute)));
+            applicableTypes->append(wrapUnique(new SVGAngleInterpolationType(attribute)));
         } else if (attribute == SVGNames::numOctavesAttr
             || attribute == SVGNames::targetXAttr
             || attribute == SVGNames::targetYAttr) {
-            applicableTypes->append(adoptPtr(new SVGIntegerInterpolationType(attribute)));
+            applicableTypes->append(wrapUnique(new SVGIntegerInterpolationType(attribute)));
         } else if (attribute == SVGNames::orderAttr) {
-            applicableTypes->append(adoptPtr(new SVGIntegerOptionalIntegerInterpolationType(attribute)));
+            applicableTypes->append(wrapUnique(new SVGIntegerOptionalIntegerInterpolationType(attribute)));
         } else if (attribute == SVGNames::cxAttr
             || attribute == SVGNames::cyAttr
             || attribute == SVGNames::fxAttr
@@ -281,15 +283,15 @@
             || attribute == SVGNames::x2Attr
             || attribute == SVGNames::y1Attr
             || attribute == SVGNames::y2Attr) {
-            applicableTypes->append(adoptPtr(new SVGLengthInterpolationType(attribute)));
+            applicableTypes->append(wrapUnique(new SVGLengthInterpolationType(attribute)));
         } else if (attribute == SVGNames::dxAttr
             || attribute == SVGNames::dyAttr) {
-            applicableTypes->append(adoptPtr(new SVGNumberInterpolationType(attribute)));
-            applicableTypes->append(adoptPtr(new SVGLengthListInterpolationType(attribute)));
+            applicableTypes->append(wrapUnique(new SVGNumberInterpolationType(attribute)));
+            applicableTypes->append(wrapUnique(new SVGLengthListInterpolationType(attribute)));
         } else if (attribute == SVGNames::xAttr
             || attribute == SVGNames::yAttr) {
-            applicableTypes->append(adoptPtr(new SVGLengthInterpolationType(attribute)));
-            applicableTypes->append(adoptPtr(new SVGLengthListInterpolationType(attribute)));
+            applicableTypes->append(wrapUnique(new SVGLengthInterpolationType(attribute)));
+            applicableTypes->append(wrapUnique(new SVGLengthListInterpolationType(attribute)));
         } else if (attribute == SVGNames::amplitudeAttr
             || attribute == SVGNames::azimuthAttr
             || attribute == SVGNames::biasAttr
@@ -315,27 +317,27 @@
             || attribute == SVGNames::specularExponentAttr
             || attribute == SVGNames::surfaceScaleAttr
             || attribute == SVGNames::zAttr) {
-            applicableTypes->append(adoptPtr(new SVGNumberInterpolationType(attribute)));
+            applicableTypes->append(wrapUnique(new SVGNumberInterpolationType(attribute)));
         } else if (attribute == SVGNames::kernelMatrixAttr
             || attribute == SVGNames::rotateAttr
             || attribute == SVGNames::tableValuesAttr
             || attribute == SVGNames::valuesAttr) {
-            applicableTypes->append(adoptPtr(new SVGNumberListInterpolationType(attribute)));
+            applicableTypes->append(wrapUnique(new SVGNumberListInterpolationType(attribute)));
         } else if (attribute == SVGNames::baseFrequencyAttr
             || attribute == SVGNames::kernelUnitLengthAttr
             || attribute == SVGNames::radiusAttr
             || attribute == SVGNames::stdDeviationAttr) {
-            applicableTypes->append(adoptPtr(new SVGNumberOptionalNumberInterpolationType(attribute)));
+            applicableTypes->append(wrapUnique(new SVGNumberOptionalNumberInterpolationType(attribute)));
         } else if (attribute == SVGNames::dAttr) {
-            applicableTypes->append(adoptPtr(new SVGPathInterpolationType(attribute)));
+            applicableTypes->append(wrapUnique(new SVGPathInterpolationType(attribute)));
         } else if (attribute == SVGNames::pointsAttr) {
-            applicableTypes->append(adoptPtr(new SVGPointListInterpolationType(attribute)));
+            applicableTypes->append(wrapUnique(new SVGPointListInterpolationType(attribute)));
         } else if (attribute == SVGNames::viewBoxAttr) {
-            applicableTypes->append(adoptPtr(new SVGRectInterpolationType(attribute)));
+            applicableTypes->append(wrapUnique(new SVGRectInterpolationType(attribute)));
         } else if (attribute == SVGNames::gradientTransformAttr
             || attribute == SVGNames::patternTransformAttr
             || attribute == SVGNames::transformAttr) {
-            applicableTypes->append(adoptPtr(new SVGTransformListInterpolationType(attribute)));
+            applicableTypes->append(wrapUnique(new SVGTransformListInterpolationType(attribute)));
         } else if (attribute == HTMLNames::classAttr
             || attribute == SVGNames::clipPathUnitsAttr
             || attribute == SVGNames::edgeModeAttr
@@ -369,7 +371,7 @@
             ASSERT_NOT_REACHED();
         }
 
-        applicableTypes->append(adoptPtr(new SVGValueInterpolationType(attribute)));
+        applicableTypes->append(wrapUnique(new SVGValueInterpolationType(attribute)));
     }
 
     auto addResult = applicableTypesMap.add(property, std::move(applicableTypes));
diff --git a/third_party/WebKit/Source/core/animation/PropertyInterpolationTypesMapping.h b/third_party/WebKit/Source/core/animation/PropertyInterpolationTypesMapping.h
index cd3d6cf2..7e2736d 100644
--- a/third_party/WebKit/Source/core/animation/PropertyInterpolationTypesMapping.h
+++ b/third_party/WebKit/Source/core/animation/PropertyInterpolationTypesMapping.h
@@ -6,13 +6,14 @@
 #define PropertyInterpolationTypesMapping_h
 
 #include "wtf/Vector.h"
+#include <memory>
 
 namespace blink {
 
 class InterpolationType;
 class PropertyHandle;
 
-using InterpolationTypes = Vector<OwnPtr<const InterpolationType>>;
+using InterpolationTypes = Vector<std::unique_ptr<const InterpolationType>>;
 
 namespace PropertyInterpolationTypesMapping {
 
diff --git a/third_party/WebKit/Source/core/animation/SVGIntegerOptionalIntegerInterpolationType.cpp b/third_party/WebKit/Source/core/animation/SVGIntegerOptionalIntegerInterpolationType.cpp
index e67c712..f48cd4d 100644
--- a/third_party/WebKit/Source/core/animation/SVGIntegerOptionalIntegerInterpolationType.cpp
+++ b/third_party/WebKit/Source/core/animation/SVGIntegerOptionalIntegerInterpolationType.cpp
@@ -6,12 +6,13 @@
 
 #include "core/animation/InterpolationEnvironment.h"
 #include "core/svg/SVGIntegerOptionalInteger.h"
+#include <memory>
 
 namespace blink {
 
 InterpolationValue SVGIntegerOptionalIntegerInterpolationType::maybeConvertNeutral(const InterpolationValue&, ConversionCheckers&) const
 {
-    OwnPtr<InterpolableList> result = InterpolableList::create(2);
+    std::unique_ptr<InterpolableList> result = InterpolableList::create(2);
     result->set(0, InterpolableNumber::create(0));
     result->set(1, InterpolableNumber::create(0));
     return InterpolationValue(std::move(result));
@@ -23,7 +24,7 @@
         return nullptr;
 
     const SVGIntegerOptionalInteger& integerOptionalInteger = toSVGIntegerOptionalInteger(svgValue);
-    OwnPtr<InterpolableList> result = InterpolableList::create(2);
+    std::unique_ptr<InterpolableList> result = InterpolableList::create(2);
     result->set(0, InterpolableNumber::create(integerOptionalInteger.firstInteger()->value()));
     result->set(1, InterpolableNumber::create(integerOptionalInteger.secondInteger()->value()));
     return InterpolationValue(std::move(result));
diff --git a/third_party/WebKit/Source/core/animation/SVGLengthInterpolationType.cpp b/third_party/WebKit/Source/core/animation/SVGLengthInterpolationType.cpp
index 275bc83..74131a55 100644
--- a/third_party/WebKit/Source/core/animation/SVGLengthInterpolationType.cpp
+++ b/third_party/WebKit/Source/core/animation/SVGLengthInterpolationType.cpp
@@ -10,6 +10,7 @@
 #include "core/svg/SVGElement.h"
 #include "core/svg/SVGLength.h"
 #include "core/svg/SVGLengthContext.h"
+#include <memory>
 
 namespace blink {
 
@@ -75,9 +76,9 @@
 
 } // namespace
 
-PassOwnPtr<InterpolableValue> SVGLengthInterpolationType::neutralInterpolableValue()
+std::unique_ptr<InterpolableValue> SVGLengthInterpolationType::neutralInterpolableValue()
 {
-    OwnPtr<InterpolableList> listOfValues = InterpolableList::create(numLengthInterpolatedUnits);
+    std::unique_ptr<InterpolableList> listOfValues = InterpolableList::create(numLengthInterpolatedUnits);
     for (size_t i = 0; i < numLengthInterpolatedUnits; ++i)
         listOfValues->set(i, InterpolableNumber::create(0));
 
@@ -92,7 +93,7 @@
     double values[numLengthInterpolatedUnits] = { };
     values[unitType] = value;
 
-    OwnPtr<InterpolableList> listOfValues = InterpolableList::create(numLengthInterpolatedUnits);
+    std::unique_ptr<InterpolableList> listOfValues = InterpolableList::create(numLengthInterpolatedUnits);
     for (size_t i = 0; i < numLengthInterpolatedUnits; ++i)
         listOfValues->set(i, InterpolableNumber::create(values[i]));
 
diff --git a/third_party/WebKit/Source/core/animation/SVGLengthInterpolationType.h b/third_party/WebKit/Source/core/animation/SVGLengthInterpolationType.h
index 2890bcad..783d150 100644
--- a/third_party/WebKit/Source/core/animation/SVGLengthInterpolationType.h
+++ b/third_party/WebKit/Source/core/animation/SVGLengthInterpolationType.h
@@ -7,6 +7,7 @@
 
 #include "core/animation/SVGInterpolationType.h"
 #include "core/svg/SVGLength.h"
+#include <memory>
 
 namespace blink {
 
@@ -21,7 +22,7 @@
         , m_negativeValuesForbidden(SVGLength::negativeValuesForbiddenForAnimatedLengthAttribute(attribute))
     { }
 
-    static PassOwnPtr<InterpolableValue> neutralInterpolableValue();
+    static std::unique_ptr<InterpolableValue> neutralInterpolableValue();
     static InterpolationValue convertSVGLength(const SVGLength&);
     static SVGLength* resolveInterpolableSVGLength(const InterpolableValue&, const SVGLengthContext&, SVGLengthMode, bool negativeValuesForbidden);
 
diff --git a/third_party/WebKit/Source/core/animation/SVGLengthListInterpolationType.cpp b/third_party/WebKit/Source/core/animation/SVGLengthListInterpolationType.cpp
index e70381b..8685a8d 100644
--- a/third_party/WebKit/Source/core/animation/SVGLengthListInterpolationType.cpp
+++ b/third_party/WebKit/Source/core/animation/SVGLengthListInterpolationType.cpp
@@ -8,6 +8,7 @@
 #include "core/animation/SVGLengthInterpolationType.h"
 #include "core/animation/UnderlyingLengthChecker.h"
 #include "core/svg/SVGLengthList.h"
+#include <memory>
 
 namespace blink {
 
@@ -19,7 +20,7 @@
     if (underlyingLength == 0)
         return nullptr;
 
-    OwnPtr<InterpolableList> result = InterpolableList::create(underlyingLength);
+    std::unique_ptr<InterpolableList> result = InterpolableList::create(underlyingLength);
     for (size_t i = 0; i < underlyingLength; i++)
         result->set(i, SVGLengthInterpolationType::neutralInterpolableValue());
     return InterpolationValue(std::move(result));
@@ -31,7 +32,7 @@
         return nullptr;
 
     const SVGLengthList& lengthList = toSVGLengthList(svgValue);
-    OwnPtr<InterpolableList> result = InterpolableList::create(lengthList.length());
+    std::unique_ptr<InterpolableList> result = InterpolableList::create(lengthList.length());
     for (size_t i = 0; i < lengthList.length(); i++) {
         InterpolationValue component = SVGLengthInterpolationType::convertSVGLength(*lengthList.at(i));
         result->set(i, std::move(component.interpolableValue));
diff --git a/third_party/WebKit/Source/core/animation/SVGNumberListInterpolationType.cpp b/third_party/WebKit/Source/core/animation/SVGNumberListInterpolationType.cpp
index 4eaa1e74..c3f26cf 100644
--- a/third_party/WebKit/Source/core/animation/SVGNumberListInterpolationType.cpp
+++ b/third_party/WebKit/Source/core/animation/SVGNumberListInterpolationType.cpp
@@ -7,6 +7,7 @@
 #include "core/animation/InterpolationEnvironment.h"
 #include "core/animation/UnderlyingLengthChecker.h"
 #include "core/svg/SVGNumberList.h"
+#include <memory>
 
 namespace blink {
 
@@ -18,7 +19,7 @@
     if (underlyingLength == 0)
         return nullptr;
 
-    OwnPtr<InterpolableList> result = InterpolableList::create(underlyingLength);
+    std::unique_ptr<InterpolableList> result = InterpolableList::create(underlyingLength);
     for (size_t i = 0; i < underlyingLength; i++)
         result->set(i, InterpolableNumber::create(0));
     return InterpolationValue(std::move(result));
@@ -30,7 +31,7 @@
         return nullptr;
 
     const SVGNumberList& numberList = toSVGNumberList(svgValue);
-    OwnPtr<InterpolableList> result = InterpolableList::create(numberList.length());
+    std::unique_ptr<InterpolableList> result = InterpolableList::create(numberList.length());
     for (size_t i = 0; i < numberList.length(); i++)
         result->set(i, InterpolableNumber::create(numberList.at(i)->value()));
     return InterpolationValue(std::move(result));
@@ -45,14 +46,14 @@
     return InterpolationType::maybeMergeSingles(std::move(start), std::move(end));
 }
 
-static void padWithZeroes(OwnPtr<InterpolableValue>& listPointer, size_t paddedLength)
+static void padWithZeroes(std::unique_ptr<InterpolableValue>& listPointer, size_t paddedLength)
 {
     InterpolableList& list = toInterpolableList(*listPointer);
 
     if (list.length() >= paddedLength)
         return;
 
-    OwnPtr<InterpolableList> result = InterpolableList::create(paddedLength);
+    std::unique_ptr<InterpolableList> result = InterpolableList::create(paddedLength);
     size_t i = 0;
     for (; i < list.length(); i++)
         result->set(i, std::move(list.getMutable(i)));
diff --git a/third_party/WebKit/Source/core/animation/SVGNumberOptionalNumberInterpolationType.cpp b/third_party/WebKit/Source/core/animation/SVGNumberOptionalNumberInterpolationType.cpp
index b4fcff91..2413ec3d 100644
--- a/third_party/WebKit/Source/core/animation/SVGNumberOptionalNumberInterpolationType.cpp
+++ b/third_party/WebKit/Source/core/animation/SVGNumberOptionalNumberInterpolationType.cpp
@@ -6,12 +6,13 @@
 
 #include "core/animation/InterpolationEnvironment.h"
 #include "core/svg/SVGNumberOptionalNumber.h"
+#include <memory>
 
 namespace blink {
 
 InterpolationValue SVGNumberOptionalNumberInterpolationType::maybeConvertNeutral(const InterpolationValue&, ConversionCheckers&) const
 {
-    OwnPtr<InterpolableList> result = InterpolableList::create(2);
+    std::unique_ptr<InterpolableList> result = InterpolableList::create(2);
     result->set(0, InterpolableNumber::create(0));
     result->set(1, InterpolableNumber::create(0));
     return InterpolationValue(std::move(result));
@@ -23,7 +24,7 @@
         return nullptr;
 
     const SVGNumberOptionalNumber& numberOptionalNumber = toSVGNumberOptionalNumber(svgValue);
-    OwnPtr<InterpolableList> result = InterpolableList::create(2);
+    std::unique_ptr<InterpolableList> result = InterpolableList::create(2);
     result->set(0, InterpolableNumber::create(numberOptionalNumber.firstNumber()->value()));
     result->set(1, InterpolableNumber::create(numberOptionalNumber.secondNumber()->value()));
     return InterpolationValue(std::move(result));
diff --git a/third_party/WebKit/Source/core/animation/SVGPathSegInterpolationFunctions.cpp b/third_party/WebKit/Source/core/animation/SVGPathSegInterpolationFunctions.cpp
index f317954..2242b51 100644
--- a/third_party/WebKit/Source/core/animation/SVGPathSegInterpolationFunctions.cpp
+++ b/third_party/WebKit/Source/core/animation/SVGPathSegInterpolationFunctions.cpp
@@ -4,10 +4,12 @@
 
 #include "core/animation/SVGPathSegInterpolationFunctions.h"
 
+#include <memory>
+
 namespace blink {
 
 
-PassOwnPtr<InterpolableNumber> consumeControlAxis(double value, bool isAbsolute, double currentValue)
+std::unique_ptr<InterpolableNumber> consumeControlAxis(double value, bool isAbsolute, double currentValue)
 {
     return InterpolableNumber::create(isAbsolute ? value : currentValue + value);
 }
@@ -18,7 +20,7 @@
     return isAbsolute ? value : value - currentValue;
 }
 
-PassOwnPtr<InterpolableNumber> consumeCoordinateAxis(double value, bool isAbsolute, double& currentValue)
+std::unique_ptr<InterpolableNumber> consumeCoordinateAxis(double value, bool isAbsolute, double& currentValue)
 {
     if (isAbsolute)
         currentValue = value;
@@ -34,7 +36,7 @@
     return isAbsolute ? currentValue : currentValue - previousValue;
 }
 
-PassOwnPtr<InterpolableValue> consumeClosePath(const PathSegmentData&, PathCoordinates& coordinates)
+std::unique_ptr<InterpolableValue> consumeClosePath(const PathSegmentData&, PathCoordinates& coordinates)
 {
     coordinates.currentX = coordinates.initialX;
     coordinates.currentY = coordinates.initialY;
@@ -51,10 +53,10 @@
     return segment;
 }
 
-PassOwnPtr<InterpolableValue> consumeSingleCoordinate(const PathSegmentData& segment, PathCoordinates& coordinates)
+std::unique_ptr<InterpolableValue> consumeSingleCoordinate(const PathSegmentData& segment, PathCoordinates& coordinates)
 {
     bool isAbsolute = isAbsolutePathSegType(segment.command);
-    OwnPtr<InterpolableList> result = InterpolableList::create(2);
+    std::unique_ptr<InterpolableList> result = InterpolableList::create(2);
     result->set(0, consumeCoordinateAxis(segment.x(), isAbsolute, coordinates.currentX));
     result->set(1, consumeCoordinateAxis(segment.y(), isAbsolute, coordinates.currentY));
 
@@ -85,10 +87,10 @@
     return segment;
 }
 
-PassOwnPtr<InterpolableValue> consumeCurvetoCubic(const PathSegmentData& segment, PathCoordinates& coordinates)
+std::unique_ptr<InterpolableValue> consumeCurvetoCubic(const PathSegmentData& segment, PathCoordinates& coordinates)
 {
     bool isAbsolute = isAbsolutePathSegType(segment.command);
-    OwnPtr<InterpolableList> result = InterpolableList::create(6);
+    std::unique_ptr<InterpolableList> result = InterpolableList::create(6);
     result->set(0, consumeControlAxis(segment.x1(), isAbsolute, coordinates.currentX));
     result->set(1, consumeControlAxis(segment.y1(), isAbsolute, coordinates.currentY));
     result->set(2, consumeControlAxis(segment.x2(), isAbsolute, coordinates.currentX));
@@ -113,10 +115,10 @@
     return segment;
 }
 
-PassOwnPtr<InterpolableValue> consumeCurvetoQuadratic(const PathSegmentData& segment, PathCoordinates& coordinates)
+std::unique_ptr<InterpolableValue> consumeCurvetoQuadratic(const PathSegmentData& segment, PathCoordinates& coordinates)
 {
     bool isAbsolute = isAbsolutePathSegType(segment.command);
-    OwnPtr<InterpolableList> result = InterpolableList::create(4);
+    std::unique_ptr<InterpolableList> result = InterpolableList::create(4);
     result->set(0, consumeControlAxis(segment.x1(), isAbsolute, coordinates.currentX));
     result->set(1, consumeControlAxis(segment.y1(), isAbsolute, coordinates.currentY));
     result->set(2, consumeCoordinateAxis(segment.x(), isAbsolute, coordinates.currentX));
@@ -137,10 +139,10 @@
     return segment;
 }
 
-PassOwnPtr<InterpolableValue> consumeArc(const PathSegmentData& segment, PathCoordinates& coordinates)
+std::unique_ptr<InterpolableValue> consumeArc(const PathSegmentData& segment, PathCoordinates& coordinates)
 {
     bool isAbsolute = isAbsolutePathSegType(segment.command);
-    OwnPtr<InterpolableList> result = InterpolableList::create(7);
+    std::unique_ptr<InterpolableList> result = InterpolableList::create(7);
     result->set(0, consumeCoordinateAxis(segment.x(), isAbsolute, coordinates.currentX));
     result->set(1, consumeCoordinateAxis(segment.y(), isAbsolute, coordinates.currentY));
     result->set(2, InterpolableNumber::create(segment.r1()));
@@ -167,7 +169,7 @@
     return segment;
 }
 
-PassOwnPtr<InterpolableValue> consumeLinetoHorizontal(const PathSegmentData& segment, PathCoordinates& coordinates)
+std::unique_ptr<InterpolableValue> consumeLinetoHorizontal(const PathSegmentData& segment, PathCoordinates& coordinates)
 {
     bool isAbsolute = isAbsolutePathSegType(segment.command);
     return consumeCoordinateAxis(segment.x(), isAbsolute, coordinates.currentX);
@@ -182,7 +184,7 @@
     return segment;
 }
 
-PassOwnPtr<InterpolableValue> consumeLinetoVertical(const PathSegmentData& segment, PathCoordinates& coordinates)
+std::unique_ptr<InterpolableValue> consumeLinetoVertical(const PathSegmentData& segment, PathCoordinates& coordinates)
 {
     bool isAbsolute = isAbsolutePathSegType(segment.command);
     return consumeCoordinateAxis(segment.y(), isAbsolute, coordinates.currentY);
@@ -197,10 +199,10 @@
     return segment;
 }
 
-PassOwnPtr<InterpolableValue> consumeCurvetoCubicSmooth(const PathSegmentData& segment, PathCoordinates& coordinates)
+std::unique_ptr<InterpolableValue> consumeCurvetoCubicSmooth(const PathSegmentData& segment, PathCoordinates& coordinates)
 {
     bool isAbsolute = isAbsolutePathSegType(segment.command);
-    OwnPtr<InterpolableList> result = InterpolableList::create(4);
+    std::unique_ptr<InterpolableList> result = InterpolableList::create(4);
     result->set(0, consumeControlAxis(segment.x2(), isAbsolute, coordinates.currentX));
     result->set(1, consumeControlAxis(segment.y2(), isAbsolute, coordinates.currentY));
     result->set(2, consumeCoordinateAxis(segment.x(), isAbsolute, coordinates.currentX));
@@ -221,7 +223,7 @@
     return segment;
 }
 
-PassOwnPtr<InterpolableValue> SVGPathSegInterpolationFunctions::consumePathSeg(const PathSegmentData& segment, PathCoordinates& coordinates)
+std::unique_ptr<InterpolableValue> SVGPathSegInterpolationFunctions::consumePathSeg(const PathSegmentData& segment, PathCoordinates& coordinates)
 {
     switch (segment.command) {
     case PathSegClosePath:
diff --git a/third_party/WebKit/Source/core/animation/SVGPathSegInterpolationFunctions.h b/third_party/WebKit/Source/core/animation/SVGPathSegInterpolationFunctions.h
index bc6f0de..776ccbe6 100644
--- a/third_party/WebKit/Source/core/animation/SVGPathSegInterpolationFunctions.h
+++ b/third_party/WebKit/Source/core/animation/SVGPathSegInterpolationFunctions.h
@@ -7,6 +7,7 @@
 
 #include "core/animation/InterpolableValue.h"
 #include "core/svg/SVGPathData.h"
+#include <memory>
 
 namespace blink {
 
@@ -20,7 +21,7 @@
 class SVGPathSegInterpolationFunctions {
     STATIC_ONLY(SVGPathSegInterpolationFunctions);
 public:
-    static PassOwnPtr<InterpolableValue> consumePathSeg(const PathSegmentData&, PathCoordinates& currentCoordinates);
+    static std::unique_ptr<InterpolableValue> consumePathSeg(const PathSegmentData&, PathCoordinates& currentCoordinates);
     static PathSegmentData consumeInterpolablePathSeg(const InterpolableValue&, SVGPathSegType, PathCoordinates& currentCoordinates);
 };
 
diff --git a/third_party/WebKit/Source/core/animation/SVGPointListInterpolationType.cpp b/third_party/WebKit/Source/core/animation/SVGPointListInterpolationType.cpp
index 534cd47..13934d0 100644
--- a/third_party/WebKit/Source/core/animation/SVGPointListInterpolationType.cpp
+++ b/third_party/WebKit/Source/core/animation/SVGPointListInterpolationType.cpp
@@ -8,6 +8,7 @@
 #include "core/animation/StringKeyframe.h"
 #include "core/animation/UnderlyingLengthChecker.h"
 #include "core/svg/SVGPointList.h"
+#include <memory>
 
 namespace blink {
 
@@ -19,7 +20,7 @@
     if (underlyingLength == 0)
         return nullptr;
 
-    OwnPtr<InterpolableList> result = InterpolableList::create(underlyingLength);
+    std::unique_ptr<InterpolableList> result = InterpolableList::create(underlyingLength);
     for (size_t i = 0; i < underlyingLength; i++)
         result->set(i, InterpolableNumber::create(0));
     return InterpolationValue(std::move(result));
@@ -31,7 +32,7 @@
         return nullptr;
 
     const SVGPointList& pointList = toSVGPointList(svgValue);
-    OwnPtr<InterpolableList> result = InterpolableList::create(pointList.length() * 2);
+    std::unique_ptr<InterpolableList> result = InterpolableList::create(pointList.length() * 2);
     for (size_t i = 0; i < pointList.length(); i++) {
         const SVGPoint& point = *pointList.at(i);
         result->set(2 * i, InterpolableNumber::create(point.x()));
diff --git a/third_party/WebKit/Source/core/animation/SVGRectInterpolationType.cpp b/third_party/WebKit/Source/core/animation/SVGRectInterpolationType.cpp
index 76ae445..9eca8ae 100644
--- a/third_party/WebKit/Source/core/animation/SVGRectInterpolationType.cpp
+++ b/third_party/WebKit/Source/core/animation/SVGRectInterpolationType.cpp
@@ -7,6 +7,7 @@
 #include "core/animation/StringKeyframe.h"
 #include "core/svg/SVGRect.h"
 #include "wtf/StdLibExtras.h"
+#include <memory>
 
 namespace blink {
 
@@ -20,7 +21,7 @@
 
 InterpolationValue SVGRectInterpolationType::maybeConvertNeutral(const InterpolationValue&, ConversionCheckers&) const
 {
-    OwnPtr<InterpolableList> result = InterpolableList::create(RectComponentIndexCount);
+    std::unique_ptr<InterpolableList> result = InterpolableList::create(RectComponentIndexCount);
     for (size_t i = 0; i < RectComponentIndexCount; i++)
         result->set(i, InterpolableNumber::create(0));
     return InterpolationValue(std::move(result));
@@ -32,7 +33,7 @@
         return nullptr;
 
     const SVGRect& rect = toSVGRect(svgValue);
-    OwnPtr<InterpolableList> result = InterpolableList::create(RectComponentIndexCount);
+    std::unique_ptr<InterpolableList> result = InterpolableList::create(RectComponentIndexCount);
     result->set(RectX, InterpolableNumber::create(rect.x()));
     result->set(RectY, InterpolableNumber::create(rect.y()));
     result->set(RectWidth, InterpolableNumber::create(rect.width()));
diff --git a/third_party/WebKit/Source/core/animation/SVGTransformListInterpolationType.cpp b/third_party/WebKit/Source/core/animation/SVGTransformListInterpolationType.cpp
index fd392aa..e0ce0ed54 100644
--- a/third_party/WebKit/Source/core/animation/SVGTransformListInterpolationType.cpp
+++ b/third_party/WebKit/Source/core/animation/SVGTransformListInterpolationType.cpp
@@ -10,6 +10,8 @@
 #include "core/animation/StringKeyframe.h"
 #include "core/svg/SVGTransform.h"
 #include "core/svg/SVGTransformList.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
@@ -40,10 +42,10 @@
 
 namespace {
 
-PassOwnPtr<InterpolableValue> translateToInterpolableValue(SVGTransform* transform)
+std::unique_ptr<InterpolableValue> translateToInterpolableValue(SVGTransform* transform)
 {
     FloatPoint translate = transform->translate();
-    OwnPtr<InterpolableList> result = InterpolableList::create(2);
+    std::unique_ptr<InterpolableList> result = InterpolableList::create(2);
     result->set(0, InterpolableNumber::create(translate.x()));
     result->set(1, InterpolableNumber::create(translate.y()));
     return std::move(result);
@@ -60,10 +62,10 @@
     return transform;
 }
 
-PassOwnPtr<InterpolableValue> scaleToInterpolableValue(SVGTransform* transform)
+std::unique_ptr<InterpolableValue> scaleToInterpolableValue(SVGTransform* transform)
 {
     FloatSize scale = transform->scale();
-    OwnPtr<InterpolableList> result = InterpolableList::create(2);
+    std::unique_ptr<InterpolableList> result = InterpolableList::create(2);
     result->set(0, InterpolableNumber::create(scale.width()));
     result->set(1, InterpolableNumber::create(scale.height()));
     return std::move(result);
@@ -80,10 +82,10 @@
     return transform;
 }
 
-PassOwnPtr<InterpolableValue> rotateToInterpolableValue(SVGTransform* transform)
+std::unique_ptr<InterpolableValue> rotateToInterpolableValue(SVGTransform* transform)
 {
     FloatPoint rotationCenter = transform->rotationCenter();
-    OwnPtr<InterpolableList> result = InterpolableList::create(3);
+    std::unique_ptr<InterpolableList> result = InterpolableList::create(3);
     result->set(0, InterpolableNumber::create(transform->angle()));
     result->set(1, InterpolableNumber::create(rotationCenter.x()));
     result->set(2, InterpolableNumber::create(rotationCenter.y()));
@@ -102,7 +104,7 @@
     return transform;
 }
 
-PassOwnPtr<InterpolableValue> skewXToInterpolableValue(SVGTransform* transform)
+std::unique_ptr<InterpolableValue> skewXToInterpolableValue(SVGTransform* transform)
 {
     return InterpolableNumber::create(transform->angle());
 }
@@ -114,7 +116,7 @@
     return transform;
 }
 
-PassOwnPtr<InterpolableValue> skewYToInterpolableValue(SVGTransform* transform)
+std::unique_ptr<InterpolableValue> skewYToInterpolableValue(SVGTransform* transform)
 {
     return InterpolableNumber::create(transform->angle());
 }
@@ -126,7 +128,7 @@
     return transform;
 }
 
-PassOwnPtr<InterpolableValue> toInterpolableValue(SVGTransform* transform, SVGTransformType transformType)
+std::unique_ptr<InterpolableValue> toInterpolableValue(SVGTransform* transform, SVGTransformType transformType)
 {
     switch (transformType) {
     case SVG_TRANSFORM_TRANSLATE:
@@ -182,9 +184,9 @@
 
 class SVGTransformListChecker : public InterpolationType::ConversionChecker {
 public:
-    static PassOwnPtr<SVGTransformListChecker> create(const InterpolationValue& underlying)
+    static std::unique_ptr<SVGTransformListChecker> create(const InterpolationValue& underlying)
     {
-        return adoptPtr(new SVGTransformListChecker(underlying));
+        return wrapUnique(new SVGTransformListChecker(underlying));
     }
 
     bool isValid(const InterpolationEnvironment&, const InterpolationValue& underlying) const final
@@ -214,7 +216,7 @@
         return nullptr;
 
     const SVGTransformList& svgList = toSVGTransformList(svgValue);
-    OwnPtr<InterpolableList> result = InterpolableList::create(svgList.length());
+    std::unique_ptr<InterpolableList> result = InterpolableList::create(svgList.length());
 
     Vector<SVGTransformType> transformTypes;
     for (size_t i = 0; i < svgList.length(); i++) {
@@ -233,7 +235,7 @@
 InterpolationValue SVGTransformListInterpolationType::maybeConvertSingle(const PropertySpecificKeyframe& keyframe, const InterpolationEnvironment& environment, const InterpolationValue& underlying, ConversionCheckers& conversionCheckers) const
 {
     Vector<SVGTransformType> types;
-    Vector<OwnPtr<InterpolableValue>> interpolableParts;
+    Vector<std::unique_ptr<InterpolableValue>> interpolableParts;
 
     if (keyframe.composite() == EffectModel::CompositeAdd) {
         if (underlying) {
@@ -254,7 +256,7 @@
         interpolableParts.append(std::move(value.interpolableValue));
     }
 
-    OwnPtr<InterpolableList> interpolableList = InterpolableList::create(types.size());
+    std::unique_ptr<InterpolableList> interpolableList = InterpolableList::create(types.size());
     size_t interpolableListIndex = 0;
     for (auto& part : interpolableParts) {
         InterpolableList& list = toInterpolableList(*part);
diff --git a/third_party/WebKit/Source/core/animation/ShadowInterpolationFunctions.cpp b/third_party/WebKit/Source/core/animation/ShadowInterpolationFunctions.cpp
index 697f1bda..cf7c772 100644
--- a/third_party/WebKit/Source/core/animation/ShadowInterpolationFunctions.cpp
+++ b/third_party/WebKit/Source/core/animation/ShadowInterpolationFunctions.cpp
@@ -12,6 +12,7 @@
 #include "core/css/resolver/StyleResolverState.h"
 #include "core/style/ShadowData.h"
 #include "platform/geometry/FloatPoint.h"
+#include <memory>
 
 namespace blink {
 
@@ -62,7 +63,7 @@
 
 InterpolationValue ShadowInterpolationFunctions::convertShadowData(const ShadowData& shadowData, double zoom)
 {
-    OwnPtr<InterpolableList> interpolableList = InterpolableList::create(ShadowComponentIndexCount);
+    std::unique_ptr<InterpolableList> interpolableList = InterpolableList::create(ShadowComponentIndexCount);
     interpolableList->set(ShadowX, CSSLengthInterpolationType::createInterpolablePixels(shadowData.x() / zoom));
     interpolableList->set(ShadowY, CSSLengthInterpolationType::createInterpolablePixels(shadowData.y() / zoom));
     interpolableList->set(ShadowBlur, CSSLengthInterpolationType::createInterpolablePixels(shadowData.blur() / zoom));
@@ -85,7 +86,7 @@
             return nullptr;
     }
 
-    OwnPtr<InterpolableList> interpolableList = InterpolableList::create(ShadowComponentIndexCount);
+    std::unique_ptr<InterpolableList> interpolableList = InterpolableList::create(ShadowComponentIndexCount);
     static_assert(ShadowX == 0, "Enum ordering check.");
     static_assert(ShadowY == 1, "Enum ordering check.");
     static_assert(ShadowBlur == 2, "Enum ordering check.");
@@ -109,7 +110,7 @@
     }
 
     if (shadow.color) {
-        OwnPtr<InterpolableValue> interpolableColor = CSSColorInterpolationType::maybeCreateInterpolableColor(*shadow.color);
+        std::unique_ptr<InterpolableValue> interpolableColor = CSSColorInterpolationType::maybeCreateInterpolableColor(*shadow.color);
         if (!interpolableColor)
             return nullptr;
         interpolableList->set(ShadowColor, std::move(interpolableColor));
@@ -120,12 +121,12 @@
     return InterpolationValue(std::move(interpolableList), ShadowNonInterpolableValue::create(style));
 }
 
-PassOwnPtr<InterpolableValue> ShadowInterpolationFunctions::createNeutralInterpolableValue()
+std::unique_ptr<InterpolableValue> ShadowInterpolationFunctions::createNeutralInterpolableValue()
 {
     return convertShadowData(ShadowData(FloatPoint(0, 0), 0, 0, Normal, StyleColor(Color::transparent)), 1).interpolableValue;
 }
 
-void ShadowInterpolationFunctions::composite(OwnPtr<InterpolableValue>& underlyingInterpolableValue, RefPtr<NonInterpolableValue>& underlyingNonInterpolableValue, double underlyingFraction, const InterpolableValue& interpolableValue, const NonInterpolableValue* nonInterpolableValue)
+void ShadowInterpolationFunctions::composite(std::unique_ptr<InterpolableValue>& underlyingInterpolableValue, RefPtr<NonInterpolableValue>& underlyingNonInterpolableValue, double underlyingFraction, const InterpolableValue& interpolableValue, const NonInterpolableValue* nonInterpolableValue)
 {
     ASSERT(nonInterpolableValuesAreCompatible(underlyingNonInterpolableValue.get(), nonInterpolableValue));
     InterpolableList& underlyingInterpolableList = toInterpolableList(*underlyingInterpolableValue);
diff --git a/third_party/WebKit/Source/core/animation/ShadowInterpolationFunctions.h b/third_party/WebKit/Source/core/animation/ShadowInterpolationFunctions.h
index 584aa2a0..56e72167 100644
--- a/third_party/WebKit/Source/core/animation/ShadowInterpolationFunctions.h
+++ b/third_party/WebKit/Source/core/animation/ShadowInterpolationFunctions.h
@@ -7,6 +7,7 @@
 
 #include "core/animation/InterpolationValue.h"
 #include "core/animation/PairwiseInterpolationValue.h"
+#include <memory>
 
 namespace blink {
 
@@ -18,10 +19,10 @@
 public:
     static InterpolationValue convertShadowData(const ShadowData&, double zoom);
     static InterpolationValue maybeConvertCSSValue(const CSSValue&);
-    static PassOwnPtr<InterpolableValue> createNeutralInterpolableValue();
+    static std::unique_ptr<InterpolableValue> createNeutralInterpolableValue();
     static bool nonInterpolableValuesAreCompatible(const NonInterpolableValue*, const NonInterpolableValue*);
     static PairwiseInterpolationValue maybeMergeSingles(InterpolationValue&& start, InterpolationValue&& end);
-    static void composite(OwnPtr<InterpolableValue>&, RefPtr<NonInterpolableValue>&, double underlyingFraction, const InterpolableValue&, const NonInterpolableValue*);
+    static void composite(std::unique_ptr<InterpolableValue>&, RefPtr<NonInterpolableValue>&, double underlyingFraction, const InterpolableValue&, const NonInterpolableValue*);
     static ShadowData createShadowData(const InterpolableValue&, const NonInterpolableValue*, const StyleResolverState&);
 };
 
diff --git a/third_party/WebKit/Source/core/animation/StyleInterpolation.h b/third_party/WebKit/Source/core/animation/StyleInterpolation.h
index 74b67746..3317039 100644
--- a/third_party/WebKit/Source/core/animation/StyleInterpolation.h
+++ b/third_party/WebKit/Source/core/animation/StyleInterpolation.h
@@ -9,6 +9,7 @@
 #include "core/CoreExport.h"
 #include "core/animation/Interpolation.h"
 #include "core/animation/PropertyHandle.h"
+#include <memory>
 
 namespace blink {
 
@@ -47,7 +48,7 @@
 protected:
     CSSPropertyID m_id;
 
-    StyleInterpolation(PassOwnPtr<InterpolableValue> start, PassOwnPtr<InterpolableValue> end, CSSPropertyID id)
+    StyleInterpolation(std::unique_ptr<InterpolableValue> start, std::unique_ptr<InterpolableValue> end, CSSPropertyID id)
         : Interpolation(std::move(start), std::move(end))
         , m_id(id)
     {
diff --git a/third_party/WebKit/Source/core/animation/TypedInterpolationValue.h b/third_party/WebKit/Source/core/animation/TypedInterpolationValue.h
index 993ddf9d..28dd675a 100644
--- a/third_party/WebKit/Source/core/animation/TypedInterpolationValue.h
+++ b/third_party/WebKit/Source/core/animation/TypedInterpolationValue.h
@@ -6,6 +6,8 @@
 #define TypedInterpolationValue_h
 
 #include "core/animation/InterpolationValue.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
@@ -14,12 +16,12 @@
 // Represents an interpolated value between an adjacent pair of PropertySpecificKeyframes.
 class TypedInterpolationValue {
 public:
-    static PassOwnPtr<TypedInterpolationValue> create(const InterpolationType& type, PassOwnPtr<InterpolableValue> interpolableValue, PassRefPtr<NonInterpolableValue> nonInterpolableValue = nullptr)
+    static std::unique_ptr<TypedInterpolationValue> create(const InterpolationType& type, std::unique_ptr<InterpolableValue> interpolableValue, PassRefPtr<NonInterpolableValue> nonInterpolableValue = nullptr)
     {
-        return adoptPtr(new TypedInterpolationValue(type, std::move(interpolableValue), nonInterpolableValue));
+        return wrapUnique(new TypedInterpolationValue(type, std::move(interpolableValue), nonInterpolableValue));
     }
 
-    PassOwnPtr<TypedInterpolationValue> clone() const
+    std::unique_ptr<TypedInterpolationValue> clone() const
     {
         InterpolationValue copy = m_value.clone();
         return create(m_type, std::move(copy.interpolableValue), copy.nonInterpolableValue.release());
@@ -33,7 +35,7 @@
     InterpolationValue& mutableValue() { return m_value; }
 
 private:
-    TypedInterpolationValue(const InterpolationType& type, PassOwnPtr<InterpolableValue> interpolableValue, PassRefPtr<NonInterpolableValue> nonInterpolableValue)
+    TypedInterpolationValue(const InterpolationType& type, std::unique_ptr<InterpolableValue> interpolableValue, PassRefPtr<NonInterpolableValue> nonInterpolableValue)
         : m_type(type)
         , m_value(std::move(interpolableValue), nonInterpolableValue)
     {
diff --git a/third_party/WebKit/Source/core/animation/UnderlyingLengthChecker.h b/third_party/WebKit/Source/core/animation/UnderlyingLengthChecker.h
index 78ef68b..12870d52 100644
--- a/third_party/WebKit/Source/core/animation/UnderlyingLengthChecker.h
+++ b/third_party/WebKit/Source/core/animation/UnderlyingLengthChecker.h
@@ -7,14 +7,16 @@
 
 #include "core/animation/InterpolableValue.h"
 #include "core/animation/InterpolationType.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
 class UnderlyingLengthChecker : public InterpolationType::ConversionChecker {
 public:
-    static PassOwnPtr<UnderlyingLengthChecker> create(size_t underlyingLength)
+    static std::unique_ptr<UnderlyingLengthChecker> create(size_t underlyingLength)
     {
-        return adoptPtr(new UnderlyingLengthChecker(underlyingLength));
+        return wrapUnique(new UnderlyingLengthChecker(underlyingLength));
     }
 
     static size_t getUnderlyingLength(const InterpolationValue& underlying)
diff --git a/third_party/WebKit/Source/core/animation/UnderlyingValueOwner.cpp b/third_party/WebKit/Source/core/animation/UnderlyingValueOwner.cpp
index 68a7a91..f109581 100644
--- a/third_party/WebKit/Source/core/animation/UnderlyingValueOwner.cpp
+++ b/third_party/WebKit/Source/core/animation/UnderlyingValueOwner.cpp
@@ -4,6 +4,8 @@
 
 #include "core/animation/UnderlyingValueOwner.h"
 
+#include <memory>
+
 namespace blink {
 
 struct NullValueWrapper {
@@ -42,7 +44,7 @@
     m_value = &m_valueOwner;
 }
 
-void UnderlyingValueOwner::set(PassOwnPtr<TypedInterpolationValue> value)
+void UnderlyingValueOwner::set(std::unique_ptr<TypedInterpolationValue> value)
 {
     if (value)
         set(value->type(), std::move(value->mutableValue()));
diff --git a/third_party/WebKit/Source/core/animation/UnderlyingValueOwner.h b/third_party/WebKit/Source/core/animation/UnderlyingValueOwner.h
index 5644eb8a..ddd115e 100644
--- a/third_party/WebKit/Source/core/animation/UnderlyingValueOwner.h
+++ b/third_party/WebKit/Source/core/animation/UnderlyingValueOwner.h
@@ -8,12 +8,13 @@
 #include "core/animation/TypedInterpolationValue.h"
 #include "wtf/Allocator.h"
 #include "wtf/Noncopyable.h"
+#include <memory>
 
 namespace blink {
 
 // Handles memory management of underlying InterpolationValues in applyStack()
 // Ensures we perform copy on write if we are not the owner of an underlying InterpolationValue.
-// This functions similar to a DataRef except on OwnPtr'd objects.
+// This functions similar to a DataRef except on std::unique_ptr'd objects.
 class UnderlyingValueOwner {
     WTF_MAKE_NONCOPYABLE(UnderlyingValueOwner);
     STACK_ALLOCATED();
@@ -42,7 +43,7 @@
     void set(std::nullptr_t);
     void set(const InterpolationType&, const InterpolationValue&);
     void set(const InterpolationType&, InterpolationValue&&);
-    void set(PassOwnPtr<TypedInterpolationValue>);
+    void set(std::unique_ptr<TypedInterpolationValue>);
     void set(const TypedInterpolationValue*);
 
     InterpolationValue& mutableValue();
diff --git a/third_party/WebKit/Source/core/animation/animatable/AnimatablePath.cpp b/third_party/WebKit/Source/core/animation/animatable/AnimatablePath.cpp
index deb2889..872acf3 100644
--- a/third_party/WebKit/Source/core/animation/animatable/AnimatablePath.cpp
+++ b/third_party/WebKit/Source/core/animation/animatable/AnimatablePath.cpp
@@ -8,6 +8,7 @@
 #include "core/svg/SVGPathBlender.h"
 #include "core/svg/SVGPathByteStreamBuilder.h"
 #include "core/svg/SVGPathByteStreamSource.h"
+#include <memory>
 
 namespace blink {
 
@@ -43,7 +44,7 @@
     if (usesDefaultInterpolationWith(value))
         return defaultInterpolateTo(this, value, fraction);
 
-    OwnPtr<SVGPathByteStream> byteStream = SVGPathByteStream::create();
+    std::unique_ptr<SVGPathByteStream> byteStream = SVGPathByteStream::create();
     SVGPathByteStreamBuilder builder(*byteStream);
 
     SVGPathByteStreamSource fromSource(path()->byteStream());
diff --git a/third_party/WebKit/Source/core/animation/css/CSSAnimationData.h b/third_party/WebKit/Source/core/animation/css/CSSAnimationData.h
index c1dceb5..9396d38 100644
--- a/third_party/WebKit/Source/core/animation/css/CSSAnimationData.h
+++ b/third_party/WebKit/Source/core/animation/css/CSSAnimationData.h
@@ -8,19 +8,21 @@
 #include "core/animation/Timing.h"
 #include "core/animation/css/CSSTimingData.h"
 #include "core/style/ComputedStyleConstants.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
 class CSSAnimationData final : public CSSTimingData {
 public:
-    static PassOwnPtr<CSSAnimationData> create()
+    static std::unique_ptr<CSSAnimationData> create()
     {
-        return adoptPtr(new CSSAnimationData);
+        return wrapUnique(new CSSAnimationData);
     }
 
-    static PassOwnPtr<CSSAnimationData> create(const CSSAnimationData& animationData)
+    static std::unique_ptr<CSSAnimationData> create(const CSSAnimationData& animationData)
     {
-        return adoptPtr(new CSSAnimationData(animationData));
+        return wrapUnique(new CSSAnimationData(animationData));
     }
 
     bool animationsMatchForStyleRecalc(const CSSAnimationData& other) const;
diff --git a/third_party/WebKit/Source/core/animation/css/CSSTransitionData.h b/third_party/WebKit/Source/core/animation/css/CSSTransitionData.h
index 0e00f35..261eb7a 100644
--- a/third_party/WebKit/Source/core/animation/css/CSSTransitionData.h
+++ b/third_party/WebKit/Source/core/animation/css/CSSTransitionData.h
@@ -7,7 +7,9 @@
 
 #include "core/CSSPropertyNames.h"
 #include "core/animation/css/CSSTimingData.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/Vector.h"
+#include <memory>
 
 namespace blink {
 
@@ -50,14 +52,14 @@
         String propertyString;
     };
 
-    static PassOwnPtr<CSSTransitionData> create()
+    static std::unique_ptr<CSSTransitionData> create()
     {
-        return adoptPtr(new CSSTransitionData);
+        return wrapUnique(new CSSTransitionData);
     }
 
-    static PassOwnPtr<CSSTransitionData> create(const CSSTransitionData& transitionData)
+    static std::unique_ptr<CSSTransitionData> create(const CSSTransitionData& transitionData)
     {
-        return adoptPtr(new CSSTransitionData(transitionData));
+        return wrapUnique(new CSSTransitionData(transitionData));
     }
 
     bool transitionsMatchForStyleRecalc(const CSSTransitionData& other) const;
diff --git a/third_party/WebKit/Source/core/clipboard/DataTransfer.cpp b/third_party/WebKit/Source/core/clipboard/DataTransfer.cpp
index c31ff3a..4beaad3 100644
--- a/third_party/WebKit/Source/core/clipboard/DataTransfer.cpp
+++ b/third_party/WebKit/Source/core/clipboard/DataTransfer.cpp
@@ -43,6 +43,7 @@
 #include "platform/MIMETypeRegistry.h"
 #include "platform/clipboard/ClipboardMimeTypes.h"
 #include "platform/clipboard/ClipboardUtilities.h"
+#include <memory>
 
 namespace blink {
 
@@ -243,7 +244,7 @@
     setDragImage(0, node, loc);
 }
 
-PassOwnPtr<DragImage> DataTransfer::createDragImage(IntPoint& loc, LocalFrame* frame) const
+std::unique_ptr<DragImage> DataTransfer::createDragImage(IntPoint& loc, LocalFrame* frame) const
 {
     if (m_dragImageElement) {
         loc = m_dragLoc;
diff --git a/third_party/WebKit/Source/core/clipboard/DataTransfer.h b/third_party/WebKit/Source/core/clipboard/DataTransfer.h
index 99e53aa..cf06853 100644
--- a/third_party/WebKit/Source/core/clipboard/DataTransfer.h
+++ b/third_party/WebKit/Source/core/clipboard/DataTransfer.h
@@ -32,6 +32,7 @@
 #include "platform/geometry/IntPoint.h"
 #include "platform/heap/Handle.h"
 #include "wtf/Forward.h"
+#include <memory>
 
 namespace blink {
 
@@ -83,7 +84,7 @@
     void setDragImageResource(ImageResource*, const IntPoint&);
     void setDragImageElement(Node*, const IntPoint&);
 
-    PassOwnPtr<DragImage> createDragImage(IntPoint& dragLocation, LocalFrame*) const;
+    std::unique_ptr<DragImage> createDragImage(IntPoint& dragLocation, LocalFrame*) const;
     void declareAndWriteDragImage(Element*, const KURL&, const String& title);
     void writeURL(Node*, const KURL&, const String&);
     void writeSelection(const FrameSelection&);
diff --git a/third_party/WebKit/Source/core/css/AffectedByFocusTest.cpp b/third_party/WebKit/Source/core/css/AffectedByFocusTest.cpp
index 635465b74..ed3fa292 100644
--- a/third_party/WebKit/Source/core/css/AffectedByFocusTest.cpp
+++ b/third_party/WebKit/Source/core/css/AffectedByFocusTest.cpp
@@ -12,6 +12,7 @@
 #include "core/html/HTMLElement.h"
 #include "core/testing/DummyPageHolder.h"
 #include "testing/gtest/include/gtest/gtest.h"
+#include <memory>
 
 namespace blink {
 
@@ -34,7 +35,7 @@
     void checkElements(ElementResult expected[], unsigned expectedCount) const;
 
 private:
-    OwnPtr<DummyPageHolder> m_dummyPageHolder;
+    std::unique_ptr<DummyPageHolder> m_dummyPageHolder;
 
     Persistent<HTMLDocument> m_document;
 };
diff --git a/third_party/WebKit/Source/core/css/BinaryDataFontFaceSource.h b/third_party/WebKit/Source/core/css/BinaryDataFontFaceSource.h
index 2bc8565..e2e064a 100644
--- a/third_party/WebKit/Source/core/css/BinaryDataFontFaceSource.h
+++ b/third_party/WebKit/Source/core/css/BinaryDataFontFaceSource.h
@@ -6,7 +6,7 @@
 #define BinaryDataFontFaceSource_h
 
 #include "core/css/CSSFontFaceSource.h"
-#include "wtf/OwnPtr.h"
+#include <memory>
 
 namespace blink {
 
@@ -22,7 +22,7 @@
 private:
     PassRefPtr<SimpleFontData> createFontData(const FontDescription&) override;
 
-    OwnPtr<FontCustomPlatformData> m_customPlatformData;
+    std::unique_ptr<FontCustomPlatformData> m_customPlatformData;
 };
 
 } // namespace blink
diff --git a/third_party/WebKit/Source/core/css/CSSCalculationValue.cpp b/third_party/WebKit/Source/core/css/CSSCalculationValue.cpp
index b1de7219..ffbff60 100644
--- a/third_party/WebKit/Source/core/css/CSSCalculationValue.cpp
+++ b/third_party/WebKit/Source/core/css/CSSCalculationValue.cpp
@@ -33,7 +33,6 @@
 #include "core/css/CSSPrimitiveValueMappings.h"
 #include "core/css/resolver/StyleResolver.h"
 #include "wtf/MathExtras.h"
-#include "wtf/OwnPtr.h"
 #include "wtf/text/StringBuilder.h"
 
 static const int maxExpressionDepth = 100;
diff --git a/third_party/WebKit/Source/core/css/CSSFontFaceSourceTest.cpp b/third_party/WebKit/Source/core/css/CSSFontFaceSourceTest.cpp
index d5e045aa..4a66ede 100644
--- a/third_party/WebKit/Source/core/css/CSSFontFaceSourceTest.cpp
+++ b/third_party/WebKit/Source/core/css/CSSFontFaceSourceTest.cpp
@@ -8,6 +8,7 @@
 #include "platform/fonts/FontDescription.h"
 #include "platform/fonts/FontPlatformData.h"
 #include "platform/fonts/SimpleFontData.h"
+#include "platform/graphics/skia/SkiaUtils.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
 namespace blink {
@@ -16,7 +17,7 @@
 public:
     PassRefPtr<SimpleFontData> createFontData(const FontDescription&) override
     {
-        return SimpleFontData::create(FontPlatformData(adoptRef(SkTypeface::RefDefault()), "", 0, false, false));
+        return SimpleFontData::create(FontPlatformData(fromSkSp(SkTypeface::MakeDefault()), "", 0, false, false));
     }
 
     DummyFontFaceSource() { }
diff --git a/third_party/WebKit/Source/core/css/CSSKeyframesRule.cpp b/third_party/WebKit/Source/core/css/CSSKeyframesRule.cpp
index f8105054..de4d0c27 100644
--- a/third_party/WebKit/Source/core/css/CSSKeyframesRule.cpp
+++ b/third_party/WebKit/Source/core/css/CSSKeyframesRule.cpp
@@ -31,6 +31,7 @@
 #include "core/css/parser/CSSParser.h"
 #include "core/frame/UseCounter.h"
 #include "wtf/text/StringBuilder.h"
+#include <memory>
 
 namespace blink {
 
@@ -74,7 +75,7 @@
 
 int StyleRuleKeyframes::findKeyframeIndex(const String& key) const
 {
-    OwnPtr<Vector<double>> keys = CSSParser::parseKeyframeKeyList(key);
+    std::unique_ptr<Vector<double>> keys = CSSParser::parseKeyframeKeyList(key);
     if (!keys)
         return -1;
     for (size_t i = m_keyframes.size(); i--; ) {
diff --git a/third_party/WebKit/Source/core/css/CSSMatrix.h b/third_party/WebKit/Source/core/css/CSSMatrix.h
index 7adb5835..f43eb5c2 100644
--- a/third_party/WebKit/Source/core/css/CSSMatrix.h
+++ b/third_party/WebKit/Source/core/css/CSSMatrix.h
@@ -29,6 +29,7 @@
 #include "bindings/core/v8/ScriptWrappable.h"
 #include "platform/transforms/TransformationMatrix.h"
 #include "wtf/text/WTFString.h"
+#include <memory>
 
 namespace blink {
 
@@ -152,10 +153,10 @@
     CSSMatrix(const String&, ExceptionState&);
 
     // TransformationMatrix needs to be 16-byte aligned. PartitionAlloc
-    // supports 16-byte alignment but Oilpan doesn't. So we use an OwnPtr
+    // supports 16-byte alignment but Oilpan doesn't. So we use an std::unique_ptr
     // to allocate TransformationMatrix on PartitionAlloc.
     // TODO(oilpan): Oilpan should support 16-byte aligned allocations.
-    OwnPtr<TransformationMatrix> m_matrix;
+    std::unique_ptr<TransformationMatrix> m_matrix;
 };
 
 } // namespace blink
diff --git a/third_party/WebKit/Source/core/css/CSSPathValue.cpp b/third_party/WebKit/Source/core/css/CSSPathValue.cpp
index ff88f62..2cb4e3a 100644
--- a/third_party/WebKit/Source/core/css/CSSPathValue.cpp
+++ b/third_party/WebKit/Source/core/css/CSSPathValue.cpp
@@ -6,6 +6,7 @@
 
 #include "core/style/StylePath.h"
 #include "core/svg/SVGPathUtilities.h"
+#include <memory>
 
 namespace blink {
 
@@ -14,7 +15,7 @@
     return new CSSPathValue(stylePath);
 }
 
-CSSPathValue* CSSPathValue::create(PassOwnPtr<SVGPathByteStream> pathByteStream)
+CSSPathValue* CSSPathValue::create(std::unique_ptr<SVGPathByteStream> pathByteStream)
 {
     return CSSPathValue::create(StylePath::create(std::move(pathByteStream)));
 }
@@ -30,7 +31,7 @@
 
 CSSPathValue* createPathValue()
 {
-    OwnPtr<SVGPathByteStream> pathByteStream = SVGPathByteStream::create();
+    std::unique_ptr<SVGPathByteStream> pathByteStream = SVGPathByteStream::create();
     // Need to be registered as LSan ignored, as it will be reachable and
     // separately referred to by emptyPathValue() callers.
     LEAK_SANITIZER_IGNORE_OBJECT(pathByteStream.get());
diff --git a/third_party/WebKit/Source/core/css/CSSPathValue.h b/third_party/WebKit/Source/core/css/CSSPathValue.h
index 99e3e799..0d9a1f06 100644
--- a/third_party/WebKit/Source/core/css/CSSPathValue.h
+++ b/third_party/WebKit/Source/core/css/CSSPathValue.h
@@ -10,6 +10,7 @@
 #include "core/svg/SVGPathByteStream.h"
 #include "wtf/PassRefPtr.h"
 #include "wtf/RefPtr.h"
+#include <memory>
 
 namespace blink {
 
@@ -18,7 +19,7 @@
 class CSSPathValue : public CSSValue {
 public:
     static CSSPathValue* create(PassRefPtr<StylePath>);
-    static CSSPathValue* create(PassOwnPtr<SVGPathByteStream>);
+    static CSSPathValue* create(std::unique_ptr<SVGPathByteStream>);
 
     static CSSPathValue& emptyPathValue();
 
diff --git a/third_party/WebKit/Source/core/css/CSSSelector.cpp b/third_party/WebKit/Source/core/css/CSSSelector.cpp
index 9662a27..3a40cb6d 100644
--- a/third_party/WebKit/Source/core/css/CSSSelector.cpp
+++ b/third_party/WebKit/Source/core/css/CSSSelector.cpp
@@ -34,6 +34,7 @@
 #include "wtf/StdLibExtras.h"
 #include "wtf/text/StringBuilder.h"
 #include <algorithm>
+#include <memory>
 
 #ifndef NDEBUG
 #include <stdio.h>
@@ -766,7 +767,7 @@
     m_data.m_rareData->m_argument = value;
 }
 
-void CSSSelector::setSelectorList(PassOwnPtr<CSSSelectorList> selectorList)
+void CSSSelector::setSelectorList(std::unique_ptr<CSSSelectorList> selectorList)
 {
     createRareData();
     m_data.m_rareData->m_selectorList = std::move(selectorList);
diff --git a/third_party/WebKit/Source/core/css/CSSSelector.h b/third_party/WebKit/Source/core/css/CSSSelector.h
index 65dab52..766005b 100644
--- a/third_party/WebKit/Source/core/css/CSSSelector.h
+++ b/third_party/WebKit/Source/core/css/CSSSelector.h
@@ -25,9 +25,8 @@
 #include "core/CoreExport.h"
 #include "core/dom/QualifiedName.h"
 #include "core/style/ComputedStyleConstants.h"
-#include "wtf/OwnPtr.h"
-#include "wtf/PassOwnPtr.h"
 #include "wtf/RefCounted.h"
+#include <memory>
 
 namespace blink {
 class CSSSelectorList;
@@ -252,7 +251,7 @@
     void setValue(const AtomicString&, bool matchLowerCase);
     void setAttribute(const QualifiedName&, AttributeMatchType);
     void setArgument(const AtomicString&);
-    void setSelectorList(PassOwnPtr<CSSSelectorList>);
+    void setSelectorList(std::unique_ptr<CSSSelectorList>);
 
     void setNth(int a, int b);
     bool matchNth(int count) const;
@@ -338,7 +337,7 @@
         } m_bits;
         QualifiedName m_attribute; // used for attribute selector
         AtomicString m_argument; // Used for :contains, :lang, :nth-*
-        OwnPtr<CSSSelectorList> m_selectorList; // Used for :-webkit-any and :not
+        std::unique_ptr<CSSSelectorList> m_selectorList; // Used for :-webkit-any and :not
 
     private:
         RareData(const AtomicString& value);
diff --git a/third_party/WebKit/Source/core/css/CSSSelectorList.cpp b/third_party/WebKit/Source/core/css/CSSSelectorList.cpp
index 541104d..01544222 100644
--- a/third_party/WebKit/Source/core/css/CSSSelectorList.cpp
+++ b/third_party/WebKit/Source/core/css/CSSSelectorList.cpp
@@ -29,6 +29,7 @@
 #include "core/css/parser/CSSParserSelector.h"
 #include "wtf/allocator/Partitions.h"
 #include "wtf/text/StringBuilder.h"
+#include <memory>
 
 namespace {
     // CSSSelector is one of the top types that consume renderer memory,
@@ -52,7 +53,7 @@
     return list;
 }
 
-CSSSelectorList CSSSelectorList::adoptSelectorVector(Vector<OwnPtr<CSSParserSelector>>& selectorVector)
+CSSSelectorList CSSSelectorList::adoptSelectorVector(Vector<std::unique_ptr<CSSParserSelector>>& selectorVector)
 {
     size_t flattenedSize = 0;
     for (size_t i = 0; i < selectorVector.size(); ++i) {
@@ -68,7 +69,7 @@
         CSSParserSelector* current = selectorVector[i].get();
         while (current) {
             // Move item from the parser selector vector into m_selectorArray without invoking destructor (Ugh.)
-            CSSSelector* currentSelector = current->releaseSelector().leakPtr();
+            CSSSelector* currentSelector = current->releaseSelector().release();
             memcpy(&list.m_selectorArray[arrayIndex], currentSelector, sizeof(CSSSelector));
             WTF::Partitions::fastFree(currentSelector);
 
diff --git a/third_party/WebKit/Source/core/css/CSSSelectorList.h b/third_party/WebKit/Source/core/css/CSSSelectorList.h
index c0edf57f..534ef70 100644
--- a/third_party/WebKit/Source/core/css/CSSSelectorList.h
+++ b/third_party/WebKit/Source/core/css/CSSSelectorList.h
@@ -28,6 +28,7 @@
 
 #include "core/CoreExport.h"
 #include "core/css/CSSSelector.h"
+#include <memory>
 
 namespace blink {
 
@@ -57,7 +58,7 @@
         deleteSelectorsIfNeeded();
     }
 
-    static CSSSelectorList adoptSelectorVector(Vector<OwnPtr<CSSParserSelector>>& selectorVector);
+    static CSSSelectorList adoptSelectorVector(Vector<std::unique_ptr<CSSParserSelector>>& selectorVector);
     CSSSelectorList copy() const;
 
     bool isValid() const { return !!m_selectorArray; }
diff --git a/third_party/WebKit/Source/core/css/CSSStyleSheetResourceTest.cpp b/third_party/WebKit/Source/core/css/CSSStyleSheetResourceTest.cpp
index d78d6625..0cb68c1 100644
--- a/third_party/WebKit/Source/core/css/CSSStyleSheetResourceTest.cpp
+++ b/third_party/WebKit/Source/core/css/CSSStyleSheetResourceTest.cpp
@@ -31,8 +31,10 @@
 #include "public/platform/Platform.h"
 #include "public/platform/WebURLResponse.h"
 #include "testing/gtest/include/gtest/gtest.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/RefPtr.h"
 #include "wtf/text/WTFString.h"
+#include <memory>
 
 namespace blink {
 
@@ -57,7 +59,7 @@
     Document* document() { return &m_page->document(); }
 
     Persistent<MemoryCache> m_originalMemoryCache;
-    OwnPtr<DummyPageHolder> m_page;
+    std::unique_ptr<DummyPageHolder> m_page;
 };
 
 TEST_F(CSSStyleSheetResourceTest, PruneCanCauseEviction)
@@ -83,8 +85,8 @@
             CSSImageValue::create(String("image"), imageURL),
             CSSImageValue::create(String("image"), imageURL),
             CSSPrimitiveValue::create(1.0, CSSPrimitiveValue::UnitType::Number));
-        Vector<OwnPtr<CSSParserSelector>> selectors;
-        selectors.append(adoptPtr(new CSSParserSelector()));
+        Vector<std::unique_ptr<CSSParserSelector>> selectors;
+        selectors.append(wrapUnique(new CSSParserSelector()));
         selectors[0]->setMatch(CSSSelector::Id);
         selectors[0]->setValue("foo");
         CSSProperty property(CSSPropertyBackground, *crossfade);
diff --git a/third_party/WebKit/Source/core/css/DragUpdateTest.cpp b/third_party/WebKit/Source/core/css/DragUpdateTest.cpp
index 0e53520..14bced50 100644
--- a/third_party/WebKit/Source/core/css/DragUpdateTest.cpp
+++ b/third_party/WebKit/Source/core/css/DragUpdateTest.cpp
@@ -10,6 +10,7 @@
 #include "core/layout/LayoutObject.h"
 #include "core/testing/DummyPageHolder.h"
 #include "testing/gtest/include/gtest/gtest.h"
+#include <memory>
 
 namespace blink {
 
@@ -18,7 +19,7 @@
     // Check that when dragging the div in the document below, you only get a
     // single element style recalc.
 
-    OwnPtr<DummyPageHolder> dummyPageHolder = DummyPageHolder::create(IntSize(800, 600));
+    std::unique_ptr<DummyPageHolder> dummyPageHolder = DummyPageHolder::create(IntSize(800, 600));
     HTMLDocument& document = toHTMLDocument(dummyPageHolder->document());
     document.documentElement()->setInnerHTML("<style>div {width:100px;height:100px} div:-webkit-drag { background-color: green }</style>"
         "<div>"
@@ -44,7 +45,7 @@
     // Check that when dragging the div in the document below, you get a
     // single element style recalc.
 
-    OwnPtr<DummyPageHolder> dummyPageHolder = DummyPageHolder::create(IntSize(800, 600));
+    std::unique_ptr<DummyPageHolder> dummyPageHolder = DummyPageHolder::create(IntSize(800, 600));
     HTMLDocument& document = toHTMLDocument(dummyPageHolder->document());
     document.documentElement()->setInnerHTML("<style>div {width:100px;height:100px} div:-webkit-drag .drag { background-color: green }</style>"
         "<div>"
@@ -70,7 +71,7 @@
     // Check that when dragging the div in the document below, you get a
     // single element style recalc.
 
-    OwnPtr<DummyPageHolder> dummyPageHolder = DummyPageHolder::create(IntSize(800, 600));
+    std::unique_ptr<DummyPageHolder> dummyPageHolder = DummyPageHolder::create(IntSize(800, 600));
     HTMLDocument& document = toHTMLDocument(dummyPageHolder->document());
     document.documentElement()->setInnerHTML("<style>div {width:100px;height:100px} div:-webkit-drag + .drag { background-color: green }</style>"
         "<div>"
diff --git a/third_party/WebKit/Source/core/css/MediaList.cpp b/third_party/WebKit/Source/core/css/MediaList.cpp
index 7892ee2..cfa531b 100644
--- a/third_party/WebKit/Source/core/css/MediaList.cpp
+++ b/third_party/WebKit/Source/core/css/MediaList.cpp
@@ -25,6 +25,7 @@
 #include "core/css/MediaQueryExp.h"
 #include "core/css/parser/MediaQueryParser.h"
 #include "wtf/text/StringBuilder.h"
+#include <memory>
 
 namespace blink {
 
@@ -159,7 +160,7 @@
 
 DEFINE_TRACE(MediaQuerySet)
 {
-    // We don't support tracing of vectors of OwnPtrs (ie. OwnPtr<Vector<OwnPtr<MediaQuery>>>).
+    // We don't support tracing of vectors of OwnPtrs (ie. std::unique_ptr<Vector<std::unique_ptr<MediaQuery>>>).
     // Since this is a transitional object we are just ifdef'ing it out when oilpan is not enabled.
     visitor->trace(m_queries);
 }
diff --git a/third_party/WebKit/Source/core/css/MediaQuery.cpp b/third_party/WebKit/Source/core/css/MediaQuery.cpp
index f440b1c..6ba95d1 100644
--- a/third_party/WebKit/Source/core/css/MediaQuery.cpp
+++ b/third_party/WebKit/Source/core/css/MediaQuery.cpp
@@ -33,6 +33,7 @@
 #include "core/html/parser/HTMLParserIdioms.h"
 #include "wtf/NonCopyingSort.h"
 #include "wtf/text/StringBuilder.h"
+#include <memory>
 
 namespace blink {
 
@@ -134,7 +135,7 @@
 
 DEFINE_TRACE(MediaQuery)
 {
-    // We don't support tracing of vectors of OwnPtrs (ie. OwnPtr<Vector<OwnPtr<MediaQuery>>>).
+    // We don't support tracing of vectors of OwnPtrs (ie. std::unique_ptr<Vector<std::unique_ptr<MediaQuery>>>).
     // Since this is a transitional object we are just ifdef'ing it out when oilpan is not enabled.
     visitor->trace(m_expressions);
 }
diff --git a/third_party/WebKit/Source/core/css/MediaQuery.h b/third_party/WebKit/Source/core/css/MediaQuery.h
index 18719e7..c2202388 100644
--- a/third_party/WebKit/Source/core/css/MediaQuery.h
+++ b/third_party/WebKit/Source/core/css/MediaQuery.h
@@ -31,7 +31,6 @@
 
 #include "core/CoreExport.h"
 #include "platform/heap/Handle.h"
-#include "wtf/PassOwnPtr.h"
 #include "wtf/Vector.h"
 #include "wtf/text/StringHash.h"
 #include "wtf/text/WTFString.h"
diff --git a/third_party/WebKit/Source/core/css/MediaQueryEvaluatorTest.cpp b/third_party/WebKit/Source/core/css/MediaQueryEvaluatorTest.cpp
index 2c8b1b2..16382b1 100644
--- a/third_party/WebKit/Source/core/css/MediaQueryEvaluatorTest.cpp
+++ b/third_party/WebKit/Source/core/css/MediaQueryEvaluatorTest.cpp
@@ -10,8 +10,8 @@
 #include "core/frame/FrameView.h"
 #include "core/testing/DummyPageHolder.h"
 #include "testing/gtest/include/gtest/gtest.h"
-#include "wtf/PassOwnPtr.h"
 #include "wtf/text/StringBuilder.h"
+#include <memory>
 
 namespace blink {
 
@@ -174,7 +174,7 @@
 
 TEST(MediaQueryEvaluatorTest, Dynamic)
 {
-    OwnPtr<DummyPageHolder> pageHolder = DummyPageHolder::create(IntSize(500, 500));
+    std::unique_ptr<DummyPageHolder> pageHolder = DummyPageHolder::create(IntSize(500, 500));
     pageHolder->frameView().setMediaType(MediaTypeNames::screen);
 
     MediaQueryEvaluator mediaQueryEvaluator(&pageHolder->frame());
@@ -185,7 +185,7 @@
 
 TEST(MediaQueryEvaluatorTest, DynamicNoView)
 {
-    OwnPtr<DummyPageHolder> pageHolder = DummyPageHolder::create(IntSize(500, 500));
+    std::unique_ptr<DummyPageHolder> pageHolder = DummyPageHolder::create(IntSize(500, 500));
     LocalFrame* frame = &pageHolder->frame();
     pageHolder.reset();
     ASSERT_EQ(nullptr, frame->view());
diff --git a/third_party/WebKit/Source/core/css/MediaQueryExp.h b/third_party/WebKit/Source/core/css/MediaQueryExp.h
index 266a3eb..91b0fd3 100644
--- a/third_party/WebKit/Source/core/css/MediaQueryExp.h
+++ b/third_party/WebKit/Source/core/css/MediaQueryExp.h
@@ -35,7 +35,6 @@
 #include "core/css/CSSPrimitiveValue.h"
 #include "core/css/CSSValue.h"
 #include "wtf/Allocator.h"
-#include "wtf/PassOwnPtr.h"
 #include "wtf/RefPtr.h"
 
 namespace blink {
diff --git a/third_party/WebKit/Source/core/css/MediaQueryMatcherTest.cpp b/third_party/WebKit/Source/core/css/MediaQueryMatcherTest.cpp
index b201c81..14f8b1f 100644
--- a/third_party/WebKit/Source/core/css/MediaQueryMatcherTest.cpp
+++ b/third_party/WebKit/Source/core/css/MediaQueryMatcherTest.cpp
@@ -8,12 +8,13 @@
 #include "core/css/MediaList.h"
 #include "core/testing/DummyPageHolder.h"
 #include "testing/gtest/include/gtest/gtest.h"
+#include <memory>
 
 namespace blink {
 
 TEST(MediaQueryMatcherTest, LostFrame)
 {
-    OwnPtr<DummyPageHolder> pageHolder = DummyPageHolder::create(IntSize(500, 500));
+    std::unique_ptr<DummyPageHolder> pageHolder = DummyPageHolder::create(IntSize(500, 500));
     MediaQueryMatcher* matcher = MediaQueryMatcher::create(pageHolder->document());
     MediaQuerySet* querySet = MediaQuerySet::create(MediaTypeNames::all);
     ASSERT_TRUE(matcher->evaluate(querySet));
diff --git a/third_party/WebKit/Source/core/css/MediaQuerySetTest.cpp b/third_party/WebKit/Source/core/css/MediaQuerySetTest.cpp
index 5ac3543..76dd83b 100644
--- a/third_party/WebKit/Source/core/css/MediaQuerySetTest.cpp
+++ b/third_party/WebKit/Source/core/css/MediaQuerySetTest.cpp
@@ -6,7 +6,6 @@
 
 #include "core/css/MediaList.h"
 #include "testing/gtest/include/gtest/gtest.h"
-#include "wtf/PassOwnPtr.h"
 #include "wtf/text/StringBuilder.h"
 
 namespace blink {
diff --git a/third_party/WebKit/Source/core/css/PropertySetCSSStyleDeclaration.h b/third_party/WebKit/Source/core/css/PropertySetCSSStyleDeclaration.h
index 14c2f4f..7016c24 100644
--- a/third_party/WebKit/Source/core/css/PropertySetCSSStyleDeclaration.h
+++ b/third_party/WebKit/Source/core/css/PropertySetCSSStyleDeclaration.h
@@ -28,7 +28,6 @@
 
 #include "core/css/CSSStyleDeclaration.h"
 #include "wtf/HashMap.h"
-#include "wtf/OwnPtr.h"
 
 namespace blink {
 
diff --git a/third_party/WebKit/Source/core/css/SelectorFilter.cpp b/third_party/WebKit/Source/core/css/SelectorFilter.cpp
index 73107df..deb464e4 100644
--- a/third_party/WebKit/Source/core/css/SelectorFilter.cpp
+++ b/third_party/WebKit/Source/core/css/SelectorFilter.cpp
@@ -30,6 +30,7 @@
 
 #include "core/css/CSSSelector.h"
 #include "core/dom/Document.h"
+#include "wtf/PtrUtil.h"
 
 namespace blink {
 
@@ -86,7 +87,7 @@
     if (m_parentStack.isEmpty()) {
         ASSERT(parent == parent.document().documentElement());
         ASSERT(!m_ancestorIdentifierFilter);
-        m_ancestorIdentifierFilter = adoptPtr(new IdentifierFilter);
+        m_ancestorIdentifierFilter = wrapUnique(new IdentifierFilter);
         pushParentStackFrame(parent);
         return;
     }
diff --git a/third_party/WebKit/Source/core/css/SelectorFilter.h b/third_party/WebKit/Source/core/css/SelectorFilter.h
index 91adbfd..6119434b 100644
--- a/third_party/WebKit/Source/core/css/SelectorFilter.h
+++ b/third_party/WebKit/Source/core/css/SelectorFilter.h
@@ -32,6 +32,7 @@
 #include "core/dom/Element.h"
 #include "wtf/BloomFilter.h"
 #include "wtf/Vector.h"
+#include <memory>
 
 namespace blink {
 
@@ -74,7 +75,7 @@
 
     // With 100 unique strings in the filter, 2^12 slot table has false positive rate of ~0.2%.
     using IdentifierFilter = BloomFilter<12>;
-    OwnPtr<IdentifierFilter> m_ancestorIdentifierFilter;
+    std::unique_ptr<IdentifierFilter> m_ancestorIdentifierFilter;
 };
 
 template <unsigned maximumIdentifierCount>
diff --git a/third_party/WebKit/Source/core/css/StyleRuleKeyframe.cpp b/third_party/WebKit/Source/core/css/StyleRuleKeyframe.cpp
index db237ad..77423a3ad 100644
--- a/third_party/WebKit/Source/core/css/StyleRuleKeyframe.cpp
+++ b/third_party/WebKit/Source/core/css/StyleRuleKeyframe.cpp
@@ -7,10 +7,11 @@
 #include "core/css/StylePropertySet.h"
 #include "core/css/parser/CSSParser.h"
 #include "wtf/text/StringBuilder.h"
+#include <memory>
 
 namespace blink {
 
-StyleRuleKeyframe::StyleRuleKeyframe(PassOwnPtr<Vector<double>> keys, StylePropertySet* properties)
+StyleRuleKeyframe::StyleRuleKeyframe(std::unique_ptr<Vector<double>> keys, StylePropertySet* properties)
 : StyleRuleBase(Keyframe)
 , m_properties(properties)
 , m_keys(*keys)
@@ -36,7 +37,7 @@
 {
     ASSERT(!keyText.isNull());
 
-    OwnPtr<Vector<double>> keys = CSSParser::parseKeyframeKeyList(keyText);
+    std::unique_ptr<Vector<double>> keys = CSSParser::parseKeyframeKeyList(keyText);
     if (!keys || keys->isEmpty())
         return false;
 
diff --git a/third_party/WebKit/Source/core/css/StyleRuleKeyframe.h b/third_party/WebKit/Source/core/css/StyleRuleKeyframe.h
index 8d5c3cb..34cb9ac 100644
--- a/third_party/WebKit/Source/core/css/StyleRuleKeyframe.h
+++ b/third_party/WebKit/Source/core/css/StyleRuleKeyframe.h
@@ -6,6 +6,7 @@
 #define StyleRuleKeyframe_h
 
 #include "core/css/StyleRule.h"
+#include <memory>
 
 namespace blink {
 
@@ -14,7 +15,7 @@
 
 class StyleRuleKeyframe final : public StyleRuleBase {
 public:
-    static StyleRuleKeyframe* create(PassOwnPtr<Vector<double>> keys, StylePropertySet* properties)
+    static StyleRuleKeyframe* create(std::unique_ptr<Vector<double>> keys, StylePropertySet* properties)
     {
         return new StyleRuleKeyframe(std::move(keys), properties);
     }
@@ -34,7 +35,7 @@
     DECLARE_TRACE_AFTER_DISPATCH();
 
 private:
-    StyleRuleKeyframe(PassOwnPtr<Vector<double>>, StylePropertySet*);
+    StyleRuleKeyframe(std::unique_ptr<Vector<double>>, StylePropertySet*);
 
     Member<StylePropertySet> m_properties;
     Vector<double> m_keys;
diff --git a/third_party/WebKit/Source/core/css/cssom/CSSMatrixTransformComponent.cpp b/third_party/WebKit/Source/core/css/cssom/CSSMatrixTransformComponent.cpp
index 4de332a5..ac63595 100644
--- a/third_party/WebKit/Source/core/css/cssom/CSSMatrixTransformComponent.cpp
+++ b/third_party/WebKit/Source/core/css/cssom/CSSMatrixTransformComponent.cpp
@@ -7,6 +7,7 @@
 #include "core/css/CSSPrimitiveValue.h"
 #include "wtf/MathExtras.h"
 #include <cmath>
+#include <memory>
 
 namespace blink {
 
@@ -32,7 +33,7 @@
 
 CSSMatrixTransformComponent* CSSMatrixTransformComponent::perspective(double length)
 {
-    OwnPtr<TransformationMatrix> matrix = TransformationMatrix::create();
+    std::unique_ptr<TransformationMatrix> matrix = TransformationMatrix::create();
     if (length != 0)
         matrix->setM34(-1 / length);
     return new CSSMatrixTransformComponent(std::move(matrix), PerspectiveType);
@@ -40,21 +41,21 @@
 
 CSSMatrixTransformComponent* CSSMatrixTransformComponent::rotate(double angle)
 {
-    OwnPtr<TransformationMatrix> matrix = TransformationMatrix::create();
+    std::unique_ptr<TransformationMatrix> matrix = TransformationMatrix::create();
     matrix->rotate(angle);
     return new CSSMatrixTransformComponent(std::move(matrix), RotationType);
 }
 
 CSSMatrixTransformComponent* CSSMatrixTransformComponent::rotate3d(double angle, double x, double y, double z)
 {
-    OwnPtr<TransformationMatrix> matrix = TransformationMatrix::create();
+    std::unique_ptr<TransformationMatrix> matrix = TransformationMatrix::create();
     matrix->rotate3d(x, y, z, angle);
     return new CSSMatrixTransformComponent(std::move(matrix), Rotation3DType);
 }
 
 CSSMatrixTransformComponent* CSSMatrixTransformComponent::scale(double x, double y)
 {
-    OwnPtr<TransformationMatrix> matrix = TransformationMatrix::create();
+    std::unique_ptr<TransformationMatrix> matrix = TransformationMatrix::create();
     matrix->setM11(x);
     matrix->setM22(y);
     return new CSSMatrixTransformComponent(std::move(matrix), ScaleType);
@@ -62,7 +63,7 @@
 
 CSSMatrixTransformComponent* CSSMatrixTransformComponent::scale3d(double x, double y, double z)
 {
-    OwnPtr<TransformationMatrix> matrix = TransformationMatrix::create();
+    std::unique_ptr<TransformationMatrix> matrix = TransformationMatrix::create();
     matrix->setM11(x);
     matrix->setM22(y);
     matrix->setM33(z);
@@ -74,7 +75,7 @@
     double tanAx = std::tan(deg2rad(ax));
     double tanAy = std::tan(deg2rad(ay));
 
-    OwnPtr<TransformationMatrix> matrix = TransformationMatrix::create();
+    std::unique_ptr<TransformationMatrix> matrix = TransformationMatrix::create();
     matrix->setM12(tanAy);
     matrix->setM21(tanAx);
     return new CSSMatrixTransformComponent(std::move(matrix), SkewType);
@@ -82,7 +83,7 @@
 
 CSSMatrixTransformComponent* CSSMatrixTransformComponent::translate(double x, double y)
 {
-    OwnPtr<TransformationMatrix> matrix = TransformationMatrix::create();
+    std::unique_ptr<TransformationMatrix> matrix = TransformationMatrix::create();
     matrix->setM41(x);
     matrix->setM42(y);
     return new CSSMatrixTransformComponent(std::move(matrix), TranslationType);
@@ -90,7 +91,7 @@
 
 CSSMatrixTransformComponent* CSSMatrixTransformComponent::translate3d(double x, double y, double z)
 {
-    OwnPtr<TransformationMatrix> matrix = TransformationMatrix::create();
+    std::unique_ptr<TransformationMatrix> matrix = TransformationMatrix::create();
     matrix->setM41(x);
     matrix->setM42(y);
     matrix->setM43(z);
diff --git a/third_party/WebKit/Source/core/css/cssom/CSSMatrixTransformComponent.h b/third_party/WebKit/Source/core/css/cssom/CSSMatrixTransformComponent.h
index fcc05ab..d0c5e80 100644
--- a/third_party/WebKit/Source/core/css/cssom/CSSMatrixTransformComponent.h
+++ b/third_party/WebKit/Source/core/css/cssom/CSSMatrixTransformComponent.h
@@ -7,6 +7,7 @@
 
 #include "core/css/cssom/TransformComponent.h"
 #include "platform/transforms/TransformationMatrix.h"
+#include <memory>
 
 namespace blink {
 
@@ -91,17 +92,17 @@
         , m_is2D(false)
     { }
 
-    CSSMatrixTransformComponent(PassOwnPtr<const TransformationMatrix> matrix, TransformComponentType fromType)
+    CSSMatrixTransformComponent(std::unique_ptr<const TransformationMatrix> matrix, TransformComponentType fromType)
         : TransformComponent()
         , m_matrix(std::move(matrix))
         , m_is2D(is2DComponentType(fromType))
     { }
 
     // TransformationMatrix needs to be 16-byte aligned. PartitionAlloc
-    // supports 16-byte alignment but Oilpan doesn't. So we use an OwnPtr
+    // supports 16-byte alignment but Oilpan doesn't. So we use an std::unique_ptr
     // to allocate TransformationMatrix on PartitionAlloc.
     // TODO(oilpan): Oilpan should support 16-byte aligned allocations.
-    OwnPtr<const TransformationMatrix> m_matrix;
+    std::unique_ptr<const TransformationMatrix> m_matrix;
     bool m_is2D;
 };
 
diff --git a/third_party/WebKit/Source/core/css/cssom/FilteredComputedStylePropertyMapTest.cpp b/third_party/WebKit/Source/core/css/cssom/FilteredComputedStylePropertyMapTest.cpp
index 042b125..a6d9269 100644
--- a/third_party/WebKit/Source/core/css/cssom/FilteredComputedStylePropertyMapTest.cpp
+++ b/third_party/WebKit/Source/core/css/cssom/FilteredComputedStylePropertyMapTest.cpp
@@ -9,6 +9,7 @@
 #include "core/testing/DummyPageHolder.h"
 #include "platform/heap/Handle.h"
 #include "testing/gtest/include/gtest/gtest.h"
+#include <memory>
 
 namespace blink {
 
@@ -23,7 +24,7 @@
     CSSComputedStyleDeclaration* declaration() const { return m_declaration.get(); }
 
 private:
-    OwnPtr<DummyPageHolder> m_page;
+    std::unique_ptr<DummyPageHolder> m_page;
     Persistent<CSSComputedStyleDeclaration> m_declaration;
 };
 
diff --git a/third_party/WebKit/Source/core/css/invalidation/InvalidationSet.cpp b/third_party/WebKit/Source/core/css/invalidation/InvalidationSet.cpp
index 925ad85..a035222 100644
--- a/third_party/WebKit/Source/core/css/invalidation/InvalidationSet.cpp
+++ b/third_party/WebKit/Source/core/css/invalidation/InvalidationSet.cpp
@@ -35,7 +35,9 @@
 #include "core/inspector/InspectorTraceEvents.h"
 #include "platform/TracedValue.h"
 #include "wtf/Compiler.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/text/StringBuilder.h"
+#include <memory>
 
 namespace blink {
 
@@ -168,28 +170,28 @@
 HashSet<AtomicString>& InvalidationSet::ensureClassSet()
 {
     if (!m_classes)
-        m_classes = adoptPtr(new HashSet<AtomicString>);
+        m_classes = wrapUnique(new HashSet<AtomicString>);
     return *m_classes;
 }
 
 HashSet<AtomicString>& InvalidationSet::ensureIdSet()
 {
     if (!m_ids)
-        m_ids = adoptPtr(new HashSet<AtomicString>);
+        m_ids = wrapUnique(new HashSet<AtomicString>);
     return *m_ids;
 }
 
 HashSet<AtomicString>& InvalidationSet::ensureTagNameSet()
 {
     if (!m_tagNames)
-        m_tagNames = adoptPtr(new HashSet<AtomicString>);
+        m_tagNames = wrapUnique(new HashSet<AtomicString>);
     return *m_tagNames;
 }
 
 HashSet<AtomicString>& InvalidationSet::ensureAttributeSet()
 {
     if (!m_attributes)
-        m_attributes = adoptPtr(new HashSet<AtomicString>);
+        m_attributes = wrapUnique(new HashSet<AtomicString>);
     return *m_attributes;
 }
 
@@ -288,7 +290,7 @@
 #ifndef NDEBUG
 void InvalidationSet::show() const
 {
-    OwnPtr<TracedValue> value = TracedValue::create();
+    std::unique_ptr<TracedValue> value = TracedValue::create();
     value->beginArray("InvalidationSet");
     toTracedValue(value.get());
     value->endArray();
diff --git a/third_party/WebKit/Source/core/css/invalidation/InvalidationSet.h b/third_party/WebKit/Source/core/css/invalidation/InvalidationSet.h
index 35f8a42..61932a2 100644
--- a/third_party/WebKit/Source/core/css/invalidation/InvalidationSet.h
+++ b/third_party/WebKit/Source/core/css/invalidation/InvalidationSet.h
@@ -40,6 +40,7 @@
 #include "wtf/RefPtr.h"
 #include "wtf/text/AtomicStringHash.h"
 #include "wtf/text/StringHash.h"
+#include <memory>
 
 namespace blink {
 
@@ -146,10 +147,10 @@
     HashSet<AtomicString>& ensureAttributeSet();
 
     // FIXME: optimize this if it becomes a memory issue.
-    OwnPtr<HashSet<AtomicString>> m_classes;
-    OwnPtr<HashSet<AtomicString>> m_ids;
-    OwnPtr<HashSet<AtomicString>> m_tagNames;
-    OwnPtr<HashSet<AtomicString>> m_attributes;
+    std::unique_ptr<HashSet<AtomicString>> m_classes;
+    std::unique_ptr<HashSet<AtomicString>> m_ids;
+    std::unique_ptr<HashSet<AtomicString>> m_tagNames;
+    std::unique_ptr<HashSet<AtomicString>> m_attributes;
 
     unsigned m_type : 1;
 
diff --git a/third_party/WebKit/Source/core/css/invalidation/StyleInvalidator.cpp b/third_party/WebKit/Source/core/css/invalidation/StyleInvalidator.cpp
index a6a9e97..b5d291e 100644
--- a/third_party/WebKit/Source/core/css/invalidation/StyleInvalidator.cpp
+++ b/third_party/WebKit/Source/core/css/invalidation/StyleInvalidator.cpp
@@ -14,6 +14,7 @@
 #include "core/html/HTMLSlotElement.h"
 #include "core/inspector/InspectorTraceEvents.h"
 #include "core/layout/LayoutObject.h"
+#include "wtf/PtrUtil.h"
 
 namespace blink {
 
@@ -100,7 +101,7 @@
 {
     PendingInvalidationMap::AddResult addResult = m_pendingInvalidationMap.add(&element, nullptr);
     if (addResult.isNewEntry)
-        addResult.storedValue->value = adoptPtr(new PendingInvalidations());
+        addResult.storedValue->value = wrapUnique(new PendingInvalidations());
     return *addResult.storedValue->value;
 }
 
diff --git a/third_party/WebKit/Source/core/css/invalidation/StyleInvalidator.h b/third_party/WebKit/Source/core/css/invalidation/StyleInvalidator.h
index 1123158..4ce06cb 100644
--- a/third_party/WebKit/Source/core/css/invalidation/StyleInvalidator.h
+++ b/third_party/WebKit/Source/core/css/invalidation/StyleInvalidator.h
@@ -8,6 +8,7 @@
 #include "core/css/invalidation/PendingInvalidations.h"
 #include "platform/heap/Handle.h"
 #include "wtf/Noncopyable.h"
+#include <memory>
 
 namespace blink {
 
@@ -128,7 +129,7 @@
         RecursionData* m_data;
     };
 
-    using PendingInvalidationMap = HeapHashMap<Member<Element>, OwnPtr<PendingInvalidations>>;
+    using PendingInvalidationMap = HeapHashMap<Member<Element>, std::unique_ptr<PendingInvalidations>>;
 
     PendingInvalidations& ensurePendingInvalidations(Element&);
 
diff --git a/third_party/WebKit/Source/core/css/parser/CSSParser.cpp b/third_party/WebKit/Source/core/css/parser/CSSParser.cpp
index a8061e5..fd94660 100644
--- a/third_party/WebKit/Source/core/css/parser/CSSParser.cpp
+++ b/third_party/WebKit/Source/core/css/parser/CSSParser.cpp
@@ -18,6 +18,7 @@
 #include "core/css/parser/CSSTokenizer.h"
 #include "core/css/parser/CSSVariableParser.h"
 #include "core/layout/LayoutTheme.h"
+#include <memory>
 
 namespace blink {
 
@@ -114,7 +115,7 @@
     return CSSParserImpl::parseInlineStyleDeclaration(styleString, element);
 }
 
-PassOwnPtr<Vector<double>> CSSParser::parseKeyframeKeyList(const String& keyList)
+std::unique_ptr<Vector<double>> CSSParser::parseKeyframeKeyList(const String& keyList)
 {
     return CSSParserImpl::parseKeyframeKeyList(keyList);
 }
diff --git a/third_party/WebKit/Source/core/css/parser/CSSParser.h b/third_party/WebKit/Source/core/css/parser/CSSParser.h
index 341a2d58..706dd562 100644
--- a/third_party/WebKit/Source/core/css/parser/CSSParser.h
+++ b/third_party/WebKit/Source/core/css/parser/CSSParser.h
@@ -10,6 +10,7 @@
 #include "core/css/CSSValue.h"
 #include "core/css/parser/CSSParserMode.h"
 #include "platform/graphics/Color.h"
+#include <memory>
 
 namespace blink {
 
@@ -47,7 +48,7 @@
 
     static ImmutableStylePropertySet* parseInlineStyleDeclaration(const String&, Element*);
 
-    static PassOwnPtr<Vector<double>> parseKeyframeKeyList(const String&);
+    static std::unique_ptr<Vector<double>> parseKeyframeKeyList(const String&);
     static StyleRuleKeyframe* parseKeyframeRule(const CSSParserContext&, const String&);
 
     static bool parseSupportsCondition(const String&);
diff --git a/third_party/WebKit/Source/core/css/parser/CSSParserImpl.cpp b/third_party/WebKit/Source/core/css/parser/CSSParserImpl.cpp
index f9c9e8d..afe156f 100644
--- a/third_party/WebKit/Source/core/css/parser/CSSParserImpl.cpp
+++ b/third_party/WebKit/Source/core/css/parser/CSSParserImpl.cpp
@@ -28,7 +28,9 @@
 #include "core/frame/Deprecation.h"
 #include "core/frame/UseCounter.h"
 #include "platform/TraceEvent.h"
+#include "wtf/PtrUtil.h"
 #include <bitset>
+#include <memory>
 
 namespace blink {
 
@@ -204,7 +206,7 @@
     if (!range.atEnd())
         return CSSSelectorList(); // Parse error; extra tokens in @page selector
 
-    OwnPtr<CSSParserSelector> selector;
+    std::unique_ptr<CSSParserSelector> selector;
     if (!typeSelector.isNull() && pseudo.isNull()) {
         selector = CSSParserSelector::create(QualifiedName(nullAtom, typeSelector, styleSheet->defaultNamespace()));
     } else {
@@ -221,7 +223,7 @@
     }
 
     selector->setForPage();
-    Vector<OwnPtr<CSSParserSelector>> selectorVector;
+    Vector<std::unique_ptr<CSSParserSelector>> selectorVector;
     selectorVector.append(std::move(selector));
     CSSSelectorList selectorList = CSSSelectorList::adoptSelectorVector(selectorVector);
     return selectorList;
@@ -249,7 +251,7 @@
     return createStylePropertySet(parser.m_parsedProperties, HTMLStandardMode);
 }
 
-PassOwnPtr<Vector<double>> CSSParserImpl::parseKeyframeKeyList(const String& keyList)
+std::unique_ptr<Vector<double>> CSSParserImpl::parseKeyframeKeyList(const String& keyList)
 {
     return consumeKeyframeKeyList(CSSTokenizer::Scope(keyList).tokenRange());
 }
@@ -646,7 +648,7 @@
 
 StyleRuleKeyframe* CSSParserImpl::consumeKeyframeStyleRule(CSSParserTokenRange prelude, CSSParserTokenRange block)
 {
-    OwnPtr<Vector<double>> keyList = consumeKeyframeKeyList(prelude);
+    std::unique_ptr<Vector<double>> keyList = consumeKeyframeKeyList(prelude);
     if (!keyList)
         return nullptr;
 
@@ -803,9 +805,9 @@
     CSSPropertyParser::parseValue(unresolvedProperty, important, range, m_context, m_parsedProperties, ruleType);
 }
 
-PassOwnPtr<Vector<double>> CSSParserImpl::consumeKeyframeKeyList(CSSParserTokenRange range)
+std::unique_ptr<Vector<double>> CSSParserImpl::consumeKeyframeKeyList(CSSParserTokenRange range)
 {
-    OwnPtr<Vector<double>> result = adoptPtr(new Vector<double>);
+    std::unique_ptr<Vector<double>> result = wrapUnique(new Vector<double>);
     while (true) {
         range.consumeWhitespace();
         const CSSParserToken& token = range.consumeIncludingWhitespace();
diff --git a/third_party/WebKit/Source/core/css/parser/CSSParserImpl.h b/third_party/WebKit/Source/core/css/parser/CSSParserImpl.h
index 3d8fbea..0bcd515 100644
--- a/third_party/WebKit/Source/core/css/parser/CSSParserImpl.h
+++ b/third_party/WebKit/Source/core/css/parser/CSSParserImpl.h
@@ -13,6 +13,7 @@
 #include "platform/heap/Handle.h"
 #include "wtf/Vector.h"
 #include "wtf/text/WTFString.h"
+#include <memory>
 
 namespace blink {
 
@@ -66,7 +67,7 @@
 
     static ImmutableStylePropertySet* parseCustomPropertySet(CSSParserTokenRange);
 
-    static PassOwnPtr<Vector<double>> parseKeyframeKeyList(const String&);
+    static std::unique_ptr<Vector<double>> parseKeyframeKeyList(const String&);
 
     bool supportsDeclaration(CSSParserTokenRange&);
 
@@ -108,7 +109,7 @@
     void consumeDeclarationValue(CSSParserTokenRange, CSSPropertyID, bool important, StyleRule::RuleType);
     void consumeVariableValue(CSSParserTokenRange, const AtomicString& propertyName, bool important);
 
-    static PassOwnPtr<Vector<double>> consumeKeyframeKeyList(CSSParserTokenRange);
+    static std::unique_ptr<Vector<double>> consumeKeyframeKeyList(CSSParserTokenRange);
 
     // FIXME: Can we build StylePropertySets directly?
     // FIXME: Investigate using a smaller inline buffer
diff --git a/third_party/WebKit/Source/core/css/parser/CSSParserSelector.cpp b/third_party/WebKit/Source/core/css/parser/CSSParserSelector.cpp
index f3263ea..93b8731 100644
--- a/third_party/WebKit/Source/core/css/parser/CSSParserSelector.cpp
+++ b/third_party/WebKit/Source/core/css/parser/CSSParserSelector.cpp
@@ -21,16 +21,18 @@
 #include "core/css/parser/CSSParserSelector.h"
 
 #include "core/css/CSSSelectorList.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
 CSSParserSelector::CSSParserSelector()
-    : m_selector(adoptPtr(new CSSSelector()))
+    : m_selector(wrapUnique(new CSSSelector()))
 {
 }
 
 CSSParserSelector::CSSParserSelector(const QualifiedName& tagQName, bool isImplicit)
-    : m_selector(adoptPtr(new CSSSelector(tagQName, isImplicit)))
+    : m_selector(wrapUnique(new CSSSelector(tagQName, isImplicit)))
 {
 }
 
@@ -38,10 +40,10 @@
 {
     if (!m_tagHistory)
         return;
-    Vector<OwnPtr<CSSParserSelector>, 16> toDelete;
-    OwnPtr<CSSParserSelector> selector = std::move(m_tagHistory);
+    Vector<std::unique_ptr<CSSParserSelector>, 16> toDelete;
+    std::unique_ptr<CSSParserSelector> selector = std::move(m_tagHistory);
     while (true) {
-        OwnPtr<CSSParserSelector> next = std::move(selector->m_tagHistory);
+        std::unique_ptr<CSSParserSelector> next = std::move(selector->m_tagHistory);
         toDelete.append(std::move(selector));
         if (!next)
             break;
@@ -49,13 +51,13 @@
     }
 }
 
-void CSSParserSelector::adoptSelectorVector(Vector<OwnPtr<CSSParserSelector>>& selectorVector)
+void CSSParserSelector::adoptSelectorVector(Vector<std::unique_ptr<CSSParserSelector>>& selectorVector)
 {
     CSSSelectorList* selectorList = new CSSSelectorList(CSSSelectorList::adoptSelectorVector(selectorVector));
-    m_selector->setSelectorList(adoptPtr(selectorList));
+    m_selector->setSelectorList(wrapUnique(selectorList));
 }
 
-void CSSParserSelector::setSelectorList(PassOwnPtr<CSSSelectorList> selectorList)
+void CSSParserSelector::setSelectorList(std::unique_ptr<CSSSelectorList> selectorList)
 {
     m_selector->setSelectorList(std::move(selectorList));
 }
@@ -80,7 +82,7 @@
     return false;
 }
 
-void CSSParserSelector::appendTagHistory(CSSSelector::RelationType relation, PassOwnPtr<CSSParserSelector> selector)
+void CSSParserSelector::appendTagHistory(CSSSelector::RelationType relation, std::unique_ptr<CSSParserSelector> selector)
 {
     CSSParserSelector* end = this;
     while (end->tagHistory())
@@ -89,7 +91,7 @@
     end->setTagHistory(std::move(selector));
 }
 
-PassOwnPtr<CSSParserSelector> CSSParserSelector::releaseTagHistory()
+std::unique_ptr<CSSParserSelector> CSSParserSelector::releaseTagHistory()
 {
     setRelation(CSSSelector::SubSelector);
     return std::move(m_tagHistory);
@@ -97,11 +99,11 @@
 
 void CSSParserSelector::prependTagSelector(const QualifiedName& tagQName, bool isImplicit)
 {
-    OwnPtr<CSSParserSelector> second = CSSParserSelector::create();
+    std::unique_ptr<CSSParserSelector> second = CSSParserSelector::create();
     second->m_selector = std::move(m_selector);
     second->m_tagHistory = std::move(m_tagHistory);
     m_tagHistory = std::move(second);
-    m_selector = adoptPtr(new CSSSelector(tagQName, isImplicit));
+    m_selector = wrapUnique(new CSSSelector(tagQName, isImplicit));
 }
 
 bool CSSParserSelector::isHostPseudoSelector() const
diff --git a/third_party/WebKit/Source/core/css/parser/CSSParserSelector.h b/third_party/WebKit/Source/core/css/parser/CSSParserSelector.h
index 8be43de..1d3cf2e 100644
--- a/third_party/WebKit/Source/core/css/parser/CSSParserSelector.h
+++ b/third_party/WebKit/Source/core/css/parser/CSSParserSelector.h
@@ -23,6 +23,8 @@
 
 #include "core/CoreExport.h"
 #include "core/css/CSSSelector.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
@@ -32,12 +34,12 @@
     CSSParserSelector();
     explicit CSSParserSelector(const QualifiedName&, bool isImplicit = false);
 
-    static PassOwnPtr<CSSParserSelector> create() { return adoptPtr(new CSSParserSelector); }
-    static PassOwnPtr<CSSParserSelector> create(const QualifiedName& name, bool isImplicit = false) { return adoptPtr(new CSSParserSelector(name, isImplicit)); }
+    static std::unique_ptr<CSSParserSelector> create() { return wrapUnique(new CSSParserSelector); }
+    static std::unique_ptr<CSSParserSelector> create(const QualifiedName& name, bool isImplicit = false) { return wrapUnique(new CSSParserSelector(name, isImplicit)); }
 
     ~CSSParserSelector();
 
-    PassOwnPtr<CSSSelector> releaseSelector() { return std::move(m_selector); }
+    std::unique_ptr<CSSSelector> releaseSelector() { return std::move(m_selector); }
 
     CSSSelector::RelationType relation() const { return m_selector->relation(); }
     void setValue(const AtomicString& value, bool matchLowerCase = false) { m_selector->setValue(value, matchLowerCase); }
@@ -52,8 +54,8 @@
 
     void updatePseudoType(const AtomicString& value, bool hasArguments = false) const { m_selector->updatePseudoType(value, hasArguments); }
 
-    void adoptSelectorVector(Vector<OwnPtr<CSSParserSelector>>& selectorVector);
-    void setSelectorList(PassOwnPtr<CSSSelectorList>);
+    void adoptSelectorVector(Vector<std::unique_ptr<CSSParserSelector>>& selectorVector);
+    void setSelectorList(std::unique_ptr<CSSSelectorList>);
 
     bool isHostPseudoSelector() const;
 
@@ -66,15 +68,15 @@
     bool isSimple() const;
 
     CSSParserSelector* tagHistory() const { return m_tagHistory.get(); }
-    void setTagHistory(PassOwnPtr<CSSParserSelector> selector) { m_tagHistory = std::move(selector); }
+    void setTagHistory(std::unique_ptr<CSSParserSelector> selector) { m_tagHistory = std::move(selector); }
     void clearTagHistory() { m_tagHistory.reset(); }
-    void appendTagHistory(CSSSelector::RelationType, PassOwnPtr<CSSParserSelector>);
-    PassOwnPtr<CSSParserSelector> releaseTagHistory();
+    void appendTagHistory(CSSSelector::RelationType, std::unique_ptr<CSSParserSelector>);
+    std::unique_ptr<CSSParserSelector> releaseTagHistory();
     void prependTagSelector(const QualifiedName&, bool tagIsImplicit = false);
 
 private:
-    OwnPtr<CSSSelector> m_selector;
-    OwnPtr<CSSParserSelector> m_tagHistory;
+    std::unique_ptr<CSSSelector> m_selector;
+    std::unique_ptr<CSSParserSelector> m_tagHistory;
 };
 
 } // namespace blink
diff --git a/third_party/WebKit/Source/core/css/parser/CSSPropertyParser.cpp b/third_party/WebKit/Source/core/css/parser/CSSPropertyParser.cpp
index cdfe75ff..94b727a 100644
--- a/third_party/WebKit/Source/core/css/parser/CSSPropertyParser.cpp
+++ b/third_party/WebKit/Source/core/css/parser/CSSPropertyParser.cpp
@@ -47,6 +47,7 @@
 #include "core/layout/LayoutTheme.h"
 #include "core/svg/SVGPathUtilities.h"
 #include "wtf/text/StringBuilder.h"
+#include <memory>
 
 namespace blink {
 
@@ -1514,7 +1515,7 @@
         return nullptr;
     String pathString = functionArgs.consumeIncludingWhitespace().value().toString();
 
-    OwnPtr<SVGPathByteStream> byteStream = SVGPathByteStream::create();
+    std::unique_ptr<SVGPathByteStream> byteStream = SVGPathByteStream::create();
     if (buildByteStreamFromString(pathString, *byteStream) != SVGParseStatus::NoError
         || !functionArgs.atEnd())
         return nullptr;
diff --git a/third_party/WebKit/Source/core/css/parser/CSSSelectorParser.cpp b/third_party/WebKit/Source/core/css/parser/CSSSelectorParser.cpp
index 8fac603..806f0fc 100644
--- a/third_party/WebKit/Source/core/css/parser/CSSSelectorParser.cpp
+++ b/third_party/WebKit/Source/core/css/parser/CSSSelectorParser.cpp
@@ -8,6 +8,8 @@
 #include "core/css/StyleSheetContents.h"
 #include "core/frame/UseCounter.h"
 #include "platform/RuntimeEnabledFeatures.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
@@ -104,8 +106,8 @@
 
 CSSSelectorList CSSSelectorParser::consumeComplexSelectorList(CSSParserTokenRange& range)
 {
-    Vector<OwnPtr<CSSParserSelector>> selectorList;
-    OwnPtr<CSSParserSelector> selector = consumeComplexSelector(range);
+    Vector<std::unique_ptr<CSSParserSelector>> selectorList;
+    std::unique_ptr<CSSParserSelector> selector = consumeComplexSelector(range);
     if (!selector)
         return CSSSelectorList();
     selectorList.append(std::move(selector));
@@ -125,8 +127,8 @@
 
 CSSSelectorList CSSSelectorParser::consumeCompoundSelectorList(CSSParserTokenRange& range)
 {
-    Vector<OwnPtr<CSSParserSelector>> selectorList;
-    OwnPtr<CSSParserSelector> selector = consumeCompoundSelector(range);
+    Vector<std::unique_ptr<CSSParserSelector>> selectorList;
+    std::unique_ptr<CSSParserSelector> selector = consumeCompoundSelector(range);
     range.consumeWhitespace();
     if (!selector)
         return CSSSelectorList();
@@ -171,9 +173,9 @@
 
 } // namespace
 
-PassOwnPtr<CSSParserSelector> CSSSelectorParser::consumeComplexSelector(CSSParserTokenRange& range)
+std::unique_ptr<CSSParserSelector> CSSSelectorParser::consumeComplexSelector(CSSParserTokenRange& range)
 {
-    OwnPtr<CSSParserSelector> selector = consumeCompoundSelector(range);
+    std::unique_ptr<CSSParserSelector> selector = consumeCompoundSelector(range);
     if (!selector)
         return nullptr;
 
@@ -184,7 +186,7 @@
         previousCompoundFlags |= extractCompoundFlags(*simple, m_context.mode());
 
     while (CSSSelector::RelationType combinator = consumeCombinator(range)) {
-        OwnPtr<CSSParserSelector> nextSelector = consumeCompoundSelector(range);
+        std::unique_ptr<CSSParserSelector> nextSelector = consumeCompoundSelector(range);
         if (!nextSelector)
             return combinator == CSSSelector::Descendant ? std::move(selector) : nullptr;
         if (previousCompoundFlags & HasPseudoElementForRightmostCompound)
@@ -286,9 +288,9 @@
 
 } // namespace
 
-PassOwnPtr<CSSParserSelector> CSSSelectorParser::consumeCompoundSelector(CSSParserTokenRange& range)
+std::unique_ptr<CSSParserSelector> CSSSelectorParser::consumeCompoundSelector(CSSParserTokenRange& range)
 {
-    OwnPtr<CSSParserSelector> compoundSelector;
+    std::unique_ptr<CSSParserSelector> compoundSelector;
 
     AtomicString namespacePrefix;
     AtomicString elementName;
@@ -303,7 +305,7 @@
     if (m_context.isHTMLDocument())
         elementName = elementName.lower();
 
-    while (OwnPtr<CSSParserSelector> simpleSelector = consumeSimpleSelector(range)) {
+    while (std::unique_ptr<CSSParserSelector> simpleSelector = consumeSimpleSelector(range)) {
         // TODO(rune@opera.com): crbug.com/578131
         // The UASheetMode check is a work-around to allow this selector in mediaControls(New).css:
         // video::-webkit-media-text-track-region-container.scrolling
@@ -334,10 +336,10 @@
     return splitCompoundAtImplicitShadowCrossingCombinator(std::move(compoundSelector));
 }
 
-PassOwnPtr<CSSParserSelector> CSSSelectorParser::consumeSimpleSelector(CSSParserTokenRange& range)
+std::unique_ptr<CSSParserSelector> CSSSelectorParser::consumeSimpleSelector(CSSParserTokenRange& range)
 {
     const CSSParserToken& token = range.peek();
-    OwnPtr<CSSParserSelector> selector;
+    std::unique_ptr<CSSParserSelector> selector;
     if (token.type() == HashToken)
         selector = consumeId(range);
     else if (token.type() == DelimiterToken && token.delimiter() == '.')
@@ -391,33 +393,33 @@
     return true;
 }
 
-PassOwnPtr<CSSParserSelector> CSSSelectorParser::consumeId(CSSParserTokenRange& range)
+std::unique_ptr<CSSParserSelector> CSSSelectorParser::consumeId(CSSParserTokenRange& range)
 {
     ASSERT(range.peek().type() == HashToken);
     if (range.peek().getHashTokenType() != HashTokenId)
         return nullptr;
-    OwnPtr<CSSParserSelector> selector = CSSParserSelector::create();
+    std::unique_ptr<CSSParserSelector> selector = CSSParserSelector::create();
     selector->setMatch(CSSSelector::Id);
     AtomicString value = range.consume().value().toAtomicString();
     selector->setValue(value, isQuirksModeBehavior(m_context.matchMode()));
     return selector;
 }
 
-PassOwnPtr<CSSParserSelector> CSSSelectorParser::consumeClass(CSSParserTokenRange& range)
+std::unique_ptr<CSSParserSelector> CSSSelectorParser::consumeClass(CSSParserTokenRange& range)
 {
     ASSERT(range.peek().type() == DelimiterToken);
     ASSERT(range.peek().delimiter() == '.');
     range.consume();
     if (range.peek().type() != IdentToken)
         return nullptr;
-    OwnPtr<CSSParserSelector> selector = CSSParserSelector::create();
+    std::unique_ptr<CSSParserSelector> selector = CSSParserSelector::create();
     selector->setMatch(CSSSelector::Class);
     AtomicString value = range.consume().value().toAtomicString();
     selector->setValue(value, isQuirksModeBehavior(m_context.matchMode()));
     return selector;
 }
 
-PassOwnPtr<CSSParserSelector> CSSSelectorParser::consumeAttribute(CSSParserTokenRange& range)
+std::unique_ptr<CSSParserSelector> CSSSelectorParser::consumeAttribute(CSSParserTokenRange& range)
 {
     ASSERT(range.peek().type() == LeftBracketToken);
     CSSParserTokenRange block = range.consumeBlock();
@@ -440,7 +442,7 @@
         ? QualifiedName(nullAtom, attributeName, nullAtom)
         : QualifiedName(namespacePrefix, attributeName, namespaceURI);
 
-    OwnPtr<CSSParserSelector> selector = CSSParserSelector::create();
+    std::unique_ptr<CSSParserSelector> selector = CSSParserSelector::create();
 
     if (block.atEnd()) {
         selector->setAttribute(qualifiedName, CSSSelector::CaseSensitive);
@@ -461,7 +463,7 @@
     return selector;
 }
 
-PassOwnPtr<CSSParserSelector> CSSSelectorParser::consumePseudo(CSSParserTokenRange& range)
+std::unique_ptr<CSSParserSelector> CSSSelectorParser::consumePseudo(CSSParserTokenRange& range)
 {
     ASSERT(range.peek().type() == ColonToken);
     range.consume();
@@ -476,7 +478,7 @@
     if (token.type() != IdentToken && token.type() != FunctionToken)
         return nullptr;
 
-    OwnPtr<CSSParserSelector> selector = CSSParserSelector::create();
+    std::unique_ptr<CSSParserSelector> selector = CSSParserSelector::create();
     selector->setMatch(colons == 1 ? CSSSelector::PseudoClass : CSSSelector::PseudoElement);
 
     String value = token.value().toString();
@@ -506,7 +508,7 @@
         {
             DisallowPseudoElementsScope scope(this);
 
-            OwnPtr<CSSSelectorList> selectorList = adoptPtr(new CSSSelectorList());
+            std::unique_ptr<CSSSelectorList> selectorList = wrapUnique(new CSSSelectorList());
             *selectorList = consumeCompoundSelectorList(block);
             if (!selectorList->isValid() || !block.atEnd())
                 return nullptr;
@@ -515,11 +517,11 @@
         }
     case CSSSelector::PseudoNot:
         {
-            OwnPtr<CSSParserSelector> innerSelector = consumeCompoundSelector(block);
+            std::unique_ptr<CSSParserSelector> innerSelector = consumeCompoundSelector(block);
             block.consumeWhitespace();
             if (!innerSelector || !innerSelector->isSimple() || !block.atEnd())
                 return nullptr;
-            Vector<OwnPtr<CSSParserSelector>> selectorVector;
+            Vector<std::unique_ptr<CSSParserSelector>> selectorVector;
             selectorVector.append(std::move(innerSelector));
             selector->adoptSelectorVector(selectorVector);
             return selector;
@@ -528,11 +530,11 @@
         {
             DisallowPseudoElementsScope scope(this);
 
-            OwnPtr<CSSParserSelector> innerSelector = consumeCompoundSelector(block);
+            std::unique_ptr<CSSParserSelector> innerSelector = consumeCompoundSelector(block);
             block.consumeWhitespace();
             if (!innerSelector || !block.atEnd() || !RuntimeEnabledFeatures::shadowDOMV1Enabled())
                 return nullptr;
-            Vector<OwnPtr<CSSParserSelector>> selectorVector;
+            Vector<std::unique_ptr<CSSParserSelector>> selectorVector;
             selectorVector.append(std::move(innerSelector));
             selector->adoptSelectorVector(selectorVector);
             return selector;
@@ -763,13 +765,13 @@
         compoundSelector->prependTagSelector(tag, determinedPrefix == nullAtom && determinedElementName == starAtom && !explicitForHost);
 }
 
-PassOwnPtr<CSSParserSelector> CSSSelectorParser::addSimpleSelectorToCompound(PassOwnPtr<CSSParserSelector> compoundSelector, PassOwnPtr<CSSParserSelector> simpleSelector)
+std::unique_ptr<CSSParserSelector> CSSSelectorParser::addSimpleSelectorToCompound(std::unique_ptr<CSSParserSelector> compoundSelector, std::unique_ptr<CSSParserSelector> simpleSelector)
 {
     compoundSelector->appendTagHistory(CSSSelector::SubSelector, std::move(simpleSelector));
     return compoundSelector;
 }
 
-PassOwnPtr<CSSParserSelector> CSSSelectorParser::splitCompoundAtImplicitShadowCrossingCombinator(PassOwnPtr<CSSParserSelector> compoundSelector)
+std::unique_ptr<CSSParserSelector> CSSSelectorParser::splitCompoundAtImplicitShadowCrossingCombinator(std::unique_ptr<CSSParserSelector> compoundSelector)
 {
     // The tagHistory is a linked list that stores combinator separated compound selectors
     // from right-to-left. Yet, within a single compound selector, stores the simple selectors
@@ -796,7 +798,7 @@
     if (!splitAfter || !splitAfter->tagHistory())
         return compoundSelector;
 
-    OwnPtr<CSSParserSelector> secondCompound = splitAfter->releaseTagHistory();
+    std::unique_ptr<CSSParserSelector> secondCompound = splitAfter->releaseTagHistory();
     secondCompound->appendTagHistory(secondCompound->pseudoType() == CSSSelector::PseudoSlotted ? CSSSelector::ShadowSlot : CSSSelector::ShadowPseudo, std::move(compoundSelector));
     return secondCompound;
 }
diff --git a/third_party/WebKit/Source/core/css/parser/CSSSelectorParser.h b/third_party/WebKit/Source/core/css/parser/CSSSelectorParser.h
index 8d3c0a1..496d3fe 100644
--- a/third_party/WebKit/Source/core/css/parser/CSSSelectorParser.h
+++ b/third_party/WebKit/Source/core/css/parser/CSSSelectorParser.h
@@ -8,6 +8,7 @@
 #include "core/CoreExport.h"
 #include "core/css/parser/CSSParserSelector.h"
 #include "core/css/parser/CSSParserTokenRange.h"
+#include <memory>
 
 namespace blink {
 
@@ -31,18 +32,18 @@
     CSSSelectorList consumeComplexSelectorList(CSSParserTokenRange&);
     CSSSelectorList consumeCompoundSelectorList(CSSParserTokenRange&);
 
-    PassOwnPtr<CSSParserSelector> consumeComplexSelector(CSSParserTokenRange&);
-    PassOwnPtr<CSSParserSelector> consumeCompoundSelector(CSSParserTokenRange&);
+    std::unique_ptr<CSSParserSelector> consumeComplexSelector(CSSParserTokenRange&);
+    std::unique_ptr<CSSParserSelector> consumeCompoundSelector(CSSParserTokenRange&);
     // This doesn't include element names, since they're handled specially
-    PassOwnPtr<CSSParserSelector> consumeSimpleSelector(CSSParserTokenRange&);
+    std::unique_ptr<CSSParserSelector> consumeSimpleSelector(CSSParserTokenRange&);
 
     bool consumeName(CSSParserTokenRange&, AtomicString& name, AtomicString& namespacePrefix);
 
     // These will return nullptr when the selector is invalid
-    PassOwnPtr<CSSParserSelector> consumeId(CSSParserTokenRange&);
-    PassOwnPtr<CSSParserSelector> consumeClass(CSSParserTokenRange&);
-    PassOwnPtr<CSSParserSelector> consumePseudo(CSSParserTokenRange&);
-    PassOwnPtr<CSSParserSelector> consumeAttribute(CSSParserTokenRange&);
+    std::unique_ptr<CSSParserSelector> consumeId(CSSParserTokenRange&);
+    std::unique_ptr<CSSParserSelector> consumeClass(CSSParserTokenRange&);
+    std::unique_ptr<CSSParserSelector> consumePseudo(CSSParserTokenRange&);
+    std::unique_ptr<CSSParserSelector> consumeAttribute(CSSParserTokenRange&);
 
     CSSSelector::RelationType consumeCombinator(CSSParserTokenRange&);
     CSSSelector::MatchType consumeAttributeMatch(CSSParserTokenRange&);
@@ -51,8 +52,8 @@
     const AtomicString& defaultNamespace() const;
     const AtomicString& determineNamespace(const AtomicString& prefix);
     void prependTypeSelectorIfNeeded(const AtomicString& namespacePrefix, const AtomicString& elementName, CSSParserSelector*);
-    static PassOwnPtr<CSSParserSelector> addSimpleSelectorToCompound(PassOwnPtr<CSSParserSelector> compoundSelector, PassOwnPtr<CSSParserSelector> simpleSelector);
-    static PassOwnPtr<CSSParserSelector> splitCompoundAtImplicitShadowCrossingCombinator(PassOwnPtr<CSSParserSelector> compoundSelector);
+    static std::unique_ptr<CSSParserSelector> addSimpleSelectorToCompound(std::unique_ptr<CSSParserSelector> compoundSelector, std::unique_ptr<CSSParserSelector> simpleSelector);
+    static std::unique_ptr<CSSParserSelector> splitCompoundAtImplicitShadowCrossingCombinator(std::unique_ptr<CSSParserSelector> compoundSelector);
 
     const CSSParserContext& m_context;
     Member<StyleSheetContents> m_styleSheet; // FIXME: Should be const
diff --git a/third_party/WebKit/Source/core/css/parser/MediaConditionTest.cpp b/third_party/WebKit/Source/core/css/parser/MediaConditionTest.cpp
index abb997d..f888c48d 100644
--- a/third_party/WebKit/Source/core/css/parser/MediaConditionTest.cpp
+++ b/third_party/WebKit/Source/core/css/parser/MediaConditionTest.cpp
@@ -7,7 +7,6 @@
 #include "core/css/parser/CSSTokenizer.h"
 #include "core/css/parser/MediaQueryParser.h"
 #include "testing/gtest/include/gtest/gtest.h"
-#include "wtf/PassOwnPtr.h"
 #include "wtf/text/StringBuilder.h"
 
 namespace blink {
diff --git a/third_party/WebKit/Source/core/css/resolver/FontBuilderTest.cpp b/third_party/WebKit/Source/core/css/resolver/FontBuilderTest.cpp
index 3206d150..6a7591a2 100644
--- a/third_party/WebKit/Source/core/css/resolver/FontBuilderTest.cpp
+++ b/third_party/WebKit/Source/core/css/resolver/FontBuilderTest.cpp
@@ -11,6 +11,7 @@
 #include "core/style/ComputedStyle.h"
 #include "core/testing/DummyPageHolder.h"
 #include "testing/gtest/include/gtest/gtest.h"
+#include <memory>
 
 namespace blink {
 
@@ -26,7 +27,7 @@
     Settings& settings() { return *document().settings(); }
 
 private:
-    OwnPtr<DummyPageHolder> m_dummy;
+    std::unique_ptr<DummyPageHolder> m_dummy;
 };
 
 using BuilderFunc = void (*)(FontBuilder&);
diff --git a/third_party/WebKit/Source/core/css/resolver/ScopedStyleResolver.h b/third_party/WebKit/Source/core/css/resolver/ScopedStyleResolver.h
index adf8f418..58f4e0b 100644
--- a/third_party/WebKit/Source/core/css/resolver/ScopedStyleResolver.h
+++ b/third_party/WebKit/Source/core/css/resolver/ScopedStyleResolver.h
@@ -32,8 +32,6 @@
 #include "core/dom/TreeScope.h"
 #include "wtf/HashMap.h"
 #include "wtf/HashSet.h"
-#include "wtf/OwnPtr.h"
-#include "wtf/PassOwnPtr.h"
 
 namespace blink {
 
diff --git a/third_party/WebKit/Source/core/css/resolver/StyleBuilderCustom.cpp b/third_party/WebKit/Source/core/css/resolver/StyleBuilderCustom.cpp
index e049800..b33285e 100644
--- a/third_party/WebKit/Source/core/css/resolver/StyleBuilderCustom.cpp
+++ b/third_party/WebKit/Source/core/css/resolver/StyleBuilderCustom.cpp
@@ -66,18 +66,20 @@
 #include "core/css/resolver/TransformBuilder.h"
 #include "core/frame/LocalFrame.h"
 #include "core/frame/Settings.h"
-#include "core/style/ContentData.h"
-#include "core/style/CounterContent.h"
 #include "core/style/ComputedStyle.h"
 #include "core/style/ComputedStyleConstants.h"
+#include "core/style/ContentData.h"
+#include "core/style/CounterContent.h"
 #include "core/style/QuotesData.h"
 #include "core/style/SVGComputedStyle.h"
 #include "core/style/StyleGeneratedImage.h"
 #include "core/style/StyleVariableData.h"
 #include "platform/fonts/FontDescription.h"
 #include "wtf/MathExtras.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/StdLibExtras.h"
 #include "wtf/Vector.h"
+#include <memory>
 
 namespace blink {
 
@@ -707,7 +709,7 @@
             CSSValueID listStyleIdent = counterValue->listStyle();
             if (listStyleIdent != CSSValueNone)
                 listStyleType = static_cast<EListStyleType>(listStyleIdent - CSSValueDisc);
-            OwnPtr<CounterContent> counter = adoptPtr(new CounterContent(AtomicString(counterValue->identifier()), listStyleType, AtomicString(counterValue->separator())));
+            std::unique_ptr<CounterContent> counter = wrapUnique(new CounterContent(AtomicString(counterValue->identifier()), listStyleType, AtomicString(counterValue->separator())));
             nextContent = ContentData::create(std::move(counter));
         } else if (item->isPrimitiveValue()) {
             QuoteType quoteType;
diff --git a/third_party/WebKit/Source/core/css/resolver/StyleResolverState.h b/third_party/WebKit/Source/core/css/resolver/StyleResolverState.h
index 547e58a..f8171170 100644
--- a/third_party/WebKit/Source/core/css/resolver/StyleResolverState.h
+++ b/third_party/WebKit/Source/core/css/resolver/StyleResolverState.h
@@ -36,6 +36,7 @@
 #include "core/style/CachedUAStyle.h"
 #include "core/style/ComputedStyle.h"
 #include "core/style/StyleInheritedData.h"
+#include <memory>
 
 namespace blink {
 
@@ -180,7 +181,7 @@
 
     FontBuilder m_fontBuilder;
 
-    OwnPtr<CachedUAStyle> m_cachedUAStyle;
+    std::unique_ptr<CachedUAStyle> m_cachedUAStyle;
 
     ElementStyleResources m_elementStyleResources;
 
diff --git a/third_party/WebKit/Source/core/css/resolver/StyleResolverStats.cpp b/third_party/WebKit/Source/core/css/resolver/StyleResolverStats.cpp
index 1e1902b..f9c2973 100644
--- a/third_party/WebKit/Source/core/css/resolver/StyleResolverStats.cpp
+++ b/third_party/WebKit/Source/core/css/resolver/StyleResolverStats.cpp
@@ -30,6 +30,8 @@
 
 #include "core/css/resolver/StyleResolverStats.h"
 
+#include <memory>
+
 namespace blink {
 
 void StyleResolverStats::reset()
@@ -63,9 +65,9 @@
     return allCountersEnabled;
 }
 
-PassOwnPtr<TracedValue> StyleResolverStats::toTracedValue() const
+std::unique_ptr<TracedValue> StyleResolverStats::toTracedValue() const
 {
-    OwnPtr<TracedValue> tracedValue = TracedValue::create();
+    std::unique_ptr<TracedValue> tracedValue = TracedValue::create();
     tracedValue->setInteger("sharedStyleLookups", sharedStyleLookups);
     tracedValue->setInteger("sharedStyleCandidates", sharedStyleCandidates);
     tracedValue->setInteger("sharedStyleFound", sharedStyleFound);
diff --git a/third_party/WebKit/Source/core/css/resolver/StyleResolverStats.h b/third_party/WebKit/Source/core/css/resolver/StyleResolverStats.h
index 8e0f820..59c630bf 100644
--- a/third_party/WebKit/Source/core/css/resolver/StyleResolverStats.h
+++ b/third_party/WebKit/Source/core/css/resolver/StyleResolverStats.h
@@ -33,21 +33,22 @@
 
 #include "platform/TraceEvent.h"
 #include "platform/TracedValue.h"
-#include "wtf/PassOwnPtr.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
 class StyleResolverStats {
     USING_FAST_MALLOC(StyleResolverStats);
 public:
-    static PassOwnPtr<StyleResolverStats> create()
+    static std::unique_ptr<StyleResolverStats> create()
     {
-        return adoptPtr(new StyleResolverStats);
+        return wrapUnique(new StyleResolverStats);
     }
 
     void reset();
     bool allCountersEnabled() const;
-    PassOwnPtr<TracedValue> toTracedValue() const;
+    std::unique_ptr<TracedValue> toTracedValue() const;
 
     unsigned sharedStyleLookups;
     unsigned sharedStyleCandidates;
diff --git a/third_party/WebKit/Source/core/dom/AXObjectCache.cpp b/third_party/WebKit/Source/core/dom/AXObjectCache.cpp
index 373e1b73..0051d5e 100644
--- a/third_party/WebKit/Source/core/dom/AXObjectCache.cpp
+++ b/third_party/WebKit/Source/core/dom/AXObjectCache.cpp
@@ -28,6 +28,9 @@
 
 #include "core/dom/AXObjectCache.h"
 
+#include "wtf/PtrUtil.h"
+#include <memory>
+
 namespace blink {
 
 AXObjectCache::AXObjectCacheCreateFunction AXObjectCache::m_createFunction = nullptr;
@@ -52,9 +55,9 @@
 {
 }
 
-PassOwnPtr<ScopedAXObjectCache> ScopedAXObjectCache::create(Document& document)
+std::unique_ptr<ScopedAXObjectCache> ScopedAXObjectCache::create(Document& document)
 {
-    return adoptPtr(new ScopedAXObjectCache(document));
+    return wrapUnique(new ScopedAXObjectCache(document));
 }
 
 ScopedAXObjectCache::ScopedAXObjectCache(Document& document)
diff --git a/third_party/WebKit/Source/core/dom/AXObjectCache.h b/third_party/WebKit/Source/core/dom/AXObjectCache.h
index be51633..21c25416 100644
--- a/third_party/WebKit/Source/core/dom/AXObjectCache.h
+++ b/third_party/WebKit/Source/core/dom/AXObjectCache.h
@@ -28,6 +28,7 @@
 
 #include "core/CoreExport.h"
 #include "core/dom/Document.h"
+#include <memory>
 
 typedef unsigned AXID;
 
@@ -154,7 +155,7 @@
     USING_FAST_MALLOC(ScopedAXObjectCache);
     WTF_MAKE_NONCOPYABLE(ScopedAXObjectCache);
 public:
-    static PassOwnPtr<ScopedAXObjectCache> create(Document&);
+    static std::unique_ptr<ScopedAXObjectCache> create(Document&);
     ~ScopedAXObjectCache();
 
     AXObjectCache* get();
diff --git a/third_party/WebKit/Source/core/dom/ActiveDOMObjectTest.cpp b/third_party/WebKit/Source/core/dom/ActiveDOMObjectTest.cpp
index 3faad02..196d623 100644
--- a/third_party/WebKit/Source/core/dom/ActiveDOMObjectTest.cpp
+++ b/third_party/WebKit/Source/core/dom/ActiveDOMObjectTest.cpp
@@ -34,6 +34,7 @@
 #include "core/testing/DummyPageHolder.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
+#include <memory>
 
 namespace blink {
 
@@ -61,8 +62,8 @@
     MockActiveDOMObject& activeDOMObject() { return *m_activeDOMObject; }
 
 private:
-    OwnPtr<DummyPageHolder> m_srcPageHolder;
-    OwnPtr<DummyPageHolder> m_destPageHolder;
+    std::unique_ptr<DummyPageHolder> m_srcPageHolder;
+    std::unique_ptr<DummyPageHolder> m_destPageHolder;
     Persistent<MockActiveDOMObject> m_activeDOMObject;
 };
 
diff --git a/third_party/WebKit/Source/core/dom/AddConsoleMessageTask.h b/third_party/WebKit/Source/core/dom/AddConsoleMessageTask.h
index f4a258d..f3cf08b 100644
--- a/third_party/WebKit/Source/core/dom/AddConsoleMessageTask.h
+++ b/third_party/WebKit/Source/core/dom/AddConsoleMessageTask.h
@@ -29,8 +29,6 @@
 
 #include "core/dom/ExecutionContextTask.h"
 #include "platform/v8_inspector/public/ConsoleTypes.h"
-#include "wtf/OwnPtr.h"
-#include "wtf/PassOwnPtr.h"
 #include "wtf/PtrUtil.h"
 #include "wtf/text/WTFString.h"
 
diff --git a/third_party/WebKit/Source/core/dom/CSSSelectorWatchTest.cpp b/third_party/WebKit/Source/core/dom/CSSSelectorWatchTest.cpp
index fe7fcd4..d4e47193 100644
--- a/third_party/WebKit/Source/core/dom/CSSSelectorWatchTest.cpp
+++ b/third_party/WebKit/Source/core/dom/CSSSelectorWatchTest.cpp
@@ -10,6 +10,7 @@
 #include "core/html/HTMLElement.h"
 #include "core/testing/DummyPageHolder.h"
 #include "testing/gtest/include/gtest/gtest.h"
+#include <memory>
 
 namespace blink {
 
@@ -25,7 +26,7 @@
     static void clearAddedRemoved(CSSSelectorWatch&);
 
 private:
-    OwnPtr<DummyPageHolder> m_dummyPageHolder;
+    std::unique_ptr<DummyPageHolder> m_dummyPageHolder;
 };
 
 void CSSSelectorWatchTest::SetUp()
diff --git a/third_party/WebKit/Source/core/dom/ChildListMutationScope.h b/third_party/WebKit/Source/core/dom/ChildListMutationScope.h
index 6aab53f9..6865b41 100644
--- a/third_party/WebKit/Source/core/dom/ChildListMutationScope.h
+++ b/third_party/WebKit/Source/core/dom/ChildListMutationScope.h
@@ -36,7 +36,6 @@
 #include "core/dom/Node.h"
 #include "platform/heap/Handle.h"
 #include "wtf/Noncopyable.h"
-#include "wtf/OwnPtr.h"
 
 namespace blink {
 
diff --git a/third_party/WebKit/Source/core/dom/CompositorProxiedPropertySet.cpp b/third_party/WebKit/Source/core/dom/CompositorProxiedPropertySet.cpp
index 3a0a614..cd02b73 100644
--- a/third_party/WebKit/Source/core/dom/CompositorProxiedPropertySet.cpp
+++ b/third_party/WebKit/Source/core/dom/CompositorProxiedPropertySet.cpp
@@ -4,13 +4,14 @@
 
 #include "core/dom/CompositorProxiedPropertySet.h"
 
-#include "wtf/PassOwnPtr.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
-PassOwnPtr<CompositorProxiedPropertySet> CompositorProxiedPropertySet::create()
+std::unique_ptr<CompositorProxiedPropertySet> CompositorProxiedPropertySet::create()
 {
-    return adoptPtr(new CompositorProxiedPropertySet);
+    return wrapUnique(new CompositorProxiedPropertySet);
 }
 
 CompositorProxiedPropertySet::CompositorProxiedPropertySet()
diff --git a/third_party/WebKit/Source/core/dom/CompositorProxiedPropertySet.h b/third_party/WebKit/Source/core/dom/CompositorProxiedPropertySet.h
index 874b6ea..73fd68e 100644
--- a/third_party/WebKit/Source/core/dom/CompositorProxiedPropertySet.h
+++ b/third_party/WebKit/Source/core/dom/CompositorProxiedPropertySet.h
@@ -9,6 +9,7 @@
 #include "wtf/Allocator.h"
 #include "wtf/Forward.h"
 #include "wtf/Noncopyable.h"
+#include <memory>
 
 namespace blink {
 
@@ -17,7 +18,7 @@
     WTF_MAKE_NONCOPYABLE(CompositorProxiedPropertySet);
     USING_FAST_MALLOC(CompositorProxiedPropertySet);
 public:
-    static PassOwnPtr<CompositorProxiedPropertySet> create();
+    static std::unique_ptr<CompositorProxiedPropertySet> create();
     virtual ~CompositorProxiedPropertySet();
 
     bool isEmpty() const;
diff --git a/third_party/WebKit/Source/core/dom/ContainerNode.h b/third_party/WebKit/Source/core/dom/ContainerNode.h
index b85b102a..fa76665 100644
--- a/third_party/WebKit/Source/core/dom/ContainerNode.h
+++ b/third_party/WebKit/Source/core/dom/ContainerNode.h
@@ -28,7 +28,6 @@
 #include "core/CoreExport.h"
 #include "core/dom/Node.h"
 #include "core/html/CollectionType.h"
-#include "wtf/OwnPtr.h"
 #include "wtf/Vector.h"
 
 namespace blink {
diff --git a/third_party/WebKit/Source/core/dom/ContextFeatures.cpp b/third_party/WebKit/Source/core/dom/ContextFeatures.cpp
index ee2f3e42..05d936e 100644
--- a/third_party/WebKit/Source/core/dom/ContextFeatures.cpp
+++ b/third_party/WebKit/Source/core/dom/ContextFeatures.cpp
@@ -29,13 +29,15 @@
 #include "core/dom/Document.h"
 #include "core/page/Page.h"
 #include "platform/RuntimeEnabledFeatures.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/StdLibExtras.h"
+#include <memory>
 
 namespace blink {
 
-PassOwnPtr<ContextFeaturesClient> ContextFeaturesClient::empty()
+std::unique_ptr<ContextFeaturesClient> ContextFeaturesClient::empty()
 {
-    return adoptPtr(new ContextFeaturesClient());
+    return wrapUnique(new ContextFeaturesClient());
 }
 
 const char* ContextFeatures::supplementName()
@@ -64,7 +66,7 @@
     return document->contextFeatures().isEnabled(document, MutationEvents, true);
 }
 
-void provideContextFeaturesTo(Page& page, PassOwnPtr<ContextFeaturesClient> client)
+void provideContextFeaturesTo(Page& page, std::unique_ptr<ContextFeaturesClient> client)
 {
     Supplement<Page>::provideTo(page, ContextFeatures::supplementName(), ContextFeatures::create(std::move(client)));
 }
diff --git a/third_party/WebKit/Source/core/dom/ContextFeatures.h b/third_party/WebKit/Source/core/dom/ContextFeatures.h
index 78766a60..16ea195 100644
--- a/third_party/WebKit/Source/core/dom/ContextFeatures.h
+++ b/third_party/WebKit/Source/core/dom/ContextFeatures.h
@@ -30,6 +30,7 @@
 #include "core/CoreExport.h"
 #include "core/page/Page.h"
 #include "platform/heap/Handle.h"
+#include <memory>
 
 namespace blink {
 
@@ -48,7 +49,7 @@
 
     static const char* supplementName();
     static ContextFeatures& defaultSwitch();
-    static ContextFeatures* create(PassOwnPtr<ContextFeaturesClient>);
+    static ContextFeatures* create(std::unique_ptr<ContextFeaturesClient>);
 
     static bool pagePopupEnabled(Document*);
     static bool mutationEventsEnabled(Document*);
@@ -57,27 +58,27 @@
     void urlDidChange(Document*);
 
 private:
-    explicit ContextFeatures(PassOwnPtr<ContextFeaturesClient> client)
+    explicit ContextFeatures(std::unique_ptr<ContextFeaturesClient> client)
         : m_client(std::move(client))
     { }
 
-    OwnPtr<ContextFeaturesClient> m_client;
+    std::unique_ptr<ContextFeaturesClient> m_client;
 };
 
 class ContextFeaturesClient {
     USING_FAST_MALLOC(ContextFeaturesClient);
 public:
-    static PassOwnPtr<ContextFeaturesClient> empty();
+    static std::unique_ptr<ContextFeaturesClient> empty();
 
     virtual ~ContextFeaturesClient() { }
     virtual bool isEnabled(Document*, ContextFeatures::FeatureType, bool defaultValue) { return defaultValue; }
     virtual void urlDidChange(Document*) { }
 };
 
-CORE_EXPORT void provideContextFeaturesTo(Page&, PassOwnPtr<ContextFeaturesClient>);
+CORE_EXPORT void provideContextFeaturesTo(Page&, std::unique_ptr<ContextFeaturesClient>);
 void provideContextFeaturesToDocumentFrom(Document&, Page&);
 
-inline ContextFeatures* ContextFeatures::create(PassOwnPtr<ContextFeaturesClient> client)
+inline ContextFeatures* ContextFeatures::create(std::unique_ptr<ContextFeaturesClient> client)
 {
     return new ContextFeatures(std::move(client));
 }
diff --git a/third_party/WebKit/Source/core/dom/CrossThreadTask.h b/third_party/WebKit/Source/core/dom/CrossThreadTask.h
index 5c9a094..fb744cf 100644
--- a/third_party/WebKit/Source/core/dom/CrossThreadTask.h
+++ b/third_party/WebKit/Source/core/dom/CrossThreadTask.h
@@ -34,7 +34,6 @@
 #include "core/dom/ExecutionContext.h"
 #include "core/dom/ExecutionContextTask.h"
 #include "platform/ThreadSafeFunctional.h"
-#include "wtf/PassOwnPtr.h"
 #include <type_traits>
 
 namespace blink {
diff --git a/third_party/WebKit/Source/core/dom/DOMMatrixReadOnly.h b/third_party/WebKit/Source/core/dom/DOMMatrixReadOnly.h
index 3a57ab5..890990b 100644
--- a/third_party/WebKit/Source/core/dom/DOMMatrixReadOnly.h
+++ b/third_party/WebKit/Source/core/dom/DOMMatrixReadOnly.h
@@ -9,6 +9,7 @@
 #include "core/dom/DOMTypedArray.h"
 #include "platform/heap/Handle.h"
 #include "platform/transforms/TransformationMatrix.h"
+#include <memory>
 
 namespace blink {
 
@@ -62,10 +63,10 @@
 
 protected:
     // TransformationMatrix needs to be 16-byte aligned. PartitionAlloc
-    // supports 16-byte alignment but Oilpan doesn't. So we use an OwnPtr
+    // supports 16-byte alignment but Oilpan doesn't. So we use an std::unique_ptr
     // to allocate TransformationMatrix on PartitionAlloc.
     // TODO(oilpan): Oilpan should support 16-byte aligned allocations.
-    OwnPtr<TransformationMatrix> m_matrix;
+    std::unique_ptr<TransformationMatrix> m_matrix;
     bool m_is2D;
 };
 
diff --git a/third_party/WebKit/Source/core/dom/DatasetDOMStringMap.h b/third_party/WebKit/Source/core/dom/DatasetDOMStringMap.h
index 8ad8552..b244846 100644
--- a/third_party/WebKit/Source/core/dom/DatasetDOMStringMap.h
+++ b/third_party/WebKit/Source/core/dom/DatasetDOMStringMap.h
@@ -27,7 +27,6 @@
 #define DatasetDOMStringMap_h
 
 #include "core/dom/DOMStringMap.h"
-#include "wtf/PassOwnPtr.h"
 
 namespace blink {
 
diff --git a/third_party/WebKit/Source/core/dom/DecodedDataDocumentParser.cpp b/third_party/WebKit/Source/core/dom/DecodedDataDocumentParser.cpp
index b0f5d56c..616dcdd 100644
--- a/third_party/WebKit/Source/core/dom/DecodedDataDocumentParser.cpp
+++ b/third_party/WebKit/Source/core/dom/DecodedDataDocumentParser.cpp
@@ -28,6 +28,7 @@
 #include "core/dom/Document.h"
 #include "core/dom/DocumentEncodingData.h"
 #include "core/html/parser/TextResourceDecoder.h"
+#include <memory>
 
 namespace blink {
 
@@ -41,7 +42,7 @@
 {
 }
 
-void DecodedDataDocumentParser::setDecoder(PassOwnPtr<TextResourceDecoder> decoder)
+void DecodedDataDocumentParser::setDecoder(std::unique_ptr<TextResourceDecoder> decoder)
 {
     // If the decoder is explicitly unset rather than having ownership
     // transferred away by takeDecoder(), we need to make sure it's recreated
@@ -55,7 +56,7 @@
     return m_decoder.get();
 }
 
-PassOwnPtr<TextResourceDecoder> DecodedDataDocumentParser::takeDecoder()
+std::unique_ptr<TextResourceDecoder> DecodedDataDocumentParser::takeDecoder()
 {
     return std::move(m_decoder);
 }
diff --git a/third_party/WebKit/Source/core/dom/DecodedDataDocumentParser.h b/third_party/WebKit/Source/core/dom/DecodedDataDocumentParser.h
index a2dbce68..4d80cf9 100644
--- a/third_party/WebKit/Source/core/dom/DecodedDataDocumentParser.h
+++ b/third_party/WebKit/Source/core/dom/DecodedDataDocumentParser.h
@@ -27,7 +27,7 @@
 #define DecodedDataDocumentParser_h
 
 #include "core/dom/DocumentParser.h"
-#include "wtf/OwnPtr.h"
+#include <memory>
 
 namespace blink {
 class TextResourceDecoder;
@@ -42,10 +42,10 @@
     void appendBytes(const char* bytes, size_t length) override;
     virtual void flush();
     bool needsDecoder() const final { return m_needsDecoder; }
-    void setDecoder(PassOwnPtr<TextResourceDecoder>) override;
+    void setDecoder(std::unique_ptr<TextResourceDecoder>) override;
     TextResourceDecoder* decoder() final;
 
-    PassOwnPtr<TextResourceDecoder> takeDecoder();
+    std::unique_ptr<TextResourceDecoder> takeDecoder();
 
 protected:
     explicit DecodedDataDocumentParser(Document&);
@@ -55,7 +55,7 @@
     void updateDocument(String& decodedData);
 
     bool m_needsDecoder;
-    OwnPtr<TextResourceDecoder> m_decoder;
+    std::unique_ptr<TextResourceDecoder> m_decoder;
 };
 
 } // namespace blink
diff --git a/third_party/WebKit/Source/core/dom/Document.cpp b/third_party/WebKit/Source/core/dom/Document.cpp
index fffbbe5..0e123a4 100644
--- a/third_party/WebKit/Source/core/dom/Document.cpp
+++ b/third_party/WebKit/Source/core/dom/Document.cpp
@@ -238,6 +238,7 @@
 #include "wtf/TemporaryChange.h"
 #include "wtf/text/StringBuffer.h"
 #include "wtf/text/TextEncodingRegistry.h"
+#include <memory>
 
 using namespace WTF;
 using namespace Unicode;
@@ -520,7 +521,7 @@
 SelectorQueryCache& Document::selectorQueryCache()
 {
     if (!m_selectorQueryCache)
-        m_selectorQueryCache = adoptPtr(new SelectorQueryCache());
+        m_selectorQueryCache = wrapUnique(new SelectorQueryCache());
     return *m_selectorQueryCache;
 }
 
@@ -2887,7 +2888,7 @@
     return domWindow();
 }
 
-void Document::logExceptionToConsole(const String& errorMessage, PassOwnPtr<SourceLocation> location)
+void Document::logExceptionToConsole(const String& errorMessage, std::unique_ptr<SourceLocation> location)
 {
     ConsoleMessage* consoleMessage = ConsoleMessage::create(JSMessageSource, ErrorMessageLevel, errorMessage, std::move(location));
     addConsoleMessage(consoleMessage);
@@ -3940,12 +3941,12 @@
 const OriginAccessEntry& Document::accessEntryFromURL()
 {
     if (!m_accessEntryFromURL) {
-        m_accessEntryFromURL = adoptPtr(new OriginAccessEntry(url().protocol(), url().host(), OriginAccessEntry::AllowRegisterableDomains));
+        m_accessEntryFromURL = wrapUnique(new OriginAccessEntry(url().protocol(), url().host(), OriginAccessEntry::AllowRegisterableDomains));
     }
     return *m_accessEntryFromURL;
 }
 
-void Document::registerEventFactory(PassOwnPtr<EventFactoryBase> eventFactory)
+void Document::registerEventFactory(std::unique_ptr<EventFactoryBase> eventFactory)
 {
     DCHECK(!eventFactories().contains(eventFactory.get()));
     eventFactories().add(std::move(eventFactory));
@@ -4377,7 +4378,7 @@
         && m_titleElement->textContent().containsOnlyLatin1()) {
 
         CString originalBytes = m_titleElement->textContent().latin1();
-        OwnPtr<TextCodec> codec = newTextCodec(newData.encoding());
+        std::unique_ptr<TextCodec> codec = newTextCodec(newData.encoding());
         String correctlyDecodedTitle = codec->decode(originalBytes.data(), originalBytes.length(), DataEOF);
         m_titleElement->setTextContent(correctlyDecodedTitle);
     }
@@ -4593,7 +4594,7 @@
     m_currentScriptStack.removeLast();
 }
 
-void Document::setTransformSource(PassOwnPtr<TransformSource> source)
+void Document::setTransformSource(std::unique_ptr<TransformSource> source)
 {
     m_transformSource = std::move(source);
 }
diff --git a/third_party/WebKit/Source/core/dom/Document.h b/third_party/WebKit/Source/core/dom/Document.h
index 19878dc0..15ac304 100644
--- a/third_party/WebKit/Source/core/dom/Document.h
+++ b/third_party/WebKit/Source/core/dom/Document.h
@@ -55,9 +55,8 @@
 #include "public/platform/WebFocusType.h"
 #include "public/platform/WebInsecureRequestPolicy.h"
 #include "wtf/HashSet.h"
-#include "wtf/OwnPtr.h"
-#include "wtf/PassOwnPtr.h"
 #include "wtf/PassRefPtr.h"
+#include <memory>
 
 namespace blink {
 
@@ -672,7 +671,7 @@
     void setWindowAttributeEventListener(const AtomicString& eventType, EventListener*);
     EventListener* getWindowAttributeEventListener(const AtomicString& eventType);
 
-    static void registerEventFactory(PassOwnPtr<EventFactoryBase>);
+    static void registerEventFactory(std::unique_ptr<EventFactoryBase>);
     static Event* createEvent(ExecutionContext*, const String& eventType, ExceptionState&);
 
     // keep track of what types of event listeners are registered, so we don't
@@ -813,7 +812,7 @@
     void pushCurrentScript(Element*);
     void popCurrentScript();
 
-    void setTransformSource(PassOwnPtr<TransformSource>);
+    void setTransformSource(std::unique_ptr<TransformSource>);
     TransformSource* transformSource() const { return m_transformSource.get(); }
 
     void incDOMTreeVersion() { DCHECK(m_lifecycle.stateAllowsTreeMutations()); m_domTreeVersion = ++s_globalTreeVersion; }
@@ -950,7 +949,7 @@
     void cancelIdleCallback(int id);
 
     EventTarget* errorEventTarget() final;
-    void logExceptionToConsole(const String& errorMessage, PassOwnPtr<SourceLocation>) final;
+    void logExceptionToConsole(const String& errorMessage, std::unique_ptr<SourceLocation>) final;
 
     void initDNSPrefetch();
 
@@ -1178,7 +1177,7 @@
 
     void setHoverNode(Node*);
 
-    using EventFactorySet = HashSet<OwnPtr<EventFactoryBase>>;
+    using EventFactorySet = HashSet<std::unique_ptr<EventFactoryBase>>;
     static EventFactorySet& eventFactories();
 
     void setNthIndexCache(NthIndexCache* nthIndexCache) { DCHECK(!m_nthIndexCache || !nthIndexCache); m_nthIndexCache = nthIndexCache; }
@@ -1211,7 +1210,7 @@
     KURL m_baseURLOverride; // An alternative base URL that takes precedence over m_baseURL (but not m_baseElementURL).
     KURL m_baseElementURL; // The URL set by the <base> element.
     KURL m_cookieURL; // The URL to use for cookie access.
-    OwnPtr<OriginAccessEntry> m_accessEntryFromURL;
+    std::unique_ptr<OriginAccessEntry> m_accessEntryFromURL;
 
     AtomicString m_baseTarget;
 
@@ -1230,7 +1229,7 @@
     CompatibilityMode m_compatibilityMode;
     bool m_compatibilityModeLocked; // This is cheaper than making setCompatibilityMode virtual.
 
-    OwnPtr<CancellableTaskFactory> m_executeScriptsWaitingForResourcesTask;
+    std::unique_ptr<CancellableTaskFactory> m_executeScriptsWaitingForResourcesTask;
 
     bool m_hasAutofocused;
     Timer<Document> m_clearFocusedElementTimer;
@@ -1297,7 +1296,7 @@
 
     HeapVector<Member<Element>> m_currentScriptStack;
 
-    OwnPtr<TransformSource> m_transformSource;
+    std::unique_ptr<TransformSource> m_transformSource;
 
     String m_xmlEncoding;
     String m_xmlVersion;
@@ -1323,7 +1322,7 @@
     bool m_hasAnnotatedRegions;
     bool m_annotatedRegionsDirty;
 
-    OwnPtr<SelectorQueryCache> m_selectorQueryCache;
+    std::unique_ptr<SelectorQueryCache> m_selectorQueryCache;
 
     // It is safe to keep a raw, untraced pointer to this stack-allocated
     // cache object: it is set upon the cache object being allocated on
@@ -1367,7 +1366,7 @@
 
     Member<ScriptedAnimationController> m_scriptedAnimationController;
     Member<ScriptedIdleTaskController> m_scriptedIdleTaskController;
-    OwnPtr<MainThreadTaskRunner> m_taskRunner;
+    std::unique_ptr<MainThreadTaskRunner> m_taskRunner;
     Member<TextAutosizer> m_textAutosizer;
 
     Member<V0CustomElementRegistrationContext> m_registrationContext;
@@ -1378,7 +1377,7 @@
 
     Member<ElementDataCache> m_elementDataCache;
 
-    using LocaleIdentifierToLocaleMap = HashMap<AtomicString, OwnPtr<Locale>>;
+    using LocaleIdentifierToLocaleMap = HashMap<AtomicString, std::unique_ptr<Locale>>;
     LocaleIdentifierToLocaleMap m_localeCache;
 
     Member<AnimationTimeline> m_timeline;
diff --git a/third_party/WebKit/Source/core/dom/DocumentParser.cpp b/third_party/WebKit/Source/core/dom/DocumentParser.cpp
index 0faa590..64f22f2 100644
--- a/third_party/WebKit/Source/core/dom/DocumentParser.cpp
+++ b/third_party/WebKit/Source/core/dom/DocumentParser.cpp
@@ -29,6 +29,7 @@
 #include "core/dom/DocumentParserClient.h"
 #include "core/html/parser/TextResourceDecoder.h"
 #include "wtf/Assertions.h"
+#include <memory>
 
 namespace blink {
 
@@ -50,7 +51,7 @@
     visitor->trace(m_clients);
 }
 
-void DocumentParser::setDecoder(PassOwnPtr<TextResourceDecoder>)
+void DocumentParser::setDecoder(std::unique_ptr<TextResourceDecoder>)
 {
     ASSERT_NOT_REACHED();
 }
diff --git a/third_party/WebKit/Source/core/dom/DocumentParser.h b/third_party/WebKit/Source/core/dom/DocumentParser.h
index 3362c21e..9d6dfee 100644
--- a/third_party/WebKit/Source/core/dom/DocumentParser.h
+++ b/third_party/WebKit/Source/core/dom/DocumentParser.h
@@ -26,6 +26,7 @@
 
 #include "platform/heap/Handle.h"
 #include "wtf/Forward.h"
+#include <memory>
 
 namespace blink {
 
@@ -51,7 +52,7 @@
     // The below functions are used by DocumentWriter (the loader).
     virtual void appendBytes(const char* bytes, size_t length) = 0;
     virtual bool needsDecoder() const { return false; }
-    virtual void setDecoder(PassOwnPtr<TextResourceDecoder>);
+    virtual void setDecoder(std::unique_ptr<TextResourceDecoder>);
     virtual TextResourceDecoder* decoder();
     virtual void setHasAppendedData() { }
 
diff --git a/third_party/WebKit/Source/core/dom/DocumentStatisticsCollectorTest.cpp b/third_party/WebKit/Source/core/dom/DocumentStatisticsCollectorTest.cpp
index 2f4daa137..51a3622 100644
--- a/third_party/WebKit/Source/core/dom/DocumentStatisticsCollectorTest.cpp
+++ b/third_party/WebKit/Source/core/dom/DocumentStatisticsCollectorTest.cpp
@@ -13,6 +13,7 @@
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "wtf/text/StringBuilder.h"
+#include <memory>
 
 namespace blink {
 
@@ -36,7 +37,7 @@
     void setHtmlInnerHTML(const String&);
 
 private:
-    OwnPtr<DummyPageHolder> m_dummyPageHolder;
+    std::unique_ptr<DummyPageHolder> m_dummyPageHolder;
 };
 
 void DocumentStatisticsCollectorTest::SetUp()
diff --git a/third_party/WebKit/Source/core/dom/DocumentTest.cpp b/third_party/WebKit/Source/core/dom/DocumentTest.cpp
index d1559700..f4cab42 100644
--- a/third_party/WebKit/Source/core/dom/DocumentTest.cpp
+++ b/third_party/WebKit/Source/core/dom/DocumentTest.cpp
@@ -40,6 +40,7 @@
 #include "platform/weborigin/SecurityOrigin.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
+#include <memory>
 
 namespace blink {
 
@@ -58,7 +59,7 @@
     void setHtmlInnerHTML(const char*);
 
 private:
-    OwnPtr<DummyPageHolder> m_dummyPageHolder;
+    std::unique_ptr<DummyPageHolder> m_dummyPageHolder;
 };
 
 void DocumentTest::SetUp()
diff --git a/third_party/WebKit/Source/core/dom/Element.cpp b/third_party/WebKit/Source/core/dom/Element.cpp
index 6efc5c6..5a811b2 100644
--- a/third_party/WebKit/Source/core/dom/Element.cpp
+++ b/third_party/WebKit/Source/core/dom/Element.cpp
@@ -139,6 +139,7 @@
 #include "wtf/text/CString.h"
 #include "wtf/text/StringBuilder.h"
 #include "wtf/text/TextPosition.h"
+#include <memory>
 
 namespace blink {
 
@@ -1050,14 +1051,14 @@
 const AtomicString& Element::computedRole()
 {
     document().updateStyleAndLayoutIgnorePendingStylesheetsForNode(this);
-    OwnPtr<ScopedAXObjectCache> cache = ScopedAXObjectCache::create(document());
+    std::unique_ptr<ScopedAXObjectCache> cache = ScopedAXObjectCache::create(document());
     return cache->get()->computedRoleForNode(this);
 }
 
 String Element::computedName()
 {
     document().updateStyleAndLayoutIgnorePendingStylesheetsForNode(this);
-    OwnPtr<ScopedAXObjectCache> cache = ScopedAXObjectCache::create(document());
+    std::unique_ptr<ScopedAXObjectCache> cache = ScopedAXObjectCache::create(document());
     return cache->get()->computedNameForNode(this);
 }
 
diff --git a/third_party/WebKit/Source/core/dom/ElementRareData.h b/third_party/WebKit/Source/core/dom/ElementRareData.h
index f43a032..c3bb62e 100644
--- a/third_party/WebKit/Source/core/dom/ElementRareData.h
+++ b/third_party/WebKit/Source/core/dom/ElementRareData.h
@@ -38,7 +38,7 @@
 #include "core/style/StyleInheritedData.h"
 #include "platform/heap/Handle.h"
 #include "wtf/HashSet.h"
-#include "wtf/OwnPtr.h"
+#include <memory>
 
 namespace blink {
 
@@ -158,7 +158,7 @@
     Member<AttrNodeList> m_attrNodeList;
     Member<InlineCSSStyleDeclaration> m_cssomWrapper;
     Member<InlineStylePropertyMap> m_cssomMapWrapper;
-    OwnPtr<CompositorProxiedPropertySet> m_proxiedProperties;
+    std::unique_ptr<CompositorProxiedPropertySet> m_proxiedProperties;
 
     Member<ElementAnimations> m_elementAnimations;
     Member<NodeIntersectionObserverData> m_intersectionObserverData;
diff --git a/third_party/WebKit/Source/core/dom/ElementTest.cpp b/third_party/WebKit/Source/core/dom/ElementTest.cpp
index be8af0d..3ac914f 100644
--- a/third_party/WebKit/Source/core/dom/ElementTest.cpp
+++ b/third_party/WebKit/Source/core/dom/ElementTest.cpp
@@ -9,12 +9,13 @@
 #include "core/html/HTMLHtmlElement.h"
 #include "core/testing/DummyPageHolder.h"
 #include "testing/gtest/include/gtest/gtest.h"
+#include <memory>
 
 namespace blink {
 
 TEST(ElementTest, SupportsFocus)
 {
-    OwnPtr<DummyPageHolder> pageHolder = DummyPageHolder::create();
+    std::unique_ptr<DummyPageHolder> pageHolder = DummyPageHolder::create();
     Document& document = pageHolder->document();
     DCHECK(isHTMLHtmlElement(document.documentElement()));
     document.setDesignMode("on");
diff --git a/third_party/WebKit/Source/core/dom/ExecutionContext.cpp b/third_party/WebKit/Source/core/dom/ExecutionContext.cpp
index e061090..4a49825c 100644
--- a/third_party/WebKit/Source/core/dom/ExecutionContext.cpp
+++ b/third_party/WebKit/Source/core/dom/ExecutionContext.cpp
@@ -37,20 +37,22 @@
 #include "core/inspector/InspectorInstrumentation.h"
 #include "core/workers/WorkerGlobalScope.h"
 #include "core/workers/WorkerThread.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
 class ExecutionContext::PendingException {
     WTF_MAKE_NONCOPYABLE(PendingException);
 public:
-    PendingException(const String& errorMessage, PassOwnPtr<SourceLocation> location)
+    PendingException(const String& errorMessage, std::unique_ptr<SourceLocation> location)
         : m_errorMessage(errorMessage)
         , m_location(std::move(location))
     {
     }
 
     String m_errorMessage;
-    OwnPtr<SourceLocation> m_location;
+    std::unique_ptr<SourceLocation> m_location;
 };
 
 ExecutionContext::ExecutionContext()
@@ -88,7 +90,7 @@
     notifyStoppingActiveDOMObjects();
 }
 
-void ExecutionContext::postSuspendableTask(PassOwnPtr<SuspendableTask> task)
+void ExecutionContext::postSuspendableTask(std::unique_ptr<SuspendableTask> task)
 {
     m_suspendedTasks.append(std::move(task));
     if (!m_activeDOMObjectsAreSuspended)
@@ -97,9 +99,9 @@
 
 void ExecutionContext::notifyContextDestroyed()
 {
-    Deque<OwnPtr<SuspendableTask>> suspendedTasks;
+    Deque<std::unique_ptr<SuspendableTask>> suspendedTasks;
     suspendedTasks.swap(m_suspendedTasks);
-    for (Deque<OwnPtr<SuspendableTask>>::iterator it = suspendedTasks.begin(); it != suspendedTasks.end(); ++it)
+    for (Deque<std::unique_ptr<SuspendableTask>>::iterator it = suspendedTasks.begin(); it != suspendedTasks.end(); ++it)
         (*it)->contextDestroyed();
     ContextLifecycleNotifier::notifyContextDestroyed();
 }
@@ -142,8 +144,8 @@
 {
     if (m_inDispatchErrorEvent) {
         if (!m_pendingExceptions)
-            m_pendingExceptions = adoptPtr(new Vector<OwnPtr<PendingException>>());
-        m_pendingExceptions->append(adoptPtr(new PendingException(errorEvent->messageForConsole(), errorEvent->location()->clone())));
+            m_pendingExceptions = wrapUnique(new Vector<std::unique_ptr<PendingException>>());
+        m_pendingExceptions->append(wrapUnique(new PendingException(errorEvent->messageForConsole(), errorEvent->location()->clone())));
         return;
     }
 
@@ -181,7 +183,7 @@
 {
     m_isRunSuspendableTasksScheduled = false;
     while (!m_activeDOMObjectsAreSuspended && m_suspendedTasks.size()) {
-        OwnPtr<SuspendableTask> task = m_suspendedTasks.takeFirst();
+        std::unique_ptr<SuspendableTask> task = m_suspendedTasks.takeFirst();
         task->run();
     }
 }
diff --git a/third_party/WebKit/Source/core/dom/ExecutionContext.h b/third_party/WebKit/Source/core/dom/ExecutionContext.h
index cd3c1fe..92d1d2ce 100644
--- a/third_party/WebKit/Source/core/dom/ExecutionContext.h
+++ b/third_party/WebKit/Source/core/dom/ExecutionContext.h
@@ -40,8 +40,7 @@
 #include "platform/weborigin/ReferrerPolicy.h"
 #include "wtf/Deque.h"
 #include "wtf/Noncopyable.h"
-#include "wtf/OwnPtr.h"
-#include "wtf/PassOwnPtr.h"
+#include <memory>
 
 namespace blink {
 
@@ -108,7 +107,7 @@
     void reportException(ErrorEvent*, AccessControlStatus);
 
     virtual void addConsoleMessage(ConsoleMessage*) = 0;
-    virtual void logExceptionToConsole(const String& errorMessage, PassOwnPtr<SourceLocation>) = 0;
+    virtual void logExceptionToConsole(const String& errorMessage, std::unique_ptr<SourceLocation>) = 0;
 
     PublicURLManager& publicURLManager();
 
@@ -117,7 +116,7 @@
     void suspendActiveDOMObjects();
     void resumeActiveDOMObjects();
     void stopActiveDOMObjects();
-    void postSuspendableTask(PassOwnPtr<SuspendableTask>);
+    void postSuspendableTask(std::unique_ptr<SuspendableTask>);
     void notifyContextDestroyed() override;
 
     virtual void suspendScheduledTasks();
@@ -168,7 +167,7 @@
 
     bool m_inDispatchErrorEvent;
     class PendingException;
-    OwnPtr<Vector<OwnPtr<PendingException>>> m_pendingExceptions;
+    std::unique_ptr<Vector<std::unique_ptr<PendingException>>> m_pendingExceptions;
 
     bool m_activeDOMObjectsAreSuspended;
     bool m_activeDOMObjectsAreStopped;
@@ -181,7 +180,7 @@
     // increment and decrement the counter.
     int m_windowInteractionTokens;
 
-    Deque<OwnPtr<SuspendableTask>> m_suspendedTasks;
+    Deque<std::unique_ptr<SuspendableTask>> m_suspendedTasks;
     bool m_isRunSuspendableTasksScheduled;
 
     ReferrerPolicy m_referrerPolicy;
diff --git a/third_party/WebKit/Source/core/dom/ExecutionContextTask.h b/third_party/WebKit/Source/core/dom/ExecutionContextTask.h
index 4efe576..4fdbbc90 100644
--- a/third_party/WebKit/Source/core/dom/ExecutionContextTask.h
+++ b/third_party/WebKit/Source/core/dom/ExecutionContextTask.h
@@ -104,7 +104,7 @@
 std::unique_ptr<ExecutionContextTask> createSameThreadTask(
     FunctionType function, P&&... parameters)
 {
-    return internal::createCallClosureTask(bind(function, std::forward<P>(parameters)...));
+    return internal::createCallClosureTask(WTF::bind(function, std::forward<P>(parameters)...));
 }
 
 } // namespace blink
diff --git a/third_party/WebKit/Source/core/dom/IncrementLoadEventDelayCount.cpp b/third_party/WebKit/Source/core/dom/IncrementLoadEventDelayCount.cpp
index dfb887d1..f795010 100644
--- a/third_party/WebKit/Source/core/dom/IncrementLoadEventDelayCount.cpp
+++ b/third_party/WebKit/Source/core/dom/IncrementLoadEventDelayCount.cpp
@@ -5,12 +5,14 @@
 #include "core/dom/IncrementLoadEventDelayCount.h"
 
 #include "core/dom/Document.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
-PassOwnPtr<IncrementLoadEventDelayCount> IncrementLoadEventDelayCount::create(Document& document)
+std::unique_ptr<IncrementLoadEventDelayCount> IncrementLoadEventDelayCount::create(Document& document)
 {
-    return adoptPtr(new IncrementLoadEventDelayCount(document));
+    return wrapUnique(new IncrementLoadEventDelayCount(document));
 }
 
 IncrementLoadEventDelayCount::IncrementLoadEventDelayCount(Document& document)
diff --git a/third_party/WebKit/Source/core/dom/IncrementLoadEventDelayCount.h b/third_party/WebKit/Source/core/dom/IncrementLoadEventDelayCount.h
index 43e971d..dfafde11 100644
--- a/third_party/WebKit/Source/core/dom/IncrementLoadEventDelayCount.h
+++ b/third_party/WebKit/Source/core/dom/IncrementLoadEventDelayCount.h
@@ -8,6 +8,7 @@
 #include "platform/heap/Handle.h"
 #include "wtf/Allocator.h"
 #include "wtf/Noncopyable.h"
+#include <memory>
 
 namespace blink {
 
@@ -20,7 +21,7 @@
     WTF_MAKE_NONCOPYABLE(IncrementLoadEventDelayCount);
 
 public:
-    static PassOwnPtr<IncrementLoadEventDelayCount> create(Document&);
+    static std::unique_ptr<IncrementLoadEventDelayCount> create(Document&);
     ~IncrementLoadEventDelayCount();
 
     // Increments the new document's count and decrements the old count.
diff --git a/third_party/WebKit/Source/core/dom/MainThreadTaskRunner.h b/third_party/WebKit/Source/core/dom/MainThreadTaskRunner.h
index 0d1d6cd..8db704e 100644
--- a/third_party/WebKit/Source/core/dom/MainThreadTaskRunner.h
+++ b/third_party/WebKit/Source/core/dom/MainThreadTaskRunner.h
@@ -32,8 +32,10 @@
 #include "platform/heap/Handle.h"
 #include "wtf/Allocator.h"
 #include "wtf/Noncopyable.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/Vector.h"
 #include "wtf/WeakPtr.h"
+#include <memory>
 
 namespace blink {
 
@@ -44,7 +46,7 @@
     USING_FAST_MALLOC(MainThreadTaskRunner);
     WTF_MAKE_NONCOPYABLE(MainThreadTaskRunner);
 public:
-    static PassOwnPtr<MainThreadTaskRunner> create(ExecutionContext*);
+    static std::unique_ptr<MainThreadTaskRunner> create(ExecutionContext*);
 
     ~MainThreadTaskRunner();
 
@@ -73,9 +75,9 @@
     WeakPtrFactory<MainThreadTaskRunner> m_weakFactory;
 };
 
-inline PassOwnPtr<MainThreadTaskRunner> MainThreadTaskRunner::create(ExecutionContext* context)
+inline std::unique_ptr<MainThreadTaskRunner> MainThreadTaskRunner::create(ExecutionContext* context)
 {
-    return adoptPtr(new MainThreadTaskRunner(context));
+    return wrapUnique(new MainThreadTaskRunner(context));
 }
 
 } // namespace blink
diff --git a/third_party/WebKit/Source/core/dom/MainThreadTaskRunnerTest.cpp b/third_party/WebKit/Source/core/dom/MainThreadTaskRunnerTest.cpp
index 13f52143..1651ef4f 100644
--- a/third_party/WebKit/Source/core/dom/MainThreadTaskRunnerTest.cpp
+++ b/third_party/WebKit/Source/core/dom/MainThreadTaskRunnerTest.cpp
@@ -33,8 +33,7 @@
 #include "platform/testing/UnitTestHelpers.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "wtf/Forward.h"
-#include "wtf/OwnPtr.h"
-#include "wtf/PassOwnPtr.h"
+#include <memory>
 
 namespace blink {
 
@@ -46,7 +45,7 @@
 TEST(MainThreadTaskRunnerTest, PostTask)
 {
     NullExecutionContext* context = new NullExecutionContext();
-    OwnPtr<MainThreadTaskRunner> runner = MainThreadTaskRunner::create(context);
+    std::unique_ptr<MainThreadTaskRunner> runner = MainThreadTaskRunner::create(context);
     bool isMarked = false;
 
     runner->postTask(BLINK_FROM_HERE, createSameThreadTask(&markBoolean, &isMarked));
@@ -58,7 +57,7 @@
 TEST(MainThreadTaskRunnerTest, SuspendTask)
 {
     NullExecutionContext* context = new NullExecutionContext();
-    OwnPtr<MainThreadTaskRunner> runner = MainThreadTaskRunner::create(context);
+    std::unique_ptr<MainThreadTaskRunner> runner = MainThreadTaskRunner::create(context);
     bool isMarked = false;
 
     context->setTasksNeedSuspension(true);
@@ -76,7 +75,7 @@
 TEST(MainThreadTaskRunnerTest, RemoveRunner)
 {
     NullExecutionContext* context = new NullExecutionContext();
-    OwnPtr<MainThreadTaskRunner> runner = MainThreadTaskRunner::create(context);
+    std::unique_ptr<MainThreadTaskRunner> runner = MainThreadTaskRunner::create(context);
     bool isMarked = false;
 
     context->setTasksNeedSuspension(true);
diff --git a/third_party/WebKit/Source/core/dom/MessagePort.cpp b/third_party/WebKit/Source/core/dom/MessagePort.cpp
index 17fc8bb3..59fce93 100644
--- a/third_party/WebKit/Source/core/dom/MessagePort.cpp
+++ b/third_party/WebKit/Source/core/dom/MessagePort.cpp
@@ -39,7 +39,9 @@
 #include "core/workers/WorkerGlobalScope.h"
 #include "public/platform/WebString.h"
 #include "wtf/Functional.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/text/AtomicString.h"
+#include <memory>
 
 namespace blink {
 
@@ -79,7 +81,7 @@
             return;
         }
     }
-    OwnPtr<MessagePortChannelArray> channels = MessagePort::disentanglePorts(context, ports, exceptionState);
+    std::unique_ptr<MessagePortChannelArray> channels = MessagePort::disentanglePorts(context, ports, exceptionState);
     if (exceptionState.hadException())
         return;
 
@@ -87,16 +89,16 @@
         getExecutionContext()->addConsoleMessage(ConsoleMessage::create(JSMessageSource, WarningMessageLevel, "MessagePort cannot send an ArrayBuffer as a transferable object yet. See http://crbug.com/334408"));
 
     WebString messageString = message->toWireString();
-    OwnPtr<WebMessagePortChannelArray> webChannels = toWebMessagePortChannelArray(std::move(channels));
-    m_entangledChannel->postMessage(messageString, webChannels.leakPtr());
+    std::unique_ptr<WebMessagePortChannelArray> webChannels = toWebMessagePortChannelArray(std::move(channels));
+    m_entangledChannel->postMessage(messageString, webChannels.release());
 }
 
 // static
-PassOwnPtr<WebMessagePortChannelArray> MessagePort::toWebMessagePortChannelArray(PassOwnPtr<MessagePortChannelArray> channels)
+std::unique_ptr<WebMessagePortChannelArray> MessagePort::toWebMessagePortChannelArray(std::unique_ptr<MessagePortChannelArray> channels)
 {
-    OwnPtr<WebMessagePortChannelArray> webChannels;
+    std::unique_ptr<WebMessagePortChannelArray> webChannels;
     if (channels && channels->size()) {
-        webChannels = adoptPtr(new WebMessagePortChannelArray(channels->size()));
+        webChannels = wrapUnique(new WebMessagePortChannelArray(channels->size()));
         for (size_t i = 0; i < channels->size(); ++i)
             (*webChannels)[i] = (*channels)[i].release();
     }
@@ -106,7 +108,7 @@
 // static
 MessagePortArray* MessagePort::toMessagePortArray(ExecutionContext* context, const WebMessagePortChannelArray& webChannels)
 {
-    OwnPtr<MessagePortChannelArray> channels = adoptPtr(new MessagePortChannelArray(webChannels.size()));
+    std::unique_ptr<MessagePortChannelArray> channels = wrapUnique(new MessagePortChannelArray(webChannels.size()));
     for (size_t i = 0; i < webChannels.size(); ++i)
         (*channels)[i] = WebMessagePortChannelUniquePtr(webChannels[i]);
     return MessagePort::entanglePorts(*context, std::move(channels));
@@ -163,7 +165,7 @@
     return EventTargetNames::MessagePort;
 }
 
-static bool tryGetMessageFrom(WebMessagePortChannel& webChannel, RefPtr<SerializedScriptValue>& message, OwnPtr<MessagePortChannelArray>& channels)
+static bool tryGetMessageFrom(WebMessagePortChannel& webChannel, RefPtr<SerializedScriptValue>& message, std::unique_ptr<MessagePortChannelArray>& channels)
 {
     WebString messageString;
     WebMessagePortChannelArray webChannels;
@@ -171,7 +173,7 @@
         return false;
 
     if (webChannels.size()) {
-        channels = adoptPtr(new MessagePortChannelArray(webChannels.size()));
+        channels = wrapUnique(new MessagePortChannelArray(webChannels.size()));
         for (size_t i = 0; i < webChannels.size(); ++i)
             (*channels)[i] = WebMessagePortChannelUniquePtr(webChannels[i]);
     }
@@ -179,7 +181,7 @@
     return true;
 }
 
-bool MessagePort::tryGetMessage(RefPtr<SerializedScriptValue>& message, OwnPtr<MessagePortChannelArray>& channels)
+bool MessagePort::tryGetMessage(RefPtr<SerializedScriptValue>& message, std::unique_ptr<MessagePortChannelArray>& channels)
 {
     if (!m_entangledChannel)
         return false;
@@ -198,7 +200,7 @@
         return;
 
     RefPtr<SerializedScriptValue> message;
-    OwnPtr<MessagePortChannelArray> channels;
+    std::unique_ptr<MessagePortChannelArray> channels;
     while (tryGetMessage(message, channels)) {
         // close() in Worker onmessage handler should prevent next message from dispatching.
         if (getExecutionContext()->isWorkerGlobalScope() && toWorkerGlobalScope(getExecutionContext())->isClosing())
@@ -218,7 +220,7 @@
     return m_started && isEntangled();
 }
 
-PassOwnPtr<MessagePortChannelArray> MessagePort::disentanglePorts(ExecutionContext* context, const MessagePortArray& ports, ExceptionState& exceptionState)
+std::unique_ptr<MessagePortChannelArray> MessagePort::disentanglePorts(ExecutionContext* context, const MessagePortArray& ports, ExceptionState& exceptionState)
 {
     if (!ports.size())
         return nullptr;
@@ -245,13 +247,13 @@
     UseCounter::count(context, UseCounter::MessagePortsTransferred);
 
     // Passed-in ports passed validity checks, so we can disentangle them.
-    OwnPtr<MessagePortChannelArray> portArray = adoptPtr(new MessagePortChannelArray(ports.size()));
+    std::unique_ptr<MessagePortChannelArray> portArray = wrapUnique(new MessagePortChannelArray(ports.size()));
     for (unsigned i = 0; i < ports.size(); ++i)
         (*portArray)[i] = ports[i]->disentangle();
     return portArray;
 }
 
-MessagePortArray* MessagePort::entanglePorts(ExecutionContext& context, PassOwnPtr<MessagePortChannelArray> channels)
+MessagePortArray* MessagePort::entanglePorts(ExecutionContext& context, std::unique_ptr<MessagePortChannelArray> channels)
 {
     // https://html.spec.whatwg.org/multipage/comms.html#message-ports
     // |ports| should be an empty array, not null even when there is no ports.
diff --git a/third_party/WebKit/Source/core/dom/MessagePort.h b/third_party/WebKit/Source/core/dom/MessagePort.h
index 4742b7d..6224a2b 100644
--- a/third_party/WebKit/Source/core/dom/MessagePort.h
+++ b/third_party/WebKit/Source/core/dom/MessagePort.h
@@ -35,8 +35,6 @@
 #include "core/events/EventTarget.h"
 #include "public/platform/WebMessagePortChannel.h"
 #include "public/platform/WebMessagePortChannelClient.h"
-#include "wtf/OwnPtr.h"
-#include "wtf/PassOwnPtr.h"
 #include "wtf/PassRefPtr.h"
 #include "wtf/RefPtr.h"
 #include "wtf/Vector.h"
@@ -73,16 +71,16 @@
     WebMessagePortChannelUniquePtr disentangle();
 
     // Returns nullptr if the passed-in array is nullptr/empty.
-    static PassOwnPtr<WebMessagePortChannelArray> toWebMessagePortChannelArray(PassOwnPtr<MessagePortChannelArray>);
+    static std::unique_ptr<WebMessagePortChannelArray> toWebMessagePortChannelArray(std::unique_ptr<MessagePortChannelArray>);
 
     // Returns an empty array if the passed array is empty.
     static MessagePortArray* toMessagePortArray(ExecutionContext*, const WebMessagePortChannelArray&);
 
     // Returns nullptr if there is an exception, or if the passed-in array is nullptr/empty.
-    static PassOwnPtr<MessagePortChannelArray> disentanglePorts(ExecutionContext*, const MessagePortArray&, ExceptionState&);
+    static std::unique_ptr<MessagePortChannelArray> disentanglePorts(ExecutionContext*, const MessagePortArray&, ExceptionState&);
 
     // Returns an empty array if the passed array is nullptr/empty.
-    static MessagePortArray* entanglePorts(ExecutionContext&, PassOwnPtr<MessagePortChannelArray>);
+    static MessagePortArray* entanglePorts(ExecutionContext&, std::unique_ptr<MessagePortChannelArray>);
 
     bool started() const { return m_started; }
 
@@ -113,7 +111,7 @@
 
 protected:
     explicit MessagePort(ExecutionContext&);
-    bool tryGetMessage(RefPtr<SerializedScriptValue>& message, OwnPtr<MessagePortChannelArray>& channels);
+    bool tryGetMessage(RefPtr<SerializedScriptValue>& message, std::unique_ptr<MessagePortChannelArray>& channels);
 
 private:
     // WebMessagePortChannelClient implementation.
diff --git a/third_party/WebKit/Source/core/dom/MutationObserverInterestGroup.h b/third_party/WebKit/Source/core/dom/MutationObserverInterestGroup.h
index a0520a1c..3b1cf40 100644
--- a/third_party/WebKit/Source/core/dom/MutationObserverInterestGroup.h
+++ b/third_party/WebKit/Source/core/dom/MutationObserverInterestGroup.h
@@ -37,7 +37,6 @@
 #include "core/dom/QualifiedName.h"
 #include "platform/heap/Handle.h"
 #include "wtf/HashMap.h"
-#include "wtf/PassOwnPtr.h"
 
 namespace blink {
 
diff --git a/third_party/WebKit/Source/core/dom/Node.cpp b/third_party/WebKit/Source/core/dom/Node.cpp
index c0853351..a7f51f70 100644
--- a/third_party/WebKit/Source/core/dom/Node.cpp
+++ b/third_party/WebKit/Source/core/dom/Node.cpp
@@ -93,7 +93,6 @@
 #include "platform/TraceEvent.h"
 #include "platform/TracedValue.h"
 #include "wtf/HashSet.h"
-#include "wtf/PassOwnPtr.h"
 #include "wtf/Vector.h"
 #include "wtf/allocator/Partitions.h"
 #include "wtf/text/CString.h"
diff --git a/third_party/WebKit/Source/core/dom/NodeRareData.h b/third_party/WebKit/Source/core/dom/NodeRareData.h
index f8d7759..5103db61 100644
--- a/third_party/WebKit/Source/core/dom/NodeRareData.h
+++ b/third_party/WebKit/Source/core/dom/NodeRareData.h
@@ -26,8 +26,6 @@
 #include "core/dom/NodeListsNodeData.h"
 #include "platform/heap/Handle.h"
 #include "wtf/HashSet.h"
-#include "wtf/OwnPtr.h"
-#include "wtf/PassOwnPtr.h"
 
 namespace blink {
 
diff --git a/third_party/WebKit/Source/core/dom/NthIndexCacheTest.cpp b/third_party/WebKit/Source/core/dom/NthIndexCacheTest.cpp
index fe24da8..3a0b750 100644
--- a/third_party/WebKit/Source/core/dom/NthIndexCacheTest.cpp
+++ b/third_party/WebKit/Source/core/dom/NthIndexCacheTest.cpp
@@ -8,6 +8,7 @@
 #include "core/html/HTMLElement.h"
 #include "core/testing/DummyPageHolder.h"
 #include "testing/gtest/include/gtest/gtest.h"
+#include <memory>
 
 namespace blink {
 
@@ -19,7 +20,7 @@
     void setHtmlInnerHTML(const char* htmlContent);
 
 private:
-    OwnPtr<DummyPageHolder> m_dummyPageHolder;
+    std::unique_ptr<DummyPageHolder> m_dummyPageHolder;
 };
 
 void NthIndexCacheTest::SetUp()
diff --git a/third_party/WebKit/Source/core/dom/ProcessingInstruction.cpp b/third_party/WebKit/Source/core/dom/ProcessingInstruction.cpp
index 0c9eb8c..c2f9f38c 100644
--- a/third_party/WebKit/Source/core/dom/ProcessingInstruction.cpp
+++ b/third_party/WebKit/Source/core/dom/ProcessingInstruction.cpp
@@ -34,6 +34,7 @@
 #include "core/xml/DocumentXSLT.h"
 #include "core/xml/XSLStyleSheet.h"
 #include "core/xml/parser/XMLDocumentParser.h" // for parseAttributes()
+#include <memory>
 
 namespace blink {
 
@@ -224,7 +225,7 @@
 
     DCHECK(m_isXSL);
     m_sheet = XSLStyleSheet::create(this, href, baseURL);
-    OwnPtr<IncrementLoadEventDelayCount> delay = IncrementLoadEventDelayCount::create(document());
+    std::unique_ptr<IncrementLoadEventDelayCount> delay = IncrementLoadEventDelayCount::create(document());
     parseStyleSheet(sheet);
 }
 
diff --git a/third_party/WebKit/Source/core/dom/SelectorQuery.cpp b/third_party/WebKit/Source/core/dom/SelectorQuery.cpp
index 9fc5886..212d353 100644
--- a/third_party/WebKit/Source/core/dom/SelectorQuery.cpp
+++ b/third_party/WebKit/Source/core/dom/SelectorQuery.cpp
@@ -36,6 +36,8 @@
 #include "core/dom/StaticNodeList.h"
 #include "core/dom/shadow/ElementShadow.h"
 #include "core/dom/shadow/ShadowRoot.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
@@ -525,9 +527,9 @@
     findTraverseRootsAndExecute<SelectorQueryTrait>(rootNode, output);
 }
 
-PassOwnPtr<SelectorQuery> SelectorQuery::adopt(CSSSelectorList selectorList)
+std::unique_ptr<SelectorQuery> SelectorQuery::adopt(CSSSelectorList selectorList)
 {
-    return adoptPtr(new SelectorQuery(std::move(selectorList)));
+    return wrapUnique(new SelectorQuery(std::move(selectorList)));
 }
 
 SelectorQuery::SelectorQuery(CSSSelectorList selectorList)
@@ -558,7 +560,7 @@
 
 SelectorQuery* SelectorQueryCache::add(const AtomicString& selectors, const Document& document, ExceptionState& exceptionState)
 {
-    HashMap<AtomicString, OwnPtr<SelectorQuery>>::iterator it = m_entries.find(selectors);
+    HashMap<AtomicString, std::unique_ptr<SelectorQuery>>::iterator it = m_entries.find(selectors);
     if (it != m_entries.end())
         return it->value.get();
 
diff --git a/third_party/WebKit/Source/core/dom/SelectorQuery.h b/third_party/WebKit/Source/core/dom/SelectorQuery.h
index 33fb551..2dc05bf4 100644
--- a/third_party/WebKit/Source/core/dom/SelectorQuery.h
+++ b/third_party/WebKit/Source/core/dom/SelectorQuery.h
@@ -32,6 +32,7 @@
 #include "wtf/HashMap.h"
 #include "wtf/Vector.h"
 #include "wtf/text/AtomicStringHash.h"
+#include <memory>
 
 namespace blink {
 
@@ -89,7 +90,7 @@
     WTF_MAKE_NONCOPYABLE(SelectorQuery);
     USING_FAST_MALLOC(SelectorQuery);
 public:
-    static PassOwnPtr<SelectorQuery> adopt(CSSSelectorList);
+    static std::unique_ptr<SelectorQuery> adopt(CSSSelectorList);
 
     bool matches(Element&) const;
     Element* closest(Element&) const;
@@ -109,7 +110,7 @@
     void invalidate();
 
 private:
-    HashMap<AtomicString, OwnPtr<SelectorQuery>> m_entries;
+    HashMap<AtomicString, std::unique_ptr<SelectorQuery>> m_entries;
 };
 
 } // namespace blink
diff --git a/third_party/WebKit/Source/core/dom/SelectorQueryTest.cpp b/third_party/WebKit/Source/core/dom/SelectorQueryTest.cpp
index 5f44146..d10c1af 100644
--- a/third_party/WebKit/Source/core/dom/SelectorQueryTest.cpp
+++ b/third_party/WebKit/Source/core/dom/SelectorQueryTest.cpp
@@ -8,6 +8,7 @@
 #include "core/dom/Document.h"
 #include "core/html/HTMLHtmlElement.h"
 #include "testing/gtest/include/gtest/gtest.h"
+#include <memory>
 
 namespace blink {
 
@@ -19,7 +20,7 @@
     document->documentElement()->setInnerHTML("<body><style>span::before { content: 'X' }</style><span></span></body>", ASSERT_NO_EXCEPTION);
 
     CSSSelectorList selectorList = CSSParser::parseSelector(CSSParserContext(*document, nullptr), nullptr, "span::before");
-    OwnPtr<SelectorQuery> query = SelectorQuery::adopt(std::move(selectorList));
+    std::unique_ptr<SelectorQuery> query = SelectorQuery::adopt(std::move(selectorList));
     Element* elm = query->queryFirst(*document);
     EXPECT_EQ(nullptr, elm);
 
diff --git a/third_party/WebKit/Source/core/dom/StyleElementTest.cpp b/third_party/WebKit/Source/core/dom/StyleElementTest.cpp
index 5f1f6c61..c37c7b8 100644
--- a/third_party/WebKit/Source/core/dom/StyleElementTest.cpp
+++ b/third_party/WebKit/Source/core/dom/StyleElementTest.cpp
@@ -9,12 +9,13 @@
 #include "core/html/HTMLStyleElement.h"
 #include "core/testing/DummyPageHolder.h"
 #include "testing/gtest/include/gtest/gtest.h"
+#include <memory>
 
 namespace blink {
 
 TEST(StyleElementTest, CreateSheetUsesCache)
 {
-    OwnPtr<DummyPageHolder> dummyPageHolder = DummyPageHolder::create(IntSize(800, 600));
+    std::unique_ptr<DummyPageHolder> dummyPageHolder = DummyPageHolder::create(IntSize(800, 600));
     Document& document = dummyPageHolder->document();
 
     document.documentElement()->setInnerHTML("<style id=style>a { top: 0; }</style>", ASSERT_NO_EXCEPTION);
diff --git a/third_party/WebKit/Source/core/dom/StyleEngine.h b/third_party/WebKit/Source/core/dom/StyleEngine.h
index 24dfe57..b2cd4f0 100644
--- a/third_party/WebKit/Source/core/dom/StyleEngine.h
+++ b/third_party/WebKit/Source/core/dom/StyleEngine.h
@@ -43,6 +43,7 @@
 #include "wtf/TemporaryChange.h"
 #include "wtf/Vector.h"
 #include "wtf/text/WTFString.h"
+#include <memory>
 
 namespace blink {
 
@@ -261,7 +262,7 @@
     HeapHashMap<AtomicString, Member<StyleSheetContents>> m_textToSheetCache;
     HeapHashMap<Member<StyleSheetContents>, AtomicString> m_sheetToTextCache;
 
-    OwnPtr<StyleResolverStats> m_styleResolverStats;
+    std::unique_ptr<StyleResolverStats> m_styleResolverStats;
     unsigned m_styleForElementCount = 0;
 
     friend class StyleEngineTest;
diff --git a/third_party/WebKit/Source/core/dom/StyleEngineTest.cpp b/third_party/WebKit/Source/core/dom/StyleEngineTest.cpp
index 098395e..7d2bd26a 100644
--- a/third_party/WebKit/Source/core/dom/StyleEngineTest.cpp
+++ b/third_party/WebKit/Source/core/dom/StyleEngineTest.cpp
@@ -11,6 +11,7 @@
 #include "core/html/HTMLElement.h"
 #include "core/testing/DummyPageHolder.h"
 #include "testing/gtest/include/gtest/gtest.h"
+#include <memory>
 
 namespace blink {
 
@@ -24,7 +25,7 @@
     bool isDocumentStyleSheetCollectionClean() { return !styleEngine().shouldUpdateDocumentStyleSheetCollection(AnalyzedStyleUpdate); }
 
 private:
-    OwnPtr<DummyPageHolder> m_dummyPageHolder;
+    std::unique_ptr<DummyPageHolder> m_dummyPageHolder;
 };
 
 void StyleEngineTest::SetUp()
diff --git a/third_party/WebKit/Source/core/dom/custom/CustomElementTest.cpp b/third_party/WebKit/Source/core/dom/custom/CustomElementTest.cpp
index f3a4b56..8567a58 100644
--- a/third_party/WebKit/Source/core/dom/custom/CustomElementTest.cpp
+++ b/third_party/WebKit/Source/core/dom/custom/CustomElementTest.cpp
@@ -10,6 +10,7 @@
 #include "core/html/HTMLElement.h"
 #include "core/testing/DummyPageHolder.h"
 #include "testing/gtest/include/gtest/gtest.h"
+#include <memory>
 
 namespace blink {
 
@@ -131,7 +132,7 @@
     const char* bodyContent = "<div id=div></div>"
         "<a-a id=v1v0></a-a>"
         "<font-face id=v0></font-face>";
-    OwnPtr<DummyPageHolder> pageHolder = DummyPageHolder::create();
+    std::unique_ptr<DummyPageHolder> pageHolder = DummyPageHolder::create();
     Document& document = pageHolder->document();
     document.body()->setInnerHTML(String::fromUTF8(bodyContent), ASSERT_NO_EXCEPTION);
 
@@ -166,7 +167,7 @@
         { "font-face", CustomElementState::Uncustomized, Element::V0WaitingForUpgrade },
         { "_-X", CustomElementState::Uncustomized, Element::V0WaitingForUpgrade },
     };
-    OwnPtr<DummyPageHolder> pageHolder = DummyPageHolder::create();
+    std::unique_ptr<DummyPageHolder> pageHolder = DummyPageHolder::create();
     Document& document = pageHolder->document();
     for (const auto& data : createElementData) {
         Element* element = document.createElement(data.name, ASSERT_NO_EXCEPTION);
diff --git a/third_party/WebKit/Source/core/dom/custom/CustomElementUpgradeSorterTest.cpp b/third_party/WebKit/Source/core/dom/custom/CustomElementUpgradeSorterTest.cpp
index 22b80ad..a838691 100644
--- a/third_party/WebKit/Source/core/dom/custom/CustomElementUpgradeSorterTest.cpp
+++ b/third_party/WebKit/Source/core/dom/custom/CustomElementUpgradeSorterTest.cpp
@@ -14,8 +14,8 @@
 #include "core/testing/DummyPageHolder.h"
 #include "platform/heap/Handle.h"
 #include "testing/gtest/include/gtest/gtest.h"
-#include "wtf/OwnPtr.h"
 #include "wtf/text/AtomicString.h"
+#include <memory>
 
 namespace blink {
 
@@ -56,7 +56,7 @@
     }
 
 private:
-    OwnPtr<DummyPageHolder> m_page;
+    std::unique_ptr<DummyPageHolder> m_page;
 };
 
 TEST_F(CustomElementUpgradeSorterTest, inOtherDocument_notInSet)
diff --git a/third_party/WebKit/Source/core/dom/custom/CustomElementsRegistryTest.cpp b/third_party/WebKit/Source/core/dom/custom/CustomElementsRegistryTest.cpp
index da2245a..17467d0b 100644
--- a/third_party/WebKit/Source/core/dom/custom/CustomElementsRegistryTest.cpp
+++ b/third_party/WebKit/Source/core/dom/custom/CustomElementsRegistryTest.cpp
@@ -71,7 +71,7 @@
     void SetUp() override
     {
         CustomElementsRegistryTestBase::SetUp();
-        m_page.reset(DummyPageHolder::create(IntSize(1, 1)).leakPtr());
+        m_page.reset(DummyPageHolder::create(IntSize(1, 1)).release());
     }
 
     void TearDown() override
diff --git a/third_party/WebKit/Source/core/dom/shadow/FlatTreeTraversalTest.cpp b/third_party/WebKit/Source/core/dom/shadow/FlatTreeTraversalTest.cpp
index 6dbcf26..55ca8a7 100644
--- a/third_party/WebKit/Source/core/dom/shadow/FlatTreeTraversalTest.cpp
+++ b/third_party/WebKit/Source/core/dom/shadow/FlatTreeTraversalTest.cpp
@@ -17,9 +17,9 @@
 #include "platform/geometry/IntSize.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "wtf/Compiler.h"
-#include "wtf/OwnPtr.h"
 #include "wtf/StdLibExtras.h"
 #include "wtf/Vector.h"
+#include <memory>
 
 namespace blink {
 
@@ -41,7 +41,7 @@
     void SetUp() override;
 
     Persistent<HTMLDocument> m_document;
-    OwnPtr<DummyPageHolder> m_dummyPageHolder;
+    std::unique_ptr<DummyPageHolder> m_dummyPageHolder;
 };
 
 void FlatTreeTraversalTest::SetUp()
diff --git a/third_party/WebKit/Source/core/editing/EditingTestBase.h b/third_party/WebKit/Source/core/editing/EditingTestBase.h
index 1f30bac..53f971b 100644
--- a/third_party/WebKit/Source/core/editing/EditingTestBase.h
+++ b/third_party/WebKit/Source/core/editing/EditingTestBase.h
@@ -8,6 +8,7 @@
 #include "core/editing/Position.h"
 #include "wtf/Forward.h"
 #include <gtest/gtest.h>
+#include <memory>
 #include <string>
 
 namespace blink {
@@ -32,7 +33,7 @@
     void updateAllLifecyclePhases();
 
 private:
-    OwnPtr<DummyPageHolder> m_dummyPageHolder;
+    std::unique_ptr<DummyPageHolder> m_dummyPageHolder;
 };
 
 } // namespace blink
diff --git a/third_party/WebKit/Source/core/editing/Editor.cpp b/third_party/WebKit/Source/core/editing/Editor.cpp
index e705c69..4c2e912 100644
--- a/third_party/WebKit/Source/core/editing/Editor.cpp
+++ b/third_party/WebKit/Source/core/editing/Editor.cpp
@@ -87,6 +87,7 @@
 #include "core/svg/SVGImageElement.h"
 #include "platform/KillRing.h"
 #include "platform/weborigin/KURL.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/text/CharacterNames.h"
 
 namespace blink {
@@ -768,7 +769,7 @@
     , m_shouldStartNewKillRingSequence(false)
     // This is off by default, since most editors want this behavior (this matches IE but not FF).
     , m_shouldStyleWithCSS(false)
-    , m_killRing(adoptPtr(new KillRing))
+    , m_killRing(wrapUnique(new KillRing))
     , m_areMarkedTextMatchesHighlighted(false)
     , m_defaultParagraphSeparator(EditorParagraphSeparatorIsDiv)
     , m_overwriteModeEnabled(false)
diff --git a/third_party/WebKit/Source/core/editing/Editor.h b/third_party/WebKit/Source/core/editing/Editor.h
index 4262211..e2bd766a 100644
--- a/third_party/WebKit/Source/core/editing/Editor.h
+++ b/third_party/WebKit/Source/core/editing/Editor.h
@@ -39,6 +39,7 @@
 #include "core/editing/markers/DocumentMarker.h"
 #include "platform/PasteMode.h"
 #include "platform/heap/Handle.h"
+#include <memory>
 
 namespace blink {
 
@@ -255,7 +256,7 @@
     int m_preventRevealSelection;
     bool m_shouldStartNewKillRingSequence;
     bool m_shouldStyleWithCSS;
-    const OwnPtr<KillRing> m_killRing;
+    const std::unique_ptr<KillRing> m_killRing;
     VisibleSelection m_mark;
     bool m_areMarkedTextMatchesHighlighted;
     EditorParagraphSeparator m_defaultParagraphSeparator;
diff --git a/third_party/WebKit/Source/core/editing/FrameSelection.cpp b/third_party/WebKit/Source/core/editing/FrameSelection.cpp
index 6b3befe..0e7844a 100644
--- a/third_party/WebKit/Source/core/editing/FrameSelection.cpp
+++ b/third_party/WebKit/Source/core/editing/FrameSelection.cpp
@@ -77,6 +77,7 @@
 #include "platform/geometry/FloatQuad.h"
 #include "platform/graphics/GraphicsContext.h"
 #include "platform/text/UnicodeUtilities.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/text/CString.h"
 #include <stdio.h>
 
@@ -1299,9 +1300,9 @@
         return m_granularityStrategy.get();
 
     if (strategyType == SelectionStrategy::Direction)
-        m_granularityStrategy = adoptPtr(new DirectionGranularityStrategy());
+        m_granularityStrategy = wrapUnique(new DirectionGranularityStrategy());
     else
-        m_granularityStrategy = adoptPtr(new CharacterGranularityStrategy());
+        m_granularityStrategy = wrapUnique(new CharacterGranularityStrategy());
     return m_granularityStrategy.get();
 }
 
diff --git a/third_party/WebKit/Source/core/editing/FrameSelection.h b/third_party/WebKit/Source/core/editing/FrameSelection.h
index 3f559f5..f50aa62 100644
--- a/third_party/WebKit/Source/core/editing/FrameSelection.h
+++ b/third_party/WebKit/Source/core/editing/FrameSelection.h
@@ -39,6 +39,7 @@
 #include "platform/geometry/LayoutRect.h"
 #include "platform/heap/Handle.h"
 #include "wtf/Noncopyable.h"
+#include <memory>
 
 namespace blink {
 
@@ -301,7 +302,7 @@
     bool m_focused : 1;
 
     // Controls text granularity used to adjust the selection's extent in moveRangeSelectionExtent.
-    OwnPtr<GranularityStrategy> m_granularityStrategy;
+    std::unique_ptr<GranularityStrategy> m_granularityStrategy;
 
     const Member<FrameCaret> m_frameCaret;
 };
diff --git a/third_party/WebKit/Source/core/editing/FrameSelectionTest.cpp b/third_party/WebKit/Source/core/editing/FrameSelectionTest.cpp
index 19050016..1924c09 100644
--- a/third_party/WebKit/Source/core/editing/FrameSelectionTest.cpp
+++ b/third_party/WebKit/Source/core/editing/FrameSelectionTest.cpp
@@ -19,10 +19,10 @@
 #include "platform/graphics/paint/DrawingRecorder.h"
 #include "platform/graphics/paint/PaintController.h"
 #include "testing/gtest/include/gtest/gtest.h"
-#include "wtf/OwnPtr.h"
 #include "wtf/PassRefPtr.h"
 #include "wtf/RefPtr.h"
 #include "wtf/StdLibExtras.h"
+#include <memory>
 
 namespace blink {
 
@@ -113,7 +113,7 @@
         frameRect.setHeight(frameRect.height() + 1);
         dummyPageHolder().frameView().setFrameRect(frameRect);
     }
-    OwnPtr<PaintController> paintController = PaintController::create();
+    std::unique_ptr<PaintController> paintController = PaintController::create();
     {
         GraphicsContext context(*paintController);
         DrawingRecorder drawingRecorder(context, *dummyPageHolder().frameView().layoutView(), DisplayItem::Caret, LayoutRect::infiniteIntRect());
diff --git a/third_party/WebKit/Source/core/editing/GranularityStrategyTest.cpp b/third_party/WebKit/Source/core/editing/GranularityStrategyTest.cpp
index dac7bae0..82853aff 100644
--- a/third_party/WebKit/Source/core/editing/GranularityStrategyTest.cpp
+++ b/third_party/WebKit/Source/core/editing/GranularityStrategyTest.cpp
@@ -15,10 +15,10 @@
 #include "core/testing/DummyPageHolder.h"
 #include "platform/heap/Handle.h"
 #include "testing/gtest/include/gtest/gtest.h"
-#include "wtf/OwnPtr.h"
 #include "wtf/PassRefPtr.h"
 #include "wtf/RefPtr.h"
 #include "wtf/StdLibExtras.h"
+#include <memory>
 
 namespace blink {
 
@@ -69,7 +69,7 @@
     Vector<IntPoint> m_wordMiddles;
 
 private:
-    OwnPtr<DummyPageHolder> m_dummyPageHolder;
+    std::unique_ptr<DummyPageHolder> m_dummyPageHolder;
     Persistent<HTMLDocument> m_document;
 };
 
diff --git a/third_party/WebKit/Source/core/editing/InputMethodControllerTest.cpp b/third_party/WebKit/Source/core/editing/InputMethodControllerTest.cpp
index b176244..1a8bf2c5 100644
--- a/third_party/WebKit/Source/core/editing/InputMethodControllerTest.cpp
+++ b/third_party/WebKit/Source/core/editing/InputMethodControllerTest.cpp
@@ -15,6 +15,7 @@
 #include "core/html/HTMLInputElement.h"
 #include "core/testing/DummyPageHolder.h"
 #include "testing/gtest/include/gtest/gtest.h"
+#include <memory>
 
 namespace blink {
 
@@ -28,7 +29,7 @@
 private:
     void SetUp() override;
 
-    OwnPtr<DummyPageHolder> m_dummyPageHolder;
+    std::unique_ptr<DummyPageHolder> m_dummyPageHolder;
     Persistent<HTMLDocument> m_document;
 };
 
diff --git a/third_party/WebKit/Source/core/editing/SurroundingTextTest.cpp b/third_party/WebKit/Source/core/editing/SurroundingTextTest.cpp
index 3a9b2c942..46ceeac 100644
--- a/third_party/WebKit/Source/core/editing/SurroundingTextTest.cpp
+++ b/third_party/WebKit/Source/core/editing/SurroundingTextTest.cpp
@@ -12,6 +12,7 @@
 #include "core/html/HTMLElement.h"
 #include "core/testing/DummyPageHolder.h"
 #include "testing/gtest/include/gtest/gtest.h"
+#include <memory>
 
 namespace blink {
 
@@ -25,7 +26,7 @@
 private:
     void SetUp() override;
 
-    OwnPtr<DummyPageHolder> m_dummyPageHolder;
+    std::unique_ptr<DummyPageHolder> m_dummyPageHolder;
 };
 
 void SurroundingTextTest::SetUp()
diff --git a/third_party/WebKit/Source/core/editing/markers/DocumentMarkerControllerTest.cpp b/third_party/WebKit/Source/core/editing/markers/DocumentMarkerControllerTest.cpp
index 62a53a0..5611a89 100644
--- a/third_party/WebKit/Source/core/editing/markers/DocumentMarkerControllerTest.cpp
+++ b/third_party/WebKit/Source/core/editing/markers/DocumentMarkerControllerTest.cpp
@@ -41,6 +41,7 @@
 #include "testing/gtest/include/gtest/gtest.h"
 #include "wtf/PassRefPtr.h"
 #include "wtf/RefPtr.h"
+#include <memory>
 
 namespace blink {
 
@@ -60,7 +61,7 @@
     void setBodyInnerHTML(const char*);
 
 private:
-    OwnPtr<DummyPageHolder> m_dummyPageHolder;
+    std::unique_ptr<DummyPageHolder> m_dummyPageHolder;
 };
 
 Text* DocumentMarkerControllerTest::createTextNode(const char* textContents)
diff --git a/third_party/WebKit/Source/core/events/ErrorEvent.cpp b/third_party/WebKit/Source/core/events/ErrorEvent.cpp
index bab76836f..1d878850 100644
--- a/third_party/WebKit/Source/core/events/ErrorEvent.cpp
+++ b/third_party/WebKit/Source/core/events/ErrorEvent.cpp
@@ -31,6 +31,7 @@
 #include "core/events/ErrorEvent.h"
 
 #include "bindings/core/v8/V8Binding.h"
+#include <memory>
 #include <v8.h>
 
 namespace blink {
@@ -58,7 +59,7 @@
         m_error = initializer.error();
 }
 
-ErrorEvent::ErrorEvent(const String& message, PassOwnPtr<SourceLocation> location, DOMWrapperWorld* world)
+ErrorEvent::ErrorEvent(const String& message, std::unique_ptr<SourceLocation> location, DOMWrapperWorld* world)
     : Event(EventTypeNames::error, false, true)
     , m_sanitizedMessage(message)
     , m_location(std::move(location))
diff --git a/third_party/WebKit/Source/core/events/ErrorEvent.h b/third_party/WebKit/Source/core/events/ErrorEvent.h
index 97121d5..e44e284 100644
--- a/third_party/WebKit/Source/core/events/ErrorEvent.h
+++ b/third_party/WebKit/Source/core/events/ErrorEvent.h
@@ -37,6 +37,7 @@
 #include "core/events/Event.h"
 #include "wtf/RefPtr.h"
 #include "wtf/text/WTFString.h"
+#include <memory>
 
 namespace blink {
 
@@ -47,7 +48,7 @@
     {
         return new ErrorEvent;
     }
-    static ErrorEvent* create(const String& message, PassOwnPtr<SourceLocation> location, DOMWrapperWorld* world)
+    static ErrorEvent* create(const String& message, std::unique_ptr<SourceLocation> location, DOMWrapperWorld* world)
     {
         return new ErrorEvent(message, std::move(location), world);
     }
@@ -82,12 +83,12 @@
 
 private:
     ErrorEvent();
-    ErrorEvent(const String& message, PassOwnPtr<SourceLocation>, DOMWrapperWorld*);
+    ErrorEvent(const String& message, std::unique_ptr<SourceLocation>, DOMWrapperWorld*);
     ErrorEvent(const AtomicString&, const ErrorEventInit&);
 
     String m_unsanitizedMessage;
     String m_sanitizedMessage;
-    OwnPtr<SourceLocation> m_location;
+    std::unique_ptr<SourceLocation> m_location;
     ScriptValue m_error;
 
     RefPtr<DOMWrapperWorld> m_world;
diff --git a/third_party/WebKit/Source/core/events/EventFactory.h b/third_party/WebKit/Source/core/events/EventFactory.h
index 01f7c688c..78b6de61 100644
--- a/third_party/WebKit/Source/core/events/EventFactory.h
+++ b/third_party/WebKit/Source/core/events/EventFactory.h
@@ -29,7 +29,9 @@
 #include "platform/heap/Handle.h"
 #include "wtf/Allocator.h"
 #include "wtf/PassRefPtr.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/text/AtomicString.h"
+#include <memory>
 
 namespace blink {
 
@@ -48,9 +50,9 @@
 
 class EventFactory final : public EventFactoryBase {
 public:
-    static PassOwnPtr<EventFactory> create()
+    static std::unique_ptr<EventFactory> create()
     {
-        return adoptPtr(new EventFactory());
+        return wrapUnique(new EventFactory());
     }
 
     Event* create(ExecutionContext*, const String& eventType) override;
diff --git a/third_party/WebKit/Source/core/events/EventListenerMap.h b/third_party/WebKit/Source/core/events/EventListenerMap.h
index a6a6b8d..37851fc 100644
--- a/third_party/WebKit/Source/core/events/EventListenerMap.h
+++ b/third_party/WebKit/Source/core/events/EventListenerMap.h
@@ -38,7 +38,6 @@
 #include "core/events/EventListenerOptions.h"
 #include "core/events/RegisteredEventListener.h"
 #include "wtf/Noncopyable.h"
-#include "wtf/PassOwnPtr.h"
 #include "wtf/text/AtomicStringHash.h"
 
 namespace blink {
diff --git a/third_party/WebKit/Source/core/events/EventPathTest.cpp b/third_party/WebKit/Source/core/events/EventPathTest.cpp
index 4351aab..ad8654a 100644
--- a/third_party/WebKit/Source/core/events/EventPathTest.cpp
+++ b/third_party/WebKit/Source/core/events/EventPathTest.cpp
@@ -10,6 +10,7 @@
 #include "core/style/ComputedStyleConstants.h"
 #include "core/testing/DummyPageHolder.h"
 #include "testing/gtest/include/gtest/gtest.h"
+#include <memory>
 
 namespace blink {
 
@@ -20,7 +21,7 @@
 private:
     void SetUp() override;
 
-    OwnPtr<DummyPageHolder> m_dummyPageHolder;
+    std::unique_ptr<DummyPageHolder> m_dummyPageHolder;
 };
 
 void EventPathTest::SetUp()
diff --git a/third_party/WebKit/Source/core/events/EventQueue.h b/third_party/WebKit/Source/core/events/EventQueue.h
index 1ac313cd..b7beffb 100644
--- a/third_party/WebKit/Source/core/events/EventQueue.h
+++ b/third_party/WebKit/Source/core/events/EventQueue.h
@@ -31,7 +31,6 @@
 #include "platform/heap/Handle.h"
 #include "wtf/HashMap.h"
 #include "wtf/HashSet.h"
-#include "wtf/PassOwnPtr.h"
 
 namespace blink {
 
diff --git a/third_party/WebKit/Source/core/events/EventTarget.cpp b/third_party/WebKit/Source/core/events/EventTarget.cpp
index 21ee9c2..a7115074 100644
--- a/third_party/WebKit/Source/core/events/EventTarget.cpp
+++ b/third_party/WebKit/Source/core/events/EventTarget.cpp
@@ -46,9 +46,11 @@
 #include "core/inspector/ConsoleMessage.h"
 #include "core/inspector/InspectorInstrumentation.h"
 #include "platform/EventDispatchForbiddenScope.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/StdLibExtras.h"
 #include "wtf/Threading.h"
 #include "wtf/Vector.h"
+#include <memory>
 
 using namespace WTF;
 
@@ -107,7 +109,7 @@
         event->type().getString().utf8().data(), lround(delayedSeconds * 1000));
 
     v8::Local<v8::Function> function = eventListenerEffectiveFunction(v8Listener->isolate(), handler);
-    OwnPtr<SourceLocation> location = SourceLocation::fromFunction(function);
+    std::unique_ptr<SourceLocation> location = SourceLocation::fromFunction(function);
     ConsoleMessage* message = ConsoleMessage::create(JSMessageSource, WarningMessageLevel, messageText, std::move(location));
     context->addConsoleMessage(message);
     registeredListener->setBlockedEventWarningEmitted();
@@ -552,7 +554,7 @@
     size_t i = 0;
     size_t size = entry.size();
     if (!d->firingEventIterators)
-        d->firingEventIterators = adoptPtr(new FiringEventIteratorVector);
+        d->firingEventIterators = wrapUnique(new FiringEventIteratorVector);
     d->firingEventIterators->append(FiringEventIterator(event->type(), i, size));
 
     double blockedEventThreshold = blockedEventsWarningThreshold(context, event);
diff --git a/third_party/WebKit/Source/core/events/EventTarget.h b/third_party/WebKit/Source/core/events/EventTarget.h
index 56b0544..366bc3f 100644
--- a/third_party/WebKit/Source/core/events/EventTarget.h
+++ b/third_party/WebKit/Source/core/events/EventTarget.h
@@ -44,6 +44,7 @@
 #include "platform/heap/Handle.h"
 #include "wtf/Allocator.h"
 #include "wtf/text/AtomicString.h"
+#include <memory>
 
 namespace blink {
 
@@ -78,7 +79,7 @@
     DECLARE_TRACE();
 
     EventListenerMap eventListenerMap;
-    OwnPtr<FiringEventIteratorVector> firingEventIterators;
+    std::unique_ptr<FiringEventIteratorVector> firingEventIterators;
 };
 
 // This is the base class for all DOM event targets. To make your class an
diff --git a/third_party/WebKit/Source/core/events/GenericEventQueue.h b/third_party/WebKit/Source/core/events/GenericEventQueue.h
index 18fb486..62cd783 100644
--- a/third_party/WebKit/Source/core/events/GenericEventQueue.h
+++ b/third_party/WebKit/Source/core/events/GenericEventQueue.h
@@ -30,7 +30,6 @@
 #include "core/events/EventQueue.h"
 #include "core/events/EventTarget.h"
 #include "platform/Timer.h"
-#include "wtf/PassOwnPtr.h"
 #include "wtf/RefPtr.h"
 #include "wtf/Vector.h"
 
diff --git a/third_party/WebKit/Source/core/events/KeyboardEvent.cpp b/third_party/WebKit/Source/core/events/KeyboardEvent.cpp
index 146800f..9d4f92f4 100644
--- a/third_party/WebKit/Source/core/events/KeyboardEvent.cpp
+++ b/third_party/WebKit/Source/core/events/KeyboardEvent.cpp
@@ -26,6 +26,7 @@
 #include "bindings/core/v8/ScriptState.h"
 #include "platform/PlatformKeyboardEvent.h"
 #include "platform/WindowsKeyboardCodes.h"
+#include "wtf/PtrUtil.h"
 
 namespace blink {
 
@@ -73,7 +74,7 @@
 
 KeyboardEvent::KeyboardEvent(const PlatformKeyboardEvent& key, AbstractView* view)
     : UIEventWithKeyState(eventTypeForKeyboardEventType(key.type()), true, true, view, 0, key.getModifiers(), key.timestamp(), InputDeviceCapabilities::doesntFireTouchEventsSourceCapabilities())
-    , m_keyEvent(adoptPtr(new PlatformKeyboardEvent(key)))
+    , m_keyEvent(wrapUnique(new PlatformKeyboardEvent(key)))
     , m_keyIdentifier(key.keyIdentifier())
     , m_code(key.code())
     , m_key(key.key())
diff --git a/third_party/WebKit/Source/core/events/KeyboardEvent.h b/third_party/WebKit/Source/core/events/KeyboardEvent.h
index e3f075e..c1f97456 100644
--- a/third_party/WebKit/Source/core/events/KeyboardEvent.h
+++ b/third_party/WebKit/Source/core/events/KeyboardEvent.h
@@ -27,6 +27,7 @@
 #include "core/CoreExport.h"
 #include "core/events/KeyboardEventInit.h"
 #include "core/events/UIEventWithKeyState.h"
+#include <memory>
 
 namespace blink {
 
@@ -97,7 +98,7 @@
 
     void initLocationModifiers(unsigned location);
 
-    OwnPtr<PlatformKeyboardEvent> m_keyEvent;
+    std::unique_ptr<PlatformKeyboardEvent> m_keyEvent;
     String m_keyIdentifier;
     String m_code;
     String m_key;
diff --git a/third_party/WebKit/Source/core/events/MessageEvent.cpp b/third_party/WebKit/Source/core/events/MessageEvent.cpp
index 8a0aa5d..0966e17 100644
--- a/third_party/WebKit/Source/core/events/MessageEvent.cpp
+++ b/third_party/WebKit/Source/core/events/MessageEvent.cpp
@@ -31,6 +31,7 @@
 #include "bindings/core/v8/ExceptionState.h"
 #include "bindings/core/v8/V8ArrayBuffer.h"
 #include "bindings/core/v8/V8PrivateProperty.h"
+#include <memory>
 
 namespace blink {
 
@@ -87,7 +88,7 @@
     ASSERT(isValidSource(m_source.get()));
 }
 
-MessageEvent::MessageEvent(PassRefPtr<SerializedScriptValue> data, const String& origin, const String& lastEventId, EventTarget* source, PassOwnPtr<MessagePortChannelArray> channels, const String& suborigin)
+MessageEvent::MessageEvent(PassRefPtr<SerializedScriptValue> data, const String& origin, const String& lastEventId, EventTarget* source, std::unique_ptr<MessagePortChannelArray> channels, const String& suborigin)
     : Event(EventTypeNames::message, false, false)
     , m_dataType(DataTypeSerializedScriptValue)
     , m_dataAsSerializedScriptValue(data)
diff --git a/third_party/WebKit/Source/core/events/MessageEvent.h b/third_party/WebKit/Source/core/events/MessageEvent.h
index 1f961bec..b338c11 100644
--- a/third_party/WebKit/Source/core/events/MessageEvent.h
+++ b/third_party/WebKit/Source/core/events/MessageEvent.h
@@ -37,6 +37,7 @@
 #include "core/events/MessageEventInit.h"
 #include "core/fileapi/Blob.h"
 #include "core/frame/DOMWindow.h"
+#include <memory>
 
 namespace blink {
 
@@ -55,7 +56,7 @@
     {
         return new MessageEvent(data, origin, lastEventId, source, ports, suborigin);
     }
-    static MessageEvent* create(PassOwnPtr<MessagePortChannelArray> channels, PassRefPtr<SerializedScriptValue> data, const String& origin = String(), const String& lastEventId = String(), EventTarget* source = nullptr, const String& suborigin = String())
+    static MessageEvent* create(std::unique_ptr<MessagePortChannelArray> channels, PassRefPtr<SerializedScriptValue> data, const String& origin = String(), const String& lastEventId = String(), EventTarget* source = nullptr, const String& suborigin = String())
     {
         return new MessageEvent(data, origin, lastEventId, source, std::move(channels), suborigin);
     }
@@ -118,7 +119,7 @@
     MessageEvent(const AtomicString&, const MessageEventInit&);
     MessageEvent(const String& origin, const String& lastEventId, EventTarget* source, MessagePortArray*, const String& suborigin);
     MessageEvent(PassRefPtr<SerializedScriptValue> data, const String& origin, const String& lastEventId, EventTarget* source, MessagePortArray*, const String& suborigin);
-    MessageEvent(PassRefPtr<SerializedScriptValue> data, const String& origin, const String& lastEventId, EventTarget* source, PassOwnPtr<MessagePortChannelArray>, const String& suborigin);
+    MessageEvent(PassRefPtr<SerializedScriptValue> data, const String& origin, const String& lastEventId, EventTarget* source, std::unique_ptr<MessagePortChannelArray>, const String& suborigin);
 
     MessageEvent(const String& data, const String& origin, const String& suborigin);
     MessageEvent(Blob* data, const String& origin, const String& suborigin);
@@ -137,7 +138,7 @@
     // the MessageChannels in a disentangled state. Only one of them can be
     // non-empty at a time. entangleMessagePorts() moves between the states.
     Member<MessagePortArray> m_ports;
-    OwnPtr<MessagePortChannelArray> m_channels;
+    std::unique_ptr<MessagePortChannelArray> m_channels;
     String m_suborigin;
 };
 
diff --git a/third_party/WebKit/Source/core/events/ScopedEventQueue.cpp b/third_party/WebKit/Source/core/events/ScopedEventQueue.cpp
index c514ec67..ea6b553 100644
--- a/third_party/WebKit/Source/core/events/ScopedEventQueue.cpp
+++ b/third_party/WebKit/Source/core/events/ScopedEventQueue.cpp
@@ -34,7 +34,8 @@
 #include "core/events/EventDispatchMediator.h"
 #include "core/events/EventDispatcher.h"
 #include "core/events/EventTarget.h"
-#include "wtf/OwnPtr.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
@@ -54,8 +55,8 @@
 void ScopedEventQueue::initialize()
 {
     ASSERT(!s_instance);
-    OwnPtr<ScopedEventQueue> instance = adoptPtr(new ScopedEventQueue);
-    s_instance = instance.leakPtr();
+    std::unique_ptr<ScopedEventQueue> instance = wrapUnique(new ScopedEventQueue);
+    s_instance = instance.release();
 }
 
 void ScopedEventQueue::enqueueEventDispatchMediator(EventDispatchMediator* mediator)
diff --git a/third_party/WebKit/Source/core/fetch/CachingCorrectnessTest.cpp b/third_party/WebKit/Source/core/fetch/CachingCorrectnessTest.cpp
index 2d7cbb0..fb03c6c6 100644
--- a/third_party/WebKit/Source/core/fetch/CachingCorrectnessTest.cpp
+++ b/third_party/WebKit/Source/core/fetch/CachingCorrectnessTest.cpp
@@ -36,7 +36,6 @@
 #include "core/fetch/ResourceFetcher.h"
 #include "platform/network/ResourceRequest.h"
 #include "testing/gtest/include/gtest/gtest.h"
-#include "wtf/OwnPtr.h"
 #include "wtf/RefPtr.h"
 
 namespace blink {
diff --git a/third_party/WebKit/Source/core/fetch/CrossOriginAccessControl.cpp b/third_party/WebKit/Source/core/fetch/CrossOriginAccessControl.cpp
index 267e0d9..d302bcaf 100644
--- a/third_party/WebKit/Source/core/fetch/CrossOriginAccessControl.cpp
+++ b/third_party/WebKit/Source/core/fetch/CrossOriginAccessControl.cpp
@@ -34,16 +34,18 @@
 #include "platform/network/ResourceResponse.h"
 #include "platform/weborigin/SchemeRegistry.h"
 #include "platform/weborigin/SecurityOrigin.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/Threading.h"
 #include "wtf/text/AtomicString.h"
 #include "wtf/text/StringBuilder.h"
 #include <algorithm>
+#include <memory>
 
 namespace blink {
 
-static PassOwnPtr<HTTPHeaderSet> createAllowedCrossOriginResponseHeadersSet()
+static std::unique_ptr<HTTPHeaderSet> createAllowedCrossOriginResponseHeadersSet()
 {
-    OwnPtr<HTTPHeaderSet> headerSet = adoptPtr(new HashSet<String, CaseFoldingHash>);
+    std::unique_ptr<HTTPHeaderSet> headerSet = wrapUnique(new HashSet<String, CaseFoldingHash>);
 
     headerSet->add("cache-control");
     headerSet->add("content-language");
@@ -57,7 +59,7 @@
 
 bool isOnAccessControlResponseHeaderWhitelist(const String& name)
 {
-    DEFINE_THREAD_SAFE_STATIC_LOCAL(HTTPHeaderSet, allowedCrossOriginResponseHeaders, (createAllowedCrossOriginResponseHeadersSet().leakPtr()));
+    DEFINE_THREAD_SAFE_STATIC_LOCAL(HTTPHeaderSet, allowedCrossOriginResponseHeaders, (createAllowedCrossOriginResponseHeadersSet().release()));
 
     return allowedCrossOriginResponseHeaders.contains(name);
 }
diff --git a/third_party/WebKit/Source/core/fetch/DocumentResource.h b/third_party/WebKit/Source/core/fetch/DocumentResource.h
index 68027484..ea70a68 100644
--- a/third_party/WebKit/Source/core/fetch/DocumentResource.h
+++ b/third_party/WebKit/Source/core/fetch/DocumentResource.h
@@ -27,6 +27,7 @@
 #include "core/fetch/ResourceClient.h"
 #include "core/html/parser/TextResourceDecoder.h"
 #include "platform/heap/Handle.h"
+#include <memory>
 
 namespace blink {
 
@@ -65,7 +66,7 @@
     Document* createDocument(const KURL&);
 
     Member<Document> m_document;
-    OwnPtr<TextResourceDecoder> m_decoder;
+    std::unique_ptr<TextResourceDecoder> m_decoder;
 };
 
 DEFINE_TYPE_CASTS(DocumentResource, Resource, resource, resource->getType() == Resource::SVGDocument, resource.getType() == Resource::SVGDocument);
diff --git a/third_party/WebKit/Source/core/fetch/FontResource.h b/third_party/WebKit/Source/core/fetch/FontResource.h
index 27ceeb7..6b8eb95a 100644
--- a/third_party/WebKit/Source/core/fetch/FontResource.h
+++ b/third_party/WebKit/Source/core/fetch/FontResource.h
@@ -31,7 +31,7 @@
 #include "platform/Timer.h"
 #include "platform/fonts/FontOrientation.h"
 #include "platform/heap/Handle.h"
-#include "wtf/OwnPtr.h"
+#include <memory>
 
 namespace blink {
 
@@ -84,7 +84,7 @@
 
     enum LoadLimitState { UnderLimit, ShortLimitExceeded, LongLimitExceeded };
 
-    OwnPtr<FontCustomPlatformData> m_fontData;
+    std::unique_ptr<FontCustomPlatformData> m_fontData;
     String m_otsParsingMessage;
     LoadLimitState m_loadLimitState;
     bool m_corsFailed;
diff --git a/third_party/WebKit/Source/core/fetch/ImageResource.cpp b/third_party/WebKit/Source/core/fetch/ImageResource.cpp
index 827f4c9..9d49d11 100644
--- a/third_party/WebKit/Source/core/fetch/ImageResource.cpp
+++ b/third_party/WebKit/Source/core/fetch/ImageResource.cpp
@@ -39,6 +39,7 @@
 #include "public/platform/WebCachePolicy.h"
 #include "wtf/CurrentTime.h"
 #include "wtf/StdLibExtras.h"
+#include <memory>
 
 namespace blink {
 
@@ -406,7 +407,7 @@
     notifyObservers();
 }
 
-void ImageResource::responseReceived(const ResourceResponse& response, PassOwnPtr<WebDataConsumerHandle> handle)
+void ImageResource::responseReceived(const ResourceResponse& response, std::unique_ptr<WebDataConsumerHandle> handle)
 {
     ASSERT(!handle);
     ASSERT(!m_multipartParser);
diff --git a/third_party/WebKit/Source/core/fetch/ImageResource.h b/third_party/WebKit/Source/core/fetch/ImageResource.h
index 8ab5b6d1..a0962d9 100644
--- a/third_party/WebKit/Source/core/fetch/ImageResource.h
+++ b/third_party/WebKit/Source/core/fetch/ImageResource.h
@@ -32,6 +32,7 @@
 #include "platform/graphics/ImageObserver.h"
 #include "platform/graphics/ImageOrientation.h"
 #include "wtf/HashMap.h"
+#include <memory>
 
 namespace blink {
 
@@ -100,7 +101,7 @@
 
     void appendData(const char*, size_t) override;
     void error(const ResourceError&) override;
-    void responseReceived(const ResourceResponse&, PassOwnPtr<WebDataConsumerHandle>) override;
+    void responseReceived(const ResourceResponse&, std::unique_ptr<WebDataConsumerHandle>) override;
     void finish(double finishTime = 0.0) override;
 
     // For compatibility, images keep loading even if there are HTTP errors.
diff --git a/third_party/WebKit/Source/core/fetch/ImageResourceTest.cpp b/third_party/WebKit/Source/core/fetch/ImageResourceTest.cpp
index 3224ca7..6754c1d 100644
--- a/third_party/WebKit/Source/core/fetch/ImageResourceTest.cpp
+++ b/third_party/WebKit/Source/core/fetch/ImageResourceTest.cpp
@@ -45,6 +45,8 @@
 #include "public/platform/WebURLLoaderMockFactory.h"
 #include "public/platform/WebURLResponse.h"
 #include "testing/gtest/include/gtest/gtest.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
@@ -108,10 +110,10 @@
 
 private:
     ImageResourceTestMockFetchContext()
-        :  m_runner(adoptPtr(new MockTaskRunner))
+        :  m_runner(wrapUnique(new MockTaskRunner))
     { }
 
-    OwnPtr<MockTaskRunner> m_runner;
+    std::unique_ptr<MockTaskRunner> m_runner;
 };
 
 TEST(ImageResourceTest, MultipartImage)
diff --git a/third_party/WebKit/Source/core/fetch/MemoryCacheTest.cpp b/third_party/WebKit/Source/core/fetch/MemoryCacheTest.cpp
index a66426a3..f029b62 100644
--- a/third_party/WebKit/Source/core/fetch/MemoryCacheTest.cpp
+++ b/third_party/WebKit/Source/core/fetch/MemoryCacheTest.cpp
@@ -36,7 +36,6 @@
 #include "platform/testing/UnitTestHelpers.h"
 #include "public/platform/Platform.h"
 #include "testing/gtest/include/gtest/gtest.h"
-#include "wtf/OwnPtr.h"
 
 namespace blink {
 
diff --git a/third_party/WebKit/Source/core/fetch/RawResource.cpp b/third_party/WebKit/Source/core/fetch/RawResource.cpp
index 37c225d..d6cfe576 100644
--- a/third_party/WebKit/Source/core/fetch/RawResource.cpp
+++ b/third_party/WebKit/Source/core/fetch/RawResource.cpp
@@ -31,6 +31,7 @@
 #include "core/fetch/ResourceFetcher.h"
 #include "core/fetch/ResourceLoader.h"
 #include "platform/HTTPNames.h"
+#include <memory>
 
 namespace blink {
 
@@ -142,7 +143,7 @@
         c->redirectBlocked();
 }
 
-void RawResource::responseReceived(const ResourceResponse& response, PassOwnPtr<WebDataConsumerHandle> handle)
+void RawResource::responseReceived(const ResourceResponse& response, std::unique_ptr<WebDataConsumerHandle> handle)
 {
     bool isSuccessfulRevalidation = isCacheValidator() && response.httpStatusCode() == 304;
     Resource::responseReceived(response, nullptr);
diff --git a/third_party/WebKit/Source/core/fetch/RawResource.h b/third_party/WebKit/Source/core/fetch/RawResource.h
index 84b7026..a2328a2 100644
--- a/third_party/WebKit/Source/core/fetch/RawResource.h
+++ b/third_party/WebKit/Source/core/fetch/RawResource.h
@@ -27,8 +27,8 @@
 #include "core/fetch/Resource.h"
 #include "core/fetch/ResourceClient.h"
 #include "public/platform/WebDataConsumerHandle.h"
-#include "wtf/PassOwnPtr.h"
 #include "wtf/WeakPtr.h"
+#include <memory>
 
 namespace blink {
 class FetchRequest;
@@ -82,7 +82,7 @@
 
     void willFollowRedirect(ResourceRequest&, const ResourceResponse&) override;
     void willNotFollowRedirect() override;
-    void responseReceived(const ResourceResponse&, PassOwnPtr<WebDataConsumerHandle>) override;
+    void responseReceived(const ResourceResponse&, std::unique_ptr<WebDataConsumerHandle>) override;
     void setSerializedCachedMetadata(const char*, size_t) override;
     void didSendData(unsigned long long bytesSent, unsigned long long totalBytesToBeSent) override;
     void didDownloadData(int) override;
@@ -112,7 +112,7 @@
     ResourceClientType getResourceClientType() const final { return RawResourceType; }
 
     virtual void dataSent(Resource*, unsigned long long /* bytesSent */, unsigned long long /* totalBytesToBeSent */) { }
-    virtual void responseReceived(Resource*, const ResourceResponse&, PassOwnPtr<WebDataConsumerHandle>) { }
+    virtual void responseReceived(Resource*, const ResourceResponse&, std::unique_ptr<WebDataConsumerHandle>) { }
     virtual void setSerializedCachedMetadata(Resource*, const char*, size_t) { }
     virtual void dataReceived(Resource*, const char* /* data */, size_t /* length */) { }
     virtual void redirectReceived(Resource*, ResourceRequest&, const ResourceResponse&) { }
diff --git a/third_party/WebKit/Source/core/fetch/Resource.cpp b/third_party/WebKit/Source/core/fetch/Resource.cpp
index c481de0..20b69e38 100644
--- a/third_party/WebKit/Source/core/fetch/Resource.cpp
+++ b/third_party/WebKit/Source/core/fetch/Resource.cpp
@@ -48,6 +48,7 @@
 #include "wtf/text/CString.h"
 #include "wtf/text/StringBuilder.h"
 #include <algorithm>
+#include <memory>
 
 namespace blink {
 
@@ -236,7 +237,7 @@
     ResourceCallback();
 
     void runTask();
-    OwnPtr<CancellableTaskFactory> m_callbackTaskFactory;
+    std::unique_ptr<CancellableTaskFactory> m_callbackTaskFactory;
     HeapHashSet<Member<Resource>> m_resourcesWithPendingClients;
 };
 
@@ -567,7 +568,7 @@
     return true;
 }
 
-void Resource::responseReceived(const ResourceResponse& response, PassOwnPtr<WebDataConsumerHandle>)
+void Resource::responseReceived(const ResourceResponse& response, std::unique_ptr<WebDataConsumerHandle>)
 {
     m_responseTimestamp = currentTime();
     if (m_preloadDiscoveryTime) {
diff --git a/third_party/WebKit/Source/core/fetch/Resource.h b/third_party/WebKit/Source/core/fetch/Resource.h
index c524d3b..36a1f2a 100644
--- a/third_party/WebKit/Source/core/fetch/Resource.h
+++ b/third_party/WebKit/Source/core/fetch/Resource.h
@@ -37,8 +37,8 @@
 #include "wtf/Allocator.h"
 #include "wtf/HashCountedSet.h"
 #include "wtf/HashSet.h"
-#include "wtf/OwnPtr.h"
 #include "wtf/text/WTFString.h"
+#include <memory>
 
 namespace blink {
 
@@ -181,7 +181,7 @@
     // already been made to not follow it.
     virtual void willNotFollowRedirect() {}
 
-    virtual void responseReceived(const ResourceResponse&, PassOwnPtr<WebDataConsumerHandle>);
+    virtual void responseReceived(const ResourceResponse&, std::unique_ptr<WebDataConsumerHandle>);
     void setResponse(const ResourceResponse&);
     const ResourceResponse& response() const { return m_response; }
 
diff --git a/third_party/WebKit/Source/core/fetch/ResourceFetcher.cpp b/third_party/WebKit/Source/core/fetch/ResourceFetcher.cpp
index 554ef07..2a8f5d8b 100644
--- a/third_party/WebKit/Source/core/fetch/ResourceFetcher.cpp
+++ b/third_party/WebKit/Source/core/fetch/ResourceFetcher.cpp
@@ -52,6 +52,7 @@
 #include "public/platform/WebURLRequest.h"
 #include "wtf/text/CString.h"
 #include "wtf/text/WTFString.h"
+#include <memory>
 
 using blink::WebURLRequest;
 
@@ -292,7 +293,7 @@
 
     if (type == ResourceLoadingFromCache && !resource->stillNeedsLoad() && !m_validatedURLs.contains(request.resourceRequest().url())) {
         // Resources loaded from memory cache should be reported the first time they're used.
-        OwnPtr<ResourceTimingInfo> info = ResourceTimingInfo::create(request.options().initiatorInfo.name, monotonicallyIncreasingTime(), resource->getType() == Resource::MainResource);
+        std::unique_ptr<ResourceTimingInfo> info = ResourceTimingInfo::create(request.options().initiatorInfo.name, monotonicallyIncreasingTime(), resource->getType() == Resource::MainResource);
         populateResourceTiming(info.get(), resource);
         info->clearLoadTimings();
         info->setLoadFinishTime(info->initialTime());
@@ -307,9 +308,9 @@
     m_validatedURLs.add(request.resourceRequest().url());
 }
 
-static PassOwnPtr<TracedValue> urlForTraceEvent(const KURL& url)
+static std::unique_ptr<TracedValue> urlForTraceEvent(const KURL& url)
 {
-    OwnPtr<TracedValue> value = TracedValue::create();
+    std::unique_ptr<TracedValue> value = TracedValue::create();
     value->setString("url", url.getString());
     return value;
 }
@@ -524,7 +525,7 @@
 void ResourceFetcher::resourceTimingReportTimerFired(Timer<ResourceFetcher>* timer)
 {
     ASSERT_UNUSED(timer, timer == &m_resourceTimingReportTimer);
-    Vector<OwnPtr<ResourceTimingInfo>> timingReports;
+    Vector<std::unique_ptr<ResourceTimingInfo>> timingReports;
     timingReports.swap(m_scheduledResourceTimingReports);
     for (const auto& timingInfo : timingReports)
         context().addResourceTiming(*timingInfo);
@@ -609,7 +610,7 @@
         return;
 
     bool isMainResource = resource->getType() == Resource::MainResource;
-    OwnPtr<ResourceTimingInfo> info = ResourceTimingInfo::create(fetchInitiator, monotonicallyIncreasingTime(), isMainResource);
+    std::unique_ptr<ResourceTimingInfo> info = ResourceTimingInfo::create(fetchInitiator, monotonicallyIncreasingTime(), isMainResource);
 
     if (resource->isCacheValidator()) {
         const AtomicString& timingAllowOrigin = resource->response().httpHeaderField(HTTPNames::Timing_Allow_Origin);
@@ -911,7 +912,7 @@
     DCHECK(!m_loaders.contains(resource->loader()));
     DCHECK(finishReason == DidFinishFirstPartInMultipart || !m_nonBlockingLoaders.contains(resource->loader()));
 
-    if (OwnPtr<ResourceTimingInfo> info = m_resourceTimingInfoMap.take(resource)) {
+    if (std::unique_ptr<ResourceTimingInfo> info = m_resourceTimingInfoMap.take(resource)) {
         if (resource->response().isHTTP() && resource->response().httpStatusCode() < 400) {
             populateResourceTiming(info.get(), resource);
             info->setLoadFinishTime(finishTime);
diff --git a/third_party/WebKit/Source/core/fetch/ResourceFetcher.h b/third_party/WebKit/Source/core/fetch/ResourceFetcher.h
index 31a65ed..faad67c 100644
--- a/third_party/WebKit/Source/core/fetch/ResourceFetcher.h
+++ b/third_party/WebKit/Source/core/fetch/ResourceFetcher.h
@@ -42,6 +42,7 @@
 #include "wtf/HashSet.h"
 #include "wtf/ListHashSet.h"
 #include "wtf/text/StringHash.h"
+#include <memory>
 
 namespace blink {
 
@@ -189,10 +190,10 @@
 
     Timer<ResourceFetcher> m_resourceTimingReportTimer;
 
-    using ResourceTimingInfoMap = HeapHashMap<Member<Resource>, OwnPtr<ResourceTimingInfo>>;
+    using ResourceTimingInfoMap = HeapHashMap<Member<Resource>, std::unique_ptr<ResourceTimingInfo>>;
     ResourceTimingInfoMap m_resourceTimingInfoMap;
 
-    Vector<OwnPtr<ResourceTimingInfo>> m_scheduledResourceTimingReports;
+    Vector<std::unique_ptr<ResourceTimingInfo>> m_scheduledResourceTimingReports;
 
     ResourceLoaderSet m_loaders;
     ResourceLoaderSet m_nonBlockingLoaders;
diff --git a/third_party/WebKit/Source/core/fetch/ResourceFetcherTest.cpp b/third_party/WebKit/Source/core/fetch/ResourceFetcherTest.cpp
index f230f79..b17a699 100644
--- a/third_party/WebKit/Source/core/fetch/ResourceFetcherTest.cpp
+++ b/third_party/WebKit/Source/core/fetch/ResourceFetcherTest.cpp
@@ -46,6 +46,8 @@
 #include "public/platform/WebURLLoaderMockFactory.h"
 #include "public/platform/WebURLResponse.h"
 #include "testing/gtest/include/gtest/gtest.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
@@ -83,12 +85,12 @@
 private:
     ResourceFetcherTestMockFetchContext()
         : m_policy(CachePolicyVerify)
-        , m_runner(adoptPtr(new MockTaskRunner))
+        , m_runner(wrapUnique(new MockTaskRunner))
         , m_complete(false)
     { }
 
     CachePolicy m_policy;
-    OwnPtr<MockTaskRunner> m_runner;
+    std::unique_ptr<MockTaskRunner> m_runner;
     bool m_complete;
 };
 
@@ -354,7 +356,7 @@
     // No callbacks should be received except for the notifyFinished()
     // triggered by ResourceLoader::cancel().
     void dataSent(Resource*, unsigned long long, unsigned long long) override { ASSERT_TRUE(false); }
-    void responseReceived(Resource*, const ResourceResponse&, PassOwnPtr<WebDataConsumerHandle>) override { ASSERT_TRUE(false); }
+    void responseReceived(Resource*, const ResourceResponse&, std::unique_ptr<WebDataConsumerHandle>) override { ASSERT_TRUE(false); }
     void setSerializedCachedMetadata(Resource*, const char*, size_t) override { ASSERT_TRUE(false); }
     void dataReceived(Resource*, const char*, size_t) override { ASSERT_TRUE(false); }
     void redirectReceived(Resource*, ResourceRequest&, const ResourceResponse&) override { ASSERT_TRUE(false); }
diff --git a/third_party/WebKit/Source/core/fetch/ResourceLoader.cpp b/third_party/WebKit/Source/core/fetch/ResourceLoader.cpp
index 4b28e5c..2be163c8 100644
--- a/third_party/WebKit/Source/core/fetch/ResourceLoader.cpp
+++ b/third_party/WebKit/Source/core/fetch/ResourceLoader.cpp
@@ -44,6 +44,8 @@
 #include "public/platform/WebURLResponse.h"
 #include "wtf/Assertions.h"
 #include "wtf/CurrentTime.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
@@ -80,7 +82,7 @@
         return;
     }
 
-    m_loader = adoptPtr(Platform::current()->createURLLoader());
+    m_loader = wrapUnique(Platform::current()->createURLLoader());
     m_loader->setDefersLoading(defersLoading);
     ASSERT(m_loader);
     m_loader->setLoadingTaskRunner(loadingTaskRunner);
@@ -152,14 +154,14 @@
 {
     ASSERT(!response.isNull());
     // |rawHandle|'s ownership is transferred to the callee.
-    OwnPtr<WebDataConsumerHandle> handle = adoptPtr(rawHandle);
+    std::unique_ptr<WebDataConsumerHandle> handle = wrapUnique(rawHandle);
     const ResourceResponse& resourceResponse = response.toResourceResponse();
 
     if (responseNeedsAccessControlCheck()) {
         if (response.wasFetchedViaServiceWorker()) {
             if (response.wasFallbackRequiredByServiceWorker()) {
                 m_loader.reset();
-                m_loader = adoptPtr(Platform::current()->createURLLoader());
+                m_loader = wrapUnique(Platform::current()->createURLLoader());
                 ASSERT(m_loader);
                 ResourceRequest request = m_resource->lastResourceRequest();
                 ASSERT(!request.skipServiceWorker());
diff --git a/third_party/WebKit/Source/core/fetch/ResourceLoader.h b/third_party/WebKit/Source/core/fetch/ResourceLoader.h
index 80eb85d..d8f6395 100644
--- a/third_party/WebKit/Source/core/fetch/ResourceLoader.h
+++ b/third_party/WebKit/Source/core/fetch/ResourceLoader.h
@@ -35,6 +35,7 @@
 #include "public/platform/WebURLLoader.h"
 #include "public/platform/WebURLLoaderClient.h"
 #include "wtf/Forward.h"
+#include <memory>
 
 namespace blink {
 
@@ -87,7 +88,7 @@
 
     bool responseNeedsAccessControlCheck() const;
 
-    OwnPtr<WebURLLoader> m_loader;
+    std::unique_ptr<WebURLLoader> m_loader;
     Member<ResourceFetcher> m_fetcher;
     Member<Resource> m_resource;
 };
diff --git a/third_party/WebKit/Source/core/fetch/TextResource.h b/third_party/WebKit/Source/core/fetch/TextResource.h
index a412f16..075f241 100644
--- a/third_party/WebKit/Source/core/fetch/TextResource.h
+++ b/third_party/WebKit/Source/core/fetch/TextResource.h
@@ -7,6 +7,7 @@
 
 #include "core/CoreExport.h"
 #include "core/fetch/Resource.h"
+#include <memory>
 
 namespace blink {
 
@@ -26,7 +27,7 @@
     ~TextResource() override;
 
 private:
-    OwnPtr<TextResourceDecoder> m_decoder;
+    std::unique_ptr<TextResourceDecoder> m_decoder;
 };
 
 } // namespace blink
diff --git a/third_party/WebKit/Source/core/fileapi/Blob.cpp b/third_party/WebKit/Source/core/fileapi/Blob.cpp
index 22143b9..57c3b5f1a 100644
--- a/third_party/WebKit/Source/core/fileapi/Blob.cpp
+++ b/third_party/WebKit/Source/core/fileapi/Blob.cpp
@@ -38,6 +38,7 @@
 #include "core/frame/UseCounter.h"
 #include "platform/blob/BlobRegistry.h"
 #include "platform/blob/BlobURL.h"
+#include <memory>
 
 namespace blink {
 
@@ -99,7 +100,7 @@
     if (normalizeLineEndingsToNative)
         UseCounter::count(context, UseCounter::FileAPINativeLineEndings);
 
-    OwnPtr<BlobData> blobData = BlobData::create();
+    std::unique_ptr<BlobData> blobData = BlobData::create();
     blobData->setContentType(options.type().lower());
 
     populateBlobData(blobData.get(), blobParts, normalizeLineEndingsToNative);
@@ -112,7 +113,7 @@
 {
     ASSERT(data);
 
-    OwnPtr<BlobData> blobData = BlobData::create();
+    std::unique_ptr<BlobData> blobData = BlobData::create();
     blobData->setContentType(contentType);
     blobData->appendBytes(data, bytes);
     long long blobSize = blobData->length();
@@ -177,7 +178,7 @@
     clampSliceOffsets(size, start, end);
 
     long long length = end - start;
-    OwnPtr<BlobData> blobData = BlobData::create();
+    std::unique_ptr<BlobData> blobData = BlobData::create();
     blobData->setContentType(contentType);
     blobData->appendBlob(m_blobDataHandle, start, length);
     return Blob::create(BlobDataHandle::create(std::move(blobData), length));
@@ -199,7 +200,7 @@
     // size as zero. Blob and FileReader operations now throws on
     // being passed a Blob in that state. Downstream uses of closed Blobs
     // (e.g., XHR.send()) consider them as empty.
-    OwnPtr<BlobData> blobData = BlobData::create();
+    std::unique_ptr<BlobData> blobData = BlobData::create();
     blobData->setContentType(type());
     m_blobDataHandle = BlobDataHandle::create(std::move(blobData), 0);
     m_isClosed = true;
diff --git a/third_party/WebKit/Source/core/fileapi/File.cpp b/third_party/WebKit/Source/core/fileapi/File.cpp
index 0270cca..e8f41f96 100644
--- a/third_party/WebKit/Source/core/fileapi/File.cpp
+++ b/third_party/WebKit/Source/core/fileapi/File.cpp
@@ -36,6 +36,7 @@
 #include "public/platform/WebFileUtilities.h"
 #include "wtf/CurrentTime.h"
 #include "wtf/DateMath.h"
+#include <memory>
 
 namespace blink {
 
@@ -54,35 +55,35 @@
     return type;
 }
 
-static PassOwnPtr<BlobData> createBlobDataForFileWithType(const String& path, const String& contentType)
+static std::unique_ptr<BlobData> createBlobDataForFileWithType(const String& path, const String& contentType)
 {
-    OwnPtr<BlobData> blobData = BlobData::create();
+    std::unique_ptr<BlobData> blobData = BlobData::create();
     blobData->setContentType(contentType);
     blobData->appendFile(path);
     return blobData;
 }
 
-static PassOwnPtr<BlobData> createBlobDataForFile(const String& path, File::ContentTypeLookupPolicy policy)
+static std::unique_ptr<BlobData> createBlobDataForFile(const String& path, File::ContentTypeLookupPolicy policy)
 {
     return createBlobDataForFileWithType(path, getContentTypeFromFileName(path, policy));
 }
 
-static PassOwnPtr<BlobData> createBlobDataForFileWithName(const String& path, const String& fileSystemName, File::ContentTypeLookupPolicy policy)
+static std::unique_ptr<BlobData> createBlobDataForFileWithName(const String& path, const String& fileSystemName, File::ContentTypeLookupPolicy policy)
 {
     return createBlobDataForFileWithType(path, getContentTypeFromFileName(fileSystemName, policy));
 }
 
-static PassOwnPtr<BlobData> createBlobDataForFileWithMetadata(const String& fileSystemName, const FileMetadata& metadata)
+static std::unique_ptr<BlobData> createBlobDataForFileWithMetadata(const String& fileSystemName, const FileMetadata& metadata)
 {
-    OwnPtr<BlobData> blobData = BlobData::create();
+    std::unique_ptr<BlobData> blobData = BlobData::create();
     blobData->setContentType(getContentTypeFromFileName(fileSystemName, File::WellKnownContentTypes));
     blobData->appendFile(metadata.platformPath, 0, metadata.length, metadata.modificationTime / msPerSecond);
     return blobData;
 }
 
-static PassOwnPtr<BlobData> createBlobDataForFileSystemURL(const KURL& fileSystemURL, const FileMetadata& metadata)
+static std::unique_ptr<BlobData> createBlobDataForFileSystemURL(const KURL& fileSystemURL, const FileMetadata& metadata)
 {
-    OwnPtr<BlobData> blobData = BlobData::create();
+    std::unique_ptr<BlobData> blobData = BlobData::create();
     blobData->setContentType(getContentTypeFromFileName(fileSystemURL.path(), File::WellKnownContentTypes));
     blobData->appendFileSystemURL(fileSystemURL, 0, metadata.length, metadata.modificationTime / msPerSecond);
     return blobData;
@@ -107,7 +108,7 @@
     if (normalizeLineEndingsToNative)
         UseCounter::count(context, UseCounter::FileAPINativeLineEndings);
 
-    OwnPtr<BlobData> blobData = BlobData::create();
+    std::unique_ptr<BlobData> blobData = BlobData::create();
     blobData->setContentType(options.type().lower());
     populateBlobData(blobData.get(), fileBits, normalizeLineEndingsToNative);
 
@@ -277,7 +278,7 @@
     clampSliceOffsets(size, start, end);
 
     long long length = end - start;
-    OwnPtr<BlobData> blobData = BlobData::create();
+    std::unique_ptr<BlobData> blobData = BlobData::create();
     blobData->setContentType(contentType);
     if (!m_fileSystemURL.isEmpty()) {
         blobData->appendFileSystemURL(m_fileSystemURL, start, length, modificationTimeMS / msPerSecond);
diff --git a/third_party/WebKit/Source/core/fileapi/FileReader.h b/third_party/WebKit/Source/core/fileapi/FileReader.h
index 945ef15..de7bee0d 100644
--- a/third_party/WebKit/Source/core/fileapi/FileReader.h
+++ b/third_party/WebKit/Source/core/fileapi/FileReader.h
@@ -40,6 +40,7 @@
 #include "core/fileapi/FileReaderLoaderClient.h"
 #include "platform/heap/Handle.h"
 #include "wtf/Forward.h"
+#include <memory>
 
 namespace blink {
 
@@ -128,7 +129,7 @@
     FileReaderLoader::ReadType m_readType;
     String m_encoding;
 
-    OwnPtr<FileReaderLoader> m_loader;
+    std::unique_ptr<FileReaderLoader> m_loader;
     Member<FileError> m_error;
     double m_lastProgressNotificationTimeMS;
 };
diff --git a/third_party/WebKit/Source/core/fileapi/FileReaderLoader.cpp b/third_party/WebKit/Source/core/fileapi/FileReaderLoader.cpp
index 18c91d8..92af972 100644
--- a/third_party/WebKit/Source/core/fileapi/FileReaderLoader.cpp
+++ b/third_party/WebKit/Source/core/fileapi/FileReaderLoader.cpp
@@ -43,12 +43,13 @@
 #include "platform/network/ResourceRequest.h"
 #include "platform/network/ResourceResponse.h"
 #include "public/platform/WebURLRequest.h"
-#include "wtf/PassOwnPtr.h"
 #include "wtf/PassRefPtr.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/RefPtr.h"
 #include "wtf/Vector.h"
 #include "wtf/text/Base64.h"
 #include "wtf/text/StringBuilder.h"
+#include <memory>
 
 namespace blink {
 
@@ -173,7 +174,7 @@
     }
 }
 
-void FileReaderLoader::didReceiveResponse(unsigned long, const ResourceResponse& response, PassOwnPtr<WebDataConsumerHandle> handle)
+void FileReaderLoader::didReceiveResponse(unsigned long, const ResourceResponse& response, std::unique_ptr<WebDataConsumerHandle> handle)
 {
     ASSERT_UNUSED(handle, !handle);
     if (response.httpStatusCode() != 200) {
@@ -211,9 +212,9 @@
         }
 
         if (initialBufferLength < 0)
-            m_rawData = adoptPtr(new ArrayBufferBuilder());
+            m_rawData = wrapUnique(new ArrayBufferBuilder());
         else
-            m_rawData = adoptPtr(new ArrayBufferBuilder(static_cast<unsigned>(initialBufferLength)));
+            m_rawData = wrapUnique(new ArrayBufferBuilder(static_cast<unsigned>(initialBufferLength)));
 
         if (!m_rawData || !m_rawData->isValid()) {
             failed(FileError::NOT_READABLE_ERR);
diff --git a/third_party/WebKit/Source/core/fileapi/FileReaderLoader.h b/third_party/WebKit/Source/core/fileapi/FileReaderLoader.h
index 66060e0..9d5f453 100644
--- a/third_party/WebKit/Source/core/fileapi/FileReaderLoader.h
+++ b/third_party/WebKit/Source/core/fileapi/FileReaderLoader.h
@@ -36,10 +36,11 @@
 #include "core/loader/ThreadableLoaderClient.h"
 #include "platform/weborigin/KURL.h"
 #include "wtf/Forward.h"
-#include "wtf/OwnPtr.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/text/TextEncoding.h"
 #include "wtf/text/WTFString.h"
 #include "wtf/typed_arrays/ArrayBufferBuilder.h"
+#include <memory>
 
 namespace blink {
 
@@ -63,9 +64,9 @@
     };
 
     // If client is given, do the loading asynchronously. Otherwise, load synchronously.
-    static PassOwnPtr<FileReaderLoader> create(ReadType readType, FileReaderLoaderClient* client)
+    static std::unique_ptr<FileReaderLoader> create(ReadType readType, FileReaderLoaderClient* client)
     {
-        return adoptPtr(new FileReaderLoader(readType, client));
+        return wrapUnique(new FileReaderLoader(readType, client));
     }
 
     FileReaderLoader(ReadType, FileReaderLoaderClient*);
@@ -76,7 +77,7 @@
     void cancel();
 
     // ThreadableLoaderClient
-    void didReceiveResponse(unsigned long, const ResourceResponse&, PassOwnPtr<WebDataConsumerHandle>) override;
+    void didReceiveResponse(unsigned long, const ResourceResponse&, std::unique_ptr<WebDataConsumerHandle>) override;
     void didReceiveData(const char*, unsigned) override;
     void didFinishLoading(unsigned long, double) override;
     void didFail(const ResourceError&) override;
@@ -122,15 +123,15 @@
 
     KURL m_urlForReading;
     bool m_urlForReadingIsStream;
-    OwnPtr<ThreadableLoader> m_loader;
+    std::unique_ptr<ThreadableLoader> m_loader;
 
-    OwnPtr<ArrayBufferBuilder> m_rawData;
+    std::unique_ptr<ArrayBufferBuilder> m_rawData;
     bool m_isRawDataConverted;
 
     String m_stringResult;
 
     // The decoder used to decode the text data.
-    OwnPtr<TextResourceDecoder> m_decoder;
+    std::unique_ptr<TextResourceDecoder> m_decoder;
 
     bool m_finishedLoading;
     long long m_bytesLoaded;
diff --git a/third_party/WebKit/Source/core/frame/DOMTimer.h b/third_party/WebKit/Source/core/frame/DOMTimer.h
index ad00b44..236e9297 100644
--- a/third_party/WebKit/Source/core/frame/DOMTimer.h
+++ b/third_party/WebKit/Source/core/frame/DOMTimer.h
@@ -32,8 +32,6 @@
 #include "core/frame/SuspendableTimer.h"
 #include "platform/UserGestureIndicator.h"
 #include "platform/heap/Handle.h"
-#include "wtf/OwnPtr.h"
-#include "wtf/PassOwnPtr.h"
 #include "wtf/RefPtr.h"
 
 namespace blink {
diff --git a/third_party/WebKit/Source/core/frame/DOMTimerCoordinator.cpp b/third_party/WebKit/Source/core/frame/DOMTimerCoordinator.cpp
index 3f3460e6..e9311351 100644
--- a/third_party/WebKit/Source/core/frame/DOMTimerCoordinator.cpp
+++ b/third_party/WebKit/Source/core/frame/DOMTimerCoordinator.cpp
@@ -7,10 +7,11 @@
 #include "core/dom/ExecutionContext.h"
 #include "core/frame/DOMTimer.h"
 #include <algorithm>
+#include <memory>
 
 namespace blink {
 
-DOMTimerCoordinator::DOMTimerCoordinator(PassOwnPtr<WebTaskRunner> timerTaskRunner)
+DOMTimerCoordinator::DOMTimerCoordinator(std::unique_ptr<WebTaskRunner> timerTaskRunner)
     : m_circularSequentialID(0)
     , m_timerNestingLevel(0)
     , m_timerTaskRunner(std::move(timerTaskRunner))
@@ -61,7 +62,7 @@
     }
 }
 
-void DOMTimerCoordinator::setTimerTaskRunner(PassOwnPtr<WebTaskRunner> timerTaskRunner)
+void DOMTimerCoordinator::setTimerTaskRunner(std::unique_ptr<WebTaskRunner> timerTaskRunner)
 {
     m_timerTaskRunner = std::move(timerTaskRunner);
 }
diff --git a/third_party/WebKit/Source/core/frame/DOMTimerCoordinator.h b/third_party/WebKit/Source/core/frame/DOMTimerCoordinator.h
index e3270fa..a431574 100644
--- a/third_party/WebKit/Source/core/frame/DOMTimerCoordinator.h
+++ b/third_party/WebKit/Source/core/frame/DOMTimerCoordinator.h
@@ -7,7 +7,7 @@
 
 #include "platform/heap/Handle.h"
 #include "wtf/Noncopyable.h"
-#include "wtf/PassOwnPtr.h"
+#include <memory>
 
 namespace blink {
 
@@ -25,7 +25,7 @@
     DISALLOW_NEW();
     WTF_MAKE_NONCOPYABLE(DOMTimerCoordinator);
 public:
-    explicit DOMTimerCoordinator(PassOwnPtr<WebTaskRunner>);
+    explicit DOMTimerCoordinator(std::unique_ptr<WebTaskRunner>);
 
     // Creates and installs a new timer. Returns the assigned ID.
     int installNewTimeout(ExecutionContext*, ScheduledAction*, int timeout, bool singleShot);
@@ -45,7 +45,7 @@
     // deeper timer nesting level, see DOMTimer::DOMTimer.
     void setTimerNestingLevel(int level) { m_timerNestingLevel = level; }
 
-    void setTimerTaskRunner(PassOwnPtr<WebTaskRunner>);
+    void setTimerTaskRunner(std::unique_ptr<WebTaskRunner>);
 
     WebTaskRunner* timerTaskRunner() const { return m_timerTaskRunner.get(); }
 
@@ -59,7 +59,7 @@
 
     int m_circularSequentialID;
     int m_timerNestingLevel;
-    OwnPtr<WebTaskRunner> m_timerTaskRunner;
+    std::unique_ptr<WebTaskRunner> m_timerTaskRunner;
 };
 
 } // namespace blink
diff --git a/third_party/WebKit/Source/core/frame/DOMWindow.cpp b/third_party/WebKit/Source/core/frame/DOMWindow.cpp
index ef72b51..e871c8e 100644
--- a/third_party/WebKit/Source/core/frame/DOMWindow.cpp
+++ b/third_party/WebKit/Source/core/frame/DOMWindow.cpp
@@ -29,6 +29,7 @@
 #include "platform/weborigin/KURL.h"
 #include "platform/weborigin/SecurityOrigin.h"
 #include "platform/weborigin/Suborigin.h"
+#include <memory>
 
 namespace blink {
 
@@ -197,7 +198,7 @@
         }
     }
 
-    OwnPtr<MessagePortChannelArray> channels = MessagePort::disentanglePorts(getExecutionContext(), ports, exceptionState);
+    std::unique_ptr<MessagePortChannelArray> channels = MessagePort::disentanglePorts(getExecutionContext(), ports, exceptionState);
     if (exceptionState.hadException())
         return;
 
diff --git a/third_party/WebKit/Source/core/frame/Frame.cpp b/third_party/WebKit/Source/core/frame/Frame.cpp
index 833e9200..c612285 100644
--- a/third_party/WebKit/Source/core/frame/Frame.cpp
+++ b/third_party/WebKit/Source/core/frame/Frame.cpp
@@ -31,8 +31,8 @@
 
 #include "core/dom/DocumentType.h"
 #include "core/events/Event.h"
-#include "core/frame/LocalDOMWindow.h"
 #include "core/frame/FrameHost.h"
+#include "core/frame/LocalDOMWindow.h"
 #include "core/frame/Settings.h"
 #include "core/html/HTMLFrameElementBase.h"
 #include "core/input/EventHandler.h"
@@ -45,7 +45,6 @@
 #include "core/page/Page.h"
 #include "platform/Histogram.h"
 #include "platform/UserGestureIndicator.h"
-#include "wtf/PassOwnPtr.h"
 
 namespace blink {
 
diff --git a/third_party/WebKit/Source/core/frame/FrameConsole.cpp b/third_party/WebKit/Source/core/frame/FrameConsole.cpp
index 2faacc3..ab36bd3 100644
--- a/third_party/WebKit/Source/core/frame/FrameConsole.cpp
+++ b/third_party/WebKit/Source/core/frame/FrameConsole.cpp
@@ -38,6 +38,7 @@
 #include "platform/network/ResourceError.h"
 #include "platform/network/ResourceResponse.h"
 #include "wtf/text/StringBuilder.h"
+#include <memory>
 
 namespace blink {
 
@@ -81,7 +82,7 @@
         if (!frame().host())
             return;
         if (frame().chromeClient().shouldReportDetailedMessageForSource(frame(), url)) {
-            OwnPtr<SourceLocation> location = SourceLocation::captureWithFullStackTrace();
+            std::unique_ptr<SourceLocation> location = SourceLocation::captureWithFullStackTrace();
             if (!location->isUnknown())
                 stackTrace = location->toString();
         }
diff --git a/third_party/WebKit/Source/core/frame/FrameConsole.h b/third_party/WebKit/Source/core/frame/FrameConsole.h
index 7024c16..e3797ad 100644
--- a/third_party/WebKit/Source/core/frame/FrameConsole.h
+++ b/third_party/WebKit/Source/core/frame/FrameConsole.h
@@ -33,7 +33,6 @@
 #include "core/CoreExport.h"
 #include "platform/heap/Handle.h"
 #include "wtf/Forward.h"
-#include "wtf/PassOwnPtr.h"
 
 namespace blink {
 
diff --git a/third_party/WebKit/Source/core/frame/FrameHost.h b/third_party/WebKit/Source/core/frame/FrameHost.h
index b3685b97..1a44fcc 100644
--- a/third_party/WebKit/Source/core/frame/FrameHost.h
+++ b/third_party/WebKit/Source/core/frame/FrameHost.h
@@ -35,9 +35,8 @@
 #include "platform/heap/Handle.h"
 #include "wtf/Allocator.h"
 #include "wtf/Noncopyable.h"
-#include "wtf/OwnPtr.h"
-#include "wtf/PassOwnPtr.h"
 #include "wtf/text/AtomicString.h"
+#include <memory>
 
 namespace blink {
 
@@ -140,7 +139,7 @@
 
     const Member<Page> m_page;
     const Member<TopControls> m_topControls;
-    const OwnPtr<PageScaleConstraintsSet> m_pageScaleConstraintsSet;
+    const std::unique_ptr<PageScaleConstraintsSet> m_pageScaleConstraintsSet;
     const Member<VisualViewport> m_visualViewport;
     const Member<OverscrollController> m_overscrollController;
     const Member<EventHandlerRegistry> m_eventHandlerRegistry;
diff --git a/third_party/WebKit/Source/core/frame/FrameSerializer.cpp b/third_party/WebKit/Source/core/frame/FrameSerializer.cpp
index 9babd85..a8626c6 100644
--- a/third_party/WebKit/Source/core/frame/FrameSerializer.cpp
+++ b/third_party/WebKit/Source/core/frame/FrameSerializer.cpp
@@ -63,7 +63,6 @@
 #include "platform/graphics/Image.h"
 #include "platform/heap/Handle.h"
 #include "wtf/HashSet.h"
-#include "wtf/OwnPtr.h"
 #include "wtf/text/CString.h"
 #include "wtf/text/StringBuilder.h"
 #include "wtf/text/TextEncoding.h"
diff --git a/third_party/WebKit/Source/core/frame/FrameView.cpp b/third_party/WebKit/Source/core/frame/FrameView.cpp
index ad346da..c6270646 100644
--- a/third_party/WebKit/Source/core/frame/FrameView.cpp
+++ b/third_party/WebKit/Source/core/frame/FrameView.cpp
@@ -108,8 +108,10 @@
 #include "public/platform/WebDisplayItemList.h"
 #include "public/platform/WebFrameScheduler.h"
 #include "wtf/CurrentTime.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/StdLibExtras.h"
 #include "wtf/TemporaryChange.h"
+#include <memory>
 
 namespace blink {
 
@@ -220,7 +222,7 @@
     m_safeToPropagateScrollToParent = true;
     m_lastViewportSize = IntSize();
     m_lastZoomFactor = 1.0f;
-    m_trackedObjectPaintInvalidations = adoptPtr(s_initialTrackAllPaintInvalidations ? new Vector<ObjectPaintInvalidation> : nullptr);
+    m_trackedObjectPaintInvalidations = wrapUnique(s_initialTrackAllPaintInvalidations ? new Vector<ObjectPaintInvalidation> : nullptr);
     m_visuallyNonEmptyCharacterCount = 0;
     m_visuallyNonEmptyPixelCount = 0;
     m_isVisuallyNonEmpty = false;
@@ -835,15 +837,15 @@
         return;
     }
     if (!m_analyzer)
-        m_analyzer = adoptPtr(new LayoutAnalyzer());
+        m_analyzer = wrapUnique(new LayoutAnalyzer());
     m_analyzer->reset();
 }
 
-PassOwnPtr<TracedValue> FrameView::analyzerCounters()
+std::unique_ptr<TracedValue> FrameView::analyzerCounters()
 {
     if (!m_analyzer)
         return TracedValue::create();
-    OwnPtr<TracedValue> value = m_analyzer->toTracedValue();
+    std::unique_ptr<TracedValue> value = m_analyzer->toTracedValue();
     value->setString("host", layoutViewItem().document().location()->host());
     value->setString("frame", String::format("0x%" PRIxPTR, reinterpret_cast<uintptr_t>(m_frame.get())));
     value->setInteger("contentsHeightAfterLayout", layoutViewItem().documentRect().height());
@@ -1307,7 +1309,7 @@
 void FrameView::addViewportConstrainedObject(LayoutObject* object)
 {
     if (!m_viewportConstrainedObjects)
-        m_viewportConstrainedObjects = adoptPtr(new ViewportConstrainedObjectSet);
+        m_viewportConstrainedObjects = wrapUnique(new ViewportConstrainedObjectSet);
 
     if (!m_viewportConstrainedObjects->contains(object)) {
         m_viewportConstrainedObjects->add(object);
@@ -2943,7 +2945,7 @@
         if (!frame->isLocalFrame())
             continue;
         if (LayoutViewItem layoutView = toLocalFrame(frame)->contentLayoutItem()) {
-            layoutView.frameView()->m_trackedObjectPaintInvalidations = adoptPtr(trackPaintInvalidations ? new Vector<ObjectPaintInvalidation> : nullptr);
+            layoutView.frameView()->m_trackedObjectPaintInvalidations = wrapUnique(trackPaintInvalidations ? new Vector<ObjectPaintInvalidation> : nullptr);
             layoutView.compositor()->setTracksPaintInvalidations(trackPaintInvalidations);
         }
     }
@@ -2979,7 +2981,7 @@
 void FrameView::addResizerArea(LayoutBox& resizerBox)
 {
     if (!m_resizerAreas)
-        m_resizerAreas = adoptPtr(new ResizerAreaSet);
+        m_resizerAreas = wrapUnique(new ResizerAreaSet);
     m_resizerAreas->add(&resizerBox);
 }
 
diff --git a/third_party/WebKit/Source/core/frame/FrameView.h b/third_party/WebKit/Source/core/frame/FrameView.h
index ce1d5d8..a3d645e 100644
--- a/third_party/WebKit/Source/core/frame/FrameView.h
+++ b/third_party/WebKit/Source/core/frame/FrameView.h
@@ -49,9 +49,9 @@
 #include "wtf/Forward.h"
 #include "wtf/HashSet.h"
 #include "wtf/ListHashSet.h"
-#include "wtf/OwnPtr.h"
 #include "wtf/TemporaryChange.h"
 #include "wtf/text/WTFString.h"
+#include <memory>
 
 namespace blink {
 
@@ -758,7 +758,7 @@
     ScrollingCoordinator* scrollingCoordinator() const;
 
     void prepareLayoutAnalyzer();
-    PassOwnPtr<TracedValue> analyzerCounters();
+    std::unique_ptr<TracedValue> analyzerCounters();
 
     // LayoutObject for the viewport-defining element (see Document::viewportDefiningElement).
     LayoutObject* viewportLayoutObject();
@@ -810,7 +810,7 @@
     unsigned m_nestedLayoutCount;
     Timer<FrameView> m_postLayoutTasksTimer;
     Timer<FrameView> m_updateWidgetsTimer;
-    OwnPtr<CancellableTaskFactory> m_renderThrottlingObserverNotificationFactory;
+    std::unique_ptr<CancellableTaskFactory> m_renderThrottlingObserverNotificationFactory;
 
     bool m_firstLayout;
     bool m_isTransparent;
@@ -834,8 +834,8 @@
 
     Member<ScrollableAreaSet> m_scrollableAreas;
     Member<ScrollableAreaSet> m_animatingScrollableAreas;
-    OwnPtr<ResizerAreaSet> m_resizerAreas;
-    OwnPtr<ViewportConstrainedObjectSet> m_viewportConstrainedObjects;
+    std::unique_ptr<ResizerAreaSet> m_resizerAreas;
+    std::unique_ptr<ViewportConstrainedObjectSet> m_viewportConstrainedObjects;
     unsigned m_stickyPositionObjectCount;
     ViewportConstrainedObjectSet m_backgroundAttachmentFixedObjects;
     Member<FrameViewAutoSizeInfo> m_autoSizeInfo;
@@ -880,7 +880,7 @@
 
     bool m_inUpdateScrollbars;
 
-    OwnPtr<LayoutAnalyzer> m_analyzer;
+    std::unique_ptr<LayoutAnalyzer> m_analyzer;
 
     // Mark if something has changed in the mapping from Frame to GraphicsLayer
     // and the Frame Timing regions should be recalculated.
@@ -926,7 +926,7 @@
         String name;
         PaintInvalidationReason reason;
     };
-    OwnPtr<Vector<ObjectPaintInvalidation>> m_trackedObjectPaintInvalidations;
+    std::unique_ptr<Vector<ObjectPaintInvalidation>> m_trackedObjectPaintInvalidations;
 };
 
 inline void FrameView::incrementVisuallyNonEmptyCharacterCount(unsigned count)
diff --git a/third_party/WebKit/Source/core/frame/FrameViewTest.cpp b/third_party/WebKit/Source/core/frame/FrameViewTest.cpp
index c4024cd..f567725 100644
--- a/third_party/WebKit/Source/core/frame/FrameViewTest.cpp
+++ b/third_party/WebKit/Source/core/frame/FrameViewTest.cpp
@@ -17,7 +17,7 @@
 #include "platform/heap/Handle.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
-#include "wtf/OwnPtr.h"
+#include <memory>
 
 using testing::_;
 using testing::AnyNumber;
@@ -63,7 +63,7 @@
 
 private:
     Persistent<MockChromeClient> m_chromeClient;
-    OwnPtr<DummyPageHolder> m_pageHolder;
+    std::unique_ptr<DummyPageHolder> m_pageHolder;
 };
 
 class FrameViewTest : public FrameViewTestBase {
diff --git a/third_party/WebKit/Source/core/frame/ImageBitmap.cpp b/third_party/WebKit/Source/core/frame/ImageBitmap.cpp
index 94b7e8b7..5eb9d50a 100644
--- a/third_party/WebKit/Source/core/frame/ImageBitmap.cpp
+++ b/third_party/WebKit/Source/core/frame/ImageBitmap.cpp
@@ -11,7 +11,9 @@
 #include "platform/image-decoders/ImageDecoder.h"
 #include "third_party/skia/include/core/SkCanvas.h"
 #include "third_party/skia/include/core/SkSurface.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/RefPtr.h"
+#include <memory>
 
 namespace blink {
 
@@ -33,16 +35,16 @@
     return frameBitmap.colorType() == kN32_SkColorType;
 }
 
-static PassOwnPtr<uint8_t[]> copySkImageData(SkImage* input, const SkImageInfo& info)
+static std::unique_ptr<uint8_t[]> copySkImageData(SkImage* input, const SkImageInfo& info)
 {
-    OwnPtr<uint8_t[]> dstPixels = adoptArrayPtr(new uint8_t[input->width() * input->height() * info.bytesPerPixel()]);
+    std::unique_ptr<uint8_t[]> dstPixels = wrapArrayUnique(new uint8_t[input->width() * input->height() * info.bytesPerPixel()]);
     input->readPixels(info, dstPixels.get(), input->width() * info.bytesPerPixel(), 0, 0);
     return dstPixels;
 }
 
-static PassRefPtr<SkImage> newSkImageFromRaster(const SkImageInfo& info, PassOwnPtr<uint8_t[]> imagePixels, int imageRowBytes)
+static PassRefPtr<SkImage> newSkImageFromRaster(const SkImageInfo& info, std::unique_ptr<uint8_t[]> imagePixels, int imageRowBytes)
 {
-    return fromSkSp(SkImage::MakeFromRaster(SkPixmap(info, imagePixels.leakPtr(), imageRowBytes),
+    return fromSkSp(SkImage::MakeFromRaster(SkPixmap(info, imagePixels.release(), imageRowBytes),
         [](const void* pixels, void*)
         {
             delete[] static_cast<const uint8_t*>(pixels);
@@ -74,7 +76,7 @@
     int height = input->height();
     SkImageInfo info = SkImageInfo::MakeN32(width, height, (alphaOp == PremultiplyAlpha) ? kPremul_SkAlphaType : kUnpremul_SkAlphaType);
     int imageRowBytes = width * info.bytesPerPixel();
-    OwnPtr<uint8_t[]> imagePixels = copySkImageData(input, info);
+    std::unique_ptr<uint8_t[]> imagePixels = copySkImageData(input, info);
     for (int i = 0; i < height / 2; i++) {
         int topFirstElement = i * imageRowBytes;
         int topLastElement = (i + 1) * imageRowBytes;
@@ -87,18 +89,18 @@
 static PassRefPtr<SkImage> premulSkImageToUnPremul(SkImage* input)
 {
     SkImageInfo info = SkImageInfo::Make(input->width(), input->height(), kN32_SkColorType, kUnpremul_SkAlphaType);
-    OwnPtr<uint8_t[]> dstPixels = copySkImageData(input, info);
+    std::unique_ptr<uint8_t[]> dstPixels = copySkImageData(input, info);
     return newSkImageFromRaster(info, std::move(dstPixels), input->width() * info.bytesPerPixel());
 }
 
 static PassRefPtr<SkImage> unPremulSkImageToPremul(SkImage* input)
 {
     SkImageInfo info = SkImageInfo::Make(input->width(), input->height(), kN32_SkColorType, kPremul_SkAlphaType);
-    OwnPtr<uint8_t[]> dstPixels = copySkImageData(input, info);
+    std::unique_ptr<uint8_t[]> dstPixels = copySkImageData(input, info);
     return newSkImageFromRaster(info, std::move(dstPixels), input->width() * info.bytesPerPixel());
 }
 
-PassRefPtr<SkImage> ImageBitmap::getSkImageFromDecoder(PassOwnPtr<ImageDecoder> decoder)
+PassRefPtr<SkImage> ImageBitmap::getSkImageFromDecoder(std::unique_ptr<ImageDecoder> decoder)
 {
     if (!decoder->frameCount())
         return nullptr;
@@ -126,14 +128,14 @@
     // We immediately return a transparent black image with cropRect.size()
     if (srcRect.isEmpty() && !premultiplyAlpha) {
         SkImageInfo info = SkImageInfo::Make(cropRect.width(), cropRect.height(), kN32_SkColorType, kUnpremul_SkAlphaType);
-        OwnPtr<uint8_t[]> dstPixels = adoptArrayPtr(new uint8_t[cropRect.width() * cropRect.height() * info.bytesPerPixel()]());
+        std::unique_ptr<uint8_t[]> dstPixels = wrapArrayUnique(new uint8_t[cropRect.width() * cropRect.height() * info.bytesPerPixel()]());
         return StaticBitmapImage::create(newSkImageFromRaster(info, std::move(dstPixels), cropRect.width() * info.bytesPerPixel()));
     }
 
     RefPtr<SkImage> skiaImage = image->imageForCurrentFrame();
     // Attempt to get raw unpremultiplied image data, executed only when skiaImage is premultiplied.
     if ((((!premultiplyAlpha && !skiaImage->isOpaque()) || !skiaImage) && image->data() && imageFormat == PremultiplyAlpha) || colorSpaceOp == ImageDecoder::GammaAndColorProfileIgnored) {
-        OwnPtr<ImageDecoder> decoder(ImageDecoder::create(*(image->data()),
+        std::unique_ptr<ImageDecoder> decoder(ImageDecoder::create(*(image->data()),
             premultiplyAlpha ? ImageDecoder::AlphaPremultiplied : ImageDecoder::AlphaNotPremultiplied,
             colorSpaceOp));
         if (!decoder)
@@ -214,7 +216,7 @@
 
     IntRect videoRect = IntRect(IntPoint(), playerSize);
     IntRect srcRect = intersection(cropRect, videoRect);
-    OwnPtr<ImageBuffer> buffer = ImageBuffer::create(cropRect.size(), NonOpaque, DoNotInitializeImagePixels);
+    std::unique_ptr<ImageBuffer> buffer = ImageBuffer::create(cropRect.size(), NonOpaque, DoNotInitializeImagePixels);
     if (!buffer)
         return;
 
@@ -283,7 +285,7 @@
             // restore the original ImageData
             swizzleImageData(srcAddr, srcHeight, srcPixelBytesPerRow, flipY);
         } else {
-            OwnPtr<uint8_t[]> copiedDataBuffer = adoptArrayPtr(new uint8_t[dstHeight * dstPixelBytesPerRow]());
+            std::unique_ptr<uint8_t[]> copiedDataBuffer = wrapArrayUnique(new uint8_t[dstHeight * dstPixelBytesPerRow]());
             if (!srcRect.isEmpty()) {
                 IntPoint srcPoint = IntPoint((cropRect.x() > 0) ? cropRect.x() : 0, (cropRect.y() > 0) ? cropRect.y() : 0);
                 IntPoint dstPoint = IntPoint((cropRect.x() >= 0) ? 0 : -cropRect.x(), (cropRect.y() >= 0) ? 0 : -cropRect.y());
@@ -317,7 +319,7 @@
         return;
     }
 
-    OwnPtr<ImageBuffer> buffer = ImageBuffer::create(cropRect.size(), NonOpaque, DoNotInitializeImagePixels);
+    std::unique_ptr<ImageBuffer> buffer = ImageBuffer::create(cropRect.size(), NonOpaque, DoNotInitializeImagePixels);
     if (!buffer)
         return;
 
@@ -443,10 +445,10 @@
     return ImageBitmap::create(StaticBitmapImage::create(fromSkSp(image)));
 }
 
-PassOwnPtr<uint8_t[]> ImageBitmap::copyBitmapData(AlphaDisposition alphaOp)
+std::unique_ptr<uint8_t[]> ImageBitmap::copyBitmapData(AlphaDisposition alphaOp)
 {
     SkImageInfo info = SkImageInfo::Make(width(), height(), kRGBA_8888_SkColorType, (alphaOp == PremultiplyAlpha) ? kPremul_SkAlphaType : kUnpremul_SkAlphaType);
-    OwnPtr<uint8_t[]> dstPixels = copySkImageData(m_image->imageForCurrentFrame().get(), info);
+    std::unique_ptr<uint8_t[]> dstPixels = copySkImageData(m_image->imageForCurrentFrame().get(), info);
     return dstPixels;
 }
 
diff --git a/third_party/WebKit/Source/core/frame/ImageBitmap.h b/third_party/WebKit/Source/core/frame/ImageBitmap.h
index 71aba7f..102232a 100644
--- a/third_party/WebKit/Source/core/frame/ImageBitmap.h
+++ b/third_party/WebKit/Source/core/frame/ImageBitmap.h
@@ -17,6 +17,7 @@
 #include "platform/graphics/StaticBitmapImage.h"
 #include "platform/heap/Handle.h"
 #include "wtf/PassRefPtr.h"
+#include <memory>
 
 namespace blink {
 
@@ -41,14 +42,14 @@
     static ImageBitmap* create(PassRefPtr<StaticBitmapImage>);
     static ImageBitmap* create(PassRefPtr<StaticBitmapImage>, const IntRect&, const ImageBitmapOptions& = ImageBitmapOptions());
     static ImageBitmap* create(WebExternalTextureMailbox&);
-    static PassRefPtr<SkImage> getSkImageFromDecoder(PassOwnPtr<ImageDecoder>);
+    static PassRefPtr<SkImage> getSkImageFromDecoder(std::unique_ptr<ImageDecoder>);
 
     // Type and helper function required by CallbackPromiseAdapter:
     using WebType = sk_sp<SkImage>;
     static ImageBitmap* take(ScriptPromiseResolver*, sk_sp<SkImage>);
 
     StaticBitmapImage* bitmapImage() const { return (m_image) ? m_image.get() : nullptr; }
-    PassOwnPtr<uint8_t[]> copyBitmapData(AlphaDisposition alphaOp = DontPremultiplyAlpha);
+    std::unique_ptr<uint8_t[]> copyBitmapData(AlphaDisposition alphaOp = DontPremultiplyAlpha);
     unsigned long width() const;
     unsigned long height() const;
     IntSize size() const;
diff --git a/third_party/WebKit/Source/core/frame/ImageBitmapTest.cpp b/third_party/WebKit/Source/core/frame/ImageBitmapTest.cpp
index 274315b..6027353 100644
--- a/third_party/WebKit/Source/core/frame/ImageBitmapTest.cpp
+++ b/third_party/WebKit/Source/core/frame/ImageBitmapTest.cpp
@@ -45,7 +45,6 @@
 #include "third_party/skia/include/core/SkCanvas.h"
 #include "third_party/skia/include/core/SkImage.h"
 #include "third_party/skia/include/core/SkSurface.h"
-#include "wtf/OwnPtr.h"
 
 namespace blink {
 
diff --git a/third_party/WebKit/Source/core/frame/LocalDOMWindow.cpp b/third_party/WebKit/Source/core/frame/LocalDOMWindow.cpp
index 20a01b9..b8654e6 100644
--- a/third_party/WebKit/Source/core/frame/LocalDOMWindow.cpp
+++ b/third_party/WebKit/Source/core/frame/LocalDOMWindow.cpp
@@ -78,7 +78,7 @@
 #include "public/platform/Platform.h"
 #include "public/platform/WebFrameScheduler.h"
 #include "public/platform/WebScreenInfo.h"
-#include "wtf/PassOwnPtr.h"
+#include <memory>
 
 namespace blink {
 
@@ -127,7 +127,7 @@
 class PostMessageTimer final : public GarbageCollectedFinalized<PostMessageTimer>, public SuspendableTimer {
     USING_GARBAGE_COLLECTED_MIXIN(PostMessageTimer);
 public:
-    PostMessageTimer(LocalDOMWindow& window, MessageEvent* event, PassRefPtr<SecurityOrigin> targetOrigin, PassOwnPtr<SourceLocation> location, UserGestureToken* userGestureToken)
+    PostMessageTimer(LocalDOMWindow& window, MessageEvent* event, PassRefPtr<SecurityOrigin> targetOrigin, std::unique_ptr<SourceLocation> location, UserGestureToken* userGestureToken)
         : SuspendableTimer(window.document())
         , m_event(event)
         , m_window(&window)
@@ -141,7 +141,7 @@
 
     MessageEvent* event() const { return m_event; }
     SecurityOrigin* targetOrigin() const { return m_targetOrigin.get(); }
-    PassOwnPtr<SourceLocation> takeLocation() { return std::move(m_location); }
+    std::unique_ptr<SourceLocation> takeLocation() { return std::move(m_location); }
     UserGestureToken* userGestureToken() const { return m_userGestureToken.get(); }
     void stop() override
     {
@@ -184,7 +184,7 @@
     Member<MessageEvent> m_event;
     Member<LocalDOMWindow> m_window;
     RefPtr<SecurityOrigin> m_targetOrigin;
-    OwnPtr<SourceLocation> m_location;
+    std::unique_ptr<SourceLocation> m_location;
     RefPtr<UserGestureToken> m_userGestureToken;
     bool m_disposalAllowed;
 };
@@ -695,7 +695,7 @@
     m_postMessageTimers.remove(timer);
 }
 
-void LocalDOMWindow::dispatchMessageEventWithOriginCheck(SecurityOrigin* intendedTargetOrigin, Event* event, PassOwnPtr<SourceLocation> location)
+void LocalDOMWindow::dispatchMessageEventWithOriginCheck(SecurityOrigin* intendedTargetOrigin, Event* event, std::unique_ptr<SourceLocation> location)
 {
     if (intendedTargetOrigin) {
         // Check target origin now since the target document may have changed since the timer was scheduled.
diff --git a/third_party/WebKit/Source/core/frame/LocalDOMWindow.h b/third_party/WebKit/Source/core/frame/LocalDOMWindow.h
index 87e5acdf..00c57bb 100644
--- a/third_party/WebKit/Source/core/frame/LocalDOMWindow.h
+++ b/third_party/WebKit/Source/core/frame/LocalDOMWindow.h
@@ -36,9 +36,9 @@
 #include "core/frame/LocalFrameLifecycleObserver.h"
 #include "platform/Supplementable.h"
 #include "platform/heap/Handle.h"
-
 #include "wtf/Assertions.h"
 #include "wtf/Forward.h"
+#include <memory>
 
 namespace blink {
 
@@ -170,7 +170,7 @@
 
     void postMessageTimerFired(PostMessageTimer*);
     void removePostMessageTimer(PostMessageTimer*);
-    void dispatchMessageEventWithOriginCheck(SecurityOrigin* intendedTargetOrigin, Event*, PassOwnPtr<SourceLocation>);
+    void dispatchMessageEventWithOriginCheck(SecurityOrigin* intendedTargetOrigin, Event*, std::unique_ptr<SourceLocation>);
 
     // Events
     // EventTarget API
diff --git a/third_party/WebKit/Source/core/frame/LocalFrame.cpp b/third_party/WebKit/Source/core/frame/LocalFrame.cpp
index 8c25729a..8bb45280b 100644
--- a/third_party/WebKit/Source/core/frame/LocalFrame.cpp
+++ b/third_party/WebKit/Source/core/frame/LocalFrame.cpp
@@ -86,8 +86,9 @@
 #include "public/platform/WebScreenInfo.h"
 #include "public/platform/WebViewScheduler.h"
 #include "third_party/skia/include/core/SkImage.h"
-#include "wtf/PassOwnPtr.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/StdLibExtras.h"
+#include <memory>
 
 namespace blink {
 
@@ -114,7 +115,7 @@
 
         m_bounds.setWidth(m_bounds.width() * deviceScaleFactor);
         m_bounds.setHeight(m_bounds.height() * deviceScaleFactor);
-        m_pictureBuilder = adoptPtr(new SkPictureBuilder(SkRect::MakeIWH(m_bounds.width(), m_bounds.height())));
+        m_pictureBuilder = wrapUnique(new SkPictureBuilder(SkRect::MakeIWH(m_bounds.width(), m_bounds.height())));
 
         AffineTransform transform;
         transform.scale(deviceScaleFactor, deviceScaleFactor);
@@ -124,7 +125,7 @@
 
     GraphicsContext& context() { return m_pictureBuilder->context(); }
 
-    PassOwnPtr<DragImage> createImage()
+    std::unique_ptr<DragImage> createImage()
     {
         if (m_draggedNode && m_draggedNode->layoutObject())
             m_draggedNode->layoutObject()->updateDragState(false);
@@ -148,7 +149,7 @@
     Member<Node> m_draggedNode;
     FloatRect m_bounds;
     float m_opacity;
-    OwnPtr<SkPictureBuilder> m_pictureBuilder;
+    std::unique_ptr<SkPictureBuilder> m_pictureBuilder;
 };
 
 inline float parentPageZoomFactor(LocalFrame* frame)
@@ -595,7 +596,7 @@
     return ratio;
 }
 
-PassOwnPtr<DragImage> LocalFrame::nodeImage(Node& node)
+std::unique_ptr<DragImage> LocalFrame::nodeImage(Node& node)
 {
     m_view->updateAllLifecyclePhasesExceptPaint();
     LayoutObject* layoutObject = node.layoutObject();
@@ -619,7 +620,7 @@
     return dragImageBuilder.createImage();
 }
 
-PassOwnPtr<DragImage> LocalFrame::dragImageForSelection(float opacity)
+std::unique_ptr<DragImage> LocalFrame::dragImageForSelection(float opacity)
 {
     if (!selection().isRange())
         return nullptr;
diff --git a/third_party/WebKit/Source/core/frame/LocalFrame.h b/third_party/WebKit/Source/core/frame/LocalFrame.h
index 7c5a2f34..2165cca6 100644
--- a/third_party/WebKit/Source/core/frame/LocalFrame.h
+++ b/third_party/WebKit/Source/core/frame/LocalFrame.h
@@ -41,6 +41,7 @@
 #include "platform/heap/Handle.h"
 #include "platform/scroll/ScrollTypes.h"
 #include "wtf/HashSet.h"
+#include <memory>
 
 namespace blink {
 
@@ -154,8 +155,8 @@
     void deviceScaleFactorChanged();
     double devicePixelRatio() const;
 
-    PassOwnPtr<DragImage> nodeImage(Node&);
-    PassOwnPtr<DragImage> dragImageForSelection(float opacity);
+    std::unique_ptr<DragImage> nodeImage(Node&);
+    std::unique_ptr<DragImage> dragImageForSelection(float opacity);
 
     String selectedText() const;
     String selectedTextForClipboard() const;
@@ -212,7 +213,7 @@
     const Member<EventHandler> m_eventHandler;
     const Member<FrameConsole> m_console;
     const Member<InputMethodController> m_inputMethodController;
-    OwnPtr<WebFrameScheduler> m_frameScheduler;
+    std::unique_ptr<WebFrameScheduler> m_frameScheduler;
 
     int m_navigationDisableCount;
 
diff --git a/third_party/WebKit/Source/core/frame/PageScaleConstraintsSet.h b/third_party/WebKit/Source/core/frame/PageScaleConstraintsSet.h
index 7104d6d..9dd45f92 100644
--- a/third_party/WebKit/Source/core/frame/PageScaleConstraintsSet.h
+++ b/third_party/WebKit/Source/core/frame/PageScaleConstraintsSet.h
@@ -37,7 +37,8 @@
 #include "platform/Length.h"
 #include "platform/geometry/IntSize.h"
 #include "wtf/Allocator.h"
-#include "wtf/PassOwnPtr.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
@@ -46,9 +47,9 @@
 class CORE_EXPORT PageScaleConstraintsSet {
     USING_FAST_MALLOC(PageScaleConstraintsSet);
 public:
-    static PassOwnPtr<PageScaleConstraintsSet> create()
+    static std::unique_ptr<PageScaleConstraintsSet> create()
     {
-        return adoptPtr(new PageScaleConstraintsSet);
+        return wrapUnique(new PageScaleConstraintsSet);
     }
 
     void setDefaultConstraints(const PageScaleConstraints&);
diff --git a/third_party/WebKit/Source/core/frame/Settings.cpp b/third_party/WebKit/Source/core/frame/Settings.cpp
index 7ba6251f..066ba97 100644
--- a/third_party/WebKit/Source/core/frame/Settings.cpp
+++ b/third_party/WebKit/Source/core/frame/Settings.cpp
@@ -27,6 +27,8 @@
 
 #include "platform/RuntimeEnabledFeatures.h"
 #include "platform/scroll/ScrollbarTheme.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
@@ -68,9 +70,9 @@
 {
 }
 
-PassOwnPtr<Settings> Settings::create()
+std::unique_ptr<Settings> Settings::create()
 {
-    return adoptPtr(new Settings);
+    return wrapUnique(new Settings);
 }
 
 SETTINGS_SETTER_BODIES
diff --git a/third_party/WebKit/Source/core/frame/Settings.h b/third_party/WebKit/Source/core/frame/Settings.h
index 6ab18c6..8b909e3 100644
--- a/third_party/WebKit/Source/core/frame/Settings.h
+++ b/third_party/WebKit/Source/core/frame/Settings.h
@@ -44,6 +44,7 @@
 #include "public/platform/PointerProperties.h"
 #include "public/platform/WebDisplayMode.h"
 #include "public/platform/WebViewportStyle.h"
+#include <memory>
 
 namespace blink {
 
@@ -51,7 +52,7 @@
     WTF_MAKE_NONCOPYABLE(Settings);
     USING_FAST_MALLOC(Settings);
 public:
-    static PassOwnPtr<Settings> create();
+    static std::unique_ptr<Settings> create();
 
     GenericFontFamilySettings& genericFontFamilySettings() { return m_genericFontFamilySettings; }
     void notifyGenericFontFamilyChange() { invalidate(SettingsDelegate::FontFamilyChange); }
diff --git a/third_party/WebKit/Source/core/frame/SettingsDelegate.cpp b/third_party/WebKit/Source/core/frame/SettingsDelegate.cpp
index 71236be..1b7c221 100644
--- a/third_party/WebKit/Source/core/frame/SettingsDelegate.cpp
+++ b/third_party/WebKit/Source/core/frame/SettingsDelegate.cpp
@@ -31,10 +31,11 @@
 #include "core/frame/SettingsDelegate.h"
 
 #include "core/frame/Settings.h"
+#include <memory>
 
 namespace blink {
 
-SettingsDelegate::SettingsDelegate(PassOwnPtr<Settings> settings)
+SettingsDelegate::SettingsDelegate(std::unique_ptr<Settings> settings)
     : m_settings(std::move(settings))
 {
     if (m_settings)
diff --git a/third_party/WebKit/Source/core/frame/SettingsDelegate.h b/third_party/WebKit/Source/core/frame/SettingsDelegate.h
index 561cfa7..4b37ff97 100644
--- a/third_party/WebKit/Source/core/frame/SettingsDelegate.h
+++ b/third_party/WebKit/Source/core/frame/SettingsDelegate.h
@@ -33,8 +33,7 @@
 
 #include "core/CoreExport.h"
 #include "wtf/Allocator.h"
-#include "wtf/OwnPtr.h"
-#include "wtf/PassOwnPtr.h"
+#include <memory>
 
 namespace blink {
 
@@ -43,7 +42,7 @@
 class CORE_EXPORT SettingsDelegate {
     DISALLOW_NEW();
 public:
-    explicit SettingsDelegate(PassOwnPtr<Settings>);
+    explicit SettingsDelegate(std::unique_ptr<Settings>);
     virtual ~SettingsDelegate();
 
     Settings* settings() const { return m_settings.get(); }
@@ -67,7 +66,7 @@
     virtual void settingsChanged(ChangeType) = 0;
 
 protected:
-    OwnPtr<Settings> const m_settings;
+    std::unique_ptr<Settings> const m_settings;
 };
 
 } // namespace blink
diff --git a/third_party/WebKit/Source/core/frame/TopControls.h b/third_party/WebKit/Source/core/frame/TopControls.h
index 49dd9ee..e6cef92 100644
--- a/third_party/WebKit/Source/core/frame/TopControls.h
+++ b/third_party/WebKit/Source/core/frame/TopControls.h
@@ -8,8 +8,6 @@
 #include "core/CoreExport.h"
 #include "platform/heap/Handle.h"
 #include "public/platform/WebTopControlsState.h"
-#include "wtf/OwnPtr.h"
-#include "wtf/PassOwnPtr.h"
 
 namespace blink {
 class FrameHost;
diff --git a/third_party/WebKit/Source/core/frame/UseCounter.h b/third_party/WebKit/Source/core/frame/UseCounter.h
index 9f27be2..a75982d 100644
--- a/third_party/WebKit/Source/core/frame/UseCounter.h
+++ b/third_party/WebKit/Source/core/frame/UseCounter.h
@@ -31,8 +31,6 @@
 #include "core/css/parser/CSSParserMode.h"
 #include "wtf/BitVector.h"
 #include "wtf/Noncopyable.h"
-#include "wtf/OwnPtr.h"
-#include "wtf/PassOwnPtr.h"
 #include "wtf/text/WTFString.h"
 #include <v8.h>
 
diff --git a/third_party/WebKit/Source/core/frame/VisualViewport.cpp b/third_party/WebKit/Source/core/frame/VisualViewport.cpp
index cd08431..85c73df4 100644
--- a/third_party/WebKit/Source/core/frame/VisualViewport.cpp
+++ b/third_party/WebKit/Source/core/frame/VisualViewport.cpp
@@ -55,6 +55,7 @@
 #include "public/platform/WebLayerTreeView.h"
 #include "public/platform/WebScrollbar.h"
 #include "public/platform/WebScrollbarLayer.h"
+#include <memory>
 
 using blink::WebLayer;
 using blink::WebLayerTreeView;
@@ -375,7 +376,7 @@
         return;
     }
 
-    if (currentLayerTreeRoot->parent() && currentLayerTreeRoot->parent() == m_innerViewportScrollLayer)
+    if (currentLayerTreeRoot->parent() && currentLayerTreeRoot->parent() == m_innerViewportScrollLayer.get())
         return;
 
     if (!m_innerViewportScrollLayer) {
@@ -447,7 +448,7 @@
     bool isHorizontal = orientation == WebScrollbar::Horizontal;
     GraphicsLayer* scrollbarGraphicsLayer = isHorizontal ?
         m_overlayScrollbarHorizontal.get() : m_overlayScrollbarVertical.get();
-    OwnPtr<WebScrollbarLayer>& webScrollbarLayer = isHorizontal ?
+    std::unique_ptr<WebScrollbarLayer>& webScrollbarLayer = isHorizontal ?
         m_webOverlayScrollbarHorizontal : m_webOverlayScrollbarVertical;
 
     ScrollbarThemeOverlay& theme = ScrollbarThemeOverlay::mobileTheme();
@@ -832,7 +833,7 @@
         name =  "Overlay Scrollbar Horizontal Layer";
     } else if (graphicsLayer == m_overlayScrollbarVertical.get()) {
         name =  "Overlay Scrollbar Vertical Layer";
-    } else if (graphicsLayer == m_rootTransformLayer) {
+    } else if (graphicsLayer == m_rootTransformLayer.get()) {
         name =  "Root Transform Layer";
     } else {
         ASSERT_NOT_REACHED();
diff --git a/third_party/WebKit/Source/core/frame/VisualViewport.h b/third_party/WebKit/Source/core/frame/VisualViewport.h
index d15d234..58b3d7b9 100644
--- a/third_party/WebKit/Source/core/frame/VisualViewport.h
+++ b/third_party/WebKit/Source/core/frame/VisualViewport.h
@@ -40,8 +40,7 @@
 #include "platform/scroll/ScrollableArea.h"
 #include "public/platform/WebScrollbar.h"
 #include "public/platform/WebSize.h"
-#include "wtf/OwnPtr.h"
-#include "wtf/PassOwnPtr.h"
+#include <memory>
 
 namespace blink {
 class WebLayerTreeView;
@@ -248,15 +247,15 @@
     }
 
     Member<FrameHost> m_frameHost;
-    OwnPtr<GraphicsLayer> m_rootTransformLayer;
-    OwnPtr<GraphicsLayer> m_innerViewportContainerLayer;
-    OwnPtr<GraphicsLayer> m_overscrollElasticityLayer;
-    OwnPtr<GraphicsLayer> m_pageScaleLayer;
-    OwnPtr<GraphicsLayer> m_innerViewportScrollLayer;
-    OwnPtr<GraphicsLayer> m_overlayScrollbarHorizontal;
-    OwnPtr<GraphicsLayer> m_overlayScrollbarVertical;
-    OwnPtr<WebScrollbarLayer> m_webOverlayScrollbarHorizontal;
-    OwnPtr<WebScrollbarLayer> m_webOverlayScrollbarVertical;
+    std::unique_ptr<GraphicsLayer> m_rootTransformLayer;
+    std::unique_ptr<GraphicsLayer> m_innerViewportContainerLayer;
+    std::unique_ptr<GraphicsLayer> m_overscrollElasticityLayer;
+    std::unique_ptr<GraphicsLayer> m_pageScaleLayer;
+    std::unique_ptr<GraphicsLayer> m_innerViewportScrollLayer;
+    std::unique_ptr<GraphicsLayer> m_overlayScrollbarHorizontal;
+    std::unique_ptr<GraphicsLayer> m_overlayScrollbarVertical;
+    std::unique_ptr<WebScrollbarLayer> m_webOverlayScrollbarHorizontal;
+    std::unique_ptr<WebScrollbarLayer> m_webOverlayScrollbarVertical;
 
     // Offset of the visual viewport from the main frame's origin, in CSS pixels.
     FloatPoint m_offset;
diff --git a/third_party/WebKit/Source/core/frame/csp/CSPDirectiveList.h b/third_party/WebKit/Source/core/frame/csp/CSPDirectiveList.h
index 257ccb0..3b611112 100644
--- a/third_party/WebKit/Source/core/frame/csp/CSPDirectiveList.h
+++ b/third_party/WebKit/Source/core/frame/csp/CSPDirectiveList.h
@@ -15,7 +15,6 @@
 #include "platform/network/ResourceRequest.h"
 #include "platform/weborigin/KURL.h"
 #include "platform/weborigin/ReferrerPolicy.h"
-#include "wtf/OwnPtr.h"
 #include "wtf/Vector.h"
 #include "wtf/text/AtomicString.h"
 #include "wtf/text/WTFString.h"
diff --git a/third_party/WebKit/Source/core/frame/csp/ContentSecurityPolicy.cpp b/third_party/WebKit/Source/core/frame/csp/ContentSecurityPolicy.cpp
index 3f0944bf..643530e 100644
--- a/third_party/WebKit/Source/core/frame/csp/ContentSecurityPolicy.cpp
+++ b/third_party/WebKit/Source/core/frame/csp/ContentSecurityPolicy.cpp
@@ -60,9 +60,11 @@
 #include "public/platform/Platform.h"
 #include "public/platform/WebAddressSpace.h"
 #include "public/platform/WebURLRequest.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/StringHasher.h"
 #include "wtf/text/StringBuilder.h"
 #include "wtf/text/StringUTF8Adaptor.h"
+#include <memory>
 
 namespace blink {
 
@@ -343,9 +345,9 @@
     m_selfSource = new CSPSource(this, m_selfProtocol, origin->host(), origin->port(), String(), CSPSource::NoWildcard, CSPSource::NoWildcard);
 }
 
-PassOwnPtr<Vector<CSPHeaderAndType>> ContentSecurityPolicy::headers() const
+std::unique_ptr<Vector<CSPHeaderAndType>> ContentSecurityPolicy::headers() const
 {
-    OwnPtr<Vector<CSPHeaderAndType>> headers = adoptPtr(new Vector<CSPHeaderAndType>);
+    std::unique_ptr<Vector<CSPHeaderAndType>> headers = wrapUnique(new Vector<CSPHeaderAndType>);
     for (const auto& policy : m_policies) {
         CSPHeaderAndType headerAndType(policy->header(), policy->headerType());
         headers->append(headerAndType);
@@ -808,7 +810,7 @@
     if (!SecurityOrigin::isSecure(document->url()) && document->loader())
         init.setStatusCode(document->loader()->response().httpStatusCode());
 
-    OwnPtr<SourceLocation> location = SourceLocation::capture(document);
+    std::unique_ptr<SourceLocation> location = SourceLocation::capture(document);
     if (location->lineNumber()) {
         KURL source = KURL(ParsedURLString, location->url());
         init.setSourceFile(stripURLForUseInReport(document, source, redirectStatus));
diff --git a/third_party/WebKit/Source/core/frame/csp/ContentSecurityPolicy.h b/third_party/WebKit/Source/core/frame/csp/ContentSecurityPolicy.h
index 88554042..9c4eceb0 100644
--- a/third_party/WebKit/Source/core/frame/csp/ContentSecurityPolicy.h
+++ b/third_party/WebKit/Source/core/frame/csp/ContentSecurityPolicy.h
@@ -39,11 +39,11 @@
 #include "platform/weborigin/ReferrerPolicy.h"
 #include "public/platform/WebInsecureRequestPolicy.h"
 #include "wtf/HashSet.h"
-#include "wtf/PassOwnPtr.h"
 #include "wtf/Vector.h"
 #include "wtf/text/StringHash.h"
 #include "wtf/text/TextPosition.h"
 #include "wtf/text/WTFString.h"
+#include <memory>
 #include <utility>
 
 namespace WTF {
@@ -148,7 +148,7 @@
     void addPolicyFromHeaderValue(const String&, ContentSecurityPolicyHeaderType, ContentSecurityPolicyHeaderSource);
     void reportAccumulatedHeaders(FrameLoaderClient*) const;
 
-    PassOwnPtr<Vector<CSPHeaderAndType>> headers() const;
+    std::unique_ptr<Vector<CSPHeaderAndType>> headers() const;
 
     bool allowJavaScriptURLs(const String& contextURL, const WTF::OrdinalNumber& contextLine, ReportingStatus = SendReport) const;
     bool allowInlineEventHandler(const String& source, const String& contextURL, const WTF::OrdinalNumber& contextLine, ReportingStatus = SendReport) const;
diff --git a/third_party/WebKit/Source/core/html/ClassList.cpp b/third_party/WebKit/Source/core/html/ClassList.cpp
index 1637c65..8637d0a 100644
--- a/third_party/WebKit/Source/core/html/ClassList.cpp
+++ b/third_party/WebKit/Source/core/html/ClassList.cpp
@@ -25,6 +25,7 @@
 #include "core/html/ClassList.h"
 
 #include "core/dom/Document.h"
+#include "wtf/PtrUtil.h"
 
 namespace blink {
 
@@ -54,7 +55,7 @@
     ASSERT(m_element->hasClass());
     if (m_element->document().inQuirksMode()) {
         if (!m_classNamesForQuirksMode)
-            m_classNamesForQuirksMode = adoptPtr(new SpaceSplitString(value(), SpaceSplitString::ShouldNotFoldCase));
+            m_classNamesForQuirksMode = wrapUnique(new SpaceSplitString(value(), SpaceSplitString::ShouldNotFoldCase));
         return *m_classNamesForQuirksMode.get();
     }
     return m_element->classNames();
diff --git a/third_party/WebKit/Source/core/html/ClassList.h b/third_party/WebKit/Source/core/html/ClassList.h
index 1ee73c4..9656909 100644
--- a/third_party/WebKit/Source/core/html/ClassList.h
+++ b/third_party/WebKit/Source/core/html/ClassList.h
@@ -29,7 +29,7 @@
 #include "core/dom/DOMTokenList.h"
 #include "core/dom/Element.h"
 #include "core/dom/SpaceSplitString.h"
-#include "wtf/OwnPtr.h"
+#include <memory>
 
 namespace blink {
 
@@ -64,7 +64,7 @@
     void setValue(const AtomicString& value) override { m_element->setAttribute(HTMLNames::classAttr, value); }
 
     Member<Element> m_element;
-    mutable OwnPtr<SpaceSplitString> m_classNamesForQuirksMode;
+    mutable std::unique_ptr<SpaceSplitString> m_classNamesForQuirksMode;
 };
 
 } // namespace blink
diff --git a/third_party/WebKit/Source/core/html/HTMLAreaElement.cpp b/third_party/WebKit/Source/core/html/HTMLAreaElement.cpp
index f9f7872b..7e72fd17 100644
--- a/third_party/WebKit/Source/core/html/HTMLAreaElement.cpp
+++ b/third_party/WebKit/Source/core/html/HTMLAreaElement.cpp
@@ -30,6 +30,7 @@
 #include "core/layout/LayoutImage.h"
 #include "platform/graphics/Path.h"
 #include "platform/transforms/AffineTransform.h"
+#include "wtf/PtrUtil.h"
 
 namespace blink {
 
@@ -165,7 +166,7 @@
         }
 
         // Cache the original path, not depending on containerObject.
-        m_path = adoptPtr(new Path(path));
+        m_path = wrapUnique(new Path(path));
     }
 
     // Zoom the path into coordinates of the container object.
diff --git a/third_party/WebKit/Source/core/html/HTMLAreaElement.h b/third_party/WebKit/Source/core/html/HTMLAreaElement.h
index 1a85d80ed..c92e20c 100644
--- a/third_party/WebKit/Source/core/html/HTMLAreaElement.h
+++ b/third_party/WebKit/Source/core/html/HTMLAreaElement.h
@@ -26,6 +26,7 @@
 #include "core/CoreExport.h"
 #include "core/html/HTMLAnchorElement.h"
 #include "platform/geometry/LayoutRect.h"
+#include <memory>
 
 namespace blink {
 
@@ -67,7 +68,7 @@
     enum Shape { Default, Poly, Rect, Circle };
     void invalidateCachedPath();
 
-    mutable OwnPtr<Path> m_path;
+    mutable std::unique_ptr<Path> m_path;
     Vector<double> m_coords;
     Shape m_shape;
 };
diff --git a/third_party/WebKit/Source/core/html/HTMLCanvasElement.cpp b/third_party/WebKit/Source/core/html/HTMLCanvasElement.cpp
index 5df9847..ca982ba 100644
--- a/third_party/WebKit/Source/core/html/HTMLCanvasElement.cpp
+++ b/third_party/WebKit/Source/core/html/HTMLCanvasElement.cpp
@@ -68,7 +68,9 @@
 #include "public/platform/Platform.h"
 #include "public/platform/WebTraceLocation.h"
 #include "wtf/CheckedNumeric.h"
+#include "wtf/PtrUtil.h"
 #include <math.h>
+#include <memory>
 #include <v8.h>
 
 namespace blink {
@@ -208,7 +210,7 @@
     return renderingContextFactories()[type].get();
 }
 
-void HTMLCanvasElement::registerRenderingContextFactory(PassOwnPtr<CanvasRenderingContextFactory> renderingContextFactory)
+void HTMLCanvasElement::registerRenderingContextFactory(std::unique_ptr<CanvasRenderingContextFactory> renderingContextFactory)
 {
     CanvasRenderingContext::ContextType type = renderingContextFactory->getContextType();
     DCHECK(type < CanvasRenderingContext::ContextTypeCount);
@@ -769,9 +771,9 @@
 
 class UnacceleratedSurfaceFactory : public RecordingImageBufferFallbackSurfaceFactory {
 public:
-    virtual PassOwnPtr<ImageBufferSurface> createSurface(const IntSize& size, OpacityMode opacityMode)
+    virtual std::unique_ptr<ImageBufferSurface> createSurface(const IntSize& size, OpacityMode opacityMode)
     {
-        return adoptPtr(new UnacceleratedImageBufferSurface(size, opacityMode));
+        return wrapUnique(new UnacceleratedImageBufferSurface(size, opacityMode));
     }
 
     virtual ~UnacceleratedSurfaceFactory() { }
@@ -788,7 +790,7 @@
     return true;
 }
 
-PassOwnPtr<ImageBufferSurface> HTMLCanvasElement::createImageBufferSurface(const IntSize& deviceSize, int* msaaSampleCount)
+std::unique_ptr<ImageBufferSurface> HTMLCanvasElement::createImageBufferSurface(const IntSize& deviceSize, int* msaaSampleCount)
 {
     OpacityMode opacityMode = !m_context || m_context->hasAlpha() ? NonOpaque : Opaque;
 
@@ -797,13 +799,13 @@
         // If 3d, but the use of the canvas will be for non-accelerated content
         // then make a non-accelerated ImageBuffer. This means copying the internal
         // Image will require a pixel readback, but that is unavoidable in this case.
-        return adoptPtr(new AcceleratedImageBufferSurface(deviceSize, opacityMode));
+        return wrapUnique(new AcceleratedImageBufferSurface(deviceSize, opacityMode));
     }
 
     if (shouldAccelerate(deviceSize)) {
         if (document().settings())
             *msaaSampleCount = document().settings()->accelerated2dCanvasMSAASampleCount();
-        OwnPtr<ImageBufferSurface> surface = adoptPtr(new Canvas2DImageBufferSurface(deviceSize, *msaaSampleCount, opacityMode, Canvas2DLayerBridge::EnableAcceleration));
+        std::unique_ptr<ImageBufferSurface> surface = wrapUnique(new Canvas2DImageBufferSurface(deviceSize, *msaaSampleCount, opacityMode, Canvas2DLayerBridge::EnableAcceleration));
         if (surface->isValid()) {
             CanvasMetrics::countCanvasContextUsage(CanvasMetrics::GPUAccelerated2DCanvasImageBufferCreated);
             return surface;
@@ -811,15 +813,15 @@
         CanvasMetrics::countCanvasContextUsage(CanvasMetrics::GPUAccelerated2DCanvasImageBufferCreationFailed);
     }
 
-    OwnPtr<RecordingImageBufferFallbackSurfaceFactory> surfaceFactory = adoptPtr(new UnacceleratedSurfaceFactory());
+    std::unique_ptr<RecordingImageBufferFallbackSurfaceFactory> surfaceFactory = wrapUnique(new UnacceleratedSurfaceFactory());
 
     if (shouldUseDisplayList(deviceSize)) {
-        OwnPtr<ImageBufferSurface> surface = adoptPtr(new RecordingImageBufferSurface(deviceSize, std::move(surfaceFactory), opacityMode));
+        std::unique_ptr<ImageBufferSurface> surface = wrapUnique(new RecordingImageBufferSurface(deviceSize, std::move(surfaceFactory), opacityMode));
         if (surface->isValid()) {
             CanvasMetrics::countCanvasContextUsage(CanvasMetrics::DisplayList2DCanvasImageBufferCreated);
             return surface;
         }
-        surfaceFactory = adoptPtr(new UnacceleratedSurfaceFactory()); // recreate because previous one was released
+        surfaceFactory = wrapUnique(new UnacceleratedSurfaceFactory()); // recreate because previous one was released
     }
     auto surface = surfaceFactory->createSurface(deviceSize, opacityMode);
     if (!surface->isValid()) {
@@ -837,7 +839,7 @@
         m_context->loseContext(CanvasRenderingContext::SyntheticLostContext);
 }
 
-void HTMLCanvasElement::createImageBufferInternal(PassOwnPtr<ImageBufferSurface> externalSurface)
+void HTMLCanvasElement::createImageBufferInternal(std::unique_ptr<ImageBufferSurface> externalSurface)
 {
     DCHECK(!m_imageBuffer);
 
@@ -848,7 +850,7 @@
         return;
 
     int msaaSampleCount = 0;
-    OwnPtr<ImageBufferSurface> surface;
+    std::unique_ptr<ImageBufferSurface> surface;
     if (externalSurface) {
         surface = std::move(externalSurface);
     } else {
@@ -957,7 +959,7 @@
     return m_imageBuffer.get();
 }
 
-void HTMLCanvasElement::createImageBufferUsingSurfaceForTesting(PassOwnPtr<ImageBufferSurface> surface)
+void HTMLCanvasElement::createImageBufferUsingSurfaceForTesting(std::unique_ptr<ImageBufferSurface> surface)
 {
     discardImageBuffer();
     setWidth(surface->size().width());
@@ -1184,7 +1186,7 @@
 
 void HTMLCanvasElement::createSurfaceLayerBridge()
 {
-    m_surfaceLayerBridge = adoptPtr(new CanvasSurfaceLayerBridge());
+    m_surfaceLayerBridge = wrapUnique(new CanvasSurfaceLayerBridge());
 }
 
 } // namespace blink
diff --git a/third_party/WebKit/Source/core/html/HTMLCanvasElement.h b/third_party/WebKit/Source/core/html/HTMLCanvasElement.h
index cb6c241..7ba4aa0 100644
--- a/third_party/WebKit/Source/core/html/HTMLCanvasElement.h
+++ b/third_party/WebKit/Source/core/html/HTMLCanvasElement.h
@@ -46,6 +46,7 @@
 #include "platform/graphics/GraphicsTypes3D.h"
 #include "platform/graphics/ImageBufferClient.h"
 #include "platform/heap/Handle.h"
+#include <memory>
 
 #define CanvasDefaultInterpolationQuality InterpolationLow
 
@@ -185,9 +186,9 @@
 
     DECLARE_VIRTUAL_TRACE_WRAPPERS();
 
-    void createImageBufferUsingSurfaceForTesting(PassOwnPtr<ImageBufferSurface>);
+    void createImageBufferUsingSurfaceForTesting(std::unique_ptr<ImageBufferSurface>);
 
-    static void registerRenderingContextFactory(PassOwnPtr<CanvasRenderingContextFactory>);
+    static void registerRenderingContextFactory(std::unique_ptr<CanvasRenderingContextFactory>);
     void updateExternallyAllocatedMemory() const;
 
     void styleDidChange(const ComputedStyle* oldStyle, const ComputedStyle& newStyle);
@@ -212,7 +213,7 @@
     explicit HTMLCanvasElement(Document&);
     void dispose();
 
-    using ContextFactoryVector = Vector<OwnPtr<CanvasRenderingContextFactory>>;
+    using ContextFactoryVector = Vector<std::unique_ptr<CanvasRenderingContextFactory>>;
     static ContextFactoryVector& renderingContextFactories();
     static CanvasRenderingContextFactory* getRenderingContextFactory(int);
 
@@ -222,9 +223,9 @@
 
     void reset();
 
-    PassOwnPtr<ImageBufferSurface> createImageBufferSurface(const IntSize& deviceSize, int* msaaSampleCount);
+    std::unique_ptr<ImageBufferSurface> createImageBufferSurface(const IntSize& deviceSize, int* msaaSampleCount);
     void createImageBuffer();
-    void createImageBufferInternal(PassOwnPtr<ImageBufferSurface> externalSurface);
+    void createImageBufferInternal(std::unique_ptr<ImageBufferSurface> externalSurface);
     bool shouldUseDisplayList(const IntSize& deviceSize);
 
     void setSurfaceSize(const IntSize&);
@@ -252,12 +253,12 @@
     // after the first attempt failed.
     mutable bool m_didFailToCreateImageBuffer;
     bool m_imageBufferIsClear;
-    OwnPtr<ImageBuffer> m_imageBuffer;
+    std::unique_ptr<ImageBuffer> m_imageBuffer;
 
     mutable RefPtr<Image> m_copiedImage; // FIXME: This is temporary for platforms that have to copy the image buffer to render (and for CSSCanvasValue).
 
     // Used for OffscreenCanvas that controls this HTML canvas element
-    OwnPtr<CanvasSurfaceLayerBridge> m_surfaceLayerBridge;
+    std::unique_ptr<CanvasSurfaceLayerBridge> m_surfaceLayerBridge;
 };
 
 } // namespace blink
diff --git a/third_party/WebKit/Source/core/html/HTMLFormControlElementTest.cpp b/third_party/WebKit/Source/core/html/HTMLFormControlElementTest.cpp
index f4c621c..1f9acf5e 100644
--- a/third_party/WebKit/Source/core/html/HTMLFormControlElementTest.cpp
+++ b/third_party/WebKit/Source/core/html/HTMLFormControlElementTest.cpp
@@ -11,6 +11,7 @@
 #include "core/loader/EmptyClients.h"
 #include "core/testing/DummyPageHolder.h"
 #include "testing/gtest/include/gtest/gtest.h"
+#include <memory>
 
 namespace blink {
 
@@ -22,7 +23,7 @@
     HTMLDocument& document() const { return *m_document; }
 
 private:
-    OwnPtr<DummyPageHolder> m_dummyPageHolder;
+    std::unique_ptr<DummyPageHolder> m_dummyPageHolder;
     Persistent<HTMLDocument> m_document;
 };
 
diff --git a/third_party/WebKit/Source/core/html/HTMLFormElement.h b/third_party/WebKit/Source/core/html/HTMLFormElement.h
index 53feb7a0..df92148 100644
--- a/third_party/WebKit/Source/core/html/HTMLFormElement.h
+++ b/third_party/WebKit/Source/core/html/HTMLFormElement.h
@@ -29,7 +29,6 @@
 #include "core/html/HTMLFormControlElement.h"
 #include "core/html/forms/RadioButtonGroupScope.h"
 #include "core/loader/FormSubmission.h"
-#include "wtf/OwnPtr.h"
 
 namespace blink {
 
diff --git a/third_party/WebKit/Source/core/html/HTMLImageElementTest.cpp b/third_party/WebKit/Source/core/html/HTMLImageElementTest.cpp
index 551499de..76e70be 100644
--- a/third_party/WebKit/Source/core/html/HTMLImageElementTest.cpp
+++ b/third_party/WebKit/Source/core/html/HTMLImageElementTest.cpp
@@ -8,6 +8,7 @@
 #include "core/frame/FrameView.h"
 #include "core/testing/DummyPageHolder.h"
 #include "testing/gtest/include/gtest/gtest.h"
+#include <memory>
 
 namespace blink {
 
@@ -20,7 +21,7 @@
     {
     }
 
-    OwnPtr<DummyPageHolder> m_dummyPageHolder;
+    std::unique_ptr<DummyPageHolder> m_dummyPageHolder;
 };
 
 TEST_F(HTMLImageElementTest, width)
diff --git a/third_party/WebKit/Source/core/html/HTMLImageFallbackHelper.cpp b/third_party/WebKit/Source/core/html/HTMLImageFallbackHelper.cpp
index 8e367eb6..843cb92 100644
--- a/third_party/WebKit/Source/core/html/HTMLImageFallbackHelper.cpp
+++ b/third_party/WebKit/Source/core/html/HTMLImageFallbackHelper.cpp
@@ -16,7 +16,6 @@
 #include "core/html/HTMLImageLoader.h"
 #include "core/html/HTMLInputElement.h"
 #include "core/html/HTMLStyleElement.h"
-#include "wtf/PassOwnPtr.h"
 #include "wtf/text/StringBuilder.h"
 
 namespace blink {
diff --git a/third_party/WebKit/Source/core/html/HTMLInputElementTest.cpp b/third_party/WebKit/Source/core/html/HTMLInputElementTest.cpp
index a5bc1375..bb5c667 100644
--- a/third_party/WebKit/Source/core/html/HTMLInputElementTest.cpp
+++ b/third_party/WebKit/Source/core/html/HTMLInputElementTest.cpp
@@ -10,6 +10,7 @@
 #include "core/html/HTMLHtmlElement.h"
 #include "core/testing/DummyPageHolder.h"
 #include "testing/gtest/include/gtest/gtest.h"
+#include <memory>
 
 namespace blink {
 
@@ -36,7 +37,7 @@
     toHTMLBodyElement(html->firstChild())->setInnerHTML("<input type='range' />", ASSERT_NO_EXCEPTION);
     documentWithoutFrame->appendChild(html);
 
-    OwnPtr<DummyPageHolder> pageHolder = DummyPageHolder::create();
+    std::unique_ptr<DummyPageHolder> pageHolder = DummyPageHolder::create();
     auto& document = pageHolder->document();
     EXPECT_NE(nullptr, document.frameHost());
 
diff --git a/third_party/WebKit/Source/core/html/HTMLMediaElement.cpp b/third_party/WebKit/Source/core/html/HTMLMediaElement.cpp
index bd1dc1d..76a40bc 100644
--- a/third_party/WebKit/Source/core/html/HTMLMediaElement.cpp
+++ b/third_party/WebKit/Source/core/html/HTMLMediaElement.cpp
@@ -91,6 +91,7 @@
 #include "public/platform/modules/remoteplayback/WebRemotePlaybackState.h"
 #include "wtf/CurrentTime.h"
 #include "wtf/MathExtras.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/text/CString.h"
 #include <limits>
 
@@ -3612,7 +3613,7 @@
 
 void HTMLMediaElement::mediaSourceOpened(WebMediaSource* webMediaSource)
 {
-    m_mediaSource->setWebMediaSourceAndOpen(adoptPtr(webMediaSource));
+    m_mediaSource->setWebMediaSourceAndOpen(wrapUnique(webMediaSource));
 }
 
 bool HTMLMediaElement::isInteractiveContent() const
diff --git a/third_party/WebKit/Source/core/html/HTMLMediaElement.h b/third_party/WebKit/Source/core/html/HTMLMediaElement.h
index 653bd314..79c1a3e 100644
--- a/third_party/WebKit/Source/core/html/HTMLMediaElement.h
+++ b/third_party/WebKit/Source/core/html/HTMLMediaElement.h
@@ -40,6 +40,7 @@
 #include "public/platform/WebAudioSourceProviderClient.h"
 #include "public/platform/WebMediaPlayerClient.h"
 #include "public/platform/WebMimeRegistry.h"
+#include <memory>
 
 namespace blink {
 
@@ -547,7 +548,7 @@
     DeferredLoadState m_deferredLoadState;
     Timer<HTMLMediaElement> m_deferredLoadTimer;
 
-    OwnPtr<WebMediaPlayer> m_webMediaPlayer;
+    std::unique_ptr<WebMediaPlayer> m_webMediaPlayer;
     WebLayer* m_webLayer;
 
     DisplayMode m_displayMode;
@@ -596,8 +597,8 @@
     Member<CueTimeline> m_cueTimeline;
 
     HeapVector<Member<ScriptPromiseResolver>> m_playPromiseResolvers;
-    OwnPtr<CancellableTaskFactory> m_playPromiseResolveTask;
-    OwnPtr<CancellableTaskFactory> m_playPromiseRejectTask;
+    std::unique_ptr<CancellableTaskFactory> m_playPromiseResolveTask;
+    std::unique_ptr<CancellableTaskFactory> m_playPromiseRejectTask;
     HeapVector<Member<ScriptPromiseResolver>> m_playPromiseResolveList;
     HeapVector<Member<ScriptPromiseResolver>> m_playPromiseRejectList;
     ExceptionCode m_playPromiseErrorCode;
diff --git a/third_party/WebKit/Source/core/html/HTMLMediaSource.h b/third_party/WebKit/Source/core/html/HTMLMediaSource.h
index 796e6f4..bdee973 100644
--- a/third_party/WebKit/Source/core/html/HTMLMediaSource.h
+++ b/third_party/WebKit/Source/core/html/HTMLMediaSource.h
@@ -35,6 +35,7 @@
 #include "core/html/URLRegistry.h"
 #include "platform/heap/Handle.h"
 #include "wtf/Forward.h"
+#include <memory>
 
 namespace blink {
 
@@ -55,7 +56,7 @@
     // Once attached, the source uses the element to synchronously service some
     // API operations like duration change that may need to initiate seek.
     virtual bool attachToElement(HTMLMediaElement*) = 0;
-    virtual void setWebMediaSourceAndOpen(PassOwnPtr<WebMediaSource>) = 0;
+    virtual void setWebMediaSourceAndOpen(std::unique_ptr<WebMediaSource>) = 0;
     virtual void close() = 0;
     virtual bool isClosed() const = 0;
     virtual double duration() const = 0;
diff --git a/third_party/WebKit/Source/core/html/HTMLSelectElementTest.cpp b/third_party/WebKit/Source/core/html/HTMLSelectElementTest.cpp
index 8f8622b..f24144ea 100644
--- a/third_party/WebKit/Source/core/html/HTMLSelectElementTest.cpp
+++ b/third_party/WebKit/Source/core/html/HTMLSelectElementTest.cpp
@@ -11,6 +11,7 @@
 #include "core/loader/EmptyClients.h"
 #include "core/testing/DummyPageHolder.h"
 #include "testing/gtest/include/gtest/gtest.h"
+#include <memory>
 
 namespace blink {
 
@@ -20,7 +21,7 @@
     HTMLDocument& document() const { return *m_document; }
 
 private:
-    OwnPtr<DummyPageHolder> m_dummyPageHolder;
+    std::unique_ptr<DummyPageHolder> m_dummyPageHolder;
     Persistent<HTMLDocument> m_document;
 };
 
diff --git a/third_party/WebKit/Source/core/html/HTMLTextFormControlElementTest.cpp b/third_party/WebKit/Source/core/html/HTMLTextFormControlElementTest.cpp
index 93529b68..76cad26 100644
--- a/third_party/WebKit/Source/core/html/HTMLTextFormControlElementTest.cpp
+++ b/third_party/WebKit/Source/core/html/HTMLTextFormControlElementTest.cpp
@@ -21,7 +21,8 @@
 #include "core/testing/DummyPageHolder.h"
 #include "platform/testing/UnitTestHelpers.h"
 #include "testing/gtest/include/gtest/gtest.h"
-#include "wtf/OwnPtr.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
@@ -38,8 +39,8 @@
     void forceLayoutFlag();
 
 private:
-    OwnPtr<SpellCheckerClient> m_spellCheckerClient;
-    OwnPtr<DummyPageHolder> m_dummyPageHolder;
+    std::unique_ptr<SpellCheckerClient> m_spellCheckerClient;
+    std::unique_ptr<DummyPageHolder> m_dummyPageHolder;
 
     Persistent<HTMLDocument> m_document;
     Persistent<HTMLTextFormControlElement> m_textControl;
@@ -62,7 +63,7 @@
 {
     Page::PageClients pageClients;
     fillWithEmptyClients(pageClients);
-    m_spellCheckerClient = adoptPtr(new DummySpellCheckerClient);
+    m_spellCheckerClient = wrapUnique(new DummySpellCheckerClient);
     pageClients.spellCheckerClient = m_spellCheckerClient.get();
     m_dummyPageHolder = DummyPageHolder::create(IntSize(800, 600), &pageClients);
 
diff --git a/third_party/WebKit/Source/core/html/HTMLVideoElement.cpp b/third_party/WebKit/Source/core/html/HTMLVideoElement.cpp
index a68cc16..04ae3c0f 100644
--- a/third_party/WebKit/Source/core/html/HTMLVideoElement.cpp
+++ b/third_party/WebKit/Source/core/html/HTMLVideoElement.cpp
@@ -46,6 +46,7 @@
 #include "platform/graphics/ImageBuffer.h"
 #include "platform/graphics/gpu/Extensions3DUtil.h"
 #include "public/platform/WebCanvas.h"
+#include <memory>
 
 namespace blink {
 
@@ -294,7 +295,7 @@
 
     IntSize intrinsicSize(videoWidth(), videoHeight());
     // FIXME: Not sure if we dhould we be doing anything with the AccelerationHint argument here?
-    OwnPtr<ImageBuffer> imageBuffer = ImageBuffer::create(intrinsicSize);
+    std::unique_ptr<ImageBuffer> imageBuffer = ImageBuffer::create(intrinsicSize);
     if (!imageBuffer) {
         *status = InvalidSourceImageStatus;
         return nullptr;
diff --git a/third_party/WebKit/Source/core/html/HTMLVideoElementTest.cpp b/third_party/WebKit/Source/core/html/HTMLVideoElementTest.cpp
index 23c88ae..d50e429 100644
--- a/third_party/WebKit/Source/core/html/HTMLVideoElementTest.cpp
+++ b/third_party/WebKit/Source/core/html/HTMLVideoElementTest.cpp
@@ -14,6 +14,8 @@
 #include "public/platform/WebSize.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
@@ -64,9 +66,9 @@
         return new StubFrameLoaderClient;
     }
 
-    PassOwnPtr<WebMediaPlayer> createWebMediaPlayer(HTMLMediaElement&, const WebMediaPlayerSource&, WebMediaPlayerClient*) override
+    std::unique_ptr<WebMediaPlayer> createWebMediaPlayer(HTMLMediaElement&, const WebMediaPlayerSource&, WebMediaPlayerClient*) override
     {
-        return adoptPtr(new MockWebMediaPlayer);
+        return wrapUnique(new MockWebMediaPlayer);
     }
 };
 
@@ -93,7 +95,7 @@
         return static_cast<MockWebMediaPlayer*>(m_video->webMediaPlayer());
     }
 
-    OwnPtr<DummyPageHolder> m_dummyPageHolder;
+    std::unique_ptr<DummyPageHolder> m_dummyPageHolder;
     Persistent<HTMLVideoElement> m_video;
 };
 
diff --git a/third_party/WebKit/Source/core/html/LinkManifest.h b/third_party/WebKit/Source/core/html/LinkManifest.h
index 7e4db20..0d34d30b 100644
--- a/third_party/WebKit/Source/core/html/LinkManifest.h
+++ b/third_party/WebKit/Source/core/html/LinkManifest.h
@@ -7,7 +7,6 @@
 
 #include "core/html/LinkResource.h"
 #include "wtf/Allocator.h"
-#include "wtf/PassOwnPtr.h"
 #include "wtf/RefPtr.h"
 
 namespace blink {
diff --git a/third_party/WebKit/Source/core/html/PublicURLManager.h b/third_party/WebKit/Source/core/html/PublicURLManager.h
index ec7fbb5..ec59435 100644
--- a/third_party/WebKit/Source/core/html/PublicURLManager.h
+++ b/third_party/WebKit/Source/core/html/PublicURLManager.h
@@ -30,7 +30,6 @@
 #include "platform/heap/Handle.h"
 #include "wtf/HashMap.h"
 #include "wtf/HashSet.h"
-#include "wtf/PassOwnPtr.h"
 #include "wtf/text/WTFString.h"
 
 namespace blink {
diff --git a/third_party/WebKit/Source/core/html/ValidityState.h b/third_party/WebKit/Source/core/html/ValidityState.h
index 13dd57e5..ad43fe0 100644
--- a/third_party/WebKit/Source/core/html/ValidityState.h
+++ b/third_party/WebKit/Source/core/html/ValidityState.h
@@ -26,7 +26,6 @@
 
 #include "bindings/core/v8/ScriptWrappable.h"
 #include "core/html/FormAssociatedElement.h"
-#include "wtf/PassOwnPtr.h"
 
 namespace blink {
 
diff --git a/third_party/WebKit/Source/core/html/canvas/CanvasAsyncBlobCreator.cpp b/third_party/WebKit/Source/core/html/canvas/CanvasAsyncBlobCreator.cpp
index 8781100..0ea4fc06 100644
--- a/third_party/WebKit/Source/core/html/canvas/CanvasAsyncBlobCreator.cpp
+++ b/third_party/WebKit/Source/core/html/canvas/CanvasAsyncBlobCreator.cpp
@@ -17,6 +17,7 @@
 #include "public/platform/WebTraceLocation.h"
 #include "wtf/CurrentTime.h"
 #include "wtf/Functional.h"
+#include "wtf/PtrUtil.h"
 
 namespace blink {
 
@@ -90,7 +91,7 @@
     , m_callback(callback)
 {
     ASSERT(m_data->length() == (unsigned) (size.height() * size.width() * 4));
-    m_encodedImage = adoptPtr(new Vector<unsigned char>());
+    m_encodedImage = wrapUnique(new Vector<unsigned char>());
     m_pixelRowStride = size.width() * NumChannelsPng;
     m_idleTaskStatus = IdleTaskNotSupported;
     m_numRowsCompleted = 0;
diff --git a/third_party/WebKit/Source/core/html/canvas/CanvasAsyncBlobCreator.h b/third_party/WebKit/Source/core/html/canvas/CanvasAsyncBlobCreator.h
index b1176d55..0bb35ed 100644
--- a/third_party/WebKit/Source/core/html/canvas/CanvasAsyncBlobCreator.h
+++ b/third_party/WebKit/Source/core/html/canvas/CanvasAsyncBlobCreator.h
@@ -7,9 +7,9 @@
 #include "core/fileapi/BlobCallback.h"
 #include "platform/geometry/IntSize.h"
 #include "platform/heap/Handle.h"
-#include "wtf/OwnPtr.h"
 #include "wtf/Vector.h"
 #include "wtf/text/WTFString.h"
+#include <memory>
 
 namespace blink {
 
@@ -66,10 +66,10 @@
 
     void dispose();
 
-    OwnPtr<PNGImageEncoderState> m_pngEncoderState;
-    OwnPtr<JPEGImageEncoderState> m_jpegEncoderState;
+    std::unique_ptr<PNGImageEncoderState> m_pngEncoderState;
+    std::unique_ptr<JPEGImageEncoderState> m_jpegEncoderState;
     Member<DOMUint8ClampedArray> m_data;
-    OwnPtr<Vector<unsigned char>> m_encodedImage;
+    std::unique_ptr<Vector<unsigned char>> m_encodedImage;
     int m_numRowsCompleted;
 
     const IntSize m_size;
diff --git a/third_party/WebKit/Source/core/html/canvas/CanvasDrawListener.cpp b/third_party/WebKit/Source/core/html/canvas/CanvasDrawListener.cpp
index 4717d51..0fa892a 100644
--- a/third_party/WebKit/Source/core/html/canvas/CanvasDrawListener.cpp
+++ b/third_party/WebKit/Source/core/html/canvas/CanvasDrawListener.cpp
@@ -4,6 +4,8 @@
 
 #include "core/html/canvas/CanvasDrawListener.h"
 
+#include <memory>
+
 namespace blink {
 
 CanvasDrawListener::~CanvasDrawListener() {}
@@ -23,7 +25,7 @@
     m_frameCaptureRequested = true;
 }
 
-CanvasDrawListener::CanvasDrawListener(PassOwnPtr<WebCanvasCaptureHandler> handler)
+CanvasDrawListener::CanvasDrawListener(std::unique_ptr<WebCanvasCaptureHandler> handler)
     : m_frameCaptureRequested(true)
     , m_handler(std::move(handler))
 {
diff --git a/third_party/WebKit/Source/core/html/canvas/CanvasDrawListener.h b/third_party/WebKit/Source/core/html/canvas/CanvasDrawListener.h
index b03a04d..e0a654db 100644
--- a/third_party/WebKit/Source/core/html/canvas/CanvasDrawListener.h
+++ b/third_party/WebKit/Source/core/html/canvas/CanvasDrawListener.h
@@ -9,6 +9,7 @@
 #include "platform/heap/Handle.h"
 #include "public/platform/WebCanvasCaptureHandler.h"
 #include "wtf/PassRefPtr.h"
+#include <memory>
 
 class SkImage;
 
@@ -22,10 +23,10 @@
     void requestFrame();
 
 protected:
-    explicit CanvasDrawListener(PassOwnPtr<WebCanvasCaptureHandler>);
+    explicit CanvasDrawListener(std::unique_ptr<WebCanvasCaptureHandler>);
 
     bool m_frameCaptureRequested;
-    OwnPtr<WebCanvasCaptureHandler> m_handler;
+    std::unique_ptr<WebCanvasCaptureHandler> m_handler;
 };
 
 } // namespace blink
diff --git a/third_party/WebKit/Source/core/html/canvas/CanvasFontCache.cpp b/third_party/WebKit/Source/core/html/canvas/CanvasFontCache.cpp
index cc641808..a6da4a2 100644
--- a/third_party/WebKit/Source/core/html/canvas/CanvasFontCache.cpp
+++ b/third_party/WebKit/Source/core/html/canvas/CanvasFontCache.cpp
@@ -10,6 +10,7 @@
 #include "core/style/ComputedStyle.h"
 #include "platform/fonts/FontCache.h"
 #include "public/platform/Platform.h"
+#include "wtf/PtrUtil.h"
 
 namespace {
 
@@ -134,7 +135,7 @@
     if (m_pruningScheduled)
         return;
     ASSERT(!m_mainCachePurgePreventer);
-    m_mainCachePurgePreventer = adoptPtr(new FontCachePurgePreventer);
+    m_mainCachePurgePreventer = wrapUnique(new FontCachePurgePreventer);
     Platform::current()->currentThread()->addTaskObserver(this);
     m_pruningScheduled = true;
 }
diff --git a/third_party/WebKit/Source/core/html/canvas/CanvasFontCache.h b/third_party/WebKit/Source/core/html/canvas/CanvasFontCache.h
index 47fc912..f17c620 100644
--- a/third_party/WebKit/Source/core/html/canvas/CanvasFontCache.h
+++ b/third_party/WebKit/Source/core/html/canvas/CanvasFontCache.h
@@ -13,6 +13,7 @@
 #include "wtf/HashMap.h"
 #include "wtf/ListHashSet.h"
 #include "wtf/text/WTFString.h"
+#include <memory>
 
 namespace blink {
 
@@ -55,7 +56,7 @@
     HashMap<String, Font> m_fontsResolvedUsingDefaultStyle;
     MutableStylePropertyMap m_fetchedFonts;
     ListHashSet<String> m_fontLRUList;
-    OwnPtr<FontCachePurgePreventer> m_mainCachePurgePreventer;
+    std::unique_ptr<FontCachePurgePreventer> m_mainCachePurgePreventer;
     Member<Document> m_document;
     RefPtr<ComputedStyle> m_defaultFontStyle;
     bool m_pruningScheduled;
diff --git a/third_party/WebKit/Source/core/html/canvas/CanvasFontCacheTest.cpp b/third_party/WebKit/Source/core/html/canvas/CanvasFontCacheTest.cpp
index 462df0e..ffd08f2 100644
--- a/third_party/WebKit/Source/core/html/canvas/CanvasFontCacheTest.cpp
+++ b/third_party/WebKit/Source/core/html/canvas/CanvasFontCacheTest.cpp
@@ -13,6 +13,7 @@
 #include "platform/graphics/UnacceleratedImageBufferSurface.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
+#include <memory>
 
 using ::testing::Mock;
 
@@ -30,7 +31,7 @@
     CanvasFontCache* cache() { return m_document->canvasFontCache(); }
 
 private:
-    OwnPtr<DummyPageHolder> m_dummyPageHolder;
+    std::unique_ptr<DummyPageHolder> m_dummyPageHolder;
     Persistent<HTMLDocument> m_document;
     Persistent<HTMLCanvasElement> m_canvasElement;
 };
diff --git a/third_party/WebKit/Source/core/html/forms/ButtonInputType.cpp b/third_party/WebKit/Source/core/html/forms/ButtonInputType.cpp
index 8c287c76..3a921fe3 100644
--- a/third_party/WebKit/Source/core/html/forms/ButtonInputType.cpp
+++ b/third_party/WebKit/Source/core/html/forms/ButtonInputType.cpp
@@ -31,7 +31,6 @@
 #include "core/html/forms/ButtonInputType.h"
 
 #include "core/InputTypeNames.h"
-#include "wtf/PassOwnPtr.h"
 
 namespace blink {
 
diff --git a/third_party/WebKit/Source/core/html/forms/CheckboxInputType.cpp b/third_party/WebKit/Source/core/html/forms/CheckboxInputType.cpp
index e6ef9410..1872d26 100644
--- a/third_party/WebKit/Source/core/html/forms/CheckboxInputType.cpp
+++ b/third_party/WebKit/Source/core/html/forms/CheckboxInputType.cpp
@@ -35,7 +35,6 @@
 #include "core/events/KeyboardEvent.h"
 #include "core/html/HTMLInputElement.h"
 #include "platform/text/PlatformLocale.h"
-#include "wtf/PassOwnPtr.h"
 
 namespace blink {
 
diff --git a/third_party/WebKit/Source/core/html/forms/ColorInputType.cpp b/third_party/WebKit/Source/core/html/forms/ColorInputType.cpp
index 55a62830..e7510c5 100644
--- a/third_party/WebKit/Source/core/html/forms/ColorInputType.cpp
+++ b/third_party/WebKit/Source/core/html/forms/ColorInputType.cpp
@@ -49,7 +49,6 @@
 #include "platform/RuntimeEnabledFeatures.h"
 #include "platform/UserGestureIndicator.h"
 #include "platform/graphics/Color.h"
-#include "wtf/PassOwnPtr.h"
 #include "wtf/text/WTFString.h"
 
 namespace blink {
diff --git a/third_party/WebKit/Source/core/html/forms/DateInputType.cpp b/third_party/WebKit/Source/core/html/forms/DateInputType.cpp
index ab75ee4..71bbb9ba 100644
--- a/third_party/WebKit/Source/core/html/forms/DateInputType.cpp
+++ b/third_party/WebKit/Source/core/html/forms/DateInputType.cpp
@@ -37,7 +37,6 @@
 #include "core/html/forms/DateTimeFieldsState.h"
 #include "platform/DateComponents.h"
 #include "platform/text/PlatformLocale.h"
-#include "wtf/PassOwnPtr.h"
 
 namespace blink {
 
diff --git a/third_party/WebKit/Source/core/html/forms/DateTimeLocalInputType.cpp b/third_party/WebKit/Source/core/html/forms/DateTimeLocalInputType.cpp
index 7c525fc2..1e6f6a62 100644
--- a/third_party/WebKit/Source/core/html/forms/DateTimeLocalInputType.cpp
+++ b/third_party/WebKit/Source/core/html/forms/DateTimeLocalInputType.cpp
@@ -37,7 +37,6 @@
 #include "core/html/forms/DateTimeFieldsState.h"
 #include "platform/DateComponents.h"
 #include "platform/text/PlatformLocale.h"
-#include "wtf/PassOwnPtr.h"
 #include "wtf/text/WTFString.h"
 
 namespace blink {
diff --git a/third_party/WebKit/Source/core/html/forms/FileInputType.cpp b/third_party/WebKit/Source/core/html/forms/FileInputType.cpp
index fe130fe..98353fb 100644
--- a/third_party/WebKit/Source/core/html/forms/FileInputType.cpp
+++ b/third_party/WebKit/Source/core/html/forms/FileInputType.cpp
@@ -40,7 +40,6 @@
 #include "platform/RuntimeEnabledFeatures.h"
 #include "platform/UserGestureIndicator.h"
 #include "platform/text/PlatformLocale.h"
-#include "wtf/PassOwnPtr.h"
 #include "wtf/text/StringBuilder.h"
 #include "wtf/text/WTFString.h"
 
diff --git a/third_party/WebKit/Source/core/html/forms/FormController.cpp b/third_party/WebKit/Source/core/html/forms/FormController.cpp
index e28c74d..558ada8 100644
--- a/third_party/WebKit/Source/core/html/forms/FormController.cpp
+++ b/third_party/WebKit/Source/core/html/forms/FormController.cpp
@@ -26,7 +26,9 @@
 #include "platform/FileChooser.h"
 #include "wtf/Deque.h"
 #include "wtf/HashTableDeletedValueType.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/text/StringBuilder.h"
+#include <memory>
 
 namespace blink {
 
@@ -176,8 +178,8 @@
     USING_FAST_MALLOC(SavedFormState);
 
 public:
-    static PassOwnPtr<SavedFormState> create();
-    static PassOwnPtr<SavedFormState> deserialize(const Vector<String>&, size_t& index);
+    static std::unique_ptr<SavedFormState> create();
+    static std::unique_ptr<SavedFormState> deserialize(const Vector<String>&, size_t& index);
     void serializeTo(Vector<String>&) const;
     bool isEmpty() const { return m_stateForNewFormElements.isEmpty(); }
     void appendControlState(const AtomicString& name, const AtomicString& type, const FormControlState&);
@@ -193,9 +195,9 @@
     size_t m_controlStateCount;
 };
 
-PassOwnPtr<SavedFormState> SavedFormState::create()
+std::unique_ptr<SavedFormState> SavedFormState::create()
 {
-    return adoptPtr(new SavedFormState);
+    return wrapUnique(new SavedFormState);
 }
 
 static bool isNotFormControlTypeCharacter(UChar ch)
@@ -203,7 +205,7 @@
     return ch != '-' && (ch > 'z' || ch < 'a');
 }
 
-PassOwnPtr<SavedFormState> SavedFormState::deserialize(const Vector<String>& stateVector, size_t& index)
+std::unique_ptr<SavedFormState> SavedFormState::deserialize(const Vector<String>& stateVector, size_t& index)
 {
     if (index >= stateVector.size())
         return nullptr;
@@ -211,7 +213,7 @@
     size_t itemCount = stateVector[index++].toUInt();
     if (!itemCount)
         return nullptr;
-    OwnPtr<SavedFormState> savedFormState = adoptPtr(new SavedFormState);
+    std::unique_ptr<SavedFormState> savedFormState = wrapUnique(new SavedFormState);
     while (itemCount--) {
         if (index + 1 >= stateVector.size())
             return nullptr;
@@ -411,7 +413,7 @@
 Vector<String> DocumentState::toStateVector()
 {
     FormKeyGenerator* keyGenerator = FormKeyGenerator::create();
-    OwnPtr<SavedFormStateMap> stateMap = adoptPtr(new SavedFormStateMap);
+    std::unique_ptr<SavedFormStateMap> stateMap = wrapUnique(new SavedFormStateMap);
     for (const auto& formControl : m_formControls) {
         HTMLFormControlElementWithState* control = formControl.get();
         ASSERT(control->inShadowIncludingDocument());
@@ -488,7 +490,7 @@
 
     while (i + 1 < stateVector.size()) {
         AtomicString formKey = AtomicString(stateVector[i++]);
-        OwnPtr<SavedFormState> state = SavedFormState::deserialize(stateVector, i);
+        std::unique_ptr<SavedFormState> state = SavedFormState::deserialize(stateVector, i);
         if (!state) {
             i = 0;
             break;
diff --git a/third_party/WebKit/Source/core/html/forms/FormController.h b/third_party/WebKit/Source/core/html/forms/FormController.h
index 785237b..16a6c75 100644
--- a/third_party/WebKit/Source/core/html/forms/FormController.h
+++ b/third_party/WebKit/Source/core/html/forms/FormController.h
@@ -28,6 +28,7 @@
 #include "wtf/ListHashSet.h"
 #include "wtf/Vector.h"
 #include "wtf/text/AtomicStringHash.h"
+#include <memory>
 
 namespace blink {
 
@@ -72,7 +73,7 @@
     m_values.append(value);
 }
 
-using SavedFormStateMap = HashMap<AtomicString, OwnPtr<SavedFormState>>;
+using SavedFormStateMap = HashMap<AtomicString, std::unique_ptr<SavedFormState>>;
 
 class DocumentState final : public GarbageCollected<DocumentState> {
 public:
diff --git a/third_party/WebKit/Source/core/html/forms/HiddenInputType.cpp b/third_party/WebKit/Source/core/html/forms/HiddenInputType.cpp
index ebf7327..a2b0666 100644
--- a/third_party/WebKit/Source/core/html/forms/HiddenInputType.cpp
+++ b/third_party/WebKit/Source/core/html/forms/HiddenInputType.cpp
@@ -36,7 +36,6 @@
 #include "core/html/FormData.h"
 #include "core/html/HTMLInputElement.h"
 #include "core/html/forms/FormController.h"
-#include "wtf/PassOwnPtr.h"
 
 namespace blink {
 
diff --git a/third_party/WebKit/Source/core/html/forms/ImageInputType.cpp b/third_party/WebKit/Source/core/html/forms/ImageInputType.cpp
index a6d333a..3e87020 100644
--- a/third_party/WebKit/Source/core/html/forms/ImageInputType.cpp
+++ b/third_party/WebKit/Source/core/html/forms/ImageInputType.cpp
@@ -35,7 +35,6 @@
 #include "core/html/parser/HTMLParserIdioms.h"
 #include "core/layout/LayoutBlockFlow.h"
 #include "core/layout/LayoutImage.h"
-#include "wtf/PassOwnPtr.h"
 #include "wtf/text/StringBuilder.h"
 
 namespace blink {
diff --git a/third_party/WebKit/Source/core/html/forms/InputType.cpp b/third_party/WebKit/Source/core/html/forms/InputType.cpp
index 4144964..ebd6b06 100644
--- a/third_party/WebKit/Source/core/html/forms/InputType.cpp
+++ b/third_party/WebKit/Source/core/html/forms/InputType.cpp
@@ -71,6 +71,8 @@
 #include "platform/RuntimeEnabledFeatures.h"
 #include "platform/text/PlatformLocale.h"
 #include "platform/text/TextBreakIterator.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
@@ -80,9 +82,9 @@
 using InputTypeFactoryFunction = InputType* (*)(HTMLInputElement&);
 using InputTypeFactoryMap = HashMap<AtomicString, InputTypeFactoryFunction, CaseFoldingHash>;
 
-static PassOwnPtr<InputTypeFactoryMap> createInputTypeFactoryMap()
+static std::unique_ptr<InputTypeFactoryMap> createInputTypeFactoryMap()
 {
-    OwnPtr<InputTypeFactoryMap> map = adoptPtr(new InputTypeFactoryMap);
+    std::unique_ptr<InputTypeFactoryMap> map = wrapUnique(new InputTypeFactoryMap);
     map->add(InputTypeNames::button, ButtonInputType::create);
     map->add(InputTypeNames::checkbox, CheckboxInputType::create);
     map->add(InputTypeNames::color, ColorInputType::create);
@@ -110,7 +112,7 @@
 
 static const InputTypeFactoryMap* factoryMap()
 {
-    static const InputTypeFactoryMap* factoryMap = createInputTypeFactoryMap().leakPtr();
+    static const InputTypeFactoryMap* factoryMap = createInputTypeFactoryMap().release();
     return factoryMap;
 }
 
diff --git a/third_party/WebKit/Source/core/html/forms/MonthInputType.cpp b/third_party/WebKit/Source/core/html/forms/MonthInputType.cpp
index 2b33186..3c60b01 100644
--- a/third_party/WebKit/Source/core/html/forms/MonthInputType.cpp
+++ b/third_party/WebKit/Source/core/html/forms/MonthInputType.cpp
@@ -39,7 +39,6 @@
 #include "wtf/CurrentTime.h"
 #include "wtf/DateMath.h"
 #include "wtf/MathExtras.h"
-#include "wtf/PassOwnPtr.h"
 #include "wtf/text/WTFString.h"
 
 namespace blink {
diff --git a/third_party/WebKit/Source/core/html/forms/NumberInputType.cpp b/third_party/WebKit/Source/core/html/forms/NumberInputType.cpp
index 9b48e328..d234c1e 100644
--- a/third_party/WebKit/Source/core/html/forms/NumberInputType.cpp
+++ b/third_party/WebKit/Source/core/html/forms/NumberInputType.cpp
@@ -43,7 +43,6 @@
 #include "core/layout/LayoutObject.h"
 #include "platform/text/PlatformLocale.h"
 #include "wtf/MathExtras.h"
-#include "wtf/PassOwnPtr.h"
 #include <limits>
 
 namespace blink {
diff --git a/third_party/WebKit/Source/core/html/forms/RadioButtonGroupScope.h b/third_party/WebKit/Source/core/html/forms/RadioButtonGroupScope.h
index bdc28630..4dd49dde 100644
--- a/third_party/WebKit/Source/core/html/forms/RadioButtonGroupScope.h
+++ b/third_party/WebKit/Source/core/html/forms/RadioButtonGroupScope.h
@@ -24,7 +24,6 @@
 #include "platform/heap/Handle.h"
 #include "wtf/Forward.h"
 #include "wtf/HashMap.h"
-#include "wtf/OwnPtr.h"
 #include "wtf/text/StringHash.h"
 
 namespace blink {
diff --git a/third_party/WebKit/Source/core/html/forms/RadioInputType.cpp b/third_party/WebKit/Source/core/html/forms/RadioInputType.cpp
index 656a6e98..550985d8 100644
--- a/third_party/WebKit/Source/core/html/forms/RadioInputType.cpp
+++ b/third_party/WebKit/Source/core/html/forms/RadioInputType.cpp
@@ -31,7 +31,6 @@
 #include "core/html/HTMLInputElement.h"
 #include "core/page/SpatialNavigation.h"
 #include "platform/text/PlatformLocale.h"
-#include "wtf/PassOwnPtr.h"
 
 namespace blink {
 
diff --git a/third_party/WebKit/Source/core/html/forms/RangeInputType.cpp b/third_party/WebKit/Source/core/html/forms/RangeInputType.cpp
index ffb1bea..b5bc8c4 100644
--- a/third_party/WebKit/Source/core/html/forms/RangeInputType.cpp
+++ b/third_party/WebKit/Source/core/html/forms/RangeInputType.cpp
@@ -56,7 +56,6 @@
 #include "platform/PlatformMouseEvent.h"
 #include "wtf/MathExtras.h"
 #include "wtf/NonCopyingSort.h"
-#include "wtf/PassOwnPtr.h"
 #include <limits>
 
 namespace blink {
diff --git a/third_party/WebKit/Source/core/html/forms/ResetInputType.cpp b/third_party/WebKit/Source/core/html/forms/ResetInputType.cpp
index 7bb7317..e832161 100644
--- a/third_party/WebKit/Source/core/html/forms/ResetInputType.cpp
+++ b/third_party/WebKit/Source/core/html/forms/ResetInputType.cpp
@@ -36,7 +36,6 @@
 #include "core/html/HTMLFormElement.h"
 #include "core/html/HTMLInputElement.h"
 #include "platform/text/PlatformLocale.h"
-#include "wtf/PassOwnPtr.h"
 
 namespace blink {
 
diff --git a/third_party/WebKit/Source/core/html/forms/SearchInputType.cpp b/third_party/WebKit/Source/core/html/forms/SearchInputType.cpp
index e12b515..23dfa89 100644
--- a/third_party/WebKit/Source/core/html/forms/SearchInputType.cpp
+++ b/third_party/WebKit/Source/core/html/forms/SearchInputType.cpp
@@ -40,7 +40,6 @@
 #include "core/html/shadow/ShadowElementNames.h"
 #include "core/html/shadow/TextControlInnerElements.h"
 #include "core/layout/LayoutSearchField.h"
-#include "wtf/PassOwnPtr.h"
 
 namespace blink {
 
diff --git a/third_party/WebKit/Source/core/html/forms/SubmitInputType.cpp b/third_party/WebKit/Source/core/html/forms/SubmitInputType.cpp
index c33b946..59c7aaf 100644
--- a/third_party/WebKit/Source/core/html/forms/SubmitInputType.cpp
+++ b/third_party/WebKit/Source/core/html/forms/SubmitInputType.cpp
@@ -37,7 +37,6 @@
 #include "core/html/HTMLFormElement.h"
 #include "core/html/HTMLInputElement.h"
 #include "platform/text/PlatformLocale.h"
-#include "wtf/PassOwnPtr.h"
 
 namespace blink {
 
diff --git a/third_party/WebKit/Source/core/html/forms/TelephoneInputType.cpp b/third_party/WebKit/Source/core/html/forms/TelephoneInputType.cpp
index 11982aa0..5c041b8 100644
--- a/third_party/WebKit/Source/core/html/forms/TelephoneInputType.cpp
+++ b/third_party/WebKit/Source/core/html/forms/TelephoneInputType.cpp
@@ -31,7 +31,6 @@
 #include "core/html/forms/TelephoneInputType.h"
 
 #include "core/InputTypeNames.h"
-#include "wtf/PassOwnPtr.h"
 
 namespace blink {
 
diff --git a/third_party/WebKit/Source/core/html/forms/TextInputType.cpp b/third_party/WebKit/Source/core/html/forms/TextInputType.cpp
index 854a2d3..3073c70 100644
--- a/third_party/WebKit/Source/core/html/forms/TextInputType.cpp
+++ b/third_party/WebKit/Source/core/html/forms/TextInputType.cpp
@@ -32,7 +32,6 @@
 
 #include "core/InputTypeNames.h"
 #include "core/html/HTMLInputElement.h"
-#include "wtf/PassOwnPtr.h"
 
 namespace blink {
 
diff --git a/third_party/WebKit/Source/core/html/forms/TimeInputType.cpp b/third_party/WebKit/Source/core/html/forms/TimeInputType.cpp
index 8a0edc7a..475d4e7 100644
--- a/third_party/WebKit/Source/core/html/forms/TimeInputType.cpp
+++ b/third_party/WebKit/Source/core/html/forms/TimeInputType.cpp
@@ -41,7 +41,6 @@
 #include "wtf/CurrentTime.h"
 #include "wtf/DateMath.h"
 #include "wtf/MathExtras.h"
-#include "wtf/PassOwnPtr.h"
 #include "wtf/text/WTFString.h"
 
 namespace blink {
diff --git a/third_party/WebKit/Source/core/html/forms/URLInputType.cpp b/third_party/WebKit/Source/core/html/forms/URLInputType.cpp
index 4328f90..e4ce6b2 100644
--- a/third_party/WebKit/Source/core/html/forms/URLInputType.cpp
+++ b/third_party/WebKit/Source/core/html/forms/URLInputType.cpp
@@ -34,7 +34,6 @@
 #include "core/html/HTMLInputElement.h"
 #include "core/html/parser/HTMLParserIdioms.h"
 #include "platform/text/PlatformLocale.h"
-#include "wtf/PassOwnPtr.h"
 
 namespace blink {
 
diff --git a/third_party/WebKit/Source/core/html/forms/WeekInputType.cpp b/third_party/WebKit/Source/core/html/forms/WeekInputType.cpp
index f9592d9..626c8d82 100644
--- a/third_party/WebKit/Source/core/html/forms/WeekInputType.cpp
+++ b/third_party/WebKit/Source/core/html/forms/WeekInputType.cpp
@@ -36,7 +36,6 @@
 #include "core/html/forms/DateTimeFieldsState.h"
 #include "platform/DateComponents.h"
 #include "platform/text/PlatformLocale.h"
-#include "wtf/PassOwnPtr.h"
 #include "wtf/text/WTFString.h"
 
 namespace blink {
diff --git a/third_party/WebKit/Source/core/html/imports/HTMLImportLoader.cpp b/third_party/WebKit/Source/core/html/imports/HTMLImportLoader.cpp
index 4a9596f0..1615aac 100644
--- a/third_party/WebKit/Source/core/html/imports/HTMLImportLoader.cpp
+++ b/third_party/WebKit/Source/core/html/imports/HTMLImportLoader.cpp
@@ -39,6 +39,7 @@
 #include "core/html/imports/HTMLImportsController.h"
 #include "core/loader/DocumentWriter.h"
 #include "platform/network/ContentSecurityPolicyResponseHeaders.h"
+#include <memory>
 
 
 namespace blink {
@@ -71,7 +72,7 @@
     setResource(resource);
 }
 
-void HTMLImportLoader::responseReceived(Resource* resource, const ResourceResponse& response, PassOwnPtr<WebDataConsumerHandle> handle)
+void HTMLImportLoader::responseReceived(Resource* resource, const ResourceResponse& response, std::unique_ptr<WebDataConsumerHandle> handle)
 {
     ASSERT_UNUSED(handle, !handle);
     // Resource may already have been loaded with the import loader
diff --git a/third_party/WebKit/Source/core/html/imports/HTMLImportLoader.h b/third_party/WebKit/Source/core/html/imports/HTMLImportLoader.h
index b029f2b..0ecc96db 100644
--- a/third_party/WebKit/Source/core/html/imports/HTMLImportLoader.h
+++ b/third_party/WebKit/Source/core/html/imports/HTMLImportLoader.h
@@ -35,9 +35,8 @@
 #include "core/fetch/RawResource.h"
 #include "core/fetch/ResourceOwner.h"
 #include "platform/heap/Handle.h"
-#include "wtf/OwnPtr.h"
-#include "wtf/PassOwnPtr.h"
 #include "wtf/Vector.h"
+#include <memory>
 
 namespace blink {
 
@@ -97,7 +96,7 @@
     HTMLImportLoader(HTMLImportsController*);
 
     // RawResourceClient
-    void responseReceived(Resource*, const ResourceResponse&, PassOwnPtr<WebDataConsumerHandle>) override;
+    void responseReceived(Resource*, const ResourceResponse&, std::unique_ptr<WebDataConsumerHandle>) override;
     void dataReceived(Resource*, const char* data, size_t length) override;
     void notifyFinished(Resource*) override;
     String debugName() const override { return "HTMLImportLoader"; }
diff --git a/third_party/WebKit/Source/core/html/imports/HTMLImportTreeRoot.h b/third_party/WebKit/Source/core/html/imports/HTMLImportTreeRoot.h
index 317bf5d..f2ec8a7f 100644
--- a/third_party/WebKit/Source/core/html/imports/HTMLImportTreeRoot.h
+++ b/third_party/WebKit/Source/core/html/imports/HTMLImportTreeRoot.h
@@ -7,7 +7,6 @@
 
 #include "core/html/imports/HTMLImport.h"
 #include "platform/Timer.h"
-#include "wtf/PassOwnPtr.h"
 
 namespace blink {
 
diff --git a/third_party/WebKit/Source/core/html/imports/LinkImport.h b/third_party/WebKit/Source/core/html/imports/LinkImport.h
index d512bb6..b0cc9a4b 100644
--- a/third_party/WebKit/Source/core/html/imports/LinkImport.h
+++ b/third_party/WebKit/Source/core/html/imports/LinkImport.h
@@ -34,7 +34,6 @@
 #include "core/html/LinkResource.h"
 #include "core/html/imports/HTMLImportChildClient.h"
 #include "wtf/Allocator.h"
-#include "wtf/PassOwnPtr.h"
 #include "wtf/RefPtr.h"
 
 namespace blink {
diff --git a/third_party/WebKit/Source/core/html/parser/AtomicHTMLToken.h b/third_party/WebKit/Source/core/html/parser/AtomicHTMLToken.h
index 8f8205f2..3c28c83c 100644
--- a/third_party/WebKit/Source/core/html/parser/AtomicHTMLToken.h
+++ b/third_party/WebKit/Source/core/html/parser/AtomicHTMLToken.h
@@ -31,6 +31,8 @@
 #include "core/html/parser/CompactHTMLToken.h"
 #include "core/html/parser/HTMLToken.h"
 #include "wtf/Allocator.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
@@ -151,7 +153,7 @@
             break;
         case HTMLToken::DOCTYPE:
             m_name = AtomicString(token.data());
-            m_doctypeData = adoptPtr(new DoctypeData());
+            m_doctypeData = wrapUnique(new DoctypeData());
             m_doctypeData->m_hasPublicIdentifier = true;
             append(m_doctypeData->m_publicIdentifier, token.publicIdentifier());
             m_doctypeData->m_hasSystemIdentifier = true;
@@ -212,7 +214,7 @@
     String m_data;
 
     // For DOCTYPE
-    OwnPtr<DoctypeData> m_doctypeData;
+    std::unique_ptr<DoctypeData> m_doctypeData;
 
     // For StartTag and EndTag
     bool m_selfClosing;
diff --git a/third_party/WebKit/Source/core/html/parser/BackgroundHTMLParser.cpp b/third_party/WebKit/Source/core/html/parser/BackgroundHTMLParser.cpp
index d2e5924f..a022af5 100644
--- a/third_party/WebKit/Source/core/html/parser/BackgroundHTMLParser.cpp
+++ b/third_party/WebKit/Source/core/html/parser/BackgroundHTMLParser.cpp
@@ -33,7 +33,9 @@
 #include "platform/TraceEvent.h"
 #include "public/platform/Platform.h"
 #include "public/platform/WebTaskRunner.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/text/TextPosition.h"
+#include <memory>
 
 namespace blink {
 
@@ -80,7 +82,7 @@
 
 #endif
 
-void BackgroundHTMLParser::start(PassRefPtr<WeakReference<BackgroundHTMLParser>> reference, PassOwnPtr<Configuration> config, const KURL& documentURL, PassOwnPtr<CachedDocumentParameters> cachedDocumentParameters, const MediaValuesCached::MediaValuesCachedData& mediaValuesCachedData, PassOwnPtr<WebTaskRunner> loadingTaskRunner)
+void BackgroundHTMLParser::start(PassRefPtr<WeakReference<BackgroundHTMLParser>> reference, std::unique_ptr<Configuration> config, const KURL& documentURL, std::unique_ptr<CachedDocumentParameters> cachedDocumentParameters, const MediaValuesCached::MediaValuesCachedData& mediaValuesCachedData, std::unique_ptr<WebTaskRunner> loadingTaskRunner)
 {
     new BackgroundHTMLParser(reference, std::move(config), documentURL, std::move(cachedDocumentParameters), mediaValuesCachedData, std::move(loadingTaskRunner));
     // Caller must free by calling stop().
@@ -92,18 +94,18 @@
 {
 }
 
-BackgroundHTMLParser::BackgroundHTMLParser(PassRefPtr<WeakReference<BackgroundHTMLParser>> reference, PassOwnPtr<Configuration> config, const KURL& documentURL, PassOwnPtr<CachedDocumentParameters> cachedDocumentParameters, const MediaValuesCached::MediaValuesCachedData& mediaValuesCachedData, PassOwnPtr<WebTaskRunner> loadingTaskRunner)
+BackgroundHTMLParser::BackgroundHTMLParser(PassRefPtr<WeakReference<BackgroundHTMLParser>> reference, std::unique_ptr<Configuration> config, const KURL& documentURL, std::unique_ptr<CachedDocumentParameters> cachedDocumentParameters, const MediaValuesCached::MediaValuesCachedData& mediaValuesCachedData, std::unique_ptr<WebTaskRunner> loadingTaskRunner)
     : m_weakFactory(reference, this)
-    , m_token(adoptPtr(new HTMLToken))
+    , m_token(wrapUnique(new HTMLToken))
     , m_tokenizer(HTMLTokenizer::create(config->options))
     , m_treeBuilderSimulator(config->options)
     , m_options(config->options)
     , m_outstandingTokenLimit(config->outstandingTokenLimit)
     , m_parser(config->parser)
-    , m_pendingTokens(adoptPtr(new CompactHTMLTokenStream))
+    , m_pendingTokens(wrapUnique(new CompactHTMLTokenStream))
     , m_pendingTokenLimit(config->pendingTokenLimit)
     , m_xssAuditor(std::move(config->xssAuditor))
-    , m_preloadScanner(adoptPtr(new TokenPreloadScanner(documentURL, std::move(cachedDocumentParameters), mediaValuesCachedData)))
+    , m_preloadScanner(wrapUnique(new TokenPreloadScanner(documentURL, std::move(cachedDocumentParameters), mediaValuesCachedData)))
     , m_decoder(std::move(config->decoder))
     , m_loadingTaskRunner(std::move(loadingTaskRunner))
     , m_parsedChunkQueue(config->parsedChunkQueue.release())
@@ -124,7 +126,7 @@
     updateDocument(m_decoder->decode(data, dataLength));
 }
 
-void BackgroundHTMLParser::appendRawBytesFromMainThread(PassOwnPtr<Vector<char>> buffer)
+void BackgroundHTMLParser::appendRawBytesFromMainThread(std::unique_ptr<Vector<char>> buffer)
 {
     ASSERT(m_decoder);
     updateDocument(m_decoder->decode(buffer->data(), buffer->size()));
@@ -137,7 +139,7 @@
     pumpTokenizer();
 }
 
-void BackgroundHTMLParser::setDecoder(PassOwnPtr<TextResourceDecoder> decoder)
+void BackgroundHTMLParser::setDecoder(std::unique_ptr<TextResourceDecoder> decoder)
 {
     ASSERT(decoder);
     m_decoder = std::move(decoder);
@@ -168,7 +170,7 @@
     appendDecodedBytes(decodedData);
 }
 
-void BackgroundHTMLParser::resumeFrom(PassOwnPtr<Checkpoint> checkpoint)
+void BackgroundHTMLParser::resumeFrom(std::unique_ptr<Checkpoint> checkpoint)
 {
     m_parser = checkpoint->parser;
     m_token = std::move(checkpoint->token);
@@ -240,7 +242,7 @@
         {
             TextPosition position = TextPosition(m_input.current().currentLine(), m_input.current().currentColumn());
 
-            if (OwnPtr<XSSInfo> xssInfo = m_xssAuditor->filterToken(FilterTokenRequest(*m_token, m_sourceTracker, m_tokenizer->shouldAllowCDATA()))) {
+            if (std::unique_ptr<XSSInfo> xssInfo = m_xssAuditor->filterToken(FilterTokenRequest(*m_token, m_sourceTracker, m_tokenizer->shouldAllowCDATA()))) {
                 xssInfo->m_textPosition = position;
                 m_pendingXSSInfos.append(std::move(xssInfo));
             }
@@ -287,7 +289,7 @@
     checkThatXSSInfosAreSafeToSendToAnotherThread(m_pendingXSSInfos);
 #endif
 
-    OwnPtr<HTMLDocumentParser::ParsedChunk> chunk = adoptPtr(new HTMLDocumentParser::ParsedChunk);
+    std::unique_ptr<HTMLDocumentParser::ParsedChunk> chunk = wrapUnique(new HTMLDocumentParser::ParsedChunk);
     TRACE_EVENT_WITH_FLOW0("blink,loading", "BackgroundHTMLParser::sendTokensToMainThread", chunk.get(), TRACE_EVENT_FLAG_FLOW_OUT);
     chunk->preloads.swap(m_pendingPreloads);
     if (m_viewportDescription.set)
@@ -309,7 +311,7 @@
             threadSafeBind(&HTMLDocumentParser::notifyPendingParsedChunks, m_parser));
     }
 
-    m_pendingTokens = adoptPtr(new CompactHTMLTokenStream);
+    m_pendingTokens = wrapUnique(new CompactHTMLTokenStream);
 }
 
 } // namespace blink
diff --git a/third_party/WebKit/Source/core/html/parser/BackgroundHTMLParser.h b/third_party/WebKit/Source/core/html/parser/BackgroundHTMLParser.h
index 28320e7..3553f42 100644
--- a/third_party/WebKit/Source/core/html/parser/BackgroundHTMLParser.h
+++ b/third_party/WebKit/Source/core/html/parser/BackgroundHTMLParser.h
@@ -36,8 +36,8 @@
 #include "core/html/parser/ParsedChunkQueue.h"
 #include "core/html/parser/TextResourceDecoder.h"
 #include "core/html/parser/XSSAuditorDelegate.h"
-#include "wtf/PassOwnPtr.h"
 #include "wtf/WeakPtr.h"
+#include <memory>
 
 namespace blink {
 
@@ -55,8 +55,8 @@
         Configuration();
         HTMLParserOptions options;
         WeakPtr<HTMLDocumentParser> parser;
-        OwnPtr<XSSAuditor> xssAuditor;
-        OwnPtr<TextResourceDecoder> decoder;
+        std::unique_ptr<XSSAuditor> xssAuditor;
+        std::unique_ptr<TextResourceDecoder> decoder;
         RefPtr<ParsedChunkQueue> parsedChunkQueue;
         // outstandingTokenLimit must be greater than or equal to
         // pendingTokenLimit
@@ -64,14 +64,14 @@
         size_t pendingTokenLimit;
     };
 
-    static void start(PassRefPtr<WeakReference<BackgroundHTMLParser>>, PassOwnPtr<Configuration>, const KURL& documentURL, PassOwnPtr<CachedDocumentParameters>, const MediaValuesCached::MediaValuesCachedData&, PassOwnPtr<WebTaskRunner>);
+    static void start(PassRefPtr<WeakReference<BackgroundHTMLParser>>, std::unique_ptr<Configuration>, const KURL& documentURL, std::unique_ptr<CachedDocumentParameters>, const MediaValuesCached::MediaValuesCachedData&, std::unique_ptr<WebTaskRunner>);
 
     struct Checkpoint {
         USING_FAST_MALLOC(Checkpoint);
     public:
         WeakPtr<HTMLDocumentParser> parser;
-        OwnPtr<HTMLToken> token;
-        OwnPtr<HTMLTokenizer> tokenizer;
+        std::unique_ptr<HTMLToken> token;
+        std::unique_ptr<HTMLTokenizer> tokenizer;
         HTMLTreeBuilderSimulator::State treeBuilderState;
         HTMLInputCheckpoint inputCheckpoint;
         TokenPreloadScannerCheckpoint preloadScannerCheckpoint;
@@ -80,10 +80,10 @@
 
     void appendRawBytesFromParserThread(const char* data, int dataLength);
 
-    void appendRawBytesFromMainThread(PassOwnPtr<Vector<char>>);
-    void setDecoder(PassOwnPtr<TextResourceDecoder>);
+    void appendRawBytesFromMainThread(std::unique_ptr<Vector<char>>);
+    void setDecoder(std::unique_ptr<TextResourceDecoder>);
     void flush();
-    void resumeFrom(PassOwnPtr<Checkpoint>);
+    void resumeFrom(std::unique_ptr<Checkpoint>);
     void startedChunkWithCheckpoint(HTMLInputCheckpoint);
     void finish();
     void stop();
@@ -91,7 +91,7 @@
     void forcePlaintextForTextDocument();
 
 private:
-    BackgroundHTMLParser(PassRefPtr<WeakReference<BackgroundHTMLParser>>, PassOwnPtr<Configuration>, const KURL& documentURL, PassOwnPtr<CachedDocumentParameters>, const MediaValuesCached::MediaValuesCachedData&, PassOwnPtr<WebTaskRunner>);
+    BackgroundHTMLParser(PassRefPtr<WeakReference<BackgroundHTMLParser>>, std::unique_ptr<Configuration>, const KURL& documentURL, std::unique_ptr<CachedDocumentParameters>, const MediaValuesCached::MediaValuesCachedData&, std::unique_ptr<WebTaskRunner>);
     ~BackgroundHTMLParser();
 
     void appendDecodedBytes(const String&);
@@ -103,14 +103,14 @@
     WeakPtrFactory<BackgroundHTMLParser> m_weakFactory;
     BackgroundHTMLInputStream m_input;
     HTMLSourceTracker m_sourceTracker;
-    OwnPtr<HTMLToken> m_token;
-    OwnPtr<HTMLTokenizer> m_tokenizer;
+    std::unique_ptr<HTMLToken> m_token;
+    std::unique_ptr<HTMLTokenizer> m_tokenizer;
     HTMLTreeBuilderSimulator m_treeBuilderSimulator;
     HTMLParserOptions m_options;
     const size_t m_outstandingTokenLimit;
     WeakPtr<HTMLDocumentParser> m_parser;
 
-    OwnPtr<CompactHTMLTokenStream> m_pendingTokens;
+    std::unique_ptr<CompactHTMLTokenStream> m_pendingTokens;
     const size_t m_pendingTokenLimit;
     PreloadRequestStream m_pendingPreloads;
     // Indices into |m_pendingTokens|.
@@ -118,11 +118,11 @@
     ViewportDescriptionWrapper m_viewportDescription;
     XSSInfoStream m_pendingXSSInfos;
 
-    OwnPtr<XSSAuditor> m_xssAuditor;
-    OwnPtr<TokenPreloadScanner> m_preloadScanner;
-    OwnPtr<TextResourceDecoder> m_decoder;
+    std::unique_ptr<XSSAuditor> m_xssAuditor;
+    std::unique_ptr<TokenPreloadScanner> m_preloadScanner;
+    std::unique_ptr<TextResourceDecoder> m_decoder;
     DocumentEncodingData m_lastSeenEncodingData;
-    OwnPtr<WebTaskRunner> m_loadingTaskRunner;
+    std::unique_ptr<WebTaskRunner> m_loadingTaskRunner;
     RefPtr<ParsedChunkQueue> m_parsedChunkQueue;
 
     bool m_startingScript;
diff --git a/third_party/WebKit/Source/core/html/parser/CSSPreloadScanner.cpp b/third_party/WebKit/Source/core/html/parser/CSSPreloadScanner.cpp
index 939aa383..0b8fb30 100644
--- a/third_party/WebKit/Source/core/html/parser/CSSPreloadScanner.cpp
+++ b/third_party/WebKit/Source/core/html/parser/CSSPreloadScanner.cpp
@@ -30,6 +30,7 @@
 #include "core/fetch/FetchInitiatorTypeNames.h"
 #include "core/html/parser/HTMLParserIdioms.h"
 #include "platform/text/SegmentedString.h"
+#include <memory>
 
 namespace blink {
 
@@ -220,7 +221,7 @@
         String url = parseCSSStringOrURL(m_ruleValue.toString());
         if (!url.isEmpty()) {
             TextPosition position = TextPosition(source.currentLine(), source.currentColumn());
-            OwnPtr<PreloadRequest> request = PreloadRequest::create(FetchInitiatorTypeNames::css, position, url, *m_predictedBaseElementURL, Resource::CSSStyleSheet, m_referrerPolicy);
+            std::unique_ptr<PreloadRequest> request = PreloadRequest::create(FetchInitiatorTypeNames::css, position, url, *m_predictedBaseElementURL, Resource::CSSStyleSheet, m_referrerPolicy);
             // FIXME: Should this be including the charset in the preload request?
             m_requests->append(std::move(request));
         }
diff --git a/third_party/WebKit/Source/core/html/parser/HTMLDocumentParser.cpp b/third_party/WebKit/Source/core/html/parser/HTMLDocumentParser.cpp
index 69f8d51..aa007910 100644
--- a/third_party/WebKit/Source/core/html/parser/HTMLDocumentParser.cpp
+++ b/third_party/WebKit/Source/core/html/parser/HTMLDocumentParser.cpp
@@ -55,7 +55,9 @@
 #include "public/platform/WebLoadingBehaviorFlag.h"
 #include "public/platform/WebScheduler.h"
 #include "public/platform/WebThread.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/TemporaryChange.h"
+#include <memory>
 
 namespace blink {
 
@@ -89,11 +91,11 @@
 HTMLDocumentParser::HTMLDocumentParser(HTMLDocument& document, ParserSynchronizationPolicy syncPolicy)
     : ScriptableDocumentParser(document)
     , m_options(&document)
-    , m_token(syncPolicy == ForceSynchronousParsing ? adoptPtr(new HTMLToken) : nullptr)
+    , m_token(syncPolicy == ForceSynchronousParsing ? wrapUnique(new HTMLToken) : nullptr)
     , m_tokenizer(syncPolicy == ForceSynchronousParsing ? HTMLTokenizer::create(m_options) : nullptr)
     , m_scriptRunner(HTMLScriptRunner::create(&document, this))
     , m_treeBuilder(HTMLTreeBuilder::create(this, &document, getParserContentPolicy(), m_options))
-    , m_loadingTaskRunner(adoptPtr(document.loadingTaskRunner()->clone()))
+    , m_loadingTaskRunner(wrapUnique(document.loadingTaskRunner()->clone()))
     , m_parserScheduler(HTMLParserScheduler::create(this, m_loadingTaskRunner.get()))
     , m_xssAuditorDelegate(&document)
     , m_weakFactory(this)
@@ -117,10 +119,10 @@
 HTMLDocumentParser::HTMLDocumentParser(DocumentFragment* fragment, Element* contextElement, ParserContentPolicy parserContentPolicy)
     : ScriptableDocumentParser(fragment->document(), parserContentPolicy)
     , m_options(&fragment->document())
-    , m_token(adoptPtr(new HTMLToken))
+    , m_token(wrapUnique(new HTMLToken))
     , m_tokenizer(HTMLTokenizer::create(m_options))
     , m_treeBuilder(HTMLTreeBuilder::create(this, fragment, contextElement, this->getParserContentPolicy(), m_options))
-    , m_loadingTaskRunner(adoptPtr(fragment->document().loadingTaskRunner()->clone()))
+    , m_loadingTaskRunner(wrapUnique(fragment->document().loadingTaskRunner()->clone()))
     , m_xssAuditorDelegate(&fragment->document())
     , m_weakFactory(this)
     , m_shouldUseThreading(false)
@@ -290,7 +292,7 @@
     TRACE_EVENT0("blink", "HTMLDocumentParser::notifyPendingParsedChunks");
     ASSERT(m_parsedChunkQueue);
 
-    Vector<OwnPtr<ParsedChunk>> pendingChunks;
+    Vector<std::unique_ptr<ParsedChunk>> pendingChunks;
     m_parsedChunkQueue->takeAll(pendingChunks);
 
     if (!isParsing())
@@ -341,7 +343,7 @@
     document()->setEncodingData(data);
 }
 
-void HTMLDocumentParser::validateSpeculations(PassOwnPtr<ParsedChunk> chunk)
+void HTMLDocumentParser::validateSpeculations(std::unique_ptr<ParsedChunk> chunk)
 {
     ASSERT(chunk);
     if (isWaitingForScripts()) {
@@ -355,8 +357,8 @@
     }
 
     ASSERT(!m_lastChunkBeforeScript);
-    OwnPtr<HTMLTokenizer> tokenizer = std::move(m_tokenizer);
-    OwnPtr<HTMLToken> token = std::move(m_token);
+    std::unique_ptr<HTMLTokenizer> tokenizer = std::move(m_tokenizer);
+    std::unique_ptr<HTMLToken> token = std::move(m_token);
 
     if (!tokenizer) {
         // There must not have been any changes to the HTMLTokenizer state on
@@ -380,12 +382,12 @@
     discardSpeculationsAndResumeFrom(std::move(chunk), std::move(token), std::move(tokenizer));
 }
 
-void HTMLDocumentParser::discardSpeculationsAndResumeFrom(PassOwnPtr<ParsedChunk> lastChunkBeforeScript, PassOwnPtr<HTMLToken> token, PassOwnPtr<HTMLTokenizer> tokenizer)
+void HTMLDocumentParser::discardSpeculationsAndResumeFrom(std::unique_ptr<ParsedChunk> lastChunkBeforeScript, std::unique_ptr<HTMLToken> token, std::unique_ptr<HTMLTokenizer> tokenizer)
 {
     m_weakFactory.revokeAll();
     m_speculations.clear();
 
-    OwnPtr<BackgroundHTMLParser::Checkpoint> checkpoint = adoptPtr(new BackgroundHTMLParser::Checkpoint);
+    std::unique_ptr<BackgroundHTMLParser::Checkpoint> checkpoint = wrapUnique(new BackgroundHTMLParser::Checkpoint);
     checkpoint->parser = m_weakFactory.createWeakPtr();
     checkpoint->token = std::move(token);
     checkpoint->tokenizer = std::move(tokenizer);
@@ -399,7 +401,7 @@
     HTMLParserThread::shared()->postTask(threadSafeBind(&BackgroundHTMLParser::resumeFrom, m_backgroundParser, passed(std::move(checkpoint))));
 }
 
-size_t HTMLDocumentParser::processParsedChunkFromBackgroundParser(PassOwnPtr<ParsedChunk> popChunk)
+size_t HTMLDocumentParser::processParsedChunkFromBackgroundParser(std::unique_ptr<ParsedChunk> popChunk)
 {
     TRACE_EVENT_WITH_FLOW0("blink,loading", "HTMLDocumentParser::processParsedChunkFromBackgroundParser", popChunk.get(), TRACE_EVENT_FLAG_FLOW_IN);
     TemporaryChange<bool> hasLineNumber(m_isParsingAtLineNumber, true);
@@ -414,8 +416,8 @@
     ASSERT(!m_token);
     ASSERT(!m_lastChunkBeforeScript);
 
-    OwnPtr<ParsedChunk> chunk(std::move(popChunk));
-    OwnPtr<CompactHTMLTokenStream> tokens = std::move(chunk->tokens);
+    std::unique_ptr<ParsedChunk> chunk(std::move(popChunk));
+    std::unique_ptr<CompactHTMLTokenStream> tokens = std::move(chunk->tokens);
     size_t elementTokenCount = 0;
 
     HTMLParserThread::shared()->postTask(threadSafeBind(&BackgroundHTMLParser::startedChunkWithCheckpoint, m_backgroundParser, chunk->inputCheckpoint));
@@ -584,7 +586,7 @@
 
             // We do not XSS filter innerHTML, which means we (intentionally) fail
             // http/tests/security/xssAuditor/dom-write-innerHTML.html
-            if (OwnPtr<XSSInfo> xssInfo = m_xssAuditor.filterToken(FilterTokenRequest(token(), m_sourceTracker, m_tokenizer->shouldAllowCDATA())))
+            if (std::unique_ptr<XSSInfo> xssInfo = m_xssAuditor.filterToken(FilterTokenRequest(token(), m_sourceTracker, m_tokenizer->shouldAllowCDATA())))
                 m_xssAuditorDelegate.didBlockScript(*xssInfo);
         }
 
@@ -673,7 +675,7 @@
     if (!m_tokenizer) {
         ASSERT(!inPumpSession());
         ASSERT(m_haveBackgroundParser || wasCreatedByScript());
-        m_token = adoptPtr(new HTMLToken);
+        m_token = wrapUnique(new HTMLToken);
         m_tokenizer = HTMLTokenizer::create(m_options);
     }
 
@@ -709,10 +711,10 @@
     RefPtr<WeakReference<BackgroundHTMLParser>> reference = WeakReference<BackgroundHTMLParser>::createUnbound();
     m_backgroundParser = WeakPtr<BackgroundHTMLParser>(reference);
 
-    OwnPtr<BackgroundHTMLParser::Configuration> config = adoptPtr(new BackgroundHTMLParser::Configuration);
+    std::unique_ptr<BackgroundHTMLParser::Configuration> config = wrapUnique(new BackgroundHTMLParser::Configuration);
     config->options = m_options;
     config->parser = m_weakFactory.createWeakPtr();
-    config->xssAuditor = adoptPtr(new XSSAuditor);
+    config->xssAuditor = wrapUnique(new XSSAuditor);
     config->xssAuditor->init(document(), &m_xssAuditorDelegate);
 
     config->decoder = takeDecoder();
@@ -732,7 +734,7 @@
         document()->url(),
         passed(CachedDocumentParameters::create(document())),
         MediaValuesCached::MediaValuesCachedData(*document()),
-        passed(adoptPtr(m_loadingTaskRunner->clone()))));
+        passed(wrapUnique(m_loadingTaskRunner->clone()))));
 }
 
 void HTMLDocumentParser::stopBackgroundParser()
@@ -858,7 +860,7 @@
         // We're finishing before receiving any data. Rather than booting up
         // the background parser just to spin it down, we finish parsing
         // synchronously.
-        m_token = adoptPtr(new HTMLToken);
+        m_token = wrapUnique(new HTMLToken);
         m_tokenizer = HTMLTokenizer::create(m_options);
     }
 
@@ -1010,7 +1012,7 @@
         if (!m_haveBackgroundParser)
             startBackgroundParser();
 
-        OwnPtr<Vector<char>> buffer = adoptPtr(new Vector<char>(length));
+        std::unique_ptr<Vector<char>> buffer = wrapUnique(new Vector<char>(length));
         memcpy(buffer->data(), data, length);
         TRACE_EVENT1(TRACE_DISABLED_BY_DEFAULT("blink.debug"), "HTMLDocumentParser::appendBytes", "size", (unsigned)length);
 
@@ -1032,7 +1034,7 @@
         // appendBytes. Fallback to synchronous parsing in that case.
         if (!m_haveBackgroundParser) {
             m_shouldUseThreading = false;
-            m_token = adoptPtr(new HTMLToken);
+            m_token = wrapUnique(new HTMLToken);
             m_tokenizer = HTMLTokenizer::create(m_options);
             DecodedDataDocumentParser::flush();
             return;
@@ -1044,7 +1046,7 @@
     }
 }
 
-void HTMLDocumentParser::setDecoder(PassOwnPtr<TextResourceDecoder> decoder)
+void HTMLDocumentParser::setDecoder(std::unique_ptr<TextResourceDecoder> decoder)
 {
     ASSERT(decoder);
     DecodedDataDocumentParser::setDecoder(std::move(decoder));
@@ -1066,7 +1068,7 @@
         m_preloader->takeAndPreload(m_queuedPreloads);
 }
 
-PassOwnPtr<HTMLPreloadScanner> HTMLDocumentParser::createPreloadScanner()
+std::unique_ptr<HTMLPreloadScanner> HTMLDocumentParser::createPreloadScanner()
 {
     return HTMLPreloadScanner::create(
         m_options,
@@ -1093,7 +1095,7 @@
     double duration = monotonicallyIncreasingTimeMS() - startTime;
 
     int currentPreloadCount = document()->loader()->fetcher()->countPreloads();
-    OwnPtr<HTMLPreloadScanner> scanner = createPreloadScanner();
+    std::unique_ptr<HTMLPreloadScanner> scanner = createPreloadScanner();
     scanner->appendToEnd(SegmentedString(writtenSource));
     scanner->scanAndPreload(m_preloader.get(), document()->baseElementURL(), nullptr);
     int numPreloads = document()->loader()->fetcher()->countPreloads() - currentPreloadCount;
diff --git a/third_party/WebKit/Source/core/html/parser/HTMLDocumentParser.h b/third_party/WebKit/Source/core/html/parser/HTMLDocumentParser.h
index 11273d40..8f4fc0e 100644
--- a/third_party/WebKit/Source/core/html/parser/HTMLDocumentParser.h
+++ b/third_party/WebKit/Source/core/html/parser/HTMLDocumentParser.h
@@ -47,9 +47,9 @@
 #include "core/html/parser/XSSAuditorDelegate.h"
 #include "platform/text/SegmentedString.h"
 #include "wtf/Deque.h"
-#include "wtf/OwnPtr.h"
 #include "wtf/WeakPtr.h"
 #include "wtf/text/TextPosition.h"
+#include <memory>
 
 namespace blink {
 
@@ -94,7 +94,7 @@
     struct ParsedChunk {
         USING_FAST_MALLOC(ParsedChunk);
     public:
-        OwnPtr<CompactHTMLTokenStream> tokens;
+        std::unique_ptr<CompactHTMLTokenStream> tokens;
         PreloadRequestStream preloads;
         ViewportDescriptionWrapper viewport;
         XSSInfoStream xssInfos;
@@ -111,7 +111,7 @@
 
     void appendBytes(const char* bytes, size_t length) override;
     void flush() final;
-    void setDecoder(PassOwnPtr<TextResourceDecoder>) final;
+    void setDecoder(std::unique_ptr<TextResourceDecoder>) final;
 
 protected:
     void insert(const SegmentedString&) final;
@@ -149,9 +149,9 @@
 
     void startBackgroundParser();
     void stopBackgroundParser();
-    void validateSpeculations(PassOwnPtr<ParsedChunk> lastChunk);
-    void discardSpeculationsAndResumeFrom(PassOwnPtr<ParsedChunk> lastChunk, PassOwnPtr<HTMLToken>, PassOwnPtr<HTMLTokenizer>);
-    size_t processParsedChunkFromBackgroundParser(PassOwnPtr<ParsedChunk>);
+    void validateSpeculations(std::unique_ptr<ParsedChunk> lastChunk);
+    void discardSpeculationsAndResumeFrom(std::unique_ptr<ParsedChunk> lastChunk, std::unique_ptr<HTMLToken>, std::unique_ptr<HTMLTokenizer>);
+    size_t processParsedChunkFromBackgroundParser(std::unique_ptr<ParsedChunk>);
     void pumpPendingSpeculations();
 
     bool canTakeNextToken();
@@ -175,7 +175,7 @@
     bool inPumpSession() const { return m_pumpSessionNestingLevel > 0; }
     bool shouldDelayEnd() const { return inPumpSession() || isWaitingForScripts() || isScheduledForResume() || isExecutingScript(); }
 
-    PassOwnPtr<HTMLPreloadScanner> createPreloadScanner();
+    std::unique_ptr<HTMLPreloadScanner> createPreloadScanner();
 
     int preloadInsertion(const SegmentedString& source);
     void evaluateAndPreloadScriptForDocumentWrite(const String& source);
@@ -185,13 +185,13 @@
     HTMLParserOptions m_options;
     HTMLInputStream m_input;
 
-    OwnPtr<HTMLToken> m_token;
-    OwnPtr<HTMLTokenizer> m_tokenizer;
+    std::unique_ptr<HTMLToken> m_token;
+    std::unique_ptr<HTMLTokenizer> m_tokenizer;
     Member<HTMLScriptRunner> m_scriptRunner;
     Member<HTMLTreeBuilder> m_treeBuilder;
-    OwnPtr<HTMLPreloadScanner> m_preloadScanner;
-    OwnPtr<HTMLPreloadScanner> m_insertionPreloadScanner;
-    OwnPtr<WebTaskRunner> m_loadingTaskRunner;
+    std::unique_ptr<HTMLPreloadScanner> m_preloadScanner;
+    std::unique_ptr<HTMLPreloadScanner> m_insertionPreloadScanner;
+    std::unique_ptr<WebTaskRunner> m_loadingTaskRunner;
     Member<HTMLParserScheduler> m_parserScheduler;
     HTMLSourceTracker m_sourceTracker;
     TextPosition m_textPosition;
@@ -200,15 +200,15 @@
 
     // FIXME: m_lastChunkBeforeScript, m_tokenizer, m_token, and m_input should be combined into a single state object
     // so they can be set and cleared together and passed between threads together.
-    OwnPtr<ParsedChunk> m_lastChunkBeforeScript;
-    Deque<OwnPtr<ParsedChunk>> m_speculations;
+    std::unique_ptr<ParsedChunk> m_lastChunkBeforeScript;
+    Deque<std::unique_ptr<ParsedChunk>> m_speculations;
     WeakPtrFactory<HTMLDocumentParser> m_weakFactory;
     WeakPtr<BackgroundHTMLParser> m_backgroundParser;
     Member<HTMLResourcePreloader> m_preloader;
     PreloadRequestStream m_queuedPreloads;
     Vector<String> m_queuedDocumentWriteScripts;
     RefPtr<ParsedChunkQueue> m_parsedChunkQueue;
-    OwnPtr<DocumentWriteEvaluator> m_evaluator;
+    std::unique_ptr<DocumentWriteEvaluator> m_evaluator;
 
     bool m_shouldUseThreading;
     bool m_endWasDelayed;
diff --git a/third_party/WebKit/Source/core/html/parser/HTMLElementStack.h b/third_party/WebKit/Source/core/html/parser/HTMLElementStack.h
index 4bb7331..53d3e0c 100644
--- a/third_party/WebKit/Source/core/html/parser/HTMLElementStack.h
+++ b/third_party/WebKit/Source/core/html/parser/HTMLElementStack.h
@@ -30,8 +30,6 @@
 #include "core/html/parser/HTMLStackItem.h"
 #include "wtf/Forward.h"
 #include "wtf/Noncopyable.h"
-#include "wtf/OwnPtr.h"
-#include "wtf/PassOwnPtr.h"
 #include "wtf/RefPtr.h"
 
 namespace blink {
diff --git a/third_party/WebKit/Source/core/html/parser/HTMLMetaCharsetParser.h b/third_party/WebKit/Source/core/html/parser/HTMLMetaCharsetParser.h
index 18796f83..35837bd 100644
--- a/third_party/WebKit/Source/core/html/parser/HTMLMetaCharsetParser.h
+++ b/third_party/WebKit/Source/core/html/parser/HTMLMetaCharsetParser.h
@@ -29,8 +29,10 @@
 #include "core/html/parser/HTMLToken.h"
 #include "platform/text/SegmentedString.h"
 #include "wtf/Noncopyable.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/text/TextCodec.h"
 #include "wtf/text/TextEncoding.h"
+#include <memory>
 
 namespace blink {
 
@@ -39,7 +41,7 @@
 class HTMLMetaCharsetParser {
     WTF_MAKE_NONCOPYABLE(HTMLMetaCharsetParser); USING_FAST_MALLOC(HTMLMetaCharsetParser);
 public:
-    static PassOwnPtr<HTMLMetaCharsetParser> create() { return adoptPtr(new HTMLMetaCharsetParser()); }
+    static std::unique_ptr<HTMLMetaCharsetParser> create() { return wrapUnique(new HTMLMetaCharsetParser()); }
 
     ~HTMLMetaCharsetParser();
 
@@ -53,8 +55,8 @@
 
     bool processMeta();
 
-    OwnPtr<HTMLTokenizer> m_tokenizer;
-    OwnPtr<TextCodec> m_assumedCodec;
+    std::unique_ptr<HTMLTokenizer> m_tokenizer;
+    std::unique_ptr<TextCodec> m_assumedCodec;
     SegmentedString m_input;
     HTMLToken m_token;
     bool m_inHeadSection;
diff --git a/third_party/WebKit/Source/core/html/parser/HTMLParserScheduler.cpp b/third_party/WebKit/Source/core/html/parser/HTMLParserScheduler.cpp
index ae74514..0d757cbc5 100644
--- a/third_party/WebKit/Source/core/html/parser/HTMLParserScheduler.cpp
+++ b/third_party/WebKit/Source/core/html/parser/HTMLParserScheduler.cpp
@@ -26,12 +26,13 @@
 #include "core/html/parser/HTMLParserScheduler.h"
 
 #include "core/dom/Document.h"
-#include "core/html/parser/HTMLDocumentParser.h"
 #include "core/frame/FrameView.h"
+#include "core/html/parser/HTMLDocumentParser.h"
 #include "public/platform/Platform.h"
 #include "public/platform/WebScheduler.h"
 #include "public/platform/WebThread.h"
 #include "wtf/CurrentTime.h"
+#include "wtf/PtrUtil.h"
 
 namespace blink {
 
@@ -67,7 +68,7 @@
 
 HTMLParserScheduler::HTMLParserScheduler(HTMLDocumentParser* parser, WebTaskRunner* loadingTaskRunner)
     : m_parser(parser)
-    , m_loadingTaskRunner(adoptPtr(loadingTaskRunner->clone()))
+    , m_loadingTaskRunner(wrapUnique(loadingTaskRunner->clone()))
     , m_cancellableContinueParse(CancellableTaskFactory::create(this, &HTMLParserScheduler::continueParsing))
     , m_isSuspendedWithActiveTimer(false)
 {
diff --git a/third_party/WebKit/Source/core/html/parser/HTMLParserScheduler.h b/third_party/WebKit/Source/core/html/parser/HTMLParserScheduler.h
index 2651e5e..e8bd9af 100644
--- a/third_party/WebKit/Source/core/html/parser/HTMLParserScheduler.h
+++ b/third_party/WebKit/Source/core/html/parser/HTMLParserScheduler.h
@@ -29,8 +29,8 @@
 #include "core/html/parser/NestingLevelIncrementer.h"
 #include "platform/scheduler/CancellableTaskFactory.h"
 #include "wtf/Allocator.h"
-#include "wtf/PassOwnPtr.h"
 #include "wtf/RefPtr.h"
+#include <memory>
 
 namespace blink {
 
@@ -96,9 +96,9 @@
     void continueParsing();
 
     Member<HTMLDocumentParser> m_parser;
-    OwnPtr<WebTaskRunner> m_loadingTaskRunner;
+    std::unique_ptr<WebTaskRunner> m_loadingTaskRunner;
 
-    OwnPtr<CancellableTaskFactory> m_cancellableContinueParse;
+    std::unique_ptr<CancellableTaskFactory> m_cancellableContinueParse;
     bool m_isSuspendedWithActiveTimer;
 };
 
diff --git a/third_party/WebKit/Source/core/html/parser/HTMLParserThread.cpp b/third_party/WebKit/Source/core/html/parser/HTMLParserThread.cpp
index 90a6fea..8740657 100644
--- a/third_party/WebKit/Source/core/html/parser/HTMLParserThread.cpp
+++ b/third_party/WebKit/Source/core/html/parser/HTMLParserThread.cpp
@@ -35,7 +35,6 @@
 #include "platform/heap/SafePoint.h"
 #include "public/platform/Platform.h"
 #include "public/platform/WebTraceLocation.h"
-#include "wtf/PassOwnPtr.h"
 
 namespace blink {
 
diff --git a/third_party/WebKit/Source/core/html/parser/HTMLParserThread.h b/third_party/WebKit/Source/core/html/parser/HTMLParserThread.h
index 3a595b79..308229a 100644
--- a/third_party/WebKit/Source/core/html/parser/HTMLParserThread.h
+++ b/third_party/WebKit/Source/core/html/parser/HTMLParserThread.h
@@ -36,8 +36,7 @@
 #include "platform/WebThreadSupportingGC.h"
 #include "wtf/Allocator.h"
 #include "wtf/Functional.h"
-#include "wtf/OwnPtr.h"
-#include "wtf/PassOwnPtr.h"
+#include <memory>
 
 namespace blink {
 
@@ -58,7 +57,7 @@
     void setupHTMLParserThread();
     void cleanupHTMLParserThread(WaitableEvent*);
 
-    OwnPtr<WebThreadSupportingGC> m_thread;
+    std::unique_ptr<WebThreadSupportingGC> m_thread;
 };
 
 } // namespace blink
diff --git a/third_party/WebKit/Source/core/html/parser/HTMLPreloadScanner.cpp b/third_party/WebKit/Source/core/html/parser/HTMLPreloadScanner.cpp
index 40c27a3..14ecba3 100644
--- a/third_party/WebKit/Source/core/html/parser/HTMLPreloadScanner.cpp
+++ b/third_party/WebKit/Source/core/html/parser/HTMLPreloadScanner.cpp
@@ -50,6 +50,7 @@
 #include "platform/Histogram.h"
 #include "platform/MIMETypeRegistry.h"
 #include "platform/TraceEvent.h"
+#include <memory>
 
 namespace blink {
 
@@ -206,7 +207,7 @@
         }
     }
 
-    PassOwnPtr<PreloadRequest> createPreloadRequest(const KURL& predictedBaseURL, const SegmentedString& source, const ClientHintsPreferences& clientHintsPreferences, const PictureData& pictureData, const ReferrerPolicy documentReferrerPolicy)
+    std::unique_ptr<PreloadRequest> createPreloadRequest(const KURL& predictedBaseURL, const SegmentedString& source, const ClientHintsPreferences& clientHintsPreferences, const PictureData& pictureData, const ReferrerPolicy documentReferrerPolicy)
     {
         PreloadRequest::RequestType requestType = PreloadRequest::RequestTypePreload;
         if (shouldPreconnect()) {
@@ -240,7 +241,7 @@
 
         // The element's 'referrerpolicy' attribute (if present) takes precedence over the document's referrer policy.
         ReferrerPolicy referrerPolicy = (m_referrerPolicy != ReferrerPolicyDefault) ? m_referrerPolicy : documentReferrerPolicy;
-        OwnPtr<PreloadRequest> request = PreloadRequest::create(initiatorFor(m_tagImpl), position, m_urlToLoad, predictedBaseURL, type, referrerPolicy, resourceWidth, clientHintsPreferences, requestType);
+        std::unique_ptr<PreloadRequest> request = PreloadRequest::create(initiatorFor(m_tagImpl), position, m_urlToLoad, predictedBaseURL, type, referrerPolicy, resourceWidth, clientHintsPreferences, requestType);
         request->setCrossOrigin(m_crossOrigin);
         request->setCharset(charset());
         request->setDefer(m_defer);
@@ -480,7 +481,7 @@
     IntegrityMetadataSet m_integrityMetadata;
 };
 
-TokenPreloadScanner::TokenPreloadScanner(const KURL& documentURL, PassOwnPtr<CachedDocumentParameters> documentParameters, const MediaValuesCached::MediaValuesCachedData& mediaValuesCachedData)
+TokenPreloadScanner::TokenPreloadScanner(const KURL& documentURL, std::unique_ptr<CachedDocumentParameters> documentParameters, const MediaValuesCached::MediaValuesCachedData& mediaValuesCachedData)
     : m_documentURL(documentURL)
     , m_inStyle(false)
     , m_inPicture(false)
@@ -744,7 +745,7 @@
         scanner.processAttributes(token.attributes());
         if (m_inPicture)
             scanner.handlePictureSourceURL(m_pictureData);
-        OwnPtr<PreloadRequest> request = scanner.createPreloadRequest(m_predictedBaseElementURL, source, m_clientHintsPreferences, m_pictureData, m_documentParameters->referrerPolicy);
+        std::unique_ptr<PreloadRequest> request = scanner.createPreloadRequest(m_predictedBaseElementURL, source, m_clientHintsPreferences, m_pictureData, m_documentParameters->referrerPolicy);
         if (request)
             requests.append(std::move(request));
         return;
@@ -765,7 +766,7 @@
     }
 }
 
-HTMLPreloadScanner::HTMLPreloadScanner(const HTMLParserOptions& options, const KURL& documentURL, PassOwnPtr<CachedDocumentParameters> documentParameters, const MediaValuesCached::MediaValuesCachedData& mediaValuesCachedData)
+HTMLPreloadScanner::HTMLPreloadScanner(const HTMLParserOptions& options, const KURL& documentURL, std::unique_ptr<CachedDocumentParameters> documentParameters, const MediaValuesCached::MediaValuesCachedData& mediaValuesCachedData)
     : m_scanner(documentURL, std::move(documentParameters), mediaValuesCachedData)
     , m_tokenizer(HTMLTokenizer::create(options))
 {
diff --git a/third_party/WebKit/Source/core/html/parser/HTMLPreloadScanner.h b/third_party/WebKit/Source/core/html/parser/HTMLPreloadScanner.h
index fbbe93b..8da9b7b 100644
--- a/third_party/WebKit/Source/core/html/parser/HTMLPreloadScanner.h
+++ b/third_party/WebKit/Source/core/html/parser/HTMLPreloadScanner.h
@@ -34,7 +34,9 @@
 #include "core/html/parser/CompactHTMLToken.h"
 #include "core/html/parser/HTMLToken.h"
 #include "platform/text/SegmentedString.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/Vector.h"
+#include <memory>
 
 namespace blink {
 
@@ -56,9 +58,9 @@
 struct CORE_EXPORT CachedDocumentParameters {
     USING_FAST_MALLOC(CachedDocumentParameters);
 public:
-    static PassOwnPtr<CachedDocumentParameters> create(Document* document)
+    static std::unique_ptr<CachedDocumentParameters> create(Document* document)
     {
-        return adoptPtr(new CachedDocumentParameters(document));
+        return wrapUnique(new CachedDocumentParameters(document));
     }
 
     bool doHtmlPreloadScanning;
@@ -75,7 +77,7 @@
 class TokenPreloadScanner {
     WTF_MAKE_NONCOPYABLE(TokenPreloadScanner); USING_FAST_MALLOC(TokenPreloadScanner);
 public:
-    TokenPreloadScanner(const KURL& documentURL, PassOwnPtr<CachedDocumentParameters>, const MediaValuesCached::MediaValuesCachedData&);
+    TokenPreloadScanner(const KURL& documentURL, std::unique_ptr<CachedDocumentParameters>, const MediaValuesCached::MediaValuesCachedData&);
     ~TokenPreloadScanner();
 
     void scan(const HTMLToken&, const SegmentedString&, PreloadRequestStream& requests, ViewportDescriptionWrapper*);
@@ -142,7 +144,7 @@
     bool m_isCSPEnabled;
     PictureData m_pictureData;
     size_t m_templateCount;
-    OwnPtr<CachedDocumentParameters> m_documentParameters;
+    std::unique_ptr<CachedDocumentParameters> m_documentParameters;
     Persistent<MediaValuesCached> m_mediaValues;
     ClientHintsPreferences m_clientHintsPreferences;
 
@@ -154,9 +156,9 @@
 class CORE_EXPORT HTMLPreloadScanner {
     WTF_MAKE_NONCOPYABLE(HTMLPreloadScanner); USING_FAST_MALLOC(HTMLPreloadScanner);
 public:
-    static PassOwnPtr<HTMLPreloadScanner> create(const HTMLParserOptions& options, const KURL& documentURL, PassOwnPtr<CachedDocumentParameters> documentParameters, const MediaValuesCached::MediaValuesCachedData& mediaValuesCachedData)
+    static std::unique_ptr<HTMLPreloadScanner> create(const HTMLParserOptions& options, const KURL& documentURL, std::unique_ptr<CachedDocumentParameters> documentParameters, const MediaValuesCached::MediaValuesCachedData& mediaValuesCachedData)
     {
-        return adoptPtr(new HTMLPreloadScanner(options, documentURL, std::move(documentParameters), mediaValuesCachedData));
+        return wrapUnique(new HTMLPreloadScanner(options, documentURL, std::move(documentParameters), mediaValuesCachedData));
     }
 
 
@@ -166,12 +168,12 @@
     void scanAndPreload(ResourcePreloader*, const KURL& documentBaseElementURL, ViewportDescriptionWrapper*);
 
 private:
-    HTMLPreloadScanner(const HTMLParserOptions&, const KURL& documentURL, PassOwnPtr<CachedDocumentParameters>, const MediaValuesCached::MediaValuesCachedData&);
+    HTMLPreloadScanner(const HTMLParserOptions&, const KURL& documentURL, std::unique_ptr<CachedDocumentParameters>, const MediaValuesCached::MediaValuesCachedData&);
 
     TokenPreloadScanner m_scanner;
     SegmentedString m_source;
     HTMLToken m_token;
-    OwnPtr<HTMLTokenizer> m_tokenizer;
+    std::unique_ptr<HTMLTokenizer> m_tokenizer;
 };
 
 } // namespace blink
diff --git a/third_party/WebKit/Source/core/html/parser/HTMLPreloadScannerTest.cpp b/third_party/WebKit/Source/core/html/parser/HTMLPreloadScannerTest.cpp
index 8b90b65..bc584d1e 100644
--- a/third_party/WebKit/Source/core/html/parser/HTMLPreloadScannerTest.cpp
+++ b/third_party/WebKit/Source/core/html/parser/HTMLPreloadScannerTest.cpp
@@ -13,6 +13,7 @@
 #include "core/html/parser/HTMLResourcePreloader.h"
 #include "core/testing/DummyPageHolder.h"
 #include "testing/gtest/include/gtest/gtest.h"
+#include <memory>
 
 namespace blink {
 
@@ -80,13 +81,13 @@
     }
 
 protected:
-    void preload(PassOwnPtr<PreloadRequest> preloadRequest, const NetworkHintsInterface&) override
+    void preload(std::unique_ptr<PreloadRequest> preloadRequest, const NetworkHintsInterface&) override
     {
         m_preloadRequest = std::move(preloadRequest);
     }
 
 private:
-    OwnPtr<PreloadRequest> m_preloadRequest;
+    std::unique_ptr<PreloadRequest> m_preloadRequest;
 };
 
 class HTMLPreloadScannerTest : public testing::Test {
@@ -171,8 +172,8 @@
     }
 
 private:
-    OwnPtr<DummyPageHolder> m_dummyPageHolder;
-    OwnPtr<HTMLPreloadScanner> m_scanner;
+    std::unique_ptr<DummyPageHolder> m_dummyPageHolder;
+    std::unique_ptr<HTMLPreloadScanner> m_scanner;
 };
 
 TEST_F(HTMLPreloadScannerTest, testImages)
diff --git a/third_party/WebKit/Source/core/html/parser/HTMLResourcePreloader.cpp b/third_party/WebKit/Source/core/html/parser/HTMLResourcePreloader.cpp
index efa3ff9..1b6b669 100644
--- a/third_party/WebKit/Source/core/html/parser/HTMLResourcePreloader.cpp
+++ b/third_party/WebKit/Source/core/html/parser/HTMLResourcePreloader.cpp
@@ -31,6 +31,7 @@
 #include "core/loader/DocumentLoader.h"
 #include "platform/Histogram.h"
 #include "public/platform/Platform.h"
+#include <memory>
 
 namespace blink {
 
@@ -59,7 +60,7 @@
     networkHintsInterface.preconnectHost(host, request->crossOrigin());
 }
 
-void HTMLResourcePreloader::preload(PassOwnPtr<PreloadRequest> preload, const NetworkHintsInterface& networkHintsInterface)
+void HTMLResourcePreloader::preload(std::unique_ptr<PreloadRequest> preload, const NetworkHintsInterface& networkHintsInterface)
 {
     if (preload->isPreconnect()) {
         preconnectHost(preload.get(), networkHintsInterface);
diff --git a/third_party/WebKit/Source/core/html/parser/HTMLResourcePreloader.h b/third_party/WebKit/Source/core/html/parser/HTMLResourcePreloader.h
index 29ddf17c..e2df0cde 100644
--- a/third_party/WebKit/Source/core/html/parser/HTMLResourcePreloader.h
+++ b/third_party/WebKit/Source/core/html/parser/HTMLResourcePreloader.h
@@ -33,6 +33,7 @@
 #include "core/loader/NetworkHintsInterface.h"
 #include "wtf/CurrentTime.h"
 #include "wtf/text/TextPosition.h"
+#include <memory>
 
 namespace blink {
 
@@ -44,7 +45,7 @@
     DECLARE_TRACE();
 
 protected:
-    void preload(PassOwnPtr<PreloadRequest>, const NetworkHintsInterface&) override;
+    void preload(std::unique_ptr<PreloadRequest>, const NetworkHintsInterface&) override;
 
 private:
     explicit HTMLResourcePreloader(Document&);
diff --git a/third_party/WebKit/Source/core/html/parser/HTMLResourcePreloaderTest.cpp b/third_party/WebKit/Source/core/html/parser/HTMLResourcePreloaderTest.cpp
index 4326fd3..7455b241 100644
--- a/third_party/WebKit/Source/core/html/parser/HTMLResourcePreloaderTest.cpp
+++ b/third_party/WebKit/Source/core/html/parser/HTMLResourcePreloaderTest.cpp
@@ -7,6 +7,7 @@
 #include "core/html/parser/PreloadRequest.h"
 #include "core/testing/DummyPageHolder.h"
 #include "testing/gtest/include/gtest/gtest.h"
+#include <memory>
 
 namespace blink {
 
@@ -53,7 +54,7 @@
     {
         // TODO(yoav): Need a mock loader here to verify things are happenning beyond preconnect.
         PreloaderNetworkHintsMock networkHints;
-        OwnPtr<PreloadRequest> preloadRequest = PreloadRequest::create(String(),
+        std::unique_ptr<PreloadRequest> preloadRequest = PreloadRequest::create(String(),
             TextPosition(),
             testCase.url,
             KURL(ParsedURLStringTag(), testCase.baseURL),
@@ -72,7 +73,7 @@
     }
 
 private:
-    OwnPtr<DummyPageHolder> m_dummyPageHolder;
+    std::unique_ptr<DummyPageHolder> m_dummyPageHolder;
 };
 
 TEST_F(HTMLResourcePreloaderTest, testPreconnect)
diff --git a/third_party/WebKit/Source/core/html/parser/HTMLScriptRunner.cpp b/third_party/WebKit/Source/core/html/parser/HTMLScriptRunner.cpp
index 70e4f9a..f5839e7 100644
--- a/third_party/WebKit/Source/core/html/parser/HTMLScriptRunner.cpp
+++ b/third_party/WebKit/Source/core/html/parser/HTMLScriptRunner.cpp
@@ -30,9 +30,9 @@
 #include "bindings/core/v8/V8PerIsolateData.h"
 #include "core/dom/DocumentParserTiming.h"
 #include "core/dom/Element.h"
-#include "core/events/Event.h"
 #include "core/dom/IgnoreDestructiveWriteCountIncrementer.h"
 #include "core/dom/ScriptLoader.h"
+#include "core/events/Event.h"
 #include "core/fetch/ScriptResource.h"
 #include "core/frame/LocalFrame.h"
 #include "core/html/parser/HTMLInputStream.h"
@@ -44,6 +44,7 @@
 #include "public/platform/Platform.h"
 #include "public/platform/WebFrameScheduler.h"
 #include <inttypes.h>
+#include <memory>
 
 namespace blink {
 
@@ -51,9 +52,9 @@
 
 // TODO(bmcquade): move this to a shared location if we find ourselves wanting
 // to trace similar data elsewhere in the codebase.
-PassOwnPtr<TracedValue> getTraceArgsForScriptElement(Element* element, const TextPosition& textPosition)
+std::unique_ptr<TracedValue> getTraceArgsForScriptElement(Element* element, const TextPosition& textPosition)
 {
-    OwnPtr<TracedValue> value = TracedValue::create();
+    std::unique_ptr<TracedValue> value = TracedValue::create();
     ScriptLoader* scriptLoader = toScriptLoaderIfPossible(element);
     if (scriptLoader && scriptLoader->resource())
         value->setString("url", scriptLoader->resource()->url().getString());
diff --git a/third_party/WebKit/Source/core/html/parser/HTMLToken.h b/third_party/WebKit/Source/core/html/parser/HTMLToken.h
index 3c90de9d..679a187 100644
--- a/third_party/WebKit/Source/core/html/parser/HTMLToken.h
+++ b/third_party/WebKit/Source/core/html/parser/HTMLToken.h
@@ -29,7 +29,8 @@
 #include "core/dom/Attribute.h"
 #include "core/html/parser/HTMLParserIdioms.h"
 #include "wtf/Forward.h"
-#include "wtf/PassOwnPtr.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
@@ -199,7 +200,7 @@
     {
         ASSERT(m_type == Uninitialized);
         m_type = DOCTYPE;
-        m_doctypeData = adoptPtr(new DoctypeData);
+        m_doctypeData = wrapUnique(new DoctypeData);
     }
 
     void beginDOCTYPE(UChar character)
@@ -254,7 +255,7 @@
         m_doctypeData->m_systemIdentifier.append(character);
     }
 
-    PassOwnPtr<DoctypeData> releaseDoctypeData()
+    std::unique_ptr<DoctypeData> releaseDoctypeData()
     {
         return std::move(m_doctypeData);
     }
@@ -472,7 +473,7 @@
     Attribute* m_currentAttribute;
 
     // For DOCTYPE
-    OwnPtr<DoctypeData> m_doctypeData;
+    std::unique_ptr<DoctypeData> m_doctypeData;
 };
 
 } // namespace blink
diff --git a/third_party/WebKit/Source/core/html/parser/HTMLTokenizer.h b/third_party/WebKit/Source/core/html/parser/HTMLTokenizer.h
index 09335ac..c7166a13 100644
--- a/third_party/WebKit/Source/core/html/parser/HTMLTokenizer.h
+++ b/third_party/WebKit/Source/core/html/parser/HTMLTokenizer.h
@@ -31,6 +31,8 @@
 #include "core/html/parser/HTMLToken.h"
 #include "core/html/parser/InputStreamPreprocessor.h"
 #include "platform/text/SegmentedString.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
@@ -38,7 +40,7 @@
     WTF_MAKE_NONCOPYABLE(HTMLTokenizer);
     USING_FAST_MALLOC(HTMLTokenizer);
 public:
-    static PassOwnPtr<HTMLTokenizer> create(const HTMLParserOptions& options) { return adoptPtr(new HTMLTokenizer(options)); }
+    static std::unique_ptr<HTMLTokenizer> create(const HTMLParserOptions& options) { return wrapUnique(new HTMLTokenizer(options)); }
     ~HTMLTokenizer();
 
     void reset();
diff --git a/third_party/WebKit/Source/core/html/parser/HTMLTreeBuilder.cpp b/third_party/WebKit/Source/core/html/parser/HTMLTreeBuilder.cpp
index b8894f1..8ef2234e 100644
--- a/third_party/WebKit/Source/core/html/parser/HTMLTreeBuilder.cpp
+++ b/third_party/WebKit/Source/core/html/parser/HTMLTreeBuilder.cpp
@@ -46,6 +46,7 @@
 #include "core/html/parser/HTMLTokenizer.h"
 #include "platform/text/PlatformLocale.h"
 #include "wtf/text/CharacterNames.h"
+#include <memory>
 
 namespace blink {
 
@@ -528,7 +529,7 @@
     static PrefixedNameToQualifiedNameMap* caseMap = 0;
     if (!caseMap) {
         caseMap = new PrefixedNameToQualifiedNameMap;
-        OwnPtr<const SVGQualifiedName*[]> svgTags = SVGNames::getSVGTags();
+        std::unique_ptr<const SVGQualifiedName*[]> svgTags = SVGNames::getSVGTags();
         mapLoweredLocalNameToName(caseMap, svgTags.get(), SVGNames::SVGTagsCount);
     }
 
@@ -538,13 +539,13 @@
     token->setName(casedName.localName());
 }
 
-template<PassOwnPtr<const QualifiedName*[]> getAttrs(), unsigned length>
+template<std::unique_ptr<const QualifiedName*[]> getAttrs(), unsigned length>
 static void adjustAttributes(AtomicHTMLToken* token)
 {
     static PrefixedNameToQualifiedNameMap* caseMap = 0;
     if (!caseMap) {
         caseMap = new PrefixedNameToQualifiedNameMap;
-        OwnPtr<const QualifiedName*[]> attrs = getAttrs();
+        std::unique_ptr<const QualifiedName*[]> attrs = getAttrs();
         mapLoweredLocalNameToName(caseMap, attrs.get(), length);
     }
 
@@ -583,10 +584,10 @@
     if (!map) {
         map = new PrefixedNameToQualifiedNameMap;
 
-        OwnPtr<const QualifiedName*[]> attrs = XLinkNames::getXLinkAttrs();
+        std::unique_ptr<const QualifiedName*[]> attrs = XLinkNames::getXLinkAttrs();
         addNamesWithPrefix(map, xlinkAtom, attrs.get(), XLinkNames::XLinkAttrsCount);
 
-        OwnPtr<const QualifiedName*[]> xmlAttrs = XMLNames::getXMLAttrs();
+        std::unique_ptr<const QualifiedName*[]> xmlAttrs = XMLNames::getXMLAttrs();
         addNamesWithPrefix(map, xmlAtom, xmlAttrs.get(), XMLNames::XMLAttrsCount);
 
         map->add(WTF::xmlnsAtom, XMLNSNames::xmlnsAttr);
diff --git a/third_party/WebKit/Source/core/html/parser/HTMLTreeBuilder.h b/third_party/WebKit/Source/core/html/parser/HTMLTreeBuilder.h
index 74ae5c6b..e9096c2 100644
--- a/third_party/WebKit/Source/core/html/parser/HTMLTreeBuilder.h
+++ b/third_party/WebKit/Source/core/html/parser/HTMLTreeBuilder.h
@@ -32,7 +32,6 @@
 #include "core/html/parser/HTMLParserOptions.h"
 #include "platform/heap/Handle.h"
 #include "wtf/Noncopyable.h"
-#include "wtf/PassOwnPtr.h"
 #include "wtf/PassRefPtr.h"
 #include "wtf/RefPtr.h"
 #include "wtf/Vector.h"
diff --git a/third_party/WebKit/Source/core/html/parser/HTMLViewSourceParser.cpp b/third_party/WebKit/Source/core/html/parser/HTMLViewSourceParser.cpp
index ad5e3d8..b3f5675 100644
--- a/third_party/WebKit/Source/core/html/parser/HTMLViewSourceParser.cpp
+++ b/third_party/WebKit/Source/core/html/parser/HTMLViewSourceParser.cpp
@@ -30,6 +30,7 @@
 #include "core/html/parser/HTMLParserOptions.h"
 #include "core/html/parser/HTMLToken.h"
 #include "core/html/parser/XSSAuditorDelegate.h"
+#include <memory>
 
 namespace blink {
 
@@ -51,7 +52,7 @@
             return;
         m_sourceTracker.end(m_input.current(), m_tokenizer.get(), m_token);
 
-        OwnPtr<XSSInfo> xssInfo = m_xssAuditor.filterToken(FilterTokenRequest(m_token, m_sourceTracker, m_tokenizer->shouldAllowCDATA()));
+        std::unique_ptr<XSSInfo> xssInfo = m_xssAuditor.filterToken(FilterTokenRequest(m_token, m_sourceTracker, m_tokenizer->shouldAllowCDATA()));
         HTMLViewSourceDocument::SourceAnnotation annotation = xssInfo ? HTMLViewSourceDocument::AnnotateSourceAsXSS : HTMLViewSourceDocument::AnnotateSourceAsSafe;
         document()->addSource(m_sourceTracker.sourceForToken(m_token), m_token, annotation);
 
diff --git a/third_party/WebKit/Source/core/html/parser/HTMLViewSourceParser.h b/third_party/WebKit/Source/core/html/parser/HTMLViewSourceParser.h
index 1aca1d2..907a57f 100644
--- a/third_party/WebKit/Source/core/html/parser/HTMLViewSourceParser.h
+++ b/third_party/WebKit/Source/core/html/parser/HTMLViewSourceParser.h
@@ -32,6 +32,7 @@
 #include "core/html/parser/HTMLSourceTracker.h"
 #include "core/html/parser/HTMLTokenizer.h"
 #include "core/html/parser/XSSAuditor.h"
+#include <memory>
 
 namespace blink {
 
@@ -59,7 +60,7 @@
     HTMLInputStream m_input;
     HTMLToken m_token;
     HTMLSourceTracker m_sourceTracker;
-    OwnPtr<HTMLTokenizer> m_tokenizer;
+    std::unique_ptr<HTMLTokenizer> m_tokenizer;
     XSSAuditor m_xssAuditor;
 };
 
diff --git a/third_party/WebKit/Source/core/html/parser/ParsedChunkQueue.cpp b/third_party/WebKit/Source/core/html/parser/ParsedChunkQueue.cpp
index 263c9a9..913e2b0 100644
--- a/third_party/WebKit/Source/core/html/parser/ParsedChunkQueue.cpp
+++ b/third_party/WebKit/Source/core/html/parser/ParsedChunkQueue.cpp
@@ -4,6 +4,8 @@
 
 #include "core/html/parser/ParsedChunkQueue.h"
 
+#include <memory>
+
 namespace blink {
 
 ParsedChunkQueue::ParsedChunkQueue()
@@ -14,7 +16,7 @@
 {
 }
 
-bool ParsedChunkQueue::enqueue(PassOwnPtr<HTMLDocumentParser::ParsedChunk> chunk)
+bool ParsedChunkQueue::enqueue(std::unique_ptr<HTMLDocumentParser::ParsedChunk> chunk)
 {
     MutexLocker locker(m_mutex);
 
@@ -30,7 +32,7 @@
     m_pendingChunks.clear();
 }
 
-void ParsedChunkQueue::takeAll(Vector<OwnPtr<HTMLDocumentParser::ParsedChunk>>& vector)
+void ParsedChunkQueue::takeAll(Vector<std::unique_ptr<HTMLDocumentParser::ParsedChunk>>& vector)
 {
     MutexLocker locker(m_mutex);
 
diff --git a/third_party/WebKit/Source/core/html/parser/ParsedChunkQueue.h b/third_party/WebKit/Source/core/html/parser/ParsedChunkQueue.h
index 3c9c9a7c..d65f292 100644
--- a/third_party/WebKit/Source/core/html/parser/ParsedChunkQueue.h
+++ b/third_party/WebKit/Source/core/html/parser/ParsedChunkQueue.h
@@ -7,12 +7,11 @@
 
 #include "core/html/parser/HTMLDocumentParser.h"
 #include "wtf/Deque.h"
-#include "wtf/OwnPtr.h"
-#include "wtf/PassOwnPtr.h"
 #include "wtf/PassRefPtr.h"
 #include "wtf/ThreadSafeRefCounted.h"
 #include "wtf/ThreadingPrimitives.h"
 #include "wtf/Vector.h"
+#include <memory>
 
 namespace blink {
 
@@ -33,16 +32,16 @@
 
     ~ParsedChunkQueue();
 
-    bool enqueue(PassOwnPtr<HTMLDocumentParser::ParsedChunk>);
+    bool enqueue(std::unique_ptr<HTMLDocumentParser::ParsedChunk>);
     void clear();
 
-    void takeAll(Vector<OwnPtr<HTMLDocumentParser::ParsedChunk>>&);
+    void takeAll(Vector<std::unique_ptr<HTMLDocumentParser::ParsedChunk>>&);
 
 private:
     ParsedChunkQueue();
 
     Mutex m_mutex;
-    Vector<OwnPtr<HTMLDocumentParser::ParsedChunk>> m_pendingChunks;
+    Vector<std::unique_ptr<HTMLDocumentParser::ParsedChunk>> m_pendingChunks;
 };
 
 } // namespace blink
diff --git a/third_party/WebKit/Source/core/html/parser/PreloadRequest.h b/third_party/WebKit/Source/core/html/parser/PreloadRequest.h
index cb0932d..9154fff 100644
--- a/third_party/WebKit/Source/core/html/parser/PreloadRequest.h
+++ b/third_party/WebKit/Source/core/html/parser/PreloadRequest.h
@@ -12,7 +12,9 @@
 #include "platform/CrossOriginAttributeValue.h"
 #include "platform/weborigin/SecurityPolicy.h"
 #include "wtf/Allocator.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/text/TextPosition.h"
+#include <memory>
 
 namespace blink {
 
@@ -23,9 +25,9 @@
 public:
     enum RequestType { RequestTypePreload, RequestTypePreconnect, RequestTypeLinkRelPreload };
 
-    static PassOwnPtr<PreloadRequest> create(const String& initiatorName, const TextPosition& initiatorPosition, const String& resourceURL, const KURL& baseURL, Resource::Type resourceType, const ReferrerPolicy referrerPolicy, const FetchRequest::ResourceWidth& resourceWidth = FetchRequest::ResourceWidth(), const ClientHintsPreferences& clientHintsPreferences = ClientHintsPreferences(), RequestType requestType = RequestTypePreload)
+    static std::unique_ptr<PreloadRequest> create(const String& initiatorName, const TextPosition& initiatorPosition, const String& resourceURL, const KURL& baseURL, Resource::Type resourceType, const ReferrerPolicy referrerPolicy, const FetchRequest::ResourceWidth& resourceWidth = FetchRequest::ResourceWidth(), const ClientHintsPreferences& clientHintsPreferences = ClientHintsPreferences(), RequestType requestType = RequestTypePreload)
     {
-        return adoptPtr(new PreloadRequest(initiatorName, initiatorPosition, resourceURL, baseURL, resourceType, resourceWidth, clientHintsPreferences, requestType, referrerPolicy));
+        return wrapUnique(new PreloadRequest(initiatorName, initiatorPosition, resourceURL, baseURL, resourceType, resourceWidth, clientHintsPreferences, requestType, referrerPolicy));
     }
 
     bool isSafeToSendToAnotherThread() const;
@@ -104,7 +106,7 @@
     IntegrityMetadataSet m_integrityMetadata;
 };
 
-typedef Vector<OwnPtr<PreloadRequest>> PreloadRequestStream;
+typedef Vector<std::unique_ptr<PreloadRequest>> PreloadRequestStream;
 
 } // namespace blink
 
diff --git a/third_party/WebKit/Source/core/html/parser/ResourcePreloader.h b/third_party/WebKit/Source/core/html/parser/ResourcePreloader.h
index 571eecf..5974d8a0 100644
--- a/third_party/WebKit/Source/core/html/parser/ResourcePreloader.h
+++ b/third_party/WebKit/Source/core/html/parser/ResourcePreloader.h
@@ -7,6 +7,7 @@
 
 #include "core/CoreExport.h"
 #include "core/html/parser/PreloadRequest.h"
+#include <memory>
 
 namespace blink {
 
@@ -16,7 +17,7 @@
 public:
     virtual void takeAndPreload(PreloadRequestStream&);
 private:
-    virtual void preload(PassOwnPtr<PreloadRequest>, const NetworkHintsInterface&) = 0;
+    virtual void preload(std::unique_ptr<PreloadRequest>, const NetworkHintsInterface&) = 0;
 };
 
 } // namespace blink
diff --git a/third_party/WebKit/Source/core/html/parser/TextResourceDecoder.h b/third_party/WebKit/Source/core/html/parser/TextResourceDecoder.h
index 82411a7..e7d83108 100644
--- a/third_party/WebKit/Source/core/html/parser/TextResourceDecoder.h
+++ b/third_party/WebKit/Source/core/html/parser/TextResourceDecoder.h
@@ -24,7 +24,9 @@
 #define TextResourceDecoder_h
 
 #include "core/CoreExport.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/text/TextEncoding.h"
+#include <memory>
 
 namespace blink {
 
@@ -45,15 +47,15 @@
         EncodingFromParentFrame
     };
 
-    static PassOwnPtr<TextResourceDecoder> create(const String& mimeType, const WTF::TextEncoding& defaultEncoding = WTF::TextEncoding(), bool usesEncodingDetector = false)
+    static std::unique_ptr<TextResourceDecoder> create(const String& mimeType, const WTF::TextEncoding& defaultEncoding = WTF::TextEncoding(), bool usesEncodingDetector = false)
     {
-        return adoptPtr(new TextResourceDecoder(mimeType, defaultEncoding, usesEncodingDetector ? UseAllAutoDetection : UseContentAndBOMBasedDetection));
+        return wrapUnique(new TextResourceDecoder(mimeType, defaultEncoding, usesEncodingDetector ? UseAllAutoDetection : UseContentAndBOMBasedDetection));
     }
     // Corresponds to utf-8 decode in Encoding spec:
     // https://encoding.spec.whatwg.org/#utf-8-decode.
-    static PassOwnPtr<TextResourceDecoder> createAlwaysUseUTF8ForText()
+    static std::unique_ptr<TextResourceDecoder> createAlwaysUseUTF8ForText()
     {
-        return adoptPtr(new TextResourceDecoder("plain/text", UTF8Encoding(), AlwaysUseUTF8ForText));
+        return wrapUnique(new TextResourceDecoder("plain/text", UTF8Encoding(), AlwaysUseUTF8ForText));
     }
     ~TextResourceDecoder();
 
@@ -112,7 +114,7 @@
 
     ContentType m_contentType;
     WTF::TextEncoding m_encoding;
-    OwnPtr<TextCodec> m_codec;
+    std::unique_ptr<TextCodec> m_codec;
     EncodingSource m_source;
     const char* m_hintEncoding;
     Vector<char> m_buffer;
@@ -124,7 +126,7 @@
     bool m_sawError;
     EncodingDetectionOption m_encodingDetectionOption;
 
-    OwnPtr<HTMLMetaCharsetParser> m_charsetParser;
+    std::unique_ptr<HTMLMetaCharsetParser> m_charsetParser;
 };
 
 } // namespace blink
diff --git a/third_party/WebKit/Source/core/html/parser/XSSAuditor.cpp b/third_party/WebKit/Source/core/html/parser/XSSAuditor.cpp
index f2fc50ca..80fb277 100644
--- a/third_party/WebKit/Source/core/html/parser/XSSAuditor.cpp
+++ b/third_party/WebKit/Source/core/html/parser/XSSAuditor.cpp
@@ -45,6 +45,8 @@
 #include "platform/network/EncodedFormData.h"
 #include "platform/text/DecodeEscapeSequences.h"
 #include "wtf/ASCIICType.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace {
 
@@ -393,14 +395,14 @@
         if (m_decodedHTTPBody.find(isRequiredForInjection) == kNotFound)
             m_decodedHTTPBody = String();
             if (m_decodedHTTPBody.length() >= miniumLengthForSuffixTree)
-                m_decodedHTTPBodySuffixTree = adoptPtr(new SuffixTree<ASCIICodebook>(m_decodedHTTPBody, suffixTreeDepth));
+                m_decodedHTTPBodySuffixTree = wrapUnique(new SuffixTree<ASCIICodebook>(m_decodedHTTPBody, suffixTreeDepth));
     }
 
     if (m_decodedURL.isEmpty() && m_decodedHTTPBody.isEmpty())
         m_isEnabled = false;
 }
 
-PassOwnPtr<XSSInfo> XSSAuditor::filterToken(const FilterTokenRequest& request)
+std::unique_ptr<XSSInfo> XSSAuditor::filterToken(const FilterTokenRequest& request)
 {
     ASSERT(m_state != Uninitialized);
     if (!m_isEnabled || m_xssProtection == AllowReflectedXSS)
@@ -418,7 +420,7 @@
 
     if (didBlockScript) {
         bool didBlockEntirePage = (m_xssProtection == BlockReflectedXSS);
-        OwnPtr<XSSInfo> xssInfo = XSSInfo::create(m_documentURL, didBlockEntirePage, m_didSendValidXSSProtectionHeader, m_didSendValidCSPHeader);
+        std::unique_ptr<XSSInfo> xssInfo = XSSInfo::create(m_documentURL, didBlockEntirePage, m_didSendValidXSSProtectionHeader, m_didSendValidCSPHeader);
         return xssInfo;
     }
     return nullptr;
diff --git a/third_party/WebKit/Source/core/html/parser/XSSAuditor.h b/third_party/WebKit/Source/core/html/parser/XSSAuditor.h
index 0ff1aa2..88874b33 100644
--- a/third_party/WebKit/Source/core/html/parser/XSSAuditor.h
+++ b/third_party/WebKit/Source/core/html/parser/XSSAuditor.h
@@ -31,8 +31,8 @@
 #include "platform/text/SuffixTree.h"
 #include "platform/weborigin/KURL.h"
 #include "wtf/Allocator.h"
-#include "wtf/PassOwnPtr.h"
 #include "wtf/text/TextEncoding.h"
+#include <memory>
 
 namespace blink {
 
@@ -63,7 +63,7 @@
     void init(Document*, XSSAuditorDelegate*);
     void initForFragment();
 
-    PassOwnPtr<XSSInfo> filterToken(const FilterTokenRequest&);
+    std::unique_ptr<XSSInfo> filterToken(const FilterTokenRequest&);
     bool isSafeToSendToAnotherThread() const;
 
     void setEncoding(const WTF::TextEncoding&);
@@ -129,7 +129,7 @@
     String m_decodedURL;
     String m_decodedHTTPBody;
     String m_httpBodyAsString;
-    OwnPtr<SuffixTree<ASCIICodebook>> m_decodedHTTPBodySuffixTree;
+    std::unique_ptr<SuffixTree<ASCIICodebook>> m_decodedHTTPBodySuffixTree;
 
     State m_state;
     bool m_scriptTagFoundInRequest;
diff --git a/third_party/WebKit/Source/core/html/parser/XSSAuditorDelegate.h b/third_party/WebKit/Source/core/html/parser/XSSAuditorDelegate.h
index 87c593d..33e25ce 100644
--- a/third_party/WebKit/Source/core/html/parser/XSSAuditorDelegate.h
+++ b/third_party/WebKit/Source/core/html/parser/XSSAuditorDelegate.h
@@ -28,11 +28,11 @@
 
 #include "platform/heap/Handle.h"
 #include "platform/weborigin/KURL.h"
-#include "wtf/OwnPtr.h"
-#include "wtf/PassOwnPtr.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/Vector.h"
 #include "wtf/text/TextPosition.h"
 #include "wtf/text/WTFString.h"
+#include <memory>
 
 namespace blink {
 
@@ -43,9 +43,9 @@
     USING_FAST_MALLOC(XSSInfo);
     WTF_MAKE_NONCOPYABLE(XSSInfo);
 public:
-    static PassOwnPtr<XSSInfo> create(const String& originalURL, bool didBlockEntirePage, bool didSendXSSProtectionHeader, bool didSendCSPHeader)
+    static std::unique_ptr<XSSInfo> create(const String& originalURL, bool didBlockEntirePage, bool didSendXSSProtectionHeader, bool didSendCSPHeader)
     {
-        return adoptPtr(new XSSInfo(originalURL, didBlockEntirePage, didSendXSSProtectionHeader, didSendCSPHeader));
+        return wrapUnique(new XSSInfo(originalURL, didBlockEntirePage, didSendXSSProtectionHeader, didSendCSPHeader));
     }
 
     String buildConsoleError() const;
@@ -84,7 +84,7 @@
     KURL m_reportURL;
 };
 
-typedef Vector<OwnPtr<XSSInfo>> XSSInfoStream;
+typedef Vector<std::unique_ptr<XSSInfo>> XSSInfoStream;
 
 } // namespace blink
 
diff --git a/third_party/WebKit/Source/core/html/shadow/MediaControlsTest.cpp b/third_party/WebKit/Source/core/html/shadow/MediaControlsTest.cpp
index f5ce2f8c..08cae76 100644
--- a/third_party/WebKit/Source/core/html/shadow/MediaControlsTest.cpp
+++ b/third_party/WebKit/Source/core/html/shadow/MediaControlsTest.cpp
@@ -14,6 +14,7 @@
 #include "core/testing/DummyPageHolder.h"
 #include "platform/heap/Handle.h"
 #include "testing/gtest/include/gtest/gtest.h"
+#include <memory>
 
 namespace blink {
 
@@ -84,7 +85,7 @@
     Document& document() { return m_pageHolder->document(); }
 
 private:
-    OwnPtr<DummyPageHolder> m_pageHolder;
+    std::unique_ptr<DummyPageHolder> m_pageHolder;
     Persistent<MediaControls> m_mediaControls;
 };
 
diff --git a/third_party/WebKit/Source/core/html/track/vtt/VTTParser.h b/third_party/WebKit/Source/core/html/track/vtt/VTTParser.h
index f32234b21..cdfe4780 100644
--- a/third_party/WebKit/Source/core/html/track/vtt/VTTParser.h
+++ b/third_party/WebKit/Source/core/html/track/vtt/VTTParser.h
@@ -39,8 +39,8 @@
 #include "core/html/track/vtt/VTTRegion.h"
 #include "core/html/track/vtt/VTTTokenizer.h"
 #include "platform/heap/Handle.h"
-#include "wtf/PassOwnPtr.h"
 #include "wtf/text/StringBuilder.h"
+#include <memory>
 
 namespace blink {
 
@@ -139,7 +139,7 @@
     static bool collectTimeStamp(VTTScanner& input, double& timeStamp);
 
     BufferedLineReader m_lineReader;
-    OwnPtr<TextResourceDecoder> m_decoder;
+    std::unique_ptr<TextResourceDecoder> m_decoder;
     AtomicString m_currentId;
     double m_currentStartTime;
     double m_currentEndTime;
diff --git a/third_party/WebKit/Source/core/imagebitmap/ImageBitmapFactories.cpp b/third_party/WebKit/Source/core/imagebitmap/ImageBitmapFactories.cpp
index 86b14a70..af9291e 100644
--- a/third_party/WebKit/Source/core/imagebitmap/ImageBitmapFactories.cpp
+++ b/third_party/WebKit/Source/core/imagebitmap/ImageBitmapFactories.cpp
@@ -50,6 +50,7 @@
 #include "public/platform/Platform.h"
 #include "public/platform/WebThread.h"
 #include "public/platform/WebTraceLocation.h"
+#include <memory>
 #include <v8.h>
 
 namespace blink {
@@ -234,7 +235,7 @@
     ImageDecoder::GammaAndColorProfileOption colorSpaceOp = ImageDecoder::GammaAndColorProfileApplied;
     if (m_options.colorSpaceConversion() == "none")
         colorSpaceOp = ImageDecoder::GammaAndColorProfileIgnored;
-    OwnPtr<ImageDecoder> decoder(ImageDecoder::create(*sharedBuffer, alphaOp, colorSpaceOp));
+    std::unique_ptr<ImageDecoder> decoder(ImageDecoder::create(*sharedBuffer, alphaOp, colorSpaceOp));
     RefPtr<SkImage> frame;
     if (decoder) {
         decoder->setData(sharedBuffer.get(), true);
diff --git a/third_party/WebKit/Source/core/input/EventHandler.cpp b/third_party/WebKit/Source/core/input/EventHandler.cpp
index a66c15d..04b488f 100644
--- a/third_party/WebKit/Source/core/input/EventHandler.cpp
+++ b/third_party/WebKit/Source/core/input/EventHandler.cpp
@@ -100,8 +100,10 @@
 #include "platform/scroll/Scrollbar.h"
 #include "wtf/Assertions.h"
 #include "wtf/CurrentTime.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/StdLibExtras.h"
 #include "wtf/TemporaryChange.h"
+#include <memory>
 
 namespace blink {
 
@@ -1114,12 +1116,12 @@
     if (!mouseEvent.fromTouch())
         m_frame->selection().setCaretBlinkingSuspended(false);
 
-    OwnPtr<UserGestureIndicator> gestureIndicator;
+    std::unique_ptr<UserGestureIndicator> gestureIndicator;
 
     if (m_frame->localFrameRoot()->eventHandler().m_lastMouseDownUserGestureToken)
-        gestureIndicator = adoptPtr(new UserGestureIndicator(m_frame->localFrameRoot()->eventHandler().m_lastMouseDownUserGestureToken.release()));
+        gestureIndicator = wrapUnique(new UserGestureIndicator(m_frame->localFrameRoot()->eventHandler().m_lastMouseDownUserGestureToken.release()));
     else
-        gestureIndicator = adoptPtr(new UserGestureIndicator(DefinitelyProcessingUserGesture));
+        gestureIndicator = wrapUnique(new UserGestureIndicator(DefinitelyProcessingUserGesture));
 
 #if OS(WIN)
     if (Page* page = m_frame->page())
diff --git a/third_party/WebKit/Source/core/input/EventHandlerTest.cpp b/third_party/WebKit/Source/core/input/EventHandlerTest.cpp
index 0452500..5fa99f75 100644
--- a/third_party/WebKit/Source/core/input/EventHandlerTest.cpp
+++ b/third_party/WebKit/Source/core/input/EventHandlerTest.cpp
@@ -16,6 +16,7 @@
 #include "core/testing/DummyPageHolder.h"
 #include "platform/PlatformMouseEvent.h"
 #include "testing/gtest/include/gtest/gtest.h"
+#include <memory>
 
 namespace blink {
 
@@ -29,7 +30,7 @@
     void setHtmlInnerHTML(const char* htmlContent);
 
 private:
-    OwnPtr<DummyPageHolder> m_dummyPageHolder;
+    std::unique_ptr<DummyPageHolder> m_dummyPageHolder;
 };
 
 class TapEventBuilder : public PlatformGestureEvent {
diff --git a/third_party/WebKit/Source/core/input/ScrollManager.cpp b/third_party/WebKit/Source/core/input/ScrollManager.cpp
index d5b475c..9d7d5a8 100644
--- a/third_party/WebKit/Source/core/input/ScrollManager.cpp
+++ b/third_party/WebKit/Source/core/input/ScrollManager.cpp
@@ -19,6 +19,8 @@
 #include "core/page/scrolling/ScrollState.h"
 #include "core/paint/PaintLayer.h"
 #include "platform/PlatformGestureEvent.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 
 namespace blink {
@@ -246,7 +248,7 @@
     // using parts of the scroll customization framework on just this element.
     computeScrollChainForSingleNode(*node, m_currentScrollChain);
 
-    OwnPtr<ScrollStateData> scrollStateData = adoptPtr(new ScrollStateData());
+    std::unique_ptr<ScrollStateData> scrollStateData = wrapUnique(new ScrollStateData());
     scrollStateData->delta_x = delta.width();
     scrollStateData->delta_y = delta.height();
     scrollStateData->position_x = position.x();
@@ -326,7 +328,7 @@
     passScrollGestureEventToWidget(gestureEvent, m_scrollGestureHandlingNode->layoutObject());
     if (RuntimeEnabledFeatures::scrollCustomizationEnabled()) {
         m_currentScrollChain.clear();
-        OwnPtr<ScrollStateData> scrollStateData = adoptPtr(new ScrollStateData());
+        std::unique_ptr<ScrollStateData> scrollStateData = wrapUnique(new ScrollStateData());
         scrollStateData->position_x = gestureEvent.position().x();
         scrollStateData->position_y = gestureEvent.position().y();
         scrollStateData->is_beginning = true;
@@ -380,7 +382,7 @@
         }
 
         if (handleScrollCustomization) {
-            OwnPtr<ScrollStateData> scrollStateData = adoptPtr(new ScrollStateData());
+            std::unique_ptr<ScrollStateData> scrollStateData = wrapUnique(new ScrollStateData());
             scrollStateData->delta_x = delta.width();
             scrollStateData->delta_y = delta.height();
             scrollStateData->delta_granularity = ScrollByPrecisePixel;
@@ -445,7 +447,7 @@
     if (node) {
         passScrollGestureEventToWidget(gestureEvent, node->layoutObject());
         if (RuntimeEnabledFeatures::scrollCustomizationEnabled()) {
-            OwnPtr<ScrollStateData> scrollStateData = adoptPtr(new ScrollStateData());
+            std::unique_ptr<ScrollStateData> scrollStateData = wrapUnique(new ScrollStateData());
             scrollStateData->is_ending = true;
             scrollStateData->is_in_inertial_phase = gestureEvent.inertialPhase() == ScrollInertialPhaseMomentum;
             scrollStateData->from_user_input = true;
diff --git a/third_party/WebKit/Source/core/input/TouchEventManager.cpp b/third_party/WebKit/Source/core/input/TouchEventManager.cpp
index 7b6d67c..5971003 100644
--- a/third_party/WebKit/Source/core/input/TouchEventManager.cpp
+++ b/third_party/WebKit/Source/core/input/TouchEventManager.cpp
@@ -18,6 +18,8 @@
 #include "platform/Histogram.h"
 #include "platform/PlatformTouchEvent.h"
 #include "wtf/CurrentTime.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 
 namespace blink {
@@ -469,7 +471,7 @@
             isSameOrigin = true;
     }
 
-    OwnPtr<UserGestureIndicator> gestureIndicator;
+    std::unique_ptr<UserGestureIndicator> gestureIndicator;
     if (isTap || isSameOrigin) {
         UserGestureUtilizedCallback* callback = 0;
         // These are cases we'd like to migrate to not hold a user gesture.
@@ -480,9 +482,9 @@
             callback = this;
         }
         if (m_touchSequenceUserGestureToken)
-            gestureIndicator = adoptPtr(new UserGestureIndicator(m_touchSequenceUserGestureToken.release(), callback));
+            gestureIndicator = wrapUnique(new UserGestureIndicator(m_touchSequenceUserGestureToken.release(), callback));
         else
-            gestureIndicator = adoptPtr(new UserGestureIndicator(DefinitelyProcessingUserGesture, callback));
+            gestureIndicator = wrapUnique(new UserGestureIndicator(DefinitelyProcessingUserGesture, callback));
         m_touchSequenceUserGestureToken = UserGestureIndicator::currentToken();
     }
 
diff --git a/third_party/WebKit/Source/core/inspector/ConsoleMessage.cpp b/third_party/WebKit/Source/core/inspector/ConsoleMessage.cpp
index 4bb74a6c..19fa9dc 100644
--- a/third_party/WebKit/Source/core/inspector/ConsoleMessage.cpp
+++ b/third_party/WebKit/Source/core/inspector/ConsoleMessage.cpp
@@ -8,7 +8,7 @@
 #include "bindings/core/v8/SourceLocation.h"
 #include "core/inspector/ScriptArguments.h"
 #include "wtf/CurrentTime.h"
-#include "wtf/PassOwnPtr.h"
+#include <memory>
 
 namespace blink {
 
@@ -40,7 +40,7 @@
 }
 
 // static
-ConsoleMessage* ConsoleMessage::create(MessageSource source, MessageLevel level, const String& message, PassOwnPtr<SourceLocation> location, ScriptArguments* arguments)
+ConsoleMessage* ConsoleMessage::create(MessageSource source, MessageLevel level, const String& message, std::unique_ptr<SourceLocation> location, ScriptArguments* arguments)
 {
     return new ConsoleMessage(source, level, message, std::move(location), arguments);
 }
@@ -54,7 +54,7 @@
 ConsoleMessage::ConsoleMessage(MessageSource source,
     MessageLevel level,
     const String& message,
-    PassOwnPtr<SourceLocation> location,
+    std::unique_ptr<SourceLocation> location,
     ScriptArguments* arguments)
     : m_source(source)
     , m_level(level)
diff --git a/third_party/WebKit/Source/core/inspector/ConsoleMessage.h b/third_party/WebKit/Source/core/inspector/ConsoleMessage.h
index 3fcc279..0df4f4f 100644
--- a/third_party/WebKit/Source/core/inspector/ConsoleMessage.h
+++ b/third_party/WebKit/Source/core/inspector/ConsoleMessage.h
@@ -13,6 +13,7 @@
 #include "wtf/PassRefPtr.h"
 #include "wtf/RefCounted.h"
 #include "wtf/text/WTFString.h"
+#include <memory>
 
 namespace blink {
 
@@ -24,7 +25,7 @@
 class CORE_EXPORT ConsoleMessage final: public GarbageCollectedFinalized<ConsoleMessage> {
 public:
     // Location should not be null. Zero lineNumber or columnNumber means unknown.
-    static ConsoleMessage* create(MessageSource, MessageLevel, const String& message, PassOwnPtr<SourceLocation>, ScriptArguments* = nullptr);
+    static ConsoleMessage* create(MessageSource, MessageLevel, const String& message, std::unique_ptr<SourceLocation>, ScriptArguments* = nullptr);
 
     // Shortcut when location is unknown. Captures current location.
     static ConsoleMessage* create(MessageSource, MessageLevel, const String& message);
@@ -56,13 +57,13 @@
     DECLARE_TRACE();
 
 private:
-    ConsoleMessage(MessageSource, MessageLevel, const String& message, PassOwnPtr<SourceLocation>, ScriptArguments*);
+    ConsoleMessage(MessageSource, MessageLevel, const String& message, std::unique_ptr<SourceLocation>, ScriptArguments*);
 
     MessageSource m_source;
     MessageLevel m_level;
     MessageType m_type;
     String m_message;
-    OwnPtr<SourceLocation> m_location;
+    std::unique_ptr<SourceLocation> m_location;
     Member<ScriptArguments> m_scriptArguments;
     unsigned long m_requestIdentifier;
     double m_timestamp;
diff --git a/third_party/WebKit/Source/core/inspector/DOMPatchSupport.cpp b/third_party/WebKit/Source/core/inspector/DOMPatchSupport.cpp
index 02f656a8..3115d97 100644
--- a/third_party/WebKit/Source/core/inspector/DOMPatchSupport.cpp
+++ b/third_party/WebKit/Source/core/inspector/DOMPatchSupport.cpp
@@ -53,6 +53,7 @@
 #include "wtf/RefPtr.h"
 #include "wtf/text/Base64.h"
 #include "wtf/text/CString.h"
+#include <memory>
 
 namespace blink {
 
@@ -399,7 +400,7 @@
 {
     Digest* digest = new Digest(node);
 
-    OwnPtr<WebCryptoDigestor> digestor = createDigestor(HashAlgorithmSha1);
+    std::unique_ptr<WebCryptoDigestor> digestor = createDigestor(HashAlgorithmSha1);
     DigestValue digestResult;
 
     Node::NodeType nodeType = node->getNodeType();
@@ -419,7 +420,7 @@
 
         AttributeCollection attributes = element.attributesWithoutUpdate();
         if (!attributes.isEmpty()) {
-            OwnPtr<WebCryptoDigestor> attrsDigestor = createDigestor(HashAlgorithmSha1);
+            std::unique_ptr<WebCryptoDigestor> attrsDigestor = createDigestor(HashAlgorithmSha1);
             for (auto& attribute : attributes) {
                 addStringToDigestor(attrsDigestor.get(), attribute.name().toString());
                 addStringToDigestor(attrsDigestor.get(), attribute.value().getString());
diff --git a/third_party/WebKit/Source/core/inspector/DOMPatchSupport.h b/third_party/WebKit/Source/core/inspector/DOMPatchSupport.h
index 68ba046..37155bf 100644
--- a/third_party/WebKit/Source/core/inspector/DOMPatchSupport.h
+++ b/third_party/WebKit/Source/core/inspector/DOMPatchSupport.h
@@ -33,8 +33,6 @@
 
 #include "platform/heap/Handle.h"
 #include "wtf/HashMap.h"
-#include "wtf/OwnPtr.h"
-#include "wtf/PassOwnPtr.h"
 #include "wtf/Vector.h"
 #include "wtf/text/WTFString.h"
 
diff --git a/third_party/WebKit/Source/core/inspector/InspectorAnimationAgent.cpp b/third_party/WebKit/Source/core/inspector/InspectorAnimationAgent.cpp
index fadc5d0b..47e1b9e7 100644
--- a/third_party/WebKit/Source/core/inspector/InspectorAnimationAgent.cpp
+++ b/third_party/WebKit/Source/core/inspector/InspectorAnimationAgent.cpp
@@ -29,6 +29,7 @@
 #include "platform/animation/TimingFunction.h"
 #include "platform/v8_inspector/public/V8InspectorSession.h"
 #include "wtf/text/Base64.h"
+#include <memory>
 
 namespace AnimationAgentState {
 static const char animationAgentEnabled[] = "animationAgentEnabled";
@@ -425,7 +426,7 @@
 
     Element* element = effect->target();
     HeapVector<Member<CSSStyleDeclaration>> styles = m_cssAgent->matchingStyles(element);
-    OwnPtr<WebCryptoDigestor> digestor = createDigestor(HashAlgorithmSha1);
+    std::unique_ptr<WebCryptoDigestor> digestor = createDigestor(HashAlgorithmSha1);
     addStringToDigestor(digestor.get(), type);
     addStringToDigestor(digestor.get(), animation.id());
     for (CSSPropertyID property : cssProperties) {
diff --git a/third_party/WebKit/Source/core/inspector/InspectorAnimationAgent.h b/third_party/WebKit/Source/core/inspector/InspectorAnimationAgent.h
index c8815ce..1e4e2b3 100644
--- a/third_party/WebKit/Source/core/inspector/InspectorAnimationAgent.h
+++ b/third_party/WebKit/Source/core/inspector/InspectorAnimationAgent.h
@@ -10,7 +10,6 @@
 #include "core/css/CSSKeyframesRule.h"
 #include "core/inspector/InspectorBaseAgent.h"
 #include "core/inspector/protocol/Animation.h"
-#include "wtf/PassOwnPtr.h"
 #include "wtf/text/WTFString.h"
 
 namespace blink {
diff --git a/third_party/WebKit/Source/core/inspector/InspectorApplicationCacheAgent.h b/third_party/WebKit/Source/core/inspector/InspectorApplicationCacheAgent.h
index d19d368..2acbcdb4 100644
--- a/third_party/WebKit/Source/core/inspector/InspectorApplicationCacheAgent.h
+++ b/third_party/WebKit/Source/core/inspector/InspectorApplicationCacheAgent.h
@@ -30,7 +30,6 @@
 #include "core/inspector/protocol/ApplicationCache.h"
 #include "core/loader/appcache/ApplicationCacheHost.h"
 #include "wtf/Noncopyable.h"
-#include "wtf/PassOwnPtr.h"
 
 namespace blink {
 
diff --git a/third_party/WebKit/Source/core/inspector/InspectorDOMAgent.cpp b/third_party/WebKit/Source/core/inspector/InspectorDOMAgent.cpp
index c8bf64b..4c062559 100644
--- a/third_party/WebKit/Source/core/inspector/InspectorDOMAgent.cpp
+++ b/third_party/WebKit/Source/core/inspector/InspectorDOMAgent.cpp
@@ -78,8 +78,10 @@
 #include "platform/PlatformTouchEvent.h"
 #include "platform/v8_inspector/public/V8InspectorSession.h"
 #include "wtf/ListHashSet.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/text/CString.h"
 #include "wtf/text/WTFString.h"
+#include <memory>
 
 namespace blink {
 
@@ -1089,7 +1091,7 @@
         m_client->setInspectMode(searchMode, searchMode != NotSearching ? highlightConfigFromInspectorObject(errorString, highlightInspectorObject) : nullptr);
 }
 
-PassOwnPtr<InspectorHighlightConfig> InspectorDOMAgent::highlightConfigFromInspectorObject(ErrorString* errorString, const Maybe<protocol::DOM::HighlightConfig>& highlightInspectorObject)
+std::unique_ptr<InspectorHighlightConfig> InspectorDOMAgent::highlightConfigFromInspectorObject(ErrorString* errorString, const Maybe<protocol::DOM::HighlightConfig>& highlightInspectorObject)
 {
     if (!highlightInspectorObject.isJust()) {
         *errorString = "Internal error: highlight configuration parameter is missing";
@@ -1097,7 +1099,7 @@
     }
 
     protocol::DOM::HighlightConfig* config = highlightInspectorObject.fromJust();
-    OwnPtr<InspectorHighlightConfig> highlightConfig = adoptPtr(new InspectorHighlightConfig());
+    std::unique_ptr<InspectorHighlightConfig> highlightConfig = wrapUnique(new InspectorHighlightConfig());
     highlightConfig->showInfo = config->getShowInfo(false);
     highlightConfig->showRulers = config->getShowRulers(false);
     highlightConfig->showExtensionLines = config->getShowExtensionLines(false);
@@ -1138,13 +1140,13 @@
 
 void InspectorDOMAgent::highlightRect(ErrorString*, int x, int y, int width, int height, const Maybe<protocol::DOM::RGBA>& color, const Maybe<protocol::DOM::RGBA>& outlineColor)
 {
-    OwnPtr<FloatQuad> quad = adoptPtr(new FloatQuad(FloatRect(x, y, width, height)));
+    std::unique_ptr<FloatQuad> quad = wrapUnique(new FloatQuad(FloatRect(x, y, width, height)));
     innerHighlightQuad(std::move(quad), color, outlineColor);
 }
 
 void InspectorDOMAgent::highlightQuad(ErrorString* errorString, std::unique_ptr<protocol::Array<double>> quadArray, const Maybe<protocol::DOM::RGBA>& color, const Maybe<protocol::DOM::RGBA>& outlineColor)
 {
-    OwnPtr<FloatQuad> quad = adoptPtr(new FloatQuad());
+    std::unique_ptr<FloatQuad> quad = wrapUnique(new FloatQuad());
     if (!parseQuad(std::move(quadArray), quad.get())) {
         *errorString = "Invalid Quad format";
         return;
@@ -1152,9 +1154,9 @@
     innerHighlightQuad(std::move(quad), color, outlineColor);
 }
 
-void InspectorDOMAgent::innerHighlightQuad(PassOwnPtr<FloatQuad> quad, const Maybe<protocol::DOM::RGBA>& color, const Maybe<protocol::DOM::RGBA>& outlineColor)
+void InspectorDOMAgent::innerHighlightQuad(std::unique_ptr<FloatQuad> quad, const Maybe<protocol::DOM::RGBA>& color, const Maybe<protocol::DOM::RGBA>& outlineColor)
 {
-    OwnPtr<InspectorHighlightConfig> highlightConfig = adoptPtr(new InspectorHighlightConfig());
+    std::unique_ptr<InspectorHighlightConfig> highlightConfig = wrapUnique(new InspectorHighlightConfig());
     highlightConfig->content = parseColor(color.fromMaybe(nullptr));
     highlightConfig->contentOutline = parseColor(outlineColor.fromMaybe(nullptr));
     if (m_client)
@@ -1194,7 +1196,7 @@
     if (!node)
         return;
 
-    OwnPtr<InspectorHighlightConfig> highlightConfig = highlightConfigFromInspectorObject(errorString, std::move(highlightInspectorObject));
+    std::unique_ptr<InspectorHighlightConfig> highlightConfig = highlightConfigFromInspectorObject(errorString, std::move(highlightInspectorObject));
     if (!highlightConfig)
         return;
 
@@ -1211,7 +1213,7 @@
     LocalFrame* frame = IdentifiersFactory::frameById(m_inspectedFrames, frameId);
     // FIXME: Inspector doesn't currently work cross process.
     if (frame && frame->deprecatedLocalOwner()) {
-        OwnPtr<InspectorHighlightConfig> highlightConfig = adoptPtr(new InspectorHighlightConfig());
+        std::unique_ptr<InspectorHighlightConfig> highlightConfig = wrapUnique(new InspectorHighlightConfig());
         highlightConfig->showInfo = true; // Always show tooltips for frames.
         highlightConfig->content = parseColor(color.fromMaybe(nullptr));
         highlightConfig->contentOutline = parseColor(outlineColor.fromMaybe(nullptr));
diff --git a/third_party/WebKit/Source/core/inspector/InspectorDOMAgent.h b/third_party/WebKit/Source/core/inspector/InspectorDOMAgent.h
index 68468d6d..84dc60e 100644
--- a/third_party/WebKit/Source/core/inspector/InspectorDOMAgent.h
+++ b/third_party/WebKit/Source/core/inspector/InspectorDOMAgent.h
@@ -39,14 +39,12 @@
 #include "platform/geometry/FloatQuad.h"
 #include "platform/inspector_protocol/Values.h"
 #include "platform/v8_inspector/public/V8InspectorSession.h"
-
 #include "wtf/HashMap.h"
 #include "wtf/HashSet.h"
-#include "wtf/OwnPtr.h"
-#include "wtf/PassOwnPtr.h"
 #include "wtf/RefPtr.h"
 #include "wtf/Vector.h"
 #include "wtf/text/AtomicString.h"
+#include <memory>
 
 namespace blink {
 
@@ -89,8 +87,8 @@
         virtual ~Client() { }
         virtual void hideHighlight() { }
         virtual void highlightNode(Node*, const InspectorHighlightConfig&, bool omitTooltip) { }
-        virtual void highlightQuad(PassOwnPtr<FloatQuad>, const InspectorHighlightConfig&) { }
-        virtual void setInspectMode(SearchMode searchMode, PassOwnPtr<InspectorHighlightConfig>) { }
+        virtual void highlightQuad(std::unique_ptr<FloatQuad>, const InspectorHighlightConfig&) { }
+        virtual void setInspectMode(SearchMode searchMode, std::unique_ptr<InspectorHighlightConfig>) { }
         virtual void setInspectedNode(Node*) { }
     };
 
@@ -200,7 +198,7 @@
     void innerEnable();
 
     void setSearchingForNode(ErrorString*, SearchMode, const Maybe<protocol::DOM::HighlightConfig>&);
-    PassOwnPtr<InspectorHighlightConfig> highlightConfigFromInspectorObject(ErrorString*, const Maybe<protocol::DOM::HighlightConfig>& highlightInspectorObject);
+    std::unique_ptr<InspectorHighlightConfig> highlightConfigFromInspectorObject(ErrorString*, const Maybe<protocol::DOM::HighlightConfig>& highlightInspectorObject);
 
     // Node-related methods.
     typedef HeapHashMap<Member<Node>, int> NodeToIdMap;
@@ -228,7 +226,7 @@
 
     void discardFrontendBindings();
 
-    void innerHighlightQuad(PassOwnPtr<FloatQuad>, const Maybe<protocol::DOM::RGBA>& color, const Maybe<protocol::DOM::RGBA>& outlineColor);
+    void innerHighlightQuad(std::unique_ptr<FloatQuad>, const Maybe<protocol::DOM::RGBA>& color, const Maybe<protocol::DOM::RGBA>& outlineColor);
 
     bool pushDocumentUponHandlelessOperation(ErrorString*);
 
diff --git a/third_party/WebKit/Source/core/inspector/InspectorDOMDebuggerAgent.h b/third_party/WebKit/Source/core/inspector/InspectorDOMDebuggerAgent.h
index 4bcddb7..844bae2 100644
--- a/third_party/WebKit/Source/core/inspector/InspectorDOMDebuggerAgent.h
+++ b/third_party/WebKit/Source/core/inspector/InspectorDOMDebuggerAgent.h
@@ -37,7 +37,6 @@
 #include "core/inspector/InspectorDOMAgent.h"
 #include "core/inspector/protocol/DOMDebugger.h"
 #include "wtf/HashMap.h"
-#include "wtf/PassOwnPtr.h"
 #include "wtf/text/WTFString.h"
 
 namespace blink {
diff --git a/third_party/WebKit/Source/core/inspector/InspectorInputAgent.h b/third_party/WebKit/Source/core/inspector/InspectorInputAgent.h
index 0244a01..0d48264 100644
--- a/third_party/WebKit/Source/core/inspector/InspectorInputAgent.h
+++ b/third_party/WebKit/Source/core/inspector/InspectorInputAgent.h
@@ -35,7 +35,6 @@
 #include "core/inspector/InspectorBaseAgent.h"
 #include "core/inspector/protocol/Input.h"
 #include "wtf/Noncopyable.h"
-#include "wtf/PassOwnPtr.h"
 #include "wtf/text/WTFString.h"
 
 namespace blink {
diff --git a/third_party/WebKit/Source/core/inspector/InspectorLayerTreeAgent.cpp b/third_party/WebKit/Source/core/inspector/InspectorLayerTreeAgent.cpp
index 688a196..4d2887f 100644
--- a/third_party/WebKit/Source/core/inspector/InspectorLayerTreeAgent.cpp
+++ b/third_party/WebKit/Source/core/inspector/InspectorLayerTreeAgent.cpp
@@ -57,6 +57,7 @@
 #include "public/platform/WebLayer.h"
 #include "wtf/text/Base64.h"
 #include "wtf/text/StringBuilder.h"
+#include <memory>
 
 namespace blink {
 
@@ -398,7 +399,7 @@
     const PictureSnapshot* snapshot = snapshotById(errorString, snapshotId);
     if (!snapshot)
         return;
-    OwnPtr<Vector<char>> base64Data = snapshot->replay(fromStep.fromMaybe(0), toStep.fromMaybe(0), scale.fromMaybe(1.0));
+    std::unique_ptr<Vector<char>> base64Data = snapshot->replay(fromStep.fromMaybe(0), toStep.fromMaybe(0), scale.fromMaybe(1.0));
     if (!base64Data) {
         *errorString = "Image encoding failed";
         return;
@@ -423,7 +424,7 @@
     FloatRect rect;
     if (clipRect.isJust())
         parseRect(clipRect.fromJust(), &rect);
-    OwnPtr<PictureSnapshot::Timings> timings = snapshot->profile(minRepeatCount.fromMaybe(1), minDuration.fromMaybe(0), clipRect.isJust() ? &rect : 0);
+    std::unique_ptr<PictureSnapshot::Timings> timings = snapshot->profile(minRepeatCount.fromMaybe(1), minDuration.fromMaybe(0), clipRect.isJust() ? &rect : 0);
     *outTimings = Array<Array<double>>::create();
     for (size_t i = 0; i < timings->size(); ++i) {
         const Vector<double>& row = (*timings)[i];
diff --git a/third_party/WebKit/Source/core/inspector/InspectorLayerTreeAgent.h b/third_party/WebKit/Source/core/inspector/InspectorLayerTreeAgent.h
index 76db7d9..4f9ea48 100644
--- a/third_party/WebKit/Source/core/inspector/InspectorLayerTreeAgent.h
+++ b/third_party/WebKit/Source/core/inspector/InspectorLayerTreeAgent.h
@@ -35,7 +35,6 @@
 #include "core/inspector/protocol/LayerTree.h"
 #include "platform/Timer.h"
 #include "wtf/Noncopyable.h"
-#include "wtf/PassOwnPtr.h"
 #include "wtf/PassRefPtr.h"
 #include "wtf/text/WTFString.h"
 
diff --git a/third_party/WebKit/Source/core/inspector/InspectorMemoryAgent.cpp b/third_party/WebKit/Source/core/inspector/InspectorMemoryAgent.cpp
index 1d06a3d..0fd1bb3 100644
--- a/third_party/WebKit/Source/core/inspector/InspectorMemoryAgent.cpp
+++ b/third_party/WebKit/Source/core/inspector/InspectorMemoryAgent.cpp
@@ -31,7 +31,6 @@
 #include "core/inspector/InspectorMemoryAgent.h"
 
 #include "core/inspector/InstanceCounters.h"
-#include "wtf/OwnPtr.h"
 
 namespace blink {
 
diff --git a/third_party/WebKit/Source/core/inspector/InspectorMemoryAgent.h b/third_party/WebKit/Source/core/inspector/InspectorMemoryAgent.h
index 05a2ee66..9acd5eb 100644
--- a/third_party/WebKit/Source/core/inspector/InspectorMemoryAgent.h
+++ b/third_party/WebKit/Source/core/inspector/InspectorMemoryAgent.h
@@ -34,7 +34,6 @@
 #include "core/CoreExport.h"
 #include "core/inspector/InspectorBaseAgent.h"
 #include "core/inspector/protocol/Memory.h"
-#include "wtf/PassOwnPtr.h"
 
 namespace blink {
 
diff --git a/third_party/WebKit/Source/core/inspector/InspectorNetworkAgent.cpp b/third_party/WebKit/Source/core/inspector/InspectorNetworkAgent.cpp
index 9171a7ce..31a9361 100644
--- a/third_party/WebKit/Source/core/inspector/InspectorNetworkAgent.cpp
+++ b/third_party/WebKit/Source/core/inspector/InspectorNetworkAgent.cpp
@@ -74,6 +74,7 @@
 #include "wtf/CurrentTime.h"
 #include "wtf/RefPtr.h"
 #include "wtf/text/Base64.h"
+#include <memory>
 
 namespace blink {
 
@@ -183,7 +184,7 @@
     String m_mimeType;
     String m_textEncodingName;
     std::unique_ptr<GetResponseBodyCallback> m_callback;
-    OwnPtr<FileReaderLoader> m_loader;
+    std::unique_ptr<FileReaderLoader> m_loader;
     RefPtr<SharedBuffer> m_rawData;
 };
 
diff --git a/third_party/WebKit/Source/core/inspector/InspectorNetworkAgent.h b/third_party/WebKit/Source/core/inspector/InspectorNetworkAgent.h
index d787c07..eacb8c7e 100644
--- a/third_party/WebKit/Source/core/inspector/InspectorNetworkAgent.h
+++ b/third_party/WebKit/Source/core/inspector/InspectorNetworkAgent.h
@@ -38,7 +38,6 @@
 #include "core/inspector/protocol/Network.h"
 #include "platform/Timer.h"
 #include "platform/heap/Handle.h"
-#include "wtf/PassOwnPtr.h"
 #include "wtf/text/WTFString.h"
 
 namespace blink {
diff --git a/third_party/WebKit/Source/core/inspector/InspectorPageAgent.cpp b/third_party/WebKit/Source/core/inspector/InspectorPageAgent.cpp
index 174c351..375be28 100644
--- a/third_party/WebKit/Source/core/inspector/InspectorPageAgent.cpp
+++ b/third_party/WebKit/Source/core/inspector/InspectorPageAgent.cpp
@@ -71,6 +71,7 @@
 #include "wtf/Vector.h"
 #include "wtf/text/Base64.h"
 #include "wtf/text/TextEncoding.h"
+#include <memory>
 
 namespace blink {
 
@@ -148,12 +149,12 @@
     return type == Resource::CSSStyleSheet || type == Resource::XSLStyleSheet || type == Resource::Script || type == Resource::Raw || type == Resource::ImportResource || type == Resource::MainResource;
 }
 
-static PassOwnPtr<TextResourceDecoder> createResourceTextDecoder(const String& mimeType, const String& textEncodingName)
+static std::unique_ptr<TextResourceDecoder> createResourceTextDecoder(const String& mimeType, const String& textEncodingName)
 {
     if (!textEncodingName.isEmpty())
         return TextResourceDecoder::create("text/plain", textEncodingName);
     if (DOMImplementation::isXMLMIMEType(mimeType)) {
-        OwnPtr<TextResourceDecoder> decoder = TextResourceDecoder::create("application/xml");
+        std::unique_ptr<TextResourceDecoder> decoder = TextResourceDecoder::create("application/xml");
         decoder->useLenientXMLDecoding();
         return decoder;
     }
@@ -163,7 +164,7 @@
         return TextResourceDecoder::create("text/plain", "UTF-8");
     if (DOMImplementation::isTextMIMEType(mimeType))
         return TextResourceDecoder::create("text/plain", "ISO-8859-1");
-    return PassOwnPtr<TextResourceDecoder>();
+    return std::unique_ptr<TextResourceDecoder>();
 }
 
 static void maybeEncodeTextContent(const String& textContent, PassRefPtr<SharedBuffer> buffer, String* result, bool* base64Encoded)
@@ -188,7 +189,7 @@
         return false;
 
     String textContent;
-    OwnPtr<TextResourceDecoder> decoder = createResourceTextDecoder(mimeType, textEncodingName);
+    std::unique_ptr<TextResourceDecoder> decoder = createResourceTextDecoder(mimeType, textEncodingName);
     WTF::TextEncoding encoding(textEncodingName);
 
     if (decoder) {
diff --git a/third_party/WebKit/Source/core/inspector/InspectorSession.h b/third_party/WebKit/Source/core/inspector/InspectorSession.h
index 6628556..74bf806 100644
--- a/third_party/WebKit/Source/core/inspector/InspectorSession.h
+++ b/third_party/WebKit/Source/core/inspector/InspectorSession.h
@@ -12,7 +12,6 @@
 #include "platform/inspector_protocol/Values.h"
 #include "platform/v8_inspector/public/V8InspectorSessionClient.h"
 #include "wtf/Forward.h"
-#include "wtf/PassOwnPtr.h"
 #include "wtf/Vector.h"
 #include "wtf/text/WTFString.h"
 
diff --git a/third_party/WebKit/Source/core/inspector/InspectorStyleSheet.cpp b/third_party/WebKit/Source/core/inspector/InspectorStyleSheet.cpp
index ace6c4d..2a95b4b 100644
--- a/third_party/WebKit/Source/core/inspector/InspectorStyleSheet.cpp
+++ b/third_party/WebKit/Source/core/inspector/InspectorStyleSheet.cpp
@@ -53,8 +53,7 @@
 #include "core/inspector/InspectorResourceContainer.h"
 #include "core/svg/SVGStyleElement.h"
 #include "platform/v8_inspector/public/V8ContentSearchUtil.h"
-#include "wtf/OwnPtr.h"
-#include "wtf/PassOwnPtr.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/text/StringBuilder.h"
 #include "wtf/text/TextPosition.h"
 #include <algorithm>
@@ -884,13 +883,13 @@
 InspectorStyleSheetBase::InspectorStyleSheetBase(Listener* listener)
     : m_id(IdentifiersFactory::createIdentifier())
     , m_listener(listener)
-    , m_lineEndings(adoptPtr(new LineEndings()))
+    , m_lineEndings(wrapUnique(new LineEndings()))
 {
 }
 
 void InspectorStyleSheetBase::onStyleSheetTextChanged()
 {
-    m_lineEndings = adoptPtr(new LineEndings());
+    m_lineEndings = wrapUnique(new LineEndings());
     if (listener())
         listener()->styleSheetChanged(this);
 }
diff --git a/third_party/WebKit/Source/core/inspector/InspectorStyleSheet.h b/third_party/WebKit/Source/core/inspector/InspectorStyleSheet.h
index 26d56ac6..c4be8519 100644
--- a/third_party/WebKit/Source/core/inspector/InspectorStyleSheet.h
+++ b/third_party/WebKit/Source/core/inspector/InspectorStyleSheet.h
@@ -35,6 +35,7 @@
 #include "wtf/RefPtr.h"
 #include "wtf/Vector.h"
 #include "wtf/text/WTFString.h"
+#include <memory>
 
 namespace blink {
 
@@ -116,7 +117,7 @@
 
     String m_id;
     Listener* m_listener;
-    OwnPtr<LineEndings> m_lineEndings;
+    std::unique_ptr<LineEndings> m_lineEndings;
 };
 
 class InspectorStyleSheet : public InspectorStyleSheetBase {
diff --git a/third_party/WebKit/Source/core/inspector/InspectorTaskRunner.h b/third_party/WebKit/Source/core/inspector/InspectorTaskRunner.h
index 84562608..235166d 100644
--- a/third_party/WebKit/Source/core/inspector/InspectorTaskRunner.h
+++ b/third_party/WebKit/Source/core/inspector/InspectorTaskRunner.h
@@ -11,8 +11,6 @@
 #include "wtf/Forward.h"
 #include "wtf/Functional.h"
 #include "wtf/Noncopyable.h"
-#include "wtf/OwnPtr.h"
-#include "wtf/PassOwnPtr.h"
 #include "wtf/ThreadingPrimitives.h"
 #include <v8.h>
 
diff --git a/third_party/WebKit/Source/core/inspector/InspectorTraceEvents.cpp b/third_party/WebKit/Source/core/inspector/InspectorTraceEvents.cpp
index 073ed50..a3426f5 100644
--- a/third_party/WebKit/Source/core/inspector/InspectorTraceEvents.cpp
+++ b/third_party/WebKit/Source/core/inspector/InspectorTraceEvents.cpp
@@ -34,6 +34,7 @@
 #include "wtf/Vector.h"
 #include "wtf/text/TextPosition.h"
 #include <inttypes.h>
+#include <memory>
 #include <v8-profiler.h>
 #include <v8.h>
 
@@ -167,9 +168,9 @@
 } // namespace
 
 namespace InspectorScheduleStyleInvalidationTrackingEvent {
-PassOwnPtr<TracedValue> fillCommonPart(Element& element, const InvalidationSet& invalidationSet, const char* invalidatedSelector)
+std::unique_ptr<TracedValue> fillCommonPart(Element& element, const InvalidationSet& invalidationSet, const char* invalidatedSelector)
 {
-    OwnPtr<TracedValue> value = TracedValue::create();
+    std::unique_ptr<TracedValue> value = TracedValue::create();
     value->setString("frame", toHexString(element.document().frame()));
     setNodeInfo(value.get(), &element, "nodeId", "nodeName");
     value->setString("invalidationSet", descendantInvalidationSetToIdString(invalidationSet));
@@ -198,30 +199,30 @@
     return priorityString;
 }
 
-PassOwnPtr<TracedValue> InspectorScheduleStyleInvalidationTrackingEvent::idChange(Element& element, const InvalidationSet& invalidationSet, const AtomicString& id)
+std::unique_ptr<TracedValue> InspectorScheduleStyleInvalidationTrackingEvent::idChange(Element& element, const InvalidationSet& invalidationSet, const AtomicString& id)
 {
-    OwnPtr<TracedValue> value = fillCommonPart(element, invalidationSet, Id);
+    std::unique_ptr<TracedValue> value = fillCommonPart(element, invalidationSet, Id);
     value->setString("changedId", id);
     return value;
 }
 
-PassOwnPtr<TracedValue> InspectorScheduleStyleInvalidationTrackingEvent::classChange(Element& element, const InvalidationSet& invalidationSet, const AtomicString& className)
+std::unique_ptr<TracedValue> InspectorScheduleStyleInvalidationTrackingEvent::classChange(Element& element, const InvalidationSet& invalidationSet, const AtomicString& className)
 {
-    OwnPtr<TracedValue> value = fillCommonPart(element, invalidationSet, Class);
+    std::unique_ptr<TracedValue> value = fillCommonPart(element, invalidationSet, Class);
     value->setString("changedClass", className);
     return value;
 }
 
-PassOwnPtr<TracedValue> InspectorScheduleStyleInvalidationTrackingEvent::attributeChange(Element& element, const InvalidationSet& invalidationSet, const QualifiedName& attributeName)
+std::unique_ptr<TracedValue> InspectorScheduleStyleInvalidationTrackingEvent::attributeChange(Element& element, const InvalidationSet& invalidationSet, const QualifiedName& attributeName)
 {
-    OwnPtr<TracedValue> value = fillCommonPart(element, invalidationSet, Attribute);
+    std::unique_ptr<TracedValue> value = fillCommonPart(element, invalidationSet, Attribute);
     value->setString("changedAttribute", attributeName.toString());
     return value;
 }
 
-PassOwnPtr<TracedValue> InspectorScheduleStyleInvalidationTrackingEvent::pseudoChange(Element& element, const InvalidationSet& invalidationSet, CSSSelector::PseudoType pseudoType)
+std::unique_ptr<TracedValue> InspectorScheduleStyleInvalidationTrackingEvent::pseudoChange(Element& element, const InvalidationSet& invalidationSet, CSSSelector::PseudoType pseudoType)
 {
-    OwnPtr<TracedValue> value = fillCommonPart(element, invalidationSet, Attribute);
+    std::unique_ptr<TracedValue> value = fillCommonPart(element, invalidationSet, Attribute);
     value->setString("changedPseudo", pseudoTypeToString(pseudoType));
     return value;
 }
@@ -240,9 +241,9 @@
 const char InspectorStyleInvalidatorInvalidateEvent::PreventStyleSharingForParent[] = "Prevent style sharing for parent";
 
 namespace InspectorStyleInvalidatorInvalidateEvent {
-PassOwnPtr<TracedValue> fillCommonPart(Element& element, const char* reason)
+std::unique_ptr<TracedValue> fillCommonPart(Element& element, const char* reason)
 {
-    OwnPtr<TracedValue> value = TracedValue::create();
+    std::unique_ptr<TracedValue> value = TracedValue::create();
     value->setString("frame", toHexString(element.document().frame()));
     setNodeInfo(value.get(), &element, "nodeId", "nodeName");
     value->setString("reason", reason);
@@ -250,14 +251,14 @@
 }
 } // namespace InspectorStyleInvalidatorInvalidateEvent
 
-PassOwnPtr<TracedValue> InspectorStyleInvalidatorInvalidateEvent::data(Element& element, const char* reason)
+std::unique_ptr<TracedValue> InspectorStyleInvalidatorInvalidateEvent::data(Element& element, const char* reason)
 {
     return fillCommonPart(element, reason);
 }
 
-PassOwnPtr<TracedValue> InspectorStyleInvalidatorInvalidateEvent::selectorPart(Element& element, const char* reason, const InvalidationSet& invalidationSet, const String& selectorPart)
+std::unique_ptr<TracedValue> InspectorStyleInvalidatorInvalidateEvent::selectorPart(Element& element, const char* reason, const InvalidationSet& invalidationSet, const String& selectorPart)
 {
-    OwnPtr<TracedValue> value = fillCommonPart(element, reason);
+    std::unique_ptr<TracedValue> value = fillCommonPart(element, reason);
     value->beginArray("invalidationList");
     invalidationSet.toTracedValue(value.get());
     value->endArray();
@@ -265,9 +266,9 @@
     return value;
 }
 
-PassOwnPtr<TracedValue> InspectorStyleInvalidatorInvalidateEvent::invalidationList(Element& element, const Vector<RefPtr<InvalidationSet>>& invalidationList)
+std::unique_ptr<TracedValue> InspectorStyleInvalidatorInvalidateEvent::invalidationList(Element& element, const Vector<RefPtr<InvalidationSet>>& invalidationList)
 {
-    OwnPtr<TracedValue> value = fillCommonPart(element, ElementHasPendingInvalidationList);
+    std::unique_ptr<TracedValue> value = fillCommonPart(element, ElementHasPendingInvalidationList);
     value->beginArray("invalidationList");
     for (const auto& invalidationSet : invalidationList)
         invalidationSet->toTracedValue(value.get());
@@ -275,11 +276,11 @@
     return value;
 }
 
-PassOwnPtr<TracedValue> InspectorStyleRecalcInvalidationTrackingEvent::data(Node* node, const StyleChangeReasonForTracing& reason)
+std::unique_ptr<TracedValue> InspectorStyleRecalcInvalidationTrackingEvent::data(Node* node, const StyleChangeReasonForTracing& reason)
 {
     ASSERT(node);
 
-    OwnPtr<TracedValue> value = TracedValue::create();
+    std::unique_ptr<TracedValue> value = TracedValue::create();
     value->setString("frame", toHexString(node->document().frame()));
     setNodeInfo(value.get(), node, "nodeId", "nodeName");
     value->setString("reason", reason.reasonString());
@@ -288,7 +289,7 @@
     return value;
 }
 
-PassOwnPtr<TracedValue> InspectorLayoutEvent::beginData(FrameView* frameView)
+std::unique_ptr<TracedValue> InspectorLayoutEvent::beginData(FrameView* frameView)
 {
     bool isPartial;
     unsigned needsLayoutObjects;
@@ -296,7 +297,7 @@
     LocalFrame& frame = frameView->frame();
     frame.view()->countObjectsNeedingLayout(needsLayoutObjects, totalObjects, isPartial);
 
-    OwnPtr<TracedValue> value = TracedValue::create();
+    std::unique_ptr<TracedValue> value = TracedValue::create();
     value->setInteger("dirtyObjects", needsLayoutObjects);
     value->setInteger("totalObjects", totalObjects);
     value->setBoolean("partialLayout", isPartial);
@@ -330,12 +331,12 @@
     setNodeInfo(value, node, idFieldName, nameFieldName);
 }
 
-PassOwnPtr<TracedValue> InspectorLayoutEvent::endData(LayoutObject* rootForThisLayout)
+std::unique_ptr<TracedValue> InspectorLayoutEvent::endData(LayoutObject* rootForThisLayout)
 {
     Vector<FloatQuad> quads;
     rootForThisLayout->absoluteQuads(quads);
 
-    OwnPtr<TracedValue> value = TracedValue::create();
+    std::unique_ptr<TracedValue> value = TracedValue::create();
     if (quads.size() >= 1) {
         createQuad(value.get(), "root", quads[0]);
         setGeneratingNodeInfo(value.get(), rootForThisLayout, "rootNode");
@@ -381,10 +382,10 @@
 const char ScrollbarChanged[] = "Scrollbar changed";
 } // namespace LayoutInvalidationReason
 
-PassOwnPtr<TracedValue> InspectorLayoutInvalidationTrackingEvent::data(const LayoutObject* layoutObject, LayoutInvalidationReasonForTracing reason)
+std::unique_ptr<TracedValue> InspectorLayoutInvalidationTrackingEvent::data(const LayoutObject* layoutObject, LayoutInvalidationReasonForTracing reason)
 {
     ASSERT(layoutObject);
-    OwnPtr<TracedValue> value = TracedValue::create();
+    std::unique_ptr<TracedValue> value = TracedValue::create();
     value->setString("frame", toHexString(layoutObject->frame()));
     setGeneratingNodeInfo(value.get(), layoutObject, "nodeId", "nodeName");
     value->setString("reason", reason);
@@ -392,21 +393,21 @@
     return value;
 }
 
-PassOwnPtr<TracedValue> InspectorPaintInvalidationTrackingEvent::data(const LayoutObject* layoutObject, const LayoutObject& paintContainer)
+std::unique_ptr<TracedValue> InspectorPaintInvalidationTrackingEvent::data(const LayoutObject* layoutObject, const LayoutObject& paintContainer)
 {
     ASSERT(layoutObject);
-    OwnPtr<TracedValue> value = TracedValue::create();
+    std::unique_ptr<TracedValue> value = TracedValue::create();
     value->setString("frame", toHexString(layoutObject->frame()));
     setGeneratingNodeInfo(value.get(), &paintContainer, "paintId");
     setGeneratingNodeInfo(value.get(), layoutObject, "nodeId", "nodeName");
     return value;
 }
 
-PassOwnPtr<TracedValue> InspectorScrollInvalidationTrackingEvent::data(const LayoutObject& layoutObject)
+std::unique_ptr<TracedValue> InspectorScrollInvalidationTrackingEvent::data(const LayoutObject& layoutObject)
 {
     static const char ScrollInvalidationReason[] = "Scroll with viewport-constrained element";
 
-    OwnPtr<TracedValue> value = TracedValue::create();
+    std::unique_ptr<TracedValue> value = TracedValue::create();
     value->setString("frame", toHexString(layoutObject.frame()));
     value->setString("reason", ScrollInvalidationReason);
     setGeneratingNodeInfo(value.get(), &layoutObject, "nodeId", "nodeName");
@@ -414,21 +415,21 @@
     return value;
 }
 
-PassOwnPtr<TracedValue> InspectorChangeResourcePriorityEvent::data(unsigned long identifier, const ResourceLoadPriority& loadPriority)
+std::unique_ptr<TracedValue> InspectorChangeResourcePriorityEvent::data(unsigned long identifier, const ResourceLoadPriority& loadPriority)
 {
     String requestId = IdentifiersFactory::requestId(identifier);
 
-    OwnPtr<TracedValue> value = TracedValue::create();
+    std::unique_ptr<TracedValue> value = TracedValue::create();
     value->setString("requestId", requestId);
     value->setString("priority", resourcePriorityString(loadPriority));
     return value;
 }
 
-PassOwnPtr<TracedValue> InspectorSendRequestEvent::data(unsigned long identifier, LocalFrame* frame, const ResourceRequest& request)
+std::unique_ptr<TracedValue> InspectorSendRequestEvent::data(unsigned long identifier, LocalFrame* frame, const ResourceRequest& request)
 {
     String requestId = IdentifiersFactory::requestId(identifier);
 
-    OwnPtr<TracedValue> value = TracedValue::create();
+    std::unique_ptr<TracedValue> value = TracedValue::create();
     value->setString("requestId", requestId);
     value->setString("frame", toHexString(frame));
     value->setString("url", request.url().getString());
@@ -440,11 +441,11 @@
     return value;
 }
 
-PassOwnPtr<TracedValue> InspectorReceiveResponseEvent::data(unsigned long identifier, LocalFrame* frame, const ResourceResponse& response)
+std::unique_ptr<TracedValue> InspectorReceiveResponseEvent::data(unsigned long identifier, LocalFrame* frame, const ResourceResponse& response)
 {
     String requestId = IdentifiersFactory::requestId(identifier);
 
-    OwnPtr<TracedValue> value = TracedValue::create();
+    std::unique_ptr<TracedValue> value = TracedValue::create();
     value->setString("requestId", requestId);
     value->setString("frame", toHexString(frame));
     value->setInteger("statusCode", response.httpStatusCode());
@@ -452,22 +453,22 @@
     return value;
 }
 
-PassOwnPtr<TracedValue> InspectorReceiveDataEvent::data(unsigned long identifier, LocalFrame* frame, int encodedDataLength)
+std::unique_ptr<TracedValue> InspectorReceiveDataEvent::data(unsigned long identifier, LocalFrame* frame, int encodedDataLength)
 {
     String requestId = IdentifiersFactory::requestId(identifier);
 
-    OwnPtr<TracedValue> value = TracedValue::create();
+    std::unique_ptr<TracedValue> value = TracedValue::create();
     value->setString("requestId", requestId);
     value->setString("frame", toHexString(frame));
     value->setInteger("encodedDataLength", encodedDataLength);
     return value;
 }
 
-PassOwnPtr<TracedValue> InspectorResourceFinishEvent::data(unsigned long identifier, double finishTime, bool didFail)
+std::unique_ptr<TracedValue> InspectorResourceFinishEvent::data(unsigned long identifier, double finishTime, bool didFail)
 {
     String requestId = IdentifiersFactory::requestId(identifier);
 
-    OwnPtr<TracedValue> value = TracedValue::create();
+    std::unique_ptr<TracedValue> value = TracedValue::create();
     value->setString("requestId", requestId);
     value->setBoolean("didFail", didFail);
     if (finishTime)
@@ -483,39 +484,39 @@
     return frame;
 }
 
-static PassOwnPtr<TracedValue> genericTimerData(ExecutionContext* context, int timerId)
+static std::unique_ptr<TracedValue> genericTimerData(ExecutionContext* context, int timerId)
 {
-    OwnPtr<TracedValue> value = TracedValue::create();
+    std::unique_ptr<TracedValue> value = TracedValue::create();
     value->setInteger("timerId", timerId);
     if (LocalFrame* frame = frameForExecutionContext(context))
         value->setString("frame", toHexString(frame));
     return value;
 }
 
-PassOwnPtr<TracedValue> InspectorTimerInstallEvent::data(ExecutionContext* context, int timerId, int timeout, bool singleShot)
+std::unique_ptr<TracedValue> InspectorTimerInstallEvent::data(ExecutionContext* context, int timerId, int timeout, bool singleShot)
 {
-    OwnPtr<TracedValue> value = genericTimerData(context, timerId);
+    std::unique_ptr<TracedValue> value = genericTimerData(context, timerId);
     value->setInteger("timeout", timeout);
     value->setBoolean("singleShot", singleShot);
     setCallStack(value.get());
     return value;
 }
 
-PassOwnPtr<TracedValue> InspectorTimerRemoveEvent::data(ExecutionContext* context, int timerId)
+std::unique_ptr<TracedValue> InspectorTimerRemoveEvent::data(ExecutionContext* context, int timerId)
 {
-    OwnPtr<TracedValue> value = genericTimerData(context, timerId);
+    std::unique_ptr<TracedValue> value = genericTimerData(context, timerId);
     setCallStack(value.get());
     return value;
 }
 
-PassOwnPtr<TracedValue> InspectorTimerFireEvent::data(ExecutionContext* context, int timerId)
+std::unique_ptr<TracedValue> InspectorTimerFireEvent::data(ExecutionContext* context, int timerId)
 {
     return genericTimerData(context, timerId);
 }
 
-PassOwnPtr<TracedValue> InspectorAnimationFrameEvent::data(ExecutionContext* context, int callbackId)
+std::unique_ptr<TracedValue> InspectorAnimationFrameEvent::data(ExecutionContext* context, int callbackId)
 {
-    OwnPtr<TracedValue> value = TracedValue::create();
+    std::unique_ptr<TracedValue> value = TracedValue::create();
     value->setInteger("id", callbackId);
     if (context->isDocument())
         value->setString("frame", toHexString(toDocument(context)->frame()));
@@ -525,9 +526,9 @@
     return value;
 }
 
-PassOwnPtr<TracedValue> genericIdleCallbackEvent(ExecutionContext* context, int id)
+std::unique_ptr<TracedValue> genericIdleCallbackEvent(ExecutionContext* context, int id)
 {
-    OwnPtr<TracedValue> value = TracedValue::create();
+    std::unique_ptr<TracedValue> value = TracedValue::create();
     value->setInteger("id", id);
     if (LocalFrame* frame = frameForExecutionContext(context))
         value->setString("frame", toHexString(frame));
@@ -535,29 +536,29 @@
     return value;
 }
 
-PassOwnPtr<TracedValue> InspectorIdleCallbackRequestEvent::data(ExecutionContext* context, int id, double timeout)
+std::unique_ptr<TracedValue> InspectorIdleCallbackRequestEvent::data(ExecutionContext* context, int id, double timeout)
 {
-    OwnPtr<TracedValue> value = genericIdleCallbackEvent(context, id);
+    std::unique_ptr<TracedValue> value = genericIdleCallbackEvent(context, id);
     value->setInteger("timeout", timeout);
     return value;
 }
 
-PassOwnPtr<TracedValue> InspectorIdleCallbackCancelEvent::data(ExecutionContext* context, int id)
+std::unique_ptr<TracedValue> InspectorIdleCallbackCancelEvent::data(ExecutionContext* context, int id)
 {
     return genericIdleCallbackEvent(context, id);
 }
 
-PassOwnPtr<TracedValue> InspectorIdleCallbackFireEvent::data(ExecutionContext* context, int id, double allottedMilliseconds, bool timedOut)
+std::unique_ptr<TracedValue> InspectorIdleCallbackFireEvent::data(ExecutionContext* context, int id, double allottedMilliseconds, bool timedOut)
 {
-    OwnPtr<TracedValue> value = genericIdleCallbackEvent(context, id);
+    std::unique_ptr<TracedValue> value = genericIdleCallbackEvent(context, id);
     value->setDouble("allottedMilliseconds", allottedMilliseconds);
     value->setBoolean("timedOut", timedOut);
     return value;
 }
 
-PassOwnPtr<TracedValue> InspectorParseHtmlEvent::beginData(Document* document, unsigned startLine)
+std::unique_ptr<TracedValue> InspectorParseHtmlEvent::beginData(Document* document, unsigned startLine)
 {
-    OwnPtr<TracedValue> value = TracedValue::create();
+    std::unique_ptr<TracedValue> value = TracedValue::create();
     value->setInteger("startLine", startLine);
     value->setString("frame", toHexString(document->frame()));
     value->setString("url", document->url().getString());
@@ -565,23 +566,23 @@
     return value;
 }
 
-PassOwnPtr<TracedValue> InspectorParseHtmlEvent::endData(unsigned endLine)
+std::unique_ptr<TracedValue> InspectorParseHtmlEvent::endData(unsigned endLine)
 {
-    OwnPtr<TracedValue> value = TracedValue::create();
+    std::unique_ptr<TracedValue> value = TracedValue::create();
     value->setInteger("endLine", endLine);
     return value;
 }
 
-PassOwnPtr<TracedValue> InspectorParseAuthorStyleSheetEvent::data(const CSSStyleSheetResource* cachedStyleSheet)
+std::unique_ptr<TracedValue> InspectorParseAuthorStyleSheetEvent::data(const CSSStyleSheetResource* cachedStyleSheet)
 {
-    OwnPtr<TracedValue> value = TracedValue::create();
+    std::unique_ptr<TracedValue> value = TracedValue::create();
     value->setString("styleSheetUrl", cachedStyleSheet->url().getString());
     return value;
 }
 
-PassOwnPtr<TracedValue> InspectorXhrReadyStateChangeEvent::data(ExecutionContext* context, XMLHttpRequest* request)
+std::unique_ptr<TracedValue> InspectorXhrReadyStateChangeEvent::data(ExecutionContext* context, XMLHttpRequest* request)
 {
-    OwnPtr<TracedValue> value = TracedValue::create();
+    std::unique_ptr<TracedValue> value = TracedValue::create();
     value->setString("url", request->url().getString());
     value->setInteger("readyState", request->readyState());
     if (LocalFrame* frame = frameForExecutionContext(context))
@@ -590,9 +591,9 @@
     return value;
 }
 
-PassOwnPtr<TracedValue> InspectorXhrLoadEvent::data(ExecutionContext* context, XMLHttpRequest* request)
+std::unique_ptr<TracedValue> InspectorXhrLoadEvent::data(ExecutionContext* context, XMLHttpRequest* request)
 {
-    OwnPtr<TracedValue> value = TracedValue::create();
+    std::unique_ptr<TracedValue> value = TracedValue::create();
     value->setString("url", request->url().getString());
     if (LocalFrame* frame = frameForExecutionContext(context))
         value->setString("frame", toHexString(frame));
@@ -617,20 +618,20 @@
 const char InspectorLayerInvalidationTrackingEvent::ReflectionLayerChanged[] = "Reflection layer change";
 const char InspectorLayerInvalidationTrackingEvent::NewCompositedLayer[] = "Assigned a new composited layer";
 
-PassOwnPtr<TracedValue> InspectorLayerInvalidationTrackingEvent::data(const PaintLayer* layer, const char* reason)
+std::unique_ptr<TracedValue> InspectorLayerInvalidationTrackingEvent::data(const PaintLayer* layer, const char* reason)
 {
     const LayoutObject& paintInvalidationContainer = layer->layoutObject()->containerForPaintInvalidation();
 
-    OwnPtr<TracedValue> value = TracedValue::create();
+    std::unique_ptr<TracedValue> value = TracedValue::create();
     value->setString("frame", toHexString(paintInvalidationContainer.frame()));
     setGeneratingNodeInfo(value.get(), &paintInvalidationContainer, "paintId");
     value->setString("reason", reason);
     return value;
 }
 
-PassOwnPtr<TracedValue> InspectorPaintEvent::data(LayoutObject* layoutObject, const LayoutRect& clipRect, const GraphicsLayer* graphicsLayer)
+std::unique_ptr<TracedValue> InspectorPaintEvent::data(LayoutObject* layoutObject, const LayoutRect& clipRect, const GraphicsLayer* graphicsLayer)
 {
-    OwnPtr<TracedValue> value = TracedValue::create();
+    std::unique_ptr<TracedValue> value = TracedValue::create();
     value->setString("frame", toHexString(layoutObject->frame()));
     FloatQuad quad;
     localToPageQuad(*layoutObject, clipRect, &quad);
@@ -642,9 +643,9 @@
     return value;
 }
 
-PassOwnPtr<TracedValue> frameEventData(LocalFrame* frame)
+std::unique_ptr<TracedValue> frameEventData(LocalFrame* frame)
 {
-    OwnPtr<TracedValue> value = TracedValue::create();
+    std::unique_ptr<TracedValue> value = TracedValue::create();
     value->setString("frame", toHexString(frame));
     bool isMainFrame = frame && frame->isMainFrame();
     value->setBoolean("isMainFrame", isMainFrame);
@@ -653,35 +654,35 @@
 }
 
 
-PassOwnPtr<TracedValue> InspectorCommitLoadEvent::data(LocalFrame* frame)
+std::unique_ptr<TracedValue> InspectorCommitLoadEvent::data(LocalFrame* frame)
 {
     return frameEventData(frame);
 }
 
-PassOwnPtr<TracedValue> InspectorMarkLoadEvent::data(LocalFrame* frame)
+std::unique_ptr<TracedValue> InspectorMarkLoadEvent::data(LocalFrame* frame)
 {
     return frameEventData(frame);
 }
 
-PassOwnPtr<TracedValue> InspectorScrollLayerEvent::data(LayoutObject* layoutObject)
+std::unique_ptr<TracedValue> InspectorScrollLayerEvent::data(LayoutObject* layoutObject)
 {
-    OwnPtr<TracedValue> value = TracedValue::create();
+    std::unique_ptr<TracedValue> value = TracedValue::create();
     value->setString("frame", toHexString(layoutObject->frame()));
     setGeneratingNodeInfo(value.get(), layoutObject, "nodeId");
     return value;
 }
 
-PassOwnPtr<TracedValue> InspectorUpdateLayerTreeEvent::data(LocalFrame* frame)
+std::unique_ptr<TracedValue> InspectorUpdateLayerTreeEvent::data(LocalFrame* frame)
 {
-    OwnPtr<TracedValue> value = TracedValue::create();
+    std::unique_ptr<TracedValue> value = TracedValue::create();
     value->setString("frame", toHexString(frame));
     return value;
 }
 
 namespace {
-PassOwnPtr<TracedValue> fillLocation(const String& url, const TextPosition& textPosition)
+std::unique_ptr<TracedValue> fillLocation(const String& url, const TextPosition& textPosition)
 {
-    OwnPtr<TracedValue> value = TracedValue::create();
+    std::unique_ptr<TracedValue> value = TracedValue::create();
     value->setString("url", url);
     value->setInteger("lineNumber", textPosition.m_line.oneBasedInt());
     value->setInteger("columnNumber", textPosition.m_column.oneBasedInt());
@@ -689,31 +690,31 @@
 }
 }
 
-PassOwnPtr<TracedValue> InspectorEvaluateScriptEvent::data(LocalFrame* frame, const String& url, const TextPosition& textPosition)
+std::unique_ptr<TracedValue> InspectorEvaluateScriptEvent::data(LocalFrame* frame, const String& url, const TextPosition& textPosition)
 {
-    OwnPtr<TracedValue> value = fillLocation(url, textPosition);
+    std::unique_ptr<TracedValue> value = fillLocation(url, textPosition);
     value->setString("frame", toHexString(frame));
     setCallStack(value.get());
     return value;
 }
 
-PassOwnPtr<TracedValue> InspectorParseScriptEvent::data(unsigned long identifier, const String& url)
+std::unique_ptr<TracedValue> InspectorParseScriptEvent::data(unsigned long identifier, const String& url)
 {
     String requestId = IdentifiersFactory::requestId(identifier);
-    OwnPtr<TracedValue> value = TracedValue::create();
+    std::unique_ptr<TracedValue> value = TracedValue::create();
     value->setString("requestId", requestId);
     value->setString("url", url);
     return value;
 }
 
-PassOwnPtr<TracedValue> InspectorCompileScriptEvent::data(const String& url, const TextPosition& textPosition)
+std::unique_ptr<TracedValue> InspectorCompileScriptEvent::data(const String& url, const TextPosition& textPosition)
 {
     return fillLocation(url, textPosition);
 }
 
-PassOwnPtr<TracedValue> InspectorFunctionCallEvent::data(ExecutionContext* context, const v8::Local<v8::Function>& function)
+std::unique_ptr<TracedValue> InspectorFunctionCallEvent::data(ExecutionContext* context, const v8::Local<v8::Function>& function)
 {
-    OwnPtr<TracedValue> value = TracedValue::create();
+    std::unique_ptr<TracedValue> value = TracedValue::create();
     if (LocalFrame* frame = frameForExecutionContext(context))
         value->setString("frame", toHexString(frame));
 
@@ -724,34 +725,34 @@
     v8::Local<v8::Value> functionName = originalFunction->GetDebugName();
     if (!functionName.IsEmpty() && functionName->IsString())
         value->setString("functionName", toCoreString(functionName.As<v8::String>()));
-    OwnPtr<SourceLocation> location = SourceLocation::fromFunction(originalFunction);
+    std::unique_ptr<SourceLocation> location = SourceLocation::fromFunction(originalFunction);
     value->setString("scriptId", String::number(location->scriptId()));
     value->setString("scriptName", location->url());
     value->setInteger("scriptLine", location->lineNumber());
     return value;
 }
 
-PassOwnPtr<TracedValue> InspectorPaintImageEvent::data(const LayoutImage& layoutImage)
+std::unique_ptr<TracedValue> InspectorPaintImageEvent::data(const LayoutImage& layoutImage)
 {
-    OwnPtr<TracedValue> value = TracedValue::create();
+    std::unique_ptr<TracedValue> value = TracedValue::create();
     setGeneratingNodeInfo(value.get(), &layoutImage, "nodeId");
     if (const ImageResource* resource = layoutImage.cachedImage())
         value->setString("url", resource->url().getString());
     return value;
 }
 
-PassOwnPtr<TracedValue> InspectorPaintImageEvent::data(const LayoutObject& owningLayoutObject, const StyleImage& styleImage)
+std::unique_ptr<TracedValue> InspectorPaintImageEvent::data(const LayoutObject& owningLayoutObject, const StyleImage& styleImage)
 {
-    OwnPtr<TracedValue> value = TracedValue::create();
+    std::unique_ptr<TracedValue> value = TracedValue::create();
     setGeneratingNodeInfo(value.get(), &owningLayoutObject, "nodeId");
     if (const ImageResource* resource = styleImage.cachedImage())
         value->setString("url", resource->url().getString());
     return value;
 }
 
-PassOwnPtr<TracedValue> InspectorPaintImageEvent::data(const LayoutObject* owningLayoutObject, const ImageResource& imageResource)
+std::unique_ptr<TracedValue> InspectorPaintImageEvent::data(const LayoutObject* owningLayoutObject, const ImageResource& imageResource)
 {
-    OwnPtr<TracedValue> value = TracedValue::create();
+    std::unique_ptr<TracedValue> value = TracedValue::create();
     setGeneratingNodeInfo(value.get(), owningLayoutObject, "nodeId");
     value->setString("url", imageResource.url().getString());
     return value;
@@ -764,9 +765,9 @@
     return heapStatistics.used_heap_size();
 }
 
-PassOwnPtr<TracedValue> InspectorUpdateCountersEvent::data()
+std::unique_ptr<TracedValue> InspectorUpdateCountersEvent::data()
 {
-    OwnPtr<TracedValue> value = TracedValue::create();
+    std::unique_ptr<TracedValue> value = TracedValue::create();
     if (isMainThread()) {
         value->setInteger("documents", InstanceCounters::counterValue(InstanceCounters::DocumentCounter));
         value->setInteger("nodes", InstanceCounters::counterValue(InstanceCounters::NodeCounter));
@@ -776,67 +777,67 @@
     return value;
 }
 
-PassOwnPtr<TracedValue> InspectorInvalidateLayoutEvent::data(LocalFrame* frame)
+std::unique_ptr<TracedValue> InspectorInvalidateLayoutEvent::data(LocalFrame* frame)
 {
-    OwnPtr<TracedValue> value = TracedValue::create();
+    std::unique_ptr<TracedValue> value = TracedValue::create();
     value->setString("frame", toHexString(frame));
     setCallStack(value.get());
     return value;
 }
 
-PassOwnPtr<TracedValue> InspectorRecalculateStylesEvent::data(LocalFrame* frame)
+std::unique_ptr<TracedValue> InspectorRecalculateStylesEvent::data(LocalFrame* frame)
 {
-    OwnPtr<TracedValue> value = TracedValue::create();
+    std::unique_ptr<TracedValue> value = TracedValue::create();
     value->setString("frame", toHexString(frame));
     setCallStack(value.get());
     return value;
 }
 
-PassOwnPtr<TracedValue> InspectorEventDispatchEvent::data(const Event& event)
+std::unique_ptr<TracedValue> InspectorEventDispatchEvent::data(const Event& event)
 {
-    OwnPtr<TracedValue> value = TracedValue::create();
+    std::unique_ptr<TracedValue> value = TracedValue::create();
     value->setString("type", event.type());
     setCallStack(value.get());
     return value;
 }
 
-PassOwnPtr<TracedValue> InspectorTimeStampEvent::data(ExecutionContext* context, const String& message)
+std::unique_ptr<TracedValue> InspectorTimeStampEvent::data(ExecutionContext* context, const String& message)
 {
-    OwnPtr<TracedValue> value = TracedValue::create();
+    std::unique_ptr<TracedValue> value = TracedValue::create();
     value->setString("message", message);
     if (LocalFrame* frame = frameForExecutionContext(context))
         value->setString("frame", toHexString(frame));
     return value;
 }
 
-PassOwnPtr<TracedValue> InspectorTracingSessionIdForWorkerEvent::data(const String& sessionId, const String& workerId, WorkerThread* workerThread)
+std::unique_ptr<TracedValue> InspectorTracingSessionIdForWorkerEvent::data(const String& sessionId, const String& workerId, WorkerThread* workerThread)
 {
-    OwnPtr<TracedValue> value = TracedValue::create();
+    std::unique_ptr<TracedValue> value = TracedValue::create();
     value->setString("sessionId", sessionId);
     value->setString("workerId", workerId);
     value->setDouble("workerThreadId", workerThread->platformThreadId());
     return value;
 }
 
-PassOwnPtr<TracedValue> InspectorTracingStartedInFrame::data(const String& sessionId, LocalFrame* frame)
+std::unique_ptr<TracedValue> InspectorTracingStartedInFrame::data(const String& sessionId, LocalFrame* frame)
 {
-    OwnPtr<TracedValue> value = TracedValue::create();
+    std::unique_ptr<TracedValue> value = TracedValue::create();
     value->setString("sessionId", sessionId);
     value->setString("page", toHexString(frame));
     return value;
 }
 
-PassOwnPtr<TracedValue> InspectorSetLayerTreeId::data(const String& sessionId, int layerTreeId)
+std::unique_ptr<TracedValue> InspectorSetLayerTreeId::data(const String& sessionId, int layerTreeId)
 {
-    OwnPtr<TracedValue> value = TracedValue::create();
+    std::unique_ptr<TracedValue> value = TracedValue::create();
     value->setString("sessionId", sessionId);
     value->setInteger("layerTreeId", layerTreeId);
     return value;
 }
 
-PassOwnPtr<TracedValue> InspectorAnimationEvent::data(const Animation& animation)
+std::unique_ptr<TracedValue> InspectorAnimationEvent::data(const Animation& animation)
 {
-    OwnPtr<TracedValue> value = TracedValue::create();
+    std::unique_ptr<TracedValue> value = TracedValue::create();
     value->setString("id", String::number(animation.sequenceNumber()));
     value->setString("state", animation.playState());
     if (const AnimationEffect* effect = animation.effect()) {
@@ -849,16 +850,16 @@
     return value;
 }
 
-PassOwnPtr<TracedValue> InspectorAnimationStateEvent::data(const Animation& animation)
+std::unique_ptr<TracedValue> InspectorAnimationStateEvent::data(const Animation& animation)
 {
-    OwnPtr<TracedValue> value = TracedValue::create();
+    std::unique_ptr<TracedValue> value = TracedValue::create();
     value->setString("state", animation.playState());
     return value;
 }
 
-PassOwnPtr<TracedValue> InspectorHitTestEvent::endData(const HitTestRequest& request, const HitTestLocation& location, const HitTestResult& result)
+std::unique_ptr<TracedValue> InspectorHitTestEvent::endData(const HitTestRequest& request, const HitTestLocation& location, const HitTestResult& result)
 {
-    OwnPtr<TracedValue> value(TracedValue::create());
+    std::unique_ptr<TracedValue> value(TracedValue::create());
     value->setInteger("x", location.roundedPoint().x());
     value->setInteger("y", location.roundedPoint().y());
     if (location.isRectBasedTest())
diff --git a/third_party/WebKit/Source/core/inspector/InspectorTraceEvents.h b/third_party/WebKit/Source/core/inspector/InspectorTraceEvents.h
index 07eeea2..5ec488c0 100644
--- a/third_party/WebKit/Source/core/inspector/InspectorTraceEvents.h
+++ b/third_party/WebKit/Source/core/inspector/InspectorTraceEvents.h
@@ -13,6 +13,7 @@
 #include "platform/heap/Handle.h"
 #include "wtf/Forward.h"
 #include "wtf/Functional.h"
+#include <memory>
 
 namespace v8 {
 class Function;
@@ -56,8 +57,8 @@
 enum ResourceLoadPriority : int;
 
 namespace InspectorLayoutEvent {
-PassOwnPtr<TracedValue> beginData(FrameView*);
-PassOwnPtr<TracedValue> endData(LayoutObject* rootForThisLayout);
+std::unique_ptr<TracedValue> beginData(FrameView*);
+std::unique_ptr<TracedValue> endData(LayoutObject* rootForThisLayout);
 }
 
 namespace InspectorScheduleStyleInvalidationTrackingEvent {
@@ -66,10 +67,10 @@
 extern const char Id[];
 extern const char Pseudo[];
 
-PassOwnPtr<TracedValue> attributeChange(Element&, const InvalidationSet&, const QualifiedName&);
-PassOwnPtr<TracedValue> classChange(Element&, const InvalidationSet&, const AtomicString&);
-PassOwnPtr<TracedValue> idChange(Element&, const InvalidationSet&, const AtomicString&);
-PassOwnPtr<TracedValue> pseudoChange(Element&, const InvalidationSet&, CSSSelector::PseudoType);
+std::unique_ptr<TracedValue> attributeChange(Element&, const InvalidationSet&, const QualifiedName&);
+std::unique_ptr<TracedValue> classChange(Element&, const InvalidationSet&, const AtomicString&);
+std::unique_ptr<TracedValue> idChange(Element&, const InvalidationSet&, const AtomicString&);
+std::unique_ptr<TracedValue> pseudoChange(Element&, const InvalidationSet&, CSSSelector::PseudoType);
 } // namespace InspectorScheduleStyleInvalidationTrackingEvent
 
 #define TRACE_SCHEDULE_STYLE_INVALIDATION(element, invalidationSet, changeType, ...) \
@@ -81,7 +82,7 @@
         InspectorScheduleStyleInvalidationTrackingEvent::changeType((element), (invalidationSet), __VA_ARGS__));
 
 namespace InspectorStyleRecalcInvalidationTrackingEvent {
-PassOwnPtr<TracedValue> data(Node*, const StyleChangeReasonForTracing&);
+std::unique_ptr<TracedValue> data(Node*, const StyleChangeReasonForTracing&);
 }
 
 String descendantInvalidationSetToIdString(const InvalidationSet&);
@@ -95,9 +96,9 @@
 extern const char InvalidationSetMatchedTagName[];
 extern const char PreventStyleSharingForParent[];
 
-PassOwnPtr<TracedValue> data(Element&, const char* reason);
-PassOwnPtr<TracedValue> selectorPart(Element&, const char* reason, const InvalidationSet&, const String&);
-PassOwnPtr<TracedValue> invalidationList(Element&, const Vector<RefPtr<InvalidationSet>>&);
+std::unique_ptr<TracedValue> data(Element&, const char* reason);
+std::unique_ptr<TracedValue> selectorPart(Element&, const char* reason, const InvalidationSet&, const String&);
+std::unique_ptr<TracedValue> invalidationList(Element&, const Vector<RefPtr<InvalidationSet>>&);
 } // namespace InspectorStyleInvalidatorInvalidateEvent
 
 #define TRACE_STYLE_INVALIDATOR_INVALIDATION(element, reason) \
@@ -161,80 +162,80 @@
 typedef const char LayoutInvalidationReasonForTracing[];
 
 namespace InspectorLayoutInvalidationTrackingEvent {
-PassOwnPtr<TracedValue> CORE_EXPORT data(const LayoutObject*, LayoutInvalidationReasonForTracing);
+std::unique_ptr<TracedValue> CORE_EXPORT data(const LayoutObject*, LayoutInvalidationReasonForTracing);
 }
 
 namespace InspectorPaintInvalidationTrackingEvent {
-PassOwnPtr<TracedValue> data(const LayoutObject*, const LayoutObject& paintContainer);
+std::unique_ptr<TracedValue> data(const LayoutObject*, const LayoutObject& paintContainer);
 }
 
 namespace InspectorScrollInvalidationTrackingEvent {
-PassOwnPtr<TracedValue> data(const LayoutObject&);
+std::unique_ptr<TracedValue> data(const LayoutObject&);
 }
 
 namespace InspectorChangeResourcePriorityEvent {
-PassOwnPtr<TracedValue> data(unsigned long identifier, const ResourceLoadPriority&);
+std::unique_ptr<TracedValue> data(unsigned long identifier, const ResourceLoadPriority&);
 }
 
 namespace InspectorSendRequestEvent {
-PassOwnPtr<TracedValue> data(unsigned long identifier, LocalFrame*, const ResourceRequest&);
+std::unique_ptr<TracedValue> data(unsigned long identifier, LocalFrame*, const ResourceRequest&);
 }
 
 namespace InspectorReceiveResponseEvent {
-PassOwnPtr<TracedValue> data(unsigned long identifier, LocalFrame*, const ResourceResponse&);
+std::unique_ptr<TracedValue> data(unsigned long identifier, LocalFrame*, const ResourceResponse&);
 }
 
 namespace InspectorReceiveDataEvent {
-PassOwnPtr<TracedValue> data(unsigned long identifier, LocalFrame*, int encodedDataLength);
+std::unique_ptr<TracedValue> data(unsigned long identifier, LocalFrame*, int encodedDataLength);
 }
 
 namespace InspectorResourceFinishEvent {
-PassOwnPtr<TracedValue> data(unsigned long identifier, double finishTime, bool didFail);
+std::unique_ptr<TracedValue> data(unsigned long identifier, double finishTime, bool didFail);
 }
 
 namespace InspectorTimerInstallEvent {
-PassOwnPtr<TracedValue> data(ExecutionContext*, int timerId, int timeout, bool singleShot);
+std::unique_ptr<TracedValue> data(ExecutionContext*, int timerId, int timeout, bool singleShot);
 }
 
 namespace InspectorTimerRemoveEvent {
-PassOwnPtr<TracedValue> data(ExecutionContext*, int timerId);
+std::unique_ptr<TracedValue> data(ExecutionContext*, int timerId);
 }
 
 namespace InspectorTimerFireEvent {
-PassOwnPtr<TracedValue> data(ExecutionContext*, int timerId);
+std::unique_ptr<TracedValue> data(ExecutionContext*, int timerId);
 }
 
 namespace InspectorIdleCallbackRequestEvent {
-PassOwnPtr<TracedValue> data(ExecutionContext*, int id, double timeout);
+std::unique_ptr<TracedValue> data(ExecutionContext*, int id, double timeout);
 }
 
 namespace InspectorIdleCallbackCancelEvent {
-PassOwnPtr<TracedValue> data(ExecutionContext*, int id);
+std::unique_ptr<TracedValue> data(ExecutionContext*, int id);
 }
 
 namespace InspectorIdleCallbackFireEvent {
-PassOwnPtr<TracedValue> data(ExecutionContext*, int id, double allottedMilliseconds, bool timedOut);
+std::unique_ptr<TracedValue> data(ExecutionContext*, int id, double allottedMilliseconds, bool timedOut);
 }
 
 namespace InspectorAnimationFrameEvent {
-PassOwnPtr<TracedValue> data(ExecutionContext*, int callbackId);
+std::unique_ptr<TracedValue> data(ExecutionContext*, int callbackId);
 }
 
 namespace InspectorParseHtmlEvent {
-PassOwnPtr<TracedValue> beginData(Document*, unsigned startLine);
-PassOwnPtr<TracedValue> endData(unsigned endLine);
+std::unique_ptr<TracedValue> beginData(Document*, unsigned startLine);
+std::unique_ptr<TracedValue> endData(unsigned endLine);
 }
 
 namespace InspectorParseAuthorStyleSheetEvent {
-PassOwnPtr<TracedValue> data(const CSSStyleSheetResource*);
+std::unique_ptr<TracedValue> data(const CSSStyleSheetResource*);
 }
 
 namespace InspectorXhrReadyStateChangeEvent {
-PassOwnPtr<TracedValue> data(ExecutionContext*, XMLHttpRequest*);
+std::unique_ptr<TracedValue> data(ExecutionContext*, XMLHttpRequest*);
 }
 
 namespace InspectorXhrLoadEvent {
-PassOwnPtr<TracedValue> data(ExecutionContext*, XMLHttpRequest*);
+std::unique_ptr<TracedValue> data(ExecutionContext*, XMLHttpRequest*);
 }
 
 namespace InspectorLayerInvalidationTrackingEvent {
@@ -244,7 +245,7 @@
 extern const char ReflectionLayerChanged[];
 extern const char NewCompositedLayer[];
 
-PassOwnPtr<TracedValue> data(const PaintLayer*, const char* reason);
+std::unique_ptr<TracedValue> data(const PaintLayer*, const char* reason);
 }
 
 #define TRACE_LAYER_INVALIDATION(LAYER, REASON) \
@@ -256,89 +257,89 @@
         InspectorLayerInvalidationTrackingEvent::data((LAYER), (REASON)));
 
 namespace InspectorPaintEvent {
-PassOwnPtr<TracedValue> data(LayoutObject*, const LayoutRect& clipRect, const GraphicsLayer*);
+std::unique_ptr<TracedValue> data(LayoutObject*, const LayoutRect& clipRect, const GraphicsLayer*);
 }
 
 namespace InspectorPaintImageEvent {
-PassOwnPtr<TracedValue> data(const LayoutImage&);
-PassOwnPtr<TracedValue> data(const LayoutObject&, const StyleImage&);
-PassOwnPtr<TracedValue> data(const LayoutObject*, const ImageResource&);
+std::unique_ptr<TracedValue> data(const LayoutImage&);
+std::unique_ptr<TracedValue> data(const LayoutObject&, const StyleImage&);
+std::unique_ptr<TracedValue> data(const LayoutObject*, const ImageResource&);
 }
 
 namespace InspectorCommitLoadEvent {
-PassOwnPtr<TracedValue> data(LocalFrame*);
+std::unique_ptr<TracedValue> data(LocalFrame*);
 }
 
 namespace InspectorMarkLoadEvent {
-PassOwnPtr<TracedValue> data(LocalFrame*);
+std::unique_ptr<TracedValue> data(LocalFrame*);
 }
 
 namespace InspectorScrollLayerEvent {
-PassOwnPtr<TracedValue> data(LayoutObject*);
+std::unique_ptr<TracedValue> data(LayoutObject*);
 }
 
 namespace InspectorUpdateLayerTreeEvent {
-PassOwnPtr<TracedValue> data(LocalFrame*);
+std::unique_ptr<TracedValue> data(LocalFrame*);
 }
 
 namespace InspectorEvaluateScriptEvent {
-PassOwnPtr<TracedValue> data(LocalFrame*, const String& url, const WTF::TextPosition&);
+std::unique_ptr<TracedValue> data(LocalFrame*, const String& url, const WTF::TextPosition&);
 }
 
 namespace InspectorParseScriptEvent {
-PassOwnPtr<TracedValue> data(unsigned long identifier, const String& url);
+std::unique_ptr<TracedValue> data(unsigned long identifier, const String& url);
 }
 
 namespace InspectorCompileScriptEvent {
-PassOwnPtr<TracedValue> data(const String& url, const WTF::TextPosition&);
+std::unique_ptr<TracedValue> data(const String& url, const WTF::TextPosition&);
 }
 
 namespace InspectorFunctionCallEvent {
-PassOwnPtr<TracedValue> data(ExecutionContext*, const v8::Local<v8::Function>&);
+std::unique_ptr<TracedValue> data(ExecutionContext*, const v8::Local<v8::Function>&);
 }
 
 namespace InspectorUpdateCountersEvent {
-PassOwnPtr<TracedValue> data();
+std::unique_ptr<TracedValue> data();
 }
 
 namespace InspectorInvalidateLayoutEvent {
-PassOwnPtr<TracedValue> data(LocalFrame*);
+std::unique_ptr<TracedValue> data(LocalFrame*);
 }
 
 namespace InspectorRecalculateStylesEvent {
-PassOwnPtr<TracedValue> data(LocalFrame*);
+std::unique_ptr<TracedValue> data(LocalFrame*);
 }
 
 namespace InspectorEventDispatchEvent {
-PassOwnPtr<TracedValue> data(const Event&);
+std::unique_ptr<TracedValue> data(const Event&);
 }
 
 namespace InspectorTimeStampEvent {
-PassOwnPtr<TracedValue> data(ExecutionContext*, const String& message);
+std::unique_ptr<TracedValue> data(ExecutionContext*, const String& message);
 }
 
 namespace InspectorTracingSessionIdForWorkerEvent {
-PassOwnPtr<TracedValue> data(const String& sessionId, const String& workerId, WorkerThread*);
+std::unique_ptr<TracedValue> data(const String& sessionId, const String& workerId, WorkerThread*);
 }
 
 namespace InspectorTracingStartedInFrame {
-PassOwnPtr<TracedValue> data(const String& sessionId, LocalFrame*);
+std::unique_ptr<TracedValue> data(const String& sessionId, LocalFrame*);
 }
 
 namespace InspectorSetLayerTreeId {
-PassOwnPtr<TracedValue> data(const String& sessionId, int layerTreeId);
+std::unique_ptr<TracedValue> data(const String& sessionId, int layerTreeId);
 }
 
 namespace InspectorAnimationEvent {
-PassOwnPtr<TracedValue> data(const Animation&);
+std::unique_ptr<TracedValue> data(const Animation&);
 }
 
 namespace InspectorAnimationStateEvent {
-PassOwnPtr<TracedValue> data(const Animation&);
+std::unique_ptr<TracedValue> data(const Animation&);
 }
 
 namespace InspectorHitTestEvent {
-PassOwnPtr<TracedValue> endData(const HitTestRequest&, const HitTestLocation&, const HitTestResult&);
+std::unique_ptr<TracedValue> endData(const HitTestRequest&, const HitTestLocation&, const HitTestResult&);
 }
 
 CORE_EXPORT String toHexString(const void* p);
diff --git a/third_party/WebKit/Source/core/inspector/InspectorTracingAgent.h b/third_party/WebKit/Source/core/inspector/InspectorTracingAgent.h
index fa3a077..0d338a1 100644
--- a/third_party/WebKit/Source/core/inspector/InspectorTracingAgent.h
+++ b/third_party/WebKit/Source/core/inspector/InspectorTracingAgent.h
@@ -10,7 +10,6 @@
 #include "core/CoreExport.h"
 #include "core/inspector/InspectorBaseAgent.h"
 #include "core/inspector/protocol/Tracing.h"
-#include "wtf/PassOwnPtr.h"
 #include "wtf/text/WTFString.h"
 
 namespace blink {
diff --git a/third_party/WebKit/Source/core/inspector/InspectorWorkerAgent.cpp b/third_party/WebKit/Source/core/inspector/InspectorWorkerAgent.cpp
index 68263aa..3e627262 100644
--- a/third_party/WebKit/Source/core/inspector/InspectorWorkerAgent.cpp
+++ b/third_party/WebKit/Source/core/inspector/InspectorWorkerAgent.cpp
@@ -33,7 +33,6 @@
 #include "core/dom/Document.h"
 #include "core/inspector/InspectedFrames.h"
 #include "platform/weborigin/KURL.h"
-#include "wtf/PassOwnPtr.h"
 #include "wtf/RefPtr.h"
 #include "wtf/text/WTFString.h"
 
diff --git a/third_party/WebKit/Source/core/inspector/LayoutEditor.h b/third_party/WebKit/Source/core/inspector/LayoutEditor.h
index d93f7da1..ae2a279e 100644
--- a/third_party/WebKit/Source/core/inspector/LayoutEditor.h
+++ b/third_party/WebKit/Source/core/inspector/LayoutEditor.h
@@ -12,7 +12,6 @@
 #include "core/dom/Element.h"
 #include "platform/heap/Handle.h"
 #include "platform/inspector_protocol/Values.h"
-#include "wtf/PassOwnPtr.h"
 #include "wtf/RefPtr.h"
 #include "wtf/text/WTFString.h"
 
diff --git a/third_party/WebKit/Source/core/inspector/MainThreadDebugger.cpp b/third_party/WebKit/Source/core/inspector/MainThreadDebugger.cpp
index dcd4d44..8927df9 100644
--- a/third_party/WebKit/Source/core/inspector/MainThreadDebugger.cpp
+++ b/third_party/WebKit/Source/core/inspector/MainThreadDebugger.cpp
@@ -53,9 +53,9 @@
 #include "core/xml/XPathResult.h"
 #include "platform/UserGestureIndicator.h"
 #include "platform/v8_inspector/public/V8Debugger.h"
-#include "wtf/OwnPtr.h"
-#include "wtf/PassOwnPtr.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/ThreadingPrimitives.h"
+#include <memory>
 
 namespace blink {
 
@@ -79,7 +79,7 @@
 
 MainThreadDebugger::MainThreadDebugger(v8::Isolate* isolate)
     : ThreadDebugger(isolate)
-    , m_taskRunner(adoptPtr(new InspectorTaskRunner()))
+    , m_taskRunner(wrapUnique(new InspectorTaskRunner()))
 {
     MutexLocker locker(creationMutex());
     ASSERT(!s_instance);
@@ -93,7 +93,7 @@
     s_instance = nullptr;
 }
 
-void MainThreadDebugger::setClientMessageLoop(PassOwnPtr<ClientMessageLoop> clientMessageLoop)
+void MainThreadDebugger::setClientMessageLoop(std::unique_ptr<ClientMessageLoop> clientMessageLoop)
 {
     ASSERT(!m_clientMessageLoop);
     ASSERT(clientMessageLoop);
diff --git a/third_party/WebKit/Source/core/inspector/MainThreadDebugger.h b/third_party/WebKit/Source/core/inspector/MainThreadDebugger.h
index 343d364..d0a7046 100644
--- a/third_party/WebKit/Source/core/inspector/MainThreadDebugger.h
+++ b/third_party/WebKit/Source/core/inspector/MainThreadDebugger.h
@@ -36,6 +36,7 @@
 #include "core/inspector/InspectorTaskRunner.h"
 #include "core/inspector/ThreadDebugger.h"
 #include "platform/heap/Handle.h"
+#include <memory>
 #include <v8.h>
 
 namespace blink {
@@ -62,7 +63,7 @@
 
     InspectorTaskRunner* taskRunner() const { return m_taskRunner.get(); }
     bool isWorker() override { return false; }
-    void setClientMessageLoop(PassOwnPtr<ClientMessageLoop>);
+    void setClientMessageLoop(std::unique_ptr<ClientMessageLoop>);
     int contextGroupId(LocalFrame*);
     void contextCreated(ScriptState*, LocalFrame*, SecurityOrigin*);
     void contextWillBeDestroyed(ScriptState*);
@@ -84,8 +85,8 @@
     bool callingContextCanAccessContext(v8::Local<v8::Context> calling, v8::Local<v8::Context> target) override;
     int ensureDefaultContextInGroup(int contextGroupId) override;
 
-    OwnPtr<ClientMessageLoop> m_clientMessageLoop;
-    OwnPtr<InspectorTaskRunner> m_taskRunner;
+    std::unique_ptr<ClientMessageLoop> m_clientMessageLoop;
+    std::unique_ptr<InspectorTaskRunner> m_taskRunner;
 
     static MainThreadDebugger* s_instance;
 
diff --git a/third_party/WebKit/Source/core/inspector/NetworkResourcesData.cpp b/third_party/WebKit/Source/core/inspector/NetworkResourcesData.cpp
index 6e41c04..fd93123 100644
--- a/third_party/WebKit/Source/core/inspector/NetworkResourcesData.cpp
+++ b/third_party/WebKit/Source/core/inspector/NetworkResourcesData.cpp
@@ -32,6 +32,7 @@
 #include "core/fetch/Resource.h"
 #include "platform/SharedBuffer.h"
 #include "platform/network/ResourceResponse.h"
+#include <memory>
 
 namespace blink {
 
@@ -207,7 +208,7 @@
 
     String filePath = response.downloadedFilePath();
     if (!filePath.isEmpty()) {
-        OwnPtr<BlobData> blobData = BlobData::create();
+        std::unique_ptr<BlobData> blobData = BlobData::create();
         blobData->appendFile(filePath);
         AtomicString mimeType;
         if (response.isHTTP())
diff --git a/third_party/WebKit/Source/core/inspector/PageConsoleAgent.h b/third_party/WebKit/Source/core/inspector/PageConsoleAgent.h
index 076700f1..9b21149 100644
--- a/third_party/WebKit/Source/core/inspector/PageConsoleAgent.h
+++ b/third_party/WebKit/Source/core/inspector/PageConsoleAgent.h
@@ -33,7 +33,6 @@
 
 #include "core/CoreExport.h"
 #include "core/inspector/InspectorConsoleAgent.h"
-#include "wtf/PassOwnPtr.h"
 
 namespace blink {
 
diff --git a/third_party/WebKit/Source/core/inspector/ThreadDebugger.cpp b/third_party/WebKit/Source/core/inspector/ThreadDebugger.cpp
index 1de42b5..abb5fe4c 100644
--- a/third_party/WebKit/Source/core/inspector/ThreadDebugger.cpp
+++ b/third_party/WebKit/Source/core/inspector/ThreadDebugger.cpp
@@ -22,7 +22,8 @@
 #include "core/inspector/ScriptArguments.h"
 #include "platform/ScriptForbiddenScope.h"
 #include "wtf/CurrentTime.h"
-#include "wtf/OwnPtr.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
@@ -66,7 +67,7 @@
 
 void ThreadDebugger::beginUserGesture()
 {
-    m_userGestureIndicator = adoptPtr(new UserGestureIndicator(DefinitelyProcessingNewUserGesture));
+    m_userGestureIndicator = wrapUnique(new UserGestureIndicator(DefinitelyProcessingNewUserGesture));
 }
 
 void ThreadDebugger::endUserGesture()
@@ -322,7 +323,7 @@
     m_timerData.append(data);
     m_timerCallbacks.append(callback);
 
-    OwnPtr<Timer<ThreadDebugger>> timer = adoptPtr(new Timer<ThreadDebugger>(this, &ThreadDebugger::onTimer));
+    std::unique_ptr<Timer<ThreadDebugger>> timer = wrapUnique(new Timer<ThreadDebugger>(this, &ThreadDebugger::onTimer));
     Timer<ThreadDebugger>* timerPtr = timer.get();
     m_timers.append(std::move(timer));
     timerPtr->startRepeating(interval, BLINK_FROM_HERE);
@@ -344,7 +345,7 @@
 void ThreadDebugger::onTimer(Timer<ThreadDebugger>* timer)
 {
     for (size_t index = 0; index < m_timers.size(); ++index) {
-        if (m_timers[index] == timer) {
+        if (m_timers[index].get() == timer) {
             m_timerCallbacks[index](m_timerData[index]);
             return;
         }
diff --git a/third_party/WebKit/Source/core/inspector/ThreadDebugger.h b/third_party/WebKit/Source/core/inspector/ThreadDebugger.h
index 3c2aa536..766ef8e 100644
--- a/third_party/WebKit/Source/core/inspector/ThreadDebugger.h
+++ b/third_party/WebKit/Source/core/inspector/ThreadDebugger.h
@@ -12,7 +12,7 @@
 #include "platform/v8_inspector/public/V8DebuggerClient.h"
 #include "wtf/Forward.h"
 #include "wtf/Vector.h"
-
+#include <memory>
 #include <v8.h>
 
 namespace blink {
@@ -67,10 +67,10 @@
 
     static void getEventListenersCallback(const v8::FunctionCallbackInfo<v8::Value>&);
 
-    Vector<OwnPtr<Timer<ThreadDebugger>>> m_timers;
+    Vector<std::unique_ptr<Timer<ThreadDebugger>>> m_timers;
     Vector<V8DebuggerClient::TimerCallback> m_timerCallbacks;
     Vector<void*> m_timerData;
-    OwnPtr<UserGestureIndicator> m_userGestureIndicator;
+    std::unique_ptr<UserGestureIndicator> m_userGestureIndicator;
     v8::Global<v8::Function> m_eventLogFunction;
 };
 
diff --git a/third_party/WebKit/Source/core/inspector/WorkerConsoleAgent.h b/third_party/WebKit/Source/core/inspector/WorkerConsoleAgent.h
index 309f9736..e2abc047 100644
--- a/third_party/WebKit/Source/core/inspector/WorkerConsoleAgent.h
+++ b/third_party/WebKit/Source/core/inspector/WorkerConsoleAgent.h
@@ -32,7 +32,6 @@
 #define WorkerConsoleAgent_h
 
 #include "core/inspector/InspectorConsoleAgent.h"
-#include "wtf/PassOwnPtr.h"
 
 namespace blink {
 
diff --git a/third_party/WebKit/Source/core/inspector/WorkerInspectorController.cpp b/third_party/WebKit/Source/core/inspector/WorkerInspectorController.cpp
index ca14f5f9..4e4d8d8 100644
--- a/third_party/WebKit/Source/core/inspector/WorkerInspectorController.cpp
+++ b/third_party/WebKit/Source/core/inspector/WorkerInspectorController.cpp
@@ -41,7 +41,6 @@
 #include "platform/inspector_protocol/DispatcherBase.h"
 #include "platform/v8_inspector/public/V8Debugger.h"
 #include "platform/v8_inspector/public/V8InspectorSession.h"
-#include "wtf/PassOwnPtr.h"
 
 namespace blink {
 
diff --git a/third_party/WebKit/Source/core/inspector/WorkerInspectorController.h b/third_party/WebKit/Source/core/inspector/WorkerInspectorController.h
index 2121c14..3e0fcb3 100644
--- a/third_party/WebKit/Source/core/inspector/WorkerInspectorController.h
+++ b/third_party/WebKit/Source/core/inspector/WorkerInspectorController.h
@@ -36,7 +36,6 @@
 #include "wtf/Allocator.h"
 #include "wtf/Forward.h"
 #include "wtf/Noncopyable.h"
-#include "wtf/OwnPtr.h"
 #include "wtf/RefPtr.h"
 
 namespace blink {
diff --git a/third_party/WebKit/Source/core/layout/ClipPathOperation.h b/third_party/WebKit/Source/core/layout/ClipPathOperation.h
index 7258316..6edf717 100644
--- a/third_party/WebKit/Source/core/layout/ClipPathOperation.h
+++ b/third_party/WebKit/Source/core/layout/ClipPathOperation.h
@@ -32,10 +32,10 @@
 
 #include "core/style/BasicShapes.h"
 #include "platform/graphics/Path.h"
-#include "wtf/OwnPtr.h"
-#include "wtf/PassOwnPtr.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/RefCounted.h"
 #include "wtf/text/WTFString.h"
+#include <memory>
 
 namespace blink {
 
@@ -105,7 +105,7 @@
     {
         ASSERT(m_shape);
         m_path.reset();
-        m_path = adoptPtr(new Path);
+        m_path = wrapUnique(new Path);
         m_shape->path(*m_path, boundingRect);
         m_path->setWindRule(m_shape->getWindRule());
         return *m_path;
@@ -121,7 +121,7 @@
     }
 
     RefPtr<BasicShape> m_shape;
-    OwnPtr<Path> m_path;
+    std::unique_ptr<Path> m_path;
 };
 
 DEFINE_TYPE_CASTS(ShapeClipPathOperation, ClipPathOperation, op, op->type() == ClipPathOperation::SHAPE, op.type() == ClipPathOperation::SHAPE);
diff --git a/third_party/WebKit/Source/core/layout/FloatingObjects.cpp b/third_party/WebKit/Source/core/layout/FloatingObjects.cpp
index eff3aae..3972c9d 100644
--- a/third_party/WebKit/Source/core/layout/FloatingObjects.cpp
+++ b/third_party/WebKit/Source/core/layout/FloatingObjects.cpp
@@ -29,8 +29,9 @@
 #include "core/layout/shapes/ShapeOutsideInfo.h"
 #include "core/paint/PaintLayer.h"
 #include "platform/RuntimeEnabledFeatures.h"
-
+#include "wtf/PtrUtil.h"
 #include <algorithm>
+#include <memory>
 
 using namespace WTF;
 
@@ -88,9 +89,9 @@
     return m_layoutObject->layer() && m_layoutObject->layer()->isSelfPaintingOnlyBecauseIsCompositedPart() && !RuntimeEnabledFeatures::slimmingPaintV2Enabled();
 }
 
-PassOwnPtr<FloatingObject> FloatingObject::create(LayoutBox* layoutObject)
+std::unique_ptr<FloatingObject> FloatingObject::create(LayoutBox* layoutObject)
 {
-    OwnPtr<FloatingObject> newObj = adoptPtr(new FloatingObject(layoutObject));
+    std::unique_ptr<FloatingObject> newObj = wrapUnique(new FloatingObject(layoutObject));
 
     // If a layer exists, the float will paint itself. Otherwise someone else will.
     newObj->setShouldPaint(!layoutObject->hasSelfPaintingLayer() || newObj->shouldPaintForCompositedLayoutPart());
@@ -105,14 +106,14 @@
     return m_shouldPaint && !m_layoutObject->hasSelfPaintingLayer();
 }
 
-PassOwnPtr<FloatingObject> FloatingObject::copyToNewContainer(LayoutSize offset, bool shouldPaint, bool isDescendant) const
+std::unique_ptr<FloatingObject> FloatingObject::copyToNewContainer(LayoutSize offset, bool shouldPaint, bool isDescendant) const
 {
-    return adoptPtr(new FloatingObject(layoutObject(), getType(), LayoutRect(frameRect().location() - offset, frameRect().size()), shouldPaint, isDescendant, isLowestNonOverhangingFloatInChild()));
+    return wrapUnique(new FloatingObject(layoutObject(), getType(), LayoutRect(frameRect().location() - offset, frameRect().size()), shouldPaint, isDescendant, isLowestNonOverhangingFloatInChild()));
 }
 
-PassOwnPtr<FloatingObject> FloatingObject::unsafeClone() const
+std::unique_ptr<FloatingObject> FloatingObject::unsafeClone() const
 {
-    OwnPtr<FloatingObject> cloneObject = adoptPtr(new FloatingObject(layoutObject(), getType(), m_frameRect, m_shouldPaint, m_isDescendant, false));
+    std::unique_ptr<FloatingObject> cloneObject = wrapUnique(new FloatingObject(layoutObject(), getType(), m_frameRect, m_shouldPaint, m_isDescendant, false));
     cloneObject->m_isPlaced = m_isPlaced;
     return cloneObject;
 }
@@ -406,7 +407,7 @@
 void FloatingObjects::moveAllToFloatInfoMap(LayoutBoxToFloatInfoMap& map)
 {
     while (!m_set.isEmpty()) {
-        OwnPtr<FloatingObject> floatingObject = m_set.takeFirst();
+        std::unique_ptr<FloatingObject> floatingObject = m_set.takeFirst();
         LayoutBox* layoutObject = floatingObject->layoutObject();
         map.add(layoutObject, std::move(floatingObject));
     }
@@ -466,11 +467,11 @@
     markLowestFloatLogicalBottomCacheAsDirty();
 }
 
-FloatingObject* FloatingObjects::add(PassOwnPtr<FloatingObject> floatingObject)
+FloatingObject* FloatingObjects::add(std::unique_ptr<FloatingObject> floatingObject)
 {
-    FloatingObject* newObject = floatingObject.leakPtr();
+    FloatingObject* newObject = floatingObject.release();
     increaseObjectsCount(newObject->getType());
-    m_set.add(adoptPtr(newObject));
+    m_set.add(wrapUnique(newObject));
     if (newObject->isPlaced())
         addPlacedObject(*newObject);
     markLowestFloatLogicalBottomCacheAsDirty();
@@ -480,7 +481,7 @@
 void FloatingObjects::remove(FloatingObject* toBeRemoved)
 {
     decreaseObjectsCount(toBeRemoved->getType());
-    OwnPtr<FloatingObject> floatingObject = m_set.take(toBeRemoved);
+    std::unique_ptr<FloatingObject> floatingObject = m_set.take(toBeRemoved);
     ASSERT(floatingObject->isPlaced() || !floatingObject->isInPlacedTree());
     if (floatingObject->isPlaced())
         removePlacedObject(*floatingObject);
diff --git a/third_party/WebKit/Source/core/layout/FloatingObjects.h b/third_party/WebKit/Source/core/layout/FloatingObjects.h
index 11f78d9..35fd6d6 100644
--- a/third_party/WebKit/Source/core/layout/FloatingObjects.h
+++ b/third_party/WebKit/Source/core/layout/FloatingObjects.h
@@ -28,7 +28,7 @@
 #include "platform/PODIntervalTree.h"
 #include "platform/geometry/LayoutRect.h"
 #include "wtf/ListHashSet.h"
-#include "wtf/OwnPtr.h"
+#include <memory>
 
 namespace blink {
 
@@ -47,11 +47,11 @@
     // Note that Type uses bits so you can use FloatLeftRight as a mask to query for both left and right.
     enum Type { FloatLeft = 1, FloatRight = 2, FloatLeftRight = 3 };
 
-    static PassOwnPtr<FloatingObject> create(LayoutBox*);
+    static std::unique_ptr<FloatingObject> create(LayoutBox*);
 
-    PassOwnPtr<FloatingObject> copyToNewContainer(LayoutSize, bool shouldPaint = false, bool isDescendant = false) const;
+    std::unique_ptr<FloatingObject> copyToNewContainer(LayoutSize, bool shouldPaint = false, bool isDescendant = false) const;
 
-    PassOwnPtr<FloatingObject> unsafeClone() const;
+    std::unique_ptr<FloatingObject> unsafeClone() const;
 
     Type getType() const { return static_cast<Type>(m_type); }
     LayoutBox* layoutObject() const { return m_layoutObject; }
@@ -112,9 +112,9 @@
 struct FloatingObjectHashFunctions {
     STATIC_ONLY(FloatingObjectHashFunctions);
     static unsigned hash(FloatingObject* key) { return DefaultHash<LayoutBox*>::Hash::hash(key->layoutObject()); }
-    static unsigned hash(const OwnPtr<FloatingObject>& key) { return hash(key.get()); }
-    static bool equal(OwnPtr<FloatingObject>& a, FloatingObject* b) { return a->layoutObject() == b->layoutObject(); }
-    static bool equal(OwnPtr<FloatingObject>& a, const OwnPtr<FloatingObject>& b) { return equal(a, b.get()); }
+    static unsigned hash(const std::unique_ptr<FloatingObject>& key) { return hash(key.get()); }
+    static bool equal(std::unique_ptr<FloatingObject>& a, FloatingObject* b) { return a->layoutObject() == b->layoutObject(); }
+    static bool equal(std::unique_ptr<FloatingObject>& a, const std::unique_ptr<FloatingObject>& b) { return equal(a, b.get()); }
 
     static const bool safeToCompareToEmptyOrDeleted = true;
 };
@@ -122,14 +122,14 @@
     STATIC_ONLY(FloatingObjectHashTranslator);
     static unsigned hash(LayoutBox* key) { return DefaultHash<LayoutBox*>::Hash::hash(key); }
     static bool equal(FloatingObject* a, LayoutBox* b) { return a->layoutObject() == b; }
-    static bool equal(const OwnPtr<FloatingObject>& a, LayoutBox* b) { return a->layoutObject() == b; }
+    static bool equal(const std::unique_ptr<FloatingObject>& a, LayoutBox* b) { return a->layoutObject() == b; }
 };
-typedef ListHashSet<OwnPtr<FloatingObject>, 4, FloatingObjectHashFunctions> FloatingObjectSet;
+typedef ListHashSet<std::unique_ptr<FloatingObject>, 4, FloatingObjectHashFunctions> FloatingObjectSet;
 typedef FloatingObjectSet::const_iterator FloatingObjectSetIterator;
 typedef PODInterval<LayoutUnit, FloatingObject*> FloatingObjectInterval;
 typedef PODIntervalTree<LayoutUnit, FloatingObject*> FloatingObjectTree;
 typedef PODFreeListArena<PODRedBlackTree<FloatingObjectInterval>::Node> IntervalArena;
-typedef HashMap<LayoutBox*, OwnPtr<FloatingObject>> LayoutBoxToFloatInfoMap;
+typedef HashMap<LayoutBox*, std::unique_ptr<FloatingObject>> LayoutBoxToFloatInfoMap;
 
 class FloatingObjects {
     WTF_MAKE_NONCOPYABLE(FloatingObjects); USING_FAST_MALLOC(FloatingObjects);
@@ -139,7 +139,7 @@
 
     void clear();
     void moveAllToFloatInfoMap(LayoutBoxToFloatInfoMap&);
-    FloatingObject* add(PassOwnPtr<FloatingObject>);
+    FloatingObject* add(std::unique_ptr<FloatingObject>);
     void remove(FloatingObject*);
     void addPlacedObject(FloatingObject&);
     void removePlacedObject(FloatingObject&);
diff --git a/third_party/WebKit/Source/core/layout/HitTestLocation.h b/third_party/WebKit/Source/core/layout/HitTestLocation.h
index 6fef9bd..b2597f0b 100644
--- a/third_party/WebKit/Source/core/layout/HitTestLocation.h
+++ b/third_party/WebKit/Source/core/layout/HitTestLocation.h
@@ -29,7 +29,6 @@
 #include "wtf/Allocator.h"
 #include "wtf/Forward.h"
 #include "wtf/ListHashSet.h"
-#include "wtf/OwnPtr.h"
 #include "wtf/RefPtr.h"
 
 namespace blink {
diff --git a/third_party/WebKit/Source/core/layout/HitTestResult.h b/third_party/WebKit/Source/core/layout/HitTestResult.h
index 82da88f2..9e616bf 100644
--- a/third_party/WebKit/Source/core/layout/HitTestResult.h
+++ b/third_party/WebKit/Source/core/layout/HitTestResult.h
@@ -32,7 +32,6 @@
 #include "platform/text/TextDirection.h"
 #include "wtf/Forward.h"
 #include "wtf/ListHashSet.h"
-#include "wtf/OwnPtr.h"
 #include "wtf/RefPtr.h"
 #include "wtf/VectorTraits.h"
 
diff --git a/third_party/WebKit/Source/core/layout/HitTestingTransformState.cpp b/third_party/WebKit/Source/core/layout/HitTestingTransformState.cpp
index 3b8e067..c6b9460 100644
--- a/third_party/WebKit/Source/core/layout/HitTestingTransformState.cpp
+++ b/third_party/WebKit/Source/core/layout/HitTestingTransformState.cpp
@@ -26,7 +26,6 @@
 #include "core/layout/HitTestingTransformState.h"
 
 #include "platform/geometry/LayoutRect.h"
-#include "wtf/PassOwnPtr.h"
 
 namespace blink {
 
diff --git a/third_party/WebKit/Source/core/layout/ImageQualityController.cpp b/third_party/WebKit/Source/core/layout/ImageQualityController.cpp
index 429c944..56a93cb 100644
--- a/third_party/WebKit/Source/core/layout/ImageQualityController.cpp
+++ b/third_party/WebKit/Source/core/layout/ImageQualityController.cpp
@@ -35,6 +35,7 @@
 #include "core/frame/Settings.h"
 #include "core/page/ChromeClient.h"
 #include "core/page/Page.h"
+#include "wtf/PtrUtil.h"
 
 namespace blink {
 
@@ -92,14 +93,14 @@
 }
 
 ImageQualityController::ImageQualityController()
-    : m_timer(adoptPtr(new Timer<ImageQualityController>(this, &ImageQualityController::highQualityRepaintTimerFired)))
+    : m_timer(wrapUnique(new Timer<ImageQualityController>(this, &ImageQualityController::highQualityRepaintTimerFired)))
     , m_frameTimeWhenTimerStarted(0.0)
 {
 }
 
 void ImageQualityController::setTimer(Timer<ImageQualityController>* newTimer)
 {
-    m_timer = adoptPtr(newTimer);
+    m_timer = wrapUnique(newTimer);
 }
 
 void ImageQualityController::removeLayer(const LayoutObject& object, LayerSizeMap* innerMap, const void* layer)
diff --git a/third_party/WebKit/Source/core/layout/ImageQualityController.h b/third_party/WebKit/Source/core/layout/ImageQualityController.h
index 7066d21..d6636b7 100644
--- a/third_party/WebKit/Source/core/layout/ImageQualityController.h
+++ b/third_party/WebKit/Source/core/layout/ImageQualityController.h
@@ -37,6 +37,7 @@
 #include "platform/geometry/LayoutSize.h"
 #include "platform/graphics/Image.h"
 #include "wtf/HashMap.h"
+#include <memory>
 
 namespace blink {
 
@@ -83,7 +84,7 @@
     void setTimer(Timer<ImageQualityController>*);
 
     ObjectLayerSizeMap m_objectLayerSizeMap;
-    OwnPtr<Timer<ImageQualityController>> m_timer;
+    std::unique_ptr<Timer<ImageQualityController>> m_timer;
     double m_frameTimeWhenTimerStarted;
 
     // For calling set().
diff --git a/third_party/WebKit/Source/core/layout/ImageQualityControllerTest.cpp b/third_party/WebKit/Source/core/layout/ImageQualityControllerTest.cpp
index 7ee78d39..4324de7f 100644
--- a/third_party/WebKit/Source/core/layout/ImageQualityControllerTest.cpp
+++ b/third_party/WebKit/Source/core/layout/ImageQualityControllerTest.cpp
@@ -9,6 +9,7 @@
 #include "platform/graphics/GraphicsContext.h"
 #include "platform/graphics/paint/PaintController.h"
 #include "testing/gtest/include/gtest/gtest.h"
+#include <memory>
 
 namespace blink {
 
@@ -170,7 +171,7 @@
     LayoutImage* img = toLayoutImage(document().body()->firstChild()->layoutObject());
 
     RefPtr<TestImageLowQuality> testImage = adoptRef(new TestImageLowQuality);
-    OwnPtr<PaintController> paintController = PaintController::create();
+    std::unique_ptr<PaintController> paintController = PaintController::create();
     GraphicsContext context(*paintController);
 
     // Paint once. This will kick off a timer to see if we resize it during that timer's execution.
@@ -196,7 +197,7 @@
     LayoutImage* nonAnimatingImage = toLayoutImage(document().getElementById("myNonAnimatingImage")->layoutObject());
 
     RefPtr<TestImageLowQuality> testImage = adoptRef(new TestImageLowQuality);
-    OwnPtr<PaintController> paintController = PaintController::create();
+    std::unique_ptr<PaintController> paintController = PaintController::create();
     GraphicsContext context(*paintController);
 
     // Paint once. This will kick off a timer to see if we resize it during that timer's execution.
diff --git a/third_party/WebKit/Source/core/layout/LayoutAnalyzer.cpp b/third_party/WebKit/Source/core/layout/LayoutAnalyzer.cpp
index 1f5b741..754a31c 100644
--- a/third_party/WebKit/Source/core/layout/LayoutAnalyzer.cpp
+++ b/third_party/WebKit/Source/core/layout/LayoutAnalyzer.cpp
@@ -9,6 +9,7 @@
 #include "core/layout/LayoutObject.h"
 #include "core/layout/LayoutText.h"
 #include "platform/TracedValue.h"
+#include <memory>
 
 namespace blink {
 
@@ -104,9 +105,9 @@
     --m_depth;
 }
 
-PassOwnPtr<TracedValue> LayoutAnalyzer::toTracedValue()
+std::unique_ptr<TracedValue> LayoutAnalyzer::toTracedValue()
 {
-    OwnPtr<TracedValue> tracedValue(TracedValue::create());
+    std::unique_ptr<TracedValue> tracedValue(TracedValue::create());
     for (size_t i = 0; i < NumCounters; ++i) {
         if (m_counters[i] > 0)
             tracedValue->setInteger(nameForCounter(static_cast<Counter>(i)), m_counters[i]);
diff --git a/third_party/WebKit/Source/core/layout/LayoutAnalyzer.h b/third_party/WebKit/Source/core/layout/LayoutAnalyzer.h
index 00c7a0dd..cda9ffb1 100644
--- a/third_party/WebKit/Source/core/layout/LayoutAnalyzer.h
+++ b/third_party/WebKit/Source/core/layout/LayoutAnalyzer.h
@@ -8,7 +8,7 @@
 #include "platform/LayoutUnit.h"
 #include "wtf/Allocator.h"
 #include "wtf/Noncopyable.h"
-#include "wtf/PassOwnPtr.h"
+#include <memory>
 
 namespace blink {
 
@@ -82,7 +82,7 @@
         m_counters[counter] += delta;
     }
 
-    PassOwnPtr<TracedValue> toTracedValue();
+    std::unique_ptr<TracedValue> toTracedValue();
 
 private:
     const char* nameForCounter(Counter) const;
diff --git a/third_party/WebKit/Source/core/layout/LayoutBlock.cpp b/third_party/WebKit/Source/core/layout/LayoutBlock.cpp
index a8bae52..fda8bbe 100644
--- a/third_party/WebKit/Source/core/layout/LayoutBlock.cpp
+++ b/third_party/WebKit/Source/core/layout/LayoutBlock.cpp
@@ -54,7 +54,9 @@
 #include "core/paint/PaintLayer.h"
 #include "core/style/ComputedStyle.h"
 #include "platform/RuntimeEnabledFeatures.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/StdLibExtras.h"
+#include <memory>
 
 namespace blink {
 
@@ -103,7 +105,7 @@
 void LayoutBlock::removeFromGlobalMaps()
 {
     if (hasPositionedObjects()) {
-        OwnPtr<TrackedLayoutBoxListHashSet> descendants = gPositionedDescendantsMap->take(this);
+        std::unique_ptr<TrackedLayoutBoxListHashSet> descendants = gPositionedDescendantsMap->take(this);
         ASSERT(!descendants->isEmpty());
         for (LayoutBox* descendant : *descendants) {
             ASSERT(gPositionedContainerMap->get(descendant) == this);
@@ -111,7 +113,7 @@
         }
     }
     if (hasPercentHeightDescendants()) {
-        OwnPtr<TrackedLayoutBoxListHashSet> descendants = gPercentHeightDescendantsMap->take(this);
+        std::unique_ptr<TrackedLayoutBoxListHashSet> descendants = gPercentHeightDescendantsMap->take(this);
         ASSERT(!descendants->isEmpty());
         for (LayoutBox* descendant : *descendants) {
             ASSERT(descendant->percentHeightContainer() == this);
@@ -874,7 +876,7 @@
     TrackedLayoutBoxListHashSet* descendantSet = gPositionedDescendantsMap->get(this);
     if (!descendantSet) {
         descendantSet = new TrackedLayoutBoxListHashSet;
-        gPositionedDescendantsMap->set(this, adoptPtr(descendantSet));
+        gPositionedDescendantsMap->set(this, wrapUnique(descendantSet));
     }
     descendantSet->add(o);
 
@@ -962,7 +964,7 @@
     TrackedLayoutBoxListHashSet* descendantSet = gPercentHeightDescendantsMap->get(this);
     if (!descendantSet) {
         descendantSet = new TrackedLayoutBoxListHashSet;
-        gPercentHeightDescendantsMap->set(this, adoptPtr(descendantSet));
+        gPercentHeightDescendantsMap->set(this, wrapUnique(descendantSet));
     }
     descendantSet->add(descendant);
 
diff --git a/third_party/WebKit/Source/core/layout/LayoutBlock.h b/third_party/WebKit/Source/core/layout/LayoutBlock.h
index 59bcd53..89e0b4a 100644
--- a/third_party/WebKit/Source/core/layout/LayoutBlock.h
+++ b/third_party/WebKit/Source/core/layout/LayoutBlock.h
@@ -26,7 +26,7 @@
 #include "core/CoreExport.h"
 #include "core/layout/LayoutBox.h"
 #include "wtf/ListHashSet.h"
-#include "wtf/OwnPtr.h"
+#include <memory>
 
 namespace blink {
 
@@ -35,7 +35,7 @@
 class WordMeasurement;
 
 typedef WTF::ListHashSet<LayoutBox*, 16> TrackedLayoutBoxListHashSet;
-typedef WTF::HashMap<const LayoutBlock*, OwnPtr<TrackedLayoutBoxListHashSet>> TrackedDescendantsMap;
+typedef WTF::HashMap<const LayoutBlock*, std::unique_ptr<TrackedLayoutBoxListHashSet>> TrackedDescendantsMap;
 typedef WTF::HashMap<const LayoutBox*, LayoutBlock*> TrackedContainerMap;
 typedef Vector<WordMeasurement, 64> WordMeasurements;
 
diff --git a/third_party/WebKit/Source/core/layout/LayoutBlockFlow.cpp b/third_party/WebKit/Source/core/layout/LayoutBlockFlow.cpp
index 45536cf5..a7c3fbaa 100644
--- a/third_party/WebKit/Source/core/layout/LayoutBlockFlow.cpp
+++ b/third_party/WebKit/Source/core/layout/LayoutBlockFlow.cpp
@@ -49,6 +49,8 @@
 #include "core/layout/line/LineWidth.h"
 #include "core/layout/shapes/ShapeOutsideInfo.h"
 #include "core/paint/PaintLayer.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
@@ -1124,7 +1126,7 @@
 
         LayoutBoxToFloatInfoMap::iterator end = floatMap.end();
         for (LayoutBoxToFloatInfoMap::iterator it = floatMap.begin(); it != end; ++it) {
-            OwnPtr<FloatingObject>& floatingObject = it->value;
+            std::unique_ptr<FloatingObject>& floatingObject = it->value;
             if (!floatingObject->isDescendant()) {
                 changeLogicalTop = LayoutUnit();
                 changeLogicalBottom = std::max(changeLogicalBottom, logicalBottomForFloat(*floatingObject));
@@ -1762,7 +1764,7 @@
         return;
 
     if (!m_rareData)
-        m_rareData = adoptPtr(new LayoutBlockFlowRareData(this));
+        m_rareData = wrapUnique(new LayoutBlockFlowRareData(this));
 
     m_rareData->m_discardMarginBefore = value;
 }
@@ -1778,7 +1780,7 @@
         return;
 
     if (!m_rareData)
-        m_rareData = adoptPtr(new LayoutBlockFlowRareData(this));
+        m_rareData = wrapUnique(new LayoutBlockFlowRareData(this));
 
     m_rareData->m_discardMarginAfter = value;
 }
@@ -1823,7 +1825,7 @@
     if (!m_rareData) {
         if (pos == LayoutBlockFlowRareData::positiveMarginBeforeDefault(this) && neg == LayoutBlockFlowRareData::negativeMarginBeforeDefault(this))
             return;
-        m_rareData = adoptPtr(new LayoutBlockFlowRareData(this));
+        m_rareData = wrapUnique(new LayoutBlockFlowRareData(this));
     }
     m_rareData->m_margins.setPositiveMarginBefore(pos);
     m_rareData->m_margins.setNegativeMarginBefore(neg);
@@ -1834,7 +1836,7 @@
     if (!m_rareData) {
         if (pos == LayoutBlockFlowRareData::positiveMarginAfterDefault(this) && neg == LayoutBlockFlowRareData::negativeMarginAfterDefault(this))
             return;
-        m_rareData = adoptPtr(new LayoutBlockFlowRareData(this));
+        m_rareData = wrapUnique(new LayoutBlockFlowRareData(this));
     }
     m_rareData->m_margins.setPositiveMarginAfter(pos);
     m_rareData->m_margins.setNegativeMarginAfter(neg);
@@ -2198,7 +2200,7 @@
 
 void LayoutBlockFlow::createFloatingObjects()
 {
-    m_floatingObjects = adoptPtr(new FloatingObjects(this, isHorizontalWritingMode()));
+    m_floatingObjects = wrapUnique(new FloatingObjects(this, isHorizontalWritingMode()));
 }
 
 void LayoutBlockFlow::willBeDestroyed()
@@ -3003,7 +3005,7 @@
 
     // Create the special object entry & append it to the list
 
-    OwnPtr<FloatingObject> newObj = FloatingObject::create(&floatBox);
+    std::unique_ptr<FloatingObject> newObj = FloatingObject::create(&floatBox);
 
     // Our location is irrelevant if we're unsplittable or no pagination is in effect.
     // Just go ahead and lay out the float.
@@ -3461,7 +3463,7 @@
     if (!m_rareData) {
         if (!strut)
             return;
-        m_rareData = adoptPtr(new LayoutBlockFlowRareData(this));
+        m_rareData = wrapUnique(new LayoutBlockFlowRareData(this));
     }
     m_rareData->m_paginationStrutPropagatedFromChild = strut;
 }
@@ -3603,7 +3605,7 @@
     if (m_rareData)
         return *m_rareData;
 
-    m_rareData = adoptPtr(new LayoutBlockFlowRareData(this));
+    m_rareData = wrapUnique(new LayoutBlockFlowRareData(this));
     return *m_rareData;
 }
 
diff --git a/third_party/WebKit/Source/core/layout/LayoutBlockFlow.h b/third_party/WebKit/Source/core/layout/LayoutBlockFlow.h
index 55c9f49..4734a25 100644
--- a/third_party/WebKit/Source/core/layout/LayoutBlockFlow.h
+++ b/third_party/WebKit/Source/core/layout/LayoutBlockFlow.h
@@ -43,6 +43,7 @@
 #include "core/layout/line/LineBoxList.h"
 #include "core/layout/line/RootInlineBox.h"
 #include "core/layout/line/TrailingObjects.h"
+#include <memory>
 
 namespace blink {
 
@@ -615,8 +616,8 @@
     bool checkIfIsSelfCollapsingBlock() const;
 
 protected:
-    OwnPtr<LayoutBlockFlowRareData> m_rareData;
-    OwnPtr<FloatingObjects> m_floatingObjects;
+    std::unique_ptr<LayoutBlockFlowRareData> m_rareData;
+    std::unique_ptr<FloatingObjects> m_floatingObjects;
 
     friend class MarginInfo;
     friend class LineWidth; // needs to know FloatingObject
diff --git a/third_party/WebKit/Source/core/layout/LayoutBox.cpp b/third_party/WebKit/Source/core/layout/LayoutBox.cpp
index 0cda260..2dae9193 100644
--- a/third_party/WebKit/Source/core/layout/LayoutBox.cpp
+++ b/third_party/WebKit/Source/core/layout/LayoutBox.cpp
@@ -61,6 +61,7 @@
 #include "platform/geometry/DoubleRect.h"
 #include "platform/geometry/FloatQuad.h"
 #include "platform/geometry/FloatRoundedRect.h"
+#include "wtf/PtrUtil.h"
 #include <algorithm>
 #include <math.h>
 
@@ -4199,7 +4200,7 @@
     }
 
     if (!m_overflow)
-        m_overflow = adoptPtr(new BoxOverflowModel(clientBox, borderBoxRect()));
+        m_overflow = wrapUnique(new BoxOverflowModel(clientBox, borderBoxRect()));
 
     m_overflow->addLayoutOverflow(overflowRect);
 }
@@ -4214,7 +4215,7 @@
         return;
 
     if (!m_overflow)
-        m_overflow = adoptPtr(new BoxOverflowModel(noOverflowRect(), borderBox));
+        m_overflow = wrapUnique(new BoxOverflowModel(noOverflowRect(), borderBox));
 
     m_overflow->addSelfVisualOverflow(rect);
 }
@@ -4232,7 +4233,7 @@
         return;
 
     if (!m_overflow)
-        m_overflow = adoptPtr(new BoxOverflowModel(noOverflowRect(), borderBox));
+        m_overflow = wrapUnique(new BoxOverflowModel(noOverflowRect(), borderBox));
     m_overflow->addContentsVisualOverflow(rect);
 }
 
diff --git a/third_party/WebKit/Source/core/layout/LayoutBox.h b/third_party/WebKit/Source/core/layout/LayoutBox.h
index 0f80c7e..5b41c529 100644
--- a/third_party/WebKit/Source/core/layout/LayoutBox.h
+++ b/third_party/WebKit/Source/core/layout/LayoutBox.h
@@ -28,6 +28,8 @@
 #include "core/layout/OverflowModel.h"
 #include "core/layout/ScrollEnums.h"
 #include "platform/scroll/ScrollTypes.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
@@ -87,12 +89,12 @@
     LayoutBox* m_snapContainer;
     // For snap container, the descendant snap areas that contribute snap
     // points.
-    OwnPtr<SnapAreaSet> m_snapAreas;
+    std::unique_ptr<SnapAreaSet> m_snapAreas;
 
     SnapAreaSet& ensureSnapAreas()
     {
         if (!m_snapAreas)
-            m_snapAreas = adoptPtr(new SnapAreaSet);
+            m_snapAreas = wrapUnique(new SnapAreaSet);
 
         return *m_snapAreas;
     }
@@ -1059,7 +1061,7 @@
     LayoutBoxRareData& ensureRareData()
     {
         if (!m_rareData)
-            m_rareData = adoptPtr(new LayoutBoxRareData());
+            m_rareData = wrapUnique(new LayoutBoxRareData());
         return *m_rareData.get();
     }
 
@@ -1122,13 +1124,13 @@
     LayoutUnit m_maxPreferredLogicalWidth;
 
     // Our overflow information.
-    OwnPtr<BoxOverflowModel> m_overflow;
+    std::unique_ptr<BoxOverflowModel> m_overflow;
 
 private:
     // The inline box containing this LayoutBox, for atomic inline elements.
     InlineBox* m_inlineBoxWrapper;
 
-    OwnPtr<LayoutBoxRareData> m_rareData;
+    std::unique_ptr<LayoutBoxRareData> m_rareData;
 };
 
 DEFINE_LAYOUT_OBJECT_TYPE_CASTS(LayoutBox, isBox());
diff --git a/third_party/WebKit/Source/core/layout/LayoutBoxModelObject.cpp b/third_party/WebKit/Source/core/layout/LayoutBoxModelObject.cpp
index fd76c7b..a9bafeec 100644
--- a/third_party/WebKit/Source/core/layout/LayoutBoxModelObject.cpp
+++ b/third_party/WebKit/Source/core/layout/LayoutBoxModelObject.cpp
@@ -39,6 +39,7 @@
 #include "core/paint/PaintLayer.h"
 #include "core/style/ShadowList.h"
 #include "platform/LengthFunctions.h"
+#include "wtf/PtrUtil.h"
 
 namespace blink {
 
@@ -326,7 +327,7 @@
 void LayoutBoxModelObject::createLayer()
 {
     ASSERT(!m_layer);
-    m_layer = adoptPtr(new PaintLayer(this));
+    m_layer = wrapUnique(new PaintLayer(this));
     setHasLayer(true);
     m_layer->insertOnlyThisLayerAfterStyleChange();
 }
diff --git a/third_party/WebKit/Source/core/layout/LayoutBoxModelObject.h b/third_party/WebKit/Source/core/layout/LayoutBoxModelObject.h
index df963367..f61090f4 100644
--- a/third_party/WebKit/Source/core/layout/LayoutBoxModelObject.h
+++ b/third_party/WebKit/Source/core/layout/LayoutBoxModelObject.h
@@ -30,6 +30,8 @@
 #include "core/layout/LayoutObject.h"
 #include "core/page/scrolling/StickyPositionScrollingConstraints.h"
 #include "platform/geometry/LayoutRect.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
@@ -370,15 +372,15 @@
     LayoutBoxModelObjectRareData& ensureRareData()
     {
         if (!m_rareData)
-            m_rareData = adoptPtr(new LayoutBoxModelObjectRareData());
+            m_rareData = wrapUnique(new LayoutBoxModelObjectRareData());
         return *m_rareData.get();
     }
 
     // The PaintLayer associated with this object.
     // |m_layer| can be nullptr depending on the return value of layerTypeRequired().
-    OwnPtr<PaintLayer> m_layer;
+    std::unique_ptr<PaintLayer> m_layer;
 
-    OwnPtr<LayoutBoxModelObjectRareData> m_rareData;
+    std::unique_ptr<LayoutBoxModelObjectRareData> m_rareData;
 };
 
 DEFINE_LAYOUT_OBJECT_TYPE_CASTS(LayoutBoxModelObject, isBoxModelObject());
diff --git a/third_party/WebKit/Source/core/layout/LayoutCounter.cpp b/third_party/WebKit/Source/core/layout/LayoutCounter.cpp
index 8f48f65..d652693 100644
--- a/third_party/WebKit/Source/core/layout/LayoutCounter.cpp
+++ b/third_party/WebKit/Source/core/layout/LayoutCounter.cpp
@@ -30,7 +30,9 @@
 #include "core/layout/LayoutView.h"
 #include "core/layout/ListMarkerText.h"
 #include "core/style/ComputedStyle.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/StdLibExtras.h"
+#include <memory>
 
 #ifndef NDEBUG
 #include <stdio.h>
@@ -41,7 +43,7 @@
 using namespace HTMLNames;
 
 typedef HashMap<AtomicString, RefPtr<CounterNode>> CounterMap;
-typedef HashMap<const LayoutObject*, OwnPtr<CounterMap>> CounterMaps;
+typedef HashMap<const LayoutObject*, std::unique_ptr<CounterMap>> CounterMaps;
 
 static CounterNode* makeCounterNodeIfNeeded(LayoutObject&, const AtomicString& identifier, bool alwaysCreateCounter);
 
@@ -339,7 +341,7 @@
         nodeMap = counterMaps().get(&object);
     } else {
         nodeMap = new CounterMap;
-        counterMaps().set(&object, adoptPtr(nodeMap));
+        counterMaps().set(&object, wrapUnique(nodeMap));
         object.setHasCounterNodeMap(true);
     }
     nodeMap->set(identifier, newNode);
diff --git a/third_party/WebKit/Source/core/layout/LayoutGeometryMap.h b/third_party/WebKit/Source/core/layout/LayoutGeometryMap.h
index ed6666c..c18e95c 100644
--- a/third_party/WebKit/Source/core/layout/LayoutGeometryMap.h
+++ b/third_party/WebKit/Source/core/layout/LayoutGeometryMap.h
@@ -34,7 +34,6 @@
 #include "platform/geometry/IntSize.h"
 #include "platform/geometry/LayoutSize.h"
 #include "wtf/Allocator.h"
-#include "wtf/OwnPtr.h"
 
 namespace blink {
 
diff --git a/third_party/WebKit/Source/core/layout/LayoutGeometryMapStep.h b/third_party/WebKit/Source/core/layout/LayoutGeometryMapStep.h
index 6b4350d..4f60d33 100644
--- a/third_party/WebKit/Source/core/layout/LayoutGeometryMapStep.h
+++ b/third_party/WebKit/Source/core/layout/LayoutGeometryMapStep.h
@@ -30,7 +30,7 @@
 #include "platform/geometry/LayoutSize.h"
 #include "platform/transforms/TransformationMatrix.h"
 #include "wtf/Allocator.h"
-#include "wtf/OwnPtr.h"
+#include <memory>
 
 namespace blink {
 
@@ -63,7 +63,7 @@
     }
     const LayoutObject* m_layoutObject;
     LayoutSize m_offset;
-    OwnPtr<TransformationMatrix> m_transform; // Includes offset if non-null.
+    std::unique_ptr<TransformationMatrix> m_transform; // Includes offset if non-null.
     // If m_offsetForFixedPosition could only apply to the fixed position steps, we may be able to merge
     // with m_offsetForStickyPosition and simplify mapping.
     LayoutSize m_offsetForFixedPosition;
diff --git a/third_party/WebKit/Source/core/layout/LayoutGrid.cpp b/third_party/WebKit/Source/core/layout/LayoutGrid.cpp
index 1ac1d2d3..b2639b5b 100644
--- a/third_party/WebKit/Source/core/layout/LayoutGrid.cpp
+++ b/third_party/WebKit/Source/core/layout/LayoutGrid.cpp
@@ -32,7 +32,9 @@
 #include "core/style/ComputedStyle.h"
 #include "core/style/GridArea.h"
 #include "platform/LengthFunctions.h"
+#include "wtf/PtrUtil.h"
 #include <algorithm>
+#include <memory>
 
 namespace blink {
 
@@ -199,7 +201,7 @@
         return true;
     }
 
-    PassOwnPtr<GridArea> nextEmptyGridArea(size_t fixedTrackSpan, size_t varyingTrackSpan)
+    std::unique_ptr<GridArea> nextEmptyGridArea(size_t fixedTrackSpan, size_t varyingTrackSpan)
     {
         DCHECK(!m_grid.isEmpty());
         DCHECK(!m_grid[0].isEmpty());
@@ -212,7 +214,7 @@
         const size_t endOfVaryingTrackIndex = (m_direction == ForColumns) ? m_grid.size() : m_grid[0].size();
         for (; varyingTrackIndex < endOfVaryingTrackIndex; ++varyingTrackIndex) {
             if (checkEmptyCells(rowSpan, columnSpan)) {
-                OwnPtr<GridArea> result = adoptPtr(new GridArea(GridSpan::translatedDefiniteGridSpan(m_rowIndex, m_rowIndex + rowSpan), GridSpan::translatedDefiniteGridSpan(m_columnIndex, m_columnIndex + columnSpan)));
+                std::unique_ptr<GridArea> result = wrapUnique(new GridArea(GridSpan::translatedDefiniteGridSpan(m_rowIndex, m_rowIndex + rowSpan), GridSpan::translatedDefiniteGridSpan(m_columnIndex, m_columnIndex + columnSpan)));
                 // Advance the iterator to avoid an infinite loop where we would return the same grid area over and over.
                 ++varyingTrackIndex;
                 return result;
@@ -634,13 +636,13 @@
     return LayoutUnit(infinity);
 }
 
-double LayoutGrid::computeFlexFactorUnitSize(const Vector<GridTrack>& tracks, GridTrackSizingDirection direction, double flexFactorSum, LayoutUnit& leftOverSpace, const Vector<size_t, 8>& flexibleTracksIndexes, PassOwnPtr<TrackIndexSet> tracksToTreatAsInflexible) const
+double LayoutGrid::computeFlexFactorUnitSize(const Vector<GridTrack>& tracks, GridTrackSizingDirection direction, double flexFactorSum, LayoutUnit& leftOverSpace, const Vector<size_t, 8>& flexibleTracksIndexes, std::unique_ptr<TrackIndexSet> tracksToTreatAsInflexible) const
 {
     // We want to avoid the effect of flex factors sum below 1 making the factor unit size to grow exponentially.
     double hypotheticalFactorUnitSize = leftOverSpace / std::max<double>(1, flexFactorSum);
 
     // product of the hypothetical "flex factor unit" and any flexible track's "flex factor" must be grater than such track's "base size".
-    OwnPtr<TrackIndexSet> additionalTracksToTreatAsInflexible = std::move(tracksToTreatAsInflexible);
+    std::unique_ptr<TrackIndexSet> additionalTracksToTreatAsInflexible = std::move(tracksToTreatAsInflexible);
     bool validFlexFactorUnit = true;
     for (auto index : flexibleTracksIndexes) {
         if (additionalTracksToTreatAsInflexible && additionalTracksToTreatAsInflexible->contains(index))
@@ -652,7 +654,7 @@
             leftOverSpace -= baseSize;
             flexFactorSum -= flexFactor;
             if (!additionalTracksToTreatAsInflexible)
-                additionalTracksToTreatAsInflexible = adoptPtr(new TrackIndexSet());
+                additionalTracksToTreatAsInflexible = wrapUnique(new TrackIndexSet());
             additionalTracksToTreatAsInflexible->add(index);
             validFlexFactorUnit = false;
         }
@@ -1413,13 +1415,13 @@
         column.grow(maximumColumnIndex + abs(m_smallestColumnStart));
 }
 
-PassOwnPtr<GridArea> LayoutGrid::createEmptyGridAreaAtSpecifiedPositionsOutsideGrid(const LayoutBox& gridItem, GridTrackSizingDirection specifiedDirection, const GridSpan& specifiedPositions) const
+std::unique_ptr<GridArea> LayoutGrid::createEmptyGridAreaAtSpecifiedPositionsOutsideGrid(const LayoutBox& gridItem, GridTrackSizingDirection specifiedDirection, const GridSpan& specifiedPositions) const
 {
     GridTrackSizingDirection crossDirection = specifiedDirection == ForColumns ? ForRows : ForColumns;
     const size_t endOfCrossDirection = crossDirection == ForColumns ? gridColumnCount() : gridRowCount();
     size_t crossDirectionSpanSize = GridPositionsResolver::spanSizeForAutoPlacedItem(*style(), gridItem, crossDirection);
     GridSpan crossDirectionPositions = GridSpan::translatedDefiniteGridSpan(endOfCrossDirection, endOfCrossDirection + crossDirectionSpanSize);
-    return adoptPtr(new GridArea(specifiedDirection == ForColumns ? crossDirectionPositions : specifiedPositions, specifiedDirection == ForColumns ? specifiedPositions : crossDirectionPositions));
+    return wrapUnique(new GridArea(specifiedDirection == ForColumns ? crossDirectionPositions : specifiedPositions, specifiedDirection == ForColumns ? specifiedPositions : crossDirectionPositions));
 }
 
 void LayoutGrid::placeSpecifiedMajorAxisItemsOnGrid(const Vector<LayoutBox*>& autoGridItems)
@@ -1440,7 +1442,7 @@
         unsigned majorAxisInitialPosition = majorAxisPositions.startLine();
 
         GridIterator iterator(m_grid, autoPlacementMajorAxisDirection(), majorAxisPositions.startLine(), isGridAutoFlowDense ? 0 : minorAxisCursors.get(majorAxisInitialPosition));
-        OwnPtr<GridArea> emptyGridArea = iterator.nextEmptyGridArea(majorAxisPositions.integerSpan(), minorAxisSpanSize);
+        std::unique_ptr<GridArea> emptyGridArea = iterator.nextEmptyGridArea(majorAxisPositions.integerSpan(), minorAxisSpanSize);
         if (!emptyGridArea)
             emptyGridArea = createEmptyGridAreaAtSpecifiedPositionsOutsideGrid(*autoGridItem, autoPlacementMajorAxisDirection(), majorAxisPositions);
 
@@ -1478,7 +1480,7 @@
     size_t majorAxisAutoPlacementCursor = autoPlacementMajorAxisDirection() == ForColumns ? autoPlacementCursor.second : autoPlacementCursor.first;
     size_t minorAxisAutoPlacementCursor = autoPlacementMajorAxisDirection() == ForColumns ? autoPlacementCursor.first : autoPlacementCursor.second;
 
-    OwnPtr<GridArea> emptyGridArea;
+    std::unique_ptr<GridArea> emptyGridArea;
     if (minorAxisPositions.isTranslatedDefinite()) {
         // Move to the next track in major axis if initial position in minor axis is before auto-placement cursor.
         if (minorAxisPositions.startLine() < minorAxisAutoPlacementCursor)
diff --git a/third_party/WebKit/Source/core/layout/LayoutGrid.h b/third_party/WebKit/Source/core/layout/LayoutGrid.h
index 335e18ba..01c34999 100644
--- a/third_party/WebKit/Source/core/layout/LayoutGrid.h
+++ b/third_party/WebKit/Source/core/layout/LayoutGrid.h
@@ -29,6 +29,7 @@
 #include "core/layout/LayoutBlock.h"
 #include "core/layout/OrderIterator.h"
 #include "core/style/GridPositionsResolver.h"
+#include <memory>
 
 namespace blink {
 
@@ -132,7 +133,7 @@
 
     void placeItemsOnGrid();
     void populateExplicitGridAndOrderIterator();
-    PassOwnPtr<GridArea> createEmptyGridAreaAtSpecifiedPositionsOutsideGrid(const LayoutBox&, GridTrackSizingDirection, const GridSpan& specifiedPositions) const;
+    std::unique_ptr<GridArea> createEmptyGridAreaAtSpecifiedPositionsOutsideGrid(const LayoutBox&, GridTrackSizingDirection, const GridSpan& specifiedPositions) const;
     void placeSpecifiedMajorAxisItemsOnGrid(const Vector<LayoutBox*>&);
     void placeAutoMajorAxisItemsOnGrid(const Vector<LayoutBox*>&);
     void placeAutoMajorAxisItemOnGrid(LayoutBox&, std::pair<size_t, size_t>& autoPlacementCursor);
@@ -156,7 +157,7 @@
     template <TrackSizeComputationPhase> void distributeSpaceToTracks(Vector<GridTrack*>&, const Vector<GridTrack*>* growBeyondGrowthLimitsTracks, GridSizingData&, LayoutUnit& availableLogicalSpace);
 
     typedef HashSet<size_t, DefaultHash<size_t>::Hash, WTF::UnsignedWithZeroKeyHashTraits<size_t>> TrackIndexSet;
-    double computeFlexFactorUnitSize(const Vector<GridTrack>&, GridTrackSizingDirection, double flexFactorSum, LayoutUnit& leftOverSpace, const Vector<size_t, 8>& flexibleTracksIndexes, PassOwnPtr<TrackIndexSet> tracksToTreatAsInflexible = nullptr) const;
+    double computeFlexFactorUnitSize(const Vector<GridTrack>&, GridTrackSizingDirection, double flexFactorSum, LayoutUnit& leftOverSpace, const Vector<size_t, 8>& flexibleTracksIndexes, std::unique_ptr<TrackIndexSet> tracksToTreatAsInflexible = nullptr) const;
     double findFlexFactorUnitSize(const Vector<GridTrack>&, const GridSpan&, GridTrackSizingDirection, LayoutUnit leftOverSpace) const;
 
     const GridTrackSize& rawGridTrackSize(GridTrackSizingDirection, size_t) const;
diff --git a/third_party/WebKit/Source/core/layout/LayoutObject.cpp b/third_party/WebKit/Source/core/layout/LayoutObject.cpp
index 8263e0f5..c5b4180 100644
--- a/third_party/WebKit/Source/core/layout/LayoutObject.cpp
+++ b/third_party/WebKit/Source/core/layout/LayoutObject.cpp
@@ -80,6 +80,7 @@
 #include "wtf/text/StringBuilder.h"
 #include "wtf/text/WTFString.h"
 #include <algorithm>
+#include <memory>
 #ifndef NDEBUG
 #include <stdio.h>
 #endif
@@ -137,7 +138,7 @@
 
 // The pointer to paint properties is implemented as a global hash map temporarily,
 // to avoid memory regression during the transition towards SPv2.
-typedef HashMap<const LayoutObject*, OwnPtr<ObjectPaintProperties>> ObjectPaintPropertiesMap;
+typedef HashMap<const LayoutObject*, std::unique_ptr<ObjectPaintProperties>> ObjectPaintPropertiesMap;
 static ObjectPaintPropertiesMap& objectPaintPropertiesMap()
 {
     DEFINE_STATIC_LOCAL(ObjectPaintPropertiesMap, staticObjectPaintPropertiesMap, ());
@@ -1170,9 +1171,9 @@
     value->endDictionary();
 }
 
-static PassOwnPtr<TracedValue> jsonObjectForPaintInvalidationInfo(const LayoutRect& rect, const String& invalidationReason)
+static std::unique_ptr<TracedValue> jsonObjectForPaintInvalidationInfo(const LayoutRect& rect, const String& invalidationReason)
 {
-    OwnPtr<TracedValue> value = TracedValue::create();
+    std::unique_ptr<TracedValue> value = TracedValue::create();
     addJsonObjectForRect(value.get(), "rect", rect);
     value->setString("invalidation_reason", invalidationReason);
     return value;
@@ -1327,9 +1328,9 @@
     }
 }
 
-static PassOwnPtr<TracedValue> jsonObjectForOldAndNewRects(const LayoutRect& oldRect, const LayoutPoint& oldLocation, const LayoutRect& newRect, const LayoutPoint& newLocation)
+static std::unique_ptr<TracedValue> jsonObjectForOldAndNewRects(const LayoutRect& oldRect, const LayoutPoint& oldLocation, const LayoutRect& newRect, const LayoutPoint& newLocation)
 {
-    OwnPtr<TracedValue> value = TracedValue::create();
+    std::unique_ptr<TracedValue> value = TracedValue::create();
     addJsonObjectForRect(value.get(), "oldRect", oldRect);
     addJsonObjectForPoint(value.get(), "oldLocation", oldLocation);
     addJsonObjectForRect(value.get(), "newRect", newRect);
diff --git a/third_party/WebKit/Source/core/layout/LayoutTable.cpp b/third_party/WebKit/Source/core/layout/LayoutTable.cpp
index 8d24d01..00f82f5 100644
--- a/third_party/WebKit/Source/core/layout/LayoutTable.cpp
+++ b/third_party/WebKit/Source/core/layout/LayoutTable.cpp
@@ -44,6 +44,7 @@
 #include "core/paint/PaintLayer.h"
 #include "core/paint/TablePainter.h"
 #include "core/style/StyleInheritedData.h"
+#include "wtf/PtrUtil.h"
 
 namespace blink {
 
@@ -91,9 +92,9 @@
         // According to the CSS2 spec, you only use fixed table layout if an
         // explicit width is specified on the table.  Auto width implies auto table layout.
         if (style()->isFixedTableLayout())
-            m_tableLayout = adoptPtr(new TableLayoutAlgorithmFixed(this));
+            m_tableLayout = wrapUnique(new TableLayoutAlgorithmFixed(this));
         else
-            m_tableLayout = adoptPtr(new TableLayoutAlgorithmAuto(this));
+            m_tableLayout = wrapUnique(new TableLayoutAlgorithmAuto(this));
     }
 
     // If border was changed, invalidate collapsed borders cache.
diff --git a/third_party/WebKit/Source/core/layout/LayoutTable.h b/third_party/WebKit/Source/core/layout/LayoutTable.h
index b969dc6..2c0f062 100644
--- a/third_party/WebKit/Source/core/layout/LayoutTable.h
+++ b/third_party/WebKit/Source/core/layout/LayoutTable.h
@@ -30,6 +30,7 @@
 #include "core/layout/LayoutBlock.h"
 #include "core/style/CollapsedBorderValue.h"
 #include "wtf/Vector.h"
+#include <memory>
 
 namespace blink {
 
@@ -474,7 +475,7 @@
     //
     // As the algorithm is dependent on the style, this field is nullptr before
     // the first style is applied in styleDidChange().
-    OwnPtr<TableLayoutAlgorithm> m_tableLayout;
+    std::unique_ptr<TableLayoutAlgorithm> m_tableLayout;
 
     // A sorted list of all unique border values that we want to paint.
     //
diff --git a/third_party/WebKit/Source/core/layout/LayoutTableCell.cpp b/third_party/WebKit/Source/core/layout/LayoutTableCell.cpp
index 9adadc04..e6fa743 100644
--- a/third_party/WebKit/Source/core/layout/LayoutTableCell.cpp
+++ b/third_party/WebKit/Source/core/layout/LayoutTableCell.cpp
@@ -34,6 +34,7 @@
 #include "core/style/CollapsedBorderValue.h"
 #include "platform/geometry/FloatQuad.h"
 #include "platform/geometry/TransformState.h"
+#include "wtf/PtrUtil.h"
 
 namespace blink {
 
@@ -922,7 +923,7 @@
         m_collapsedBorderValues = nullptr;
     } else if (!m_collapsedBorderValues) {
         changed = true;
-        m_collapsedBorderValues = adoptPtr(new CollapsedBorderValues(newValues));
+        m_collapsedBorderValues = wrapUnique(new CollapsedBorderValues(newValues));
     } else {
         // We check visuallyEquals so that the table cell is invalidated only if a changed
         // collapsed border is visible in the first place.
diff --git a/third_party/WebKit/Source/core/layout/LayoutTableCell.h b/third_party/WebKit/Source/core/layout/LayoutTableCell.h
index 023f92db..dba89847 100644
--- a/third_party/WebKit/Source/core/layout/LayoutTableCell.h
+++ b/third_party/WebKit/Source/core/layout/LayoutTableCell.h
@@ -30,6 +30,7 @@
 #include "core/layout/LayoutTableRow.h"
 #include "core/layout/LayoutTableSection.h"
 #include "platform/LengthFunctions.h"
+#include <memory>
 
 namespace blink {
 
@@ -366,7 +367,7 @@
     int m_intrinsicPaddingBefore;
     int m_intrinsicPaddingAfter;
 
-    OwnPtr<CollapsedBorderValues> m_collapsedBorderValues;
+    std::unique_ptr<CollapsedBorderValues> m_collapsedBorderValues;
 };
 
 DEFINE_LAYOUT_OBJECT_TYPE_CASTS(LayoutTableCell, isTableCell());
diff --git a/third_party/WebKit/Source/core/layout/LayoutTestHelper.h b/third_party/WebKit/Source/core/layout/LayoutTestHelper.h
index a6c0c6c..189a8d87d 100644
--- a/third_party/WebKit/Source/core/layout/LayoutTestHelper.h
+++ b/third_party/WebKit/Source/core/layout/LayoutTestHelper.h
@@ -13,8 +13,8 @@
 #include "core/loader/EmptyClients.h"
 #include "core/testing/DummyPageHolder.h"
 #include "wtf/Allocator.h"
-#include "wtf/OwnPtr.h"
 #include <gtest/gtest.h>
+#include <memory>
 
 namespace blink {
 
@@ -60,7 +60,7 @@
     Persistent<LocalFrame> m_subframe;
     Persistent<FrameLoaderClient> m_frameLoaderClient;
     Persistent<FrameLoaderClient> m_childFrameLoaderClient;
-    OwnPtr<DummyPageHolder> m_pageHolder;
+    std::unique_ptr<DummyPageHolder> m_pageHolder;
 };
 
 class SingleChildFrameLoaderClient final : public EmptyFrameLoaderClient {
diff --git a/third_party/WebKit/Source/core/layout/LayoutThemeTest.cpp b/third_party/WebKit/Source/core/layout/LayoutThemeTest.cpp
index 240020a..f3039dfa 100644
--- a/third_party/WebKit/Source/core/layout/LayoutThemeTest.cpp
+++ b/third_party/WebKit/Source/core/layout/LayoutThemeTest.cpp
@@ -14,6 +14,7 @@
 #include "core/testing/DummyPageHolder.h"
 #include "platform/graphics/Color.h"
 #include "testing/gtest/include/gtest/gtest.h"
+#include <memory>
 
 namespace blink {
 
@@ -24,7 +25,7 @@
     void setHtmlInnerHTML(const char* htmlContent);
 
 private:
-    OwnPtr<DummyPageHolder> m_dummyPageHolder;
+    std::unique_ptr<DummyPageHolder> m_dummyPageHolder;
     Persistent<HTMLDocument> m_document;
 };
 
diff --git a/third_party/WebKit/Source/core/layout/LayoutView.cpp b/third_party/WebKit/Source/core/layout/LayoutView.cpp
index 4bbb895..f71ba49 100644
--- a/third_party/WebKit/Source/core/layout/LayoutView.cpp
+++ b/third_party/WebKit/Source/core/layout/LayoutView.cpp
@@ -44,6 +44,7 @@
 #include "platform/geometry/TransformState.h"
 #include "platform/graphics/paint/PaintController.h"
 #include "public/platform/Platform.h"
+#include "wtf/PtrUtil.h"
 #include <inttypes.h>
 
 namespace blink {
@@ -243,7 +244,7 @@
     if (pageLogicalHeight() && shouldUsePrintingLayout()) {
         m_minPreferredLogicalWidth = m_maxPreferredLogicalWidth = logicalWidth();
         if (!m_fragmentationContext)
-            m_fragmentationContext = adoptPtr(new ViewFragmentationContext(*this));
+            m_fragmentationContext = wrapUnique(new ViewFragmentationContext(*this));
     } else if (m_fragmentationContext) {
         m_fragmentationContext.reset();
     }
@@ -952,7 +953,7 @@
 PaintLayerCompositor* LayoutView::compositor()
 {
     if (!m_compositor)
-        m_compositor = adoptPtr(new PaintLayerCompositor(*this));
+        m_compositor = wrapUnique(new PaintLayerCompositor(*this));
 
     return m_compositor.get();
 }
diff --git a/third_party/WebKit/Source/core/layout/LayoutView.h b/third_party/WebKit/Source/core/layout/LayoutView.h
index 0441c81..6a123a2 100644
--- a/third_party/WebKit/Source/core/layout/LayoutView.h
+++ b/third_party/WebKit/Source/core/layout/LayoutView.h
@@ -32,7 +32,7 @@
 #include "platform/RuntimeEnabledFeatures.h"
 #include "platform/heap/Handle.h"
 #include "platform/scroll/ScrollableArea.h"
-#include "wtf/OwnPtr.h"
+#include <memory>
 
 namespace blink {
 
@@ -262,8 +262,8 @@
     // See the class comment for more details.
     LayoutState* m_layoutState;
 
-    OwnPtr<ViewFragmentationContext> m_fragmentationContext;
-    OwnPtr<PaintLayerCompositor> m_compositor;
+    std::unique_ptr<ViewFragmentationContext> m_fragmentationContext;
+    std::unique_ptr<PaintLayerCompositor> m_compositor;
     RefPtr<IntervalArena> m_intervalArena;
 
     LayoutQuote* m_layoutQuoteHead;
diff --git a/third_party/WebKit/Source/core/layout/TextAutosizer.cpp b/third_party/WebKit/Source/core/layout/TextAutosizer.cpp
index 9ce514ca..3f6ee8e 100644
--- a/third_party/WebKit/Source/core/layout/TextAutosizer.cpp
+++ b/third_party/WebKit/Source/core/layout/TextAutosizer.cpp
@@ -47,6 +47,8 @@
 #include "core/layout/api/LayoutAPIShim.h"
 #include "core/layout/api/LayoutViewItem.h"
 #include "core/page/Page.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 #ifdef AUTOSIZING_DOM_DEBUG_INFO
 #include "core/dom/ExecutionContextTask.h"
@@ -82,7 +84,7 @@
         node = toDocument(node)->documentElement();
     if (!node->isElementNode())
         return;
-    node->document().postTask(adoptPtr(new WriteDebugInfoTask(toElement(node), output)));
+    node->document().postTask(wrapUnique(new WriteDebugInfoTask(toElement(node), output)));
 }
 
 void TextAutosizer::writeClusterDebugInfo(Cluster* cluster)
@@ -361,7 +363,7 @@
         m_blocksThatHaveBegunLayout.add(block);
 #endif
         if (Cluster* cluster = maybeCreateCluster(block))
-            m_clusterStack.append(adoptPtr(cluster));
+            m_clusterStack.append(wrapUnique(cluster));
     }
 }
 
@@ -375,7 +377,7 @@
     ASSERT(!m_clusterStack.isEmpty() || block->isLayoutView());
 
     if (Cluster* cluster = maybeCreateCluster(block))
-        m_clusterStack.append(adoptPtr(cluster));
+        m_clusterStack.append(wrapUnique(cluster));
 
     ASSERT(!m_clusterStack.isEmpty());
 
@@ -765,12 +767,12 @@
     if (!roots || roots->size() < 2 || !roots->contains(block))
         return nullptr;
 
-    SuperclusterMap::AddResult addResult = m_superclusters.add(fingerprint, PassOwnPtr<Supercluster>());
+    SuperclusterMap::AddResult addResult = m_superclusters.add(fingerprint, std::unique_ptr<Supercluster>());
     if (!addResult.isNewEntry)
         return addResult.storedValue->value.get();
 
     Supercluster* supercluster = new Supercluster(roots);
-    addResult.storedValue->value = adoptPtr(supercluster);
+    addResult.storedValue->value = wrapUnique(supercluster);
     return supercluster;
 }
 
@@ -1093,9 +1095,9 @@
 {
     add(block, fingerprint);
 
-    ReverseFingerprintMap::AddResult addResult = m_blocksForFingerprint.add(fingerprint, PassOwnPtr<BlockSet>());
+    ReverseFingerprintMap::AddResult addResult = m_blocksForFingerprint.add(fingerprint, std::unique_ptr<BlockSet>());
     if (addResult.isNewEntry)
-        addResult.storedValue->value = adoptPtr(new BlockSet);
+        addResult.storedValue->value = wrapUnique(new BlockSet);
     addResult.storedValue->value->add(block);
 #if ENABLE(ASSERT)
     assertMapsAreConsistent();
diff --git a/third_party/WebKit/Source/core/layout/TextAutosizer.h b/third_party/WebKit/Source/core/layout/TextAutosizer.h
index 4f3a2a6..c680135 100644
--- a/third_party/WebKit/Source/core/layout/TextAutosizer.h
+++ b/third_party/WebKit/Source/core/layout/TextAutosizer.h
@@ -36,8 +36,7 @@
 #include "wtf/HashMap.h"
 #include "wtf/HashSet.h"
 #include "wtf/Noncopyable.h"
-#include "wtf/OwnPtr.h"
-
+#include <memory>
 #include <unicode/uchar.h>
 
 namespace blink {
@@ -207,8 +206,8 @@
         "sizeof(FingerprintSourceData) must be a multiple of UChar");
 
     typedef unsigned Fingerprint;
-    typedef HashMap<Fingerprint, OwnPtr<Supercluster>> SuperclusterMap;
-    typedef Vector<OwnPtr<Cluster>> ClusterStack;
+    typedef HashMap<Fingerprint, std::unique_ptr<Supercluster>> SuperclusterMap;
+    typedef Vector<std::unique_ptr<Cluster>> ClusterStack;
 
     // Fingerprints are computed during style recalc, for (some subset of)
     // blocks that will become cluster roots.
@@ -224,7 +223,7 @@
         bool hasFingerprints() const { return !m_fingerprints.isEmpty(); }
     private:
         typedef HashMap<const LayoutObject*, Fingerprint> FingerprintMap;
-        typedef HashMap<Fingerprint, OwnPtr<BlockSet>> ReverseFingerprintMap;
+        typedef HashMap<Fingerprint, std::unique_ptr<BlockSet>> ReverseFingerprintMap;
 
         FingerprintMap m_fingerprints;
         ReverseFingerprintMap m_blocksForFingerprint;
diff --git a/third_party/WebKit/Source/core/layout/TracedLayoutObject.cpp b/third_party/WebKit/Source/core/layout/TracedLayoutObject.cpp
index fddb6c4..efc34549d 100644
--- a/third_party/WebKit/Source/core/layout/TracedLayoutObject.cpp
+++ b/third_party/WebKit/Source/core/layout/TracedLayoutObject.cpp
@@ -9,6 +9,7 @@
 #include "core/layout/LayoutText.h"
 #include "core/layout/LayoutView.h"
 #include <inttypes.h>
+#include <memory>
 
 namespace blink {
 
@@ -99,9 +100,9 @@
 
 } // namespace
 
-PassOwnPtr<TracedValue> TracedLayoutObject::create(const LayoutView& view, bool traceGeometry)
+std::unique_ptr<TracedValue> TracedLayoutObject::create(const LayoutView& view, bool traceGeometry)
 {
-    OwnPtr<TracedValue> tracedValue = TracedValue::create();
+    std::unique_ptr<TracedValue> tracedValue = TracedValue::create();
     dumpToTracedValue(view, traceGeometry, tracedValue.get());
     return tracedValue;
 }
diff --git a/third_party/WebKit/Source/core/layout/TracedLayoutObject.h b/third_party/WebKit/Source/core/layout/TracedLayoutObject.h
index 4f03b9b..085b558b 100644
--- a/third_party/WebKit/Source/core/layout/TracedLayoutObject.h
+++ b/third_party/WebKit/Source/core/layout/TracedLayoutObject.h
@@ -6,6 +6,7 @@
 #define TracedLayoutObject_h
 
 #include "platform/TracedValue.h"
+#include <memory>
 
 namespace blink {
 
@@ -13,7 +14,7 @@
 
 class TracedLayoutObject {
 public:
-    static PassOwnPtr<TracedValue> create(const LayoutView&, bool traceGeometry = true);
+    static std::unique_ptr<TracedValue> create(const LayoutView&, bool traceGeometry = true);
 };
 
 } // namespace blink
diff --git a/third_party/WebKit/Source/core/layout/api/LineLayoutSVGTextPath.h b/third_party/WebKit/Source/core/layout/api/LineLayoutSVGTextPath.h
index a7973d8..a9a7076 100644
--- a/third_party/WebKit/Source/core/layout/api/LineLayoutSVGTextPath.h
+++ b/third_party/WebKit/Source/core/layout/api/LineLayoutSVGTextPath.h
@@ -7,6 +7,7 @@
 
 #include "core/layout/api/LineLayoutSVGInline.h"
 #include "core/layout/svg/LayoutSVGTextPath.h"
+#include <memory>
 
 namespace blink {
 
@@ -27,7 +28,7 @@
 
     LineLayoutSVGTextPath() { }
 
-    PassOwnPtr<PathPositionMapper> layoutPath() const
+    std::unique_ptr<PathPositionMapper> layoutPath() const
     {
         return toSVGTextPath()->layoutPath();
     }
diff --git a/third_party/WebKit/Source/core/layout/compositing/CompositedLayerMapping.cpp b/third_party/WebKit/Source/core/layout/compositing/CompositedLayerMapping.cpp
index 78d921f..315a6b0 100644
--- a/third_party/WebKit/Source/core/layout/compositing/CompositedLayerMapping.cpp
+++ b/third_party/WebKit/Source/core/layout/compositing/CompositedLayerMapping.cpp
@@ -70,6 +70,7 @@
 #include "platform/graphics/paint/TransformDisplayItem.h"
 #include "wtf/CurrentTime.h"
 #include "wtf/text/StringBuilder.h"
+#include <memory>
 
 namespace blink {
 
@@ -221,9 +222,9 @@
     destroyGraphicsLayers();
 }
 
-PassOwnPtr<GraphicsLayer> CompositedLayerMapping::createGraphicsLayer(CompositingReasons reasons, SquashingDisallowedReasons squashingDisallowedReasons)
+std::unique_ptr<GraphicsLayer> CompositedLayerMapping::createGraphicsLayer(CompositingReasons reasons, SquashingDisallowedReasons squashingDisallowedReasons)
 {
-    OwnPtr<GraphicsLayer> graphicsLayer = GraphicsLayer::create(this);
+    std::unique_ptr<GraphicsLayer> graphicsLayer = GraphicsLayer::create(this);
 
     graphicsLayer->setCompositingReasons(reasons);
     graphicsLayer->setSquashingDisallowedReasons(squashingDisallowedReasons);
@@ -501,7 +502,7 @@
 
     updateChildClippingMaskLayer(needsChildClippingMask);
 
-    if (layerToApplyChildClippingMask == m_graphicsLayer) {
+    if (layerToApplyChildClippingMask == m_graphicsLayer.get()) {
         if (m_graphicsLayer->maskLayer() != m_childClippingMaskLayer.get()) {
             m_graphicsLayer->setMaskLayer(m_childClippingMaskLayer.get());
             maskLayerChanged = true;
@@ -1329,7 +1330,7 @@
     m_backgroundLayerPaintsFixedRootBackground = backgroundLayerPaintsFixedRootBackground;
 }
 
-bool CompositedLayerMapping::toggleScrollbarLayerIfNeeded(OwnPtr<GraphicsLayer>& layer, bool needsLayer, CompositingReasons reason)
+bool CompositedLayerMapping::toggleScrollbarLayerIfNeeded(std::unique_ptr<GraphicsLayer>& layer, bool needsLayer, CompositingReasons reason)
 {
     if (needsLayer == !!layer)
         return false;
@@ -2249,7 +2250,7 @@
 
     IntSize offsetFromAnchorLayoutObject;
     const LayoutBoxModelObject* anchorLayoutObject;
-    if (graphicsLayer == m_squashingLayer) {
+    if (graphicsLayer == m_squashingLayer.get()) {
         // TODO(chrishtr): this is a speculative fix for crbug.com/561306. However, it should never be the case that
         // m_squashingLayer exists yet m_squashedLayers.size() == 0. There must be a bug elsewhere.
         if (m_squashedLayers.size() == 0)
@@ -2260,7 +2261,7 @@
         anchorLayoutObject = m_squashedLayers[0].paintLayer->layoutObject();
         offsetFromAnchorLayoutObject = m_squashedLayers[0].offsetFromLayoutObject;
     } else {
-        ASSERT(graphicsLayer == m_graphicsLayer || graphicsLayer == m_scrollingContentsLayer);
+        ASSERT(graphicsLayer == m_graphicsLayer.get() || graphicsLayer == m_scrollingContentsLayer.get());
         anchorLayoutObject = m_owningLayer.layoutObject();
         offsetFromAnchorLayoutObject = graphicsLayer->offsetFromLayoutObject();
         adjustForCompositedScrolling(graphicsLayer, offsetFromAnchorLayoutObject);
@@ -2345,7 +2346,7 @@
     // Paint the whole layer if "mainFrameClipsContent" is false, meaning that WebPreferences::record_whole_document is true.
     bool shouldPaintWholePage = !m_owningLayer.layoutObject()->document().settings()->mainFrameClipsContent();
     if (shouldPaintWholePage
-        || (graphicsLayer != m_graphicsLayer && graphicsLayer != m_squashingLayer && graphicsLayer != m_squashingLayer && graphicsLayer != m_scrollingContentsLayer))
+        || (graphicsLayer != m_graphicsLayer.get() && graphicsLayer != m_squashingLayer.get() && graphicsLayer != m_squashingLayer.get() && graphicsLayer != m_scrollingContentsLayer.get()))
         return wholeLayerRect;
 
     IntRect newInterestRect = recomputeInterestRect(graphicsLayer);
@@ -2404,7 +2405,7 @@
     if (graphicsLayerPaintingPhase & GraphicsLayerPaintCompositedScroll)
         paintLayerFlags |= PaintLayerPaintingCompositingScrollingPhase;
 
-    if (graphicsLayer == m_backgroundLayer)
+    if (graphicsLayer == m_backgroundLayer.get())
         paintLayerFlags |= (PaintLayerPaintingRootBackgroundOnly | PaintLayerPaintingCompositingForegroundPhase); // Need PaintLayerPaintingCompositingForegroundPhase to walk child layers.
     else if (compositor()->fixedRootBackgroundLayer())
         paintLayerFlags |= PaintLayerPaintingSkipRootBackground;
diff --git a/third_party/WebKit/Source/core/layout/compositing/CompositedLayerMapping.h b/third_party/WebKit/Source/core/layout/compositing/CompositedLayerMapping.h
index ffe6c9c..93154db8f 100644
--- a/third_party/WebKit/Source/core/layout/compositing/CompositedLayerMapping.h
+++ b/third_party/WebKit/Source/core/layout/compositing/CompositedLayerMapping.h
@@ -33,6 +33,7 @@
 #include "platform/graphics/GraphicsLayer.h"
 #include "platform/graphics/GraphicsLayerClient.h"
 #include "wtf/Allocator.h"
+#include <memory>
 
 namespace blink {
 
@@ -248,8 +249,8 @@
     void createPrimaryGraphicsLayer();
     void destroyGraphicsLayers();
 
-    PassOwnPtr<GraphicsLayer> createGraphicsLayer(CompositingReasons, SquashingDisallowedReasons = SquashingDisallowedReasonsNone);
-    bool toggleScrollbarLayerIfNeeded(OwnPtr<GraphicsLayer>&, bool needsLayer, CompositingReasons);
+    std::unique_ptr<GraphicsLayer> createGraphicsLayer(CompositingReasons, SquashingDisallowedReasons = SquashingDisallowedReasonsNone);
+    bool toggleScrollbarLayerIfNeeded(std::unique_ptr<GraphicsLayer>&, bool needsLayer, CompositingReasons);
 
     LayoutBoxModelObject* layoutObject() const { return m_owningLayer.layoutObject(); }
     PaintLayerCompositor* compositor() const { return m_owningLayer.compositor(); }
@@ -363,18 +364,18 @@
     // In this case B is clipped by another layer that doesn't happen to be its ancestor: A.
     // So we create an ancestor clipping layer for B, [+], which ensures that B is clipped
     // as if it had been A's descendant.
-    OwnPtr<GraphicsLayer> m_ancestorClippingLayer; // Only used if we are clipped by an ancestor which is not a stacking context.
-    OwnPtr<GraphicsLayer> m_graphicsLayer;
-    OwnPtr<GraphicsLayer> m_childContainmentLayer; // Only used if we have clipping on a stacking context with compositing children.
-    OwnPtr<GraphicsLayer> m_childTransformLayer; // Only used if we have perspective.
-    OwnPtr<GraphicsLayer> m_scrollingLayer; // Only used if the layer is using composited scrolling.
-    OwnPtr<GraphicsLayer> m_scrollingContentsLayer; // Only used if the layer is using composited scrolling.
+    std::unique_ptr<GraphicsLayer> m_ancestorClippingLayer; // Only used if we are clipped by an ancestor which is not a stacking context.
+    std::unique_ptr<GraphicsLayer> m_graphicsLayer;
+    std::unique_ptr<GraphicsLayer> m_childContainmentLayer; // Only used if we have clipping on a stacking context with compositing children.
+    std::unique_ptr<GraphicsLayer> m_childTransformLayer; // Only used if we have perspective.
+    std::unique_ptr<GraphicsLayer> m_scrollingLayer; // Only used if the layer is using composited scrolling.
+    std::unique_ptr<GraphicsLayer> m_scrollingContentsLayer; // Only used if the layer is using composited scrolling.
 
     // This layer is also added to the hierarchy by the RLB, but in a different way than
     // the layers above. It's added to m_graphicsLayer as its mask layer (naturally) if
     // we have a mask, and isn't part of the typical hierarchy (it has no children).
-    OwnPtr<GraphicsLayer> m_maskLayer; // Only used if we have a mask.
-    OwnPtr<GraphicsLayer> m_childClippingMaskLayer; // Only used if we have to clip child layers or accelerated contents with border radius or clip-path.
+    std::unique_ptr<GraphicsLayer> m_maskLayer; // Only used if we have a mask.
+    std::unique_ptr<GraphicsLayer> m_childClippingMaskLayer; // Only used if we have to clip child layers or accelerated contents with border radius or clip-path.
 
     // There are two other (optional) layers whose painting is managed by the CompositedLayerMapping,
     // but whose position in the hierarchy is maintained by the PaintLayerCompositor. These
@@ -398,17 +399,17 @@
     //
     // With the hierarchy set up like this, the root content layer is able to scroll without affecting
     // the background layer (or paint invalidation).
-    OwnPtr<GraphicsLayer> m_foregroundLayer; // Only used in cases where we need to draw the foreground separately.
-    OwnPtr<GraphicsLayer> m_backgroundLayer; // Only used in cases where we need to draw the background separately.
+    std::unique_ptr<GraphicsLayer> m_foregroundLayer; // Only used in cases where we need to draw the foreground separately.
+    std::unique_ptr<GraphicsLayer> m_backgroundLayer; // Only used in cases where we need to draw the background separately.
 
-    OwnPtr<GraphicsLayer> m_layerForHorizontalScrollbar;
-    OwnPtr<GraphicsLayer> m_layerForVerticalScrollbar;
-    OwnPtr<GraphicsLayer> m_layerForScrollCorner;
+    std::unique_ptr<GraphicsLayer> m_layerForHorizontalScrollbar;
+    std::unique_ptr<GraphicsLayer> m_layerForVerticalScrollbar;
+    std::unique_ptr<GraphicsLayer> m_layerForScrollCorner;
 
     // This layer contains the scrollbar and scroll corner layers and clips them to the border box
     // bounds of our LayoutObject. It is usually added to m_graphicsLayer, but may be reparented by
     // GraphicsLayerTreeBuilder to ensure that scrollbars appear above scrolling content.
-    OwnPtr<GraphicsLayer> m_overflowControlsHostLayer;
+    std::unique_ptr<GraphicsLayer> m_overflowControlsHostLayer;
 
     // The reparented overflow controls sometimes need to be clipped by a non-ancestor. In just the same
     // way we need an ancestor clipping layer to clip this CLM's internal hierarchy, we add another layer
@@ -416,7 +417,7 @@
     // would require manually intersecting their clips, and shifting the overflow controls to compensate
     // for this clip's offset. By using a separate layer, the overflow controls can remain ignorant of
     // ancestor clipping.
-    OwnPtr<GraphicsLayer> m_overflowControlsAncestorClippingLayer;
+    std::unique_ptr<GraphicsLayer> m_overflowControlsAncestorClippingLayer;
 
     // A squashing CLM has two possible squashing-related structures.
     //
@@ -434,8 +435,8 @@
     //
     // Stacking children of a squashed layer receive graphics layers that are parented to the compositd ancestor of the
     // squashed layer (i.e. nearest enclosing composited layer that is not squashed).
-    OwnPtr<GraphicsLayer> m_squashingContainmentLayer; // Only used if any squashed layers exist and m_squashingContainmentLayer is not present, to contain the squashed layers as siblings to the rest of the GraphicsLayer tree chunk.
-    OwnPtr<GraphicsLayer> m_squashingLayer; // Only used if any squashed layers exist, this is the backing that squashed layers paint into.
+    std::unique_ptr<GraphicsLayer> m_squashingContainmentLayer; // Only used if any squashed layers exist and m_squashingContainmentLayer is not present, to contain the squashed layers as siblings to the rest of the GraphicsLayer tree chunk.
+    std::unique_ptr<GraphicsLayer> m_squashingLayer; // Only used if any squashed layers exist, this is the backing that squashed layers paint into.
     Vector<GraphicsLayerPaintInfo> m_squashedLayers;
     LayoutPoint m_squashingLayerOffsetFromTransformedAncestor;
 
diff --git a/third_party/WebKit/Source/core/layout/compositing/PaintLayerCompositor.h b/third_party/WebKit/Source/core/layout/compositing/PaintLayerCompositor.h
index 0ccd54c..95cf7561 100644
--- a/third_party/WebKit/Source/core/layout/compositing/PaintLayerCompositor.h
+++ b/third_party/WebKit/Source/core/layout/compositing/PaintLayerCompositor.h
@@ -30,6 +30,7 @@
 #include "core/layout/compositing/CompositingReasonFinder.h"
 #include "platform/graphics/GraphicsLayerClient.h"
 #include "wtf/HashMap.h"
+#include <memory>
 
 namespace blink {
 
@@ -219,7 +220,7 @@
     Scrollbar* graphicsLayerToScrollbar(const GraphicsLayer*) const;
 
     LayoutView& m_layoutView;
-    OwnPtr<GraphicsLayer> m_rootContentLayer;
+    std::unique_ptr<GraphicsLayer> m_rootContentLayer;
 
     CompositingReasonFinder m_compositingReasonFinder;
 
@@ -244,16 +245,16 @@
     RootLayerAttachment m_rootLayerAttachment;
 
     // Enclosing container layer, which clips for iframe content
-    OwnPtr<GraphicsLayer> m_containerLayer;
-    OwnPtr<GraphicsLayer> m_scrollLayer;
+    std::unique_ptr<GraphicsLayer> m_containerLayer;
+    std::unique_ptr<GraphicsLayer> m_scrollLayer;
 
     // Enclosing layer for overflow controls and the clipping layer
-    OwnPtr<GraphicsLayer> m_overflowControlsHostLayer;
+    std::unique_ptr<GraphicsLayer> m_overflowControlsHostLayer;
 
     // Layers for overflow controls
-    OwnPtr<GraphicsLayer> m_layerForHorizontalScrollbar;
-    OwnPtr<GraphicsLayer> m_layerForVerticalScrollbar;
-    OwnPtr<GraphicsLayer> m_layerForScrollCorner;
+    std::unique_ptr<GraphicsLayer> m_layerForHorizontalScrollbar;
+    std::unique_ptr<GraphicsLayer> m_layerForVerticalScrollbar;
+    std::unique_ptr<GraphicsLayer> m_layerForScrollCorner;
 };
 
 } // namespace blink
diff --git a/third_party/WebKit/Source/core/layout/line/InlineFlowBox.cpp b/third_party/WebKit/Source/core/layout/line/InlineFlowBox.cpp
index 1767ac8..13a0d46 100644
--- a/third_party/WebKit/Source/core/layout/line/InlineFlowBox.cpp
+++ b/third_party/WebKit/Source/core/layout/line/InlineFlowBox.cpp
@@ -36,6 +36,7 @@
 #include "core/paint/InlineFlowBoxPainter.h"
 #include "core/style/ShadowList.h"
 #include "platform/fonts/Font.h"
+#include "wtf/PtrUtil.h"
 #include <algorithm>
 #include <math.h>
 
@@ -952,7 +953,7 @@
         return;
 
     if (!m_overflow)
-        m_overflow = adoptPtr(new SimpleOverflowModel(frameBox, frameBox));
+        m_overflow = wrapUnique(new SimpleOverflowModel(frameBox, frameBox));
 
     m_overflow->setLayoutOverflow(rect);
 }
@@ -964,7 +965,7 @@
         return;
 
     if (!m_overflow)
-        m_overflow = adoptPtr(new SimpleOverflowModel(frameBox, frameBox));
+        m_overflow = wrapUnique(new SimpleOverflowModel(frameBox, frameBox));
 
     m_overflow->setVisualOverflow(rect);
 }
diff --git a/third_party/WebKit/Source/core/layout/line/InlineFlowBox.h b/third_party/WebKit/Source/core/layout/line/InlineFlowBox.h
index d1dd6e3..2b55056 100644
--- a/third_party/WebKit/Source/core/layout/line/InlineFlowBox.h
+++ b/third_party/WebKit/Source/core/layout/line/InlineFlowBox.h
@@ -25,6 +25,7 @@
 #include "core/layout/api/SelectionState.h"
 #include "core/layout/line/InlineBox.h"
 #include "core/style/ShadowData.h"
+#include <memory>
 
 namespace blink {
 
@@ -310,7 +311,7 @@
     void setOverflowFromLogicalRects(const LayoutRect& logicalLayoutOverflow, const LayoutRect& logicalVisualOverflow, LayoutUnit lineTop, LayoutUnit lineBottom);
 
 protected:
-    OwnPtr<SimpleOverflowModel> m_overflow;
+    std::unique_ptr<SimpleOverflowModel> m_overflow;
 
     bool isInlineFlowBox() const final { return true; }
 
diff --git a/third_party/WebKit/Source/core/layout/line/RootInlineBox.h b/third_party/WebKit/Source/core/layout/line/RootInlineBox.h
index 09df02a..538b0def 100644
--- a/third_party/WebKit/Source/core/layout/line/RootInlineBox.h
+++ b/third_party/WebKit/Source/core/layout/line/RootInlineBox.h
@@ -25,6 +25,8 @@
 #include "core/layout/api/SelectionState.h"
 #include "core/layout/line/InlineFlowBox.h"
 #include "platform/text/BidiContext.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
@@ -124,7 +126,7 @@
         if (m_floats)
             m_floats->append(floatingBox);
         else
-            m_floats= adoptPtr(new Vector<LayoutBox*>(1, floatingBox));
+            m_floats= wrapUnique(new Vector<LayoutBox*>(1, floatingBox));
     }
 
     Vector<LayoutBox*>* floatsPtr() { ASSERT(!isDirty()); return m_floats.get(); }
@@ -182,7 +184,7 @@
 
     // Floats hanging off the line are pushed into this vector during layout. It is only
     // good for as long as the line has not been marked dirty.
-    OwnPtr<Vector<LayoutBox*>> m_floats;
+    std::unique_ptr<Vector<LayoutBox*>> m_floats;
 
     LayoutUnit m_lineTop;
     LayoutUnit m_lineBottom;
diff --git a/third_party/WebKit/Source/core/layout/shapes/BoxShapeTest.cpp b/third_party/WebKit/Source/core/layout/shapes/BoxShapeTest.cpp
index ee06118..0c707169 100644
--- a/third_party/WebKit/Source/core/layout/shapes/BoxShapeTest.cpp
+++ b/third_party/WebKit/Source/core/layout/shapes/BoxShapeTest.cpp
@@ -31,6 +31,7 @@
 
 #include "platform/geometry/FloatRoundedRect.h"
 #include "testing/gtest/include/gtest/gtest.h"
+#include <memory>
 
 namespace blink {
 
@@ -38,7 +39,7 @@
 protected:
     BoxShapeTest() { }
 
-    PassOwnPtr<Shape> createBoxShape(const FloatRoundedRect& bounds, float shapeMargin)
+    std::unique_ptr<Shape> createBoxShape(const FloatRoundedRect& bounds, float shapeMargin)
     {
         return Shape::createLayoutBoxShape(bounds, TopToBottomWritingMode, shapeMargin);
     }
@@ -73,7 +74,7 @@
  */
 TEST_F(BoxShapeTest, zeroRadii)
 {
-    OwnPtr<Shape> shape = createBoxShape(FloatRoundedRect(0, 0, 100, 50), 10);
+    std::unique_ptr<Shape> shape = createBoxShape(FloatRoundedRect(0, 0, 100, 50), 10);
     EXPECT_FALSE(shape->isEmpty());
 
     EXPECT_EQ(LayoutRect(-10, -10, 120, 70), shape->shapeMarginLogicalBoundingBox());
@@ -118,7 +119,7 @@
 TEST_F(BoxShapeTest, getIntervals)
 {
     const FloatRoundedRect::Radii cornerRadii(FloatSize(10, 15), FloatSize(10, 20), FloatSize(25, 15), FloatSize(20, 30));
-    OwnPtr<Shape> shape = createBoxShape(FloatRoundedRect(IntRect(0, 0, 100, 100), cornerRadii), 0);
+    std::unique_ptr<Shape> shape = createBoxShape(FloatRoundedRect(IntRect(0, 0, 100, 100), cornerRadii), 0);
     EXPECT_FALSE(shape->isEmpty());
 
     EXPECT_EQ(LayoutRect(0, 0, 100, 100), shape->shapeMarginLogicalBoundingBox());
diff --git a/third_party/WebKit/Source/core/layout/shapes/PolygonShape.h b/third_party/WebKit/Source/core/layout/shapes/PolygonShape.h
index 62dd4a6..f238812 100644
--- a/third_party/WebKit/Source/core/layout/shapes/PolygonShape.h
+++ b/third_party/WebKit/Source/core/layout/shapes/PolygonShape.h
@@ -33,6 +33,7 @@
 #include "core/layout/shapes/Shape.h"
 #include "core/layout/shapes/ShapeInterval.h"
 #include "platform/geometry/FloatPolygon.h"
+#include <memory>
 
 namespace blink {
 
@@ -61,7 +62,7 @@
 class PolygonShape final : public Shape {
     WTF_MAKE_NONCOPYABLE(PolygonShape);
 public:
-    PolygonShape(PassOwnPtr<Vector<FloatPoint>> vertices, WindRule fillRule)
+    PolygonShape(std::unique_ptr<Vector<FloatPoint>> vertices, WindRule fillRule)
         : Shape()
         , m_polygon(std::move(vertices), fillRule)
     {
diff --git a/third_party/WebKit/Source/core/layout/shapes/RasterShape.cpp b/third_party/WebKit/Source/core/layout/shapes/RasterShape.cpp
index a1c420632..a4a1cc3b 100644
--- a/third_party/WebKit/Source/core/layout/shapes/RasterShape.cpp
+++ b/third_party/WebKit/Source/core/layout/shapes/RasterShape.cpp
@@ -30,6 +30,8 @@
 #include "core/layout/shapes/RasterShape.h"
 
 #include "wtf/MathExtras.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
@@ -72,10 +74,10 @@
     return IntShapeInterval(m_x1 - dx, m_x2 + dx);
 }
 
-PassOwnPtr<RasterShapeIntervals> RasterShapeIntervals::computeShapeMarginIntervals(int shapeMargin) const
+std::unique_ptr<RasterShapeIntervals> RasterShapeIntervals::computeShapeMarginIntervals(int shapeMargin) const
 {
     int marginIntervalsSize = (offset() > shapeMargin) ? size() : size() - offset() * 2 + shapeMargin * 2;
-    OwnPtr<RasterShapeIntervals> result = adoptPtr(new RasterShapeIntervals(marginIntervalsSize, std::max(shapeMargin, offset())));
+    std::unique_ptr<RasterShapeIntervals> result = wrapUnique(new RasterShapeIntervals(marginIntervalsSize, std::max(shapeMargin, offset())));
     MarginIntervalGenerator marginIntervalGenerator(shapeMargin);
 
     for (int y = bounds().y(); y < bounds().maxY(); ++y) {
diff --git a/third_party/WebKit/Source/core/layout/shapes/RasterShape.h b/third_party/WebKit/Source/core/layout/shapes/RasterShape.h
index e9d262e3..e43e9e8 100644
--- a/third_party/WebKit/Source/core/layout/shapes/RasterShape.h
+++ b/third_party/WebKit/Source/core/layout/shapes/RasterShape.h
@@ -35,6 +35,7 @@
 #include "platform/geometry/FloatRect.h"
 #include "wtf/Assertions.h"
 #include "wtf/Vector.h"
+#include <memory>
 
 namespace blink {
 
@@ -63,7 +64,7 @@
         return m_intervals[y + m_offset];
     }
 
-    PassOwnPtr<RasterShapeIntervals> computeShapeMarginIntervals(int shapeMargin) const;
+    std::unique_ptr<RasterShapeIntervals> computeShapeMarginIntervals(int shapeMargin) const;
 
     void buildBoundsPath(Path&) const;
 
@@ -81,7 +82,7 @@
 class RasterShape final : public Shape {
     WTF_MAKE_NONCOPYABLE(RasterShape);
 public:
-    RasterShape(PassOwnPtr<RasterShapeIntervals> intervals, const IntSize& marginRectSize)
+    RasterShape(std::unique_ptr<RasterShapeIntervals> intervals, const IntSize& marginRectSize)
         : m_intervals(std::move(intervals))
         , m_marginRectSize(marginRectSize)
     {
@@ -101,8 +102,8 @@
 private:
     const RasterShapeIntervals& marginIntervals() const;
 
-    OwnPtr<RasterShapeIntervals> m_intervals;
-    mutable OwnPtr<RasterShapeIntervals> m_marginIntervals;
+    std::unique_ptr<RasterShapeIntervals> m_intervals;
+    mutable std::unique_ptr<RasterShapeIntervals> m_marginIntervals;
     IntSize m_marginRectSize;
 };
 
diff --git a/third_party/WebKit/Source/core/layout/shapes/Shape.cpp b/third_party/WebKit/Source/core/layout/shapes/Shape.cpp
index 76e973ce..37602c62 100644
--- a/third_party/WebKit/Source/core/layout/shapes/Shape.cpp
+++ b/third_party/WebKit/Source/core/layout/shapes/Shape.cpp
@@ -45,32 +45,33 @@
 #include "platform/graphics/GraphicsTypes.h"
 #include "platform/graphics/ImageBuffer.h"
 #include "wtf/MathExtras.h"
-#include "wtf/OwnPtr.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/typed_arrays/ArrayBufferContents.h"
+#include <memory>
 
 namespace blink {
 
-static PassOwnPtr<Shape> createInsetShape(const FloatRoundedRect& bounds)
+static std::unique_ptr<Shape> createInsetShape(const FloatRoundedRect& bounds)
 {
     ASSERT(bounds.rect().width() >= 0 && bounds.rect().height() >= 0);
-    return adoptPtr(new BoxShape(bounds));
+    return wrapUnique(new BoxShape(bounds));
 }
 
-static PassOwnPtr<Shape> createCircleShape(const FloatPoint& center, float radius)
+static std::unique_ptr<Shape> createCircleShape(const FloatPoint& center, float radius)
 {
     ASSERT(radius >= 0);
-    return adoptPtr(new RectangleShape(FloatRect(center.x() - radius, center.y() - radius, radius*2, radius*2), FloatSize(radius, radius)));
+    return wrapUnique(new RectangleShape(FloatRect(center.x() - radius, center.y() - radius, radius*2, radius*2), FloatSize(radius, radius)));
 }
 
-static PassOwnPtr<Shape> createEllipseShape(const FloatPoint& center, const FloatSize& radii)
+static std::unique_ptr<Shape> createEllipseShape(const FloatPoint& center, const FloatSize& radii)
 {
     ASSERT(radii.width() >= 0 && radii.height() >= 0);
-    return adoptPtr(new RectangleShape(FloatRect(center.x() - radii.width(), center.y() - radii.height(), radii.width()*2, radii.height()*2), radii));
+    return wrapUnique(new RectangleShape(FloatRect(center.x() - radii.width(), center.y() - radii.height(), radii.width()*2, radii.height()*2), radii));
 }
 
-static PassOwnPtr<Shape> createPolygonShape(PassOwnPtr<Vector<FloatPoint>> vertices, WindRule fillRule)
+static std::unique_ptr<Shape> createPolygonShape(std::unique_ptr<Vector<FloatPoint>> vertices, WindRule fillRule)
 {
-    return adoptPtr(new PolygonShape(std::move(vertices), fillRule));
+    return wrapUnique(new PolygonShape(std::move(vertices), fillRule));
 }
 
 static inline FloatRect physicalRectToLogical(const FloatRect& rect, float logicalBoxHeight, WritingMode writingMode)
@@ -98,14 +99,14 @@
     return size.transposedSize();
 }
 
-PassOwnPtr<Shape> Shape::createShape(const BasicShape* basicShape, const LayoutSize& logicalBoxSize, WritingMode writingMode, float margin)
+std::unique_ptr<Shape> Shape::createShape(const BasicShape* basicShape, const LayoutSize& logicalBoxSize, WritingMode writingMode, float margin)
 {
     ASSERT(basicShape);
 
     bool horizontalWritingMode = isHorizontalWritingMode(writingMode);
     float boxWidth = horizontalWritingMode ? logicalBoxSize.width().toFloat() : logicalBoxSize.height().toFloat();
     float boxHeight = horizontalWritingMode ? logicalBoxSize.height().toFloat() : logicalBoxSize.width().toFloat();
-    OwnPtr<Shape> shape;
+    std::unique_ptr<Shape> shape;
 
     switch (basicShape->type()) {
 
@@ -135,7 +136,7 @@
         const Vector<Length>& values = polygon->values();
         size_t valuesSize = values.size();
         ASSERT(!(valuesSize % 2));
-        OwnPtr<Vector<FloatPoint>> vertices = adoptPtr(new Vector<FloatPoint>(valuesSize / 2));
+        std::unique_ptr<Vector<FloatPoint>> vertices = wrapUnique(new Vector<FloatPoint>(valuesSize / 2));
         for (unsigned i = 0; i < valuesSize; i += 2) {
             FloatPoint vertex(
                 floatValueForLength(values.at(i), boxWidth),
@@ -179,22 +180,22 @@
     return shape;
 }
 
-PassOwnPtr<Shape> Shape::createEmptyRasterShape(WritingMode writingMode, float margin)
+std::unique_ptr<Shape> Shape::createEmptyRasterShape(WritingMode writingMode, float margin)
 {
-    OwnPtr<RasterShapeIntervals> intervals = adoptPtr(new RasterShapeIntervals(0, 0));
-    OwnPtr<RasterShape> rasterShape = adoptPtr(new RasterShape(std::move(intervals), IntSize()));
+    std::unique_ptr<RasterShapeIntervals> intervals = wrapUnique(new RasterShapeIntervals(0, 0));
+    std::unique_ptr<RasterShape> rasterShape = wrapUnique(new RasterShape(std::move(intervals), IntSize()));
     rasterShape->m_writingMode = writingMode;
     rasterShape->m_margin = margin;
     return std::move(rasterShape);
 }
 
-PassOwnPtr<Shape> Shape::createRasterShape(Image* image, float threshold, const LayoutRect& imageR, const LayoutRect& marginR, WritingMode writingMode, float margin)
+std::unique_ptr<Shape> Shape::createRasterShape(Image* image, float threshold, const LayoutRect& imageR, const LayoutRect& marginR, WritingMode writingMode, float margin)
 {
     IntRect imageRect = pixelSnappedIntRect(imageR);
     IntRect marginRect = pixelSnappedIntRect(marginR);
 
-    OwnPtr<RasterShapeIntervals> intervals = adoptPtr(new RasterShapeIntervals(marginRect.height(), -marginRect.y()));
-    OwnPtr<ImageBuffer> imageBuffer = ImageBuffer::create(imageRect.size());
+    std::unique_ptr<RasterShapeIntervals> intervals = wrapUnique(new RasterShapeIntervals(marginRect.height(), -marginRect.y()));
+    std::unique_ptr<ImageBuffer> imageBuffer = ImageBuffer::create(imageRect.size());
 
     if (image && imageBuffer) {
         // FIXME: This is not totally correct but it is needed to prevent shapes
@@ -234,17 +235,17 @@
         }
     }
 
-    OwnPtr<RasterShape> rasterShape = adoptPtr(new RasterShape(std::move(intervals), marginRect.size()));
+    std::unique_ptr<RasterShape> rasterShape = wrapUnique(new RasterShape(std::move(intervals), marginRect.size()));
     rasterShape->m_writingMode = writingMode;
     rasterShape->m_margin = margin;
     return std::move(rasterShape);
 }
 
-PassOwnPtr<Shape> Shape::createLayoutBoxShape(const FloatRoundedRect& roundedRect, WritingMode writingMode, float margin)
+std::unique_ptr<Shape> Shape::createLayoutBoxShape(const FloatRoundedRect& roundedRect, WritingMode writingMode, float margin)
 {
     FloatRect rect(0, 0, roundedRect.rect().width(), roundedRect.rect().height());
     FloatRoundedRect bounds(rect, roundedRect.getRadii());
-    OwnPtr<Shape> shape = createInsetShape(bounds);
+    std::unique_ptr<Shape> shape = createInsetShape(bounds);
     shape->m_writingMode = writingMode;
     shape->m_margin = margin;
 
diff --git a/third_party/WebKit/Source/core/layout/shapes/Shape.h b/third_party/WebKit/Source/core/layout/shapes/Shape.h
index 59002f0..f6cff72d 100644
--- a/third_party/WebKit/Source/core/layout/shapes/Shape.h
+++ b/third_party/WebKit/Source/core/layout/shapes/Shape.h
@@ -36,7 +36,7 @@
 #include "platform/geometry/LayoutRect.h"
 #include "platform/graphics/Path.h"
 #include "platform/text/WritingMode.h"
-#include "wtf/PassOwnPtr.h"
+#include <memory>
 
 namespace blink {
 
@@ -76,10 +76,10 @@
         Path shape;
         Path marginShape;
     };
-    static PassOwnPtr<Shape> createShape(const BasicShape*, const LayoutSize& logicalBoxSize, WritingMode, float margin);
-    static PassOwnPtr<Shape> createRasterShape(Image*, float threshold, const LayoutRect& imageRect, const LayoutRect& marginRect, WritingMode, float margin);
-    static PassOwnPtr<Shape> createEmptyRasterShape(WritingMode, float margin);
-    static PassOwnPtr<Shape> createLayoutBoxShape(const FloatRoundedRect&, WritingMode, float margin);
+    static std::unique_ptr<Shape> createShape(const BasicShape*, const LayoutSize& logicalBoxSize, WritingMode, float margin);
+    static std::unique_ptr<Shape> createRasterShape(Image*, float threshold, const LayoutRect& imageRect, const LayoutRect& marginRect, WritingMode, float margin);
+    static std::unique_ptr<Shape> createEmptyRasterShape(WritingMode, float margin);
+    static std::unique_ptr<Shape> createLayoutBoxShape(const FloatRoundedRect&, WritingMode, float margin);
 
     virtual ~Shape() { }
 
diff --git a/third_party/WebKit/Source/core/layout/shapes/ShapeOutsideInfo.cpp b/third_party/WebKit/Source/core/layout/shapes/ShapeOutsideInfo.cpp
index 3ddffa0..6b388d21 100644
--- a/third_party/WebKit/Source/core/layout/shapes/ShapeOutsideInfo.cpp
+++ b/third_party/WebKit/Source/core/layout/shapes/ShapeOutsideInfo.cpp
@@ -36,6 +36,7 @@
 #include "core/layout/LayoutImage.h"
 #include "platform/LengthFunctions.h"
 #include "public/platform/Platform.h"
+#include <memory>
 
 namespace blink {
 
@@ -119,7 +120,7 @@
     return (rect.width().toFloat() * rect.height().toFloat() * 4.0) < maxImageSizeBytes;
 }
 
-PassOwnPtr<Shape> ShapeOutsideInfo::createShapeForImage(StyleImage* styleImage, float shapeImageThreshold, WritingMode writingMode, float margin) const
+std::unique_ptr<Shape> ShapeOutsideInfo::createShapeForImage(StyleImage* styleImage, float shapeImageThreshold, WritingMode writingMode, float margin) const
 {
     const LayoutSize& imageSize = styleImage->imageSize(m_layoutBox, m_layoutBox.style()->effectiveZoom(), m_referenceBoxLogicalSize);
 
diff --git a/third_party/WebKit/Source/core/layout/shapes/ShapeOutsideInfo.h b/third_party/WebKit/Source/core/layout/shapes/ShapeOutsideInfo.h
index 56f27f27e..0dc4a70c 100644
--- a/third_party/WebKit/Source/core/layout/shapes/ShapeOutsideInfo.h
+++ b/third_party/WebKit/Source/core/layout/shapes/ShapeOutsideInfo.h
@@ -36,7 +36,8 @@
 #include "core/style/ShapeValue.h"
 #include "platform/geometry/FloatRect.h"
 #include "platform/geometry/LayoutSize.h"
-#include "wtf/OwnPtr.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
@@ -93,7 +94,7 @@
     LayoutUnit shapeLogicalWidth() const { return computedShape().shapeMarginLogicalBoundingBox().width(); }
     LayoutUnit shapeLogicalHeight() const { return computedShape().shapeMarginLogicalBoundingBox().height(); }
 
-    static PassOwnPtr<ShapeOutsideInfo> createInfo(const LayoutBox& layoutBox) { return adoptPtr(new ShapeOutsideInfo(layoutBox)); }
+    static std::unique_ptr<ShapeOutsideInfo> createInfo(const LayoutBox& layoutBox) { return wrapUnique(new ShapeOutsideInfo(layoutBox)); }
     static bool isEnabledFor(const LayoutBox&);
 
     ShapeOutsideDeltas computeDeltasForContainingBlockLine(const LineLayoutBlockFlow&, const FloatingObject&, LayoutUnit lineTop, LayoutUnit lineHeight);
@@ -126,12 +127,12 @@
     { }
 
 private:
-    PassOwnPtr<Shape> createShapeForImage(StyleImage*, float shapeImageThreshold, WritingMode, float margin) const;
+    std::unique_ptr<Shape> createShapeForImage(StyleImage*, float shapeImageThreshold, WritingMode, float margin) const;
 
     LayoutUnit logicalTopOffset() const;
     LayoutUnit logicalLeftOffset() const;
 
-    typedef HashMap<const LayoutBox*, OwnPtr<ShapeOutsideInfo>> InfoMap;
+    typedef HashMap<const LayoutBox*, std::unique_ptr<ShapeOutsideInfo>> InfoMap;
     static InfoMap& infoMap()
     {
         DEFINE_STATIC_LOCAL(InfoMap, staticInfoMap, ());
@@ -139,7 +140,7 @@
     }
 
     const LayoutBox& m_layoutBox;
-    mutable OwnPtr<Shape> m_shape;
+    mutable std::unique_ptr<Shape> m_shape;
     LayoutSize m_referenceBoxLogicalSize;
     ShapeOutsideDeltas m_shapeOutsideDeltas;
     mutable bool m_isComputingShape;
diff --git a/third_party/WebKit/Source/core/layout/svg/LayoutSVGResourceGradient.cpp b/third_party/WebKit/Source/core/layout/svg/LayoutSVGResourceGradient.cpp
index 2f56243e..0c957d3f 100644
--- a/third_party/WebKit/Source/core/layout/svg/LayoutSVGResourceGradient.cpp
+++ b/third_party/WebKit/Source/core/layout/svg/LayoutSVGResourceGradient.cpp
@@ -22,6 +22,9 @@
 
 #include "core/layout/svg/LayoutSVGResourceGradient.h"
 
+#include "wtf/PtrUtil.h"
+#include <memory>
+
 namespace blink {
 
 LayoutSVGResourceGradient::LayoutSVGResourceGradient(SVGGradientElement* node)
@@ -70,9 +73,9 @@
     if (gradientUnits() == SVGUnitTypes::SVG_UNIT_TYPE_OBJECTBOUNDINGBOX && objectBoundingBox.isEmpty())
         return SVGPaintServer::invalid();
 
-    OwnPtr<GradientData>& gradientData = m_gradientMap.add(&object, nullptr).storedValue->value;
+    std::unique_ptr<GradientData>& gradientData = m_gradientMap.add(&object, nullptr).storedValue->value;
     if (!gradientData)
-        gradientData = adoptPtr(new GradientData);
+        gradientData = wrapUnique(new GradientData);
 
     // Create gradient object
     if (!gradientData->gradient) {
diff --git a/third_party/WebKit/Source/core/layout/svg/LayoutSVGResourceGradient.h b/third_party/WebKit/Source/core/layout/svg/LayoutSVGResourceGradient.h
index 5f2bffc..ccfcb20 100644
--- a/third_party/WebKit/Source/core/layout/svg/LayoutSVGResourceGradient.h
+++ b/third_party/WebKit/Source/core/layout/svg/LayoutSVGResourceGradient.h
@@ -28,6 +28,7 @@
 #include "platform/graphics/Gradient.h"
 #include "platform/transforms/AffineTransform.h"
 #include "wtf/HashMap.h"
+#include <memory>
 
 namespace blink {
 
@@ -61,7 +62,7 @@
 
 private:
     bool m_shouldCollectGradientAttributes : 1;
-    HashMap<const LayoutObject*, OwnPtr<GradientData>> m_gradientMap;
+    HashMap<const LayoutObject*, std::unique_ptr<GradientData>> m_gradientMap;
 };
 
 } // namespace blink
diff --git a/third_party/WebKit/Source/core/layout/svg/LayoutSVGResourcePattern.cpp b/third_party/WebKit/Source/core/layout/svg/LayoutSVGResourcePattern.cpp
index c8311c0..3b9d2ebf 100644
--- a/third_party/WebKit/Source/core/layout/svg/LayoutSVGResourcePattern.cpp
+++ b/third_party/WebKit/Source/core/layout/svg/LayoutSVGResourcePattern.cpp
@@ -31,6 +31,8 @@
 #include "platform/graphics/paint/PaintController.h"
 #include "platform/graphics/paint/SkPictureBuilder.h"
 #include "third_party/skia/include/core/SkPicture.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
@@ -75,7 +77,7 @@
     return m_patternMap.set(&object, buildPatternData(object)).storedValue->value.get();
 }
 
-PassOwnPtr<PatternData> LayoutSVGResourcePattern::buildPatternData(const LayoutObject& object)
+std::unique_ptr<PatternData> LayoutSVGResourcePattern::buildPatternData(const LayoutObject& object)
 {
     // If we couldn't determine the pattern content element root, stop here.
     const PatternAttributes& attributes = this->attributes();
@@ -107,7 +109,7 @@
             tileTransform.scale(clientBoundingBox.width(), clientBoundingBox.height());
     }
 
-    OwnPtr<PatternData> patternData = adoptPtr(new PatternData);
+    std::unique_ptr<PatternData> patternData = wrapUnique(new PatternData);
     patternData->pattern = Pattern::createPicturePattern(asPicture(tileBounds, tileTransform));
 
     // Compute pattern space transformation.
diff --git a/third_party/WebKit/Source/core/layout/svg/LayoutSVGResourcePattern.h b/third_party/WebKit/Source/core/layout/svg/LayoutSVGResourcePattern.h
index e4709b16..0c18098 100644
--- a/third_party/WebKit/Source/core/layout/svg/LayoutSVGResourcePattern.h
+++ b/third_party/WebKit/Source/core/layout/svg/LayoutSVGResourcePattern.h
@@ -26,8 +26,8 @@
 #include "core/svg/PatternAttributes.h"
 #include "platform/heap/Handle.h"
 #include "wtf/HashMap.h"
-#include "wtf/OwnPtr.h"
 #include "wtf/RefPtr.h"
+#include <memory>
 
 class SkPicture;
 
@@ -53,7 +53,7 @@
     LayoutSVGResourceType resourceType() const override { return s_resourceType; }
 
 private:
-    PassOwnPtr<PatternData> buildPatternData(const LayoutObject&);
+    std::unique_ptr<PatternData> buildPatternData(const LayoutObject&);
     PassRefPtr<SkPicture> asPicture(const FloatRect& tile, const AffineTransform&) const;
     PatternData* patternForLayoutObject(const LayoutObject&);
 
@@ -71,7 +71,7 @@
     // should be able to cache a single display list per LayoutSVGResourcePattern + one
     // Pattern(shader) for each client -- this would avoid re-recording when multiple clients
     // share the same pattern.
-    HashMap<const LayoutObject*, OwnPtr<PatternData>> m_patternMap;
+    HashMap<const LayoutObject*, std::unique_ptr<PatternData>> m_patternMap;
 };
 
 } // namespace blink
diff --git a/third_party/WebKit/Source/core/layout/svg/LayoutSVGShape.cpp b/third_party/WebKit/Source/core/layout/svg/LayoutSVGShape.cpp
index a049d043..32f65ee 100644
--- a/third_party/WebKit/Source/core/layout/svg/LayoutSVGShape.cpp
+++ b/third_party/WebKit/Source/core/layout/svg/LayoutSVGShape.cpp
@@ -41,6 +41,7 @@
 #include "platform/geometry/FloatPoint.h"
 #include "platform/graphics/StrokeData.h"
 #include "wtf/MathExtras.h"
+#include "wtf/PtrUtil.h"
 
 namespace blink {
 
@@ -59,7 +60,7 @@
 void LayoutSVGShape::createPath()
 {
     if (!m_path)
-        m_path = adoptPtr(new Path());
+        m_path = wrapUnique(new Path());
     *m_path = toSVGGeometryElement(element())->asPath();
     if (m_rareData.get())
         m_rareData->m_cachedNonScalingStrokePath.clear();
@@ -301,7 +302,7 @@
 LayoutSVGShapeRareData& LayoutSVGShape::ensureRareData() const
 {
     if (!m_rareData)
-        m_rareData = adoptPtr(new LayoutSVGShapeRareData());
+        m_rareData = wrapUnique(new LayoutSVGShapeRareData());
     return *m_rareData.get();
 }
 
diff --git a/third_party/WebKit/Source/core/layout/svg/LayoutSVGShape.h b/third_party/WebKit/Source/core/layout/svg/LayoutSVGShape.h
index 2e4899c1..a7b3fde9 100644
--- a/third_party/WebKit/Source/core/layout/svg/LayoutSVGShape.h
+++ b/third_party/WebKit/Source/core/layout/svg/LayoutSVGShape.h
@@ -30,8 +30,8 @@
 #include "core/layout/svg/SVGMarkerData.h"
 #include "platform/geometry/FloatRect.h"
 #include "platform/transforms/AffineTransform.h"
-#include "wtf/OwnPtr.h"
 #include "wtf/Vector.h"
+#include <memory>
 
 namespace blink {
 
@@ -131,8 +131,8 @@
     // TODO(fmalita): the Path is now cached in SVGPath; while this additional cache is just a
     // shallow copy, it certainly has a complexity/state management cost (plus allocation & storage
     // overhead) - so we should look into removing it.
-    OwnPtr<Path> m_path;
-    mutable OwnPtr<LayoutSVGShapeRareData> m_rareData;
+    std::unique_ptr<Path> m_path;
+    mutable std::unique_ptr<LayoutSVGShapeRareData> m_rareData;
 
     bool m_needsBoundariesUpdate : 1;
     bool m_needsShapeUpdate : 1;
diff --git a/third_party/WebKit/Source/core/layout/svg/LayoutSVGTextPath.cpp b/third_party/WebKit/Source/core/layout/svg/LayoutSVGTextPath.cpp
index 261e9c4..d3222d48 100644
--- a/third_party/WebKit/Source/core/layout/svg/LayoutSVGTextPath.cpp
+++ b/third_party/WebKit/Source/core/layout/svg/LayoutSVGTextPath.cpp
@@ -23,6 +23,7 @@
 #include "core/svg/SVGPathElement.h"
 #include "core/svg/SVGTextPathElement.h"
 #include "platform/graphics/Path.h"
+#include <memory>
 
 namespace blink {
 
@@ -64,7 +65,7 @@
     return child->isSVGInline() && !child->isSVGTextPath();
 }
 
-PassOwnPtr<PathPositionMapper> LayoutSVGTextPath::layoutPath() const
+std::unique_ptr<PathPositionMapper> LayoutSVGTextPath::layoutPath() const
 {
     const SVGTextPathElement& textPathElement = toSVGTextPathElement(*node());
     Element* targetElement = SVGURIReference::targetElementFromIRIString(
diff --git a/third_party/WebKit/Source/core/layout/svg/LayoutSVGTextPath.h b/third_party/WebKit/Source/core/layout/svg/LayoutSVGTextPath.h
index 1fd09f0..897583b 100644
--- a/third_party/WebKit/Source/core/layout/svg/LayoutSVGTextPath.h
+++ b/third_party/WebKit/Source/core/layout/svg/LayoutSVGTextPath.h
@@ -22,6 +22,8 @@
 #define LayoutSVGTextPath_h
 
 #include "core/layout/svg/LayoutSVGInline.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
@@ -31,9 +33,9 @@
 class PathPositionMapper {
     USING_FAST_MALLOC(PathPositionMapper);
 public:
-    static PassOwnPtr<PathPositionMapper> create(const Path& path)
+    static std::unique_ptr<PathPositionMapper> create(const Path& path)
     {
-        return adoptPtr(new PathPositionMapper(path));
+        return wrapUnique(new PathPositionMapper(path));
     }
 
     enum PositionType {
@@ -55,7 +57,7 @@
 public:
     explicit LayoutSVGTextPath(Element*);
 
-    PassOwnPtr<PathPositionMapper> layoutPath() const;
+    std::unique_ptr<PathPositionMapper> layoutPath() const;
     float calculateStartOffset(float) const;
 
     bool isChildAllowed(LayoutObject*, const ComputedStyle&) const override;
diff --git a/third_party/WebKit/Source/core/layout/svg/SVGResources.cpp b/third_party/WebKit/Source/core/layout/svg/SVGResources.cpp
index fe15b73..3f90215 100644
--- a/third_party/WebKit/Source/core/layout/svg/SVGResources.cpp
+++ b/third_party/WebKit/Source/core/layout/svg/SVGResources.cpp
@@ -30,6 +30,8 @@
 #include "core/svg/SVGGradientElement.h"
 #include "core/svg/SVGPatternElement.h"
 #include "core/svg/SVGURIReference.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 #ifndef NDEBUG
 #include <stdio.h>
@@ -195,15 +197,15 @@
         || m_linkedResource;
 }
 
-static inline SVGResources& ensureResources(OwnPtr<SVGResources>& resources)
+static inline SVGResources& ensureResources(std::unique_ptr<SVGResources>& resources)
 {
     if (!resources)
-        resources = adoptPtr(new SVGResources);
+        resources = wrapUnique(new SVGResources);
 
     return *resources.get();
 }
 
-PassOwnPtr<SVGResources> SVGResources::buildResources(const LayoutObject* object, const SVGComputedStyle& style)
+std::unique_ptr<SVGResources> SVGResources::buildResources(const LayoutObject* object, const SVGComputedStyle& style)
 {
     ASSERT(object);
 
@@ -220,7 +222,7 @@
     TreeScope& treeScope = element->treeScope();
     SVGDocumentExtensions& extensions = element->document().accessSVGExtensions();
 
-    OwnPtr<SVGResources> resources;
+    std::unique_ptr<SVGResources> resources;
     if (clipperFilterMaskerTags().contains(tagName)) {
         if (style.hasClipper()) {
             AtomicString id = style.clipperResource();
diff --git a/third_party/WebKit/Source/core/layout/svg/SVGResources.h b/third_party/WebKit/Source/core/layout/svg/SVGResources.h
index d3b806e..03842305 100644
--- a/third_party/WebKit/Source/core/layout/svg/SVGResources.h
+++ b/third_party/WebKit/Source/core/layout/svg/SVGResources.h
@@ -23,8 +23,8 @@
 #include "wtf/Allocator.h"
 #include "wtf/HashSet.h"
 #include "wtf/Noncopyable.h"
-#include "wtf/OwnPtr.h"
-#include "wtf/PassOwnPtr.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
@@ -44,7 +44,7 @@
 public:
     SVGResources();
 
-    static PassOwnPtr<SVGResources> buildResources(const LayoutObject*, const SVGComputedStyle&);
+    static std::unique_ptr<SVGResources> buildResources(const LayoutObject*, const SVGComputedStyle&);
     void layoutIfNeeded();
 
     static bool supportsMarkers(const SVGElement&);
@@ -121,9 +121,9 @@
         {
         }
 
-        static PassOwnPtr<ClipperFilterMaskerData> create()
+        static std::unique_ptr<ClipperFilterMaskerData> create()
         {
-            return adoptPtr(new ClipperFilterMaskerData);
+            return wrapUnique(new ClipperFilterMaskerData);
         }
 
         LayoutSVGResourceClipper* clipper;
@@ -143,9 +143,9 @@
         {
         }
 
-        static PassOwnPtr<MarkerData> create()
+        static std::unique_ptr<MarkerData> create()
         {
-            return adoptPtr(new MarkerData);
+            return wrapUnique(new MarkerData);
         }
 
         LayoutSVGResourceMarker* markerStart;
@@ -166,18 +166,18 @@
         {
         }
 
-        static PassOwnPtr<FillStrokeData> create()
+        static std::unique_ptr<FillStrokeData> create()
         {
-            return adoptPtr(new FillStrokeData);
+            return wrapUnique(new FillStrokeData);
         }
 
         LayoutSVGResourcePaintServer* fill;
         LayoutSVGResourcePaintServer* stroke;
     };
 
-    OwnPtr<ClipperFilterMaskerData> m_clipperFilterMaskerData;
-    OwnPtr<MarkerData> m_markerData;
-    OwnPtr<FillStrokeData> m_fillStrokeData;
+    std::unique_ptr<ClipperFilterMaskerData> m_clipperFilterMaskerData;
+    std::unique_ptr<MarkerData> m_markerData;
+    std::unique_ptr<FillStrokeData> m_fillStrokeData;
     LayoutSVGResourceContainer* m_linkedResource;
 };
 
diff --git a/third_party/WebKit/Source/core/layout/svg/SVGResourcesCache.cpp b/third_party/WebKit/Source/core/layout/svg/SVGResourcesCache.cpp
index 1e120bf..c222134 100644
--- a/third_party/WebKit/Source/core/layout/svg/SVGResourcesCache.cpp
+++ b/third_party/WebKit/Source/core/layout/svg/SVGResourcesCache.cpp
@@ -24,6 +24,7 @@
 #include "core/layout/svg/SVGResources.h"
 #include "core/layout/svg/SVGResourcesCycleSolver.h"
 #include "core/svg/SVGDocumentExtensions.h"
+#include <memory>
 
 namespace blink {
 
@@ -43,7 +44,7 @@
     const SVGComputedStyle& svgStyle = style.svgStyle();
 
     // Build a list of all resources associated with the passed LayoutObject.
-    OwnPtr<SVGResources> newResources = SVGResources::buildResources(object, svgStyle);
+    std::unique_ptr<SVGResources> newResources = SVGResources::buildResources(object, svgStyle);
     if (!newResources)
         return;
 
@@ -64,7 +65,7 @@
 
 void SVGResourcesCache::removeResourcesFromLayoutObject(LayoutObject* object)
 {
-    OwnPtr<SVGResources> resources = m_cache.take(object);
+    std::unique_ptr<SVGResources> resources = m_cache.take(object);
     if (!resources)
         return;
 
diff --git a/third_party/WebKit/Source/core/layout/svg/SVGResourcesCache.h b/third_party/WebKit/Source/core/layout/svg/SVGResourcesCache.h
index 433a95e..db57752 100644
--- a/third_party/WebKit/Source/core/layout/svg/SVGResourcesCache.h
+++ b/third_party/WebKit/Source/core/layout/svg/SVGResourcesCache.h
@@ -24,7 +24,7 @@
 #include "wtf/Allocator.h"
 #include "wtf/HashMap.h"
 #include "wtf/Noncopyable.h"
-#include "wtf/OwnPtr.h"
+#include <memory>
 
 namespace blink {
 
@@ -60,7 +60,7 @@
     void addResourcesFromLayoutObject(LayoutObject*, const ComputedStyle&);
     void removeResourcesFromLayoutObject(LayoutObject*);
 
-    typedef HashMap<const LayoutObject*, OwnPtr<SVGResources>> CacheMap;
+    typedef HashMap<const LayoutObject*, std::unique_ptr<SVGResources>> CacheMap;
     CacheMap m_cache;
 };
 
diff --git a/third_party/WebKit/Source/core/layout/svg/SVGTextLayoutEngine.h b/third_party/WebKit/Source/core/layout/svg/SVGTextLayoutEngine.h
index 5e61b74..5e2de72 100644
--- a/third_party/WebKit/Source/core/layout/svg/SVGTextLayoutEngine.h
+++ b/third_party/WebKit/Source/core/layout/svg/SVGTextLayoutEngine.h
@@ -25,6 +25,7 @@
 #include "core/layout/svg/SVGTextFragment.h"
 #include "wtf/Allocator.h"
 #include "wtf/Vector.h"
+#include <memory>
 
 namespace blink {
 
@@ -88,7 +89,7 @@
     bool m_textLengthSpacingInEffect;
 
     // Text on path layout
-    OwnPtr<PathPositionMapper> m_textPath;
+    std::unique_ptr<PathPositionMapper> m_textPath;
     float m_textPathStartOffset;
     float m_textPathCurrentOffset;
     float m_textPathDisplacement;
diff --git a/third_party/WebKit/Source/core/loader/CrossOriginPreflightResultCache.cpp b/third_party/WebKit/Source/core/loader/CrossOriginPreflightResultCache.cpp
index 0b8713a..9006fa5 100644
--- a/third_party/WebKit/Source/core/loader/CrossOriginPreflightResultCache.cpp
+++ b/third_party/WebKit/Source/core/loader/CrossOriginPreflightResultCache.cpp
@@ -31,6 +31,7 @@
 #include "platform/network/ResourceResponse.h"
 #include "wtf/CurrentTime.h"
 #include "wtf/StdLibExtras.h"
+#include <memory>
 
 namespace blink {
 
@@ -151,7 +152,7 @@
     return cache;
 }
 
-void CrossOriginPreflightResultCache::appendEntry(const String& origin, const KURL& url, PassOwnPtr<CrossOriginPreflightResultCacheItem> preflightResult)
+void CrossOriginPreflightResultCache::appendEntry(const String& origin, const KURL& url, std::unique_ptr<CrossOriginPreflightResultCacheItem> preflightResult)
 {
     ASSERT(isMainThread());
     m_preflightHashMap.set(std::make_pair(origin, url), std::move(preflightResult));
diff --git a/third_party/WebKit/Source/core/loader/CrossOriginPreflightResultCache.h b/third_party/WebKit/Source/core/loader/CrossOriginPreflightResultCache.h
index b5cb30a..7f8c2d7 100644
--- a/third_party/WebKit/Source/core/loader/CrossOriginPreflightResultCache.h
+++ b/third_party/WebKit/Source/core/loader/CrossOriginPreflightResultCache.h
@@ -31,8 +31,8 @@
 #include "platform/weborigin/KURLHash.h"
 #include "wtf/HashMap.h"
 #include "wtf/HashSet.h"
-#include "wtf/PassOwnPtr.h"
 #include "wtf/text/StringHash.h"
+#include <memory>
 
 namespace blink {
 
@@ -70,13 +70,13 @@
 public:
     static CrossOriginPreflightResultCache& shared();
 
-    void appendEntry(const String& origin, const KURL&, PassOwnPtr<CrossOriginPreflightResultCacheItem>);
+    void appendEntry(const String& origin, const KURL&, std::unique_ptr<CrossOriginPreflightResultCacheItem>);
     bool canSkipPreflight(const String& origin, const KURL&, StoredCredentials, const String& method, const HTTPHeaderMap& requestHeaders);
 
 private:
     CrossOriginPreflightResultCache() { }
 
-    typedef HashMap<std::pair<String, KURL>, OwnPtr<CrossOriginPreflightResultCacheItem>> CrossOriginPreflightResultHashMap;
+    typedef HashMap<std::pair<String, KURL>, std::unique_ptr<CrossOriginPreflightResultCacheItem>> CrossOriginPreflightResultHashMap;
 
     CrossOriginPreflightResultHashMap m_preflightHashMap;
 };
diff --git a/third_party/WebKit/Source/core/loader/DocumentLoadTimingTest.cpp b/third_party/WebKit/Source/core/loader/DocumentLoadTimingTest.cpp
index d775ffb..b8db10de 100644
--- a/third_party/WebKit/Source/core/loader/DocumentLoadTimingTest.cpp
+++ b/third_party/WebKit/Source/core/loader/DocumentLoadTimingTest.cpp
@@ -7,6 +7,7 @@
 #include "core/loader/DocumentLoader.h"
 #include "core/testing/DummyPageHolder.h"
 #include "testing/gtest/include/gtest/gtest.h"
+#include <memory>
 
 namespace blink {
 
@@ -15,7 +16,7 @@
 
 TEST_F(DocumentLoadTimingTest, ensureValidNavigationStartAfterEmbedder)
 {
-    OwnPtr<DummyPageHolder> dummyPage = DummyPageHolder::create();
+    std::unique_ptr<DummyPageHolder> dummyPage = DummyPageHolder::create();
     DocumentLoadTiming timing(*(dummyPage->document().loader()));
 
     double delta = -1000;
@@ -30,7 +31,7 @@
 
 TEST_F(DocumentLoadTimingTest, correctTimingDeltas)
 {
-    OwnPtr<DummyPageHolder> dummyPage = DummyPageHolder::create();
+    std::unique_ptr<DummyPageHolder> dummyPage = DummyPageHolder::create();
     DocumentLoadTiming timing(*(dummyPage->document().loader()));
 
     double navigationStartDelta = -456;
diff --git a/third_party/WebKit/Source/core/loader/DocumentLoader.cpp b/third_party/WebKit/Source/core/loader/DocumentLoader.cpp
index 8f11b8e5..10b44fc 100644
--- a/third_party/WebKit/Source/core/loader/DocumentLoader.cpp
+++ b/third_party/WebKit/Source/core/loader/DocumentLoader.cpp
@@ -75,6 +75,7 @@
 #include "wtf/Assertions.h"
 #include "wtf/TemporaryChange.h"
 #include "wtf/text/WTFString.h"
+#include <memory>
 
 namespace blink {
 
@@ -165,7 +166,7 @@
     return m_request.url();
 }
 
-void DocumentLoader::setSubresourceFilter(PassOwnPtr<WebDocumentSubresourceFilter> subresourceFilter)
+void DocumentLoader::setSubresourceFilter(std::unique_ptr<WebDocumentSubresourceFilter> subresourceFilter)
 {
     m_subresourceFilter = std::move(subresourceFilter);
 }
@@ -370,7 +371,7 @@
     return;
 }
 
-void DocumentLoader::responseReceived(Resource* resource, const ResourceResponse& response, PassOwnPtr<WebDataConsumerHandle> handle)
+void DocumentLoader::responseReceived(Resource* resource, const ResourceResponse& response, std::unique_ptr<WebDataConsumerHandle> handle)
 {
     ASSERT_UNUSED(resource, m_mainResource == resource);
     ASSERT_UNUSED(handle, !handle);
diff --git a/third_party/WebKit/Source/core/loader/DocumentLoader.h b/third_party/WebKit/Source/core/loader/DocumentLoader.h
index acdd1ef..9bf58f7f 100644
--- a/third_party/WebKit/Source/core/loader/DocumentLoader.h
+++ b/third_party/WebKit/Source/core/loader/DocumentLoader.h
@@ -49,6 +49,7 @@
 #include "public/platform/WebLoadingBehaviorFlag.h"
 #include "wtf/HashSet.h"
 #include "wtf/RefPtr.h"
+#include <memory>
 
 namespace blink {
 
@@ -84,7 +85,7 @@
 
     ResourceFetcher* fetcher() const { return m_fetcher.get(); }
 
-    void setSubresourceFilter(PassOwnPtr<WebDocumentSubresourceFilter>);
+    void setSubresourceFilter(std::unique_ptr<WebDocumentSubresourceFilter>);
     WebDocumentSubresourceFilter* subresourceFilter() const { return m_subresourceFilter.get(); }
 
     const SubstituteData& substituteData() const { return m_substituteData; }
@@ -170,7 +171,7 @@
     void finishedLoading(double finishTime);
     void cancelLoadAfterXFrameOptionsOrCSPDenied(const ResourceResponse&);
     void redirectReceived(Resource*, ResourceRequest&, const ResourceResponse&) final;
-    void responseReceived(Resource*, const ResourceResponse&, PassOwnPtr<WebDataConsumerHandle>) final;
+    void responseReceived(Resource*, const ResourceResponse&, std::unique_ptr<WebDataConsumerHandle>) final;
     void dataReceived(Resource*, const char* data, size_t length) final;
     void processData(const char* data, size_t length);
     void notifyFinished(Resource*) final;
@@ -184,7 +185,7 @@
 
     Member<LocalFrame> m_frame;
     Member<ResourceFetcher> m_fetcher;
-    OwnPtr<WebDocumentSubresourceFilter> m_subresourceFilter;
+    std::unique_ptr<WebDocumentSubresourceFilter> m_subresourceFilter;
 
     Member<RawResource> m_mainResource;
 
diff --git a/third_party/WebKit/Source/core/loader/DocumentThreadableLoader.cpp b/third_party/WebKit/Source/core/loader/DocumentThreadableLoader.cpp
index bce49a4..3ccae82 100644
--- a/third_party/WebKit/Source/core/loader/DocumentThreadableLoader.cpp
+++ b/third_party/WebKit/Source/core/loader/DocumentThreadableLoader.cpp
@@ -55,6 +55,8 @@
 #include "public/platform/Platform.h"
 #include "public/platform/WebURLRequest.h"
 #include "wtf/Assertions.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
@@ -124,13 +126,13 @@
 void DocumentThreadableLoader::loadResourceSynchronously(Document& document, const ResourceRequest& request, ThreadableLoaderClient& client, const ThreadableLoaderOptions& options, const ResourceLoaderOptions& resourceLoaderOptions)
 {
     // The loader will be deleted as soon as this function exits.
-    OwnPtr<DocumentThreadableLoader> loader = adoptPtr(new DocumentThreadableLoader(document, &client, LoadSynchronously, options, resourceLoaderOptions));
+    std::unique_ptr<DocumentThreadableLoader> loader = wrapUnique(new DocumentThreadableLoader(document, &client, LoadSynchronously, options, resourceLoaderOptions));
     loader->start(request);
 }
 
-PassOwnPtr<DocumentThreadableLoader> DocumentThreadableLoader::create(Document& document, ThreadableLoaderClient* client, const ThreadableLoaderOptions& options, const ResourceLoaderOptions& resourceLoaderOptions)
+std::unique_ptr<DocumentThreadableLoader> DocumentThreadableLoader::create(Document& document, ThreadableLoaderClient* client, const ThreadableLoaderOptions& options, const ResourceLoaderOptions& resourceLoaderOptions)
 {
-    return adoptPtr(new DocumentThreadableLoader(document, client, LoadAsynchronously, options, resourceLoaderOptions));
+    return wrapUnique(new DocumentThreadableLoader(document, client, LoadAsynchronously, options, resourceLoaderOptions));
 }
 
 DocumentThreadableLoader::DocumentThreadableLoader(Document& document, ThreadableLoaderClient* client, BlockingBehavior blockingBehavior, const ThreadableLoaderOptions& options, const ResourceLoaderOptions& resourceLoaderOptions)
@@ -451,7 +453,7 @@
         // TODO(horo): If we support any API which expose the internal body, we
         // will have to read the body. And also HTTPCache changes will be needed
         // because it doesn't store the body of redirect responses.
-        responseReceived(resource, redirectResponse, adoptPtr(new EmptyDataHandle()));
+        responseReceived(resource, redirectResponse, wrapUnique(new EmptyDataHandle()));
 
         if (!self) {
             request = ResourceRequest();
@@ -596,7 +598,7 @@
     // |this| may be dead here.
 }
 
-void DocumentThreadableLoader::responseReceived(Resource* resource, const ResourceResponse& response, PassOwnPtr<WebDataConsumerHandle> handle)
+void DocumentThreadableLoader::responseReceived(Resource* resource, const ResourceResponse& response, std::unique_ptr<WebDataConsumerHandle> handle)
 {
     ASSERT_UNUSED(resource, resource == this->resource());
     ASSERT(m_async);
@@ -630,7 +632,7 @@
         return;
     }
 
-    OwnPtr<CrossOriginPreflightResultCacheItem> preflightResult = adoptPtr(new CrossOriginPreflightResultCacheItem(effectiveAllowCredentials()));
+    std::unique_ptr<CrossOriginPreflightResultCacheItem> preflightResult = wrapUnique(new CrossOriginPreflightResultCacheItem(effectiveAllowCredentials()));
     if (!preflightResult->parse(response, accessControlErrorDescription)
         || !preflightResult->allowsCrossOriginMethod(m_actualRequest.httpMethod(), accessControlErrorDescription)
         || !preflightResult->allowsCrossOriginHeaders(m_actualRequest.httpHeaderFields(), accessControlErrorDescription)) {
@@ -656,7 +658,7 @@
     frame->console().reportResourceResponseReceived(loader, identifier, response);
 }
 
-void DocumentThreadableLoader::handleResponse(unsigned long identifier, const ResourceResponse& response, PassOwnPtr<WebDataConsumerHandle> handle)
+void DocumentThreadableLoader::handleResponse(unsigned long identifier, const ResourceResponse& response, std::unique_ptr<WebDataConsumerHandle> handle)
 {
     ASSERT(m_client);
 
diff --git a/third_party/WebKit/Source/core/loader/DocumentThreadableLoader.h b/third_party/WebKit/Source/core/loader/DocumentThreadableLoader.h
index e0eda8e..9729960 100644
--- a/third_party/WebKit/Source/core/loader/DocumentThreadableLoader.h
+++ b/third_party/WebKit/Source/core/loader/DocumentThreadableLoader.h
@@ -41,10 +41,9 @@
 #include "platform/network/HTTPHeaderMap.h"
 #include "platform/network/ResourceError.h"
 #include "wtf/Forward.h"
-#include "wtf/OwnPtr.h"
-#include "wtf/PassOwnPtr.h"
 #include "wtf/WeakPtr.h"
 #include "wtf/text/WTFString.h"
+#include <memory>
 
 namespace blink {
 
@@ -58,7 +57,7 @@
     USING_FAST_MALLOC(DocumentThreadableLoader);
     public:
         static void loadResourceSynchronously(Document&, const ResourceRequest&, ThreadableLoaderClient&, const ThreadableLoaderOptions&, const ResourceLoaderOptions&);
-        static PassOwnPtr<DocumentThreadableLoader> create(Document&, ThreadableLoaderClient*, const ThreadableLoaderOptions&, const ResourceLoaderOptions&);
+        static std::unique_ptr<DocumentThreadableLoader> create(Document&, ThreadableLoaderClient*, const ThreadableLoaderOptions&, const ResourceLoaderOptions&);
         ~DocumentThreadableLoader() override;
 
         void start(const ResourceRequest&) override;
@@ -90,7 +89,7 @@
         //
         // |this| may be dead after calling these methods.
         void dataSent(Resource*, unsigned long long bytesSent, unsigned long long totalBytesToBeSent) override;
-        void responseReceived(Resource*, const ResourceResponse&, PassOwnPtr<WebDataConsumerHandle>) override;
+        void responseReceived(Resource*, const ResourceResponse&, std::unique_ptr<WebDataConsumerHandle>) override;
         void setSerializedCachedMetadata(Resource*, const char*, size_t) override;
         void dataReceived(Resource*, const char* data, size_t dataLength) override;
         void redirectReceived(Resource*, ResourceRequest&, const ResourceResponse&) override;
@@ -109,7 +108,7 @@
         // common to both sync and async mode.
         //
         // |this| may be dead after calling these method in async mode.
-        void handleResponse(unsigned long identifier, const ResourceResponse&, PassOwnPtr<WebDataConsumerHandle>);
+        void handleResponse(unsigned long identifier, const ResourceResponse&, std::unique_ptr<WebDataConsumerHandle>);
         void handleReceivedData(const char* data, size_t dataLength);
         void handleSuccessfulFinish(unsigned long identifier, double finishTime);
 
diff --git a/third_party/WebKit/Source/core/loader/DocumentWriter.cpp b/third_party/WebKit/Source/core/loader/DocumentWriter.cpp
index 5cfca6d3..7d1ae825 100644
--- a/third_party/WebKit/Source/core/loader/DocumentWriter.cpp
+++ b/third_party/WebKit/Source/core/loader/DocumentWriter.cpp
@@ -39,7 +39,7 @@
 #include "core/loader/FrameLoaderStateMachine.h"
 #include "platform/weborigin/KURL.h"
 #include "platform/weborigin/SecurityOrigin.h"
-#include "wtf/PassOwnPtr.h"
+#include <memory>
 
 namespace blink {
 
@@ -86,7 +86,7 @@
 {
     ASSERT(m_parser);
     if (m_parser->needsDecoder() && 0 < length) {
-        OwnPtr<TextResourceDecoder> decoder = m_decoderBuilder.buildFor(m_document);
+        std::unique_ptr<TextResourceDecoder> decoder = m_decoderBuilder.buildFor(m_document);
         m_parser->setDecoder(std::move(decoder));
     }
     // appendBytes() can result replacing DocumentLoader::m_writer.
@@ -101,7 +101,7 @@
         return;
 
     if (m_parser->needsDecoder()) {
-        OwnPtr<TextResourceDecoder> decoder = m_decoderBuilder.buildFor(m_document);
+        std::unique_ptr<TextResourceDecoder> decoder = m_decoderBuilder.buildFor(m_document);
         m_parser->setDecoder(std::move(decoder));
     }
 
diff --git a/third_party/WebKit/Source/core/loader/EmptyClients.cpp b/third_party/WebKit/Source/core/loader/EmptyClients.cpp
index 51f7127..3a74c62 100644
--- a/third_party/WebKit/Source/core/loader/EmptyClients.cpp
+++ b/third_party/WebKit/Source/core/loader/EmptyClients.cpp
@@ -40,6 +40,8 @@
 #include "public/platform/modules/mediasession/WebMediaSession.h"
 #include "public/platform/modules/serviceworker/WebServiceWorkerProvider.h"
 #include "public/platform/modules/serviceworker/WebServiceWorkerProviderClient.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
@@ -111,9 +113,9 @@
     return String();
 }
 
-PassOwnPtr<WebFrameScheduler> EmptyChromeClient::createFrameScheduler(BlameContext*)
+std::unique_ptr<WebFrameScheduler> EmptyChromeClient::createFrameScheduler(BlameContext*)
 {
-    return adoptPtr(new EmptyFrameScheduler());
+    return wrapUnique(new EmptyFrameScheduler());
 }
 
 NavigationPolicy EmptyFrameLoaderClient::decidePolicyForNavigation(const ResourceRequest&, DocumentLoader*, NavigationType, NavigationPolicy, bool, bool)
@@ -149,12 +151,12 @@
     return nullptr;
 }
 
-PassOwnPtr<WebMediaPlayer> EmptyFrameLoaderClient::createWebMediaPlayer(HTMLMediaElement&, const WebMediaPlayerSource&, WebMediaPlayerClient*)
+std::unique_ptr<WebMediaPlayer> EmptyFrameLoaderClient::createWebMediaPlayer(HTMLMediaElement&, const WebMediaPlayerSource&, WebMediaPlayerClient*)
 {
     return nullptr;
 }
 
-PassOwnPtr<WebMediaSession> EmptyFrameLoaderClient::createWebMediaSession()
+std::unique_ptr<WebMediaSession> EmptyFrameLoaderClient::createWebMediaSession()
 {
     return nullptr;
 }
@@ -163,12 +165,12 @@
 {
 }
 
-PassOwnPtr<WebServiceWorkerProvider> EmptyFrameLoaderClient::createServiceWorkerProvider()
+std::unique_ptr<WebServiceWorkerProvider> EmptyFrameLoaderClient::createServiceWorkerProvider()
 {
     return nullptr;
 }
 
-PassOwnPtr<WebApplicationCacheHost> EmptyFrameLoaderClient::createApplicationCacheHost(WebApplicationCacheHostClient*)
+std::unique_ptr<WebApplicationCacheHost> EmptyFrameLoaderClient::createApplicationCacheHost(WebApplicationCacheHostClient*)
 {
     return nullptr;
 }
diff --git a/third_party/WebKit/Source/core/loader/EmptyClients.h b/third_party/WebKit/Source/core/loader/EmptyClients.h
index 97882afb..72b4525 100644
--- a/third_party/WebKit/Source/core/loader/EmptyClients.h
+++ b/third_party/WebKit/Source/core/loader/EmptyClients.h
@@ -48,6 +48,7 @@
 #include "public/platform/WebFrameScheduler.h"
 #include "public/platform/WebScreenInfo.h"
 #include "wtf/Forward.h"
+#include <memory>
 #include <v8.h>
 
 /*
@@ -176,7 +177,7 @@
     void registerPopupOpeningObserver(PopupOpeningObserver*) override {}
     void unregisterPopupOpeningObserver(PopupOpeningObserver*) override {}
 
-    PassOwnPtr<WebFrameScheduler> createFrameScheduler(BlameContext*) override;
+    std::unique_ptr<WebFrameScheduler> createFrameScheduler(BlameContext*) override;
 };
 
 class CORE_EXPORT EmptyFrameLoaderClient : public FrameLoaderClient {
@@ -251,8 +252,8 @@
     LocalFrame* createFrame(const FrameLoadRequest&, const AtomicString&, HTMLFrameOwnerElement*) override;
     Widget* createPlugin(HTMLPlugInElement*, const KURL&, const Vector<String>&, const Vector<String>&, const String&, bool, DetachedPluginPolicy) override;
     bool canCreatePluginWithoutRenderer(const String& mimeType) const override { return false; }
-    PassOwnPtr<WebMediaPlayer> createWebMediaPlayer(HTMLMediaElement&, const WebMediaPlayerSource&, WebMediaPlayerClient*) override;
-    PassOwnPtr<WebMediaSession> createWebMediaSession() override;
+    std::unique_ptr<WebMediaPlayer> createWebMediaPlayer(HTMLMediaElement&, const WebMediaPlayerSource&, WebMediaPlayerClient*) override;
+    std::unique_ptr<WebMediaSession> createWebMediaSession() override;
 
     ObjectContentType getObjectContentType(const KURL&, const String&, bool) override { return ObjectContentType(); }
 
@@ -268,10 +269,10 @@
 
     WebCookieJar* cookieJar() const override { return 0; }
 
-    PassOwnPtr<WebServiceWorkerProvider> createServiceWorkerProvider() override;
+    std::unique_ptr<WebServiceWorkerProvider> createServiceWorkerProvider() override;
     bool isControlledByServiceWorker(DocumentLoader&) override { return false; }
     int64_t serviceWorkerID(DocumentLoader&) override { return -1; }
-    PassOwnPtr<WebApplicationCacheHost> createApplicationCacheHost(WebApplicationCacheHostClient*) override;
+    std::unique_ptr<WebApplicationCacheHost> createApplicationCacheHost(WebApplicationCacheHostClient*) override;
 
 protected:
     EmptyFrameLoaderClient() {}
diff --git a/third_party/WebKit/Source/core/loader/FrameFetchContext.cpp b/third_party/WebKit/Source/core/loader/FrameFetchContext.cpp
index f09d2ece..9166180 100644
--- a/third_party/WebKit/Source/core/loader/FrameFetchContext.cpp
+++ b/third_party/WebKit/Source/core/loader/FrameFetchContext.cpp
@@ -73,8 +73,8 @@
 #include "public/platform/WebDocumentSubresourceFilter.h"
 #include "public/platform/WebFrameScheduler.h"
 #include "public/platform/WebInsecureRequestPolicy.h"
-
 #include <algorithm>
+#include <memory>
 
 namespace blink {
 
@@ -397,11 +397,11 @@
     return m_documentLoader == frame()->loader().documentLoader();
 }
 
-static PassOwnPtr<TracedValue> loadResourceTraceData(unsigned long identifier, const KURL& url, int priority)
+static std::unique_ptr<TracedValue> loadResourceTraceData(unsigned long identifier, const KURL& url, int priority)
 {
     String requestId = IdentifiersFactory::requestId(identifier);
 
-    OwnPtr<TracedValue> value = TracedValue::create();
+    std::unique_ptr<TracedValue> value = TracedValue::create();
     value->setString("requestId", requestId);
     value->setString("url", url.getString());
     value->setInteger("priority", priority);
diff --git a/third_party/WebKit/Source/core/loader/FrameFetchContext.h b/third_party/WebKit/Source/core/loader/FrameFetchContext.h
index 3f7ed4b..e04fd81 100644
--- a/third_party/WebKit/Source/core/loader/FrameFetchContext.h
+++ b/third_party/WebKit/Source/core/loader/FrameFetchContext.h
@@ -37,7 +37,6 @@
 #include "core/frame/csp/ContentSecurityPolicy.h"
 #include "platform/heap/Handle.h"
 #include "platform/network/ResourceRequest.h"
-#include "wtf/PassOwnPtr.h"
 
 namespace blink {
 
diff --git a/third_party/WebKit/Source/core/loader/FrameFetchContextTest.cpp b/third_party/WebKit/Source/core/loader/FrameFetchContextTest.cpp
index e8ee435..8e8aa81b 100644
--- a/third_party/WebKit/Source/core/loader/FrameFetchContextTest.cpp
+++ b/third_party/WebKit/Source/core/loader/FrameFetchContextTest.cpp
@@ -48,6 +48,7 @@
 #include "public/platform/WebInsecureRequestPolicy.h"
 #include "testing/gmock/include/gmock/gmock-generated-function-mockers.h"
 #include "testing/gtest/include/gtest/gtest.h"
+#include <memory>
 
 namespace blink {
 
@@ -122,7 +123,7 @@
         return childFetchContext;
     }
 
-    OwnPtr<DummyPageHolder> dummyPageHolder;
+    std::unique_ptr<DummyPageHolder> dummyPageHolder;
     // We don't use the DocumentLoader directly in any tests, but need to keep it around as long
     // as the ResourceFetcher and Document live due to indirect usage.
     Persistent<DocumentLoader> documentLoader;
diff --git a/third_party/WebKit/Source/core/loader/FrameLoader.cpp b/third_party/WebKit/Source/core/loader/FrameLoader.cpp
index 4f8c4d0a..8be7514c 100644
--- a/third_party/WebKit/Source/core/loader/FrameLoader.cpp
+++ b/third_party/WebKit/Source/core/loader/FrameLoader.cpp
@@ -99,6 +99,7 @@
 #include "wtf/TemporaryChange.h"
 #include "wtf/text/CString.h"
 #include "wtf/text/WTFString.h"
+#include <memory>
 
 using blink::WebURLRequest;
 
@@ -1597,9 +1598,9 @@
     return toLocalFrame(parentFrame)->document()->insecureNavigationsToUpgrade();
 }
 
-PassOwnPtr<TracedValue> FrameLoader::toTracedValue() const
+std::unique_ptr<TracedValue> FrameLoader::toTracedValue() const
 {
-    OwnPtr<TracedValue> tracedValue = TracedValue::create();
+    std::unique_ptr<TracedValue> tracedValue = TracedValue::create();
     tracedValue->beginDictionary("frame");
     tracedValue->setString("id_ref", String::format("0x%" PRIx64, static_cast<uint64_t>(reinterpret_cast<uintptr_t>(m_frame.get()))));
     tracedValue->endDictionary();
diff --git a/third_party/WebKit/Source/core/loader/FrameLoader.h b/third_party/WebKit/Source/core/loader/FrameLoader.h
index 7334fb6..127d12b 100644
--- a/third_party/WebKit/Source/core/loader/FrameLoader.h
+++ b/third_party/WebKit/Source/core/loader/FrameLoader.h
@@ -49,6 +49,7 @@
 #include "public/platform/WebInsecureRequestPolicy.h"
 #include "wtf/Forward.h"
 #include "wtf/HashSet.h"
+#include <memory>
 
 namespace blink {
 
@@ -221,12 +222,12 @@
 
     void detachDocumentLoader(Member<DocumentLoader>&);
 
-    PassOwnPtr<TracedValue> toTracedValue() const;
+    std::unique_ptr<TracedValue> toTracedValue() const;
     void takeObjectSnapshot() const;
 
     Member<LocalFrame> m_frame;
 
-    // FIXME: These should be OwnPtr<T> to reduce build times and simplify
+    // FIXME: These should be std::unique_ptr<T> to reduce build times and simplify
     // header dependencies unless performance testing proves otherwise.
     // Some of these could be lazily created for memory savings on devices.
     mutable FrameLoaderStateMachine m_stateMachine;
diff --git a/third_party/WebKit/Source/core/loader/FrameLoaderClient.h b/third_party/WebKit/Source/core/loader/FrameLoaderClient.h
index 4135098..d16e979 100644
--- a/third_party/WebKit/Source/core/loader/FrameLoaderClient.h
+++ b/third_party/WebKit/Source/core/loader/FrameLoaderClient.h
@@ -48,6 +48,7 @@
 #include "public/platform/WebLoadingBehaviorFlag.h"
 #include "wtf/Forward.h"
 #include "wtf/Vector.h"
+#include <memory>
 #include <v8.h>
 
 namespace blink {
@@ -174,9 +175,9 @@
     virtual bool canCreatePluginWithoutRenderer(const String& mimeType) const = 0;
     virtual Widget* createPlugin(HTMLPlugInElement*, const KURL&, const Vector<String>&, const Vector<String>&, const String&, bool loadManually, DetachedPluginPolicy) = 0;
 
-    virtual PassOwnPtr<WebMediaPlayer> createWebMediaPlayer(HTMLMediaElement&, const WebMediaPlayerSource&, WebMediaPlayerClient*) = 0;
+    virtual std::unique_ptr<WebMediaPlayer> createWebMediaPlayer(HTMLMediaElement&, const WebMediaPlayerSource&, WebMediaPlayerClient*) = 0;
 
-    virtual PassOwnPtr<WebMediaSession> createWebMediaSession() = 0;
+    virtual std::unique_ptr<WebMediaSession> createWebMediaSession() = 0;
 
     virtual ObjectContentType getObjectContentType(const KURL&, const String& mimeType, bool shouldPreferPlugInsForImages) = 0;
 
@@ -243,7 +244,7 @@
 
     virtual void dispatchDidChangeResourcePriority(unsigned long identifier, ResourceLoadPriority, int intraPriorityValue) { }
 
-    virtual PassOwnPtr<WebServiceWorkerProvider> createServiceWorkerProvider() = 0;
+    virtual std::unique_ptr<WebServiceWorkerProvider> createServiceWorkerProvider() = 0;
 
     virtual bool isControlledByServiceWorker(DocumentLoader&) = 0;
 
@@ -251,7 +252,7 @@
 
     virtual SharedWorkerRepositoryClient* sharedWorkerRepositoryClient() { return 0; }
 
-    virtual PassOwnPtr<WebApplicationCacheHost> createApplicationCacheHost(WebApplicationCacheHostClient*) = 0;
+    virtual std::unique_ptr<WebApplicationCacheHost> createApplicationCacheHost(WebApplicationCacheHostClient*) = 0;
 
     virtual void dispatchDidChangeManifest() { }
 
diff --git a/third_party/WebKit/Source/core/loader/ImageLoader.cpp b/third_party/WebKit/Source/core/loader/ImageLoader.cpp
index 66d5f545..4f38a21 100644
--- a/third_party/WebKit/Source/core/loader/ImageLoader.cpp
+++ b/third_party/WebKit/Source/core/loader/ImageLoader.cpp
@@ -51,6 +51,7 @@
 #include "public/platform/WebCachePolicy.h"
 #include "public/platform/WebURLRequest.h"
 #include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
@@ -262,7 +263,7 @@
     // m_pendingTask to null).
     m_pendingTask.clear();
     // Make sure to only decrement the count when we exit this function
-    OwnPtr<IncrementLoadEventDelayCount> loadDelayCounter;
+    std::unique_ptr<IncrementLoadEventDelayCount> loadDelayCounter;
     loadDelayCounter.swap(m_loadDelayCounter);
 
     Document& document = m_element->document();
diff --git a/third_party/WebKit/Source/core/loader/ImageLoader.h b/third_party/WebKit/Source/core/loader/ImageLoader.h
index b7fa112..5ac085d 100644
--- a/third_party/WebKit/Source/core/loader/ImageLoader.h
+++ b/third_party/WebKit/Source/core/loader/ImageLoader.h
@@ -31,6 +31,7 @@
 #include "wtf/HashSet.h"
 #include "wtf/WeakPtr.h"
 #include "wtf/text/AtomicString.h"
+#include <memory>
 
 namespace blink {
 
@@ -158,7 +159,7 @@
     Timer<ImageLoader> m_derefElementTimer;
     AtomicString m_failedLoadURL;
     WeakPtr<Task> m_pendingTask; // owned by Microtask
-    OwnPtr<IncrementLoadEventDelayCount> m_loadDelayCounter;
+    std::unique_ptr<IncrementLoadEventDelayCount> m_loadDelayCounter;
     bool m_hasPendingLoadEvent : 1;
     bool m_hasPendingErrorEvent : 1;
     bool m_imageComplete : 1;
diff --git a/third_party/WebKit/Source/core/loader/LinkLoader.h b/third_party/WebKit/Source/core/loader/LinkLoader.h
index 0e0004a..a9f0b1dd 100644
--- a/third_party/WebKit/Source/core/loader/LinkLoader.h
+++ b/third_party/WebKit/Source/core/loader/LinkLoader.h
@@ -41,7 +41,6 @@
 #include "platform/PrerenderClient.h"
 #include "platform/Timer.h"
 #include "platform/heap/Handle.h"
-#include "wtf/OwnPtr.h"
 
 namespace blink {
 
diff --git a/third_party/WebKit/Source/core/loader/LinkLoaderTest.cpp b/third_party/WebKit/Source/core/loader/LinkLoaderTest.cpp
index e43d2e1c..6a6913a 100644
--- a/third_party/WebKit/Source/core/loader/LinkLoaderTest.cpp
+++ b/third_party/WebKit/Source/core/loader/LinkLoaderTest.cpp
@@ -18,6 +18,7 @@
 #include "public/platform/WebURLLoaderMockFactory.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include <base/macros.h>
+#include <memory>
 
 namespace blink {
 
@@ -135,7 +136,7 @@
 
     // Test the cases with a single header
     for (const auto& testCase : cases) {
-        OwnPtr<DummyPageHolder> dummyPageHolder = DummyPageHolder::create(IntSize(500, 500));
+        std::unique_ptr<DummyPageHolder> dummyPageHolder = DummyPageHolder::create(IntSize(500, 500));
         dummyPageHolder->frame().settings()->setScriptEnabled(true);
         Persistent<MockLinkLoaderClient> loaderClient = MockLinkLoaderClient::create(testCase.linkLoaderShouldLoadValue);
         LinkLoader* loader = LinkLoader::create(loaderClient.get());
@@ -191,7 +192,7 @@
 
     // Test the cases with a single header
     for (const auto& testCase : cases) {
-        OwnPtr<DummyPageHolder> dummyPageHolder = DummyPageHolder::create(IntSize(500, 500));
+        std::unique_ptr<DummyPageHolder> dummyPageHolder = DummyPageHolder::create(IntSize(500, 500));
         dummyPageHolder->document().settings()->setDNSPrefetchingEnabled(true);
         Persistent<MockLinkLoaderClient> loaderClient = MockLinkLoaderClient::create(testCase.shouldLoad);
         LinkLoader* loader = LinkLoader::create(loaderClient.get());
@@ -227,7 +228,7 @@
 
     // Test the cases with a single header
     for (const auto& testCase : cases) {
-        OwnPtr<DummyPageHolder> dummyPageHolder = DummyPageHolder::create(IntSize(500, 500));
+        std::unique_ptr<DummyPageHolder> dummyPageHolder = DummyPageHolder::create(IntSize(500, 500));
         Persistent<MockLinkLoaderClient> loaderClient = MockLinkLoaderClient::create(testCase.shouldLoad);
         LinkLoader* loader = LinkLoader::create(loaderClient.get());
         KURL hrefURL = KURL(KURL(ParsedURLStringTag(), String("http://example.com")), testCase.href);
diff --git a/third_party/WebKit/Source/core/loader/MixedContentCheckerTest.cpp b/third_party/WebKit/Source/core/loader/MixedContentCheckerTest.cpp
index f6b321589..5d59282 100644
--- a/third_party/WebKit/Source/core/loader/MixedContentCheckerTest.cpp
+++ b/third_party/WebKit/Source/core/loader/MixedContentCheckerTest.cpp
@@ -14,6 +14,7 @@
 #include "testing/gtest/include/gtest/gtest.h"
 #include "wtf/RefPtr.h"
 #include <base/macros.h>
+#include <memory>
 
 namespace blink {
 
@@ -48,7 +49,7 @@
 
 TEST(MixedContentCheckerTest, ContextTypeForInspector)
 {
-    OwnPtr<DummyPageHolder> dummyPageHolder = DummyPageHolder::create(IntSize(1, 1));
+    std::unique_ptr<DummyPageHolder> dummyPageHolder = DummyPageHolder::create(IntSize(1, 1));
     dummyPageHolder->frame().document()->setSecurityOrigin(SecurityOrigin::createFromString("http://example.test"));
 
     ResourceRequest notMixedContent("https://example.test/foo.jpg");
@@ -87,7 +88,7 @@
 TEST(MixedContentCheckerTest, HandleCertificateError)
 {
     MockFrameLoaderClient* client = new MockFrameLoaderClient;
-    OwnPtr<DummyPageHolder> dummyPageHolder = DummyPageHolder::create(IntSize(1, 1), nullptr, client);
+    std::unique_ptr<DummyPageHolder> dummyPageHolder = DummyPageHolder::create(IntSize(1, 1), nullptr, client);
 
     KURL mainResourceUrl(KURL(), "https://example.test");
     KURL displayedUrl(KURL(), "https://example-displayed.test");
diff --git a/third_party/WebKit/Source/core/loader/MockThreadableLoader.h b/third_party/WebKit/Source/core/loader/MockThreadableLoader.h
index dd05e484..4769196 100644
--- a/third_party/WebKit/Source/core/loader/MockThreadableLoader.h
+++ b/third_party/WebKit/Source/core/loader/MockThreadableLoader.h
@@ -7,13 +7,14 @@
 
 #include "core/loader/ThreadableLoader.h"
 #include "testing/gmock/include/gmock/gmock.h"
-#include "wtf/PassOwnPtr.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
 class MockThreadableLoader : public ThreadableLoader {
 public:
-    static PassOwnPtr<MockThreadableLoader> create() { return adoptPtr(new testing::StrictMock<MockThreadableLoader>); }
+    static std::unique_ptr<MockThreadableLoader> create() { return wrapUnique(new testing::StrictMock<MockThreadableLoader>); }
 
     MOCK_METHOD1(start, void(const ResourceRequest&));
     MOCK_METHOD1(overrideTimeout, void(unsigned long));
diff --git a/third_party/WebKit/Source/core/loader/NavigationScheduler.cpp b/third_party/WebKit/Source/core/loader/NavigationScheduler.cpp
index bbb1429..f687976 100644
--- a/third_party/WebKit/Source/core/loader/NavigationScheduler.cpp
+++ b/third_party/WebKit/Source/core/loader/NavigationScheduler.cpp
@@ -55,6 +55,8 @@
 #include "public/platform/WebCachePolicy.h"
 #include "public/platform/WebScheduler.h"
 #include "wtf/CurrentTime.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
@@ -120,11 +122,11 @@
     Document* originDocument() const { return m_originDocument.get(); }
     bool replacesCurrentItem() const { return m_replacesCurrentItem; }
     bool isLocationChange() const { return m_isLocationChange; }
-    PassOwnPtr<UserGestureIndicator> createUserGestureIndicator()
+    std::unique_ptr<UserGestureIndicator> createUserGestureIndicator()
     {
         if (m_wasUserGesture &&  m_userGestureToken)
-            return adoptPtr(new UserGestureIndicator(m_userGestureToken));
-        return adoptPtr(new UserGestureIndicator(DefinitelyNotProcessingUserGesture));
+            return wrapUnique(new UserGestureIndicator(m_userGestureToken));
+        return wrapUnique(new UserGestureIndicator(DefinitelyNotProcessingUserGesture));
     }
 
     DEFINE_INLINE_VIRTUAL_TRACE()
@@ -157,7 +159,7 @@
 
     void fire(LocalFrame* frame) override
     {
-        OwnPtr<UserGestureIndicator> gestureIndicator = createUserGestureIndicator();
+        std::unique_ptr<UserGestureIndicator> gestureIndicator = createUserGestureIndicator();
         FrameLoadRequest request(originDocument(), m_url, "_self", m_shouldCheckMainWorldContentSecurityPolicy);
         request.setReplacesCurrentItem(replacesCurrentItem());
         request.setClientRedirect(ClientRedirectPolicy::ClientRedirect);
@@ -185,7 +187,7 @@
 
     void fire(LocalFrame* frame) override
     {
-        OwnPtr<UserGestureIndicator> gestureIndicator = createUserGestureIndicator();
+        std::unique_ptr<UserGestureIndicator> gestureIndicator = createUserGestureIndicator();
         FrameLoadRequest request(originDocument(), url(), "_self");
         request.setReplacesCurrentItem(replacesCurrentItem());
         if (equalIgnoringFragmentIdentifier(frame->document()->url(), request.resourceRequest().url()))
@@ -224,7 +226,7 @@
 
     void fire(LocalFrame* frame) override
     {
-        OwnPtr<UserGestureIndicator> gestureIndicator = createUserGestureIndicator();
+        std::unique_ptr<UserGestureIndicator> gestureIndicator = createUserGestureIndicator();
         ResourceRequest resourceRequest = frame->loader().resourceRequestForReload(FrameLoadTypeReload, KURL(), ClientRedirectPolicy::ClientRedirect);
         if (resourceRequest.isNull())
             return;
@@ -250,7 +252,7 @@
 
     void fire(LocalFrame* frame) override
     {
-        OwnPtr<UserGestureIndicator> gestureIndicator = createUserGestureIndicator();
+        std::unique_ptr<UserGestureIndicator> gestureIndicator = createUserGestureIndicator();
         SubstituteData substituteData(SharedBuffer::create(), "text/plain", "UTF-8", KURL(), ForceSynchronousLoad);
         FrameLoadRequest request(originDocument(), url(), substituteData);
         request.setReplacesCurrentItem(true);
@@ -275,7 +277,7 @@
 
     void fire(LocalFrame* frame) override
     {
-        OwnPtr<UserGestureIndicator> gestureIndicator = createUserGestureIndicator();
+        std::unique_ptr<UserGestureIndicator> gestureIndicator = createUserGestureIndicator();
         FrameLoadRequest frameRequest = m_submission->createFrameLoadRequest(originDocument());
         frameRequest.setReplacesCurrentItem(replacesCurrentItem());
         maybeLogScheduledNavigationClobber(ScheduledNavigationType::ScheduledFormSubmission, frame, frameRequest, gestureIndicator.get());
diff --git a/third_party/WebKit/Source/core/loader/NavigationScheduler.h b/third_party/WebKit/Source/core/loader/NavigationScheduler.h
index bdb9a25d..cc8f867 100644
--- a/third_party/WebKit/Source/core/loader/NavigationScheduler.h
+++ b/third_party/WebKit/Source/core/loader/NavigationScheduler.h
@@ -37,10 +37,9 @@
 #include "wtf/Forward.h"
 #include "wtf/HashMap.h"
 #include "wtf/Noncopyable.h"
-#include "wtf/OwnPtr.h"
-#include "wtf/PassOwnPtr.h"
 #include "wtf/PassRefPtr.h"
 #include "wtf/text/WTFString.h"
+#include <memory>
 
 namespace blink {
 
@@ -86,7 +85,7 @@
     static bool mustReplaceCurrentItem(LocalFrame* targetFrame);
 
     Member<LocalFrame> m_frame;
-    OwnPtr<CancellableTaskFactory> m_navigateTaskFactory;
+    std::unique_ptr<CancellableTaskFactory> m_navigateTaskFactory;
     Member<ScheduledNavigation> m_redirect;
     WebScheduler::NavigatingFrameType m_frameType; // Exists because we can't deref m_frame in destructor.
 };
diff --git a/third_party/WebKit/Source/core/loader/PingLoader.cpp b/third_party/WebKit/Source/core/loader/PingLoader.cpp
index 9a5050cb3..83ae268e 100644
--- a/third_party/WebKit/Source/core/loader/PingLoader.cpp
+++ b/third_party/WebKit/Source/core/loader/PingLoader.cpp
@@ -54,7 +54,7 @@
 #include "public/platform/WebURLLoader.h"
 #include "public/platform/WebURLRequest.h"
 #include "public/platform/WebURLResponse.h"
-#include "wtf/OwnPtr.h"
+#include "wtf/PtrUtil.h"
 
 namespace blink {
 
@@ -141,7 +141,7 @@
     frame->document()->fetcher()->context().willStartLoadingResource(m_identifier, request, Resource::Image);
     frame->document()->fetcher()->context().dispatchWillSendRequest(m_identifier, request, ResourceResponse(), initiatorInfo);
 
-    m_loader = adoptPtr(Platform::current()->createURLLoader());
+    m_loader = wrapUnique(Platform::current()->createURLLoader());
     ASSERT(m_loader);
     WrappedResourceRequest wrappedRequest(request);
     wrappedRequest.setAllowStoredCredentials(credentialsAllowed == AllowStoredCredentials);
diff --git a/third_party/WebKit/Source/core/loader/PingLoader.h b/third_party/WebKit/Source/core/loader/PingLoader.h
index cd6ba0a..58b1806 100644
--- a/third_party/WebKit/Source/core/loader/PingLoader.h
+++ b/third_party/WebKit/Source/core/loader/PingLoader.h
@@ -41,6 +41,7 @@
 #include "public/platform/WebURLLoaderClient.h"
 #include "wtf/Forward.h"
 #include "wtf/Noncopyable.h"
+#include <memory>
 
 namespace blink {
 
@@ -95,7 +96,7 @@
 
     void didFailLoading(LocalFrame*);
 
-    OwnPtr<WebURLLoader> m_loader;
+    std::unique_ptr<WebURLLoader> m_loader;
     Timer<PingLoader> m_timeout;
     String m_url;
     unsigned long m_identifier;
diff --git a/third_party/WebKit/Source/core/loader/PrerenderHandle.h b/third_party/WebKit/Source/core/loader/PrerenderHandle.h
index 7e432f8..432456d 100644
--- a/third_party/WebKit/Source/core/loader/PrerenderHandle.h
+++ b/third_party/WebKit/Source/core/loader/PrerenderHandle.h
@@ -35,7 +35,6 @@
 #include "platform/heap/Handle.h"
 #include "platform/weborigin/KURL.h"
 #include "wtf/Noncopyable.h"
-#include "wtf/PassOwnPtr.h"
 #include "wtf/PassRefPtr.h"
 
 namespace blink {
diff --git a/third_party/WebKit/Source/core/loader/ProgressTracker.cpp b/third_party/WebKit/Source/core/loader/ProgressTracker.cpp
index 66c8517a..da475fa 100644
--- a/third_party/WebKit/Source/core/loader/ProgressTracker.cpp
+++ b/third_party/WebKit/Source/core/loader/ProgressTracker.cpp
@@ -36,6 +36,7 @@
 #include "platform/Logging.h"
 #include "platform/network/ResourceResponse.h"
 #include "wtf/CurrentTime.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/text/CString.h"
 
 using namespace std;
@@ -168,7 +169,7 @@
         item->bytesReceived = 0;
         item->estimatedLength = estimatedLength;
     } else {
-        m_progressItems.set(identifier, adoptPtr(new ProgressItem(estimatedLength)));
+        m_progressItems.set(identifier, wrapUnique(new ProgressItem(estimatedLength)));
     }
 }
 
diff --git a/third_party/WebKit/Source/core/loader/ProgressTracker.h b/third_party/WebKit/Source/core/loader/ProgressTracker.h
index 705badc..a5198095 100644
--- a/third_party/WebKit/Source/core/loader/ProgressTracker.h
+++ b/third_party/WebKit/Source/core/loader/ProgressTracker.h
@@ -32,7 +32,7 @@
 #include "wtf/Forward.h"
 #include "wtf/HashMap.h"
 #include "wtf/Noncopyable.h"
-#include "wtf/OwnPtr.h"
+#include <memory>
 
 namespace blink {
 
@@ -84,7 +84,7 @@
     bool m_finalProgressChangedSent;
     double m_progressValue;
 
-    HashMap<unsigned long, OwnPtr<ProgressItem>> m_progressItems;
+    HashMap<unsigned long, std::unique_ptr<ProgressItem>> m_progressItems;
 };
 
 } // namespace blink
diff --git a/third_party/WebKit/Source/core/loader/TextResourceDecoderBuilder.cpp b/third_party/WebKit/Source/core/loader/TextResourceDecoderBuilder.cpp
index 655aa28..86189fbc 100644
--- a/third_party/WebKit/Source/core/loader/TextResourceDecoderBuilder.cpp
+++ b/third_party/WebKit/Source/core/loader/TextResourceDecoderBuilder.cpp
@@ -34,6 +34,7 @@
 #include "core/frame/LocalFrame.h"
 #include "core/frame/Settings.h"
 #include "platform/weborigin/SecurityOrigin.h"
+#include <memory>
 
 namespace blink {
 
@@ -128,7 +129,7 @@
 }
 
 
-inline PassOwnPtr<TextResourceDecoder> TextResourceDecoderBuilder::createDecoderInstance(Document* document)
+inline std::unique_ptr<TextResourceDecoder> TextResourceDecoderBuilder::createDecoderInstance(Document* document)
 {
     const WTF::TextEncoding encodingFromDomain = getEncodingFromDomain(document->url());
     if (LocalFrame* frame = document->frame()) {
@@ -167,9 +168,9 @@
     }
 }
 
-PassOwnPtr<TextResourceDecoder> TextResourceDecoderBuilder::buildFor(Document* document)
+std::unique_ptr<TextResourceDecoder> TextResourceDecoderBuilder::buildFor(Document* document)
 {
-    OwnPtr<TextResourceDecoder> decoder = createDecoderInstance(document);
+    std::unique_ptr<TextResourceDecoder> decoder = createDecoderInstance(document);
     setupEncoding(decoder.get(), document);
     return decoder;
 }
diff --git a/third_party/WebKit/Source/core/loader/TextResourceDecoderBuilder.h b/third_party/WebKit/Source/core/loader/TextResourceDecoderBuilder.h
index ba9d1fc..37f32d5 100644
--- a/third_party/WebKit/Source/core/loader/TextResourceDecoderBuilder.h
+++ b/third_party/WebKit/Source/core/loader/TextResourceDecoderBuilder.h
@@ -35,6 +35,7 @@
 #include "wtf/Allocator.h"
 #include "wtf/PassRefPtr.h"
 #include "wtf/text/WTFString.h"
+#include <memory>
 
 namespace blink {
 
@@ -47,7 +48,7 @@
     TextResourceDecoderBuilder(const AtomicString& mimeType, const AtomicString& encoding);
     ~TextResourceDecoderBuilder();
 
-    PassOwnPtr<TextResourceDecoder> buildFor(Document*);
+    std::unique_ptr<TextResourceDecoder> buildFor(Document*);
 
     const AtomicString& mimeType() const { return m_mimeType; }
     const AtomicString& encoding() const { return m_encoding; }
@@ -55,7 +56,7 @@
     void clear();
 
 private:
-    PassOwnPtr<TextResourceDecoder> createDecoderInstance(Document*);
+    std::unique_ptr<TextResourceDecoder> createDecoderInstance(Document*);
     void setupEncoding(TextResourceDecoder*, Document*);
 
     AtomicString m_mimeType;
diff --git a/third_party/WebKit/Source/core/loader/TextResourceDecoderBuilderTest.cpp b/third_party/WebKit/Source/core/loader/TextResourceDecoderBuilderTest.cpp
index eaf7950b..611d4674 100644
--- a/third_party/WebKit/Source/core/loader/TextResourceDecoderBuilderTest.cpp
+++ b/third_party/WebKit/Source/core/loader/TextResourceDecoderBuilderTest.cpp
@@ -6,12 +6,13 @@
 
 #include "core/testing/DummyPageHolder.h"
 #include "testing/gtest/include/gtest/gtest.h"
+#include <memory>
 
 namespace blink {
 
 static const WTF::TextEncoding defaultEncodingForURL(const char* url)
 {
-    OwnPtr<DummyPageHolder> pageHolder = DummyPageHolder::create(IntSize(0, 0));
+    std::unique_ptr<DummyPageHolder> pageHolder = DummyPageHolder::create(IntSize(0, 0));
     Document& document = pageHolder->document();
     document.setURL(KURL(KURL(), url));
     TextResourceDecoderBuilder decoderBuilder("text/html", nullAtom);
diff --git a/third_party/WebKit/Source/core/loader/TextTrackLoader.h b/third_party/WebKit/Source/core/loader/TextTrackLoader.h
index 3ec27cd2..6d7665c 100644
--- a/third_party/WebKit/Source/core/loader/TextTrackLoader.h
+++ b/third_party/WebKit/Source/core/loader/TextTrackLoader.h
@@ -32,7 +32,6 @@
 #include "platform/CrossOriginAttributeValue.h"
 #include "platform/Timer.h"
 #include "platform/heap/Handle.h"
-#include "wtf/OwnPtr.h"
 
 namespace blink {
 
diff --git a/third_party/WebKit/Source/core/loader/ThreadableLoader.cpp b/third_party/WebKit/Source/core/loader/ThreadableLoader.cpp
index 325030f..16f78451 100644
--- a/third_party/WebKit/Source/core/loader/ThreadableLoader.cpp
+++ b/third_party/WebKit/Source/core/loader/ThreadableLoader.cpp
@@ -37,10 +37,11 @@
 #include "core/loader/WorkerThreadableLoader.h"
 #include "core/workers/WorkerGlobalScope.h"
 #include "core/workers/WorkerThread.h"
+#include <memory>
 
 namespace blink {
 
-PassOwnPtr<ThreadableLoader> ThreadableLoader::create(ExecutionContext& context, ThreadableLoaderClient* client, const ThreadableLoaderOptions& options, const ResourceLoaderOptions& resourceLoaderOptions)
+std::unique_ptr<ThreadableLoader> ThreadableLoader::create(ExecutionContext& context, ThreadableLoaderClient* client, const ThreadableLoaderOptions& options, const ResourceLoaderOptions& resourceLoaderOptions)
 {
     ASSERT(client);
 
diff --git a/third_party/WebKit/Source/core/loader/ThreadableLoader.h b/third_party/WebKit/Source/core/loader/ThreadableLoader.h
index fc360b1..3d2b2d2 100644
--- a/third_party/WebKit/Source/core/loader/ThreadableLoader.h
+++ b/third_party/WebKit/Source/core/loader/ThreadableLoader.h
@@ -36,7 +36,7 @@
 #include "platform/CrossThreadCopier.h"
 #include "wtf/Allocator.h"
 #include "wtf/Noncopyable.h"
-#include "wtf/PassOwnPtr.h"
+#include <memory>
 
 namespace blink {
 
@@ -166,8 +166,8 @@
     // ThreadableLoaderClient methods:
     // - may call cancel()
     // - can destroy the ThreadableLoader instance in them (by clearing
-    //   OwnPtr<ThreadableLoader>).
-    static PassOwnPtr<ThreadableLoader> create(ExecutionContext&, ThreadableLoaderClient*, const ThreadableLoaderOptions&, const ResourceLoaderOptions&);
+    //   std::unique_ptr<ThreadableLoader>).
+    static std::unique_ptr<ThreadableLoader> create(ExecutionContext&, ThreadableLoaderClient*, const ThreadableLoaderOptions&, const ResourceLoaderOptions&);
 
     // The methods on the ThreadableLoaderClient passed on create() call
     // may be called synchronous to start() call.
diff --git a/third_party/WebKit/Source/core/loader/ThreadableLoaderClient.h b/third_party/WebKit/Source/core/loader/ThreadableLoaderClient.h
index 2d641cdc..a159447 100644
--- a/third_party/WebKit/Source/core/loader/ThreadableLoaderClient.h
+++ b/third_party/WebKit/Source/core/loader/ThreadableLoaderClient.h
@@ -35,7 +35,7 @@
 #include "platform/heap/Handle.h"
 #include "public/platform/WebDataConsumerHandle.h"
 #include "wtf/Noncopyable.h"
-#include "wtf/PassOwnPtr.h"
+#include <memory>
 
 namespace blink {
 
@@ -48,7 +48,7 @@
 public:
     virtual void didSendData(unsigned long long /*bytesSent*/, unsigned long long /*totalBytesToBeSent*/) { }
 
-    virtual void didReceiveResponse(unsigned long /*identifier*/, const ResourceResponse&, PassOwnPtr<WebDataConsumerHandle>) { }
+    virtual void didReceiveResponse(unsigned long /*identifier*/, const ResourceResponse&, std::unique_ptr<WebDataConsumerHandle>) { }
     virtual void didReceiveData(const char*, unsigned /*dataLength*/) { }
     virtual void didReceiveCachedMetadata(const char*, int /*dataLength*/) { }
     virtual void didFinishLoading(unsigned long /*identifier*/, double /*finishTime*/) { }
diff --git a/third_party/WebKit/Source/core/loader/ThreadableLoaderClientWrapper.h b/third_party/WebKit/Source/core/loader/ThreadableLoaderClientWrapper.h
index 4de6111..e70a1d6 100644
--- a/third_party/WebKit/Source/core/loader/ThreadableLoaderClientWrapper.h
+++ b/third_party/WebKit/Source/core/loader/ThreadableLoaderClientWrapper.h
@@ -35,11 +35,11 @@
 #include "platform/network/ResourceResponse.h"
 #include "platform/network/ResourceTimingInfo.h"
 #include "wtf/Noncopyable.h"
-#include "wtf/PassOwnPtr.h"
 #include "wtf/PassRefPtr.h"
 #include "wtf/ThreadSafeRefCounted.h"
 #include "wtf/Threading.h"
 #include "wtf/Vector.h"
+#include <memory>
 
 namespace blink {
 
@@ -83,7 +83,7 @@
             m_client->didSendData(bytesSent, totalBytesToBeSent);
     }
 
-    void didReceiveResponse(unsigned long identifier, PassOwnPtr<CrossThreadResourceResponseData> responseData, PassOwnPtr<WebDataConsumerHandle> handle)
+    void didReceiveResponse(unsigned long identifier, std::unique_ptr<CrossThreadResourceResponseData> responseData, std::unique_ptr<WebDataConsumerHandle> handle)
     {
         ResourceResponse response(responseData.get());
 
@@ -91,7 +91,7 @@
             m_client->didReceiveResponse(identifier, response, std::move(handle));
     }
 
-    void didReceiveData(PassOwnPtr<Vector<char>> data)
+    void didReceiveData(std::unique_ptr<Vector<char>> data)
     {
         RELEASE_ASSERT(data->size() <= std::numeric_limits<unsigned>::max());
 
@@ -99,7 +99,7 @@
             m_client->didReceiveData(data->data(), data->size());
     }
 
-    void didReceiveCachedMetadata(PassOwnPtr<Vector<char>> data)
+    void didReceiveCachedMetadata(std::unique_ptr<Vector<char>> data)
     {
         if (m_client)
             m_client->didReceiveCachedMetadata(data->data(), data->size());
@@ -139,9 +139,9 @@
             m_client->didDownloadData(dataLength);
     }
 
-    void didReceiveResourceTiming(PassOwnPtr<CrossThreadResourceTimingInfoData> timingData)
+    void didReceiveResourceTiming(std::unique_ptr<CrossThreadResourceTimingInfoData> timingData)
     {
-        OwnPtr<ResourceTimingInfo> info(ResourceTimingInfo::adopt(std::move(timingData)));
+        std::unique_ptr<ResourceTimingInfo> info(ResourceTimingInfo::adopt(std::move(timingData)));
 
         if (m_resourceTimingClient)
             m_resourceTimingClient->didReceiveResourceTiming(*info);
diff --git a/third_party/WebKit/Source/core/loader/ThreadableLoaderTest.cpp b/third_party/WebKit/Source/core/loader/ThreadableLoaderTest.cpp
index b2a664b6..39e72b0f 100644
--- a/third_party/WebKit/Source/core/loader/ThreadableLoaderTest.cpp
+++ b/third_party/WebKit/Source/core/loader/ThreadableLoaderTest.cpp
@@ -30,9 +30,9 @@
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "wtf/Assertions.h"
-#include "wtf/OwnPtr.h"
-#include "wtf/PassOwnPtr.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/RefPtr.h"
+#include <memory>
 
 namespace blink {
 
@@ -47,13 +47,13 @@
 
 class MockThreadableLoaderClient : public ThreadableLoaderClient {
 public:
-    static PassOwnPtr<MockThreadableLoaderClient> create()
+    static std::unique_ptr<MockThreadableLoaderClient> create()
     {
-        return adoptPtr(new ::testing::StrictMock<MockThreadableLoaderClient>);
+        return wrapUnique(new ::testing::StrictMock<MockThreadableLoaderClient>);
     }
     MOCK_METHOD2(didSendData, void(unsigned long long, unsigned long long));
     MOCK_METHOD3(didReceiveResponseMock, void(unsigned long, const ResourceResponse&, WebDataConsumerHandle*));
-    void didReceiveResponse(unsigned long identifier, const ResourceResponse& response, PassOwnPtr<WebDataConsumerHandle> handle)
+    void didReceiveResponse(unsigned long identifier, const ResourceResponse& response, std::unique_ptr<WebDataConsumerHandle> handle)
     {
         didReceiveResponseMock(identifier, response, handle.get());
     }
@@ -146,9 +146,9 @@
 private:
     Document& document() { return m_dummyPageHolder->document(); }
 
-    OwnPtr<DummyPageHolder> m_dummyPageHolder;
+    std::unique_ptr<DummyPageHolder> m_dummyPageHolder;
     Checkpoint m_checkpoint;
-    OwnPtr<DocumentThreadableLoader> m_loader;
+    std::unique_ptr<DocumentThreadableLoader> m_loader;
 };
 
 class WorkerThreadableLoaderTestHelper : public ThreadableLoaderTestHelper, public WorkerLoaderProxyProvider {
@@ -160,7 +160,7 @@
 
     void createLoader(ThreadableLoaderClient* client, CrossOriginRequestPolicy crossOriginRequestPolicy) override
     {
-        OwnPtr<WaitableEvent> completionEvent = adoptPtr(new WaitableEvent());
+        std::unique_ptr<WaitableEvent> completionEvent = wrapUnique(new WaitableEvent());
         postTaskToWorkerGlobalScope(createCrossThreadTask(
             &WorkerThreadableLoaderTestHelper::workerCreateLoader,
             AllowCrossThreadAccess(this),
@@ -172,7 +172,7 @@
 
     void startLoader(const ResourceRequest& request) override
     {
-        OwnPtr<WaitableEvent> completionEvent = adoptPtr(new WaitableEvent());
+        std::unique_ptr<WaitableEvent> completionEvent = wrapUnique(new WaitableEvent());
         postTaskToWorkerGlobalScope(createCrossThreadTask(
             &WorkerThreadableLoaderTestHelper::workerStartLoader,
             AllowCrossThreadAccess(this),
@@ -206,7 +206,7 @@
     {
         testing::runPendingTasks();
 
-        OwnPtr<WaitableEvent> completionEvent = adoptPtr(new WaitableEvent());
+        std::unique_ptr<WaitableEvent> completionEvent = wrapUnique(new WaitableEvent());
         postTaskToWorkerGlobalScope(createCrossThreadTask(
             &WorkerThreadableLoaderTestHelper::workerCallCheckpoint,
             AllowCrossThreadAccess(this),
@@ -217,9 +217,9 @@
 
     void onSetUp() override
     {
-        m_mockWorkerReportingProxy = adoptPtr(new MockWorkerReportingProxy());
+        m_mockWorkerReportingProxy = wrapUnique(new MockWorkerReportingProxy());
         m_securityOrigin = document().getSecurityOrigin();
-        m_workerThread = adoptPtr(new WorkerThreadForTest(
+        m_workerThread = wrapUnique(new WorkerThreadForTest(
             this,
             *m_mockWorkerReportingProxy));
 
@@ -276,7 +276,7 @@
         event->signal();
     }
 
-    void workerStartLoader(WaitableEvent* event, PassOwnPtr<CrossThreadResourceRequestData> requestData)
+    void workerStartLoader(WaitableEvent* event, std::unique_ptr<CrossThreadResourceRequestData> requestData)
     {
         ASSERT(m_workerThread);
         ASSERT(m_workerThread->isCurrentThread());
@@ -310,13 +310,13 @@
     }
 
     RefPtr<SecurityOrigin> m_securityOrigin;
-    OwnPtr<MockWorkerReportingProxy> m_mockWorkerReportingProxy;
-    OwnPtr<WorkerThreadForTest> m_workerThread;
+    std::unique_ptr<MockWorkerReportingProxy> m_mockWorkerReportingProxy;
+    std::unique_ptr<WorkerThreadForTest> m_workerThread;
 
-    OwnPtr<DummyPageHolder> m_dummyPageHolder;
+    std::unique_ptr<DummyPageHolder> m_dummyPageHolder;
     Checkpoint m_checkpoint;
     // |m_loader| must be touched only from the worker thread only.
-    OwnPtr<ThreadableLoader> m_loader;
+    std::unique_ptr<ThreadableLoader> m_loader;
 };
 
 class ThreadableLoaderTest : public ::testing::TestWithParam<ThreadableLoaderToTest> {
@@ -325,10 +325,10 @@
     {
         switch (GetParam()) {
         case DocumentThreadableLoaderTest:
-            m_helper = adoptPtr(new DocumentThreadableLoaderTestHelper);
+            m_helper = wrapUnique(new DocumentThreadableLoaderTestHelper);
             break;
         case WorkerThreadableLoaderTest:
-            m_helper = adoptPtr(new WorkerThreadableLoaderTestHelper);
+            m_helper = wrapUnique(new WorkerThreadableLoaderTestHelper);
             break;
         }
     }
@@ -424,8 +424,8 @@
         URLTestHelpers::registerMockedURLLoadWithCustomResponse(url, "fox-null-terminated.html", "", response);
     }
 
-    OwnPtr<MockThreadableLoaderClient> m_client;
-    OwnPtr<ThreadableLoaderTestHelper> m_helper;
+    std::unique_ptr<MockThreadableLoaderClient> m_client;
+    std::unique_ptr<ThreadableLoaderTestHelper> m_helper;
 };
 
 INSTANTIATE_TEST_CASE_P(Document,
diff --git a/third_party/WebKit/Source/core/loader/WorkerThreadableLoader.cpp b/third_party/WebKit/Source/core/loader/WorkerThreadableLoader.cpp
index 796d3fe..e90b4c5 100644
--- a/third_party/WebKit/Source/core/loader/WorkerThreadableLoader.cpp
+++ b/third_party/WebKit/Source/core/loader/WorkerThreadableLoader.cpp
@@ -46,14 +46,15 @@
 #include "platform/network/ResourceTimingInfo.h"
 #include "platform/weborigin/SecurityPolicy.h"
 #include "public/platform/Platform.h"
-#include "wtf/OwnPtr.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/Vector.h"
+#include <memory>
 
 namespace blink {
 
-static PassOwnPtr<Vector<char>> createVectorFromMemoryRegion(const char* data, unsigned dataLength)
+static std::unique_ptr<Vector<char>> createVectorFromMemoryRegion(const char* data, unsigned dataLength)
 {
-    OwnPtr<Vector<char>> buffer = adoptPtr(new Vector<char>(dataLength));
+    std::unique_ptr<Vector<char>> buffer = wrapUnique(new Vector<char>(dataLength));
     memcpy(buffer->data(), data, dataLength);
     return buffer;
 }
@@ -72,7 +73,7 @@
 
 void WorkerThreadableLoader::loadResourceSynchronously(WorkerGlobalScope& workerGlobalScope, const ResourceRequest& request, ThreadableLoaderClient& client, const ThreadableLoaderOptions& options, const ResourceLoaderOptions& resourceLoaderOptions)
 {
-    OwnPtr<WorkerThreadableLoader> loader = adoptPtr(new WorkerThreadableLoader(workerGlobalScope, &client, options, resourceLoaderOptions, LoadSynchronously));
+    std::unique_ptr<WorkerThreadableLoader> loader = wrapUnique(new WorkerThreadableLoader(workerGlobalScope, &client, options, resourceLoaderOptions, LoadSynchronously));
     loader->start(request);
 }
 
@@ -133,7 +134,7 @@
     ASSERT(m_mainThreadLoader);
 }
 
-void WorkerThreadableLoader::MainThreadBridgeBase::mainThreadStart(PassOwnPtr<CrossThreadResourceRequestData> requestData)
+void WorkerThreadableLoader::MainThreadBridgeBase::mainThreadStart(std::unique_ptr<CrossThreadResourceRequestData> requestData)
 {
     ASSERT(isMainThread());
     ASSERT(m_mainThreadLoader);
@@ -216,7 +217,7 @@
     forwardTaskToWorker(createCrossThreadTask(&ThreadableLoaderClientWrapper::didSendData, m_workerClientWrapper, bytesSent, totalBytesToBeSent));
 }
 
-void WorkerThreadableLoader::MainThreadBridgeBase::didReceiveResponse(unsigned long identifier, const ResourceResponse& response, PassOwnPtr<WebDataConsumerHandle> handle)
+void WorkerThreadableLoader::MainThreadBridgeBase::didReceiveResponse(unsigned long identifier, const ResourceResponse& response, std::unique_ptr<WebDataConsumerHandle> handle)
 {
     forwardTaskToWorker(createCrossThreadTask(&ThreadableLoaderClientWrapper::didReceiveResponse, m_workerClientWrapper, identifier, response, passed(std::move(handle))));
 }
@@ -304,7 +305,7 @@
 void WorkerThreadableLoader::MainThreadSyncBridge::start(const ResourceRequest& request, const WorkerGlobalScope& workerGlobalScope)
 {
     WaitableEvent* terminationEvent = workerGlobalScope.thread()->terminationEvent();
-    m_loaderDoneEvent = adoptPtr(new WaitableEvent());
+    m_loaderDoneEvent = wrapUnique(new WaitableEvent());
 
     startInMainThread(request, workerGlobalScope);
 
diff --git a/third_party/WebKit/Source/core/loader/WorkerThreadableLoader.h b/third_party/WebKit/Source/core/loader/WorkerThreadableLoader.h
index e30a4bd..d841549 100644
--- a/third_party/WebKit/Source/core/loader/WorkerThreadableLoader.h
+++ b/third_party/WebKit/Source/core/loader/WorkerThreadableLoader.h
@@ -37,14 +37,14 @@
 #include "platform/heap/Handle.h"
 #include "platform/weborigin/Referrer.h"
 #include "wtf/Functional.h"
-#include "wtf/OwnPtr.h"
-#include "wtf/PassOwnPtr.h"
 #include "wtf/PassRefPtr.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/RefPtr.h"
 #include "wtf/Threading.h"
 #include "wtf/ThreadingPrimitives.h"
 #include "wtf/Vector.h"
 #include "wtf/text/WTFString.h"
+#include <memory>
 
 namespace blink {
 
@@ -61,9 +61,9 @@
     USING_FAST_MALLOC(WorkerThreadableLoader);
 public:
     static void loadResourceSynchronously(WorkerGlobalScope&, const ResourceRequest&, ThreadableLoaderClient&, const ThreadableLoaderOptions&, const ResourceLoaderOptions&);
-    static PassOwnPtr<WorkerThreadableLoader> create(WorkerGlobalScope& workerGlobalScope, ThreadableLoaderClient* client, const ThreadableLoaderOptions& options, const ResourceLoaderOptions& resourceLoaderOptions)
+    static std::unique_ptr<WorkerThreadableLoader> create(WorkerGlobalScope& workerGlobalScope, ThreadableLoaderClient* client, const ThreadableLoaderOptions& options, const ResourceLoaderOptions& resourceLoaderOptions)
     {
-        return adoptPtr(new WorkerThreadableLoader(workerGlobalScope, client, options, resourceLoaderOptions, LoadAsynchronously));
+        return wrapUnique(new WorkerThreadableLoader(workerGlobalScope, client, options, resourceLoaderOptions, LoadAsynchronously));
     }
 
     ~WorkerThreadableLoader() override;
@@ -110,7 +110,7 @@
 
         // All executed on the main thread.
         void didSendData(unsigned long long bytesSent, unsigned long long totalBytesToBeSent) final;
-        void didReceiveResponse(unsigned long identifier, const ResourceResponse&, PassOwnPtr<WebDataConsumerHandle>) final;
+        void didReceiveResponse(unsigned long identifier, const ResourceResponse&, std::unique_ptr<WebDataConsumerHandle>) final;
         void didReceiveData(const char*, unsigned dataLength) final;
         void didDownloadData(int dataLength) final;
         void didReceiveCachedMetadata(const char*, int dataLength) final;
@@ -142,13 +142,13 @@
 
         // All executed on the main thread.
         void mainThreadCreateLoader(ThreadableLoaderOptions, ResourceLoaderOptions, ExecutionContext*);
-        void mainThreadStart(PassOwnPtr<CrossThreadResourceRequestData>);
+        void mainThreadStart(std::unique_ptr<CrossThreadResourceRequestData>);
         void mainThreadDestroy(ExecutionContext*);
         void mainThreadOverrideTimeout(unsigned long timeoutMilliseconds, ExecutionContext*);
         void mainThreadCancel(ExecutionContext*);
 
         // Only to be used on the main thread.
-        OwnPtr<ThreadableLoader> m_mainThreadLoader;
+        std::unique_ptr<ThreadableLoader> m_mainThreadLoader;
 
         // ThreadableLoaderClientWrapper is to be used on the worker context thread.
         // The ref counting is done on either thread:
@@ -185,7 +185,7 @@
         void forwardTaskToWorkerOnLoaderDone(std::unique_ptr<ExecutionContextTask>) override;
 
         bool m_done;
-        OwnPtr<WaitableEvent> m_loaderDoneEvent;
+        std::unique_ptr<WaitableEvent> m_loaderDoneEvent;
         // Thread-safety: |m_clientTasks| can be written (i.e. Closures are added)
         // on the main thread only before |m_loaderDoneEvent| is signaled and can be read
         // on the worker context thread only after |m_loaderDoneEvent| is signaled.
diff --git a/third_party/WebKit/Source/core/loader/appcache/ApplicationCacheHost.h b/third_party/WebKit/Source/core/loader/appcache/ApplicationCacheHost.h
index 524e86ee..ad1267b 100644
--- a/third_party/WebKit/Source/core/loader/appcache/ApplicationCacheHost.h
+++ b/third_party/WebKit/Source/core/loader/appcache/ApplicationCacheHost.h
@@ -35,8 +35,8 @@
 #include "platform/weborigin/KURL.h"
 #include "public/platform/WebApplicationCacheHostClient.h"
 #include "wtf/Allocator.h"
-#include "wtf/OwnPtr.h"
 #include "wtf/Vector.h"
+#include <memory>
 
 namespace blink {
     class ApplicationCache;
@@ -175,7 +175,7 @@
 
         void dispatchDOMEvent(EventID, int progressTotal, int progressDone, WebApplicationCacheHost::ErrorReason, const String& errorURL, int errorStatus, const String& errorMessage);
 
-        OwnPtr<WebApplicationCacheHost> m_host;
+        std::unique_ptr<WebApplicationCacheHost> m_host;
     };
 
 }  // namespace blink
diff --git a/third_party/WebKit/Source/core/offscreencanvas/OffscreenCanvas.cpp b/third_party/WebKit/Source/core/offscreencanvas/OffscreenCanvas.cpp
index b10144a..ddd9976 100644
--- a/third_party/WebKit/Source/core/offscreencanvas/OffscreenCanvas.cpp
+++ b/third_party/WebKit/Source/core/offscreencanvas/OffscreenCanvas.cpp
@@ -9,6 +9,7 @@
 #include "core/html/canvas/CanvasRenderingContext.h"
 #include "core/html/canvas/CanvasRenderingContextFactory.h"
 #include "wtf/MathExtras.h"
+#include <memory>
 
 namespace blink {
 
@@ -95,7 +96,7 @@
     return renderingContextFactories()[type].get();
 }
 
-void OffscreenCanvas::registerRenderingContextFactory(PassOwnPtr<CanvasRenderingContextFactory> renderingContextFactory)
+void OffscreenCanvas::registerRenderingContextFactory(std::unique_ptr<CanvasRenderingContextFactory> renderingContextFactory)
 {
     CanvasRenderingContext::ContextType type = renderingContextFactory->getContextType();
     ASSERT(type < CanvasRenderingContext::ContextTypeCount);
diff --git a/third_party/WebKit/Source/core/offscreencanvas/OffscreenCanvas.h b/third_party/WebKit/Source/core/offscreencanvas/OffscreenCanvas.h
index f6e592a7..7025234c 100644
--- a/third_party/WebKit/Source/core/offscreencanvas/OffscreenCanvas.h
+++ b/third_party/WebKit/Source/core/offscreencanvas/OffscreenCanvas.h
@@ -11,6 +11,7 @@
 #include "core/html/HTMLCanvasElement.h"
 #include "platform/geometry/IntSize.h"
 #include "platform/heap/Handle.h"
+#include <memory>
 
 namespace blink {
 
@@ -41,7 +42,7 @@
     CanvasRenderingContext* getCanvasRenderingContext(ScriptState*, const String&, const CanvasContextCreationAttributes&);
     CanvasRenderingContext* renderingContext() { return m_context; }
 
-    static void registerRenderingContextFactory(PassOwnPtr<CanvasRenderingContextFactory>);
+    static void registerRenderingContextFactory(std::unique_ptr<CanvasRenderingContextFactory>);
 
     bool originClean() const;
     void setOriginTainted() { m_originClean = false; }
@@ -51,7 +52,7 @@
 private:
     explicit OffscreenCanvas(const IntSize&);
 
-    using ContextFactoryVector = Vector<OwnPtr<CanvasRenderingContextFactory>>;
+    using ContextFactoryVector = Vector<std::unique_ptr<CanvasRenderingContextFactory>>;
     static ContextFactoryVector& renderingContextFactories();
     static CanvasRenderingContextFactory* getRenderingContextFactory(int);
 
diff --git a/third_party/WebKit/Source/core/origin_trials/OriginTrialContextTest.cpp b/third_party/WebKit/Source/core/origin_trials/OriginTrialContextTest.cpp
index 6029493..5d37016 100644
--- a/third_party/WebKit/Source/core/origin_trials/OriginTrialContextTest.cpp
+++ b/third_party/WebKit/Source/core/origin_trials/OriginTrialContextTest.cpp
@@ -18,7 +18,9 @@
 #include "public/platform/WebOriginTrialTokenStatus.h"
 #include "public/platform/WebTrialTokenValidator.h"
 #include "testing/gtest/include/gtest/gtest.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/Vector.h"
+#include <memory>
 
 namespace blink {
 namespace {
@@ -79,7 +81,7 @@
     OriginTrialContextTest()
         : m_frameworkWasEnabled(RuntimeEnabledFeatures::originTrialsEnabled())
         , m_executionContext(new NullExecutionContext())
-        , m_tokenValidator(adoptPtr(new MockTokenValidator()))
+        , m_tokenValidator(wrapUnique(new MockTokenValidator()))
         , m_originTrialContext(new OriginTrialContext(m_executionContext.get(), m_tokenValidator.get()))
         , m_histogramTester(new HistogramTester())
     {
@@ -139,7 +141,7 @@
 private:
     const bool m_frameworkWasEnabled;
     Persistent<NullExecutionContext> m_executionContext;
-    OwnPtr<MockTokenValidator> m_tokenValidator;
+    std::unique_ptr<MockTokenValidator> m_tokenValidator;
     Persistent<OriginTrialContext> m_originTrialContext;
     std::unique_ptr<HistogramTester> m_histogramTester;
 };
diff --git a/third_party/WebKit/Source/core/page/AutoscrollController.h b/third_party/WebKit/Source/core/page/AutoscrollController.h
index 794a460..3c19a2ee 100644
--- a/third_party/WebKit/Source/core/page/AutoscrollController.h
+++ b/third_party/WebKit/Source/core/page/AutoscrollController.h
@@ -29,7 +29,6 @@
 #include "core/CoreExport.h"
 #include "platform/geometry/IntPoint.h"
 #include "platform/heap/Handle.h"
-#include "wtf/PassOwnPtr.h"
 
 namespace blink {
 
diff --git a/third_party/WebKit/Source/core/page/ChromeClient.h b/third_party/WebKit/Source/core/page/ChromeClient.h
index 7d5752ce..6f55c92a 100644
--- a/third_party/WebKit/Source/core/page/ChromeClient.h
+++ b/third_party/WebKit/Source/core/page/ChromeClient.h
@@ -39,8 +39,8 @@
 #include "public/platform/WebEventListenerProperties.h"
 #include "public/platform/WebFocusType.h"
 #include "wtf/Forward.h"
-#include "wtf/PassOwnPtr.h"
 #include "wtf/Vector.h"
+#include <memory>
 
 namespace blink {
 
@@ -279,7 +279,7 @@
     // that this is comprehensive.
     virtual void didObserveNonGetFetchFromScript() const {}
 
-    virtual PassOwnPtr<WebFrameScheduler> createFrameScheduler(BlameContext*) = 0;
+    virtual std::unique_ptr<WebFrameScheduler> createFrameScheduler(BlameContext*) = 0;
 
     // Returns the time of the beginning of the last beginFrame, in seconds, if any, and 0.0 otherwise.
     virtual double lastFrameTimeMonotonic() const { return 0.0; }
diff --git a/third_party/WebKit/Source/core/page/ContextMenuController.cpp b/third_party/WebKit/Source/core/page/ContextMenuController.cpp
index d388d1e..97f5b89 100644
--- a/third_party/WebKit/Source/core/page/ContextMenuController.cpp
+++ b/third_party/WebKit/Source/core/page/ContextMenuController.cpp
@@ -39,6 +39,8 @@
 #include "core/page/CustomContextMenuProvider.h"
 #include "platform/ContextMenu.h"
 #include "platform/ContextMenuItem.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
@@ -144,7 +146,7 @@
     showContextMenu(nullptr);
 }
 
-PassOwnPtr<ContextMenu> ContextMenuController::createContextMenu(Event* event)
+std::unique_ptr<ContextMenu> ContextMenuController::createContextMenu(Event* event)
 {
     ASSERT(event);
 
@@ -155,7 +157,7 @@
     return createContextMenu(event->target()->toNode()->document().frame(), mouseEvent->absoluteLocation());
 }
 
-PassOwnPtr<ContextMenu> ContextMenuController::createContextMenu(LocalFrame* frame, const LayoutPoint& location)
+std::unique_ptr<ContextMenu> ContextMenuController::createContextMenu(LocalFrame* frame, const LayoutPoint& location)
 {
     HitTestRequest::HitTestRequestType type = HitTestRequest::ReadOnly | HitTestRequest::Active;
     HitTestResult result(type, location);
@@ -168,7 +170,7 @@
 
     m_hitTestResult = result;
 
-    return adoptPtr(new ContextMenu);
+    return wrapUnique(new ContextMenu);
 }
 
 void ContextMenuController::showContextMenu(Event* event)
diff --git a/third_party/WebKit/Source/core/page/ContextMenuController.h b/third_party/WebKit/Source/core/page/ContextMenuController.h
index fadbade..3f62e0a 100644
--- a/third_party/WebKit/Source/core/page/ContextMenuController.h
+++ b/third_party/WebKit/Source/core/page/ContextMenuController.h
@@ -30,9 +30,9 @@
 #include "core/layout/HitTestResult.h"
 #include "platform/heap/Handle.h"
 #include "wtf/Noncopyable.h"
-#include "wtf/OwnPtr.h"
 #include "wtf/PassRefPtr.h"
 #include "wtf/RefPtr.h"
+#include <memory>
 
 namespace blink {
 
@@ -68,13 +68,13 @@
 private:
     ContextMenuController(Page*, ContextMenuClient*);
 
-    PassOwnPtr<ContextMenu> createContextMenu(Event*);
-    PassOwnPtr<ContextMenu> createContextMenu(LocalFrame*, const LayoutPoint&);
+    std::unique_ptr<ContextMenu> createContextMenu(Event*);
+    std::unique_ptr<ContextMenu> createContextMenu(LocalFrame*, const LayoutPoint&);
     void populateCustomContextMenu(const Event&);
     void showContextMenu(Event*);
 
     ContextMenuClient* m_client;
-    OwnPtr<ContextMenu> m_contextMenu;
+    std::unique_ptr<ContextMenu> m_contextMenu;
     Member<ContextMenuProvider> m_menuProvider;
     HitTestResult m_hitTestResult;
 };
diff --git a/third_party/WebKit/Source/core/page/ContextMenuControllerTest.cpp b/third_party/WebKit/Source/core/page/ContextMenuControllerTest.cpp
index f6270fd0..752ed69 100644
--- a/third_party/WebKit/Source/core/page/ContextMenuControllerTest.cpp
+++ b/third_party/WebKit/Source/core/page/ContextMenuControllerTest.cpp
@@ -12,7 +12,7 @@
 #include "core/testing/DummyPageHolder.h"
 #include "platform/ContextMenu.h"
 #include "testing/gtest/include/gtest/gtest.h"
-#include "wtf/OwnPtr.h"
+#include <memory>
 
 namespace blink {
 
@@ -32,7 +32,7 @@
     }
 
 private:
-    OwnPtr<DummyPageHolder> m_pageHolder;
+    std::unique_ptr<DummyPageHolder> m_pageHolder;
 };
 
 TEST_F(ContextMenuControllerTest, TestCustomMenu)
diff --git a/third_party/WebKit/Source/core/page/DragController.cpp b/third_party/WebKit/Source/core/page/DragController.cpp
index 04f89281..c6cae63 100644
--- a/third_party/WebKit/Source/core/page/DragController.cpp
+++ b/third_party/WebKit/Source/core/page/DragController.cpp
@@ -83,9 +83,8 @@
 #include "public/platform/WebScreenInfo.h"
 #include "wtf/Assertions.h"
 #include "wtf/CurrentTime.h"
-#include "wtf/OwnPtr.h"
-#include "wtf/PassOwnPtr.h"
 #include "wtf/RefPtr.h"
+#include <memory>
 
 #if OS(WIN)
 #include <windows.h>
@@ -801,9 +800,9 @@
     return maxSizeInPixels;
 }
 
-static PassOwnPtr<DragImage> dragImageForImage(Element* element, Image* image, float deviceScaleFactor, const IntPoint& dragOrigin, const IntPoint& imageElementLocation, const IntSize& imageElementSizeInPixels, IntPoint& dragLocation)
+static std::unique_ptr<DragImage> dragImageForImage(Element* element, Image* image, float deviceScaleFactor, const IntPoint& dragOrigin, const IntPoint& imageElementLocation, const IntSize& imageElementSizeInPixels, IntPoint& dragLocation)
 {
-    OwnPtr<DragImage> dragImage;
+    std::unique_ptr<DragImage> dragImage;
     IntPoint origin;
 
     InterpolationQuality interpolationQuality = element->ensureComputedStyle()->imageRendering() == ImageRenderingPixelated ? InterpolationNone : InterpolationHigh;
@@ -839,11 +838,11 @@
     return dragImage;
 }
 
-static PassOwnPtr<DragImage> dragImageForLink(const KURL& linkURL, const String& linkText, float deviceScaleFactor, const IntPoint& mouseDraggedPoint, IntPoint& dragLoc)
+static std::unique_ptr<DragImage> dragImageForLink(const KURL& linkURL, const String& linkText, float deviceScaleFactor, const IntPoint& mouseDraggedPoint, IntPoint& dragLoc)
 {
     FontDescription fontDescription;
     LayoutTheme::theme().systemFont(blink::CSSValueNone, fontDescription);
-    OwnPtr<DragImage> dragImage = DragImage::create(linkURL, linkText, fontDescription, deviceScaleFactor);
+    std::unique_ptr<DragImage> dragImage = DragImage::create(linkURL, linkText, fontDescription, deviceScaleFactor);
 
     IntSize size = dragImage ? dragImage->size() : IntSize();
     IntPoint dragImageOffset(-size.width() / 2, -LinkDragBorderInset);
@@ -877,7 +876,7 @@
     DataTransfer* dataTransfer = state.m_dragDataTransfer.get();
     // We allow DHTML/JS to set the drag image, even if its a link, image or text we're dragging.
     // This is in the spirit of the IE API, which allows overriding of pasteboard data and DragOp.
-    OwnPtr<DragImage> dragImage = dataTransfer->createDragImage(dragOffset, src);
+    std::unique_ptr<DragImage> dragImage = dataTransfer->createDragImage(dragOffset, src);
     if (dragImage) {
         dragLocation = dragLocationForDHTMLDrag(mouseDraggedPoint, dragOrigin, dragOffset, !linkURL.isEmpty());
     }
diff --git a/third_party/WebKit/Source/core/page/EventSource.cpp b/third_party/WebKit/Source/core/page/EventSource.cpp
index dfa1f82..77c3b18 100644
--- a/third_party/WebKit/Source/core/page/EventSource.cpp
+++ b/third_party/WebKit/Source/core/page/EventSource.cpp
@@ -55,6 +55,7 @@
 #include "platform/weborigin/SecurityOrigin.h"
 #include "public/platform/WebURLRequest.h"
 #include "wtf/text/StringBuilder.h"
+#include <memory>
 
 namespace blink {
 
@@ -221,7 +222,7 @@
     return ActiveDOMObject::getExecutionContext();
 }
 
-void EventSource::didReceiveResponse(unsigned long, const ResourceResponse& response, PassOwnPtr<WebDataConsumerHandle> handle)
+void EventSource::didReceiveResponse(unsigned long, const ResourceResponse& response, std::unique_ptr<WebDataConsumerHandle> handle)
 {
     ASSERT_UNUSED(handle, !handle);
     ASSERT(m_state == CONNECTING);
diff --git a/third_party/WebKit/Source/core/page/EventSource.h b/third_party/WebKit/Source/core/page/EventSource.h
index c49ac87..e44530e43 100644
--- a/third_party/WebKit/Source/core/page/EventSource.h
+++ b/third_party/WebKit/Source/core/page/EventSource.h
@@ -42,7 +42,7 @@
 #include "platform/heap/Handle.h"
 #include "platform/weborigin/KURL.h"
 #include "wtf/Forward.h"
-#include "wtf/OwnPtr.h"
+#include <memory>
 
 namespace blink {
 
@@ -95,7 +95,7 @@
 private:
     EventSource(ExecutionContext*, const KURL&, const EventSourceInit&);
 
-    void didReceiveResponse(unsigned long, const ResourceResponse&, PassOwnPtr<WebDataConsumerHandle>) override;
+    void didReceiveResponse(unsigned long, const ResourceResponse&, std::unique_ptr<WebDataConsumerHandle>) override;
     void didReceiveData(const char*, unsigned) override;
     void didFinishLoading(unsigned long, double) override;
     void didFail(const ResourceError&) override;
@@ -122,7 +122,7 @@
     State m_state;
 
     Member<EventSourceParser> m_parser;
-    OwnPtr<ThreadableLoader> m_loader;
+    std::unique_ptr<ThreadableLoader> m_loader;
     Timer<EventSource> m_connectTimer;
 
     unsigned long long m_reconnectDelay;
diff --git a/third_party/WebKit/Source/core/page/EventSourceParser.h b/third_party/WebKit/Source/core/page/EventSourceParser.h
index 7629b68..ffe8145 100644
--- a/third_party/WebKit/Source/core/page/EventSourceParser.h
+++ b/third_party/WebKit/Source/core/page/EventSourceParser.h
@@ -7,11 +7,11 @@
 
 #include "core/CoreExport.h"
 #include "platform/heap/Handle.h"
-#include "wtf/OwnPtr.h"
 #include "wtf/Vector.h"
 #include "wtf/text/AtomicString.h"
 #include "wtf/text/TextCodec.h"
 #include "wtf/text/WTFString.h"
+#include <memory>
 
 namespace blink {
 
@@ -49,7 +49,7 @@
     AtomicString m_lastEventId;
 
     Member<Client> m_client;
-    OwnPtr<TextCodec> m_codec;
+    std::unique_ptr<TextCodec> m_codec;
 
     bool m_isRecognizingCRLF = false;
     bool m_isRecognizingBOM = true;
diff --git a/third_party/WebKit/Source/core/page/FocusControllerTest.cpp b/third_party/WebKit/Source/core/page/FocusControllerTest.cpp
index 9dd4120..a36f5a91 100644
--- a/third_party/WebKit/Source/core/page/FocusControllerTest.cpp
+++ b/third_party/WebKit/Source/core/page/FocusControllerTest.cpp
@@ -8,6 +8,7 @@
 #include "core/html/HTMLElement.h"
 #include "core/testing/DummyPageHolder.h"
 #include "testing/gtest/include/gtest/gtest.h"
+#include <memory>
 
 namespace blink {
 
@@ -19,7 +20,7 @@
 private:
     void SetUp() override { m_pageHolder = DummyPageHolder::create(); }
 
-    OwnPtr<DummyPageHolder> m_pageHolder;
+    std::unique_ptr<DummyPageHolder> m_pageHolder;
 };
 
 TEST_F(FocusControllerTest, SetInitialFocus)
diff --git a/third_party/WebKit/Source/core/page/NetworkStateNotifier.cpp b/third_party/WebKit/Source/core/page/NetworkStateNotifier.cpp
index 26fe7a4..e6658bd 100644
--- a/third_party/WebKit/Source/core/page/NetworkStateNotifier.cpp
+++ b/third_party/WebKit/Source/core/page/NetworkStateNotifier.cpp
@@ -30,6 +30,7 @@
 #include "core/page/Page.h"
 #include "wtf/Assertions.h"
 #include "wtf/Functional.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/StdLibExtras.h"
 #include "wtf/Threading.h"
 
@@ -73,7 +74,7 @@
     MutexLocker locker(m_mutex);
     ObserverListMap::AddResult result = m_observers.add(context, nullptr);
     if (result.isNewEntry)
-        result.storedValue->value = adoptPtr(new ObserverList);
+        result.storedValue->value = wrapUnique(new ObserverList);
 
     ASSERT(result.storedValue->value->observers.find(observer) == kNotFound);
     result.storedValue->value->observers.append(observer);
diff --git a/third_party/WebKit/Source/core/page/NetworkStateNotifier.h b/third_party/WebKit/Source/core/page/NetworkStateNotifier.h
index 955284c0e..f2534832 100644
--- a/third_party/WebKit/Source/core/page/NetworkStateNotifier.h
+++ b/third_party/WebKit/Source/core/page/NetworkStateNotifier.h
@@ -34,6 +34,7 @@
 #include "wtf/Noncopyable.h"
 #include "wtf/ThreadingPrimitives.h"
 #include "wtf/Vector.h"
+#include <memory>
 
 namespace blink {
 
@@ -142,7 +143,7 @@
     // The ObserverListMap is cross-thread accessed, adding/removing Observers running
     // within an ExecutionContext. Kept off-heap to ease cross-thread allocation and use;
     // the observers are (already) responsible for explicitly unregistering while finalizing.
-    using ObserverListMap = HashMap<UntracedMember<ExecutionContext>, OwnPtr<ObserverList>>;
+    using ObserverListMap = HashMap<UntracedMember<ExecutionContext>, std::unique_ptr<ObserverList>>;
 
     void notifyObserversOfConnectionChangeOnContext(WebConnectionType, double maxBandwidthMbps, ExecutionContext*);
 
diff --git a/third_party/WebKit/Source/core/page/PrintContextTest.cpp b/third_party/WebKit/Source/core/page/PrintContextTest.cpp
index 922a629..8ecda1ee 100644
--- a/third_party/WebKit/Source/core/page/PrintContextTest.cpp
+++ b/third_party/WebKit/Source/core/page/PrintContextTest.cpp
@@ -19,6 +19,7 @@
 #include "platform/text/TextStream.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "third_party/skia/include/core/SkCanvas.h"
+#include <memory>
 
 namespace blink {
 
@@ -128,7 +129,7 @@
     }
 
 private:
-    OwnPtr<DummyPageHolder> m_pageHolder;
+    std::unique_ptr<DummyPageHolder> m_pageHolder;
     Persistent<MockPrintContext> m_printContext;
 };
 
diff --git a/third_party/WebKit/Source/core/page/scrolling/ScrollState.cpp b/third_party/WebKit/Source/core/page/scrolling/ScrollState.cpp
index e8caada..d08fd308 100644
--- a/third_party/WebKit/Source/core/page/scrolling/ScrollState.cpp
+++ b/third_party/WebKit/Source/core/page/scrolling/ScrollState.cpp
@@ -7,6 +7,8 @@
 #include "core/dom/DOMNodeIds.h"
 #include "core/dom/Element.h"
 #include "core/dom/ExceptionCode.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
@@ -26,7 +28,7 @@
 
 ScrollState* ScrollState::create(ScrollStateInit init)
 {
-    OwnPtr<ScrollStateData> scrollStateData = adoptPtr(new ScrollStateData());
+    std::unique_ptr<ScrollStateData> scrollStateData = wrapUnique(new ScrollStateData());
     scrollStateData->delta_x = init.deltaX();
     scrollStateData->delta_y = init.deltaY();
     scrollStateData->position_x = init.positionX();
@@ -44,13 +46,13 @@
     return scrollState;
 }
 
-ScrollState* ScrollState::create(PassOwnPtr<ScrollStateData> data)
+ScrollState* ScrollState::create(std::unique_ptr<ScrollStateData> data)
 {
     ScrollState* scrollState = new ScrollState(std::move(data));
     return scrollState;
 }
 
-ScrollState::ScrollState(PassOwnPtr<ScrollStateData> data)
+ScrollState::ScrollState(std::unique_ptr<ScrollStateData> data)
     : m_data(std::move(data))
 {
 }
diff --git a/third_party/WebKit/Source/core/page/scrolling/ScrollState.h b/third_party/WebKit/Source/core/page/scrolling/ScrollState.h
index 050ee6b..65f164d 100644
--- a/third_party/WebKit/Source/core/page/scrolling/ScrollState.h
+++ b/third_party/WebKit/Source/core/page/scrolling/ScrollState.h
@@ -12,6 +12,7 @@
 #include "platform/scroll/ScrollStateData.h"
 #include "wtf/Forward.h"
 #include <deque>
+#include <memory>
 
 namespace blink {
 
@@ -22,7 +23,7 @@
 
 public:
     static ScrollState* create(ScrollStateInit);
-    static ScrollState* create(PassOwnPtr<ScrollStateData>);
+    static ScrollState* create(std::unique_ptr<ScrollStateData>);
 
     ~ScrollState()
     {
@@ -92,9 +93,9 @@
 
 private:
     ScrollState();
-    explicit ScrollState(PassOwnPtr<ScrollStateData>);
+    explicit ScrollState(std::unique_ptr<ScrollStateData>);
 
-    OwnPtr<ScrollStateData> m_data;
+    std::unique_ptr<ScrollStateData> m_data;
     std::deque<int> m_scrollChain;
 };
 
diff --git a/third_party/WebKit/Source/core/page/scrolling/ScrollStateTest.cpp b/third_party/WebKit/Source/core/page/scrolling/ScrollStateTest.cpp
index e79dce5..5b84165 100644
--- a/third_party/WebKit/Source/core/page/scrolling/ScrollStateTest.cpp
+++ b/third_party/WebKit/Source/core/page/scrolling/ScrollStateTest.cpp
@@ -7,6 +7,8 @@
 #include "core/dom/Document.h"
 #include "core/dom/Element.h"
 #include "testing/gtest/include/gtest/gtest.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
@@ -14,7 +16,7 @@
 
 ScrollState* CreateScrollState(double deltaX, double deltaY, bool beginning, bool ending)
 {
-    OwnPtr<ScrollStateData> scrollStateData = adoptPtr(new ScrollStateData());
+    std::unique_ptr<ScrollStateData> scrollStateData = wrapUnique(new ScrollStateData());
     scrollStateData->delta_x = deltaX;
     scrollStateData->delta_y = deltaY;
     scrollStateData->is_beginning = beginning;
diff --git a/third_party/WebKit/Source/core/page/scrolling/ScrollingCoordinator.cpp b/third_party/WebKit/Source/core/page/scrolling/ScrollingCoordinator.cpp
index 88221d0a..ee69398 100644
--- a/third_party/WebKit/Source/core/page/scrolling/ScrollingCoordinator.cpp
+++ b/third_party/WebKit/Source/core/page/scrolling/ScrollingCoordinator.cpp
@@ -63,7 +63,9 @@
 #include "public/platform/WebScrollbarLayer.h"
 #include "public/platform/WebScrollbarThemeGeometry.h"
 #include "public/platform/WebScrollbarThemePainter.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/text/StringBuilder.h"
+#include <memory>
 
 using blink::WebLayer;
 using blink::WebLayerPositionConstraint;
@@ -273,25 +275,25 @@
 void ScrollingCoordinator::removeWebScrollbarLayer(ScrollableArea* scrollableArea, ScrollbarOrientation orientation)
 {
     ScrollbarMap& scrollbars = orientation == HorizontalScrollbar ? m_horizontalScrollbars : m_verticalScrollbars;
-    if (OwnPtr<WebScrollbarLayer> scrollbarLayer = scrollbars.take(scrollableArea))
+    if (std::unique_ptr<WebScrollbarLayer> scrollbarLayer = scrollbars.take(scrollableArea))
         GraphicsLayer::unregisterContentsLayer(scrollbarLayer->layer());
 }
 
-static PassOwnPtr<WebScrollbarLayer> createScrollbarLayer(Scrollbar& scrollbar, float deviceScaleFactor)
+static std::unique_ptr<WebScrollbarLayer> createScrollbarLayer(Scrollbar& scrollbar, float deviceScaleFactor)
 {
     ScrollbarTheme& theme = scrollbar.theme();
     WebScrollbarThemePainter painter(theme, scrollbar, deviceScaleFactor);
-    OwnPtr<WebScrollbarThemeGeometry> geometry(WebScrollbarThemeGeometryNative::create(theme));
+    std::unique_ptr<WebScrollbarThemeGeometry> geometry(WebScrollbarThemeGeometryNative::create(theme));
 
-    OwnPtr<WebScrollbarLayer> scrollbarLayer = adoptPtr(Platform::current()->compositorSupport()->createScrollbarLayer(WebScrollbarImpl::create(&scrollbar), painter, geometry.leakPtr()));
+    std::unique_ptr<WebScrollbarLayer> scrollbarLayer = wrapUnique(Platform::current()->compositorSupport()->createScrollbarLayer(WebScrollbarImpl::create(&scrollbar), painter, geometry.release()));
     GraphicsLayer::registerContentsLayer(scrollbarLayer->layer());
     return scrollbarLayer;
 }
 
-PassOwnPtr<WebScrollbarLayer> ScrollingCoordinator::createSolidColorScrollbarLayer(ScrollbarOrientation orientation, int thumbThickness, int trackStart, bool isLeftSideVerticalScrollbar)
+std::unique_ptr<WebScrollbarLayer> ScrollingCoordinator::createSolidColorScrollbarLayer(ScrollbarOrientation orientation, int thumbThickness, int trackStart, bool isLeftSideVerticalScrollbar)
 {
     WebScrollbar::Orientation webOrientation = (orientation == HorizontalScrollbar) ? WebScrollbar::Horizontal : WebScrollbar::Vertical;
-    OwnPtr<WebScrollbarLayer> scrollbarLayer = adoptPtr(Platform::current()->compositorSupport()->createSolidColorScrollbarLayer(webOrientation, thumbThickness, trackStart, isLeftSideVerticalScrollbar));
+    std::unique_ptr<WebScrollbarLayer> scrollbarLayer = wrapUnique(Platform::current()->compositorSupport()->createSolidColorScrollbarLayer(webOrientation, thumbThickness, trackStart, isLeftSideVerticalScrollbar));
     GraphicsLayer::registerContentsLayer(scrollbarLayer->layer());
     return scrollbarLayer;
 }
@@ -318,7 +320,7 @@
     scrollbarGraphicsLayer->setDrawsContent(false);
 }
 
-WebScrollbarLayer* ScrollingCoordinator::addWebScrollbarLayer(ScrollableArea* scrollableArea, ScrollbarOrientation orientation, PassOwnPtr<WebScrollbarLayer> scrollbarLayer)
+WebScrollbarLayer* ScrollingCoordinator::addWebScrollbarLayer(ScrollableArea* scrollableArea, ScrollbarOrientation orientation, std::unique_ptr<WebScrollbarLayer> scrollbarLayer)
 {
     ScrollbarMap& scrollbars = orientation == HorizontalScrollbar ? m_horizontalScrollbars : m_verticalScrollbars;
     return scrollbars.add(scrollableArea, std::move(scrollbarLayer)).storedValue->value.get();
@@ -348,7 +350,7 @@
         if (!scrollbarLayer) {
             Settings* settings = m_page->mainFrame()->settings();
 
-            OwnPtr<WebScrollbarLayer> webScrollbarLayer;
+            std::unique_ptr<WebScrollbarLayer> webScrollbarLayer;
             if (settings->useSolidColorScrollbars()) {
                 ASSERT(RuntimeEnabledFeatures::overlayScrollbarsEnabled());
                 webScrollbarLayer = createSolidColorScrollbarLayer(orientation, scrollbar.theme().thumbThickness(scrollbar), scrollbar.theme().trackPosition(scrollbar), scrollableArea->shouldPlaceVerticalScrollbarOnLeft());
diff --git a/third_party/WebKit/Source/core/page/scrolling/ScrollingCoordinator.h b/third_party/WebKit/Source/core/page/scrolling/ScrollingCoordinator.h
index f503f8f7..f9d5dd4a42 100644
--- a/third_party/WebKit/Source/core/page/scrolling/ScrollingCoordinator.h
+++ b/third_party/WebKit/Source/core/page/scrolling/ScrollingCoordinator.h
@@ -34,6 +34,7 @@
 #include "platform/scroll/ScrollTypes.h"
 #include "wtf/Noncopyable.h"
 #include "wtf/text/WTFString.h"
+#include <memory>
 
 namespace blink {
 class WebScrollbarLayer;
@@ -95,7 +96,7 @@
     MainThreadScrollingReasons mainThreadScrollingReasons() const;
     bool shouldUpdateScrollLayerPositionOnMainThread() const { return mainThreadScrollingReasons() != 0; }
 
-    PassOwnPtr<WebScrollbarLayer> createSolidColorScrollbarLayer(ScrollbarOrientation, int thumbThickness, int trackStart, bool isLeftSideVerticalScrollbar);
+    std::unique_ptr<WebScrollbarLayer> createSolidColorScrollbarLayer(ScrollbarOrientation, int thumbThickness, int trackStart, bool isLeftSideVerticalScrollbar);
 
     void willDestroyScrollableArea(ScrollableArea*);
     // Returns true if the coordinator handled this change.
@@ -146,15 +147,15 @@
     void setTouchEventTargetRects(LayerHitTestRects&);
     void computeTouchEventTargetRects(LayerHitTestRects&);
 
-    WebScrollbarLayer* addWebScrollbarLayer(ScrollableArea*, ScrollbarOrientation, PassOwnPtr<WebScrollbarLayer>);
+    WebScrollbarLayer* addWebScrollbarLayer(ScrollableArea*, ScrollbarOrientation, std::unique_ptr<WebScrollbarLayer>);
     WebScrollbarLayer* getWebScrollbarLayer(ScrollableArea*, ScrollbarOrientation);
     void removeWebScrollbarLayer(ScrollableArea*, ScrollbarOrientation);
 
     bool frameViewIsDirty() const;
 
-    OwnPtr<CompositorAnimationTimeline> m_programmaticScrollAnimatorTimeline;
+    std::unique_ptr<CompositorAnimationTimeline> m_programmaticScrollAnimatorTimeline;
 
-    using ScrollbarMap = HeapHashMap<Member<ScrollableArea>, OwnPtr<WebScrollbarLayer>>;
+    using ScrollbarMap = HeapHashMap<Member<ScrollableArea>, std::unique_ptr<WebScrollbarLayer>>;
     ScrollbarMap m_horizontalScrollbars;
     ScrollbarMap m_verticalScrollbars;
     HashSet<const PaintLayer*> m_layersWithTouchRects;
diff --git a/third_party/WebKit/Source/core/page/scrolling/SnapCoordinatorTest.cpp b/third_party/WebKit/Source/core/page/scrolling/SnapCoordinatorTest.cpp
index bcebdc8..1b854d9 100644
--- a/third_party/WebKit/Source/core/page/scrolling/SnapCoordinatorTest.cpp
+++ b/third_party/WebKit/Source/core/page/scrolling/SnapCoordinatorTest.cpp
@@ -10,8 +10,8 @@
 #include "core/style/ComputedStyle.h"
 #include "core/testing/DummyPageHolder.h"
 #include "platform/scroll/ScrollTypes.h"
-
 #include <gtest/gtest.h>
+#include <memory>
 
 namespace blink {
 
@@ -82,7 +82,7 @@
         return coordinator().snapOffsets(node, orientation);
     }
 
-    OwnPtr<DummyPageHolder> m_pageHolder;
+    std::unique_ptr<DummyPageHolder> m_pageHolder;
 };
 
 INSTANTIATE_TEST_CASE_P(All, SnapCoordinatorTest, ::testing::Values(
diff --git a/third_party/WebKit/Source/core/paint/FilterPainter.cpp b/third_party/WebKit/Source/core/paint/FilterPainter.cpp
index 41b9732..bccab959 100644
--- a/third_party/WebKit/Source/core/paint/FilterPainter.cpp
+++ b/third_party/WebKit/Source/core/paint/FilterPainter.cpp
@@ -17,6 +17,8 @@
 #include "platform/graphics/paint/PaintController.h"
 #include "public/platform/Platform.h"
 #include "public/platform/WebCompositorSupport.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
@@ -54,13 +56,13 @@
     paintingInfo.clipToDirtyRect = false;
 
     if (clipRect.rect() != paintingInfo.paintDirtyRect || clipRect.hasRadius()) {
-        m_clipRecorder = adoptPtr(new LayerClipRecorder(context, *layer.layoutObject(), DisplayItem::ClipLayerFilter, clipRect, &paintingInfo, LayoutPoint(), paintFlags));
+        m_clipRecorder = wrapUnique(new LayerClipRecorder(context, *layer.layoutObject(), DisplayItem::ClipLayerFilter, clipRect, &paintingInfo, LayoutPoint(), paintFlags));
     }
 
     ASSERT(m_layoutObject);
     if (!context.getPaintController().displayItemConstructionIsDisabled()) {
         FilterOperations filterOperations(layer.computeFilterOperations(m_layoutObject->styleRef()));
-        OwnPtr<CompositorFilterOperations> compositorFilterOperations = CompositorFilterOperations::create();
+        std::unique_ptr<CompositorFilterOperations> compositorFilterOperations = CompositorFilterOperations::create();
         SkiaImageFilterBuilder::buildFilterOperations(filterOperations, compositorFilterOperations.get());
         // FIXME: It's possible to have empty CompositorFilterOperations here even
         // though the SkImageFilter produced above is non-null, since the
diff --git a/third_party/WebKit/Source/core/paint/FilterPainter.h b/third_party/WebKit/Source/core/paint/FilterPainter.h
index c178b70..966827a8 100644
--- a/third_party/WebKit/Source/core/paint/FilterPainter.h
+++ b/third_party/WebKit/Source/core/paint/FilterPainter.h
@@ -7,7 +7,7 @@
 
 #include "core/paint/PaintLayerPaintingInfo.h"
 #include "wtf/Allocator.h"
-#include "wtf/OwnPtr.h"
+#include <memory>
 
 namespace blink {
 
@@ -25,7 +25,7 @@
 private:
     bool m_filterInProgress;
     GraphicsContext& m_context;
-    OwnPtr<LayerClipRecorder> m_clipRecorder;
+    std::unique_ptr<LayerClipRecorder> m_clipRecorder;
     LayoutObject* m_layoutObject;
 };
 
diff --git a/third_party/WebKit/Source/core/paint/ObjectPaintProperties.h b/third_party/WebKit/Source/core/paint/ObjectPaintProperties.h
index 525c5aa..3ebd68e 100644
--- a/third_party/WebKit/Source/core/paint/ObjectPaintProperties.h
+++ b/third_party/WebKit/Source/core/paint/ObjectPaintProperties.h
@@ -10,9 +10,10 @@
 #include "platform/graphics/paint/EffectPaintPropertyNode.h"
 #include "platform/graphics/paint/PaintChunkProperties.h"
 #include "platform/graphics/paint/TransformPaintPropertyNode.h"
-#include "wtf/PassOwnPtr.h"
 #include "wtf/PassRefPtr.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/RefPtr.h"
+#include <memory>
 
 namespace blink {
 
@@ -27,9 +28,9 @@
 public:
     struct LocalBorderBoxProperties;
 
-    static PassOwnPtr<ObjectPaintProperties> create()
+    static std::unique_ptr<ObjectPaintProperties> create()
     {
-        return adoptPtr(new ObjectPaintProperties());
+        return wrapUnique(new ObjectPaintProperties());
     }
 
     // The hierarchy of transform subtree created by a LayoutObject.
@@ -96,7 +97,7 @@
         m_scrollTranslation = translation;
     }
     void setScrollbarPaintOffset(PassRefPtr<TransformPaintPropertyNode> paintOffset) { m_scrollbarPaintOffset = paintOffset; }
-    void setLocalBorderBoxProperties(PassOwnPtr<LocalBorderBoxProperties> properties) { m_localBorderBoxProperties = std::move(properties); }
+    void setLocalBorderBoxProperties(std::unique_ptr<LocalBorderBoxProperties> properties) { m_localBorderBoxProperties = std::move(properties); }
 
     RefPtr<TransformPaintPropertyNode> m_paintOffsetTranslation;
     RefPtr<TransformPaintPropertyNode> m_transform;
@@ -110,7 +111,7 @@
     RefPtr<TransformPaintPropertyNode> m_scrollTranslation;
     RefPtr<TransformPaintPropertyNode> m_scrollbarPaintOffset;
 
-    OwnPtr<LocalBorderBoxProperties> m_localBorderBoxProperties;
+    std::unique_ptr<LocalBorderBoxProperties> m_localBorderBoxProperties;
 };
 
 } // namespace blink
diff --git a/third_party/WebKit/Source/core/paint/PaintInfoTest.cpp b/third_party/WebKit/Source/core/paint/PaintInfoTest.cpp
index b6aad442..781b3a3f 100644
--- a/third_party/WebKit/Source/core/paint/PaintInfoTest.cpp
+++ b/third_party/WebKit/Source/core/paint/PaintInfoTest.cpp
@@ -6,6 +6,7 @@
 
 #include "platform/graphics/paint/PaintController.h"
 #include "testing/gtest/include/gtest/gtest.h"
+#include <memory>
 
 namespace blink {
 
@@ -16,7 +17,7 @@
         , m_context(*m_paintController)
     { }
 
-    OwnPtr<PaintController> m_paintController;
+    std::unique_ptr<PaintController> m_paintController;
     GraphicsContext m_context;
 };
 
diff --git a/third_party/WebKit/Source/core/paint/PaintLayer.cpp b/third_party/WebKit/Source/core/paint/PaintLayer.cpp
index 0292065..37f7d4a 100644
--- a/third_party/WebKit/Source/core/paint/PaintLayer.cpp
+++ b/third_party/WebKit/Source/core/paint/PaintLayer.cpp
@@ -83,6 +83,7 @@
 #include "platform/transforms/TransformationMatrix.h"
 #include "platform/transforms/TranslateTransformOperation.h"
 #include "public/platform/Platform.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/StdLibExtras.h"
 #include "wtf/allocator/Partitions.h"
 #include "wtf/text/CString.h"
@@ -982,7 +983,7 @@
     if (rareCompositingInputs.isDefault())
         m_rareAncestorDependentCompositingInputs.reset();
     else
-        m_rareAncestorDependentCompositingInputs = adoptPtr(new RareAncestorDependentCompositingInputs(rareCompositingInputs));
+        m_rareAncestorDependentCompositingInputs = wrapUnique(new RareAncestorDependentCompositingInputs(rareCompositingInputs));
     m_hasAncestorWithClipPath = hasAncestorWithClipPath;
     m_needsAncestorDependentCompositingInputsUpdate = false;
 }
@@ -1451,7 +1452,7 @@
     ASSERT(!oldStyle || !layoutObject()->style()->reflectionDataEquivalent(oldStyle));
     if (layoutObject()->hasReflection()) {
         if (!ensureRareData().reflectionInfo)
-            m_rareData->reflectionInfo = adoptPtr(new PaintLayerReflectionInfo(*layoutBox()));
+            m_rareData->reflectionInfo = wrapUnique(new PaintLayerReflectionInfo(*layoutBox()));
         m_rareData->reflectionInfo->updateAfterStyleChange(oldStyle);
     } else if (m_rareData && m_rareData->reflectionInfo) {
         m_rareData->reflectionInfo = nullptr;
@@ -1462,7 +1463,7 @@
 {
     ASSERT(!m_stackingNode);
     if (requiresStackingNode())
-        m_stackingNode = adoptPtr(new PaintLayerStackingNode(this));
+        m_stackingNode = wrapUnique(new PaintLayerStackingNode(this));
     else
         m_stackingNode = nullptr;
 }
@@ -2333,7 +2334,7 @@
     if (m_rareData && m_rareData->compositedLayerMapping)
         return;
 
-    ensureRareData().compositedLayerMapping = adoptPtr(new CompositedLayerMapping(*this));
+    ensureRareData().compositedLayerMapping = wrapUnique(new CompositedLayerMapping(*this));
     m_rareData->compositedLayerMapping->setNeedsGraphicsLayerUpdate(GraphicsLayerUpdateSubtree);
 
     updateOrRemoveFilterEffectBuilder();
diff --git a/third_party/WebKit/Source/core/paint/PaintLayer.h b/third_party/WebKit/Source/core/paint/PaintLayer.h
index 90968fcb..7511da5 100644
--- a/third_party/WebKit/Source/core/paint/PaintLayer.h
+++ b/third_party/WebKit/Source/core/paint/PaintLayer.h
@@ -60,7 +60,8 @@
 #include "platform/graphics/SquashingDisallowedReasons.h"
 #include "public/platform/WebBlendMode.h"
 #include "wtf/Allocator.h"
-#include "wtf/OwnPtr.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
@@ -99,7 +100,7 @@
     // Our current relative position offset.
     LayoutSize offsetForInFlowPosition;
 
-    OwnPtr<TransformationMatrix> transform;
+    std::unique_ptr<TransformationMatrix> transform;
 
     // Pointer to the enclosing Layer that caused us to be paginated. It is 0 if we are not paginated.
     //
@@ -124,14 +125,14 @@
 
     // If the layer paints into its own backings, this keeps track of the backings.
     // It's nullptr if the layer is not composited or paints into grouped backing.
-    OwnPtr<CompositedLayerMapping> compositedLayerMapping;
+    std::unique_ptr<CompositedLayerMapping> compositedLayerMapping;
 
     // If the layer paints into grouped backing (i.e. squashed), this points to the
     // grouped CompositedLayerMapping. It's null if the layer is not composited or
     // paints into its own backing.
     CompositedLayerMapping* groupedMapping;
 
-    OwnPtr<PaintLayerReflectionInfo> reflectionInfo;
+    std::unique_ptr<PaintLayerReflectionInfo> reflectionInfo;
 
     Persistent<PaintLayerFilterInfo> filterInfo;
 
@@ -695,7 +696,7 @@
     ClipRectsCache& ensureClipRectsCache() const
     {
         if (!m_clipRectsCache)
-            m_clipRectsCache = adoptPtr(new ClipRectsCache);
+            m_clipRectsCache = wrapUnique(new ClipRectsCache);
         return *m_clipRectsCache;
     }
     void clearClipRectsCache() const { m_clipRectsCache.reset(); }
@@ -782,7 +783,7 @@
     PaintLayerRareData& ensureRareData()
     {
         if (!m_rareData)
-            m_rareData = adoptPtr(new PaintLayerRareData);
+            m_rareData = wrapUnique(new PaintLayerRareData);
         return *m_rareData;
     }
 
@@ -882,19 +883,19 @@
     const PaintLayer* m_ancestorOverflowLayer;
 
     AncestorDependentCompositingInputs m_ancestorDependentCompositingInputs;
-    OwnPtr<RareAncestorDependentCompositingInputs> m_rareAncestorDependentCompositingInputs;
+    std::unique_ptr<RareAncestorDependentCompositingInputs> m_rareAncestorDependentCompositingInputs;
 
     Persistent<PaintLayerScrollableArea> m_scrollableArea;
 
-    mutable OwnPtr<ClipRectsCache> m_clipRectsCache;
+    mutable std::unique_ptr<ClipRectsCache> m_clipRectsCache;
 
-    OwnPtr<PaintLayerStackingNode> m_stackingNode;
+    std::unique_ptr<PaintLayerStackingNode> m_stackingNode;
 
     IntSize m_previousScrollOffsetAccumulationForPainting;
     RefPtr<ClipRects> m_previousPaintingClipRects;
     LayoutRect m_previousPaintDirtyRect;
 
-    OwnPtr<PaintLayerRareData> m_rareData;
+    std::unique_ptr<PaintLayerRareData> m_rareData;
 
     DISPLAY_ITEM_CACHE_STATUS_IMPLEMENTATION
 };
diff --git a/third_party/WebKit/Source/core/paint/PaintLayerScrollableArea.h b/third_party/WebKit/Source/core/paint/PaintLayerScrollableArea.h
index a0d4db07..59776ed 100644
--- a/third_party/WebKit/Source/core/paint/PaintLayerScrollableArea.h
+++ b/third_party/WebKit/Source/core/paint/PaintLayerScrollableArea.h
@@ -50,6 +50,8 @@
 #include "core/paint/PaintInvalidationCapableScrollableArea.h"
 #include "core/paint/PaintLayerFragment.h"
 #include "platform/heap/Handle.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
@@ -457,7 +459,7 @@
     PaintLayerScrollableAreaRareData& ensureRareData()
     {
         if (!m_rareData)
-            m_rareData = adoptPtr(new PaintLayerScrollableAreaRareData());
+            m_rareData = wrapUnique(new PaintLayerScrollableAreaRareData());
         return *m_rareData.get();
     }
 
@@ -509,7 +511,7 @@
 
     ScrollAnchor m_scrollAnchor;
 
-    OwnPtr<PaintLayerScrollableAreaRareData> m_rareData;
+    std::unique_ptr<PaintLayerScrollableAreaRareData> m_rareData;
 
 #if ENABLE(ASSERT)
     bool m_hasBeenDisposed;
diff --git a/third_party/WebKit/Source/core/paint/PaintLayerStackingNode.cpp b/third_party/WebKit/Source/core/paint/PaintLayerStackingNode.cpp
index 8489a69..747674a 100644
--- a/third_party/WebKit/Source/core/paint/PaintLayerStackingNode.cpp
+++ b/third_party/WebKit/Source/core/paint/PaintLayerStackingNode.cpp
@@ -48,7 +48,9 @@
 #include "core/layout/compositing/PaintLayerCompositor.h"
 #include "core/paint/PaintLayer.h"
 #include "public/platform/Platform.h"
+#include "wtf/PtrUtil.h"
 #include <algorithm>
+#include <memory>
 
 namespace blink {
 
@@ -148,7 +150,7 @@
                 PaintLayer* layer = toLayoutBoxModelObject(child)->layer();
                 // Create the buffer if it doesn't exist yet.
                 if (!m_posZOrderList)
-                    m_posZOrderList = adoptPtr(new Vector<PaintLayerStackingNode*>);
+                    m_posZOrderList = wrapUnique(new Vector<PaintLayerStackingNode*>);
                 m_posZOrderList->append(layer->stackingNode());
             }
         }
@@ -161,15 +163,15 @@
     m_zOrderListsDirty = false;
 }
 
-void PaintLayerStackingNode::collectLayers(OwnPtr<Vector<PaintLayerStackingNode*>>& posBuffer, OwnPtr<Vector<PaintLayerStackingNode*>>& negBuffer)
+void PaintLayerStackingNode::collectLayers(std::unique_ptr<Vector<PaintLayerStackingNode*>>& posBuffer, std::unique_ptr<Vector<PaintLayerStackingNode*>>& negBuffer)
 {
     if (layer()->isInTopLayer())
         return;
 
     if (isStacked()) {
-        OwnPtr<Vector<PaintLayerStackingNode*>>& buffer = (zIndex() >= 0) ? posBuffer : negBuffer;
+        std::unique_ptr<Vector<PaintLayerStackingNode*>>& buffer = (zIndex() >= 0) ? posBuffer : negBuffer;
         if (!buffer)
-            buffer = adoptPtr(new Vector<PaintLayerStackingNode*>);
+            buffer = wrapUnique(new Vector<PaintLayerStackingNode*>);
         buffer->append(this);
     }
 
diff --git a/third_party/WebKit/Source/core/paint/PaintLayerStackingNode.h b/third_party/WebKit/Source/core/paint/PaintLayerStackingNode.h
index 977f7be..9da7094 100644
--- a/third_party/WebKit/Source/core/paint/PaintLayerStackingNode.h
+++ b/third_party/WebKit/Source/core/paint/PaintLayerStackingNode.h
@@ -48,8 +48,8 @@
 #include "core/CoreExport.h"
 #include "core/layout/LayoutBoxModelObject.h"
 #include "wtf/Noncopyable.h"
-#include "wtf/OwnPtr.h"
 #include "wtf/Vector.h"
+#include <memory>
 
 namespace blink {
 
@@ -149,7 +149,7 @@
     }
 
     void rebuildZOrderLists();
-    void collectLayers(OwnPtr<Vector<PaintLayerStackingNode*>>& posZOrderList, OwnPtr<Vector<PaintLayerStackingNode*>>& negZOrderList);
+    void collectLayers(std::unique_ptr<Vector<PaintLayerStackingNode*>>& posZOrderList, std::unique_ptr<Vector<PaintLayerStackingNode*>>& negZOrderList);
 
 #if ENABLE(ASSERT)
     bool isInStackingParentZOrderLists() const;
@@ -169,8 +169,8 @@
     // that have z-indices of 0 (or is treated as 0 for positioned objects) or greater.
     // m_negZOrderList holds descendants within our stacking context with
     // negative z-indices.
-    OwnPtr<Vector<PaintLayerStackingNode*>> m_posZOrderList;
-    OwnPtr<Vector<PaintLayerStackingNode*>> m_negZOrderList;
+    std::unique_ptr<Vector<PaintLayerStackingNode*>> m_posZOrderList;
+    std::unique_ptr<Vector<PaintLayerStackingNode*>> m_negZOrderList;
 
     // This boolean caches whether the z-order lists above are dirty.
     // It is only ever set for stacking contexts, as no other element can
diff --git a/third_party/WebKit/Source/core/paint/PaintPropertyTreeBuilder.cpp b/third_party/WebKit/Source/core/paint/PaintPropertyTreeBuilder.cpp
index 3c9c9a31..be3393e 100644
--- a/third_party/WebKit/Source/core/paint/PaintPropertyTreeBuilder.cpp
+++ b/third_party/WebKit/Source/core/paint/PaintPropertyTreeBuilder.cpp
@@ -13,6 +13,8 @@
 #include "core/paint/ObjectPaintProperties.h"
 #include "core/paint/PaintLayer.h"
 #include "platform/transforms/TransformationMatrix.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
@@ -164,8 +166,8 @@
     if (!object.hasLayer())
         return;
 
-    OwnPtr<ObjectPaintProperties::LocalBorderBoxProperties> borderBoxContext =
-        adoptPtr(new ObjectPaintProperties::LocalBorderBoxProperties);
+    std::unique_ptr<ObjectPaintProperties::LocalBorderBoxProperties> borderBoxContext =
+        wrapUnique(new ObjectPaintProperties::LocalBorderBoxProperties);
     borderBoxContext->paintOffset = context.paintOffset;
     borderBoxContext->transform = context.currentTransform;
     borderBoxContext->clip = context.currentClip;
diff --git a/third_party/WebKit/Source/core/paint/SVGFilterPainter.cpp b/third_party/WebKit/Source/core/paint/SVGFilterPainter.cpp
index a98c0c6..0bf5781 100644
--- a/third_party/WebKit/Source/core/paint/SVGFilterPainter.cpp
+++ b/third_party/WebKit/Source/core/paint/SVGFilterPainter.cpp
@@ -9,6 +9,7 @@
 #include "core/paint/LayoutObjectDrawingRecorder.h"
 #include "platform/graphics/filters/SkiaImageFilterBuilder.h"
 #include "platform/graphics/filters/SourceGraphic.h"
+#include "wtf/PtrUtil.h"
 
 namespace blink {
 
@@ -18,7 +19,7 @@
 
     // Create a new context so the contents of the filter can be drawn and cached.
     m_paintController = PaintController::create();
-    m_context = adoptPtr(new GraphicsContext(*m_paintController));
+    m_context = wrapUnique(new GraphicsContext(*m_paintController));
 
     filterData->m_state = FilterData::RecordingContent;
     return m_context.get();
diff --git a/third_party/WebKit/Source/core/paint/SVGFilterPainter.h b/third_party/WebKit/Source/core/paint/SVGFilterPainter.h
index 1d650365..ffbdac3 100644
--- a/third_party/WebKit/Source/core/paint/SVGFilterPainter.h
+++ b/third_party/WebKit/Source/core/paint/SVGFilterPainter.h
@@ -8,7 +8,7 @@
 #include "platform/graphics/GraphicsContext.h"
 #include "platform/graphics/paint/PaintController.h"
 #include "wtf/Allocator.h"
-#include "wtf/OwnPtr.h"
+#include <memory>
 
 namespace blink {
 
@@ -28,8 +28,8 @@
     GraphicsContext& paintingContext() const { return m_initialContext; }
 
 private:
-    OwnPtr<PaintController> m_paintController;
-    OwnPtr<GraphicsContext> m_context;
+    std::unique_ptr<PaintController> m_paintController;
+    std::unique_ptr<GraphicsContext> m_context;
     GraphicsContext& m_initialContext;
 };
 
diff --git a/third_party/WebKit/Source/core/paint/SVGInlineTextBoxPainter.cpp b/third_party/WebKit/Source/core/paint/SVGInlineTextBoxPainter.cpp
index 9cc33a14..93f1068 100644
--- a/third_party/WebKit/Source/core/paint/SVGInlineTextBoxPainter.cpp
+++ b/third_party/WebKit/Source/core/paint/SVGInlineTextBoxPainter.cpp
@@ -22,6 +22,7 @@
 #include "core/paint/SVGPaintContext.h"
 #include "core/style/ShadowList.h"
 #include "platform/graphics/GraphicsContextStateSaver.h"
+#include <memory>
 
 namespace blink {
 
@@ -313,7 +314,7 @@
     paint.setAntiAlias(true);
 
     if (hasShadow) {
-        OwnPtr<DrawLooperBuilder> drawLooperBuilder = shadowList->createDrawLooper(DrawLooperBuilder::ShadowRespectsAlpha, style.visitedDependentColor(CSSPropertyColor));
+        std::unique_ptr<DrawLooperBuilder> drawLooperBuilder = shadowList->createDrawLooper(DrawLooperBuilder::ShadowRespectsAlpha, style.visitedDependentColor(CSSPropertyColor));
         paint.setLooper(toSkSp(drawLooperBuilder->detachDrawLooper()));
     }
 
diff --git a/third_party/WebKit/Source/core/paint/SVGPaintContext.cpp b/third_party/WebKit/Source/core/paint/SVGPaintContext.cpp
index c595c9c..e080d68 100644
--- a/third_party/WebKit/Source/core/paint/SVGPaintContext.cpp
+++ b/third_party/WebKit/Source/core/paint/SVGPaintContext.cpp
@@ -32,6 +32,7 @@
 #include "core/layout/svg/SVGResourcesCache.h"
 #include "core/paint/SVGMaskPainter.h"
 #include "platform/FloatConversion.h"
+#include "wtf/PtrUtil.h"
 
 namespace blink {
 
@@ -89,7 +90,7 @@
         return false;
 
     if (!isIsolationInstalled() && SVGLayoutSupport::isIsolationRequired(&m_object))
-        m_compositingRecorder = adoptPtr(new CompositingRecorder(paintInfo().context, m_object, SkXfermode::kSrcOver_Mode, 1));
+        m_compositingRecorder = wrapUnique(new CompositingRecorder(paintInfo().context, m_object, SkXfermode::kSrcOver_Mode, 1));
 
     return true;
 }
@@ -108,7 +109,7 @@
         style.blendMode() : WebBlendModeNormal;
     if (opacity < 1 || blendMode != WebBlendModeNormal) {
         const FloatRect compositingBounds = m_object.paintInvalidationRectInLocalSVGCoordinates();
-        m_compositingRecorder = adoptPtr(new CompositingRecorder(paintInfo().context, m_object,
+        m_compositingRecorder = wrapUnique(new CompositingRecorder(paintInfo().context, m_object,
             WebCoreCompositeToSkiaComposite(CompositeSourceOver, blendMode), opacity, &compositingBounds));
     }
 }
@@ -128,7 +129,7 @@
             ShapeClipPathOperation* clipPath = toShapeClipPathOperation(clipPathOperation);
             if (!clipPath->isValid())
                 return false;
-            m_clipPathRecorder = adoptPtr(new ClipPathRecorder(paintInfo().context, m_object, clipPath->path(m_object.objectBoundingBox())));
+            m_clipPathRecorder = wrapUnique(new ClipPathRecorder(paintInfo().context, m_object, clipPath->path(m_object.objectBoundingBox())));
         }
     }
     return true;
@@ -150,7 +151,7 @@
         if (m_object.style()->svgStyle().hasFilter())
             return false;
     } else if (LayoutSVGResourceFilter* filter = resources->filter()) {
-        m_filterRecordingContext = adoptPtr(new SVGFilterRecordingContext(paintInfo().context));
+        m_filterRecordingContext = wrapUnique(new SVGFilterRecordingContext(paintInfo().context));
         m_filter = filter;
         GraphicsContext* filterContext = SVGFilterPainter(*filter).prepareEffect(m_object, *m_filterRecordingContext);
         if (!filterContext)
@@ -158,7 +159,7 @@
 
         // Because the filter needs to cache its contents we replace the context
         // during filtering with the filter's context.
-        m_filterPaintInfo = adoptPtr(new PaintInfo(*filterContext, m_paintInfo));
+        m_filterPaintInfo = wrapUnique(new PaintInfo(*filterContext, m_paintInfo));
 
         // Because we cache the filter contents and do not invalidate on paint
         // invalidation rect changes, we need to paint the entire filter region
diff --git a/third_party/WebKit/Source/core/paint/SVGPaintContext.h b/third_party/WebKit/Source/core/paint/SVGPaintContext.h
index d8f1a18..b493dde8 100644
--- a/third_party/WebKit/Source/core/paint/SVGPaintContext.h
+++ b/third_party/WebKit/Source/core/paint/SVGPaintContext.h
@@ -33,6 +33,7 @@
 #include "platform/graphics/paint/ClipPathRecorder.h"
 #include "platform/graphics/paint/CompositingRecorder.h"
 #include "platform/transforms/AffineTransform.h"
+#include <memory>
 
 namespace blink {
 
@@ -85,14 +86,14 @@
 
     const LayoutObject& m_object;
     PaintInfo m_paintInfo;
-    OwnPtr<PaintInfo> m_filterPaintInfo;
+    std::unique_ptr<PaintInfo> m_filterPaintInfo;
     LayoutSVGResourceFilter* m_filter;
     LayoutSVGResourceClipper* m_clipper;
     SVGClipPainter::ClipperState m_clipperState;
     LayoutSVGResourceMasker* m_masker;
-    OwnPtr<CompositingRecorder> m_compositingRecorder;
-    OwnPtr<ClipPathRecorder> m_clipPathRecorder;
-    OwnPtr<SVGFilterRecordingContext> m_filterRecordingContext;
+    std::unique_ptr<CompositingRecorder> m_compositingRecorder;
+    std::unique_ptr<ClipPathRecorder> m_clipPathRecorder;
+    std::unique_ptr<SVGFilterRecordingContext> m_filterRecordingContext;
 #if ENABLE(ASSERT)
     bool m_applyClipMaskAndFilterIfNecessaryCalled;
 #endif
diff --git a/third_party/WebKit/Source/core/paint/TextPainterTest.cpp b/third_party/WebKit/Source/core/paint/TextPainterTest.cpp
index 807f57e7..cf65e59 100644
--- a/third_party/WebKit/Source/core/paint/TextPainterTest.cpp
+++ b/third_party/WebKit/Source/core/paint/TextPainterTest.cpp
@@ -15,6 +15,7 @@
 #include "core/style/ShadowList.h"
 #include "platform/graphics/paint/PaintController.h"
 #include "testing/gtest/include/gtest/gtest.h"
+#include <memory>
 
 namespace blink {
 namespace {
@@ -46,7 +47,7 @@
     }
 
     LayoutText* m_layoutText;
-    OwnPtr<PaintController> m_paintController;
+    std::unique_ptr<PaintController> m_paintController;
     GraphicsContext m_context;
 };
 
diff --git a/third_party/WebKit/Source/core/paint/ThemePainterMac.mm b/third_party/WebKit/Source/core/paint/ThemePainterMac.mm
index 5daffb72..a71ea3a 100644
--- a/third_party/WebKit/Source/core/paint/ThemePainterMac.mm
+++ b/third_party/WebKit/Source/core/paint/ThemePainterMac.mm
@@ -224,7 +224,7 @@
     trackInfo.reserved = 0;
     trackInfo.filler1 = 0;
 
-    OwnPtr<ImageBuffer> imageBuffer = ImageBuffer::create(inflatedRect.size());
+    std::unique_ptr<ImageBuffer> imageBuffer = ImageBuffer::create(inflatedRect.size());
     if (!imageBuffer)
         return true;
 
diff --git a/third_party/WebKit/Source/core/streams/ReadableStreamReaderTest.cpp b/third_party/WebKit/Source/core/streams/ReadableStreamReaderTest.cpp
index af7b78e..9004c71 100644
--- a/third_party/WebKit/Source/core/streams/ReadableStreamReaderTest.cpp
+++ b/third_party/WebKit/Source/core/streams/ReadableStreamReaderTest.cpp
@@ -16,6 +16,7 @@
 #include "core/streams/UnderlyingSource.h"
 #include "core/testing/DummyPageHolder.h"
 #include "testing/gtest/include/gtest/gtest.h"
+#include <memory>
 
 namespace blink {
 
@@ -150,7 +151,7 @@
         return ReadResultCapturingFunction::createFunction(getScriptState(), value);
     }
 
-    OwnPtr<DummyPageHolder> m_page;
+    std::unique_ptr<DummyPageHolder> m_page;
     Persistent<StringStream> m_stream;
 };
 
diff --git a/third_party/WebKit/Source/core/streams/ReadableStreamTest.cpp b/third_party/WebKit/Source/core/streams/ReadableStreamTest.cpp
index 8ee42c8..dc0a0d70 100644
--- a/third_party/WebKit/Source/core/streams/ReadableStreamTest.cpp
+++ b/third_party/WebKit/Source/core/streams/ReadableStreamTest.cpp
@@ -19,6 +19,7 @@
 #include "testing/gmock/include/gmock/gmock-more-actions.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
+#include <memory>
 
 namespace blink {
 
@@ -153,7 +154,7 @@
         return stream;
     }
 
-    OwnPtr<DummyPageHolder> m_page;
+    std::unique_ptr<DummyPageHolder> m_page;
     Persistent<MockUnderlyingSource> m_underlyingSource;
 };
 
diff --git a/third_party/WebKit/Source/core/style/CachedUAStyle.h b/third_party/WebKit/Source/core/style/CachedUAStyle.h
index f9cadf8b..347b4fe2 100644
--- a/third_party/WebKit/Source/core/style/CachedUAStyle.h
+++ b/third_party/WebKit/Source/core/style/CachedUAStyle.h
@@ -25,6 +25,8 @@
 #include "core/style/ComputedStyle.h"
 #include "wtf/Allocator.h"
 #include "wtf/Noncopyable.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
@@ -36,9 +38,9 @@
     USING_FAST_MALLOC(CachedUAStyle);
     WTF_MAKE_NONCOPYABLE(CachedUAStyle);
 public:
-    static PassOwnPtr<CachedUAStyle> create(const ComputedStyle* style)
+    static std::unique_ptr<CachedUAStyle> create(const ComputedStyle* style)
     {
-        return adoptPtr(new CachedUAStyle(style));
+        return wrapUnique(new CachedUAStyle(style));
     }
 
     BorderData border;
diff --git a/third_party/WebKit/Source/core/style/ComputedStyle.cpp b/third_party/WebKit/Source/core/style/ComputedStyle.cpp
index aedf1102..ed7babe 100644
--- a/third_party/WebKit/Source/core/style/ComputedStyle.cpp
+++ b/third_party/WebKit/Source/core/style/ComputedStyle.cpp
@@ -32,10 +32,10 @@
 #include "core/layout/TextAutosizer.h"
 #include "core/style/AppliedTextDecoration.h"
 #include "core/style/BorderEdge.h"
-#include "core/style/ContentData.h"
-#include "core/style/DataEquivalency.h"
 #include "core/style/ComputedStyleConstants.h"
+#include "core/style/ContentData.h"
 #include "core/style/CursorData.h"
+#include "core/style/DataEquivalency.h"
 #include "core/style/QuotesData.h"
 #include "core/style/ShadowList.h"
 #include "core/style/StyleImage.h"
@@ -52,8 +52,8 @@
 #include "platform/transforms/TranslateTransformOperation.h"
 #include "wtf/MathExtras.h"
 #include "wtf/PtrUtil.h"
-
 #include <algorithm>
+#include <memory>
 
 namespace blink {
 
@@ -406,7 +406,7 @@
     ComputedStyle* result = pseudo.get();
 
     if (!m_cachedPseudoStyles)
-        m_cachedPseudoStyles = adoptPtr(new PseudoStyleCache);
+        m_cachedPseudoStyles = wrapUnique(new PseudoStyleCache);
 
     m_cachedPseudoStyles->append(pseudo);
 
@@ -1149,9 +1149,9 @@
 
 CounterDirectiveMap& ComputedStyle::accessCounterDirectives()
 {
-    OwnPtr<CounterDirectiveMap>& map = rareNonInheritedData.access()->m_counterDirectives;
+    std::unique_ptr<CounterDirectiveMap>& map = rareNonInheritedData.access()->m_counterDirectives;
     if (!map)
-        map = adoptPtr(new CounterDirectiveMap);
+        map = wrapUnique(new CounterDirectiveMap);
     return *map;
 }
 
diff --git a/third_party/WebKit/Source/core/style/ComputedStyle.h b/third_party/WebKit/Source/core/style/ComputedStyle.h
index c058e29..4e50f80 100644
--- a/third_party/WebKit/Source/core/style/ComputedStyle.h
+++ b/third_party/WebKit/Source/core/style/ComputedStyle.h
@@ -28,9 +28,9 @@
 #include "core/CSSPropertyNames.h"
 #include "core/CoreExport.h"
 #include "core/style/BorderValue.h"
+#include "core/style/ComputedStyleConstants.h"
 #include "core/style/CounterDirectives.h"
 #include "core/style/DataRef.h"
-#include "core/style/ComputedStyleConstants.h"
 #include "core/style/LineClampValue.h"
 #include "core/style/NinePieceImage.h"
 #include "core/style/SVGComputedStyle.h"
@@ -71,9 +71,9 @@
 #include "platform/transforms/TransformOperations.h"
 #include "wtf/Forward.h"
 #include "wtf/LeakAnnotations.h"
-#include "wtf/OwnPtr.h"
 #include "wtf/RefCounted.h"
 #include "wtf/Vector.h"
+#include <memory>
 
 template<typename T, typename U> inline bool compareEqual(const T& t, const U& u) { return t == static_cast<T>(u); }
 
@@ -153,7 +153,7 @@
     DataRef<StyleInheritedData> inherited;
 
     // list of associated pseudo styles
-    OwnPtr<PseudoStyleCache> m_cachedPseudoStyles;
+    std::unique_ptr<PseudoStyleCache> m_cachedPseudoStyles;
 
     DataRef<SVGComputedStyle> m_svgStyle;
 
diff --git a/third_party/WebKit/Source/core/style/ContentData.cpp b/third_party/WebKit/Source/core/style/ContentData.cpp
index 7689ff27..6ea4e4d 100644
--- a/third_party/WebKit/Source/core/style/ContentData.cpp
+++ b/third_party/WebKit/Source/core/style/ContentData.cpp
@@ -28,6 +28,7 @@
 #include "core/layout/LayoutQuote.h"
 #include "core/layout/LayoutTextFragment.h"
 #include "core/style/ComputedStyle.h"
+#include <memory>
 
 namespace blink {
 
@@ -41,7 +42,7 @@
     return new TextContentData(text);
 }
 
-ContentData* ContentData::create(PassOwnPtr<CounterContent> counter)
+ContentData* ContentData::create(std::unique_ptr<CounterContent> counter)
 {
     return new CounterContentData(std::move(counter));
 }
diff --git a/third_party/WebKit/Source/core/style/ContentData.h b/third_party/WebKit/Source/core/style/ContentData.h
index 683319d..4ed54df 100644
--- a/third_party/WebKit/Source/core/style/ContentData.h
+++ b/third_party/WebKit/Source/core/style/ContentData.h
@@ -27,8 +27,8 @@
 
 #include "core/style/CounterContent.h"
 #include "core/style/StyleImage.h"
-#include "wtf/OwnPtr.h"
-#include "wtf/PassOwnPtr.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
@@ -40,7 +40,7 @@
 public:
     static ContentData* create(StyleImage*);
     static ContentData* create(const String&);
-    static ContentData* create(PassOwnPtr<CounterContent>);
+    static ContentData* create(std::unique_ptr<CounterContent>);
     static ContentData* create(QuoteType);
 
     virtual ~ContentData() { }
@@ -140,20 +140,20 @@
     friend class ContentData;
 public:
     const CounterContent* counter() const { return m_counter.get(); }
-    void setCounter(PassOwnPtr<CounterContent> counter) { m_counter = std::move(counter); }
+    void setCounter(std::unique_ptr<CounterContent> counter) { m_counter = std::move(counter); }
 
     bool isCounter() const override { return true; }
     LayoutObject* createLayoutObject(Document&, ComputedStyle&) const override;
 
 private:
-    CounterContentData(PassOwnPtr<CounterContent> counter)
+    CounterContentData(std::unique_ptr<CounterContent> counter)
         : m_counter(std::move(counter))
     {
     }
 
     ContentData* cloneInternal() const override
     {
-        OwnPtr<CounterContent> counterData = adoptPtr(new CounterContent(*counter()));
+        std::unique_ptr<CounterContent> counterData = wrapUnique(new CounterContent(*counter()));
         return create(std::move(counterData));
     }
 
@@ -164,7 +164,7 @@
         return *static_cast<const CounterContentData&>(data).counter() == *counter();
     }
 
-    OwnPtr<CounterContent> m_counter;
+    std::unique_ptr<CounterContent> m_counter;
 };
 
 DEFINE_CONTENT_DATA_TYPE_CASTS(Counter);
diff --git a/third_party/WebKit/Source/core/style/CounterDirectives.cpp b/third_party/WebKit/Source/core/style/CounterDirectives.cpp
index ce9d391cb..bbb3526 100644
--- a/third_party/WebKit/Source/core/style/CounterDirectives.cpp
+++ b/third_party/WebKit/Source/core/style/CounterDirectives.cpp
@@ -21,7 +21,8 @@
 
 #include "core/style/CounterDirectives.h"
 
-#include "wtf/PassOwnPtr.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
@@ -33,9 +34,9 @@
         && a.resetValue() == b.resetValue();
 }
 
-PassOwnPtr<CounterDirectiveMap> clone(const CounterDirectiveMap& counterDirectives)
+std::unique_ptr<CounterDirectiveMap> clone(const CounterDirectiveMap& counterDirectives)
 {
-    OwnPtr<CounterDirectiveMap> result = adoptPtr(new CounterDirectiveMap);
+    std::unique_ptr<CounterDirectiveMap> result = wrapUnique(new CounterDirectiveMap);
     *result = counterDirectives;
     return result;
 }
diff --git a/third_party/WebKit/Source/core/style/CounterDirectives.h b/third_party/WebKit/Source/core/style/CounterDirectives.h
index 6e6de38..a7205990 100644
--- a/third_party/WebKit/Source/core/style/CounterDirectives.h
+++ b/third_party/WebKit/Source/core/style/CounterDirectives.h
@@ -31,6 +31,7 @@
 #include "wtf/RefPtr.h"
 #include "wtf/text/AtomicString.h"
 #include "wtf/text/AtomicStringHash.h"
+#include <memory>
 
 namespace blink {
 
@@ -106,7 +107,7 @@
 
 typedef HashMap<AtomicString, CounterDirectives> CounterDirectiveMap;
 
-PassOwnPtr<CounterDirectiveMap> clone(const CounterDirectiveMap&);
+std::unique_ptr<CounterDirectiveMap> clone(const CounterDirectiveMap&);
 
 } // namespace blink
 
diff --git a/third_party/WebKit/Source/core/style/DataEquivalency.h b/third_party/WebKit/Source/core/style/DataEquivalency.h
index b9b49370..b37b626 100644
--- a/third_party/WebKit/Source/core/style/DataEquivalency.h
+++ b/third_party/WebKit/Source/core/style/DataEquivalency.h
@@ -5,8 +5,8 @@
 #ifndef DataEquivalency_h
 #define DataEquivalency_h
 
-#include "wtf/OwnPtr.h"
 #include "wtf/RefPtr.h"
+#include <memory>
 
 namespace blink {
 
@@ -44,7 +44,7 @@
 }
 
 template <typename T>
-bool dataEquivalent(const OwnPtr<T>& a, const OwnPtr<T>& b)
+bool dataEquivalent(const std::unique_ptr<T>& a, const std::unique_ptr<T>& b)
 {
     return dataEquivalent(a.get(), b.get());
 }
diff --git a/third_party/WebKit/Source/core/style/DataPersistent.h b/third_party/WebKit/Source/core/style/DataPersistent.h
index b97a41a..e2a3118c7 100644
--- a/third_party/WebKit/Source/core/style/DataPersistent.h
+++ b/third_party/WebKit/Source/core/style/DataPersistent.h
@@ -7,7 +7,8 @@
 
 #include "platform/heap/Handle.h"
 #include "wtf/Allocator.h"
-#include "wtf/OwnPtr.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
@@ -36,7 +37,7 @@
         : m_ownCopy(false)
     {
         if (other.m_data)
-            m_data = adoptPtr(new Persistent<T>(other.m_data->get()));
+            m_data = wrapUnique(new Persistent<T>(other.m_data->get()));
 
         // Invalidated, subsequent mutations will happen on a new copy.
         //
@@ -62,7 +63,7 @@
     void init()
     {
         ASSERT(!m_data);
-        m_data = adoptPtr(new Persistent<T>(T::create()));
+        m_data = wrapUnique(new Persistent<T>(T::create()));
         m_ownCopy = true;
     }
 
@@ -83,7 +84,7 @@
     void operator=(std::nullptr_t) { m_data.clear(); }
 private:
     // Reduce size of DataPersistent<> by delaying creation of Persistent<>.
-    OwnPtr<Persistent<T>> m_data;
+    std::unique_ptr<Persistent<T>> m_data;
     unsigned m_ownCopy:1;
 };
 
diff --git a/third_party/WebKit/Source/core/style/GridArea.h b/third_party/WebKit/Source/core/style/GridArea.h
index 52c3d03..7a4e37ae 100644
--- a/third_party/WebKit/Source/core/style/GridArea.h
+++ b/third_party/WebKit/Source/core/style/GridArea.h
@@ -34,7 +34,6 @@
 #include "core/style/GridPositionsResolver.h"
 #include "wtf/Allocator.h"
 #include "wtf/HashMap.h"
-#include "wtf/PassOwnPtr.h"
 #include "wtf/text/WTFString.h"
 #include <algorithm>
 
diff --git a/third_party/WebKit/Source/core/style/SVGComputedStyleDefs.h b/third_party/WebKit/Source/core/style/SVGComputedStyleDefs.h
index e2447cd..fc171a1 100644
--- a/third_party/WebKit/Source/core/style/SVGComputedStyleDefs.h
+++ b/third_party/WebKit/Source/core/style/SVGComputedStyleDefs.h
@@ -33,8 +33,6 @@
 #include "platform/Length.h"
 #include "platform/graphics/Color.h"
 #include "wtf/Allocator.h"
-#include "wtf/OwnPtr.h"
-#include "wtf/PassOwnPtr.h"
 #include "wtf/RefCounted.h"
 #include "wtf/RefPtr.h"
 #include "wtf/RefVector.h"
diff --git a/third_party/WebKit/Source/core/style/ShadowList.cpp b/third_party/WebKit/Source/core/style/ShadowList.cpp
index 281d415..126b909 100644
--- a/third_party/WebKit/Source/core/style/ShadowList.cpp
+++ b/third_party/WebKit/Source/core/style/ShadowList.cpp
@@ -31,7 +31,7 @@
 #include "core/style/ShadowList.h"
 
 #include "platform/geometry/FloatRect.h"
-#include "wtf/OwnPtr.h"
+#include <memory>
 
 namespace blink {
 
@@ -77,9 +77,9 @@
     return ShadowList::adopt(shadows);
 }
 
-PassOwnPtr<DrawLooperBuilder> ShadowList::createDrawLooper(DrawLooperBuilder::ShadowAlphaMode alphaMode, const Color& currentColor, bool isHorizontal) const
+std::unique_ptr<DrawLooperBuilder> ShadowList::createDrawLooper(DrawLooperBuilder::ShadowAlphaMode alphaMode, const Color& currentColor, bool isHorizontal) const
 {
-    OwnPtr<DrawLooperBuilder> drawLooperBuilder = DrawLooperBuilder::create();
+    std::unique_ptr<DrawLooperBuilder> drawLooperBuilder = DrawLooperBuilder::create();
     for (size_t i = shadows().size(); i--; ) {
         const ShadowData& shadow = shadows()[i];
         float shadowX = isHorizontal ? shadow.x() : shadow.y();
diff --git a/third_party/WebKit/Source/core/style/ShadowList.h b/third_party/WebKit/Source/core/style/ShadowList.h
index 5172e92..0ddd80e 100644
--- a/third_party/WebKit/Source/core/style/ShadowList.h
+++ b/third_party/WebKit/Source/core/style/ShadowList.h
@@ -36,9 +36,9 @@
 #include "platform/geometry/FloatRectOutsets.h"
 #include "platform/geometry/LayoutRect.h"
 #include "platform/graphics/DrawLooperBuilder.h"
-#include "wtf/PassOwnPtr.h"
 #include "wtf/RefCounted.h"
 #include "wtf/Vector.h"
+#include <memory>
 
 namespace blink {
 
@@ -68,7 +68,7 @@
 
     void adjustRectForShadow(FloatRect&) const;
 
-    PassOwnPtr<DrawLooperBuilder> createDrawLooper(DrawLooperBuilder::ShadowAlphaMode, const Color& currentColor, bool isHorizontal = true) const;
+    std::unique_ptr<DrawLooperBuilder> createDrawLooper(DrawLooperBuilder::ShadowAlphaMode, const Color& currentColor, bool isHorizontal = true) const;
 
 private:
     ShadowList(ShadowDataVector& shadows)
diff --git a/third_party/WebKit/Source/core/style/StylePath.cpp b/third_party/WebKit/Source/core/style/StylePath.cpp
index 397bc12..147919ac 100644
--- a/third_party/WebKit/Source/core/style/StylePath.cpp
+++ b/third_party/WebKit/Source/core/style/StylePath.cpp
@@ -8,10 +8,12 @@
 #include "core/svg/SVGPathByteStream.h"
 #include "core/svg/SVGPathUtilities.h"
 #include "platform/graphics/Path.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
-StylePath::StylePath(PassOwnPtr<SVGPathByteStream> pathByteStream)
+StylePath::StylePath(std::unique_ptr<SVGPathByteStream> pathByteStream)
     : m_byteStream(std::move(pathByteStream))
     , m_pathLength(std::numeric_limits<float>::quiet_NaN())
 {
@@ -22,7 +24,7 @@
 {
 }
 
-PassRefPtr<StylePath> StylePath::create(PassOwnPtr<SVGPathByteStream> pathByteStream)
+PassRefPtr<StylePath> StylePath::create(std::unique_ptr<SVGPathByteStream> pathByteStream)
 {
     return adoptRef(new StylePath(std::move(pathByteStream)));
 }
@@ -36,7 +38,7 @@
 const Path& StylePath::path() const
 {
     if (!m_path) {
-        m_path = adoptPtr(new Path);
+        m_path = wrapUnique(new Path);
         buildPathFromByteStream(*m_byteStream, *m_path);
     }
     return *m_path;
diff --git a/third_party/WebKit/Source/core/style/StylePath.h b/third_party/WebKit/Source/core/style/StylePath.h
index 763caab..6fb672e 100644
--- a/third_party/WebKit/Source/core/style/StylePath.h
+++ b/third_party/WebKit/Source/core/style/StylePath.h
@@ -6,10 +6,10 @@
 #define StylePath_h
 
 #include "platform/heap/Handle.h"
-#include "wtf/OwnPtr.h"
 #include "wtf/PassRefPtr.h"
 #include "wtf/RefCounted.h"
 #include "wtf/RefPtr.h"
+#include <memory>
 
 namespace blink {
 
@@ -19,7 +19,7 @@
 
 class StylePath : public RefCounted<StylePath> {
 public:
-    static PassRefPtr<StylePath> create(PassOwnPtr<SVGPathByteStream>);
+    static PassRefPtr<StylePath> create(std::unique_ptr<SVGPathByteStream>);
     ~StylePath();
 
     static StylePath* emptyPath();
@@ -35,10 +35,10 @@
     bool operator==(const StylePath&) const;
 
 private:
-    explicit StylePath(PassOwnPtr<SVGPathByteStream>);
+    explicit StylePath(std::unique_ptr<SVGPathByteStream>);
 
-    OwnPtr<SVGPathByteStream> m_byteStream;
-    mutable OwnPtr<Path> m_path;
+    std::unique_ptr<SVGPathByteStream> m_byteStream;
+    mutable std::unique_ptr<Path> m_path;
     mutable float m_pathLength;
 };
 
diff --git a/third_party/WebKit/Source/core/style/StyleRareNonInheritedData.h b/third_party/WebKit/Source/core/style/StyleRareNonInheritedData.h
index 5f6563a7..5d9b9e2e4 100644
--- a/third_party/WebKit/Source/core/style/StyleRareNonInheritedData.h
+++ b/third_party/WebKit/Source/core/style/StyleRareNonInheritedData.h
@@ -28,11 +28,11 @@
 #include "core/CoreExport.h"
 #include "core/css/StyleColor.h"
 #include "core/layout/ClipPathOperation.h"
+#include "core/style/ComputedStyleConstants.h"
 #include "core/style/CounterDirectives.h"
 #include "core/style/DataPersistent.h"
 #include "core/style/DataRef.h"
 #include "core/style/FillLayer.h"
-#include "core/style/ComputedStyleConstants.h"
 #include "core/style/LineClampValue.h"
 #include "core/style/NinePieceImage.h"
 #include "core/style/ShapeValue.h"
@@ -40,10 +40,10 @@
 #include "core/style/StyleScrollSnapData.h"
 #include "core/style/StyleSelfAlignmentData.h"
 #include "platform/LengthPoint.h"
-#include "wtf/OwnPtr.h"
 #include "wtf/PassRefPtr.h"
 #include "wtf/RefCounted.h"
 #include "wtf/Vector.h"
+#include <memory>
 
 namespace blink {
 
@@ -123,9 +123,9 @@
     DataRef<StyleScrollSnapData> m_scrollSnap;
 
     Persistent<ContentData> m_content;
-    OwnPtr<CounterDirectiveMap> m_counterDirectives;
-    OwnPtr<CSSAnimationData> m_animations;
-    OwnPtr<CSSTransitionData> m_transitions;
+    std::unique_ptr<CounterDirectiveMap> m_counterDirectives;
+    std::unique_ptr<CSSAnimationData> m_animations;
+    std::unique_ptr<CSSTransitionData> m_transitions;
 
     RefPtr<ShadowList> m_boxShadow;
 
diff --git a/third_party/WebKit/Source/core/svg/SVGAnimateElement.h b/third_party/WebKit/Source/core/svg/SVGAnimateElement.h
index 7a40781..b9d1c953 100644
--- a/third_party/WebKit/Source/core/svg/SVGAnimateElement.h
+++ b/third_party/WebKit/Source/core/svg/SVGAnimateElement.h
@@ -28,7 +28,6 @@
 #include "core/svg/SVGAnimatedTypeAnimator.h"
 #include "core/svg/SVGAnimationElement.h"
 #include "platform/heap/Handle.h"
-#include "wtf/OwnPtr.h"
 #include <base/gtest_prod_util.h>
 
 namespace blink {
diff --git a/third_party/WebKit/Source/core/svg/SVGAnimatedTypeAnimator.h b/third_party/WebKit/Source/core/svg/SVGAnimatedTypeAnimator.h
index 37eabf60..5f2cbca 100644
--- a/third_party/WebKit/Source/core/svg/SVGAnimatedTypeAnimator.h
+++ b/third_party/WebKit/Source/core/svg/SVGAnimatedTypeAnimator.h
@@ -23,7 +23,6 @@
 
 #include "core/svg/properties/SVGPropertyInfo.h"
 #include "platform/heap/Handle.h"
-#include "wtf/PassOwnPtr.h"
 #include "wtf/RefPtr.h"
 #include "wtf/Vector.h"
 #include "wtf/text/WTFString.h"
diff --git a/third_party/WebKit/Source/core/svg/SVGElement.h b/third_party/WebKit/Source/core/svg/SVGElement.h
index 4f68a87..a134ab3d 100644
--- a/third_party/WebKit/Source/core/svg/SVGElement.h
+++ b/third_party/WebKit/Source/core/svg/SVGElement.h
@@ -30,7 +30,6 @@
 #include "platform/heap/Handle.h"
 #include "wtf/Allocator.h"
 #include "wtf/HashMap.h"
-#include "wtf/OwnPtr.h"
 
 namespace blink {
 
diff --git a/third_party/WebKit/Source/core/svg/SVGPath.cpp b/third_party/WebKit/Source/core/svg/SVGPath.cpp
index 4784626..e9f3137 100644
--- a/third_party/WebKit/Source/core/svg/SVGPath.cpp
+++ b/third_party/WebKit/Source/core/svg/SVGPath.cpp
@@ -30,14 +30,15 @@
 #include "core/svg/SVGPathByteStreamSource.h"
 #include "core/svg/SVGPathUtilities.h"
 #include "platform/graphics/Path.h"
+#include <memory>
 
 namespace blink {
 
 namespace {
 
-PassOwnPtr<SVGPathByteStream> blendPathByteStreams(const SVGPathByteStream& fromStream, const SVGPathByteStream& toStream, float progress)
+std::unique_ptr<SVGPathByteStream> blendPathByteStreams(const SVGPathByteStream& fromStream, const SVGPathByteStream& toStream, float progress)
 {
-    OwnPtr<SVGPathByteStream> resultStream = SVGPathByteStream::create();
+    std::unique_ptr<SVGPathByteStream> resultStream = SVGPathByteStream::create();
     SVGPathByteStreamBuilder builder(*resultStream);
     SVGPathByteStreamSource fromSource(fromStream);
     SVGPathByteStreamSource toSource(toStream);
@@ -46,9 +47,9 @@
     return resultStream;
 }
 
-PassOwnPtr<SVGPathByteStream> addPathByteStreams(const SVGPathByteStream& fromStream, const SVGPathByteStream& byStream, unsigned repeatCount = 1)
+std::unique_ptr<SVGPathByteStream> addPathByteStreams(const SVGPathByteStream& fromStream, const SVGPathByteStream& byStream, unsigned repeatCount = 1)
 {
-    OwnPtr<SVGPathByteStream> resultStream = SVGPathByteStream::create();
+    std::unique_ptr<SVGPathByteStream> resultStream = SVGPathByteStream::create();
     SVGPathByteStreamBuilder builder(*resultStream);
     SVGPathByteStreamSource fromSource(fromStream);
     SVGPathByteStreamSource bySource(byStream);
@@ -57,7 +58,7 @@
     return resultStream;
 }
 
-PassOwnPtr<SVGPathByteStream> conditionallyAddPathByteStreams(PassOwnPtr<SVGPathByteStream> fromStream, const SVGPathByteStream& byStream, unsigned repeatCount = 1)
+std::unique_ptr<SVGPathByteStream> conditionallyAddPathByteStreams(std::unique_ptr<SVGPathByteStream> fromStream, const SVGPathByteStream& byStream, unsigned repeatCount = 1)
 {
     if (fromStream->isEmpty() || byStream.isEmpty())
         return fromStream;
@@ -91,7 +92,7 @@
 
 SVGParsingError SVGPath::setValueAsString(const String& string)
 {
-    OwnPtr<SVGPathByteStream> byteStream = SVGPathByteStream::create();
+    std::unique_ptr<SVGPathByteStream> byteStream = SVGPathByteStream::create();
     SVGParsingError parseStatus = buildByteStreamFromString(string, *byteStream);
     m_pathValue = CSSPathValue::create(std::move(byteStream));
     return parseStatus;
@@ -99,7 +100,7 @@
 
 SVGPropertyBase* SVGPath::cloneForAnimation(const String& value) const
 {
-    OwnPtr<SVGPathByteStream> byteStream = SVGPathByteStream::create();
+    std::unique_ptr<SVGPathByteStream> byteStream = SVGPathByteStream::create();
     buildByteStreamFromString(value, *byteStream);
     return SVGPath::create(CSSPathValue::create(std::move(byteStream)));
 }
@@ -130,7 +131,7 @@
     const SVGPath& from = toSVGPath(*fromValue);
     const SVGPathByteStream* fromStream = &from.byteStream();
 
-    OwnPtr<SVGPathByteStream> copy;
+    std::unique_ptr<SVGPathByteStream> copy;
     if (isToAnimation) {
         copy = byteStream().clone();
         fromStream = copy.get();
@@ -149,7 +150,7 @@
         }
     }
 
-    OwnPtr<SVGPathByteStream> newStream = blendPathByteStreams(*fromStream, toStream, percentage);
+    std::unique_ptr<SVGPathByteStream> newStream = blendPathByteStreams(*fromStream, toStream, percentage);
 
     // Handle additive='sum'.
     if (animationElement->isAdditive() && !isToAnimation)
diff --git a/third_party/WebKit/Source/core/svg/SVGPathByteStream.h b/third_party/WebKit/Source/core/svg/SVGPathByteStream.h
index 31ac395..980bc20c 100644
--- a/third_party/WebKit/Source/core/svg/SVGPathByteStream.h
+++ b/third_party/WebKit/Source/core/svg/SVGPathByteStream.h
@@ -21,8 +21,9 @@
 #define SVGPathByteStream_h
 
 #include "wtf/Noncopyable.h"
-#include "wtf/PassOwnPtr.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/Vector.h"
+#include <memory>
 
 namespace blink {
 
@@ -35,14 +36,14 @@
 class SVGPathByteStream {
     USING_FAST_MALLOC(SVGPathByteStream);
 public:
-    static PassOwnPtr<SVGPathByteStream> create()
+    static std::unique_ptr<SVGPathByteStream> create()
     {
-        return adoptPtr(new SVGPathByteStream);
+        return wrapUnique(new SVGPathByteStream);
     }
 
-    PassOwnPtr<SVGPathByteStream> clone() const
+    std::unique_ptr<SVGPathByteStream> clone() const
     {
-        return adoptPtr(new SVGPathByteStream(m_data));
+        return wrapUnique(new SVGPathByteStream(m_data));
     }
 
     typedef Vector<unsigned char> Data;
diff --git a/third_party/WebKit/Source/core/svg/UnsafeSVGAttributeSanitizationTest.cpp b/third_party/WebKit/Source/core/svg/UnsafeSVGAttributeSanitizationTest.cpp
index 27cccf53a..8a8aaea 100644
--- a/third_party/WebKit/Source/core/svg/UnsafeSVGAttributeSanitizationTest.cpp
+++ b/third_party/WebKit/Source/core/svg/UnsafeSVGAttributeSanitizationTest.cpp
@@ -27,6 +27,7 @@
 #include "wtf/Vector.h"
 #include "wtf/text/AtomicString.h"
 #include "wtf/text/WTFString.h"
+#include <memory>
 
 // Test that SVG content with JavaScript URLs is sanitized by removing
 // the URLs. This sanitization happens when the content is pasted or
@@ -76,7 +77,7 @@
     UnsafeSVGAttributeSanitizationTest,
     pasteAnchor_javaScriptHrefIsStripped)
 {
-    OwnPtr<DummyPageHolder> pageHolder = DummyPageHolder::create(IntSize(1, 1));
+    std::unique_ptr<DummyPageHolder> pageHolder = DummyPageHolder::create(IntSize(1, 1));
     static const char unsafeContent[] =
         "<svg xmlns='http://www.w3.org/2000/svg' "
         "     width='1cm' height='1cm'>"
@@ -98,7 +99,7 @@
     UnsafeSVGAttributeSanitizationTest,
     pasteAnchor_javaScriptXlinkHrefIsStripped)
 {
-    OwnPtr<DummyPageHolder> pageHolder = DummyPageHolder::create(IntSize(1, 1));
+    std::unique_ptr<DummyPageHolder> pageHolder = DummyPageHolder::create(IntSize(1, 1));
     static const char unsafeContent[] =
         "<svg xmlns='http://www.w3.org/2000/svg' "
         "     xmlns:xlink='http://www.w3.org/1999/xlink'"
@@ -121,7 +122,7 @@
     UnsafeSVGAttributeSanitizationTest,
     pasteAnchor_javaScriptHrefIsStripped_caseAndEntityInProtocol)
 {
-    OwnPtr<DummyPageHolder> pageHolder = DummyPageHolder::create(IntSize(1, 1));
+    std::unique_ptr<DummyPageHolder> pageHolder = DummyPageHolder::create(IntSize(1, 1));
     static const char unsafeContent[] =
         "<svg xmlns='http://www.w3.org/2000/svg' "
         "     width='1cm' height='1cm'>"
@@ -143,7 +144,7 @@
     UnsafeSVGAttributeSanitizationTest,
     pasteAnchor_javaScriptXlinkHrefIsStripped_caseAndEntityInProtocol)
 {
-    OwnPtr<DummyPageHolder> pageHolder = DummyPageHolder::create(IntSize(1, 1));
+    std::unique_ptr<DummyPageHolder> pageHolder = DummyPageHolder::create(IntSize(1, 1));
     static const char unsafeContent[] =
         "<svg xmlns='http://www.w3.org/2000/svg' "
         "     xmlns:xlink='http://www.w3.org/1999/xlink'"
@@ -166,7 +167,7 @@
     UnsafeSVGAttributeSanitizationTest,
     pasteAnchor_javaScriptHrefIsStripped_entityWithoutSemicolonInProtocol)
 {
-    OwnPtr<DummyPageHolder> pageHolder = DummyPageHolder::create(IntSize(1, 1));
+    std::unique_ptr<DummyPageHolder> pageHolder = DummyPageHolder::create(IntSize(1, 1));
     static const char unsafeContent[] =
         "<svg xmlns='http://www.w3.org/2000/svg' "
         "     width='1cm' height='1cm'>"
@@ -188,7 +189,7 @@
     UnsafeSVGAttributeSanitizationTest,
     pasteAnchor_javaScriptXlinkHrefIsStripped_entityWithoutSemicolonInProtocol)
 {
-    OwnPtr<DummyPageHolder> pageHolder = DummyPageHolder::create(IntSize(1, 1));
+    std::unique_ptr<DummyPageHolder> pageHolder = DummyPageHolder::create(IntSize(1, 1));
     static const char unsafeContent[] =
         "<svg xmlns='http://www.w3.org/2000/svg' "
         "     xmlns:xlink='http://www.w3.org/1999/xlink'"
@@ -216,7 +217,7 @@
     UnsafeSVGAttributeSanitizationTest,
     pasteAnimatedAnchor_javaScriptHrefIsStripped_caseAndEntityInProtocol)
 {
-    OwnPtr<DummyPageHolder> pageHolder = DummyPageHolder::create(IntSize(1, 1));
+    std::unique_ptr<DummyPageHolder> pageHolder = DummyPageHolder::create(IntSize(1, 1));
     static const char unsafeContent[] =
         "<svg xmlns='http://www.w3.org/2000/svg' "
         "     width='1cm' height='1cm'>"
@@ -240,7 +241,7 @@
     UnsafeSVGAttributeSanitizationTest,
     pasteAnimatedAnchor_javaScriptXlinkHrefIsStripped_caseAndEntityInProtocol)
 {
-    OwnPtr<DummyPageHolder> pageHolder = DummyPageHolder::create(IntSize(1, 1));
+    std::unique_ptr<DummyPageHolder> pageHolder = DummyPageHolder::create(IntSize(1, 1));
     static const char unsafeContent[] =
         "<svg xmlns='http://www.w3.org/2000/svg' "
         "     xmlns:xlink='http://www.w3.org/1999/xlink'"
diff --git a/third_party/WebKit/Source/core/svg/graphics/SVGImageChromeClient.cpp b/third_party/WebKit/Source/core/svg/graphics/SVGImageChromeClient.cpp
index 2893343..0a9074f 100644
--- a/third_party/WebKit/Source/core/svg/graphics/SVGImageChromeClient.cpp
+++ b/third_party/WebKit/Source/core/svg/graphics/SVGImageChromeClient.cpp
@@ -31,6 +31,7 @@
 #include "core/svg/graphics/SVGImage.h"
 #include "platform/graphics/ImageObserver.h"
 #include "wtf/CurrentTime.h"
+#include "wtf/PtrUtil.h"
 
 namespace blink {
 
@@ -39,7 +40,7 @@
 SVGImageChromeClient::SVGImageChromeClient(SVGImage* image)
     : m_image(image)
     , m_animationTimer(
-        adoptPtr(new Timer<SVGImageChromeClient>(
+        wrapUnique(new Timer<SVGImageChromeClient>(
             this, &SVGImageChromeClient::animationTimerFired)))
     , m_timelineState(Running)
 {
@@ -113,7 +114,7 @@
 
 void SVGImageChromeClient::setTimer(Timer<SVGImageChromeClient>* timer)
 {
-    m_animationTimer = adoptPtr(timer);
+    m_animationTimer = wrapUnique(timer);
 }
 
 void SVGImageChromeClient::animationTimerFired(Timer<SVGImageChromeClient>*)
diff --git a/third_party/WebKit/Source/core/svg/graphics/SVGImageChromeClient.h b/third_party/WebKit/Source/core/svg/graphics/SVGImageChromeClient.h
index 32a2a3b..35e6148 100644
--- a/third_party/WebKit/Source/core/svg/graphics/SVGImageChromeClient.h
+++ b/third_party/WebKit/Source/core/svg/graphics/SVGImageChromeClient.h
@@ -33,6 +33,7 @@
 #include "core/CoreExport.h"
 #include "core/loader/EmptyClients.h"
 #include "platform/Timer.h"
+#include <memory>
 
 namespace blink {
 
@@ -61,7 +62,7 @@
     void animationTimerFired(Timer<SVGImageChromeClient>*);
 
     SVGImage* m_image;
-    OwnPtr<Timer<SVGImageChromeClient>> m_animationTimer;
+    std::unique_ptr<Timer<SVGImageChromeClient>> m_animationTimer;
     enum {
         Running,
         Suspended,
diff --git a/third_party/WebKit/Source/core/testing/DummyPageHolder.cpp b/third_party/WebKit/Source/core/testing/DummyPageHolder.cpp
index 6747c7ee..a95add4 100644
--- a/third_party/WebKit/Source/core/testing/DummyPageHolder.cpp
+++ b/third_party/WebKit/Source/core/testing/DummyPageHolder.cpp
@@ -38,6 +38,8 @@
 #include "core/frame/VisualViewport.h"
 #include "core/loader/EmptyClients.h"
 #include "wtf/Assertions.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
@@ -46,12 +48,12 @@
     settings.setRootLayerScrolls(true);
 }
 
-PassOwnPtr<DummyPageHolder> DummyPageHolder::create(
+std::unique_ptr<DummyPageHolder> DummyPageHolder::create(
     const IntSize& initialViewSize,
     Page::PageClients* pageClients,
     FrameLoaderClient* frameLoaderClient,
     FrameSettingOverrideFunction settingOverrider) {
-    return adoptPtr(new DummyPageHolder(initialViewSize, pageClients, frameLoaderClient, settingOverrider));
+    return wrapUnique(new DummyPageHolder(initialViewSize, pageClients, frameLoaderClient, settingOverrider));
 }
 
 DummyPageHolder::DummyPageHolder(
diff --git a/third_party/WebKit/Source/core/testing/DummyPageHolder.h b/third_party/WebKit/Source/core/testing/DummyPageHolder.h
index 67257e8..5704e1ef 100644
--- a/third_party/WebKit/Source/core/testing/DummyPageHolder.h
+++ b/third_party/WebKit/Source/core/testing/DummyPageHolder.h
@@ -37,8 +37,7 @@
 #include "platform/heap/Handle.h"
 #include "wtf/Allocator.h"
 #include "wtf/Noncopyable.h"
-#include "wtf/OwnPtr.h"
-#include "wtf/PassOwnPtr.h"
+#include <memory>
 
 namespace blink {
 
@@ -65,7 +64,7 @@
     WTF_MAKE_NONCOPYABLE(DummyPageHolder);
     USING_FAST_MALLOC(DummyPageHolder);
 public:
-    static PassOwnPtr<DummyPageHolder> create(
+    static std::unique_ptr<DummyPageHolder> create(
         const IntSize& initialViewSize = IntSize(),
         Page::PageClients* = 0,
         FrameLoaderClient* = nullptr,
diff --git a/third_party/WebKit/Source/core/testing/Internals.cpp b/third_party/WebKit/Source/core/testing/Internals.cpp
index 20d5a45..8e01970 100644
--- a/third_party/WebKit/Source/core/testing/Internals.cpp
+++ b/third_party/WebKit/Source/core/testing/Internals.cpp
@@ -145,10 +145,11 @@
 #include "public/platform/WebGraphicsContext3DProvider.h"
 #include "public/platform/WebLayer.h"
 #include "wtf/InstanceCounter.h"
-#include "wtf/PassOwnPtr.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/dtoa.h"
 #include "wtf/text/StringBuffer.h"
 #include <deque>
+#include <memory>
 #include <v8.h>
 
 namespace blink {
@@ -1473,7 +1474,7 @@
 Vector<AtomicString> Internals::htmlTags()
 {
     Vector<AtomicString> tags(HTMLNames::HTMLTagsCount);
-    OwnPtr<const HTMLQualifiedName*[]> qualifiedNames = HTMLNames::getHTMLTags();
+    std::unique_ptr<const HTMLQualifiedName*[]> qualifiedNames = HTMLNames::getHTMLTags();
     for (size_t i = 0; i < HTMLNames::HTMLTagsCount; ++i)
         tags[i] = qualifiedNames[i]->localName();
     return tags;
@@ -1487,7 +1488,7 @@
 Vector<AtomicString> Internals::svgTags()
 {
     Vector<AtomicString> tags(SVGNames::SVGTagsCount);
-    OwnPtr<const SVGQualifiedName*[]> qualifiedNames = SVGNames::getSVGTags();
+    std::unique_ptr<const SVGQualifiedName*[]> qualifiedNames = SVGNames::getSVGTags();
     for (size_t i = 0; i < SVGNames::SVGTagsCount; ++i)
         tags[i] = qualifiedNames[i]->localName();
     return tags;
@@ -2219,7 +2220,7 @@
 
 bool Internals::loseSharedGraphicsContext3D()
 {
-    OwnPtr<WebGraphicsContext3DProvider> sharedProvider = adoptPtr(Platform::current()->createSharedOffscreenGraphicsContext3DProvider());
+    std::unique_ptr<WebGraphicsContext3DProvider> sharedProvider = wrapUnique(Platform::current()->createSharedOffscreenGraphicsContext3DProvider());
     if (!sharedProvider)
         return false;
     gpu::gles2::GLES2Interface* sharedGL = sharedProvider->contextGL();
diff --git a/third_party/WebKit/Source/core/testing/NullExecutionContext.h b/third_party/WebKit/Source/core/testing/NullExecutionContext.h
index 10a4500f..f9847e99 100644
--- a/third_party/WebKit/Source/core/testing/NullExecutionContext.h
+++ b/third_party/WebKit/Source/core/testing/NullExecutionContext.h
@@ -12,6 +12,7 @@
 #include "core/inspector/ConsoleMessage.h"
 #include "platform/heap/Handle.h"
 #include "platform/weborigin/KURL.h"
+#include <memory>
 
 namespace blink {
 
@@ -37,7 +38,7 @@
     DOMTimerCoordinator* timers() override { return nullptr; }
 
     void addConsoleMessage(ConsoleMessage*) override { }
-    void logExceptionToConsole(const String& errorMessage, PassOwnPtr<SourceLocation>) override { }
+    void logExceptionToConsole(const String& errorMessage, std::unique_ptr<SourceLocation>) override { }
 
     void setIsSecureContext(bool);
     bool isSecureContext(String& errorMessage, const SecureContextCheck = StandardSecureContextCheck) const override;
diff --git a/third_party/WebKit/Source/core/testing/PrivateScriptTestTest.cpp b/third_party/WebKit/Source/core/testing/PrivateScriptTestTest.cpp
index d45a90db..2c71ba8 100644
--- a/third_party/WebKit/Source/core/testing/PrivateScriptTestTest.cpp
+++ b/third_party/WebKit/Source/core/testing/PrivateScriptTestTest.cpp
@@ -10,6 +10,7 @@
 #include "bindings/core/v8/V8PrivateScriptTest.h"
 #include "core/testing/DummyPageHolder.h"
 #include "testing/gtest/include/gtest/gtest.h"
+#include <memory>
 
 // PrivateScriptTest.js is available only in debug builds.
 #ifndef NDEBUG
diff --git a/third_party/WebKit/Source/core/workers/DedicatedWorkerGlobalScope.cpp b/third_party/WebKit/Source/core/workers/DedicatedWorkerGlobalScope.cpp
index 846935f..d0f92280 100644
--- a/third_party/WebKit/Source/core/workers/DedicatedWorkerGlobalScope.cpp
+++ b/third_party/WebKit/Source/core/workers/DedicatedWorkerGlobalScope.cpp
@@ -41,10 +41,11 @@
 #include "core/workers/InProcessWorkerObjectProxy.h"
 #include "core/workers/WorkerClients.h"
 #include "core/workers/WorkerThreadStartupData.h"
+#include <memory>
 
 namespace blink {
 
-DedicatedWorkerGlobalScope* DedicatedWorkerGlobalScope::create(DedicatedWorkerThread* thread, PassOwnPtr<WorkerThreadStartupData> startupData, double timeOrigin)
+DedicatedWorkerGlobalScope* DedicatedWorkerGlobalScope::create(DedicatedWorkerThread* thread, std::unique_ptr<WorkerThreadStartupData> startupData, double timeOrigin)
 {
     // Note: startupData is finalized on return. After the relevant parts has been
     // passed along to the created 'context'.
@@ -55,7 +56,7 @@
     return context;
 }
 
-DedicatedWorkerGlobalScope::DedicatedWorkerGlobalScope(const KURL& url, const String& userAgent, DedicatedWorkerThread* thread, double timeOrigin, PassOwnPtr<SecurityOrigin::PrivilegeData> starterOriginPrivilegeData, WorkerClients* workerClients)
+DedicatedWorkerGlobalScope::DedicatedWorkerGlobalScope(const KURL& url, const String& userAgent, DedicatedWorkerThread* thread, double timeOrigin, std::unique_ptr<SecurityOrigin::PrivilegeData> starterOriginPrivilegeData, WorkerClients* workerClients)
     : WorkerGlobalScope(url, userAgent, thread, timeOrigin, std::move(starterOriginPrivilegeData), workerClients)
 {
 }
@@ -72,7 +73,7 @@
 void DedicatedWorkerGlobalScope::postMessage(ExecutionContext* context, PassRefPtr<SerializedScriptValue> message, const MessagePortArray& ports, ExceptionState& exceptionState)
 {
     // Disentangle the port in preparation for sending it to the remote context.
-    OwnPtr<MessagePortChannelArray> channels = MessagePort::disentanglePorts(context, ports, exceptionState);
+    std::unique_ptr<MessagePortChannelArray> channels = MessagePort::disentanglePorts(context, ports, exceptionState);
     if (exceptionState.hadException())
         return;
     thread()->workerObjectProxy().postMessageToWorkerObject(message, std::move(channels));
diff --git a/third_party/WebKit/Source/core/workers/DedicatedWorkerGlobalScope.h b/third_party/WebKit/Source/core/workers/DedicatedWorkerGlobalScope.h
index a933cd50..5628e4f 100644
--- a/third_party/WebKit/Source/core/workers/DedicatedWorkerGlobalScope.h
+++ b/third_party/WebKit/Source/core/workers/DedicatedWorkerGlobalScope.h
@@ -35,6 +35,7 @@
 #include "core/dom/MessagePort.h"
 #include "core/workers/WorkerGlobalScope.h"
 #include "platform/heap/Visitor.h"
+#include <memory>
 
 namespace blink {
 
@@ -44,7 +45,7 @@
 class CORE_EXPORT DedicatedWorkerGlobalScope final : public WorkerGlobalScope {
     DEFINE_WRAPPERTYPEINFO();
 public:
-    static DedicatedWorkerGlobalScope* create(DedicatedWorkerThread*, PassOwnPtr<WorkerThreadStartupData>, double timeOrigin);
+    static DedicatedWorkerGlobalScope* create(DedicatedWorkerThread*, std::unique_ptr<WorkerThreadStartupData>, double timeOrigin);
     ~DedicatedWorkerGlobalScope() override;
 
     bool isDedicatedWorkerGlobalScope() const override { return true; }
@@ -63,7 +64,7 @@
     DECLARE_VIRTUAL_TRACE();
 
 private:
-    DedicatedWorkerGlobalScope(const KURL&, const String& userAgent, DedicatedWorkerThread*, double timeOrigin, PassOwnPtr<SecurityOrigin::PrivilegeData>, WorkerClients*);
+    DedicatedWorkerGlobalScope(const KURL&, const String& userAgent, DedicatedWorkerThread*, double timeOrigin, std::unique_ptr<SecurityOrigin::PrivilegeData>, WorkerClients*);
 };
 
 } // namespace blink
diff --git a/third_party/WebKit/Source/core/workers/DedicatedWorkerMessagingProxy.cpp b/third_party/WebKit/Source/core/workers/DedicatedWorkerMessagingProxy.cpp
index 8df33e8f..41b1db6 100644
--- a/third_party/WebKit/Source/core/workers/DedicatedWorkerMessagingProxy.cpp
+++ b/third_party/WebKit/Source/core/workers/DedicatedWorkerMessagingProxy.cpp
@@ -6,6 +6,7 @@
 
 #include "core/workers/DedicatedWorkerThread.h"
 #include "core/workers/WorkerClients.h"
+#include <memory>
 
 namespace blink {
 
@@ -18,7 +19,7 @@
 {
 }
 
-PassOwnPtr<WorkerThread> DedicatedWorkerMessagingProxy::createWorkerThread(double originTime)
+std::unique_ptr<WorkerThread> DedicatedWorkerMessagingProxy::createWorkerThread(double originTime)
 {
     return DedicatedWorkerThread::create(loaderProxy(), workerObjectProxy(), originTime);
 }
diff --git a/third_party/WebKit/Source/core/workers/DedicatedWorkerMessagingProxy.h b/third_party/WebKit/Source/core/workers/DedicatedWorkerMessagingProxy.h
index 941e069..3824a390 100644
--- a/third_party/WebKit/Source/core/workers/DedicatedWorkerMessagingProxy.h
+++ b/third_party/WebKit/Source/core/workers/DedicatedWorkerMessagingProxy.h
@@ -7,6 +7,7 @@
 
 #include "core/CoreExport.h"
 #include "core/workers/InProcessWorkerMessagingProxy.h"
+#include <memory>
 
 namespace blink {
 
@@ -17,7 +18,7 @@
     DedicatedWorkerMessagingProxy(InProcessWorkerBase*, WorkerClients*);
     ~DedicatedWorkerMessagingProxy() override;
 
-    PassOwnPtr<WorkerThread> createWorkerThread(double originTime) override;
+    std::unique_ptr<WorkerThread> createWorkerThread(double originTime) override;
 };
 
 } // namespace blink
diff --git a/third_party/WebKit/Source/core/workers/DedicatedWorkerThread.cpp b/third_party/WebKit/Source/core/workers/DedicatedWorkerThread.cpp
index 896d18da..7f74489 100644
--- a/third_party/WebKit/Source/core/workers/DedicatedWorkerThread.cpp
+++ b/third_party/WebKit/Source/core/workers/DedicatedWorkerThread.cpp
@@ -34,12 +34,14 @@
 #include "core/workers/InProcessWorkerObjectProxy.h"
 #include "core/workers/WorkerBackingThread.h"
 #include "core/workers/WorkerThreadStartupData.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
-PassOwnPtr<DedicatedWorkerThread> DedicatedWorkerThread::create(PassRefPtr<WorkerLoaderProxy> workerLoaderProxy, InProcessWorkerObjectProxy& workerObjectProxy, double timeOrigin)
+std::unique_ptr<DedicatedWorkerThread> DedicatedWorkerThread::create(PassRefPtr<WorkerLoaderProxy> workerLoaderProxy, InProcessWorkerObjectProxy& workerObjectProxy, double timeOrigin)
 {
-    return adoptPtr(new DedicatedWorkerThread(workerLoaderProxy, workerObjectProxy, timeOrigin));
+    return wrapUnique(new DedicatedWorkerThread(workerLoaderProxy, workerObjectProxy, timeOrigin));
 }
 
 DedicatedWorkerThread::DedicatedWorkerThread(PassRefPtr<WorkerLoaderProxy> workerLoaderProxy, InProcessWorkerObjectProxy& workerObjectProxy, double timeOrigin)
@@ -54,7 +56,7 @@
 {
 }
 
-WorkerGlobalScope* DedicatedWorkerThread::createWorkerGlobalScope(PassOwnPtr<WorkerThreadStartupData> startupData)
+WorkerGlobalScope* DedicatedWorkerThread::createWorkerGlobalScope(std::unique_ptr<WorkerThreadStartupData> startupData)
 {
     return DedicatedWorkerGlobalScope::create(this, std::move(startupData), m_timeOrigin);
 }
diff --git a/third_party/WebKit/Source/core/workers/DedicatedWorkerThread.h b/third_party/WebKit/Source/core/workers/DedicatedWorkerThread.h
index a6fa87d..bc062678 100644
--- a/third_party/WebKit/Source/core/workers/DedicatedWorkerThread.h
+++ b/third_party/WebKit/Source/core/workers/DedicatedWorkerThread.h
@@ -31,6 +31,7 @@
 #define DedicatedWorkerThread_h
 
 #include "core/workers/WorkerThread.h"
+#include <memory>
 
 namespace blink {
 
@@ -39,20 +40,20 @@
 
 class DedicatedWorkerThread final : public WorkerThread {
 public:
-    static PassOwnPtr<DedicatedWorkerThread> create(PassRefPtr<WorkerLoaderProxy>, InProcessWorkerObjectProxy&, double timeOrigin);
+    static std::unique_ptr<DedicatedWorkerThread> create(PassRefPtr<WorkerLoaderProxy>, InProcessWorkerObjectProxy&, double timeOrigin);
     ~DedicatedWorkerThread() override;
 
     WorkerBackingThread& workerBackingThread() override { return *m_workerBackingThread; }
     InProcessWorkerObjectProxy& workerObjectProxy() const { return m_workerObjectProxy; }
 
 protected:
-    WorkerGlobalScope* createWorkerGlobalScope(PassOwnPtr<WorkerThreadStartupData>) override;
+    WorkerGlobalScope* createWorkerGlobalScope(std::unique_ptr<WorkerThreadStartupData>) override;
     void postInitialize() override;
 
 private:
     DedicatedWorkerThread(PassRefPtr<WorkerLoaderProxy>, InProcessWorkerObjectProxy&, double timeOrigin);
 
-    OwnPtr<WorkerBackingThread> m_workerBackingThread;
+    std::unique_ptr<WorkerBackingThread> m_workerBackingThread;
     InProcessWorkerObjectProxy& m_workerObjectProxy;
     double m_timeOrigin;
 };
diff --git a/third_party/WebKit/Source/core/workers/InProcessWorkerBase.cpp b/third_party/WebKit/Source/core/workers/InProcessWorkerBase.cpp
index 472928b..6990487f 100644
--- a/third_party/WebKit/Source/core/workers/InProcessWorkerBase.cpp
+++ b/third_party/WebKit/Source/core/workers/InProcessWorkerBase.cpp
@@ -14,6 +14,7 @@
 #include "core/workers/WorkerScriptLoader.h"
 #include "core/workers/WorkerThread.h"
 #include "platform/network/ContentSecurityPolicyResponseHeaders.h"
+#include <memory>
 
 namespace blink {
 
@@ -36,7 +37,7 @@
 {
     DCHECK(m_contextProxy);
     // Disentangle the port in preparation for sending it to the remote context.
-    OwnPtr<MessagePortChannelArray> channels = MessagePort::disentanglePorts(context, ports, exceptionState);
+    std::unique_ptr<MessagePortChannelArray> channels = MessagePort::disentanglePorts(context, ports, exceptionState);
     if (exceptionState.hadException())
         return;
     m_contextProxy->postMessageToWorkerGlobalScope(message, std::move(channels));
diff --git a/third_party/WebKit/Source/core/workers/InProcessWorkerGlobalScopeProxy.h b/third_party/WebKit/Source/core/workers/InProcessWorkerGlobalScopeProxy.h
index 419ae2d..0022c07 100644
--- a/third_party/WebKit/Source/core/workers/InProcessWorkerGlobalScopeProxy.h
+++ b/third_party/WebKit/Source/core/workers/InProcessWorkerGlobalScopeProxy.h
@@ -35,7 +35,7 @@
 #include "core/dom/MessagePort.h"
 #include "core/workers/WorkerThread.h"
 #include "wtf/Forward.h"
-#include "wtf/PassOwnPtr.h"
+#include <memory>
 
 namespace blink {
 
@@ -51,7 +51,7 @@
 
     virtual void terminateWorkerGlobalScope() = 0;
 
-    virtual void postMessageToWorkerGlobalScope(PassRefPtr<SerializedScriptValue>, PassOwnPtr<MessagePortChannelArray>) = 0;
+    virtual void postMessageToWorkerGlobalScope(PassRefPtr<SerializedScriptValue>, std::unique_ptr<MessagePortChannelArray>) = 0;
 
     virtual bool hasPendingActivity() const = 0;
 
diff --git a/third_party/WebKit/Source/core/workers/InProcessWorkerMessagingProxy.cpp b/third_party/WebKit/Source/core/workers/InProcessWorkerMessagingProxy.cpp
index 29f1480..efc696f2 100644
--- a/third_party/WebKit/Source/core/workers/InProcessWorkerMessagingProxy.cpp
+++ b/third_party/WebKit/Source/core/workers/InProcessWorkerMessagingProxy.cpp
@@ -47,18 +47,19 @@
 #include "core/workers/WorkerInspectorProxy.h"
 #include "core/workers/WorkerThreadStartupData.h"
 #include "wtf/WTF.h"
+#include <memory>
 
 namespace blink {
 
 namespace {
 
-void processUnhandledExceptionOnWorkerGlobalScope(const String& errorMessage, PassOwnPtr<SourceLocation> location, ExecutionContext* scriptContext)
+void processUnhandledExceptionOnWorkerGlobalScope(const String& errorMessage, std::unique_ptr<SourceLocation> location, ExecutionContext* scriptContext)
 {
     WorkerGlobalScope* globalScope = toWorkerGlobalScope(scriptContext);
     globalScope->exceptionUnhandled(errorMessage, std::move(location));
 }
 
-void processMessageOnWorkerGlobalScope(PassRefPtr<SerializedScriptValue> message, PassOwnPtr<MessagePortChannelArray> channels, InProcessWorkerObjectProxy* workerObjectProxy, ExecutionContext* scriptContext)
+void processMessageOnWorkerGlobalScope(PassRefPtr<SerializedScriptValue> message, std::unique_ptr<MessagePortChannelArray> channels, InProcessWorkerObjectProxy* workerObjectProxy, ExecutionContext* scriptContext)
 {
     WorkerGlobalScope* globalScope = toWorkerGlobalScope(scriptContext);
     MessagePortArray* ports = MessagePort::entanglePorts(*scriptContext, std::move(channels));
@@ -117,7 +118,7 @@
     DCHECK(csp);
 
     WorkerThreadStartMode startMode = m_workerInspectorProxy->workerStartMode(document);
-    OwnPtr<WorkerThreadStartupData> startupData = WorkerThreadStartupData::create(scriptURL, userAgent, sourceCode, nullptr, startMode, csp->headers().get(), starterOrigin, m_workerClients.release(), document->addressSpace(), OriginTrialContext::getTokens(document).get());
+    std::unique_ptr<WorkerThreadStartupData> startupData = WorkerThreadStartupData::create(scriptURL, userAgent, sourceCode, nullptr, startMode, csp->headers().get(), starterOrigin, m_workerClients.release(), document->addressSpace(), OriginTrialContext::getTokens(document).get());
     double originTime = document->loader() ? document->loader()->timing().referenceMonotonicTime() : monotonicallyIncreasingTime();
 
     m_loaderProxy = WorkerLoaderProxy::create(this);
@@ -127,7 +128,7 @@
     m_workerInspectorProxy->workerThreadCreated(document, m_workerThread.get(), scriptURL);
 }
 
-void InProcessWorkerMessagingProxy::postMessageToWorkerObject(PassRefPtr<SerializedScriptValue> message, PassOwnPtr<MessagePortChannelArray> channels)
+void InProcessWorkerMessagingProxy::postMessageToWorkerObject(PassRefPtr<SerializedScriptValue> message, std::unique_ptr<MessagePortChannelArray> channels)
 {
     DCHECK(isParentContextThread());
     if (!m_workerObject || m_askedToTerminate)
@@ -137,7 +138,7 @@
     m_workerObject->dispatchEvent(MessageEvent::create(ports, message));
 }
 
-void InProcessWorkerMessagingProxy::postMessageToWorkerGlobalScope(PassRefPtr<SerializedScriptValue> message, PassOwnPtr<MessagePortChannelArray> channels)
+void InProcessWorkerMessagingProxy::postMessageToWorkerGlobalScope(PassRefPtr<SerializedScriptValue> message, std::unique_ptr<MessagePortChannelArray> channels)
 {
     DCHECK(isParentContextThread());
     if (m_askedToTerminate)
@@ -168,7 +169,7 @@
     getExecutionContext()->postTask(BLINK_FROM_HERE, std::move(task));
 }
 
-void InProcessWorkerMessagingProxy::reportException(const String& errorMessage, PassOwnPtr<SourceLocation> location)
+void InProcessWorkerMessagingProxy::reportException(const String& errorMessage, std::unique_ptr<SourceLocation> location)
 {
     DCHECK(isParentContextThread());
     if (!m_workerObject)
@@ -185,7 +186,7 @@
         postTaskToWorkerGlobalScope(createCrossThreadTask(&processUnhandledExceptionOnWorkerGlobalScope, errorMessage, passed(std::move(location))));
 }
 
-void InProcessWorkerMessagingProxy::reportConsoleMessage(MessageSource source, MessageLevel level, const String& message, PassOwnPtr<SourceLocation> location)
+void InProcessWorkerMessagingProxy::reportConsoleMessage(MessageSource source, MessageLevel level, const String& message, std::unique_ptr<SourceLocation> location)
 {
     DCHECK(isParentContextThread());
     if (m_askedToTerminate)
diff --git a/third_party/WebKit/Source/core/workers/InProcessWorkerMessagingProxy.h b/third_party/WebKit/Source/core/workers/InProcessWorkerMessagingProxy.h
index 54543993..27722da 100644
--- a/third_party/WebKit/Source/core/workers/InProcessWorkerMessagingProxy.h
+++ b/third_party/WebKit/Source/core/workers/InProcessWorkerMessagingProxy.h
@@ -34,10 +34,10 @@
 #include "platform/heap/Handle.h"
 #include "wtf/Forward.h"
 #include "wtf/Noncopyable.h"
-#include "wtf/PassOwnPtr.h"
 #include "wtf/PassRefPtr.h"
 #include "wtf/RefPtr.h"
 #include "wtf/Vector.h"
+#include <memory>
 
 namespace blink {
 
@@ -60,15 +60,15 @@
     // (Only use these methods in the parent context thread.)
     void startWorkerGlobalScope(const KURL& scriptURL, const String& userAgent, const String& sourceCode) override;
     void terminateWorkerGlobalScope() override;
-    void postMessageToWorkerGlobalScope(PassRefPtr<SerializedScriptValue>, PassOwnPtr<MessagePortChannelArray>) override;
+    void postMessageToWorkerGlobalScope(PassRefPtr<SerializedScriptValue>, std::unique_ptr<MessagePortChannelArray>) override;
     bool hasPendingActivity() const final;
     void workerObjectDestroyed() override;
 
     // These methods come from worker context thread via
     // InProcessWorkerObjectProxy and are called on the parent context thread.
-    void postMessageToWorkerObject(PassRefPtr<SerializedScriptValue>, PassOwnPtr<MessagePortChannelArray>);
-    void reportException(const String& errorMessage, PassOwnPtr<SourceLocation>);
-    void reportConsoleMessage(MessageSource, MessageLevel, const String& message, PassOwnPtr<SourceLocation>);
+    void postMessageToWorkerObject(PassRefPtr<SerializedScriptValue>, std::unique_ptr<MessagePortChannelArray>);
+    void reportException(const String& errorMessage, std::unique_ptr<SourceLocation>);
+    void reportConsoleMessage(MessageSource, MessageLevel, const String& message, std::unique_ptr<SourceLocation>);
     void postMessageToPageInspector(const String&);
     void postWorkerConsoleAgentEnabled();
     void confirmMessageFromWorkerObject(bool hasPendingActivity);
@@ -85,7 +85,7 @@
     InProcessWorkerMessagingProxy(InProcessWorkerBase*, WorkerClients*);
     ~InProcessWorkerMessagingProxy() override;
 
-    virtual PassOwnPtr<WorkerThread> createWorkerThread(double originTime) = 0;
+    virtual std::unique_ptr<WorkerThread> createWorkerThread(double originTime) = 0;
 
     PassRefPtr<WorkerLoaderProxy> loaderProxy() { return m_loaderProxy; }
     InProcessWorkerObjectProxy& workerObjectProxy() { return *m_workerObjectProxy.get(); }
@@ -104,10 +104,10 @@
     bool isParentContextThread() const;
 
     Persistent<ExecutionContext> m_executionContext;
-    OwnPtr<InProcessWorkerObjectProxy> m_workerObjectProxy;
+    std::unique_ptr<InProcessWorkerObjectProxy> m_workerObjectProxy;
     WeakPersistent<InProcessWorkerBase> m_workerObject;
     bool m_mayBeDestroyed;
-    OwnPtr<WorkerThread> m_workerThread;
+    std::unique_ptr<WorkerThread> m_workerThread;
 
     // Unconfirmed messages from the parent context thread to the worker thread.
     unsigned m_unconfirmedMessageCount;
diff --git a/third_party/WebKit/Source/core/workers/InProcessWorkerObjectProxy.cpp b/third_party/WebKit/Source/core/workers/InProcessWorkerObjectProxy.cpp
index 83d8baedd..d183e1e 100644
--- a/third_party/WebKit/Source/core/workers/InProcessWorkerObjectProxy.cpp
+++ b/third_party/WebKit/Source/core/workers/InProcessWorkerObjectProxy.cpp
@@ -37,16 +37,18 @@
 #include "core/inspector/ConsoleMessage.h"
 #include "core/workers/InProcessWorkerMessagingProxy.h"
 #include "wtf/Functional.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
-PassOwnPtr<InProcessWorkerObjectProxy> InProcessWorkerObjectProxy::create(InProcessWorkerMessagingProxy* messagingProxy)
+std::unique_ptr<InProcessWorkerObjectProxy> InProcessWorkerObjectProxy::create(InProcessWorkerMessagingProxy* messagingProxy)
 {
     DCHECK(messagingProxy);
-    return adoptPtr(new InProcessWorkerObjectProxy(messagingProxy));
+    return wrapUnique(new InProcessWorkerObjectProxy(messagingProxy));
 }
 
-void InProcessWorkerObjectProxy::postMessageToWorkerObject(PassRefPtr<SerializedScriptValue> message, PassOwnPtr<MessagePortChannelArray> channels)
+void InProcessWorkerObjectProxy::postMessageToWorkerObject(PassRefPtr<SerializedScriptValue> message, std::unique_ptr<MessagePortChannelArray> channels)
 {
     getExecutionContext()->postTask(BLINK_FROM_HERE, createCrossThreadTask(&InProcessWorkerMessagingProxy::postMessageToWorkerObject, AllowCrossThreadAccess(m_messagingProxy), message, passed(std::move(channels))));
 }
@@ -66,7 +68,7 @@
     getExecutionContext()->postTask(BLINK_FROM_HERE, createCrossThreadTask(&InProcessWorkerMessagingProxy::reportPendingActivity, AllowCrossThreadAccess(m_messagingProxy), hasPendingActivity));
 }
 
-void InProcessWorkerObjectProxy::reportException(const String& errorMessage, PassOwnPtr<SourceLocation> location)
+void InProcessWorkerObjectProxy::reportException(const String& errorMessage, std::unique_ptr<SourceLocation> location)
 {
     getExecutionContext()->postTask(BLINK_FROM_HERE, createCrossThreadTask(&InProcessWorkerMessagingProxy::reportException, AllowCrossThreadAccess(m_messagingProxy), errorMessage, passed(std::move(location))));
 }
diff --git a/third_party/WebKit/Source/core/workers/InProcessWorkerObjectProxy.h b/third_party/WebKit/Source/core/workers/InProcessWorkerObjectProxy.h
index 111f10e..1bfe52a 100644
--- a/third_party/WebKit/Source/core/workers/InProcessWorkerObjectProxy.h
+++ b/third_party/WebKit/Source/core/workers/InProcessWorkerObjectProxy.h
@@ -35,8 +35,8 @@
 #include "core/dom/MessagePort.h"
 #include "core/workers/WorkerReportingProxy.h"
 #include "platform/heap/Handle.h"
-#include "wtf/PassOwnPtr.h"
 #include "wtf/PassRefPtr.h"
+#include <memory>
 
 namespace blink {
 
@@ -55,16 +55,16 @@
     USING_FAST_MALLOC(InProcessWorkerObjectProxy);
     WTF_MAKE_NONCOPYABLE(InProcessWorkerObjectProxy);
 public:
-    static PassOwnPtr<InProcessWorkerObjectProxy> create(InProcessWorkerMessagingProxy*);
+    static std::unique_ptr<InProcessWorkerObjectProxy> create(InProcessWorkerMessagingProxy*);
     ~InProcessWorkerObjectProxy() override { }
 
-    void postMessageToWorkerObject(PassRefPtr<SerializedScriptValue>, PassOwnPtr<MessagePortChannelArray>);
+    void postMessageToWorkerObject(PassRefPtr<SerializedScriptValue>, std::unique_ptr<MessagePortChannelArray>);
     void postTaskToMainExecutionContext(std::unique_ptr<ExecutionContextTask>);
     void confirmMessageFromWorkerObject(bool hasPendingActivity);
     void reportPendingActivity(bool hasPendingActivity);
 
     // WorkerReportingProxy overrides.
-    void reportException(const String& errorMessage, PassOwnPtr<SourceLocation>) override;
+    void reportException(const String& errorMessage, std::unique_ptr<SourceLocation>) override;
     void reportConsoleMessage(ConsoleMessage*) override;
     void postMessageToPageInspector(const String&) override;
     void postWorkerConsoleAgentEnabled() override;
diff --git a/third_party/WebKit/Source/core/workers/SharedWorkerGlobalScope.cpp b/third_party/WebKit/Source/core/workers/SharedWorkerGlobalScope.cpp
index b299a80..e3fd264b 100644
--- a/third_party/WebKit/Source/core/workers/SharedWorkerGlobalScope.cpp
+++ b/third_party/WebKit/Source/core/workers/SharedWorkerGlobalScope.cpp
@@ -32,12 +32,13 @@
 
 #include "bindings/core/v8/SourceLocation.h"
 #include "core/events/MessageEvent.h"
-#include "core/inspector/ConsoleMessage.h"
 #include "core/frame/LocalDOMWindow.h"
+#include "core/inspector/ConsoleMessage.h"
 #include "core/origin_trials/OriginTrialContext.h"
 #include "core/workers/SharedWorkerThread.h"
 #include "core/workers/WorkerClients.h"
 #include "wtf/CurrentTime.h"
+#include <memory>
 
 namespace blink {
 
@@ -49,7 +50,7 @@
 }
 
 // static
-SharedWorkerGlobalScope* SharedWorkerGlobalScope::create(const String& name, SharedWorkerThread* thread, PassOwnPtr<WorkerThreadStartupData> startupData)
+SharedWorkerGlobalScope* SharedWorkerGlobalScope::create(const String& name, SharedWorkerThread* thread, std::unique_ptr<WorkerThreadStartupData> startupData)
 {
     // Note: startupData is finalized on return. After the relevant parts has been
     // passed along to the created 'context'.
@@ -60,7 +61,7 @@
     return context;
 }
 
-SharedWorkerGlobalScope::SharedWorkerGlobalScope(const String& name, const KURL& url, const String& userAgent, SharedWorkerThread* thread, PassOwnPtr<SecurityOrigin::PrivilegeData> starterOriginPrivilegeData, WorkerClients* workerClients)
+SharedWorkerGlobalScope::SharedWorkerGlobalScope(const String& name, const KURL& url, const String& userAgent, SharedWorkerThread* thread, std::unique_ptr<SecurityOrigin::PrivilegeData> starterOriginPrivilegeData, WorkerClients* workerClients)
     : WorkerGlobalScope(url, userAgent, thread, monotonicallyIncreasingTime(), std::move(starterOriginPrivilegeData), workerClients)
     , m_name(name)
 {
@@ -80,7 +81,7 @@
     return static_cast<SharedWorkerThread*>(Base::thread());
 }
 
-void SharedWorkerGlobalScope::logExceptionToConsole(const String& errorMessage, PassOwnPtr<SourceLocation> location)
+void SharedWorkerGlobalScope::logExceptionToConsole(const String& errorMessage, std::unique_ptr<SourceLocation> location)
 {
     WorkerGlobalScope::logExceptionToConsole(errorMessage, location->clone());
     ConsoleMessage* consoleMessage = ConsoleMessage::create(JSMessageSource, ErrorMessageLevel, errorMessage, std::move(location));
diff --git a/third_party/WebKit/Source/core/workers/SharedWorkerGlobalScope.h b/third_party/WebKit/Source/core/workers/SharedWorkerGlobalScope.h
index 22bcfb0..4879f9a 100644
--- a/third_party/WebKit/Source/core/workers/SharedWorkerGlobalScope.h
+++ b/third_party/WebKit/Source/core/workers/SharedWorkerGlobalScope.h
@@ -36,6 +36,7 @@
 #include "core/workers/WorkerGlobalScope.h"
 #include "core/workers/WorkerThreadStartupData.h"
 #include "platform/heap/Handle.h"
+#include <memory>
 
 namespace blink {
 
@@ -46,7 +47,7 @@
     DEFINE_WRAPPERTYPEINFO();
 public:
     typedef WorkerGlobalScope Base;
-    static SharedWorkerGlobalScope* create(const String& name, SharedWorkerThread*, PassOwnPtr<WorkerThreadStartupData>);
+    static SharedWorkerGlobalScope* create(const String& name, SharedWorkerThread*, std::unique_ptr<WorkerThreadStartupData>);
     ~SharedWorkerGlobalScope() override;
 
     bool isSharedWorkerGlobalScope() const override { return true; }
@@ -63,8 +64,8 @@
     DECLARE_VIRTUAL_TRACE();
 
 private:
-    SharedWorkerGlobalScope(const String& name, const KURL&, const String& userAgent, SharedWorkerThread*, PassOwnPtr<SecurityOrigin::PrivilegeData>, WorkerClients*);
-    void logExceptionToConsole(const String& errorMessage, PassOwnPtr<SourceLocation>) override;
+    SharedWorkerGlobalScope(const String& name, const KURL&, const String& userAgent, SharedWorkerThread*, std::unique_ptr<SecurityOrigin::PrivilegeData>, WorkerClients*);
+    void logExceptionToConsole(const String& errorMessage, std::unique_ptr<SourceLocation>) override;
 
     String m_name;
 };
diff --git a/third_party/WebKit/Source/core/workers/SharedWorkerThread.cpp b/third_party/WebKit/Source/core/workers/SharedWorkerThread.cpp
index 14c6875f..2b7b851f 100644
--- a/third_party/WebKit/Source/core/workers/SharedWorkerThread.cpp
+++ b/third_party/WebKit/Source/core/workers/SharedWorkerThread.cpp
@@ -33,12 +33,14 @@
 #include "core/workers/SharedWorkerGlobalScope.h"
 #include "core/workers/WorkerBackingThread.h"
 #include "core/workers/WorkerThreadStartupData.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
-PassOwnPtr<SharedWorkerThread> SharedWorkerThread::create(const String& name, PassRefPtr<WorkerLoaderProxy> workerLoaderProxy, WorkerReportingProxy& workerReportingProxy)
+std::unique_ptr<SharedWorkerThread> SharedWorkerThread::create(const String& name, PassRefPtr<WorkerLoaderProxy> workerLoaderProxy, WorkerReportingProxy& workerReportingProxy)
 {
-    return adoptPtr(new SharedWorkerThread(name, workerLoaderProxy, workerReportingProxy));
+    return wrapUnique(new SharedWorkerThread(name, workerLoaderProxy, workerReportingProxy));
 }
 
 SharedWorkerThread::SharedWorkerThread(const String& name, PassRefPtr<WorkerLoaderProxy> workerLoaderProxy, WorkerReportingProxy& workerReportingProxy)
@@ -52,7 +54,7 @@
 {
 }
 
-WorkerGlobalScope* SharedWorkerThread::createWorkerGlobalScope(PassOwnPtr<WorkerThreadStartupData> startupData)
+WorkerGlobalScope* SharedWorkerThread::createWorkerGlobalScope(std::unique_ptr<WorkerThreadStartupData> startupData)
 {
     return SharedWorkerGlobalScope::create(m_name, this, std::move(startupData));
 }
diff --git a/third_party/WebKit/Source/core/workers/SharedWorkerThread.h b/third_party/WebKit/Source/core/workers/SharedWorkerThread.h
index 0945805..c0286d0 100644
--- a/third_party/WebKit/Source/core/workers/SharedWorkerThread.h
+++ b/third_party/WebKit/Source/core/workers/SharedWorkerThread.h
@@ -33,6 +33,7 @@
 #include "core/CoreExport.h"
 #include "core/frame/csp/ContentSecurityPolicy.h"
 #include "core/workers/WorkerThread.h"
+#include <memory>
 
 namespace blink {
 
@@ -40,18 +41,18 @@
 
 class CORE_EXPORT SharedWorkerThread : public WorkerThread {
 public:
-    static PassOwnPtr<SharedWorkerThread> create(const String& name, PassRefPtr<WorkerLoaderProxy>, WorkerReportingProxy&);
+    static std::unique_ptr<SharedWorkerThread> create(const String& name, PassRefPtr<WorkerLoaderProxy>, WorkerReportingProxy&);
     ~SharedWorkerThread() override;
 
     WorkerBackingThread& workerBackingThread() override { return *m_workerBackingThread; }
 
 protected:
-    WorkerGlobalScope* createWorkerGlobalScope(PassOwnPtr<WorkerThreadStartupData>) override;
+    WorkerGlobalScope* createWorkerGlobalScope(std::unique_ptr<WorkerThreadStartupData>) override;
 
 private:
     SharedWorkerThread(const String& name, PassRefPtr<WorkerLoaderProxy>, WorkerReportingProxy&);
 
-    OwnPtr<WorkerBackingThread> m_workerBackingThread;
+    std::unique_ptr<WorkerBackingThread> m_workerBackingThread;
     String m_name;
 };
 
diff --git a/third_party/WebKit/Source/core/workers/WorkerBackingThread.cpp b/third_party/WebKit/Source/core/workers/WorkerBackingThread.cpp
index 0c7ae4e..168e6d3 100644
--- a/third_party/WebKit/Source/core/workers/WorkerBackingThread.cpp
+++ b/third_party/WebKit/Source/core/workers/WorkerBackingThread.cpp
@@ -14,6 +14,8 @@
 #include "platform/WebThreadSupportingGC.h"
 #include "public/platform/Platform.h"
 #include "public/platform/WebTraceLocation.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
@@ -71,13 +73,13 @@
     V8Initializer::initializeWorker(m_isolate);
     m_backingThread->initialize();
 
-    OwnPtr<V8IsolateInterruptor> interruptor = adoptPtr(new V8IsolateInterruptor(m_isolate));
+    std::unique_ptr<V8IsolateInterruptor> interruptor = wrapUnique(new V8IsolateInterruptor(m_isolate));
     ThreadState::current()->addInterruptor(std::move(interruptor));
     ThreadState::current()->registerTraceDOMWrappers(m_isolate,
         V8GCController::traceDOMWrappers,
         nullptr);
     if (RuntimeEnabledFeatures::v8IdleTasksEnabled())
-        V8PerIsolateData::enableIdleTasks(m_isolate, adoptPtr(new V8IdleTaskRunner(backingThread().platformThread().scheduler())));
+        V8PerIsolateData::enableIdleTasks(m_isolate, wrapUnique(new V8IdleTaskRunner(backingThread().platformThread().scheduler())));
     if (m_isOwningThread)
         Platform::current()->didStartWorkerThread();
 }
diff --git a/third_party/WebKit/Source/core/workers/WorkerBackingThread.h b/third_party/WebKit/Source/core/workers/WorkerBackingThread.h
index 389586706..6fc1627 100644
--- a/third_party/WebKit/Source/core/workers/WorkerBackingThread.h
+++ b/third_party/WebKit/Source/core/workers/WorkerBackingThread.h
@@ -7,9 +7,9 @@
 
 #include "core/CoreExport.h"
 #include "wtf/Forward.h"
-#include "wtf/OwnPtr.h"
-#include "wtf/PassOwnPtr.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/ThreadingPrimitives.h"
+#include <memory>
 #include <v8.h>
 
 namespace blink {
@@ -27,13 +27,13 @@
 // WorkerGlobalScopes) can share one WorkerBackingThread.
 class CORE_EXPORT WorkerBackingThread final {
 public:
-    static PassOwnPtr<WorkerBackingThread> create(const char* name) { return adoptPtr(new WorkerBackingThread(name, false)); }
-    static PassOwnPtr<WorkerBackingThread> create(WebThread* thread) { return adoptPtr(new WorkerBackingThread(thread, false)); }
+    static std::unique_ptr<WorkerBackingThread> create(const char* name) { return wrapUnique(new WorkerBackingThread(name, false)); }
+    static std::unique_ptr<WorkerBackingThread> create(WebThread* thread) { return wrapUnique(new WorkerBackingThread(thread, false)); }
 
     // These are needed to suppress leak reports. See
     // https://crbug.com/590802 and https://crbug.com/v8/1428.
-    static PassOwnPtr<WorkerBackingThread> createForTest(const char* name) { return adoptPtr(new WorkerBackingThread(name, true)); }
-    static PassOwnPtr<WorkerBackingThread> createForTest(WebThread* thread) { return adoptPtr(new WorkerBackingThread(thread, true)); }
+    static std::unique_ptr<WorkerBackingThread> createForTest(const char* name) { return wrapUnique(new WorkerBackingThread(name, true)); }
+    static std::unique_ptr<WorkerBackingThread> createForTest(WebThread* thread) { return wrapUnique(new WorkerBackingThread(thread, true)); }
 
     ~WorkerBackingThread();
 
@@ -59,7 +59,7 @@
     WorkerBackingThread(const char* name, bool shouldCallGCOnShutdown);
     WorkerBackingThread(WebThread*, bool shouldCallGCOnSHutdown);
 
-    OwnPtr<WebThreadSupportingGC> m_backingThread;
+    std::unique_ptr<WebThreadSupportingGC> m_backingThread;
     v8::Isolate* m_isolate = nullptr;
     bool m_isOwningThread;
     bool m_shouldCallGCOnShutdown;
diff --git a/third_party/WebKit/Source/core/workers/WorkerGlobalScope.cpp b/third_party/WebKit/Source/core/workers/WorkerGlobalScope.cpp
index c1b11f5..e5b8fe1 100644
--- a/third_party/WebKit/Source/core/workers/WorkerGlobalScope.cpp
+++ b/third_party/WebKit/Source/core/workers/WorkerGlobalScope.cpp
@@ -53,7 +53,6 @@
 #include "core/inspector/InspectorConsoleInstrumentation.h"
 #include "core/inspector/WorkerInspectorController.h"
 #include "core/loader/WorkerThreadableLoader.h"
-#include "core/workers/WorkerNavigator.h"
 #include "core/workers/WorkerClients.h"
 #include "core/workers/WorkerLoaderProxy.h"
 #include "core/workers/WorkerLocation.h"
@@ -67,10 +66,11 @@
 #include "public/platform/Platform.h"
 #include "public/platform/WebScheduler.h"
 #include "public/platform/WebURLRequest.h"
+#include <memory>
 
 namespace blink {
 
-WorkerGlobalScope::WorkerGlobalScope(const KURL& url, const String& userAgent, WorkerThread* thread, double timeOrigin, PassOwnPtr<SecurityOrigin::PrivilegeData> starterOriginPrivilageData, WorkerClients* workerClients)
+WorkerGlobalScope::WorkerGlobalScope(const KURL& url, const String& userAgent, WorkerThread* thread, double timeOrigin, std::unique_ptr<SecurityOrigin::PrivilegeData> starterOriginPrivilageData, WorkerClients* workerClients)
     : m_url(url)
     , m_userAgent(userAgent)
     , m_v8CacheOptions(V8CacheOptionsDefault)
@@ -253,7 +253,7 @@
         scriptLoaded(scriptLoader->script().length(), scriptLoader->cachedMetadata() ? scriptLoader->cachedMetadata()->size() : 0);
 
         ErrorEvent* errorEvent = nullptr;
-        OwnPtr<Vector<char>> cachedMetaData(scriptLoader->releaseCachedMetadata());
+        std::unique_ptr<Vector<char>> cachedMetaData(scriptLoader->releaseCachedMetadata());
         CachedMetadataHandler* handler(createWorkerScriptCachedMetadataHandler(completeURL, cachedMetaData.get()));
         m_scriptController->evaluate(ScriptSourceCode(scriptLoader->script(), scriptLoader->responseURL()), &errorEvent, handler, m_v8CacheOptions);
         if (errorEvent) {
@@ -268,7 +268,7 @@
     return this;
 }
 
-void WorkerGlobalScope::logExceptionToConsole(const String& errorMessage, PassOwnPtr<SourceLocation> location)
+void WorkerGlobalScope::logExceptionToConsole(const String& errorMessage, std::unique_ptr<SourceLocation> location)
 {
     thread()->workerReportingProxy().reportException(errorMessage, std::move(location));
 }
@@ -346,7 +346,7 @@
     return m_messageStorage.get();
 }
 
-void WorkerGlobalScope::exceptionUnhandled(const String& errorMessage, PassOwnPtr<SourceLocation> location)
+void WorkerGlobalScope::exceptionUnhandled(const String& errorMessage, std::unique_ptr<SourceLocation> location)
 {
     addConsoleMessage(ConsoleMessage::create(JSMessageSource, ErrorMessageLevel, errorMessage, std::move(location)));
 }
diff --git a/third_party/WebKit/Source/core/workers/WorkerGlobalScope.h b/third_party/WebKit/Source/core/workers/WorkerGlobalScope.h
index ff21f438..1117ef4 100644
--- a/third_party/WebKit/Source/core/workers/WorkerGlobalScope.h
+++ b/third_party/WebKit/Source/core/workers/WorkerGlobalScope.h
@@ -45,10 +45,10 @@
 #include "wtf/Assertions.h"
 #include "wtf/HashMap.h"
 #include "wtf/ListHashSet.h"
-#include "wtf/OwnPtr.h"
 #include "wtf/PassRefPtr.h"
 #include "wtf/RefPtr.h"
 #include "wtf/text/AtomicStringHash.h"
+#include <memory>
 
 namespace blink {
 
@@ -141,7 +141,7 @@
     void addConsoleMessage(ConsoleMessage*) final;
     ConsoleMessageStorage* messageStorage();
 
-    void exceptionUnhandled(const String& errorMessage, PassOwnPtr<SourceLocation>);
+    void exceptionUnhandled(const String& errorMessage, std::unique_ptr<SourceLocation>);
 
     virtual void scriptLoaded(size_t scriptSize, size_t cachedMetadataSize) { }
 
@@ -153,10 +153,10 @@
     DECLARE_VIRTUAL_TRACE();
 
 protected:
-    WorkerGlobalScope(const KURL&, const String& userAgent, WorkerThread*, double timeOrigin, PassOwnPtr<SecurityOrigin::PrivilegeData>, WorkerClients*);
+    WorkerGlobalScope(const KURL&, const String& userAgent, WorkerThread*, double timeOrigin, std::unique_ptr<SecurityOrigin::PrivilegeData>, WorkerClients*);
     void applyContentSecurityPolicyFromVector(const Vector<CSPHeaderAndType>& headers);
 
-    void logExceptionToConsole(const String& errorMessage, PassOwnPtr<SourceLocation>) override;
+    void logExceptionToConsole(const String& errorMessage, std::unique_ptr<SourceLocation>) override;
     void addMessageToWorkerConsole(ConsoleMessage*);
     void setV8CacheOptions(V8CacheOptions v8CacheOptions) { m_v8CacheOptions = v8CacheOptions; }
 
diff --git a/third_party/WebKit/Source/core/workers/WorkerLoaderProxy.h b/third_party/WebKit/Source/core/workers/WorkerLoaderProxy.h
index a05f0cb6..62af4c7 100644
--- a/third_party/WebKit/Source/core/workers/WorkerLoaderProxy.h
+++ b/third_party/WebKit/Source/core/workers/WorkerLoaderProxy.h
@@ -34,7 +34,6 @@
 #include "core/CoreExport.h"
 #include "core/dom/ExecutionContext.h"
 #include "wtf/Forward.h"
-#include "wtf/PassOwnPtr.h"
 #include "wtf/ThreadSafeRefCounted.h"
 
 namespace blink {
diff --git a/third_party/WebKit/Source/core/workers/WorkerReportingProxy.h b/third_party/WebKit/Source/core/workers/WorkerReportingProxy.h
index ea14f923..7e9d343 100644
--- a/third_party/WebKit/Source/core/workers/WorkerReportingProxy.h
+++ b/third_party/WebKit/Source/core/workers/WorkerReportingProxy.h
@@ -34,7 +34,7 @@
 #include "core/CoreExport.h"
 #include "platform/heap/Handle.h"
 #include "wtf/Forward.h"
-#include "wtf/PassOwnPtr.h"
+#include <memory>
 
 namespace blink {
 
@@ -47,7 +47,7 @@
 public:
     virtual ~WorkerReportingProxy() { }
 
-    virtual void reportException(const String& errorMessage, PassOwnPtr<SourceLocation>) = 0;
+    virtual void reportException(const String& errorMessage, std::unique_ptr<SourceLocation>) = 0;
     virtual void reportConsoleMessage(ConsoleMessage*) = 0;
     virtual void postMessageToPageInspector(const String&) = 0;
     virtual void postWorkerConsoleAgentEnabled() = 0;
diff --git a/third_party/WebKit/Source/core/workers/WorkerScriptLoader.cpp b/third_party/WebKit/Source/core/workers/WorkerScriptLoader.cpp
index e8087ae..7bdabf14 100644
--- a/third_party/WebKit/Source/core/workers/WorkerScriptLoader.cpp
+++ b/third_party/WebKit/Source/core/workers/WorkerScriptLoader.cpp
@@ -39,8 +39,9 @@
 #include "platform/weborigin/SecurityOrigin.h"
 #include "public/platform/WebAddressSpace.h"
 #include "public/platform/WebURLRequest.h"
-#include "wtf/OwnPtr.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/RefPtr.h"
+#include <memory>
 
 namespace blink {
 
@@ -125,7 +126,7 @@
     return request;
 }
 
-void WorkerScriptLoader::didReceiveResponse(unsigned long identifier, const ResourceResponse& response, PassOwnPtr<WebDataConsumerHandle> handle)
+void WorkerScriptLoader::didReceiveResponse(unsigned long identifier, const ResourceResponse& response, std::unique_ptr<WebDataConsumerHandle> handle)
 {
     DCHECK(!handle);
     if (response.httpStatusCode() / 100 != 2 && response.httpStatusCode()) {
@@ -169,7 +170,7 @@
 
 void WorkerScriptLoader::didReceiveCachedMetadata(const char* data, int size)
 {
-    m_cachedMetadata = adoptPtr(new Vector<char>(size));
+    m_cachedMetadata = wrapUnique(new Vector<char>(size));
     memcpy(m_cachedMetadata->data(), data, size);
 }
 
diff --git a/third_party/WebKit/Source/core/workers/WorkerScriptLoader.h b/third_party/WebKit/Source/core/workers/WorkerScriptLoader.h
index 0b46670..eae83c0 100644
--- a/third_party/WebKit/Source/core/workers/WorkerScriptLoader.h
+++ b/third_party/WebKit/Source/core/workers/WorkerScriptLoader.h
@@ -37,10 +37,10 @@
 #include "public/platform/WebURLRequest.h"
 #include "wtf/Allocator.h"
 #include "wtf/Functional.h"
-#include "wtf/OwnPtr.h"
 #include "wtf/PassRefPtr.h"
 #include "wtf/RefCounted.h"
 #include "wtf/text/StringBuilder.h"
+#include <memory>
 
 namespace blink {
 
@@ -76,7 +76,7 @@
     unsigned long identifier() const { return m_identifier; }
     long long appCacheID() const { return m_appCacheID; }
 
-    PassOwnPtr<Vector<char>> releaseCachedMetadata() { return std::move(m_cachedMetadata); }
+    std::unique_ptr<Vector<char>> releaseCachedMetadata() { return std::move(m_cachedMetadata); }
     const Vector<char>* cachedMetadata() const { return m_cachedMetadata.get(); }
 
     ContentSecurityPolicy* contentSecurityPolicy() { return m_contentSecurityPolicy.get(); }
@@ -87,7 +87,7 @@
     const Vector<String>* originTrialTokens() const { return m_originTrialTokens.get(); }
 
     // ThreadableLoaderClient
-    void didReceiveResponse(unsigned long /*identifier*/, const ResourceResponse&, PassOwnPtr<WebDataConsumerHandle>) override;
+    void didReceiveResponse(unsigned long /*identifier*/, const ResourceResponse&, std::unique_ptr<WebDataConsumerHandle>) override;
     void didReceiveData(const char* data, unsigned dataLength) override;
     void didReceiveCachedMetadata(const char*, int /*dataLength*/) override;
     void didFinishLoading(unsigned long identifier, double) override;
@@ -112,9 +112,9 @@
     std::unique_ptr<SameThreadClosure> m_responseCallback;
     std::unique_ptr<SameThreadClosure> m_finishedCallback;
 
-    OwnPtr<ThreadableLoader> m_threadableLoader;
+    std::unique_ptr<ThreadableLoader> m_threadableLoader;
     String m_responseEncoding;
-    OwnPtr<TextResourceDecoder> m_decoder;
+    std::unique_ptr<TextResourceDecoder> m_decoder;
     StringBuilder m_script;
     KURL m_url;
     KURL m_responseURL;
@@ -122,7 +122,7 @@
     bool m_needToCancel;
     unsigned long m_identifier;
     long long m_appCacheID;
-    OwnPtr<Vector<char>> m_cachedMetadata;
+    std::unique_ptr<Vector<char>> m_cachedMetadata;
     WebURLRequest::RequestContext m_requestContext;
     Persistent<ContentSecurityPolicy> m_contentSecurityPolicy;
     WebAddressSpace m_responseAddressSpace;
diff --git a/third_party/WebKit/Source/core/workers/WorkerThread.cpp b/third_party/WebKit/Source/core/workers/WorkerThread.cpp
index 4c9fd41..f789496 100644
--- a/third_party/WebKit/Source/core/workers/WorkerThread.cpp
+++ b/third_party/WebKit/Source/core/workers/WorkerThread.cpp
@@ -49,9 +49,11 @@
 #include "public/platform/WebThread.h"
 #include "wtf/Functional.h"
 #include "wtf/Noncopyable.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/Threading.h"
 #include "wtf/text/WTFString.h"
 #include <limits.h>
+#include <memory>
 
 namespace blink {
 
@@ -65,9 +67,9 @@
 // started before this task runs, the task is simply cancelled.
 class WorkerThread::ForceTerminationTask final {
 public:
-    static PassOwnPtr<ForceTerminationTask> create(WorkerThread* workerThread)
+    static std::unique_ptr<ForceTerminationTask> create(WorkerThread* workerThread)
     {
-        return adoptPtr(new ForceTerminationTask(workerThread));
+        return wrapUnique(new ForceTerminationTask(workerThread));
     }
 
     void schedule()
@@ -104,7 +106,7 @@
     }
 
     WorkerThread* m_workerThread;
-    OwnPtr<CancellableTaskFactory> m_cancellableTaskFactory;
+    std::unique_ptr<CancellableTaskFactory> m_cancellableTaskFactory;
 };
 
 class WorkerThread::WorkerMicrotaskRunner final : public WebThread::TaskObserver {
@@ -184,7 +186,7 @@
     exitCodeHistogram.count(static_cast<int>(m_exitCode));
 }
 
-void WorkerThread::start(PassOwnPtr<WorkerThreadStartupData> startupData)
+void WorkerThread::start(std::unique_ptr<WorkerThreadStartupData> startupData)
 {
     DCHECK(isMainThread());
 
@@ -322,13 +324,13 @@
 
 WorkerThread::WorkerThread(PassRefPtr<WorkerLoaderProxy> workerLoaderProxy, WorkerReportingProxy& workerReportingProxy)
     : m_forceTerminationDelayInMs(kForceTerminationDelayInMs)
-    , m_inspectorTaskRunner(adoptPtr(new InspectorTaskRunner()))
+    , m_inspectorTaskRunner(wrapUnique(new InspectorTaskRunner()))
     , m_workerLoaderProxy(workerLoaderProxy)
     , m_workerReportingProxy(workerReportingProxy)
-    , m_terminationEvent(adoptPtr(new WaitableEvent(
+    , m_terminationEvent(wrapUnique(new WaitableEvent(
         WaitableEvent::ResetPolicy::Manual,
         WaitableEvent::InitialState::NonSignaled)))
-    , m_shutdownEvent(adoptPtr(new WaitableEvent(
+    , m_shutdownEvent(wrapUnique(new WaitableEvent(
         WaitableEvent::ResetPolicy::Manual,
         WaitableEvent::InitialState::NonSignaled)))
     , m_workerThreadLifecycleContext(new WorkerThreadLifecycleContext)
@@ -428,12 +430,12 @@
     isolate()->TerminateExecution();
 }
 
-void WorkerThread::initializeOnWorkerThread(PassOwnPtr<WorkerThreadStartupData> startupData)
+void WorkerThread::initializeOnWorkerThread(std::unique_ptr<WorkerThreadStartupData> startupData)
 {
     KURL scriptURL = startupData->m_scriptURL;
     String sourceCode = startupData->m_sourceCode;
     WorkerThreadStartMode startMode = startupData->m_startMode;
-    OwnPtr<Vector<char>> cachedMetaData = std::move(startupData->m_cachedMetaData);
+    std::unique_ptr<Vector<char>> cachedMetaData = std::move(startupData->m_cachedMetaData);
     V8CacheOptions v8CacheOptions = startupData->m_v8CacheOptions;
 
     {
@@ -458,8 +460,8 @@
             workerBackingThread().initialize();
 
         if (shouldAttachThreadDebugger())
-            V8PerIsolateData::from(isolate())->setThreadDebugger(adoptPtr(new WorkerThreadDebugger(this, isolate())));
-        m_microtaskRunner = adoptPtr(new WorkerMicrotaskRunner(this));
+            V8PerIsolateData::from(isolate())->setThreadDebugger(wrapUnique(new WorkerThreadDebugger(this, isolate())));
+        m_microtaskRunner = wrapUnique(new WorkerMicrotaskRunner(this));
         workerBackingThread().backingThread().addTaskObserver(m_microtaskRunner.get());
 
         // Optimize for memory usage instead of latency for the worker isolate.
diff --git a/third_party/WebKit/Source/core/workers/WorkerThread.h b/third_party/WebKit/Source/core/workers/WorkerThread.h
index 556c934..0309cae 100644
--- a/third_party/WebKit/Source/core/workers/WorkerThread.h
+++ b/third_party/WebKit/Source/core/workers/WorkerThread.h
@@ -37,8 +37,8 @@
 #include "platform/WaitableEvent.h"
 #include "wtf/Forward.h"
 #include "wtf/Functional.h"
-#include "wtf/OwnPtr.h"
 #include "wtf/PassRefPtr.h"
+#include <memory>
 #include <v8.h>
 
 namespace blink {
@@ -100,7 +100,7 @@
     virtual ~WorkerThread();
 
     // Called on the main thread.
-    void start(PassOwnPtr<WorkerThreadStartupData>);
+    void start(std::unique_ptr<WorkerThreadStartupData>);
     void terminate();
 
     // Called on the main thread. Internally calls terminateInternal() and wait
@@ -159,7 +159,7 @@
 
     // Factory method for creating a new worker context for the thread.
     // Called on the worker thread.
-    virtual WorkerGlobalScope* createWorkerGlobalScope(PassOwnPtr<WorkerThreadStartupData>) = 0;
+    virtual WorkerGlobalScope* createWorkerGlobalScope(std::unique_ptr<WorkerThreadStartupData>) = 0;
 
     // Returns true when this WorkerThread owns the associated
     // WorkerBackingThread exclusively. If this function returns true, the
@@ -193,7 +193,7 @@
     void terminateInternal(TerminationMode);
     void forciblyTerminateExecution();
 
-    void initializeOnWorkerThread(PassOwnPtr<WorkerThreadStartupData>);
+    void initializeOnWorkerThread(std::unique_ptr<WorkerThreadStartupData>);
     void prepareForShutdownOnWorkerThread();
     void performShutdownOnWorkerThread();
     void performTaskOnWorkerThread(std::unique_ptr<ExecutionContextTask>, bool isInstrumented);
@@ -209,8 +209,8 @@
 
     long long m_forceTerminationDelayInMs;
 
-    OwnPtr<InspectorTaskRunner> m_inspectorTaskRunner;
-    OwnPtr<WorkerMicrotaskRunner> m_microtaskRunner;
+    std::unique_ptr<InspectorTaskRunner> m_inspectorTaskRunner;
+    std::unique_ptr<WorkerMicrotaskRunner> m_microtaskRunner;
 
     RefPtr<WorkerLoaderProxy> m_workerLoaderProxy;
     WorkerReportingProxy& m_workerReportingProxy;
@@ -223,14 +223,14 @@
     Persistent<WorkerGlobalScope> m_workerGlobalScope;
 
     // Signaled when the thread starts termination on the main thread.
-    OwnPtr<WaitableEvent> m_terminationEvent;
+    std::unique_ptr<WaitableEvent> m_terminationEvent;
 
     // Signaled when the thread completes termination on the worker thread.
-    OwnPtr<WaitableEvent> m_shutdownEvent;
+    std::unique_ptr<WaitableEvent> m_shutdownEvent;
 
     // Scheduled when termination starts with TerminationMode::Force, and
     // cancelled when the worker thread is gracefully shut down.
-    OwnPtr<ForceTerminationTask> m_scheduledForceTerminationTask;
+    std::unique_ptr<ForceTerminationTask> m_scheduledForceTerminationTask;
 
     Persistent<WorkerThreadLifecycleContext> m_workerThreadLifecycleContext;
 };
diff --git a/third_party/WebKit/Source/core/workers/WorkerThreadStartupData.cpp b/third_party/WebKit/Source/core/workers/WorkerThreadStartupData.cpp
index e9b767ca..659d28b 100644
--- a/third_party/WebKit/Source/core/workers/WorkerThreadStartupData.cpp
+++ b/third_party/WebKit/Source/core/workers/WorkerThreadStartupData.cpp
@@ -31,10 +31,12 @@
 #include "core/workers/WorkerThreadStartupData.h"
 
 #include "platform/network/ContentSecurityPolicyParsers.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
-WorkerThreadStartupData::WorkerThreadStartupData(const KURL& scriptURL, const String& userAgent, const String& sourceCode, PassOwnPtr<Vector<char>> cachedMetaData, WorkerThreadStartMode startMode, const Vector<CSPHeaderAndType>* contentSecurityPolicyHeaders, const SecurityOrigin* starterOrigin, WorkerClients* workerClients, WebAddressSpace addressSpace, const Vector<String>* originTrialTokens, V8CacheOptions v8CacheOptions)
+WorkerThreadStartupData::WorkerThreadStartupData(const KURL& scriptURL, const String& userAgent, const String& sourceCode, std::unique_ptr<Vector<char>> cachedMetaData, WorkerThreadStartMode startMode, const Vector<CSPHeaderAndType>* contentSecurityPolicyHeaders, const SecurityOrigin* starterOrigin, WorkerClients* workerClients, WebAddressSpace addressSpace, const Vector<String>* originTrialTokens, V8CacheOptions v8CacheOptions)
     : m_scriptURL(scriptURL.copy())
     , m_userAgent(userAgent.isolatedCopy())
     , m_sourceCode(sourceCode.isolatedCopy())
@@ -45,7 +47,7 @@
     , m_addressSpace(addressSpace)
     , m_v8CacheOptions(v8CacheOptions)
 {
-    m_contentSecurityPolicyHeaders = adoptPtr(new Vector<CSPHeaderAndType>());
+    m_contentSecurityPolicyHeaders = wrapUnique(new Vector<CSPHeaderAndType>());
     if (contentSecurityPolicyHeaders) {
         for (const auto& header : *contentSecurityPolicyHeaders) {
             CSPHeaderAndType copiedHeader(header.first.isolatedCopy(), header.second);
diff --git a/third_party/WebKit/Source/core/workers/WorkerThreadStartupData.h b/third_party/WebKit/Source/core/workers/WorkerThreadStartupData.h
index fb5fad7..c26db13 100644
--- a/third_party/WebKit/Source/core/workers/WorkerThreadStartupData.h
+++ b/third_party/WebKit/Source/core/workers/WorkerThreadStartupData.h
@@ -41,6 +41,8 @@
 #include "public/platform/WebAddressSpace.h"
 #include "wtf/Forward.h"
 #include "wtf/Noncopyable.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
@@ -50,9 +52,9 @@
     WTF_MAKE_NONCOPYABLE(WorkerThreadStartupData);
     USING_FAST_MALLOC(WorkerThreadStartupData);
 public:
-    static PassOwnPtr<WorkerThreadStartupData> create(const KURL& scriptURL, const String& userAgent, const String& sourceCode, PassOwnPtr<Vector<char>> cachedMetaData, WorkerThreadStartMode startMode, const Vector<CSPHeaderAndType>* contentSecurityPolicyHeaders, const SecurityOrigin* starterOrigin, WorkerClients* workerClients, WebAddressSpace addressSpace, const Vector<String>* originTrialTokens, V8CacheOptions v8CacheOptions = V8CacheOptionsDefault)
+    static std::unique_ptr<WorkerThreadStartupData> create(const KURL& scriptURL, const String& userAgent, const String& sourceCode, std::unique_ptr<Vector<char>> cachedMetaData, WorkerThreadStartMode startMode, const Vector<CSPHeaderAndType>* contentSecurityPolicyHeaders, const SecurityOrigin* starterOrigin, WorkerClients* workerClients, WebAddressSpace addressSpace, const Vector<String>* originTrialTokens, V8CacheOptions v8CacheOptions = V8CacheOptionsDefault)
     {
-        return adoptPtr(new WorkerThreadStartupData(scriptURL, userAgent, sourceCode, std::move(cachedMetaData), startMode, contentSecurityPolicyHeaders, starterOrigin, workerClients, addressSpace, originTrialTokens, v8CacheOptions));
+        return wrapUnique(new WorkerThreadStartupData(scriptURL, userAgent, sourceCode, std::move(cachedMetaData), startMode, contentSecurityPolicyHeaders, starterOrigin, workerClients, addressSpace, originTrialTokens, v8CacheOptions));
     }
 
     ~WorkerThreadStartupData();
@@ -60,9 +62,9 @@
     KURL m_scriptURL;
     String m_userAgent;
     String m_sourceCode;
-    OwnPtr<Vector<char>> m_cachedMetaData;
+    std::unique_ptr<Vector<char>> m_cachedMetaData;
     WorkerThreadStartMode m_startMode;
-    OwnPtr<Vector<CSPHeaderAndType>> m_contentSecurityPolicyHeaders;
+    std::unique_ptr<Vector<CSPHeaderAndType>> m_contentSecurityPolicyHeaders;
     std::unique_ptr<Vector<String>> m_originTrialTokens;
 
 
@@ -75,7 +77,7 @@
     //
     // See SecurityOrigin::transferPrivilegesFrom() for details on what
     // privileges are transferred.
-    OwnPtr<SecurityOrigin::PrivilegeData> m_starterOriginPrivilegeData;
+    std::unique_ptr<SecurityOrigin::PrivilegeData> m_starterOriginPrivilegeData;
 
     // This object is created and initialized on the thread creating
     // a new worker context, but ownership of it and this WorkerThreadStartupData
@@ -92,7 +94,7 @@
     V8CacheOptions m_v8CacheOptions;
 
 private:
-    WorkerThreadStartupData(const KURL& scriptURL, const String& userAgent, const String& sourceCode, PassOwnPtr<Vector<char>> cachedMetaData, WorkerThreadStartMode, const Vector<CSPHeaderAndType>* contentSecurityPolicyHeaders, const SecurityOrigin*, WorkerClients*, WebAddressSpace, const Vector<String>* originTrialTokens, V8CacheOptions);
+    WorkerThreadStartupData(const KURL& scriptURL, const String& userAgent, const String& sourceCode, std::unique_ptr<Vector<char>> cachedMetaData, WorkerThreadStartMode, const Vector<CSPHeaderAndType>* contentSecurityPolicyHeaders, const SecurityOrigin*, WorkerClients*, WebAddressSpace, const Vector<String>* originTrialTokens, V8CacheOptions);
 };
 
 } // namespace blink
diff --git a/third_party/WebKit/Source/core/workers/WorkerThreadTest.cpp b/third_party/WebKit/Source/core/workers/WorkerThreadTest.cpp
index 3552cf9..e1c372d 100644
--- a/third_party/WebKit/Source/core/workers/WorkerThreadTest.cpp
+++ b/third_party/WebKit/Source/core/workers/WorkerThreadTest.cpp
@@ -8,6 +8,8 @@
 #include "platform/testing/UnitTestHelpers.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 using testing::_;
 using testing::AtMost;
@@ -18,10 +20,10 @@
 public:
     void SetUp() override
     {
-        m_mockWorkerLoaderProxyProvider = adoptPtr(new MockWorkerLoaderProxyProvider());
-        m_mockWorkerReportingProxy = adoptPtr(new MockWorkerReportingProxy());
+        m_mockWorkerLoaderProxyProvider = wrapUnique(new MockWorkerLoaderProxyProvider());
+        m_mockWorkerReportingProxy = wrapUnique(new MockWorkerReportingProxy());
         m_securityOrigin = SecurityOrigin::create(KURL(ParsedURLString, "http://fake.url/"));
-        m_workerThread = adoptPtr(new WorkerThreadForTest(
+        m_workerThread = wrapUnique(new WorkerThreadForTest(
             m_mockWorkerLoaderProxyProvider.get(),
             *m_mockWorkerReportingProxy));
         m_mockWorkerThreadLifecycleObserver = new MockWorkerThreadLifecycleObserver(m_workerThread->getWorkerThreadLifecycleContext());
@@ -83,9 +85,9 @@
     }
 
     RefPtr<SecurityOrigin> m_securityOrigin;
-    OwnPtr<MockWorkerLoaderProxyProvider> m_mockWorkerLoaderProxyProvider;
-    OwnPtr<MockWorkerReportingProxy> m_mockWorkerReportingProxy;
-    OwnPtr<WorkerThreadForTest> m_workerThread;
+    std::unique_ptr<MockWorkerLoaderProxyProvider> m_mockWorkerLoaderProxyProvider;
+    std::unique_ptr<MockWorkerReportingProxy> m_mockWorkerReportingProxy;
+    std::unique_ptr<WorkerThreadForTest> m_workerThread;
     Persistent<MockWorkerThreadLifecycleObserver> m_mockWorkerThreadLifecycleObserver;
 };
 
diff --git a/third_party/WebKit/Source/core/workers/WorkerThreadTestHelper.h b/third_party/WebKit/Source/core/workers/WorkerThreadTestHelper.h
index 3513c64..bd35df2 100644
--- a/third_party/WebKit/Source/core/workers/WorkerThreadTestHelper.h
+++ b/third_party/WebKit/Source/core/workers/WorkerThreadTestHelper.h
@@ -25,9 +25,9 @@
 #include "testing/gmock/include/gmock/gmock.h"
 #include "wtf/CurrentTime.h"
 #include "wtf/Forward.h"
-#include "wtf/OwnPtr.h"
-#include "wtf/PassOwnPtr.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/Vector.h"
+#include <memory>
 #include <v8.h>
 
 namespace blink {
@@ -55,7 +55,7 @@
     ~MockWorkerReportingProxy() override { }
 
     MOCK_METHOD2(reportExceptionMock, void(const String& errorMessage, SourceLocation*));
-    void reportException(const String& errorMessage, PassOwnPtr<SourceLocation> location)
+    void reportException(const String& errorMessage, std::unique_ptr<SourceLocation> location)
     {
         reportExceptionMock(errorMessage, location.get());
     }
@@ -86,7 +86,7 @@
         WorkerReportingProxy& mockWorkerReportingProxy)
         : WorkerThread(WorkerLoaderProxy::create(mockWorkerLoaderProxyProvider), mockWorkerReportingProxy)
         , m_workerBackingThread(WorkerBackingThread::createForTest("Test thread"))
-        , m_scriptLoadedEvent(adoptPtr(new WaitableEvent()))
+        , m_scriptLoadedEvent(wrapUnique(new WaitableEvent()))
     {
     }
 
@@ -94,7 +94,7 @@
 
     WorkerBackingThread& workerBackingThread() override { return *m_workerBackingThread; }
 
-    WorkerGlobalScope* createWorkerGlobalScope(PassOwnPtr<WorkerThreadStartupData>) override;
+    WorkerGlobalScope* createWorkerGlobalScope(std::unique_ptr<WorkerThreadStartupData>) override;
 
     void waitUntilScriptLoaded()
     {
@@ -108,7 +108,7 @@
 
     void startWithSourceCode(SecurityOrigin* securityOrigin, const String& source)
     {
-        OwnPtr<Vector<CSPHeaderAndType>> headers = adoptPtr(new Vector<CSPHeaderAndType>());
+        std::unique_ptr<Vector<CSPHeaderAndType>> headers = wrapUnique(new Vector<CSPHeaderAndType>());
         CSPHeaderAndType headerAndType("contentSecurityPolicy", ContentSecurityPolicyHeaderTypeReport);
         headers->append(headerAndType);
 
@@ -130,19 +130,19 @@
 
     void waitForInit()
     {
-        OwnPtr<WaitableEvent> completionEvent = adoptPtr(new WaitableEvent());
+        std::unique_ptr<WaitableEvent> completionEvent = wrapUnique(new WaitableEvent());
         workerBackingThread().backingThread().postTask(BLINK_FROM_HERE, threadSafeBind(&WaitableEvent::signal, AllowCrossThreadAccess(completionEvent.get())));
         completionEvent->wait();
     }
 
 private:
-    OwnPtr<WorkerBackingThread> m_workerBackingThread;
-    OwnPtr<WaitableEvent> m_scriptLoadedEvent;
+    std::unique_ptr<WorkerBackingThread> m_workerBackingThread;
+    std::unique_ptr<WaitableEvent> m_scriptLoadedEvent;
 };
 
 class FakeWorkerGlobalScope : public WorkerGlobalScope {
 public:
-    FakeWorkerGlobalScope(const KURL& url, const String& userAgent, WorkerThreadForTest* thread, PassOwnPtr<SecurityOrigin::PrivilegeData> starterOriginPrivilegeData, WorkerClients* workerClients)
+    FakeWorkerGlobalScope(const KURL& url, const String& userAgent, WorkerThreadForTest* thread, std::unique_ptr<SecurityOrigin::PrivilegeData> starterOriginPrivilegeData, WorkerClients* workerClients)
         : WorkerGlobalScope(url, userAgent, thread, monotonicallyIncreasingTime(), std::move(starterOriginPrivilegeData), workerClients)
         , m_thread(thread)
     {
@@ -163,7 +163,7 @@
         return EventTargetNames::DedicatedWorkerGlobalScope;
     }
 
-    void logExceptionToConsole(const String&, PassOwnPtr<SourceLocation>) override
+    void logExceptionToConsole(const String&, std::unique_ptr<SourceLocation>) override
     {
     }
 
@@ -171,7 +171,7 @@
     WorkerThreadForTest* m_thread;
 };
 
-inline WorkerGlobalScope* WorkerThreadForTest::createWorkerGlobalScope(PassOwnPtr<WorkerThreadStartupData> startupData)
+inline WorkerGlobalScope* WorkerThreadForTest::createWorkerGlobalScope(std::unique_ptr<WorkerThreadStartupData> startupData)
 {
     return new FakeWorkerGlobalScope(startupData->m_scriptURL, startupData->m_userAgent, this, std::move(startupData->m_starterOriginPrivilegeData), std::move(startupData->m_workerClients));
 }
diff --git a/third_party/WebKit/Source/core/workers/WorkletGlobalScope.cpp b/third_party/WebKit/Source/core/workers/WorkletGlobalScope.cpp
index e6cc221..9a5d5da2 100644
--- a/third_party/WebKit/Source/core/workers/WorkletGlobalScope.cpp
+++ b/third_party/WebKit/Source/core/workers/WorkletGlobalScope.cpp
@@ -8,6 +8,7 @@
 #include "bindings/core/v8/WorkerOrWorkletScriptController.h"
 #include "core/inspector/InspectorInstrumentation.h"
 #include "core/inspector/MainThreadDebugger.h"
+#include <memory>
 
 namespace blink {
 
@@ -68,7 +69,7 @@
     InspectorInstrumentation::scriptExecutionBlockedByCSP(this, directiveText);
 }
 
-void WorkletGlobalScope::logExceptionToConsole(const String& errorMessage, PassOwnPtr<SourceLocation> location)
+void WorkletGlobalScope::logExceptionToConsole(const String& errorMessage, std::unique_ptr<SourceLocation> location)
 {
     ConsoleMessage* consoleMessage = ConsoleMessage::create(JSMessageSource, ErrorMessageLevel, errorMessage, std::move(location));
     addConsoleMessage(consoleMessage);
diff --git a/third_party/WebKit/Source/core/workers/WorkletGlobalScope.h b/third_party/WebKit/Source/core/workers/WorkletGlobalScope.h
index a89c07f..c9693716 100644
--- a/third_party/WebKit/Source/core/workers/WorkletGlobalScope.h
+++ b/third_party/WebKit/Source/core/workers/WorkletGlobalScope.h
@@ -13,6 +13,7 @@
 #include "core/inspector/ConsoleMessage.h"
 #include "core/workers/WorkerOrWorkletGlobalScope.h"
 #include "platform/heap/Handle.h"
+#include <memory>
 
 namespace blink {
 
@@ -54,7 +55,7 @@
     }
 
     void reportBlockedScriptExecutionToInspector(const String& directiveText) final;
-    void logExceptionToConsole(const String& errorMessage, PassOwnPtr<SourceLocation>) final;
+    void logExceptionToConsole(const String& errorMessage, std::unique_ptr<SourceLocation>) final;
 
     DECLARE_VIRTUAL_TRACE();
 
diff --git a/third_party/WebKit/Source/core/xml/XPathParser.cpp b/third_party/WebKit/Source/core/xml/XPathParser.cpp
index bd9e093..3d2a055c 100644
--- a/third_party/WebKit/Source/core/xml/XPathParser.cpp
+++ b/third_party/WebKit/Source/core/xml/XPathParser.cpp
@@ -33,6 +33,7 @@
 #include "core/xml/XPathEvaluator.h"
 #include "core/xml/XPathNSResolver.h"
 #include "core/xml/XPathPath.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/StdLibExtras.h"
 #include "wtf/text/StringHash.h"
 
@@ -500,7 +501,7 @@
 
     ASSERT(!m_strings.contains(s));
 
-    m_strings.add(adoptPtr(s));
+    m_strings.add(wrapUnique(s));
 }
 
 void Parser::deleteString(String* s)
diff --git a/third_party/WebKit/Source/core/xml/XPathParser.h b/third_party/WebKit/Source/core/xml/XPathParser.h
index 7e9228a..dcf7aa8 100644
--- a/third_party/WebKit/Source/core/xml/XPathParser.h
+++ b/third_party/WebKit/Source/core/xml/XPathParser.h
@@ -30,6 +30,7 @@
 #include "core/xml/XPathPredicate.h"
 #include "core/xml/XPathStep.h"
 #include "wtf/Allocator.h"
+#include <memory>
 
 namespace blink {
 
@@ -108,7 +109,7 @@
     int m_lastTokenType;
     Member<XPathNSResolver> m_resolver;
 
-    HashSet<OwnPtr<String>> m_strings;
+    HashSet<std::unique_ptr<String>> m_strings;
 };
 
 } // namespace XPath
diff --git a/third_party/WebKit/Source/core/xml/XSLImportRule.h b/third_party/WebKit/Source/core/xml/XSLImportRule.h
index 349166b..1cc23b6 100644
--- a/third_party/WebKit/Source/core/xml/XSLImportRule.h
+++ b/third_party/WebKit/Source/core/xml/XSLImportRule.h
@@ -25,7 +25,6 @@
 
 #include "core/xml/XSLStyleSheet.h"
 #include "platform/RuntimeEnabledFeatures.h"
-#include "wtf/PassOwnPtr.h"
 
 namespace blink {
 
diff --git a/third_party/WebKit/Source/core/xml/parser/XMLDocumentParser.cpp b/third_party/WebKit/Source/core/xml/parser/XMLDocumentParser.cpp
index a8511a0..cb1c994 100644
--- a/third_party/WebKit/Source/core/xml/parser/XMLDocumentParser.cpp
+++ b/third_party/WebKit/Source/core/xml/parser/XMLDocumentParser.cpp
@@ -67,6 +67,7 @@
 #include "platform/network/ResourceResponse.h"
 #include "platform/v8_inspector/public/ConsoleTypes.h"
 #include "platform/weborigin/SecurityOrigin.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/StringExtras.h"
 #include "wtf/TemporaryChange.h"
 #include "wtf/Threading.h"
@@ -76,6 +77,7 @@
 #include <libxml/parser.h>
 #include <libxml/parserInternals.h>
 #include <libxslt/xslt.h>
+#include <memory>
 
 namespace blink {
 
@@ -960,7 +962,7 @@
 
     if (m_parserPaused) {
         m_scriptStartPosition = textPosition();
-        m_pendingCallbacks.append(adoptPtr(new PendingStartElementNSCallback(localName, prefix, uri, nbNamespaces, libxmlNamespaces,
+        m_pendingCallbacks.append(wrapUnique(new PendingStartElementNSCallback(localName, prefix, uri, nbNamespaces, libxmlNamespaces,
             nbAttributes, nbDefaulted, libxmlAttributes)));
         return;
     }
@@ -1039,7 +1041,7 @@
         return;
 
     if (m_parserPaused) {
-        m_pendingCallbacks.append(adoptPtr(new PendingEndElementNSCallback(m_scriptStartPosition)));
+        m_pendingCallbacks.append(wrapUnique(new PendingEndElementNSCallback(m_scriptStartPosition)));
         return;
     }
 
@@ -1121,7 +1123,7 @@
         return;
 
     if (m_parserPaused) {
-        m_pendingCallbacks.append(adoptPtr(new PendingCharactersCallback(chars, length)));
+        m_pendingCallbacks.append(wrapUnique(new PendingCharactersCallback(chars, length)));
         return;
     }
 
@@ -1138,7 +1140,7 @@
     vsnprintf(formattedMessage, sizeof(formattedMessage) - 1, message, args);
 
     if (m_parserPaused) {
-        m_pendingCallbacks.append(adoptPtr(new PendingErrorCallback(type, reinterpret_cast<const xmlChar*>(formattedMessage), lineNumber(), columnNumber())));
+        m_pendingCallbacks.append(wrapUnique(new PendingErrorCallback(type, reinterpret_cast<const xmlChar*>(formattedMessage), lineNumber(), columnNumber())));
         return;
     }
 
@@ -1151,7 +1153,7 @@
         return;
 
     if (m_parserPaused) {
-        m_pendingCallbacks.append(adoptPtr(new PendingProcessingInstructionCallback(target, data)));
+        m_pendingCallbacks.append(wrapUnique(new PendingProcessingInstructionCallback(target, data)));
         return;
     }
 
@@ -1190,7 +1192,7 @@
         return;
 
     if (m_parserPaused) {
-        m_pendingCallbacks.append(adoptPtr(new PendingCDATABlockCallback(text)));
+        m_pendingCallbacks.append(wrapUnique(new PendingCDATABlockCallback(text)));
         return;
     }
 
@@ -1206,7 +1208,7 @@
         return;
 
     if (m_parserPaused) {
-        m_pendingCallbacks.append(adoptPtr(new PendingCommentCallback(text)));
+        m_pendingCallbacks.append(wrapUnique(new PendingCommentCallback(text)));
         return;
     }
 
@@ -1251,7 +1253,7 @@
         return;
 
     if (m_parserPaused) {
-        m_pendingCallbacks.append(adoptPtr(new PendingInternalSubsetCallback(name, externalID, systemID)));
+        m_pendingCallbacks.append(wrapUnique(new PendingInternalSubsetCallback(name, externalID, systemID)));
         return;
     }
 
@@ -1489,7 +1491,7 @@
         V8Document::PrivateScript::transformDocumentToTreeViewMethod(document()->frame(), document(), noStyleMessage);
     } else if (m_sawXSLTransform) {
         xmlDocPtr doc = xmlDocPtrForString(document(), m_originalSourceForTransform.toString(), document()->url().getString());
-        document()->setTransformSource(adoptPtr(new TransformSource(doc)));
+        document()->setTransformSource(wrapUnique(new TransformSource(doc)));
         DocumentParser::stopParsing();
     }
 }
@@ -1540,7 +1542,7 @@
 
     // First, execute any pending callbacks
     while (!m_pendingCallbacks.isEmpty()) {
-        OwnPtr<PendingCallback> callback = m_pendingCallbacks.takeFirst();
+        std::unique_ptr<PendingCallback> callback = m_pendingCallbacks.takeFirst();
         callback->call(this);
 
         // A callback paused the parser
diff --git a/third_party/WebKit/Source/core/xml/parser/XMLDocumentParser.h b/third_party/WebKit/Source/core/xml/parser/XMLDocumentParser.h
index b8b84bd..8a21eb1 100644
--- a/third_party/WebKit/Source/core/xml/parser/XMLDocumentParser.h
+++ b/third_party/WebKit/Source/core/xml/parser/XMLDocumentParser.h
@@ -33,11 +33,11 @@
 #include "platform/heap/Handle.h"
 #include "platform/text/SegmentedString.h"
 #include "wtf/HashMap.h"
-#include "wtf/OwnPtr.h"
 #include "wtf/RefCounted.h"
 #include "wtf/text/CString.h"
 #include "wtf/text/StringHash.h"
 #include <libxml/tree.h>
+#include <memory>
 
 namespace blink {
 
@@ -165,7 +165,7 @@
 
     xmlParserCtxtPtr context() const { return m_context ? m_context->context() : 0; }
     RefPtr<XMLParserContext> m_context;
-    Deque<OwnPtr<PendingCallback>> m_pendingCallbacks;
+    Deque<std::unique_ptr<PendingCallback>> m_pendingCallbacks;
     Vector<xmlChar> m_bufferedText;
 
     Member<ContainerNode> m_currentNode;
diff --git a/third_party/WebKit/Source/core/xmlhttprequest/XMLHttpRequest.cpp b/third_party/WebKit/Source/core/xmlhttprequest/XMLHttpRequest.cpp
index eab81df..10c60eda8 100644
--- a/third_party/WebKit/Source/core/xmlhttprequest/XMLHttpRequest.cpp
+++ b/third_party/WebKit/Source/core/xmlhttprequest/XMLHttpRequest.cpp
@@ -77,6 +77,7 @@
 #include "wtf/Assertions.h"
 #include "wtf/StdLibExtras.h"
 #include "wtf/text/CString.h"
+#include <memory>
 
 namespace blink {
 
@@ -334,7 +335,7 @@
             // copying the bytes between the browser and the renderer.
             m_responseBlob = Blob::create(createBlobDataHandleFromResponse());
         } else {
-            OwnPtr<BlobData> blobData = BlobData::create();
+            std::unique_ptr<BlobData> blobData = BlobData::create();
             size_t size = 0;
             if (m_binaryResponseBuilder && m_binaryResponseBuilder->size()) {
                 size = m_binaryResponseBuilder->size();
@@ -1023,7 +1024,7 @@
     // If, window.onload contains open() and send(), m_loader will be set to
     // non 0 value. So, we cannot continue the outer open(). In such case,
     // just abort the outer open() by returning false.
-    OwnPtr<ThreadableLoader> loader = std::move(m_loader);
+    std::unique_ptr<ThreadableLoader> loader = std::move(m_loader);
     loader->cancel();
 
     // If abort() called internalAbort() and a nested open() ended up
@@ -1436,7 +1437,7 @@
 PassRefPtr<BlobDataHandle> XMLHttpRequest::createBlobDataHandleFromResponse()
 {
     ASSERT(m_downloadingToFile);
-    OwnPtr<BlobData> blobData = BlobData::create();
+    std::unique_ptr<BlobData> blobData = BlobData::create();
     String filePath = m_response.downloadedFilePath();
     // If we errored out or got no data, we return an empty handle.
     if (!filePath.isEmpty() && m_lengthDownloadedToFile) {
@@ -1509,7 +1510,7 @@
     }
 }
 
-void XMLHttpRequest::didReceiveResponse(unsigned long identifier, const ResourceResponse& response, PassOwnPtr<WebDataConsumerHandle> handle)
+void XMLHttpRequest::didReceiveResponse(unsigned long identifier, const ResourceResponse& response, std::unique_ptr<WebDataConsumerHandle> handle)
 {
     ASSERT_UNUSED(handle, !handle);
     WTF_LOG(Network, "XMLHttpRequest %p didReceiveResponse(%lu)", this, identifier);
@@ -1544,7 +1545,7 @@
     m_responseDocumentParser->appendBytes(data, len);
 }
 
-PassOwnPtr<TextResourceDecoder> XMLHttpRequest::createDecoder() const
+std::unique_ptr<TextResourceDecoder> XMLHttpRequest::createDecoder() const
 {
     if (m_responseTypeCode == ResponseTypeJSON)
         return TextResourceDecoder::create("application/json", "UTF-8");
@@ -1554,7 +1555,7 @@
 
     // allow TextResourceDecoder to look inside the m_response if it's XML or HTML
     if (responseIsXML()) {
-        OwnPtr<TextResourceDecoder> decoder = TextResourceDecoder::create("application/xml");
+        std::unique_ptr<TextResourceDecoder> decoder = TextResourceDecoder::create("application/xml");
         // Don't stop on encoding errors, unlike it is done for other kinds
         // of XML resources. This matches the behavior of previous WebKit
         // versions, Firefox and Opera.
diff --git a/third_party/WebKit/Source/core/xmlhttprequest/XMLHttpRequest.h b/third_party/WebKit/Source/core/xmlhttprequest/XMLHttpRequest.h
index 4b33c0e8..453404e 100644
--- a/third_party/WebKit/Source/core/xmlhttprequest/XMLHttpRequest.h
+++ b/third_party/WebKit/Source/core/xmlhttprequest/XMLHttpRequest.h
@@ -37,13 +37,12 @@
 #include "platform/weborigin/KURL.h"
 #include "platform/weborigin/SecurityOrigin.h"
 #include "wtf/Forward.h"
-#include "wtf/OwnPtr.h"
-#include "wtf/PassOwnPtr.h"
 #include "wtf/PassRefPtr.h"
 #include "wtf/RefPtr.h"
 #include "wtf/text/AtomicString.h"
 #include "wtf/text/StringBuilder.h"
 #include "wtf/text/WTFString.h"
+#include <memory>
 
 namespace blink {
 
@@ -157,7 +156,7 @@
     SecurityOrigin* getSecurityOrigin() const;
 
     void didSendData(unsigned long long bytesSent, unsigned long long totalBytesToBeSent) override;
-    void didReceiveResponse(unsigned long identifier, const ResourceResponse&, PassOwnPtr<WebDataConsumerHandle>) override;
+    void didReceiveResponse(unsigned long identifier, const ResourceResponse&, std::unique_ptr<WebDataConsumerHandle>) override;
     void didReceiveData(const char* data, unsigned dataLength) override;
     // When responseType is set to "blob", didDownloadData() is called instead
     // of didReceiveData().
@@ -193,7 +192,7 @@
     bool responseIsXML() const;
     bool responseIsHTML() const;
 
-    PassOwnPtr<TextResourceDecoder> createDecoder() const;
+    std::unique_ptr<TextResourceDecoder> createDecoder() const;
 
     void initResponseDocument();
     void parseDocumentChunk(const char* data, unsigned dataLength);
@@ -265,13 +264,13 @@
     Member<Blob> m_responseBlob;
     Member<Stream> m_responseLegacyStream;
 
-    OwnPtr<ThreadableLoader> m_loader;
+    std::unique_ptr<ThreadableLoader> m_loader;
     State m_state;
 
     ResourceResponse m_response;
     String m_finalResponseCharset;
 
-    OwnPtr<TextResourceDecoder> m_decoder;
+    std::unique_ptr<TextResourceDecoder> m_decoder;
 
     ScriptString m_responseText;
     Member<Document> m_responseDocument;
diff --git a/third_party/WebKit/Source/core/xmlhttprequest/XMLHttpRequestUpload.h b/third_party/WebKit/Source/core/xmlhttprequest/XMLHttpRequestUpload.h
index 3d30862..293fbb48 100644
--- a/third_party/WebKit/Source/core/xmlhttprequest/XMLHttpRequestUpload.h
+++ b/third_party/WebKit/Source/core/xmlhttprequest/XMLHttpRequestUpload.h
@@ -31,7 +31,6 @@
 #include "core/xmlhttprequest/XMLHttpRequestEventTarget.h"
 #include "platform/heap/Handle.h"
 #include "wtf/Forward.h"
-#include "wtf/PassOwnPtr.h"
 #include "wtf/PassRefPtr.h"
 #include "wtf/RefPtr.h"
 
diff --git a/third_party/WebKit/Source/devtools/front_end/timeline/TimelineTreeView.js b/third_party/WebKit/Source/devtools/front_end/timeline/TimelineTreeView.js
index 5a9a559..025a36c 100644
--- a/third_party/WebKit/Source/devtools/front_end/timeline/TimelineTreeView.js
+++ b/third_party/WebKit/Source/devtools/front_end/timeline/TimelineTreeView.js
@@ -613,6 +613,17 @@
         return true;
     },
 
+    /**
+     * @return {!WebInspector.TimelineAggregator}
+     */
+    _createAggregator: function()
+    {
+         return new WebInspector.TimelineAggregator(
+             event => WebInspector.TimelineUIUtils.eventStyle(event).title,
+             event => WebInspector.TimelineUIUtils.eventStyle(event).category.name
+         );
+    },
+
     __proto__: WebInspector.TimelineTreeView.prototype,
 };
 
@@ -636,8 +647,7 @@
     _buildTree: function()
     {
         var topDown = this._buildTopDownTree(WebInspector.TimelineAggregator.eventId);
-        var aggregator = new WebInspector.TimelineAggregator(event => WebInspector.TimelineUIUtils.eventStyle(event));
-        return aggregator.performGrouping(topDown, this._groupBySetting.get());
+        return this._createAggregator().performGrouping(topDown, this._groupBySetting.get());
     },
 
     __proto__: WebInspector.AggregatedTimelineTreeView.prototype,
@@ -663,8 +673,7 @@
     _buildTree: function()
     {
         var topDown = this._buildTopDownTree(WebInspector.TimelineAggregator.eventId);
-        var aggregator = new WebInspector.TimelineAggregator(event => WebInspector.TimelineUIUtils.eventStyle(event));
-        return WebInspector.TimelineProfileTree.buildBottomUp(topDown, aggregator.groupFunction(this._groupBySetting.get()));
+        return WebInspector.TimelineProfileTree.buildBottomUp(topDown, this._createAggregator().groupFunction(this._groupBySetting.get()));
     },
 
     __proto__: WebInspector.AggregatedTimelineTreeView.prototype
diff --git a/third_party/WebKit/Source/devtools/front_end/timeline/TimelineUIUtils.js b/third_party/WebKit/Source/devtools/front_end/timeline/TimelineUIUtils.js
index 6740237a..b17bfa54 100644
--- a/third_party/WebKit/Source/devtools/front_end/timeline/TimelineUIUtils.js
+++ b/third_party/WebKit/Source/devtools/front_end/timeline/TimelineUIUtils.js
@@ -313,7 +313,7 @@
  */
 WebInspector.TimelineUIUtils.isUserFrame = function(frame)
 {
-    return frame.scriptId !== "0" && frame.url && !frame.url.startsWith("native ");
+    return frame.scriptId !== "0" && !(frame.url && frame.url.startsWith("native "));
 }
 
 /**
diff --git a/third_party/WebKit/Source/devtools/front_end/timeline_model/TimelineProfileTree.js b/third_party/WebKit/Source/devtools/front_end/timeline_model/TimelineProfileTree.js
index be8cca1..5ff5f37b 100644
--- a/third_party/WebKit/Source/devtools/front_end/timeline_model/TimelineProfileTree.js
+++ b/third_party/WebKit/Source/devtools/front_end/timeline_model/TimelineProfileTree.js
@@ -218,11 +218,13 @@
 
 /**
  * @constructor
- * @param {function(!WebInspector.TracingModel.Event):{title: string, category: !WebInspector.TimelineCategory}} eventStyleMapper
+ * @param {function(!WebInspector.TracingModel.Event):string} titleMapper
+ * @param {function(!WebInspector.TracingModel.Event):string} categoryMapper
  */
-WebInspector.TimelineAggregator = function(eventStyleMapper)
+WebInspector.TimelineAggregator = function(titleMapper, categoryMapper)
 {
-    this._eventStyleMapper = eventStyleMapper;
+    this._titleMapper = titleMapper;
+    this._categoryMapper = categoryMapper;
     /** @type {!Map<string, !WebInspector.TimelineProfileTree.Node>} */
     this._groupNodes = new Map();
 }
@@ -337,8 +339,8 @@
 
         switch (groupBy) {
         case WebInspector.TimelineAggregator.GroupBy.None: return null;
-        case WebInspector.TimelineAggregator.GroupBy.EventName: return node => node.event ? this._eventStyleMapper(node.event).title : "";
-        case WebInspector.TimelineAggregator.GroupBy.Category: return node => node.event ? this._eventStyleMapper(node.event).category.name : "";
+        case WebInspector.TimelineAggregator.GroupBy.EventName: return node => node.event ? this._titleMapper(node.event) : "";
+        case WebInspector.TimelineAggregator.GroupBy.Category: return node => node.event ? this._categoryMapper(node.event) : "";
         case WebInspector.TimelineAggregator.GroupBy.Subdomain: return groupByDomain.bind(null, false);
         case WebInspector.TimelineAggregator.GroupBy.Domain: return groupByDomain.bind(null, true);
         case WebInspector.TimelineAggregator.GroupBy.URL: return groupByURL;
diff --git a/third_party/WebKit/Source/devtools/front_end/ui/Tooltip.js b/third_party/WebKit/Source/devtools/front_end/ui/Tooltip.js
index cb92509f3..f28d2a3 100644
--- a/third_party/WebKit/Source/devtools/front_end/ui/Tooltip.js
+++ b/third_party/WebKit/Source/devtools/front_end/ui/Tooltip.js
@@ -106,6 +106,7 @@
         const anchorOffset = 2;
         const pageMargin = 2;
         var cursorOffset = 10;
+        this._tooltipElement.classList.toggle("tooltip-breakword", !this._tooltipElement.textContent.match("\\s"));
         this._tooltipElement.style.maxWidth = (containerOffsetWidth - pageMargin * 2) + "px";
         this._tooltipElement.style.maxHeight = "";
         var tooltipWidth = this._tooltipElement.offsetWidth;
diff --git a/third_party/WebKit/Source/devtools/front_end/ui/tooltip.css b/third_party/WebKit/Source/devtools/front_end/ui/tooltip.css
index dbcbd8e6..4a796cdf 100644
--- a/third_party/WebKit/Source/devtools/front_end/ui/tooltip.css
+++ b/third_party/WebKit/Source/devtools/front_end/ui/tooltip.css
@@ -28,6 +28,10 @@
     overflow: hidden;
 }
 
+.tooltip-breakword {
+    word-break: break-word;
+}
+
 .tooltip.shown {
     visibility: visible;
     transition-delay: 600ms;
diff --git a/third_party/WebKit/Source/modules/EventModulesFactory.h b/third_party/WebKit/Source/modules/EventModulesFactory.h
index e4691214..cf5aa10 100644
--- a/third_party/WebKit/Source/modules/EventModulesFactory.h
+++ b/third_party/WebKit/Source/modules/EventModulesFactory.h
@@ -8,7 +8,9 @@
 #include "core/events/EventFactory.h"
 #include "platform/heap/Handle.h"
 #include "wtf/PassRefPtr.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/text/AtomicString.h"
+#include <memory>
 
 namespace blink {
 
@@ -16,9 +18,9 @@
 
 class EventModulesFactory final : public EventFactoryBase {
 public:
-    static PassOwnPtr<EventModulesFactory> create()
+    static std::unique_ptr<EventModulesFactory> create()
     {
-        return adoptPtr(new EventModulesFactory());
+        return wrapUnique(new EventModulesFactory());
     }
 
     Event* create(ExecutionContext*, const String& eventType) override;
diff --git a/third_party/WebKit/Source/modules/ModulesInitializer.cpp b/third_party/WebKit/Source/modules/ModulesInitializer.cpp
index b04f7fca..f83ea2ba 100644
--- a/third_party/WebKit/Source/modules/ModulesInitializer.cpp
+++ b/third_party/WebKit/Source/modules/ModulesInitializer.cpp
@@ -24,6 +24,7 @@
 #include "modules/webdatabase/DatabaseManager.h"
 #include "modules/webgl/WebGL2RenderingContext.h"
 #include "modules/webgl/WebGLRenderingContext.h"
+#include "wtf/PtrUtil.h"
 
 namespace blink {
 
@@ -49,14 +50,14 @@
     CoreInitializer::initialize();
 
     // Canvas context types must be registered with the HTMLCanvasElement.
-    HTMLCanvasElement::registerRenderingContextFactory(adoptPtr(new CanvasRenderingContext2D::Factory()));
-    HTMLCanvasElement::registerRenderingContextFactory(adoptPtr(new WebGLRenderingContext::Factory()));
-    HTMLCanvasElement::registerRenderingContextFactory(adoptPtr(new WebGL2RenderingContext::Factory()));
-    HTMLCanvasElement::registerRenderingContextFactory(adoptPtr(new ImageBitmapRenderingContext::Factory()));
+    HTMLCanvasElement::registerRenderingContextFactory(wrapUnique(new CanvasRenderingContext2D::Factory()));
+    HTMLCanvasElement::registerRenderingContextFactory(wrapUnique(new WebGLRenderingContext::Factory()));
+    HTMLCanvasElement::registerRenderingContextFactory(wrapUnique(new WebGL2RenderingContext::Factory()));
+    HTMLCanvasElement::registerRenderingContextFactory(wrapUnique(new ImageBitmapRenderingContext::Factory()));
 
     // OffscreenCanvas context types must be registered with the OffscreenCanvas.
-    OffscreenCanvas::registerRenderingContextFactory(adoptPtr(new OffscreenCanvasRenderingContext2D::Factory()));
-    OffscreenCanvas::registerRenderingContextFactory(adoptPtr(new WebGLRenderingContext::Factory()));
+    OffscreenCanvas::registerRenderingContextFactory(wrapUnique(new OffscreenCanvasRenderingContext2D::Factory()));
+    OffscreenCanvas::registerRenderingContextFactory(wrapUnique(new WebGLRenderingContext::Factory()));
 
     ASSERT(isInitialized());
 }
diff --git a/third_party/WebKit/Source/modules/accessibility/AXObjectCacheImpl.cpp b/third_party/WebKit/Source/modules/accessibility/AXObjectCacheImpl.cpp
index 04665908..0aff29dd 100644
--- a/third_party/WebKit/Source/modules/accessibility/AXObjectCacheImpl.cpp
+++ b/third_party/WebKit/Source/modules/accessibility/AXObjectCacheImpl.cpp
@@ -77,6 +77,7 @@
 #include "modules/accessibility/AXTableHeaderContainer.h"
 #include "modules/accessibility/AXTableRow.h"
 #include "wtf/PassRefPtr.h"
+#include "wtf/PtrUtil.h"
 
 namespace blink {
 
@@ -736,7 +737,7 @@
             HashSet<AXID>* owners = m_idToAriaOwnersMapping.get(id);
             if (!owners) {
                 owners = new HashSet<AXID>();
-                m_idToAriaOwnersMapping.set(id, adoptPtr(owners));
+                m_idToAriaOwnersMapping.set(id, wrapUnique(owners));
             }
             owners->add(owner->axObjectID());
         }
diff --git a/third_party/WebKit/Source/modules/accessibility/AXObjectCacheImpl.h b/third_party/WebKit/Source/modules/accessibility/AXObjectCacheImpl.h
index a8ed70a..166ade3 100644
--- a/third_party/WebKit/Source/modules/accessibility/AXObjectCacheImpl.h
+++ b/third_party/WebKit/Source/modules/accessibility/AXObjectCacheImpl.h
@@ -36,6 +36,7 @@
 #include "wtf/Forward.h"
 #include "wtf/HashMap.h"
 #include "wtf/HashSet.h"
+#include <memory>
 
 namespace blink {
 
@@ -227,7 +228,7 @@
     // want to own that ID. This is *unvalidated*, it includes possible duplicates.
     // This is used so that when an element with an ID is added to the tree or changes
     // its ID, we can quickly determine if it affects an aria-owns relationship.
-    HashMap<String, OwnPtr<HashSet<AXID>>> m_idToAriaOwnersMapping;
+    HashMap<String, std::unique_ptr<HashSet<AXID>>> m_idToAriaOwnersMapping;
 
     Timer<AXObjectCacheImpl> m_notificationPostTimer;
     HeapVector<std::pair<Member<AXObject>, AXNotification>> m_notificationsToPost;
diff --git a/third_party/WebKit/Source/modules/accessibility/AXObjectTest.cpp b/third_party/WebKit/Source/modules/accessibility/AXObjectTest.cpp
index c3afc19..dd49114b 100644
--- a/third_party/WebKit/Source/modules/accessibility/AXObjectTest.cpp
+++ b/third_party/WebKit/Source/modules/accessibility/AXObjectTest.cpp
@@ -8,6 +8,7 @@
 #include "core/dom/Element.h"
 #include "core/testing/DummyPageHolder.h"
 #include "testing/gtest/include/gtest/gtest.h"
+#include <memory>
 
 namespace blink {
 
@@ -18,7 +19,7 @@
 private:
     void SetUp() override;
 
-    OwnPtr<DummyPageHolder> m_pageHolder;
+    std::unique_ptr<DummyPageHolder> m_pageHolder;
 };
 
 void AXObjectTest::SetUp()
diff --git a/third_party/WebKit/Source/modules/accessibility/InspectorAccessibilityAgent.cpp b/third_party/WebKit/Source/modules/accessibility/InspectorAccessibilityAgent.cpp
index f0ad546..78b6bf0 100644
--- a/third_party/WebKit/Source/modules/accessibility/InspectorAccessibilityAgent.cpp
+++ b/third_party/WebKit/Source/modules/accessibility/InspectorAccessibilityAgent.cpp
@@ -15,6 +15,7 @@
 #include "modules/accessibility/AXObjectCacheImpl.h"
 #include "modules/accessibility/InspectorTypeBuilderHelper.h"
 #include "platform/inspector_protocol/Values.h"
+#include <memory>
 
 namespace blink {
 
@@ -381,7 +382,7 @@
         return;
 
     Document& document = node->document();
-    OwnPtr<ScopedAXObjectCache> cache = ScopedAXObjectCache::create(document);
+    std::unique_ptr<ScopedAXObjectCache> cache = ScopedAXObjectCache::create(document);
     AXObjectCacheImpl* cacheImpl = toAXObjectCacheImpl(cache->get());
     AXObject* axObject = cacheImpl->getOrCreate(node);
     if (!axObject || axObject->accessibilityIsIgnored()) {
diff --git a/third_party/WebKit/Source/modules/accessibility/InspectorAccessibilityAgent.h b/third_party/WebKit/Source/modules/accessibility/InspectorAccessibilityAgent.h
index bed0ecd6..6a808c8 100644
--- a/third_party/WebKit/Source/modules/accessibility/InspectorAccessibilityAgent.h
+++ b/third_party/WebKit/Source/modules/accessibility/InspectorAccessibilityAgent.h
@@ -8,7 +8,6 @@
 #include "core/inspector/InspectorBaseAgent.h"
 #include "core/inspector/protocol/Accessibility.h"
 #include "modules/ModulesExport.h"
-#include "wtf/PassOwnPtr.h"
 
 namespace blink {
 
diff --git a/third_party/WebKit/Source/modules/app_banner/AppBannerPromptResult.h b/third_party/WebKit/Source/modules/app_banner/AppBannerPromptResult.h
index d1d475d..ba5e6cf 100644
--- a/third_party/WebKit/Source/modules/app_banner/AppBannerPromptResult.h
+++ b/third_party/WebKit/Source/modules/app_banner/AppBannerPromptResult.h
@@ -8,7 +8,6 @@
 #include "bindings/core/v8/ScriptWrappable.h"
 #include "public/platform/modules/app_banner/WebAppBannerPromptResult.h"
 #include "wtf/Noncopyable.h"
-#include "wtf/PassOwnPtr.h"
 #include "wtf/text/WTFString.h"
 
 namespace blink {
diff --git a/third_party/WebKit/Source/modules/audio_output_devices/AudioOutputDeviceClient.h b/third_party/WebKit/Source/modules/audio_output_devices/AudioOutputDeviceClient.h
index 616b823..7d824bd 100644
--- a/third_party/WebKit/Source/modules/audio_output_devices/AudioOutputDeviceClient.h
+++ b/third_party/WebKit/Source/modules/audio_output_devices/AudioOutputDeviceClient.h
@@ -8,7 +8,7 @@
 #include "modules/ModulesExport.h"
 #include "platform/Supplementable.h"
 #include "public/platform/WebSetSinkIdCallbacks.h"
-#include "wtf/PassOwnPtr.h"
+#include <memory>
 
 namespace blink {
 
@@ -22,7 +22,7 @@
     virtual ~AudioOutputDeviceClient() {}
 
     // Checks that a given sink exists and has permissions to be used from the origin of the current frame.
-    virtual void checkIfAudioSinkExistsAndIsAuthorized(ExecutionContext*, const WebString& sinkId, PassOwnPtr<WebSetSinkIdCallbacks>) = 0;
+    virtual void checkIfAudioSinkExistsAndIsAuthorized(ExecutionContext*, const WebString& sinkId, std::unique_ptr<WebSetSinkIdCallbacks>) = 0;
 
     // Supplement requirements.
     static AudioOutputDeviceClient* from(ExecutionContext*);
diff --git a/third_party/WebKit/Source/modules/audio_output_devices/HTMLMediaElementAudioOutputDevice.cpp b/third_party/WebKit/Source/modules/audio_output_devices/HTMLMediaElementAudioOutputDevice.cpp
index f231e65..6d94fe7 100644
--- a/third_party/WebKit/Source/modules/audio_output_devices/HTMLMediaElementAudioOutputDevice.cpp
+++ b/third_party/WebKit/Source/modules/audio_output_devices/HTMLMediaElementAudioOutputDevice.cpp
@@ -11,6 +11,8 @@
 #include "modules/audio_output_devices/AudioOutputDeviceClient.h"
 #include "modules/audio_output_devices/SetSinkIdCallbacks.h"
 #include "public/platform/WebSecurityOrigin.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
@@ -59,11 +61,11 @@
 {
     ExecutionContext* context = getExecutionContext();
     ASSERT(context && context->isDocument());
-    OwnPtr<SetSinkIdCallbacks> callbacks = adoptPtr(new SetSinkIdCallbacks(this, *m_element, m_sinkId));
+    std::unique_ptr<SetSinkIdCallbacks> callbacks = wrapUnique(new SetSinkIdCallbacks(this, *m_element, m_sinkId));
     WebMediaPlayer* webMediaPlayer = m_element->webMediaPlayer();
     if (webMediaPlayer) {
-        // Using leakPtr() to transfer ownership because |webMediaPlayer| is a platform object that takes raw pointers
-        webMediaPlayer->setSinkId(m_sinkId, WebSecurityOrigin(context->getSecurityOrigin()), callbacks.leakPtr());
+        // Using release() to transfer ownership because |webMediaPlayer| is a platform object that takes raw pointers
+        webMediaPlayer->setSinkId(m_sinkId, WebSecurityOrigin(context->getSecurityOrigin()), callbacks.release());
     } else {
         if (AudioOutputDeviceClient* client = AudioOutputDeviceClient::from(context)) {
             client->checkIfAudioSinkExistsAndIsAuthorized(context, m_sinkId, std::move(callbacks));
diff --git a/third_party/WebKit/Source/modules/background_sync/SyncCallbacks.cpp b/third_party/WebKit/Source/modules/background_sync/SyncCallbacks.cpp
index 9b6e3e7..b25dae94 100644
--- a/third_party/WebKit/Source/modules/background_sync/SyncCallbacks.cpp
+++ b/third_party/WebKit/Source/modules/background_sync/SyncCallbacks.cpp
@@ -7,8 +7,8 @@
 #include "bindings/core/v8/ScriptPromiseResolver.h"
 #include "modules/background_sync/SyncError.h"
 #include "modules/serviceworkers/ServiceWorkerRegistration.h"
-#include "wtf/OwnPtr.h"
-#include "wtf/PassOwnPtr.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
@@ -30,7 +30,7 @@
         return;
     }
 
-    OwnPtr<WebSyncRegistration> registration = adoptPtr(webSyncRegistration.release());
+    std::unique_ptr<WebSyncRegistration> registration = wrapUnique(webSyncRegistration.release());
     if (!registration) {
         m_resolver->resolve(v8::Null(m_resolver->getScriptState()->isolate()));
         return;
diff --git a/third_party/WebKit/Source/modules/background_sync/SyncError.cpp b/third_party/WebKit/Source/modules/background_sync/SyncError.cpp
index e5dfc82..4cefecf 100644
--- a/third_party/WebKit/Source/modules/background_sync/SyncError.cpp
+++ b/third_party/WebKit/Source/modules/background_sync/SyncError.cpp
@@ -6,7 +6,6 @@
 
 #include "core/dom/DOMException.h"
 #include "core/dom/ExceptionCode.h"
-#include "wtf/OwnPtr.h"
 
 namespace blink {
 
diff --git a/third_party/WebKit/Source/modules/battery/BatteryDispatcher.cpp b/third_party/WebKit/Source/modules/battery/BatteryDispatcher.cpp
index 23653f1..0483c6a 100644
--- a/third_party/WebKit/Source/modules/battery/BatteryDispatcher.cpp
+++ b/third_party/WebKit/Source/modules/battery/BatteryDispatcher.cpp
@@ -8,7 +8,6 @@
 #include "public/platform/Platform.h"
 #include "public/platform/ServiceRegistry.h"
 #include "wtf/Assertions.h"
-#include "wtf/PassOwnPtr.h"
 
 namespace blink {
 
diff --git a/third_party/WebKit/Source/modules/battery/BatteryDispatcher.h b/third_party/WebKit/Source/modules/battery/BatteryDispatcher.h
index 134b484..5bf039f 100644
--- a/third_party/WebKit/Source/modules/battery/BatteryDispatcher.h
+++ b/third_party/WebKit/Source/modules/battery/BatteryDispatcher.h
@@ -10,7 +10,6 @@
 #include "modules/ModulesExport.h"
 #include "modules/battery/BatteryManager.h"
 #include "modules/battery/battery_status.h"
-#include "wtf/OwnPtr.h"
 
 namespace blink {
 
diff --git a/third_party/WebKit/Source/modules/bluetooth/BluetoothDevice.cpp b/third_party/WebKit/Source/modules/bluetooth/BluetoothDevice.cpp
index d3a2fe6e..e717ea2d 100644
--- a/third_party/WebKit/Source/modules/bluetooth/BluetoothDevice.cpp
+++ b/third_party/WebKit/Source/modules/bluetooth/BluetoothDevice.cpp
@@ -13,10 +13,11 @@
 #include "modules/bluetooth/BluetoothRemoteGATTServer.h"
 #include "modules/bluetooth/BluetoothSupplement.h"
 #include "public/platform/modules/bluetooth/WebBluetooth.h"
+#include <memory>
 
 namespace blink {
 
-BluetoothDevice::BluetoothDevice(ExecutionContext* context, PassOwnPtr<WebBluetoothDeviceInit> webDevice)
+BluetoothDevice::BluetoothDevice(ExecutionContext* context, std::unique_ptr<WebBluetoothDeviceInit> webDevice)
     : ActiveDOMObject(context)
     , m_webDevice(std::move(webDevice))
     , m_gatt(BluetoothRemoteGATTServer::create(this))
@@ -25,7 +26,7 @@
     ThreadState::current()->registerPreFinalizer(this);
 }
 
-BluetoothDevice* BluetoothDevice::take(ScriptPromiseResolver* resolver, PassOwnPtr<WebBluetoothDeviceInit> webDevice)
+BluetoothDevice* BluetoothDevice::take(ScriptPromiseResolver* resolver, std::unique_ptr<WebBluetoothDeviceInit> webDevice)
 {
     ASSERT(webDevice);
     BluetoothDevice* device = new BluetoothDevice(resolver->getExecutionContext(), std::move(webDevice));
diff --git a/third_party/WebKit/Source/modules/bluetooth/BluetoothDevice.h b/third_party/WebKit/Source/modules/bluetooth/BluetoothDevice.h
index 6949310a..5b33bf21 100644
--- a/third_party/WebKit/Source/modules/bluetooth/BluetoothDevice.h
+++ b/third_party/WebKit/Source/modules/bluetooth/BluetoothDevice.h
@@ -12,9 +12,8 @@
 #include "platform/heap/Heap.h"
 #include "public/platform/modules/bluetooth/WebBluetoothDevice.h"
 #include "public/platform/modules/bluetooth/WebBluetoothDeviceInit.h"
-#include "wtf/OwnPtr.h"
-#include "wtf/PassOwnPtr.h"
 #include "wtf/text/WTFString.h"
+#include <memory>
 
 namespace blink {
 
@@ -36,11 +35,11 @@
     DEFINE_WRAPPERTYPEINFO();
     USING_GARBAGE_COLLECTED_MIXIN(BluetoothDevice);
 public:
-    BluetoothDevice(ExecutionContext*, PassOwnPtr<WebBluetoothDeviceInit>);
+    BluetoothDevice(ExecutionContext*, std::unique_ptr<WebBluetoothDeviceInit>);
 
     // Interface required by CallbackPromiseAdapter:
-    using WebType = OwnPtr<WebBluetoothDeviceInit>;
-    static BluetoothDevice* take(ScriptPromiseResolver*, PassOwnPtr<WebBluetoothDeviceInit>);
+    using WebType = std::unique_ptr<WebBluetoothDeviceInit>;
+    static BluetoothDevice* take(ScriptPromiseResolver*, std::unique_ptr<WebBluetoothDeviceInit>);
 
     // We should disconnect from the device in all of the following cases:
     // 1. When the object gets GarbageCollected e.g. it went out of scope.
@@ -81,7 +80,7 @@
     DEFINE_ATTRIBUTE_EVENT_LISTENER(gattserverdisconnected);
 
 private:
-    OwnPtr<WebBluetoothDeviceInit> m_webDevice;
+    std::unique_ptr<WebBluetoothDeviceInit> m_webDevice;
     Member<BluetoothRemoteGATTServer> m_gatt;
 };
 
diff --git a/third_party/WebKit/Source/modules/bluetooth/BluetoothRemoteGATTCharacteristic.cpp b/third_party/WebKit/Source/modules/bluetooth/BluetoothRemoteGATTCharacteristic.cpp
index 04b4311..91df251 100644
--- a/third_party/WebKit/Source/modules/bluetooth/BluetoothRemoteGATTCharacteristic.cpp
+++ b/third_party/WebKit/Source/modules/bluetooth/BluetoothRemoteGATTCharacteristic.cpp
@@ -16,6 +16,7 @@
 #include "modules/bluetooth/BluetoothError.h"
 #include "modules/bluetooth/BluetoothSupplement.h"
 #include "public/platform/modules/bluetooth/WebBluetooth.h"
+#include <memory>
 
 namespace blink {
 
@@ -30,7 +31,7 @@
 
 } // anonymous namespace
 
-BluetoothRemoteGATTCharacteristic::BluetoothRemoteGATTCharacteristic(ExecutionContext* context, PassOwnPtr<WebBluetoothRemoteGATTCharacteristicInit> webCharacteristic)
+BluetoothRemoteGATTCharacteristic::BluetoothRemoteGATTCharacteristic(ExecutionContext* context, std::unique_ptr<WebBluetoothRemoteGATTCharacteristicInit> webCharacteristic)
     : ActiveDOMObject(context)
     , m_webCharacteristic(std::move(webCharacteristic))
     , m_stopped(false)
@@ -40,7 +41,7 @@
     ThreadState::current()->registerPreFinalizer(this);
 }
 
-BluetoothRemoteGATTCharacteristic* BluetoothRemoteGATTCharacteristic::take(ScriptPromiseResolver* resolver, PassOwnPtr<WebBluetoothRemoteGATTCharacteristicInit> webCharacteristic)
+BluetoothRemoteGATTCharacteristic* BluetoothRemoteGATTCharacteristic::take(ScriptPromiseResolver* resolver, std::unique_ptr<WebBluetoothRemoteGATTCharacteristicInit> webCharacteristic)
 {
     if (!webCharacteristic) {
         return nullptr;
diff --git a/third_party/WebKit/Source/modules/bluetooth/BluetoothRemoteGATTCharacteristic.h b/third_party/WebKit/Source/modules/bluetooth/BluetoothRemoteGATTCharacteristic.h
index efcc800..3079ec2 100644
--- a/third_party/WebKit/Source/modules/bluetooth/BluetoothRemoteGATTCharacteristic.h
+++ b/third_party/WebKit/Source/modules/bluetooth/BluetoothRemoteGATTCharacteristic.h
@@ -13,9 +13,8 @@
 #include "platform/heap/Handle.h"
 #include "public/platform/modules/bluetooth/WebBluetoothRemoteGATTCharacteristic.h"
 #include "public/platform/modules/bluetooth/WebBluetoothRemoteGATTCharacteristicInit.h"
-#include "wtf/OwnPtr.h"
-#include "wtf/PassOwnPtr.h"
 #include "wtf/text/WTFString.h"
+#include <memory>
 
 namespace blink {
 
@@ -41,11 +40,11 @@
     DEFINE_WRAPPERTYPEINFO();
     USING_GARBAGE_COLLECTED_MIXIN(BluetoothRemoteGATTCharacteristic);
 public:
-    explicit BluetoothRemoteGATTCharacteristic(ExecutionContext*, PassOwnPtr<WebBluetoothRemoteGATTCharacteristicInit>);
+    explicit BluetoothRemoteGATTCharacteristic(ExecutionContext*, std::unique_ptr<WebBluetoothRemoteGATTCharacteristicInit>);
 
     // Interface required by CallbackPromiseAdapter.
-    using WebType = OwnPtr<WebBluetoothRemoteGATTCharacteristicInit>;
-    static BluetoothRemoteGATTCharacteristic* take(ScriptPromiseResolver*, PassOwnPtr<WebBluetoothRemoteGATTCharacteristicInit>);
+    using WebType = std::unique_ptr<WebBluetoothRemoteGATTCharacteristicInit>;
+    static BluetoothRemoteGATTCharacteristic* take(ScriptPromiseResolver*, std::unique_ptr<WebBluetoothRemoteGATTCharacteristicInit>);
 
     // Save value.
     void setValue(DOMDataView*);
@@ -88,7 +87,7 @@
     void addedEventListener(const AtomicString& eventType, RegisteredEventListener&) override;
 
 private:
-    OwnPtr<WebBluetoothRemoteGATTCharacteristicInit> m_webCharacteristic;
+    std::unique_ptr<WebBluetoothRemoteGATTCharacteristicInit> m_webCharacteristic;
     bool m_stopped;
     Member<BluetoothCharacteristicProperties> m_properties;
     Member<DOMDataView> m_value;
diff --git a/third_party/WebKit/Source/modules/bluetooth/BluetoothRemoteGATTServer.cpp b/third_party/WebKit/Source/modules/bluetooth/BluetoothRemoteGATTServer.cpp
index a57e6e1..8b134e79 100644
--- a/third_party/WebKit/Source/modules/bluetooth/BluetoothRemoteGATTServer.cpp
+++ b/third_party/WebKit/Source/modules/bluetooth/BluetoothRemoteGATTServer.cpp
@@ -15,7 +15,6 @@
 #include "modules/bluetooth/BluetoothSupplement.h"
 #include "modules/bluetooth/BluetoothUUID.h"
 #include "public/platform/modules/bluetooth/WebBluetooth.h"
-#include "wtf/OwnPtr.h"
 
 namespace blink {
 
@@ -97,14 +96,14 @@
 
         if (m_quantity == mojom::WebBluetoothGATTQueryQuantity::SINGLE) {
             DCHECK_EQ(1u, webServices.size());
-            m_resolver->resolve(BluetoothRemoteGATTService::take(m_resolver, adoptPtr(webServices[0])));
+            m_resolver->resolve(BluetoothRemoteGATTService::take(m_resolver, wrapUnique(webServices[0])));
             return;
         }
 
         HeapVector<Member<BluetoothRemoteGATTService>> services;
         services.reserveInitialCapacity(webServices.size());
         for (WebBluetoothRemoteGATTService* webService : webServices) {
-            services.append(BluetoothRemoteGATTService::take(m_resolver, adoptPtr(webService)));
+            services.append(BluetoothRemoteGATTService::take(m_resolver, wrapUnique(webService)));
         }
         m_resolver->resolve(services);
     }
diff --git a/third_party/WebKit/Source/modules/bluetooth/BluetoothRemoteGATTServer.h b/third_party/WebKit/Source/modules/bluetooth/BluetoothRemoteGATTServer.h
index 657eadb..b29f68b 100644
--- a/third_party/WebKit/Source/modules/bluetooth/BluetoothRemoteGATTServer.h
+++ b/third_party/WebKit/Source/modules/bluetooth/BluetoothRemoteGATTServer.h
@@ -10,8 +10,6 @@
 #include "modules/bluetooth/BluetoothDevice.h"
 #include "platform/heap/Heap.h"
 #include "public/platform/modules/bluetooth/WebBluetoothError.h"
-#include "wtf/OwnPtr.h"
-#include "wtf/PassOwnPtr.h"
 #include "wtf/text/WTFString.h"
 
 namespace blink {
diff --git a/third_party/WebKit/Source/modules/bluetooth/BluetoothRemoteGATTService.cpp b/third_party/WebKit/Source/modules/bluetooth/BluetoothRemoteGATTService.cpp
index 250e55cf..4147769b 100644
--- a/third_party/WebKit/Source/modules/bluetooth/BluetoothRemoteGATTService.cpp
+++ b/third_party/WebKit/Source/modules/bluetooth/BluetoothRemoteGATTService.cpp
@@ -15,15 +15,17 @@
 #include "modules/bluetooth/BluetoothSupplement.h"
 #include "modules/bluetooth/BluetoothUUID.h"
 #include "public/platform/modules/bluetooth/WebBluetooth.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
-BluetoothRemoteGATTService::BluetoothRemoteGATTService(PassOwnPtr<WebBluetoothRemoteGATTService> webService)
+BluetoothRemoteGATTService::BluetoothRemoteGATTService(std::unique_ptr<WebBluetoothRemoteGATTService> webService)
     : m_webService(std::move(webService))
 {
 }
 
-BluetoothRemoteGATTService* BluetoothRemoteGATTService::take(ScriptPromiseResolver*, PassOwnPtr<WebBluetoothRemoteGATTService> webService)
+BluetoothRemoteGATTService* BluetoothRemoteGATTService::take(ScriptPromiseResolver*, std::unique_ptr<WebBluetoothRemoteGATTService> webService)
 {
     if (!webService) {
         return nullptr;
@@ -46,14 +48,14 @@
 
         if (m_quantity == mojom::WebBluetoothGATTQueryQuantity::SINGLE) {
             DCHECK_EQ(1u, webCharacteristics.size());
-            m_resolver->resolve(BluetoothRemoteGATTCharacteristic::take(m_resolver, adoptPtr(webCharacteristics[0])));
+            m_resolver->resolve(BluetoothRemoteGATTCharacteristic::take(m_resolver, wrapUnique(webCharacteristics[0])));
             return;
         }
 
         HeapVector<Member<BluetoothRemoteGATTCharacteristic>> characteristics;
         characteristics.reserveInitialCapacity(webCharacteristics.size());
         for (WebBluetoothRemoteGATTCharacteristicInit* webCharacteristic : webCharacteristics) {
-            characteristics.append(BluetoothRemoteGATTCharacteristic::take(m_resolver, adoptPtr(webCharacteristic)));
+            characteristics.append(BluetoothRemoteGATTCharacteristic::take(m_resolver, wrapUnique(webCharacteristic)));
         }
         m_resolver->resolve(characteristics);
     }
@@ -71,13 +73,6 @@
 
 ScriptPromise BluetoothRemoteGATTService::getCharacteristic(ScriptState* scriptState, const StringOrUnsignedLong& characteristic, ExceptionState& exceptionState)
 {
-#if OS(MACOSX)
-    // TODO(jlebel): Remove when getCharacteristic is implemented.
-    return ScriptPromise::rejectWithDOMException(scriptState,
-        DOMException::create(NotSupportedError,
-            "getCharacteristic is not implemented yet. See https://goo.gl/J6ASzs"));
-#endif // OS(MACOSX)
-
     String characteristicUUID = BluetoothUUID::getCharacteristic(characteristic, exceptionState);
     if (exceptionState.hadException())
         return exceptionState.reject(scriptState);
@@ -101,13 +96,6 @@
 
 ScriptPromise BluetoothRemoteGATTService::getCharacteristicsImpl(ScriptState* scriptState, mojom::WebBluetoothGATTQueryQuantity quantity, String characteristicsUUID)
 {
-#if OS(MACOSX)
-    // TODO(jlebel): Remove when getCharacteristics is implemented.
-    return ScriptPromise::rejectWithDOMException(scriptState,
-        DOMException::create(NotSupportedError,
-            "getCharacteristics is not implemented yet. See https://goo.gl/J6ASzs"));
-#endif // OS(MACOSX)
-
     ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState);
     ScriptPromise promise = resolver->promise();
 
diff --git a/third_party/WebKit/Source/modules/bluetooth/BluetoothRemoteGATTService.h b/third_party/WebKit/Source/modules/bluetooth/BluetoothRemoteGATTService.h
index 107c2ec..1f647c1 100644
--- a/third_party/WebKit/Source/modules/bluetooth/BluetoothRemoteGATTService.h
+++ b/third_party/WebKit/Source/modules/bluetooth/BluetoothRemoteGATTService.h
@@ -10,9 +10,8 @@
 #include "platform/heap/Handle.h"
 #include "public/platform/modules/bluetooth/WebBluetoothRemoteGATTService.h"
 #include "public/platform/modules/bluetooth/web_bluetooth.mojom.h"
-#include "wtf/OwnPtr.h"
-#include "wtf/PassOwnPtr.h"
 #include "wtf/text/WTFString.h"
+#include <memory>
 
 namespace blink {
 
@@ -33,11 +32,11 @@
     , public ScriptWrappable {
     DEFINE_WRAPPERTYPEINFO();
 public:
-    explicit BluetoothRemoteGATTService(PassOwnPtr<WebBluetoothRemoteGATTService>);
+    explicit BluetoothRemoteGATTService(std::unique_ptr<WebBluetoothRemoteGATTService>);
 
     // Interface required by CallbackPromiseAdapter:
-    using WebType = OwnPtr<WebBluetoothRemoteGATTService>;
-    static BluetoothRemoteGATTService* take(ScriptPromiseResolver*, PassOwnPtr<WebBluetoothRemoteGATTService>);
+    using WebType = std::unique_ptr<WebBluetoothRemoteGATTService>;
+    static BluetoothRemoteGATTService* take(ScriptPromiseResolver*, std::unique_ptr<WebBluetoothRemoteGATTService>);
 
     // Interface required by garbage collection.
     DEFINE_INLINE_TRACE() { }
@@ -52,7 +51,7 @@
 private:
     ScriptPromise getCharacteristicsImpl(ScriptState*, mojom::WebBluetoothGATTQueryQuantity, String characteristicUUID = String());
 
-    OwnPtr<WebBluetoothRemoteGATTService> m_webService;
+    std::unique_ptr<WebBluetoothRemoteGATTService> m_webService;
 };
 
 } // namespace blink
diff --git a/third_party/WebKit/Source/modules/cachestorage/Cache.cpp b/third_party/WebKit/Source/modules/cachestorage/Cache.cpp
index 29bd687..3a3787ef 100644
--- a/third_party/WebKit/Source/modules/cachestorage/Cache.cpp
+++ b/third_party/WebKit/Source/modules/cachestorage/Cache.cpp
@@ -23,7 +23,6 @@
 #include "platform/Histogram.h"
 #include "platform/RuntimeEnabledFeatures.h"
 #include "public/platform/modules/serviceworker/WebServiceWorkerCache.h"
-
 #include <memory>
 
 namespace blink {
@@ -360,7 +359,7 @@
     WebServiceWorkerResponse m_webResponse;
 };
 
-Cache* Cache::create(GlobalFetch::ScopedFetcher* fetcher, PassOwnPtr<WebServiceWorkerCache> webCache)
+Cache* Cache::create(GlobalFetch::ScopedFetcher* fetcher, std::unique_ptr<WebServiceWorkerCache> webCache)
 {
     return new Cache(fetcher, std::move(webCache));
 }
@@ -472,7 +471,7 @@
     return webQueryParams;
 }
 
-Cache::Cache(GlobalFetch::ScopedFetcher* fetcher, PassOwnPtr<WebServiceWorkerCache> webCache)
+Cache::Cache(GlobalFetch::ScopedFetcher* fetcher, std::unique_ptr<WebServiceWorkerCache> webCache)
     : m_scopedFetcher(fetcher)
     , m_webCache(std::move(webCache))
 {
diff --git a/third_party/WebKit/Source/modules/cachestorage/Cache.h b/third_party/WebKit/Source/modules/cachestorage/Cache.h
index 3ae67a6..8357fe99 100644
--- a/third_party/WebKit/Source/modules/cachestorage/Cache.h
+++ b/third_party/WebKit/Source/modules/cachestorage/Cache.h
@@ -14,9 +14,9 @@
 #include "public/platform/modules/serviceworker/WebServiceWorkerCacheError.h"
 #include "wtf/Forward.h"
 #include "wtf/Noncopyable.h"
-#include "wtf/OwnPtr.h"
 #include "wtf/Vector.h"
 #include "wtf/text/WTFString.h"
+#include <memory>
 
 namespace blink {
 
@@ -31,7 +31,7 @@
     DEFINE_WRAPPERTYPEINFO();
     WTF_MAKE_NONCOPYABLE(Cache);
 public:
-    static Cache* create(GlobalFetch::ScopedFetcher*, PassOwnPtr<WebServiceWorkerCache>);
+    static Cache* create(GlobalFetch::ScopedFetcher*, std::unique_ptr<WebServiceWorkerCache>);
 
     // From Cache.idl:
     ScriptPromise match(ScriptState*, const RequestInfo&, const CacheQueryOptions&, ExceptionState&);
@@ -53,7 +53,7 @@
     class BlobHandleCallbackForPut;
     class FetchResolvedForAdd;
     friend class FetchResolvedForAdd;
-    Cache(GlobalFetch::ScopedFetcher*, PassOwnPtr<WebServiceWorkerCache>);
+    Cache(GlobalFetch::ScopedFetcher*, std::unique_ptr<WebServiceWorkerCache>);
 
     ScriptPromise matchImpl(ScriptState*, const Request*, const CacheQueryOptions&);
     ScriptPromise matchAllImpl(ScriptState*);
@@ -67,7 +67,7 @@
     WebServiceWorkerCache* webCache() const;
 
     Member<GlobalFetch::ScopedFetcher> m_scopedFetcher;
-    OwnPtr<WebServiceWorkerCache> m_webCache;
+    std::unique_ptr<WebServiceWorkerCache> m_webCache;
 };
 
 } // namespace blink
diff --git a/third_party/WebKit/Source/modules/cachestorage/CacheStorage.cpp b/third_party/WebKit/Source/modules/cachestorage/CacheStorage.cpp
index f6152032..057bd46cc 100644
--- a/third_party/WebKit/Source/modules/cachestorage/CacheStorage.cpp
+++ b/third_party/WebKit/Source/modules/cachestorage/CacheStorage.cpp
@@ -15,6 +15,8 @@
 #include "platform/RuntimeEnabledFeatures.h"
 #include "public/platform/modules/serviceworker/WebServiceWorkerCacheError.h"
 #include "public/platform/modules/serviceworker/WebServiceWorkerCacheStorage.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
@@ -95,7 +97,7 @@
     {
         if (!m_resolver->getExecutionContext() || m_resolver->getExecutionContext()->activeDOMObjectsAreStopped())
             return;
-        Cache* cache = Cache::create(m_cacheStorage->m_scopedFetcher, adoptPtr(webCache.release()));
+        Cache* cache = Cache::create(m_cacheStorage->m_scopedFetcher, wrapUnique(webCache.release()));
         m_cacheStorage->m_nameToCacheMap.set(m_cacheName, cache);
         m_resolver->resolve(cache);
         m_resolver.clear();
@@ -216,7 +218,7 @@
 
 CacheStorage* CacheStorage::create(GlobalFetch::ScopedFetcher* fetcher, WebServiceWorkerCacheStorage* webCacheStorage)
 {
-    return new CacheStorage(fetcher, adoptPtr(webCacheStorage));
+    return new CacheStorage(fetcher, wrapUnique(webCacheStorage));
 }
 
 ScriptPromise CacheStorage::open(ScriptState* scriptState, const String& cacheName, ExceptionState& exceptionState)
@@ -325,7 +327,7 @@
     return promise;
 }
 
-CacheStorage::CacheStorage(GlobalFetch::ScopedFetcher* fetcher, PassOwnPtr<WebServiceWorkerCacheStorage> webCacheStorage)
+CacheStorage::CacheStorage(GlobalFetch::ScopedFetcher* fetcher, std::unique_ptr<WebServiceWorkerCacheStorage> webCacheStorage)
     : m_scopedFetcher(fetcher)
     , m_webCacheStorage(std::move(webCacheStorage))
 {
diff --git a/third_party/WebKit/Source/modules/cachestorage/CacheStorage.h b/third_party/WebKit/Source/modules/cachestorage/CacheStorage.h
index 29a4721..9a0d149d 100644
--- a/third_party/WebKit/Source/modules/cachestorage/CacheStorage.h
+++ b/third_party/WebKit/Source/modules/cachestorage/CacheStorage.h
@@ -15,6 +15,7 @@
 #include "wtf/Forward.h"
 #include "wtf/HashMap.h"
 #include "wtf/Noncopyable.h"
+#include <memory>
 
 namespace blink {
 
@@ -47,11 +48,11 @@
     friend class WithCacheCallbacks;
     friend class DeleteCallbacks;
 
-    CacheStorage(GlobalFetch::ScopedFetcher*, PassOwnPtr<WebServiceWorkerCacheStorage>);
+    CacheStorage(GlobalFetch::ScopedFetcher*, std::unique_ptr<WebServiceWorkerCacheStorage>);
     ScriptPromise matchImpl(ScriptState*, const Request*, const CacheQueryOptions&);
 
     Member<GlobalFetch::ScopedFetcher> m_scopedFetcher;
-    OwnPtr<WebServiceWorkerCacheStorage> m_webCacheStorage;
+    std::unique_ptr<WebServiceWorkerCacheStorage> m_webCacheStorage;
     HeapHashMap<String, Member<Cache>> m_nameToCacheMap;
 };
 
diff --git a/third_party/WebKit/Source/modules/cachestorage/CacheTest.cpp b/third_party/WebKit/Source/modules/cachestorage/CacheTest.cpp
index d2f723b2..0d39207 100644
--- a/third_party/WebKit/Source/modules/cachestorage/CacheTest.cpp
+++ b/third_party/WebKit/Source/modules/cachestorage/CacheTest.cpp
@@ -24,9 +24,9 @@
 #include "public/platform/WebURLResponse.h"
 #include "public/platform/modules/serviceworker/WebServiceWorkerCache.h"
 #include "testing/gtest/include/gtest/gtest.h"
-#include "wtf/OwnPtr.h"
-
+#include "wtf/PtrUtil.h"
 #include <algorithm>
+#include <memory>
 #include <string>
 
 namespace blink {
@@ -117,7 +117,7 @@
         checkUrlIfProvided(webRequest.url());
         checkQueryParamsIfProvided(queryParams);
 
-        OwnPtr<CacheMatchCallbacks> ownedCallbacks(adoptPtr(callbacks));
+        std::unique_ptr<CacheMatchCallbacks> ownedCallbacks(wrapUnique(callbacks));
         return callbacks->onError(m_error);
     }
 
@@ -127,7 +127,7 @@
         checkUrlIfProvided(webRequest.url());
         checkQueryParamsIfProvided(queryParams);
 
-        OwnPtr<CacheWithResponsesCallbacks> ownedCallbacks(adoptPtr(callbacks));
+        std::unique_ptr<CacheWithResponsesCallbacks> ownedCallbacks(wrapUnique(callbacks));
         return callbacks->onError(m_error);
     }
 
@@ -139,7 +139,7 @@
             checkQueryParamsIfProvided(queryParams);
         }
 
-        OwnPtr<CacheWithRequestsCallbacks> ownedCallbacks(adoptPtr(callbacks));
+        std::unique_ptr<CacheWithRequestsCallbacks> ownedCallbacks(wrapUnique(callbacks));
         return callbacks->onError(m_error);
     }
 
@@ -148,7 +148,7 @@
         m_lastErrorWebCacheMethodCalled = "dispatchBatch";
         checkBatchOperationsIfProvided(batchOperations);
 
-        OwnPtr<CacheBatchCallbacks> ownedCallbacks(adoptPtr(callbacks));
+        std::unique_ptr<CacheBatchCallbacks> ownedCallbacks(wrapUnique(callbacks));
         return callbacks->onError(m_error);
     }
 
@@ -213,7 +213,7 @@
 
     Cache* createCache(ScopedFetcherForTests* fetcher, WebServiceWorkerCache* webCache)
     {
-        return Cache::create(fetcher, adoptPtr(webCache));
+        return Cache::create(fetcher, wrapUnique(webCache));
     }
 
     ScriptState* getScriptState() { return ScriptState::forMainWorld(m_page->document().frame()); }
@@ -306,7 +306,7 @@
     };
 
     // Lifetime is that of the text fixture.
-    OwnPtr<DummyPageHolder> m_page;
+    std::unique_ptr<DummyPageHolder> m_page;
 
     NonThrowableExceptionState m_exceptionState;
 };
@@ -479,7 +479,7 @@
     // From WebServiceWorkerCache:
     void dispatchMatch(CacheMatchCallbacks* callbacks, const WebServiceWorkerRequest& webRequest, const QueryParams& queryParams) override
     {
-        OwnPtr<CacheMatchCallbacks> ownedCallbacks(adoptPtr(callbacks));
+        std::unique_ptr<CacheMatchCallbacks> ownedCallbacks(wrapUnique(callbacks));
         return callbacks->onSuccess(m_response);
     }
 
@@ -515,7 +515,7 @@
 
     void dispatchKeys(CacheWithRequestsCallbacks* callbacks, const WebServiceWorkerRequest* webRequest, const QueryParams& queryParams) override
     {
-        OwnPtr<CacheWithRequestsCallbacks> ownedCallbacks(adoptPtr(callbacks));
+        std::unique_ptr<CacheWithRequestsCallbacks> ownedCallbacks(wrapUnique(callbacks));
         return callbacks->onSuccess(m_requests);
     }
 
@@ -560,13 +560,13 @@
 
     void dispatchMatchAll(CacheWithResponsesCallbacks* callbacks, const WebServiceWorkerRequest& webRequest, const QueryParams& queryParams) override
     {
-        OwnPtr<CacheWithResponsesCallbacks> ownedCallbacks(adoptPtr(callbacks));
+        std::unique_ptr<CacheWithResponsesCallbacks> ownedCallbacks(wrapUnique(callbacks));
         return callbacks->onSuccess(m_responses);
     }
 
     void dispatchBatch(CacheBatchCallbacks* callbacks, const WebVector<BatchOperation>& batchOperations) override
     {
-        OwnPtr<CacheBatchCallbacks> ownedCallbacks(adoptPtr(callbacks));
+        std::unique_ptr<CacheBatchCallbacks> ownedCallbacks(wrapUnique(callbacks));
         return callbacks->onSuccess();
     }
 
diff --git a/third_party/WebKit/Source/modules/cachestorage/InspectorCacheStorageAgent.cpp b/third_party/WebKit/Source/modules/cachestorage/InspectorCacheStorageAgent.cpp
index ab8ea03..a509375 100644
--- a/third_party/WebKit/Source/modules/cachestorage/InspectorCacheStorageAgent.cpp
+++ b/third_party/WebKit/Source/modules/cachestorage/InspectorCacheStorageAgent.cpp
@@ -20,13 +20,12 @@
 #include "public/platform/modules/serviceworker/WebServiceWorkerRequest.h"
 #include "public/platform/modules/serviceworker/WebServiceWorkerResponse.h"
 #include "wtf/Noncopyable.h"
-#include "wtf/OwnPtr.h"
 #include "wtf/PassRefPtr.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/RefCounted.h"
 #include "wtf/RefPtr.h"
 #include "wtf/Vector.h"
 #include "wtf/text/StringBuilder.h"
-
 #include <algorithm>
 #include <memory>
 
@@ -64,7 +63,7 @@
     return true;
 }
 
-PassOwnPtr<WebServiceWorkerCacheStorage> assertCacheStorage(ErrorString* errorString, const String& securityOrigin)
+std::unique_ptr<WebServiceWorkerCacheStorage> assertCacheStorage(ErrorString* errorString, const String& securityOrigin)
 {
     RefPtr<SecurityOrigin> secOrigin = SecurityOrigin::createFromString(securityOrigin);
 
@@ -74,13 +73,13 @@
         return nullptr;
     }
 
-    OwnPtr<WebServiceWorkerCacheStorage> cache = adoptPtr(Platform::current()->cacheStorage(WebSecurityOrigin(secOrigin)));
+    std::unique_ptr<WebServiceWorkerCacheStorage> cache = wrapUnique(Platform::current()->cacheStorage(WebSecurityOrigin(secOrigin)));
     if (!cache)
         *errorString = "Could not find cache storage.";
     return cache;
 }
 
-PassOwnPtr<WebServiceWorkerCacheStorage> assertCacheStorageAndNameForId(ErrorString* errorString, const String& cacheId, String* cacheName)
+std::unique_ptr<WebServiceWorkerCacheStorage> assertCacheStorageAndNameForId(ErrorString* errorString, const String& cacheId, String* cacheName)
 {
     String securityOrigin;
     if (!parseCacheId(errorString, cacheId, &securityOrigin, cacheName)) {
@@ -249,7 +248,7 @@
     WTF_MAKE_NONCOPYABLE(GetCacheKeysForRequestData);
 
 public:
-    GetCacheKeysForRequestData(const DataRequestParams& params, PassOwnPtr<WebServiceWorkerCache> cache, std::unique_ptr<RequestEntriesCallback> callback)
+    GetCacheKeysForRequestData(const DataRequestParams& params, std::unique_ptr<WebServiceWorkerCache> cache, std::unique_ptr<RequestEntriesCallback> callback)
         : m_params(params)
         , m_cache(std::move(cache))
         , m_callback(std::move(callback))
@@ -281,7 +280,7 @@
 
 private:
     DataRequestParams m_params;
-    OwnPtr<WebServiceWorkerCache> m_cache;
+    std::unique_ptr<WebServiceWorkerCache> m_cache;
     std::unique_ptr<RequestEntriesCallback> m_callback;
 };
 
@@ -299,7 +298,7 @@
 
     void onSuccess(std::unique_ptr<WebServiceWorkerCache> cache) override
     {
-        auto* cacheRequest = new GetCacheKeysForRequestData(m_params, adoptPtr(cache.release()), std::move(m_callback));
+        auto* cacheRequest = new GetCacheKeysForRequestData(m_params, wrapUnique(cache.release()), std::move(m_callback));
         cacheRequest->cache()->dispatchKeys(cacheRequest, nullptr, WebServiceWorkerCache::QueryParams());
     }
 
@@ -418,7 +417,7 @@
         return;
     }
 
-    OwnPtr<WebServiceWorkerCacheStorage> cache = assertCacheStorage(errorString, securityOrigin);
+    std::unique_ptr<WebServiceWorkerCacheStorage> cache = assertCacheStorage(errorString, securityOrigin);
     if (!cache) {
         callback->sendFailure(*errorString);
         return;
@@ -429,7 +428,7 @@
 void InspectorCacheStorageAgent::requestEntries(ErrorString* errorString, const String& cacheId, int skipCount, int pageSize, std::unique_ptr<RequestEntriesCallback> callback)
 {
     String cacheName;
-    OwnPtr<WebServiceWorkerCacheStorage> cache = assertCacheStorageAndNameForId(errorString, cacheId, &cacheName);
+    std::unique_ptr<WebServiceWorkerCacheStorage> cache = assertCacheStorageAndNameForId(errorString, cacheId, &cacheName);
     if (!cache) {
         callback->sendFailure(*errorString);
         return;
@@ -444,7 +443,7 @@
 void InspectorCacheStorageAgent::deleteCache(ErrorString* errorString, const String& cacheId, std::unique_ptr<DeleteCacheCallback> callback)
 {
     String cacheName;
-    OwnPtr<WebServiceWorkerCacheStorage> cache = assertCacheStorageAndNameForId(errorString, cacheId, &cacheName);
+    std::unique_ptr<WebServiceWorkerCacheStorage> cache = assertCacheStorageAndNameForId(errorString, cacheId, &cacheName);
     if (!cache) {
         callback->sendFailure(*errorString);
         return;
@@ -455,7 +454,7 @@
 void InspectorCacheStorageAgent::deleteEntry(ErrorString* errorString, const String& cacheId, const String& request, std::unique_ptr<DeleteEntryCallback> callback)
 {
     String cacheName;
-    OwnPtr<WebServiceWorkerCacheStorage> cache = assertCacheStorageAndNameForId(errorString, cacheId, &cacheName);
+    std::unique_ptr<WebServiceWorkerCacheStorage> cache = assertCacheStorageAndNameForId(errorString, cacheId, &cacheName);
     if (!cache) {
         callback->sendFailure(*errorString);
         return;
diff --git a/third_party/WebKit/Source/modules/cachestorage/InspectorCacheStorageAgent.h b/third_party/WebKit/Source/modules/cachestorage/InspectorCacheStorageAgent.h
index 7b16352..868a0b0 100644
--- a/third_party/WebKit/Source/modules/cachestorage/InspectorCacheStorageAgent.h
+++ b/third_party/WebKit/Source/modules/cachestorage/InspectorCacheStorageAgent.h
@@ -8,7 +8,6 @@
 #include "core/inspector/InspectorBaseAgent.h"
 #include "core/inspector/protocol/CacheStorage.h"
 #include "modules/ModulesExport.h"
-#include "wtf/PassOwnPtr.h"
 #include "wtf/text/WTFString.h"
 
 namespace blink {
diff --git a/third_party/WebKit/Source/modules/canvas/HTMLCanvasElementModuleTest.cpp b/third_party/WebKit/Source/modules/canvas/HTMLCanvasElementModuleTest.cpp
index 7ddd64cf..9ed184d 100644
--- a/third_party/WebKit/Source/modules/canvas/HTMLCanvasElementModuleTest.cpp
+++ b/third_party/WebKit/Source/modules/canvas/HTMLCanvasElementModuleTest.cpp
@@ -12,6 +12,7 @@
 #include "core/offscreencanvas/OffscreenCanvas.h"
 #include "core/testing/DummyPageHolder.h"
 #include "testing/gtest/include/gtest/gtest.h"
+#include <memory>
 
 namespace blink {
 
@@ -21,7 +22,7 @@
     {
         Page::PageClients pageClients;
         fillWithEmptyClients(pageClients);
-        OwnPtr<DummyPageHolder> m_dummyPageHolder = DummyPageHolder::create(IntSize(800, 600), &pageClients);
+        std::unique_ptr<DummyPageHolder> m_dummyPageHolder = DummyPageHolder::create(IntSize(800, 600), &pageClients);
         Persistent<HTMLDocument> m_document = toHTMLDocument(&m_dummyPageHolder->document());
         m_document->documentElement()->setInnerHTML("<body><canvas id='c'></canvas></body>", ASSERT_NO_EXCEPTION);
         m_document->view()->updateAllLifecyclePhases();
diff --git a/third_party/WebKit/Source/modules/canvas2d/CanvasRenderingContext2D.cpp b/third_party/WebKit/Source/modules/canvas2d/CanvasRenderingContext2D.cpp
index cab800506..ba8009b 100644
--- a/third_party/WebKit/Source/modules/canvas2d/CanvasRenderingContext2D.cpp
+++ b/third_party/WebKit/Source/modules/canvas2d/CanvasRenderingContext2D.cpp
@@ -62,7 +62,6 @@
 #include "third_party/skia/include/core/SkCanvas.h"
 #include "third_party/skia/include/core/SkImageFilter.h"
 #include "wtf/MathExtras.h"
-#include "wtf/OwnPtr.h"
 #include "wtf/text/StringBuilder.h"
 #include "wtf/typed_arrays/ArrayBufferContents.h"
 
diff --git a/third_party/WebKit/Source/modules/canvas2d/CanvasRenderingContext2DAPITest.cpp b/third_party/WebKit/Source/modules/canvas2d/CanvasRenderingContext2DAPITest.cpp
index a45f82dd6..81889c2ac 100644
--- a/third_party/WebKit/Source/modules/canvas2d/CanvasRenderingContext2DAPITest.cpp
+++ b/third_party/WebKit/Source/modules/canvas2d/CanvasRenderingContext2DAPITest.cpp
@@ -20,6 +20,7 @@
 #include "platform/graphics/UnacceleratedImageBufferSurface.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
+#include <memory>
 
 using ::testing::Mock;
 
@@ -38,7 +39,7 @@
     void createContext(OpacityMode);
 
 private:
-    OwnPtr<DummyPageHolder> m_dummyPageHolder;
+    std::unique_ptr<DummyPageHolder> m_dummyPageHolder;
     Persistent<HTMLDocument> m_document;
     Persistent<HTMLCanvasElement> m_canvasElement;
 
diff --git a/third_party/WebKit/Source/modules/canvas2d/CanvasRenderingContext2DState.cpp b/third_party/WebKit/Source/modules/canvas2d/CanvasRenderingContext2DState.cpp
index d0f57780..cff1f1b0 100644
--- a/third_party/WebKit/Source/modules/canvas2d/CanvasRenderingContext2DState.cpp
+++ b/third_party/WebKit/Source/modules/canvas2d/CanvasRenderingContext2DState.cpp
@@ -22,6 +22,7 @@
 #include "platform/graphics/skia/SkiaUtils.h"
 #include "third_party/skia/include/effects/SkDashPathEffect.h"
 #include "third_party/skia/include/effects/SkDropShadowImageFilter.h"
+#include <memory>
 
 static const char defaultFont[] = "10px sans-serif";
 static const char defaultFilter[] = "none";
@@ -351,7 +352,7 @@
 SkDrawLooper* CanvasRenderingContext2DState::emptyDrawLooper() const
 {
     if (!m_emptyDrawLooper) {
-        OwnPtr<DrawLooperBuilder> drawLooperBuilder = DrawLooperBuilder::create();
+        std::unique_ptr<DrawLooperBuilder> drawLooperBuilder = DrawLooperBuilder::create();
         m_emptyDrawLooper = drawLooperBuilder->detachDrawLooper();
     }
     return m_emptyDrawLooper.get();
@@ -360,7 +361,7 @@
 SkDrawLooper* CanvasRenderingContext2DState::shadowOnlyDrawLooper() const
 {
     if (!m_shadowOnlyDrawLooper) {
-        OwnPtr<DrawLooperBuilder> drawLooperBuilder = DrawLooperBuilder::create();
+        std::unique_ptr<DrawLooperBuilder> drawLooperBuilder = DrawLooperBuilder::create();
         drawLooperBuilder->addShadow(m_shadowOffset, m_shadowBlur, m_shadowColor, DrawLooperBuilder::ShadowIgnoresTransforms, DrawLooperBuilder::ShadowRespectsAlpha);
         m_shadowOnlyDrawLooper = drawLooperBuilder->detachDrawLooper();
     }
@@ -370,7 +371,7 @@
 SkDrawLooper* CanvasRenderingContext2DState::shadowAndForegroundDrawLooper() const
 {
     if (!m_shadowAndForegroundDrawLooper) {
-        OwnPtr<DrawLooperBuilder> drawLooperBuilder = DrawLooperBuilder::create();
+        std::unique_ptr<DrawLooperBuilder> drawLooperBuilder = DrawLooperBuilder::create();
         drawLooperBuilder->addShadow(m_shadowOffset, m_shadowBlur, m_shadowColor, DrawLooperBuilder::ShadowIgnoresTransforms, DrawLooperBuilder::ShadowRespectsAlpha);
         drawLooperBuilder->addUnmodifiedContent();
         m_shadowAndForegroundDrawLooper = drawLooperBuilder->detachDrawLooper();
diff --git a/third_party/WebKit/Source/modules/canvas2d/CanvasRenderingContext2DTest.cpp b/third_party/WebKit/Source/modules/canvas2d/CanvasRenderingContext2DTest.cpp
index dd38e5a4..a33dbaf 100644
--- a/third_party/WebKit/Source/modules/canvas2d/CanvasRenderingContext2DTest.cpp
+++ b/third_party/WebKit/Source/modules/canvas2d/CanvasRenderingContext2DTest.cpp
@@ -23,6 +23,8 @@
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "third_party/skia/include/core/SkSurface.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 using ::testing::Mock;
 
@@ -88,7 +90,7 @@
     void unrefCanvas();
 
 private:
-    OwnPtr<DummyPageHolder> m_dummyPageHolder;
+    std::unique_ptr<DummyPageHolder> m_dummyPageHolder;
     Persistent<HTMLDocument> m_document;
     Persistent<HTMLCanvasElement> m_canvasElement;
     Persistent<MemoryCache> m_globalMemoryCache;
@@ -209,7 +211,7 @@
 //============================================================================
 
 #define TEST_OVERDRAW_SETUP(EXPECTED_OVERDRAWS) \
-        OwnPtr<MockImageBufferSurfaceForOverwriteTesting> mockSurface = adoptPtr(new MockImageBufferSurfaceForOverwriteTesting(IntSize(10, 10), NonOpaque)); \
+        std::unique_ptr<MockImageBufferSurfaceForOverwriteTesting> mockSurface = wrapUnique(new MockImageBufferSurfaceForOverwriteTesting(IntSize(10, 10), NonOpaque)); \
         MockImageBufferSurfaceForOverwriteTesting* surfacePtr = mockSurface.get(); \
         canvasElement().createImageBufferUsingSurfaceForTesting(std::move(mockSurface)); \
         EXPECT_CALL(*surfacePtr, willOverwriteCanvas()).Times(EXPECTED_OVERDRAWS); \
@@ -261,13 +263,13 @@
         ExpectFallback,
         ExpectNoFallback
     };
-    static PassOwnPtr<MockSurfaceFactory> create(FallbackExpectation expectation) { return adoptPtr(new MockSurfaceFactory(expectation)); }
+    static std::unique_ptr<MockSurfaceFactory> create(FallbackExpectation expectation) { return wrapUnique(new MockSurfaceFactory(expectation)); }
 
-    PassOwnPtr<ImageBufferSurface> createSurface(const IntSize& size, OpacityMode mode) override
+    std::unique_ptr<ImageBufferSurface> createSurface(const IntSize& size, OpacityMode mode) override
     {
         EXPECT_EQ(ExpectFallback, m_expectation);
         m_didFallback = true;
-        return adoptPtr(new UnacceleratedImageBufferSurface(size, mode));
+        return wrapUnique(new UnacceleratedImageBufferSurface(size, mode));
     }
 
     ~MockSurfaceFactory() override
@@ -407,7 +409,7 @@
 TEST_F(CanvasRenderingContext2DTest, NoLayerPromotionByDefault)
 {
     createContext(NonOpaque);
-    OwnPtr<RecordingImageBufferSurface> surface = adoptPtr(new RecordingImageBufferSurface(IntSize(10, 10), MockSurfaceFactory::create(MockSurfaceFactory::ExpectNoFallback), NonOpaque));
+    std::unique_ptr<RecordingImageBufferSurface> surface = wrapUnique(new RecordingImageBufferSurface(IntSize(10, 10), MockSurfaceFactory::create(MockSurfaceFactory::ExpectNoFallback), NonOpaque));
     canvasElement().createImageBufferUsingSurfaceForTesting(std::move(surface));
 
     EXPECT_FALSE(canvasElement().shouldBeDirectComposited());
@@ -416,7 +418,7 @@
 TEST_F(CanvasRenderingContext2DTest, NoLayerPromotionUnderOverdrawLimit)
 {
     createContext(NonOpaque);
-    OwnPtr<RecordingImageBufferSurface> surface = adoptPtr(new RecordingImageBufferSurface(IntSize(10, 10), MockSurfaceFactory::create(MockSurfaceFactory::ExpectNoFallback), NonOpaque));
+    std::unique_ptr<RecordingImageBufferSurface> surface = wrapUnique(new RecordingImageBufferSurface(IntSize(10, 10), MockSurfaceFactory::create(MockSurfaceFactory::ExpectNoFallback), NonOpaque));
     canvasElement().createImageBufferUsingSurfaceForTesting(std::move(surface));
 
     context2d()->setGlobalAlpha(0.5f); // To prevent overdraw optimization
@@ -430,7 +432,7 @@
 TEST_F(CanvasRenderingContext2DTest, LayerPromotionOverOverdrawLimit)
 {
     createContext(NonOpaque);
-    OwnPtr<RecordingImageBufferSurface> surface = adoptPtr(new RecordingImageBufferSurface(IntSize(10, 10), MockSurfaceFactory::create(MockSurfaceFactory::ExpectNoFallback), NonOpaque));
+    std::unique_ptr<RecordingImageBufferSurface> surface = wrapUnique(new RecordingImageBufferSurface(IntSize(10, 10), MockSurfaceFactory::create(MockSurfaceFactory::ExpectNoFallback), NonOpaque));
     canvasElement().createImageBufferUsingSurfaceForTesting(std::move(surface));
 
     context2d()->setGlobalAlpha(0.5f); // To prevent overdraw optimization
@@ -444,7 +446,7 @@
 TEST_F(CanvasRenderingContext2DTest, NoLayerPromotionUnderImageSizeRatioLimit)
 {
     createContext(NonOpaque);
-    OwnPtr<RecordingImageBufferSurface> surface = adoptPtr(new RecordingImageBufferSurface(IntSize(10, 10), MockSurfaceFactory::create(MockSurfaceFactory::ExpectNoFallback), NonOpaque));
+    std::unique_ptr<RecordingImageBufferSurface> surface = wrapUnique(new RecordingImageBufferSurface(IntSize(10, 10), MockSurfaceFactory::create(MockSurfaceFactory::ExpectNoFallback), NonOpaque));
     canvasElement().createImageBufferUsingSurfaceForTesting(std::move(surface));
 
     NonThrowableExceptionState exceptionState;
@@ -452,7 +454,7 @@
     EXPECT_FALSE(exceptionState.hadException());
     HTMLCanvasElement* sourceCanvas = static_cast<HTMLCanvasElement*>(sourceCanvasElement);
     IntSize sourceSize(10, 10 * ExpensiveCanvasHeuristicParameters::ExpensiveImageSizeRatio);
-    OwnPtr<UnacceleratedImageBufferSurface> sourceSurface = adoptPtr(new UnacceleratedImageBufferSurface(sourceSize, NonOpaque));
+    std::unique_ptr<UnacceleratedImageBufferSurface> sourceSurface = wrapUnique(new UnacceleratedImageBufferSurface(sourceSize, NonOpaque));
     sourceCanvas->createImageBufferUsingSurfaceForTesting(std::move(sourceSurface));
 
     const ImageBitmapOptions defaultOptions;
@@ -468,7 +470,7 @@
 TEST_F(CanvasRenderingContext2DTest, LayerPromotionOverImageSizeRatioLimit)
 {
     createContext(NonOpaque);
-    OwnPtr<RecordingImageBufferSurface> surface = adoptPtr(new RecordingImageBufferSurface(IntSize(10, 10), MockSurfaceFactory::create(MockSurfaceFactory::ExpectNoFallback), NonOpaque));
+    std::unique_ptr<RecordingImageBufferSurface> surface = wrapUnique(new RecordingImageBufferSurface(IntSize(10, 10), MockSurfaceFactory::create(MockSurfaceFactory::ExpectNoFallback), NonOpaque));
     canvasElement().createImageBufferUsingSurfaceForTesting(std::move(surface));
 
     NonThrowableExceptionState exceptionState;
@@ -476,7 +478,7 @@
     EXPECT_FALSE(exceptionState.hadException());
     HTMLCanvasElement* sourceCanvas = static_cast<HTMLCanvasElement*>(sourceCanvasElement);
     IntSize sourceSize(10, 10 * ExpensiveCanvasHeuristicParameters::ExpensiveImageSizeRatio + 1);
-    OwnPtr<UnacceleratedImageBufferSurface> sourceSurface = adoptPtr(new UnacceleratedImageBufferSurface(sourceSize, NonOpaque));
+    std::unique_ptr<UnacceleratedImageBufferSurface> sourceSurface = wrapUnique(new UnacceleratedImageBufferSurface(sourceSize, NonOpaque));
     sourceCanvas->createImageBufferUsingSurfaceForTesting(std::move(sourceSurface));
 
     const ImageBitmapOptions defaultOptions;
@@ -492,7 +494,7 @@
 TEST_F(CanvasRenderingContext2DTest, NoLayerPromotionUnderExpensivePathPointCount)
 {
     createContext(NonOpaque);
-    OwnPtr<RecordingImageBufferSurface> surface = adoptPtr(new RecordingImageBufferSurface(IntSize(10, 10), MockSurfaceFactory::create(MockSurfaceFactory::ExpectNoFallback), NonOpaque));
+    std::unique_ptr<RecordingImageBufferSurface> surface = wrapUnique(new RecordingImageBufferSurface(IntSize(10, 10), MockSurfaceFactory::create(MockSurfaceFactory::ExpectNoFallback), NonOpaque));
     canvasElement().createImageBufferUsingSurfaceForTesting(std::move(surface));
 
     context2d()->beginPath();
@@ -509,7 +511,7 @@
 TEST_F(CanvasRenderingContext2DTest, LayerPromotionOverExpensivePathPointCount)
 {
     createContext(NonOpaque);
-    OwnPtr<RecordingImageBufferSurface> surface = adoptPtr(new RecordingImageBufferSurface(IntSize(10, 10), MockSurfaceFactory::create(MockSurfaceFactory::ExpectNoFallback), NonOpaque));
+    std::unique_ptr<RecordingImageBufferSurface> surface = wrapUnique(new RecordingImageBufferSurface(IntSize(10, 10), MockSurfaceFactory::create(MockSurfaceFactory::ExpectNoFallback), NonOpaque));
     canvasElement().createImageBufferUsingSurfaceForTesting(std::move(surface));
 
     context2d()->beginPath();
@@ -526,7 +528,7 @@
 TEST_F(CanvasRenderingContext2DTest, LayerPromotionWhenPathIsConcave)
 {
     createContext(NonOpaque);
-    OwnPtr<RecordingImageBufferSurface> surface = adoptPtr(new RecordingImageBufferSurface(IntSize(10, 10), MockSurfaceFactory::create(MockSurfaceFactory::ExpectNoFallback), NonOpaque));
+    std::unique_ptr<RecordingImageBufferSurface> surface = wrapUnique(new RecordingImageBufferSurface(IntSize(10, 10), MockSurfaceFactory::create(MockSurfaceFactory::ExpectNoFallback), NonOpaque));
     canvasElement().createImageBufferUsingSurfaceForTesting(std::move(surface));
 
     context2d()->beginPath();
@@ -546,7 +548,7 @@
 TEST_F(CanvasRenderingContext2DTest, NoLayerPromotionWithRectangleClip)
 {
     createContext(NonOpaque);
-    OwnPtr<RecordingImageBufferSurface> surface = adoptPtr(new RecordingImageBufferSurface(IntSize(10, 10), MockSurfaceFactory::create(MockSurfaceFactory::ExpectNoFallback), NonOpaque));
+    std::unique_ptr<RecordingImageBufferSurface> surface = wrapUnique(new RecordingImageBufferSurface(IntSize(10, 10), MockSurfaceFactory::create(MockSurfaceFactory::ExpectNoFallback), NonOpaque));
     canvasElement().createImageBufferUsingSurfaceForTesting(std::move(surface));
 
     context2d()->beginPath();
@@ -560,7 +562,7 @@
 TEST_F(CanvasRenderingContext2DTest, LayerPromotionWithComplexClip)
 {
     createContext(NonOpaque);
-    OwnPtr<RecordingImageBufferSurface> surface = adoptPtr(new RecordingImageBufferSurface(IntSize(10, 10), MockSurfaceFactory::create(MockSurfaceFactory::ExpectNoFallback), NonOpaque));
+    std::unique_ptr<RecordingImageBufferSurface> surface = wrapUnique(new RecordingImageBufferSurface(IntSize(10, 10), MockSurfaceFactory::create(MockSurfaceFactory::ExpectNoFallback), NonOpaque));
     canvasElement().createImageBufferUsingSurfaceForTesting(std::move(surface));
 
     context2d()->beginPath();
@@ -581,7 +583,7 @@
 TEST_F(CanvasRenderingContext2DTest, LayerPromotionWithBlurredShadow)
 {
     createContext(NonOpaque);
-    OwnPtr<RecordingImageBufferSurface> surface = adoptPtr(new RecordingImageBufferSurface(IntSize(10, 10), MockSurfaceFactory::create(MockSurfaceFactory::ExpectNoFallback), NonOpaque));
+    std::unique_ptr<RecordingImageBufferSurface> surface = wrapUnique(new RecordingImageBufferSurface(IntSize(10, 10), MockSurfaceFactory::create(MockSurfaceFactory::ExpectNoFallback), NonOpaque));
     canvasElement().createImageBufferUsingSurfaceForTesting(std::move(surface));
 
     context2d()->setShadowColor(String("red"));
@@ -598,7 +600,7 @@
 TEST_F(CanvasRenderingContext2DTest, NoLayerPromotionWithSharpShadow)
 {
     createContext(NonOpaque);
-    OwnPtr<RecordingImageBufferSurface> surface = adoptPtr(new RecordingImageBufferSurface(IntSize(10, 10), MockSurfaceFactory::create(MockSurfaceFactory::ExpectNoFallback), NonOpaque));
+    std::unique_ptr<RecordingImageBufferSurface> surface = wrapUnique(new RecordingImageBufferSurface(IntSize(10, 10), MockSurfaceFactory::create(MockSurfaceFactory::ExpectNoFallback), NonOpaque));
     canvasElement().createImageBufferUsingSurfaceForTesting(std::move(surface));
 
     context2d()->setShadowColor(String("red"));
@@ -611,7 +613,7 @@
 TEST_F(CanvasRenderingContext2DTest, NoFallbackWithSmallState)
 {
     createContext(NonOpaque);
-    OwnPtr<RecordingImageBufferSurface> surface = adoptPtr(new RecordingImageBufferSurface(IntSize(10, 10), MockSurfaceFactory::create(MockSurfaceFactory::ExpectNoFallback), NonOpaque));
+    std::unique_ptr<RecordingImageBufferSurface> surface = wrapUnique(new RecordingImageBufferSurface(IntSize(10, 10), MockSurfaceFactory::create(MockSurfaceFactory::ExpectNoFallback), NonOpaque));
     canvasElement().createImageBufferUsingSurfaceForTesting(std::move(surface));
 
     context2d()->fillRect(0, 0, 1, 1); // To have a non-empty dirty rect
@@ -625,7 +627,7 @@
 TEST_F(CanvasRenderingContext2DTest, FallbackWithLargeState)
 {
     createContext(NonOpaque);
-    OwnPtr<RecordingImageBufferSurface> surface = adoptPtr(new RecordingImageBufferSurface(IntSize(10, 10), MockSurfaceFactory::create(MockSurfaceFactory::ExpectFallback), NonOpaque));
+    std::unique_ptr<RecordingImageBufferSurface> surface = wrapUnique(new RecordingImageBufferSurface(IntSize(10, 10), MockSurfaceFactory::create(MockSurfaceFactory::ExpectFallback), NonOpaque));
     canvasElement().createImageBufferUsingSurfaceForTesting(std::move(surface));
 
     context2d()->fillRect(0, 0, 1, 1); // To have a non-empty dirty rect
@@ -644,7 +646,7 @@
     // does not support pixel geometry settings.
     // See: crbug.com/583809
     createContext(Opaque);
-    OwnPtr<RecordingImageBufferSurface> surface = adoptPtr(new RecordingImageBufferSurface(IntSize(10, 10), MockSurfaceFactory::create(MockSurfaceFactory::ExpectFallback), Opaque));
+    std::unique_ptr<RecordingImageBufferSurface> surface = wrapUnique(new RecordingImageBufferSurface(IntSize(10, 10), MockSurfaceFactory::create(MockSurfaceFactory::ExpectFallback), Opaque));
     canvasElement().createImageBufferUsingSurfaceForTesting(std::move(surface));
 
     context2d()->fillText("Text", 0, 5);
@@ -653,7 +655,7 @@
 TEST_F(CanvasRenderingContext2DTest, NonOpaqueDisplayListDoesNotFallBackForText)
 {
     createContext(NonOpaque);
-    OwnPtr<RecordingImageBufferSurface> surface = adoptPtr(new RecordingImageBufferSurface(IntSize(10, 10), MockSurfaceFactory::create(MockSurfaceFactory::ExpectNoFallback), NonOpaque));
+    std::unique_ptr<RecordingImageBufferSurface> surface = wrapUnique(new RecordingImageBufferSurface(IntSize(10, 10), MockSurfaceFactory::create(MockSurfaceFactory::ExpectNoFallback), NonOpaque));
     canvasElement().createImageBufferUsingSurfaceForTesting(std::move(surface));
 
     context2d()->fillText("Text", 0, 5);
@@ -685,7 +687,7 @@
 {
     createContext(NonOpaque);
 
-    OwnPtr<FakeAcceleratedImageBufferSurfaceForTesting> fakeAccelerateSurface = adoptPtr(new FakeAcceleratedImageBufferSurfaceForTesting(IntSize(10, 10), NonOpaque));
+    std::unique_ptr<FakeAcceleratedImageBufferSurfaceForTesting> fakeAccelerateSurface = wrapUnique(new FakeAcceleratedImageBufferSurfaceForTesting(IntSize(10, 10), NonOpaque));
     FakeAcceleratedImageBufferSurfaceForTesting* fakeAccelerateSurfacePtr = fakeAccelerateSurface.get();
     canvasElement().createImageBufferUsingSurfaceForTesting(std::move(fakeAccelerateSurface));
     // 800 = 10 * 10 * 4 * 2 where 10*10 is canvas size, 4 is num of bytes per pixel per buffer,
@@ -709,8 +711,8 @@
     EXPECT_EQ(1u, getGlobalAcceleratedImageBufferCount());
 
     // Creating a different accelerated image buffer
-    OwnPtr<FakeAcceleratedImageBufferSurfaceForTesting> fakeAccelerateSurface2 = adoptPtr(new FakeAcceleratedImageBufferSurfaceForTesting(IntSize(10, 5), NonOpaque));
-    OwnPtr<ImageBuffer> imageBuffer2 = ImageBuffer::create(std::move(fakeAccelerateSurface2));
+    std::unique_ptr<FakeAcceleratedImageBufferSurfaceForTesting> fakeAccelerateSurface2 = wrapUnique(new FakeAcceleratedImageBufferSurfaceForTesting(IntSize(10, 5), NonOpaque));
+    std::unique_ptr<ImageBuffer> imageBuffer2 = ImageBuffer::create(std::move(fakeAccelerateSurface2));
     EXPECT_EQ(800, getCurrentGPUMemoryUsage());
     EXPECT_EQ(1200, getGlobalGPUMemoryUsage());
     EXPECT_EQ(2u, getGlobalAcceleratedImageBufferCount());
diff --git a/third_party/WebKit/Source/modules/canvas2d/HitRegion.h b/third_party/WebKit/Source/modules/canvas2d/HitRegion.h
index 6d3b11e..799dd103 100644
--- a/third_party/WebKit/Source/modules/canvas2d/HitRegion.h
+++ b/third_party/WebKit/Source/modules/canvas2d/HitRegion.h
@@ -10,8 +10,6 @@
 #include "platform/graphics/Path.h"
 #include "platform/heap/Handle.h"
 #include "wtf/Noncopyable.h"
-#include "wtf/OwnPtr.h"
-#include "wtf/PassOwnPtr.h"
 #include "wtf/PassRefPtr.h"
 #include "wtf/RefPtr.h"
 
diff --git a/third_party/WebKit/Source/modules/compositorworker/CompositorWorkerGlobalScope.cpp b/third_party/WebKit/Source/modules/compositorworker/CompositorWorkerGlobalScope.cpp
index 4e04afc..2bf0b6a 100644
--- a/third_party/WebKit/Source/modules/compositorworker/CompositorWorkerGlobalScope.cpp
+++ b/third_party/WebKit/Source/modules/compositorworker/CompositorWorkerGlobalScope.cpp
@@ -9,10 +9,11 @@
 #include "core/workers/WorkerThreadStartupData.h"
 #include "modules/EventTargetModules.h"
 #include "modules/compositorworker/CompositorWorkerThread.h"
+#include <memory>
 
 namespace blink {
 
-CompositorWorkerGlobalScope* CompositorWorkerGlobalScope::create(CompositorWorkerThread* thread, PassOwnPtr<WorkerThreadStartupData> startupData, double timeOrigin)
+CompositorWorkerGlobalScope* CompositorWorkerGlobalScope::create(CompositorWorkerThread* thread, std::unique_ptr<WorkerThreadStartupData> startupData, double timeOrigin)
 {
     // Note: startupData is finalized on return. After the relevant parts has been
     // passed along to the created 'context'.
@@ -22,7 +23,7 @@
     return context;
 }
 
-CompositorWorkerGlobalScope::CompositorWorkerGlobalScope(const KURL& url, const String& userAgent, CompositorWorkerThread* thread, double timeOrigin, PassOwnPtr<SecurityOrigin::PrivilegeData> starterOriginPrivilegeData, WorkerClients* workerClients)
+CompositorWorkerGlobalScope::CompositorWorkerGlobalScope(const KURL& url, const String& userAgent, CompositorWorkerThread* thread, double timeOrigin, std::unique_ptr<SecurityOrigin::PrivilegeData> starterOriginPrivilegeData, WorkerClients* workerClients)
     : WorkerGlobalScope(url, userAgent, thread, timeOrigin, std::move(starterOriginPrivilegeData), workerClients)
     , m_executingAnimationFrameCallbacks(false)
     , m_callbackCollection(this)
@@ -48,7 +49,7 @@
 void CompositorWorkerGlobalScope::postMessage(ExecutionContext* executionContext, PassRefPtr<SerializedScriptValue> message, const MessagePortArray& ports, ExceptionState& exceptionState)
 {
     // Disentangle the port in preparation for sending it to the remote context.
-    OwnPtr<MessagePortChannelArray> channels = MessagePort::disentanglePorts(executionContext, ports, exceptionState);
+    std::unique_ptr<MessagePortChannelArray> channels = MessagePort::disentanglePorts(executionContext, ports, exceptionState);
     if (exceptionState.hadException())
         return;
     thread()->workerObjectProxy().postMessageToWorkerObject(message, std::move(channels));
diff --git a/third_party/WebKit/Source/modules/compositorworker/CompositorWorkerGlobalScope.h b/third_party/WebKit/Source/modules/compositorworker/CompositorWorkerGlobalScope.h
index 726131c..c1e619f 100644
--- a/third_party/WebKit/Source/modules/compositorworker/CompositorWorkerGlobalScope.h
+++ b/third_party/WebKit/Source/modules/compositorworker/CompositorWorkerGlobalScope.h
@@ -10,6 +10,7 @@
 #include "core/dom/MessagePort.h"
 #include "core/workers/WorkerGlobalScope.h"
 #include "modules/ModulesExport.h"
+#include <memory>
 
 namespace blink {
 
@@ -19,7 +20,7 @@
 class MODULES_EXPORT CompositorWorkerGlobalScope final : public WorkerGlobalScope {
     DEFINE_WRAPPERTYPEINFO();
 public:
-    static CompositorWorkerGlobalScope* create(CompositorWorkerThread*, PassOwnPtr<WorkerThreadStartupData>, double timeOrigin);
+    static CompositorWorkerGlobalScope* create(CompositorWorkerThread*, std::unique_ptr<WorkerThreadStartupData>, double timeOrigin);
     ~CompositorWorkerGlobalScope() override;
 
     // EventTarget
@@ -38,7 +39,7 @@
     DECLARE_VIRTUAL_TRACE();
 
 private:
-    CompositorWorkerGlobalScope(const KURL&, const String& userAgent, CompositorWorkerThread*, double timeOrigin, PassOwnPtr<SecurityOrigin::PrivilegeData>, WorkerClients*);
+    CompositorWorkerGlobalScope(const KURL&, const String& userAgent, CompositorWorkerThread*, double timeOrigin, std::unique_ptr<SecurityOrigin::PrivilegeData>, WorkerClients*);
     CompositorWorkerThread* thread() const;
 
     bool m_executingAnimationFrameCallbacks;
diff --git a/third_party/WebKit/Source/modules/compositorworker/CompositorWorkerMessagingProxy.cpp b/third_party/WebKit/Source/modules/compositorworker/CompositorWorkerMessagingProxy.cpp
index 6ad530b..c6c7e911 100644
--- a/third_party/WebKit/Source/modules/compositorworker/CompositorWorkerMessagingProxy.cpp
+++ b/third_party/WebKit/Source/modules/compositorworker/CompositorWorkerMessagingProxy.cpp
@@ -6,6 +6,7 @@
 
 #include "core/workers/WorkerThreadStartupData.h"
 #include "modules/compositorworker/CompositorWorkerThread.h"
+#include <memory>
 
 namespace blink {
 
@@ -18,7 +19,7 @@
 {
 }
 
-PassOwnPtr<WorkerThread> CompositorWorkerMessagingProxy::createWorkerThread(double originTime)
+std::unique_ptr<WorkerThread> CompositorWorkerMessagingProxy::createWorkerThread(double originTime)
 {
     return CompositorWorkerThread::create(loaderProxy(), workerObjectProxy(), originTime);
 }
diff --git a/third_party/WebKit/Source/modules/compositorworker/CompositorWorkerMessagingProxy.h b/third_party/WebKit/Source/modules/compositorworker/CompositorWorkerMessagingProxy.h
index 07d2aeff..8f0752d 100644
--- a/third_party/WebKit/Source/modules/compositorworker/CompositorWorkerMessagingProxy.h
+++ b/third_party/WebKit/Source/modules/compositorworker/CompositorWorkerMessagingProxy.h
@@ -7,6 +7,7 @@
 
 #include "core/workers/InProcessWorkerMessagingProxy.h"
 #include "wtf/Allocator.h"
+#include <memory>
 
 namespace blink {
 
@@ -18,7 +19,7 @@
 protected:
     ~CompositorWorkerMessagingProxy() override;
 
-    PassOwnPtr<WorkerThread> createWorkerThread(double originTime) override;
+    std::unique_ptr<WorkerThread> createWorkerThread(double originTime) override;
 };
 
 } // namespace blink
diff --git a/third_party/WebKit/Source/modules/compositorworker/CompositorWorkerThread.cpp b/third_party/WebKit/Source/modules/compositorworker/CompositorWorkerThread.cpp
index de797ad..4573680 100644
--- a/third_party/WebKit/Source/modules/compositorworker/CompositorWorkerThread.cpp
+++ b/third_party/WebKit/Source/modules/compositorworker/CompositorWorkerThread.cpp
@@ -16,6 +16,8 @@
 #include "platform/WebThreadSupportingGC.h"
 #include "public/platform/Platform.h"
 #include "wtf/Assertions.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
@@ -60,7 +62,7 @@
     WorkerBackingThread* thread() { return m_thread.get(); }
 
 private:
-    BackingThreadHolder(PassOwnPtr<WorkerBackingThread> useBackingThread = nullptr)
+    BackingThreadHolder(std::unique_ptr<WorkerBackingThread> useBackingThread = nullptr)
         : m_thread(useBackingThread ? std::move(useBackingThread) : WorkerBackingThread::create(Platform::current()->compositorThread()))
     {
         DCHECK(isMainThread());
@@ -95,7 +97,7 @@
         doneEvent->signal();
     }
 
-    OwnPtr<WorkerBackingThread> m_thread;
+    std::unique_ptr<WorkerBackingThread> m_thread;
     bool m_initialized = false;
 
     static BackingThreadHolder* s_instance;
@@ -105,11 +107,11 @@
 
 } // namespace
 
-PassOwnPtr<CompositorWorkerThread> CompositorWorkerThread::create(PassRefPtr<WorkerLoaderProxy> workerLoaderProxy, InProcessWorkerObjectProxy& workerObjectProxy, double timeOrigin)
+std::unique_ptr<CompositorWorkerThread> CompositorWorkerThread::create(PassRefPtr<WorkerLoaderProxy> workerLoaderProxy, InProcessWorkerObjectProxy& workerObjectProxy, double timeOrigin)
 {
     TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("compositor-worker"), "CompositorWorkerThread::create");
     ASSERT(isMainThread());
-    return adoptPtr(new CompositorWorkerThread(workerLoaderProxy, workerObjectProxy, timeOrigin));
+    return wrapUnique(new CompositorWorkerThread(workerLoaderProxy, workerObjectProxy, timeOrigin));
 }
 
 CompositorWorkerThread::CompositorWorkerThread(PassRefPtr<WorkerLoaderProxy> workerLoaderProxy, InProcessWorkerObjectProxy& workerObjectProxy, double timeOrigin)
@@ -128,7 +130,7 @@
     return *BackingThreadHolder::instance().thread();
 }
 
-WorkerGlobalScope*CompositorWorkerThread::createWorkerGlobalScope(PassOwnPtr<WorkerThreadStartupData> startupData)
+WorkerGlobalScope*CompositorWorkerThread::createWorkerGlobalScope(std::unique_ptr<WorkerThreadStartupData> startupData)
 {
     TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("compositor-worker"), "CompositorWorkerThread::createWorkerGlobalScope");
     return CompositorWorkerGlobalScope::create(this, std::move(startupData), m_timeOrigin);
diff --git a/third_party/WebKit/Source/modules/compositorworker/CompositorWorkerThread.h b/third_party/WebKit/Source/modules/compositorworker/CompositorWorkerThread.h
index b72fe9c..1ca5db2 100644
--- a/third_party/WebKit/Source/modules/compositorworker/CompositorWorkerThread.h
+++ b/third_party/WebKit/Source/modules/compositorworker/CompositorWorkerThread.h
@@ -7,6 +7,7 @@
 
 #include "core/workers/WorkerThread.h"
 #include "modules/ModulesExport.h"
+#include <memory>
 
 namespace blink {
 
@@ -14,7 +15,7 @@
 
 class MODULES_EXPORT CompositorWorkerThread final : public WorkerThread {
 public:
-    static PassOwnPtr<CompositorWorkerThread> create(PassRefPtr<WorkerLoaderProxy>, InProcessWorkerObjectProxy&, double timeOrigin);
+    static std::unique_ptr<CompositorWorkerThread> create(PassRefPtr<WorkerLoaderProxy>, InProcessWorkerObjectProxy&, double timeOrigin);
     ~CompositorWorkerThread() override;
 
     InProcessWorkerObjectProxy& workerObjectProxy() const { return m_workerObjectProxy; }
@@ -29,7 +30,7 @@
 protected:
     CompositorWorkerThread(PassRefPtr<WorkerLoaderProxy>, InProcessWorkerObjectProxy&, double timeOrigin);
 
-    WorkerGlobalScope* createWorkerGlobalScope(PassOwnPtr<WorkerThreadStartupData>) override;
+    WorkerGlobalScope* createWorkerGlobalScope(std::unique_ptr<WorkerThreadStartupData>) override;
     bool isOwningBackingThread() const override { return false; }
 
 private:
diff --git a/third_party/WebKit/Source/modules/compositorworker/CompositorWorkerThreadTest.cpp b/third_party/WebKit/Source/modules/compositorworker/CompositorWorkerThreadTest.cpp
index 1b3c0d83..adb2ac49 100644
--- a/third_party/WebKit/Source/modules/compositorworker/CompositorWorkerThreadTest.cpp
+++ b/third_party/WebKit/Source/modules/compositorworker/CompositorWorkerThreadTest.cpp
@@ -23,6 +23,8 @@
 #include "public/platform/Platform.h"
 #include "public/platform/WebAddressSpace.h"
 #include "testing/gtest/include/gtest/gtest.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 namespace {
@@ -30,13 +32,13 @@
 // A null InProcessWorkerObjectProxy, supplied when creating CompositorWorkerThreads.
 class TestCompositorWorkerObjectProxy : public InProcessWorkerObjectProxy {
 public:
-    static PassOwnPtr<TestCompositorWorkerObjectProxy> create(ExecutionContext* context)
+    static std::unique_ptr<TestCompositorWorkerObjectProxy> create(ExecutionContext* context)
     {
-        return adoptPtr(new TestCompositorWorkerObjectProxy(context));
+        return wrapUnique(new TestCompositorWorkerObjectProxy(context));
     }
 
     // (Empty) WorkerReportingProxy implementation:
-    virtual void reportException(const String& errorMessage, PassOwnPtr<SourceLocation>) {}
+    virtual void reportException(const String& errorMessage, std::unique_ptr<SourceLocation>) {}
     void reportConsoleMessage(ConsoleMessage*) override {}
     void postMessageToPageInspector(const String&) override {}
     void postWorkerConsoleAgentEnabled() override {}
@@ -75,7 +77,7 @@
 class CompositorWorkerTestPlatform : public TestingPlatformSupport {
 public:
     CompositorWorkerTestPlatform()
-        : m_thread(adoptPtr(m_oldPlatform->createThread("Compositor")))
+        : m_thread(wrapUnique(m_oldPlatform->createThread("Compositor")))
     {
     }
 
@@ -87,7 +89,7 @@
     WebCompositorSupport* compositorSupport() override { return &m_compositorSupport; }
 
 private:
-    OwnPtr<WebThread> m_thread;
+    std::unique_ptr<WebThread> m_thread;
     TestingCompositorSupport m_compositorSupport;
 };
 
@@ -109,9 +111,9 @@
         CompositorWorkerThread::clearSharedBackingThread();
     }
 
-    PassOwnPtr<CompositorWorkerThread> createCompositorWorker()
+    std::unique_ptr<CompositorWorkerThread> createCompositorWorker()
     {
-        OwnPtr<CompositorWorkerThread> workerThread = CompositorWorkerThread::create(nullptr, *m_objectProxy, 0);
+        std::unique_ptr<CompositorWorkerThread> workerThread = CompositorWorkerThread::create(nullptr, *m_objectProxy, 0);
         WorkerClients* clients = WorkerClients::create();
         provideCompositorProxyClientTo(clients, new TestCompositorProxyClient);
         workerThread->start(WorkerThreadStartupData::create(
@@ -132,7 +134,7 @@
     // Attempts to run some simple script for |worker|.
     void checkWorkerCanExecuteScript(WorkerThread* worker)
     {
-        OwnPtr<WaitableEvent> waitEvent = adoptPtr(new WaitableEvent());
+        std::unique_ptr<WaitableEvent> waitEvent = wrapUnique(new WaitableEvent());
         worker->workerBackingThread().backingThread().postTask(BLINK_FROM_HERE, threadSafeBind(&CompositorWorkerThreadTest::executeScriptInWorker, AllowCrossThreadAccess(this),
             AllowCrossThreadAccess(worker), AllowCrossThreadAccess(waitEvent.get())));
         waitEvent->wait();
@@ -147,15 +149,15 @@
         waitEvent->signal();
     }
 
-    OwnPtr<DummyPageHolder> m_page;
+    std::unique_ptr<DummyPageHolder> m_page;
     RefPtr<SecurityOrigin> m_securityOrigin;
-    OwnPtr<InProcessWorkerObjectProxy> m_objectProxy;
+    std::unique_ptr<InProcessWorkerObjectProxy> m_objectProxy;
     CompositorWorkerTestPlatform m_testPlatform;
 };
 
 TEST_F(CompositorWorkerThreadTest, Basic)
 {
-    OwnPtr<CompositorWorkerThread> compositorWorker = createCompositorWorker();
+    std::unique_ptr<CompositorWorkerThread> compositorWorker = createCompositorWorker();
     checkWorkerCanExecuteScript(compositorWorker.get());
     compositorWorker->terminateAndWait();
 }
@@ -164,14 +166,14 @@
 TEST_F(CompositorWorkerThreadTest, CreateSecondAndTerminateFirst)
 {
     // Create the first worker and wait until it is initialized.
-    OwnPtr<CompositorWorkerThread> firstWorker = createCompositorWorker();
+    std::unique_ptr<CompositorWorkerThread> firstWorker = createCompositorWorker();
     WebThreadSupportingGC* firstThread = &firstWorker->workerBackingThread().backingThread();
     checkWorkerCanExecuteScript(firstWorker.get());
     v8::Isolate* firstIsolate = firstWorker->isolate();
     ASSERT_TRUE(firstIsolate);
 
     // Create the second worker and immediately destroy the first worker.
-    OwnPtr<CompositorWorkerThread> secondWorker = createCompositorWorker();
+    std::unique_ptr<CompositorWorkerThread> secondWorker = createCompositorWorker();
     // We don't use terminateAndWait here to avoid forcible termination.
     firstWorker->terminate();
     firstWorker->waitForShutdownForTesting();
@@ -195,7 +197,7 @@
 TEST_F(CompositorWorkerThreadTest, TerminateFirstAndCreateSecond)
 {
     // Create the first worker, wait until it is initialized, and terminate it.
-    OwnPtr<CompositorWorkerThread> compositorWorker = createCompositorWorker();
+    std::unique_ptr<CompositorWorkerThread> compositorWorker = createCompositorWorker();
     WebThreadSupportingGC* firstThread = &compositorWorker->workerBackingThread().backingThread();
     checkWorkerCanExecuteScript(compositorWorker.get());
 
@@ -215,7 +217,7 @@
 // Tests that v8::Isolate and WebThread are correctly set-up if a worker is created while another is terminating.
 TEST_F(CompositorWorkerThreadTest, CreatingSecondDuringTerminationOfFirst)
 {
-    OwnPtr<CompositorWorkerThread> firstWorker = createCompositorWorker();
+    std::unique_ptr<CompositorWorkerThread> firstWorker = createCompositorWorker();
     checkWorkerCanExecuteScript(firstWorker.get());
     v8::Isolate* firstIsolate = firstWorker->isolate();
     ASSERT_TRUE(firstIsolate);
@@ -227,7 +229,7 @@
     // Note: We rely on the assumption that the termination steps don't run
     // on the worker thread so quickly. This could be a source of flakiness.
 
-    OwnPtr<CompositorWorkerThread> secondWorker = createCompositorWorker();
+    std::unique_ptr<CompositorWorkerThread> secondWorker = createCompositorWorker();
 
     v8::Isolate* secondIsolate = secondWorker->isolate();
     ASSERT_TRUE(secondIsolate);
diff --git a/third_party/WebKit/Source/modules/credentialmanager/CredentialsContainer.cpp b/third_party/WebKit/Source/modules/credentialmanager/CredentialsContainer.cpp
index b671c5c..9f93a00 100644
--- a/third_party/WebKit/Source/modules/credentialmanager/CredentialsContainer.cpp
+++ b/third_party/WebKit/Source/modules/credentialmanager/CredentialsContainer.cpp
@@ -27,6 +27,8 @@
 #include "public/platform/WebCredentialManagerError.h"
 #include "public/platform/WebFederatedCredential.h"
 #include "public/platform/WebPasswordCredential.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
@@ -80,7 +82,7 @@
         Frame* frame = toDocument(m_resolver->getScriptState()->getExecutionContext())->frame();
         SECURITY_CHECK(!frame || frame == frame->tree().top());
 
-        OwnPtr<WebCredential> credential = adoptPtr(webCredential.release());
+        std::unique_ptr<WebCredential> credential = wrapUnique(webCredential.release());
         if (!credential || !frame) {
             m_resolver->resolve();
             return;
diff --git a/third_party/WebKit/Source/modules/credentialmanager/PasswordCredentialTest.cpp b/third_party/WebKit/Source/modules/credentialmanager/PasswordCredentialTest.cpp
index bffa584c..f2d8fbe 100644
--- a/third_party/WebKit/Source/modules/credentialmanager/PasswordCredentialTest.cpp
+++ b/third_party/WebKit/Source/modules/credentialmanager/PasswordCredentialTest.cpp
@@ -16,6 +16,7 @@
 #include "core/testing/DummyPageHolder.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "wtf/text/StringBuilder.h"
+#include <memory>
 
 namespace blink {
 
@@ -45,7 +46,7 @@
     }
 
 private:
-    OwnPtr<DummyPageHolder> m_dummyPageHolder;
+    std::unique_ptr<DummyPageHolder> m_dummyPageHolder;
     Persistent<HTMLDocument> m_document;
 };
 
diff --git a/third_party/WebKit/Source/modules/crypto/NormalizeAlgorithm.cpp b/third_party/WebKit/Source/modules/crypto/NormalizeAlgorithm.cpp
index caf0638..d09a7b0 100644
--- a/third_party/WebKit/Source/modules/crypto/NormalizeAlgorithm.cpp
+++ b/third_party/WebKit/Source/modules/crypto/NormalizeAlgorithm.cpp
@@ -40,9 +40,11 @@
 #include "public/platform/WebCryptoAlgorithmParams.h"
 #include "public/platform/WebString.h"
 #include "wtf/MathExtras.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/Vector.h"
 #include "wtf/text/StringBuilder.h"
 #include <algorithm>
+#include <memory>
 
 namespace blink {
 
@@ -447,7 +449,7 @@
 //    dictionary AesCbcParams : Algorithm {
 //      required BufferSource iv;
 //    };
-bool parseAesCbcParams(const Dictionary& raw, OwnPtr<WebCryptoAlgorithmParams>& params, const ErrorContext& context, AlgorithmError* error)
+bool parseAesCbcParams(const Dictionary& raw, std::unique_ptr<WebCryptoAlgorithmParams>& params, const ErrorContext& context, AlgorithmError* error)
 {
     BufferSource ivBufferSource;
     if (!getBufferSource(raw, "iv", ivBufferSource, context, error))
@@ -455,7 +457,7 @@
 
     DOMArrayPiece iv(ivBufferSource);
 
-    params = adoptPtr(new WebCryptoAesCbcParams(iv.bytes(), iv.byteLength()));
+    params = wrapUnique(new WebCryptoAesCbcParams(iv.bytes(), iv.byteLength()));
     return true;
 }
 
@@ -464,13 +466,13 @@
 //    dictionary AesKeyGenParams : Algorithm {
 //      [EnforceRange] required unsigned short length;
 //    };
-bool parseAesKeyGenParams(const Dictionary& raw, OwnPtr<WebCryptoAlgorithmParams>& params, const ErrorContext& context, AlgorithmError* error)
+bool parseAesKeyGenParams(const Dictionary& raw, std::unique_ptr<WebCryptoAlgorithmParams>& params, const ErrorContext& context, AlgorithmError* error)
 {
     uint16_t length;
     if (!getUint16(raw, "length", length, context, error))
         return false;
 
-    params = adoptPtr(new WebCryptoAesKeyGenParams(length));
+    params = wrapUnique(new WebCryptoAesKeyGenParams(length));
     return true;
 }
 
@@ -496,7 +498,7 @@
 // FIXME: http://crbug.com/438475: The current implementation differs from the
 // spec in that the "hash" parameter is required. This seems more sensible, and
 // is being proposed as a change to the spec. (https://www.w3.org/Bugs/Public/show_bug.cgi?id=27448).
-bool parseHmacImportParams(const Dictionary& raw, OwnPtr<WebCryptoAlgorithmParams>& params, const ErrorContext& context, AlgorithmError* error)
+bool parseHmacImportParams(const Dictionary& raw, std::unique_ptr<WebCryptoAlgorithmParams>& params, const ErrorContext& context, AlgorithmError* error)
 {
     WebCryptoAlgorithm hash;
     if (!parseHash(raw, hash, context, error))
@@ -507,7 +509,7 @@
     if (!getOptionalUint32(raw, "length", hasLength, length, context, error))
         return false;
 
-    params = adoptPtr(new WebCryptoHmacImportParams(hash, hasLength, length));
+    params = wrapUnique(new WebCryptoHmacImportParams(hash, hasLength, length));
     return true;
 }
 
@@ -517,7 +519,7 @@
 //      required HashAlgorithmIdentifier hash;
 //      [EnforceRange] unsigned long length;
 //    };
-bool parseHmacKeyGenParams(const Dictionary& raw, OwnPtr<WebCryptoAlgorithmParams>& params, const ErrorContext& context, AlgorithmError* error)
+bool parseHmacKeyGenParams(const Dictionary& raw, std::unique_ptr<WebCryptoAlgorithmParams>& params, const ErrorContext& context, AlgorithmError* error)
 {
     WebCryptoAlgorithm hash;
     if (!parseHash(raw, hash, context, error))
@@ -528,7 +530,7 @@
     if (!getOptionalUint32(raw, "length", hasLength, length, context, error))
         return false;
 
-    params = adoptPtr(new WebCryptoHmacKeyGenParams(hash, hasLength, length));
+    params = wrapUnique(new WebCryptoHmacKeyGenParams(hash, hasLength, length));
     return true;
 }
 
@@ -537,13 +539,13 @@
 //    dictionary RsaHashedImportParams : Algorithm {
 //      required HashAlgorithmIdentifier hash;
 //    };
-bool parseRsaHashedImportParams(const Dictionary& raw, OwnPtr<WebCryptoAlgorithmParams>& params, const ErrorContext& context, AlgorithmError* error)
+bool parseRsaHashedImportParams(const Dictionary& raw, std::unique_ptr<WebCryptoAlgorithmParams>& params, const ErrorContext& context, AlgorithmError* error)
 {
     WebCryptoAlgorithm hash;
     if (!parseHash(raw, hash, context, error))
         return false;
 
-    params = adoptPtr(new WebCryptoRsaHashedImportParams(hash));
+    params = wrapUnique(new WebCryptoRsaHashedImportParams(hash));
     return true;
 }
 
@@ -557,7 +559,7 @@
 //    dictionary RsaHashedKeyGenParams : RsaKeyGenParams {
 //      required HashAlgorithmIdentifier hash;
 //    };
-bool parseRsaHashedKeyGenParams(const Dictionary& raw, OwnPtr<WebCryptoAlgorithmParams>& params, const ErrorContext& context, AlgorithmError* error)
+bool parseRsaHashedKeyGenParams(const Dictionary& raw, std::unique_ptr<WebCryptoAlgorithmParams>& params, const ErrorContext& context, AlgorithmError* error)
 {
     uint32_t modulusLength;
     if (!getUint32(raw, "modulusLength", modulusLength, context, error))
@@ -571,7 +573,7 @@
     if (!parseHash(raw, hash, context, error))
         return false;
 
-    params = adoptPtr(new WebCryptoRsaHashedKeyGenParams(hash, modulusLength, static_cast<const unsigned char*>(publicExponent->baseAddress()), publicExponent->byteLength()));
+    params = wrapUnique(new WebCryptoRsaHashedKeyGenParams(hash, modulusLength, static_cast<const unsigned char*>(publicExponent->baseAddress()), publicExponent->byteLength()));
     return true;
 }
 
@@ -581,7 +583,7 @@
 //      required BufferSource counter;
 //      [EnforceRange] required octet length;
 //    };
-bool parseAesCtrParams(const Dictionary& raw, OwnPtr<WebCryptoAlgorithmParams>& params, const ErrorContext& context, AlgorithmError* error)
+bool parseAesCtrParams(const Dictionary& raw, std::unique_ptr<WebCryptoAlgorithmParams>& params, const ErrorContext& context, AlgorithmError* error)
 {
     BufferSource counterBufferSource;
     if (!getBufferSource(raw, "counter", counterBufferSource, context, error))
@@ -592,7 +594,7 @@
     if (!getUint8(raw, "length", length, context, error))
         return false;
 
-    params = adoptPtr(new WebCryptoAesCtrParams(length, counter.bytes(), counter.byteLength()));
+    params = wrapUnique(new WebCryptoAesCtrParams(length, counter.bytes(), counter.byteLength()));
     return true;
 }
 
@@ -603,7 +605,7 @@
 //       BufferSource additionalData;
 //       [EnforceRange] octet tagLength;
 //     }
-bool parseAesGcmParams(const Dictionary& raw, OwnPtr<WebCryptoAlgorithmParams>& params, const ErrorContext& context, AlgorithmError* error)
+bool parseAesGcmParams(const Dictionary& raw, std::unique_ptr<WebCryptoAlgorithmParams>& params, const ErrorContext& context, AlgorithmError* error)
 {
     BufferSource ivBufferSource;
     if (!getBufferSource(raw, "iv", ivBufferSource, context, error))
@@ -622,7 +624,7 @@
     DOMArrayPiece iv(ivBufferSource);
     DOMArrayPiece additionalData(additionalDataBufferSource, DOMArrayPiece::AllowNullPointToNullWithZeroSize);
 
-    params = adoptPtr(new WebCryptoAesGcmParams(iv.bytes(), iv.byteLength(), hasAdditionalData, additionalData.bytes(), additionalData.byteLength(), hasTagLength, tagLength));
+    params = wrapUnique(new WebCryptoAesGcmParams(iv.bytes(), iv.byteLength(), hasAdditionalData, additionalData.bytes(), additionalData.byteLength(), hasTagLength, tagLength));
     return true;
 }
 
@@ -631,7 +633,7 @@
 //     dictionary RsaOaepParams : Algorithm {
 //       BufferSource label;
 //     };
-bool parseRsaOaepParams(const Dictionary& raw, OwnPtr<WebCryptoAlgorithmParams>& params, const ErrorContext& context, AlgorithmError* error)
+bool parseRsaOaepParams(const Dictionary& raw, std::unique_ptr<WebCryptoAlgorithmParams>& params, const ErrorContext& context, AlgorithmError* error)
 {
     bool hasLabel;
     BufferSource labelBufferSource;
@@ -639,7 +641,7 @@
         return false;
 
     DOMArrayPiece label(labelBufferSource, DOMArrayPiece::AllowNullPointToNullWithZeroSize);
-    params = adoptPtr(new WebCryptoRsaOaepParams(hasLabel, label.bytes(), label.byteLength()));
+    params = wrapUnique(new WebCryptoRsaOaepParams(hasLabel, label.bytes(), label.byteLength()));
     return true;
 }
 
@@ -648,13 +650,13 @@
 //     dictionary RsaPssParams : Algorithm {
 //       [EnforceRange] required unsigned long saltLength;
 //     };
-bool parseRsaPssParams(const Dictionary& raw, OwnPtr<WebCryptoAlgorithmParams>& params, const ErrorContext& context, AlgorithmError* error)
+bool parseRsaPssParams(const Dictionary& raw, std::unique_ptr<WebCryptoAlgorithmParams>& params, const ErrorContext& context, AlgorithmError* error)
 {
     uint32_t saltLengthBytes;
     if (!getUint32(raw, "saltLength", saltLengthBytes, context, error))
         return false;
 
-    params = adoptPtr(new WebCryptoRsaPssParams(saltLengthBytes));
+    params = wrapUnique(new WebCryptoRsaPssParams(saltLengthBytes));
     return true;
 }
 
@@ -663,13 +665,13 @@
 //     dictionary EcdsaParams : Algorithm {
 //       required HashAlgorithmIdentifier hash;
 //     };
-bool parseEcdsaParams(const Dictionary& raw, OwnPtr<WebCryptoAlgorithmParams>& params, const ErrorContext& context, AlgorithmError* error)
+bool parseEcdsaParams(const Dictionary& raw, std::unique_ptr<WebCryptoAlgorithmParams>& params, const ErrorContext& context, AlgorithmError* error)
 {
     WebCryptoAlgorithm hash;
     if (!parseHash(raw, hash, context, error))
         return false;
 
-    params = adoptPtr(new WebCryptoEcdsaParams(hash));
+    params = wrapUnique(new WebCryptoEcdsaParams(hash));
     return true;
 }
 
@@ -711,13 +713,13 @@
 //     dictionary EcKeyGenParams : Algorithm {
 //       required NamedCurve namedCurve;
 //     };
-bool parseEcKeyGenParams(const Dictionary& raw, OwnPtr<WebCryptoAlgorithmParams>& params, const ErrorContext& context, AlgorithmError* error)
+bool parseEcKeyGenParams(const Dictionary& raw, std::unique_ptr<WebCryptoAlgorithmParams>& params, const ErrorContext& context, AlgorithmError* error)
 {
     WebCryptoNamedCurve namedCurve;
     if (!parseNamedCurve(raw, namedCurve, context, error))
         return false;
 
-    params = adoptPtr(new WebCryptoEcKeyGenParams(namedCurve));
+    params = wrapUnique(new WebCryptoEcKeyGenParams(namedCurve));
     return true;
 }
 
@@ -726,13 +728,13 @@
 //     dictionary EcKeyImportParams : Algorithm {
 //       required NamedCurve namedCurve;
 //     };
-bool parseEcKeyImportParams(const Dictionary& raw, OwnPtr<WebCryptoAlgorithmParams>& params, const ErrorContext& context, AlgorithmError* error)
+bool parseEcKeyImportParams(const Dictionary& raw, std::unique_ptr<WebCryptoAlgorithmParams>& params, const ErrorContext& context, AlgorithmError* error)
 {
     WebCryptoNamedCurve namedCurve;
     if (!parseNamedCurve(raw, namedCurve, context, error))
         return false;
 
-    params = adoptPtr(new WebCryptoEcKeyImportParams(namedCurve));
+    params = wrapUnique(new WebCryptoEcKeyImportParams(namedCurve));
     return true;
 }
 
@@ -741,7 +743,7 @@
 //     dictionary EcdhKeyDeriveParams : Algorithm {
 //       required CryptoKey public;
 //     };
-bool parseEcdhKeyDeriveParams(const Dictionary& raw, OwnPtr<WebCryptoAlgorithmParams>& params, const ErrorContext& context, AlgorithmError* error)
+bool parseEcdhKeyDeriveParams(const Dictionary& raw, std::unique_ptr<WebCryptoAlgorithmParams>& params, const ErrorContext& context, AlgorithmError* error)
 {
     v8::Local<v8::Value> v8Value;
     if (!raw.get("public", v8Value)) {
@@ -755,7 +757,7 @@
         return false;
     }
 
-    params = adoptPtr(new WebCryptoEcdhKeyDeriveParams(cryptoKey->key()));
+    params = wrapUnique(new WebCryptoEcdhKeyDeriveParams(cryptoKey->key()));
     return true;
 }
 
@@ -766,7 +768,7 @@
 //       [EnforceRange] required unsigned long iterations;
 //       required HashAlgorithmIdentifier hash;
 //     };
-bool parsePbkdf2Params(const Dictionary& raw, OwnPtr<WebCryptoAlgorithmParams>& params, const ErrorContext& context, AlgorithmError* error)
+bool parsePbkdf2Params(const Dictionary& raw, std::unique_ptr<WebCryptoAlgorithmParams>& params, const ErrorContext& context, AlgorithmError* error)
 {
     BufferSource saltBufferSource;
     if (!getBufferSource(raw, "salt", saltBufferSource, context, error))
@@ -781,7 +783,7 @@
     WebCryptoAlgorithm hash;
     if (!parseHash(raw, hash, context, error))
         return false;
-    params = adoptPtr(new WebCryptoPbkdf2Params(hash, salt.bytes(), salt.byteLength(), iterations));
+    params = wrapUnique(new WebCryptoPbkdf2Params(hash, salt.bytes(), salt.byteLength(), iterations));
     return true;
 }
 
@@ -790,13 +792,13 @@
 //    dictionary AesDerivedKeyParams : Algorithm {
 //      [EnforceRange] required unsigned short length;
 //    };
-bool parseAesDerivedKeyParams(const Dictionary& raw, OwnPtr<WebCryptoAlgorithmParams>& params, const ErrorContext& context, AlgorithmError* error)
+bool parseAesDerivedKeyParams(const Dictionary& raw, std::unique_ptr<WebCryptoAlgorithmParams>& params, const ErrorContext& context, AlgorithmError* error)
 {
     uint16_t length;
     if (!getUint16(raw, "length", length, context, error))
         return false;
 
-    params = adoptPtr(new WebCryptoAesDerivedKeyParams(length));
+    params = wrapUnique(new WebCryptoAesDerivedKeyParams(length));
     return true;
 }
 
@@ -812,7 +814,7 @@
 //      required BufferSource salt;
 //      required BufferSource info;
 //    };
-bool parseHkdfParams(const Dictionary& raw, OwnPtr<WebCryptoAlgorithmParams>& params, const ErrorContext& context, AlgorithmError* error)
+bool parseHkdfParams(const Dictionary& raw, std::unique_ptr<WebCryptoAlgorithmParams>& params, const ErrorContext& context, AlgorithmError* error)
 {
     WebCryptoAlgorithm hash;
     if (!parseHash(raw, hash, context, error))
@@ -827,11 +829,11 @@
     DOMArrayPiece salt(saltBufferSource);
     DOMArrayPiece info(infoBufferSource);
 
-    params = adoptPtr(new WebCryptoHkdfParams(hash, salt.bytes(), salt.byteLength(), info.bytes(), info.byteLength()));
+    params = wrapUnique(new WebCryptoHkdfParams(hash, salt.bytes(), salt.byteLength(), info.bytes(), info.byteLength()));
     return true;
 }
 
-bool parseAlgorithmParams(const Dictionary& raw, WebCryptoAlgorithmParamsType type, OwnPtr<WebCryptoAlgorithmParams>& params, ErrorContext& context, AlgorithmError* error)
+bool parseAlgorithmParams(const Dictionary& raw, WebCryptoAlgorithmParamsType type, std::unique_ptr<WebCryptoAlgorithmParams>& params, ErrorContext& context, AlgorithmError* error)
 {
     switch (type) {
     case WebCryptoAlgorithmParamsTypeNone:
@@ -942,7 +944,7 @@
 
     WebCryptoAlgorithmParamsType paramsType = static_cast<WebCryptoAlgorithmParamsType>(algorithmInfo->operationToParamsType[op]);
 
-    OwnPtr<WebCryptoAlgorithmParams> params;
+    std::unique_ptr<WebCryptoAlgorithmParams> params;
     if (!parseAlgorithmParams(raw, paramsType, params, context, error))
         return false;
 
diff --git a/third_party/WebKit/Source/modules/csspaint/CSSPaintDefinition.cpp b/third_party/WebKit/Source/modules/csspaint/CSSPaintDefinition.cpp
index 41059bb..c957321 100644
--- a/third_party/WebKit/Source/modules/csspaint/CSSPaintDefinition.cpp
+++ b/third_party/WebKit/Source/modules/csspaint/CSSPaintDefinition.cpp
@@ -17,6 +17,7 @@
 #include "platform/graphics/ImageBuffer.h"
 #include "platform/graphics/PaintGeneratedImage.h"
 #include "platform/graphics/RecordingImageBufferSurface.h"
+#include "wtf/PtrUtil.h"
 
 namespace blink {
 
@@ -55,7 +56,7 @@
     DCHECK(layoutObject.node());
 
     PaintRenderingContext2D* renderingContext = PaintRenderingContext2D::create(
-        ImageBuffer::create(adoptPtr(new RecordingImageBufferSurface(size))));
+        ImageBuffer::create(wrapUnique(new RecordingImageBufferSurface(size))));
     Geometry* geometry = Geometry::create(size);
     StylePropertyMap* styleMap = FilteredComputedStylePropertyMap::create(
         CSSComputedStyleDeclaration::create(layoutObject.node()),
diff --git a/third_party/WebKit/Source/modules/csspaint/PaintRenderingContext2D.cpp b/third_party/WebKit/Source/modules/csspaint/PaintRenderingContext2D.cpp
index 3d887ec..2d975bb 100644
--- a/third_party/WebKit/Source/modules/csspaint/PaintRenderingContext2D.cpp
+++ b/third_party/WebKit/Source/modules/csspaint/PaintRenderingContext2D.cpp
@@ -5,10 +5,11 @@
 #include "modules/csspaint/PaintRenderingContext2D.h"
 
 #include "platform/graphics/ImageBuffer.h"
+#include <memory>
 
 namespace blink {
 
-PaintRenderingContext2D::PaintRenderingContext2D(PassOwnPtr<ImageBuffer> imageBuffer)
+PaintRenderingContext2D::PaintRenderingContext2D(std::unique_ptr<ImageBuffer> imageBuffer)
     : m_imageBuffer(std::move(imageBuffer))
 {
     m_clipAntialiasing = AntiAliased;
diff --git a/third_party/WebKit/Source/modules/csspaint/PaintRenderingContext2D.h b/third_party/WebKit/Source/modules/csspaint/PaintRenderingContext2D.h
index 55ab09b..03b3fa6 100644
--- a/third_party/WebKit/Source/modules/csspaint/PaintRenderingContext2D.h
+++ b/third_party/WebKit/Source/modules/csspaint/PaintRenderingContext2D.h
@@ -9,6 +9,7 @@
 #include "modules/ModulesExport.h"
 #include "modules/canvas2d/BaseRenderingContext2D.h"
 #include "platform/graphics/ImageBuffer.h"
+#include <memory>
 
 class SkCanvas;
 
@@ -22,7 +23,7 @@
     USING_GARBAGE_COLLECTED_MIXIN(PaintRenderingContext2D);
     WTF_MAKE_NONCOPYABLE(PaintRenderingContext2D);
 public:
-    static PaintRenderingContext2D* create(PassOwnPtr<ImageBuffer> imageBuffer)
+    static PaintRenderingContext2D* create(std::unique_ptr<ImageBuffer> imageBuffer)
     {
         return new PaintRenderingContext2D(std::move(imageBuffer));
     }
@@ -67,9 +68,9 @@
     bool isContextLost() const final { return false; }
 
 private:
-    explicit PaintRenderingContext2D(PassOwnPtr<ImageBuffer>);
+    explicit PaintRenderingContext2D(std::unique_ptr<ImageBuffer>);
 
-    OwnPtr<ImageBuffer> m_imageBuffer;
+    std::unique_ptr<ImageBuffer> m_imageBuffer;
 };
 
 } // namespace blink
diff --git a/third_party/WebKit/Source/modules/csspaint/PaintWorkletTest.cpp b/third_party/WebKit/Source/modules/csspaint/PaintWorkletTest.cpp
index eb7740a..05f4c79 100644
--- a/third_party/WebKit/Source/modules/csspaint/PaintWorkletTest.cpp
+++ b/third_party/WebKit/Source/modules/csspaint/PaintWorkletTest.cpp
@@ -13,7 +13,7 @@
 #include "modules/csspaint/PaintWorkletGlobalScope.h"
 #include "modules/csspaint/WindowPaintWorklet.h"
 #include "testing/gtest/include/gtest/gtest.h"
-#include "wtf/OwnPtr.h"
+#include <memory>
 
 namespace blink {
 
@@ -39,7 +39,7 @@
     }
 
 protected:
-    OwnPtr<DummyPageHolder> m_page;
+    std::unique_ptr<DummyPageHolder> m_page;
 };
 
 TEST_F(PaintWorkletTest, GarbageCollectionOfCSSPaintDefinition)
diff --git a/third_party/WebKit/Source/modules/encoding/TextDecoder.h b/third_party/WebKit/Source/modules/encoding/TextDecoder.h
index ccbab4d..5118a26b 100644
--- a/third_party/WebKit/Source/modules/encoding/TextDecoder.h
+++ b/third_party/WebKit/Source/modules/encoding/TextDecoder.h
@@ -39,6 +39,7 @@
 #include "wtf/text/TextCodec.h"
 #include "wtf/text/TextEncoding.h"
 #include "wtf/text/WTFString.h"
+#include <memory>
 
 namespace blink {
 
@@ -67,7 +68,7 @@
     String decode(const char* start, size_t length, const TextDecodeOptions&, ExceptionState&);
 
     WTF::TextEncoding m_encoding;
-    OwnPtr<WTF::TextCodec> m_codec;
+    std::unique_ptr<WTF::TextCodec> m_codec;
     bool m_fatal;
     bool m_ignoreBOM;
     bool m_bomSeen;
diff --git a/third_party/WebKit/Source/modules/encoding/TextEncoder.h b/third_party/WebKit/Source/modules/encoding/TextEncoder.h
index d8cd446..02dc49b 100644
--- a/third_party/WebKit/Source/modules/encoding/TextEncoder.h
+++ b/third_party/WebKit/Source/modules/encoding/TextEncoder.h
@@ -37,6 +37,7 @@
 #include "wtf/text/TextCodec.h"
 #include "wtf/text/TextEncoding.h"
 #include "wtf/text/WTFString.h"
+#include <memory>
 
 namespace blink {
 
@@ -59,7 +60,7 @@
     TextEncoder(const WTF::TextEncoding&);
 
     WTF::TextEncoding m_encoding;
-    OwnPtr<WTF::TextCodec> m_codec;
+    std::unique_ptr<WTF::TextCodec> m_codec;
 };
 
 } // namespace blink
diff --git a/third_party/WebKit/Source/modules/encryptedmedia/MediaKeySession.cpp b/third_party/WebKit/Source/modules/encryptedmedia/MediaKeySession.cpp
index a8c49763..60426813 100644
--- a/third_party/WebKit/Source/modules/encryptedmedia/MediaKeySession.cpp
+++ b/third_party/WebKit/Source/modules/encryptedmedia/MediaKeySession.cpp
@@ -50,6 +50,7 @@
 #include "public/platform/WebString.h"
 #include "public/platform/WebURL.h"
 #include "wtf/ASCIICType.h"
+#include "wtf/PtrUtil.h"
 #include <cmath>
 #include <limits>
 
@@ -331,7 +332,7 @@
     // initializeNewSession() is called in response to the user calling
     // generateRequest().
     WebContentDecryptionModule* cdm = mediaKeys->contentDecryptionModule();
-    m_session = adoptPtr(cdm->createSession());
+    m_session = wrapUnique(cdm->createSession());
     m_session->setClientInterface(this);
 
     // From https://w3c.github.io/encrypted-media/#createSession:
diff --git a/third_party/WebKit/Source/modules/encryptedmedia/MediaKeySession.h b/third_party/WebKit/Source/modules/encryptedmedia/MediaKeySession.h
index 8fcfaf9..018d75d 100644
--- a/third_party/WebKit/Source/modules/encryptedmedia/MediaKeySession.h
+++ b/third_party/WebKit/Source/modules/encryptedmedia/MediaKeySession.h
@@ -36,6 +36,7 @@
 #include "platform/heap/Handle.h"
 #include "public/platform/WebContentDecryptionModuleSession.h"
 #include "public/platform/WebEncryptedMediaTypes.h"
+#include <memory>
 
 namespace blink {
 
@@ -118,7 +119,7 @@
     void finishLoad();
 
     Member<GenericEventQueue> m_asyncEventQueue;
-    OwnPtr<WebContentDecryptionModuleSession> m_session;
+    std::unique_ptr<WebContentDecryptionModuleSession> m_session;
 
     // Used to determine if MediaKeys is still active.
     WeakMember<MediaKeys> m_mediaKeys;
diff --git a/third_party/WebKit/Source/modules/encryptedmedia/MediaKeySystemAccess.cpp b/third_party/WebKit/Source/modules/encryptedmedia/MediaKeySystemAccess.cpp
index 9485c91..3c9dd43 100644
--- a/third_party/WebKit/Source/modules/encryptedmedia/MediaKeySystemAccess.cpp
+++ b/third_party/WebKit/Source/modules/encryptedmedia/MediaKeySystemAccess.cpp
@@ -18,6 +18,8 @@
 #include "public/platform/WebContentDecryptionModule.h"
 #include "public/platform/WebEncryptedMediaTypes.h"
 #include "public/platform/WebMediaKeySystemConfiguration.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
@@ -48,7 +50,7 @@
     {
         // NOTE: Continued from step 2.8 of createMediaKeys().
         // 2.9. Let media keys be a new MediaKeys object.
-        MediaKeys* mediaKeys = MediaKeys::create(getExecutionContext(), m_supportedSessionTypes, adoptPtr(cdm));
+        MediaKeys* mediaKeys = MediaKeys::create(getExecutionContext(), m_supportedSessionTypes, wrapUnique(cdm));
 
         // 2.10. Resolve promise with media keys.
         resolve(mediaKeys);
@@ -105,7 +107,7 @@
 
 } // namespace
 
-MediaKeySystemAccess::MediaKeySystemAccess(const String& keySystem, PassOwnPtr<WebContentDecryptionModuleAccess> access)
+MediaKeySystemAccess::MediaKeySystemAccess(const String& keySystem, std::unique_ptr<WebContentDecryptionModuleAccess> access)
     : m_keySystem(keySystem)
     , m_access(std::move(access))
 {
diff --git a/third_party/WebKit/Source/modules/encryptedmedia/MediaKeySystemAccess.h b/third_party/WebKit/Source/modules/encryptedmedia/MediaKeySystemAccess.h
index c1c4e13c..e5c4f411 100644
--- a/third_party/WebKit/Source/modules/encryptedmedia/MediaKeySystemAccess.h
+++ b/third_party/WebKit/Source/modules/encryptedmedia/MediaKeySystemAccess.h
@@ -10,6 +10,7 @@
 #include "modules/encryptedmedia/MediaKeySystemConfiguration.h"
 #include "public/platform/WebContentDecryptionModuleAccess.h"
 #include "wtf/Forward.h"
+#include <memory>
 
 namespace blink {
 
@@ -17,7 +18,7 @@
     DEFINE_WRAPPERTYPEINFO();
 
 public:
-    MediaKeySystemAccess(const String& keySystem, PassOwnPtr<WebContentDecryptionModuleAccess>);
+    MediaKeySystemAccess(const String& keySystem, std::unique_ptr<WebContentDecryptionModuleAccess>);
     virtual ~MediaKeySystemAccess();
 
     const String& keySystem() const { return m_keySystem; }
@@ -28,7 +29,7 @@
 
 private:
     const String m_keySystem;
-    OwnPtr<WebContentDecryptionModuleAccess> m_access;
+    std::unique_ptr<WebContentDecryptionModuleAccess> m_access;
 };
 
 } // namespace blink
diff --git a/third_party/WebKit/Source/modules/encryptedmedia/MediaKeys.cpp b/third_party/WebKit/Source/modules/encryptedmedia/MediaKeys.cpp
index 1668a823..cb4bded 100644
--- a/third_party/WebKit/Source/modules/encryptedmedia/MediaKeys.cpp
+++ b/third_party/WebKit/Source/modules/encryptedmedia/MediaKeys.cpp
@@ -38,6 +38,7 @@
 #include "platform/Timer.h"
 #include "public/platform/WebContentDecryptionModule.h"
 #include "wtf/RefPtr.h"
+#include <memory>
 
 #define MEDIA_KEYS_LOG_LEVEL 3
 
@@ -116,14 +117,14 @@
     }
 };
 
-MediaKeys* MediaKeys::create(ExecutionContext* context, const WebVector<WebEncryptedMediaSessionType>& supportedSessionTypes, PassOwnPtr<WebContentDecryptionModule> cdm)
+MediaKeys* MediaKeys::create(ExecutionContext* context, const WebVector<WebEncryptedMediaSessionType>& supportedSessionTypes, std::unique_ptr<WebContentDecryptionModule> cdm)
 {
     MediaKeys* mediaKeys = new MediaKeys(context, supportedSessionTypes, std::move(cdm));
     mediaKeys->suspendIfNeeded();
     return mediaKeys;
 }
 
-MediaKeys::MediaKeys(ExecutionContext* context, const WebVector<WebEncryptedMediaSessionType>& supportedSessionTypes, PassOwnPtr<WebContentDecryptionModule> cdm)
+MediaKeys::MediaKeys(ExecutionContext* context, const WebVector<WebEncryptedMediaSessionType>& supportedSessionTypes, std::unique_ptr<WebContentDecryptionModule> cdm)
     : ActiveScriptWrappable(this)
     , ActiveDOMObject(context)
     , m_supportedSessionTypes(supportedSessionTypes)
diff --git a/third_party/WebKit/Source/modules/encryptedmedia/MediaKeys.h b/third_party/WebKit/Source/modules/encryptedmedia/MediaKeys.h
index 8541355..05f7972 100644
--- a/third_party/WebKit/Source/modules/encryptedmedia/MediaKeys.h
+++ b/third_party/WebKit/Source/modules/encryptedmedia/MediaKeys.h
@@ -38,6 +38,7 @@
 #include "public/platform/WebVector.h"
 #include "wtf/Forward.h"
 #include "wtf/text/WTFString.h"
+#include <memory>
 
 namespace blink {
 
@@ -54,7 +55,7 @@
     USING_GARBAGE_COLLECTED_MIXIN(MediaKeys);
     DEFINE_WRAPPERTYPEINFO();
 public:
-    static MediaKeys* create(ExecutionContext*, const WebVector<WebEncryptedMediaSessionType>& supportedSessionTypes, PassOwnPtr<WebContentDecryptionModule>);
+    static MediaKeys* create(ExecutionContext*, const WebVector<WebEncryptedMediaSessionType>& supportedSessionTypes, std::unique_ptr<WebContentDecryptionModule>);
     ~MediaKeys() override;
 
     MediaKeySession* createSession(ScriptState*, const String& sessionTypeString, ExceptionState&);
@@ -91,14 +92,14 @@
     bool hasPendingActivity() const final;
 
 private:
-    MediaKeys(ExecutionContext*, const WebVector<WebEncryptedMediaSessionType>& supportedSessionTypes, PassOwnPtr<WebContentDecryptionModule>);
+    MediaKeys(ExecutionContext*, const WebVector<WebEncryptedMediaSessionType>& supportedSessionTypes, std::unique_ptr<WebContentDecryptionModule>);
     class PendingAction;
 
     bool sessionTypeSupported(WebEncryptedMediaSessionType);
     void timerFired(Timer<MediaKeys>*);
 
     const WebVector<WebEncryptedMediaSessionType> m_supportedSessionTypes;
-    OwnPtr<WebContentDecryptionModule> m_cdm;
+    std::unique_ptr<WebContentDecryptionModule> m_cdm;
 
     // Keep track of the HTMLMediaElement that references this object. Keeping
     // a WeakMember so that HTMLMediaElement's lifetime isn't dependent on
diff --git a/third_party/WebKit/Source/modules/encryptedmedia/NavigatorRequestMediaKeySystemAccess.cpp b/third_party/WebKit/Source/modules/encryptedmedia/NavigatorRequestMediaKeySystemAccess.cpp
index dd0af18..6977f4cc 100644
--- a/third_party/WebKit/Source/modules/encryptedmedia/NavigatorRequestMediaKeySystemAccess.cpp
+++ b/third_party/WebKit/Source/modules/encryptedmedia/NavigatorRequestMediaKeySystemAccess.cpp
@@ -24,6 +24,7 @@
 #include "public/platform/WebMediaKeySystemConfiguration.h"
 #include "public/platform/WebMediaKeySystemMediaCapability.h"
 #include "public/platform/WebVector.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/Vector.h"
 #include "wtf/text/WTFString.h"
 #include <algorithm>
@@ -167,7 +168,7 @@
 {
     checkEmptyCodecs(access->getConfiguration());
 
-    m_resolver->resolve(new MediaKeySystemAccess(m_keySystem, adoptPtr(access)));
+    m_resolver->resolve(new MediaKeySystemAccess(m_keySystem, wrapUnique(access)));
     m_resolver.clear();
 }
 
diff --git a/third_party/WebKit/Source/modules/fetch/Body.cpp b/third_party/WebKit/Source/modules/fetch/Body.cpp
index 239d6e6..d7d78ec 100644
--- a/third_party/WebKit/Source/modules/fetch/Body.cpp
+++ b/third_party/WebKit/Source/modules/fetch/Body.cpp
@@ -15,9 +15,9 @@
 #include "modules/fetch/BodyStreamBuffer.h"
 #include "modules/fetch/FetchDataLoader.h"
 #include "public/platform/WebDataConsumerHandle.h"
-#include "wtf/OwnPtr.h"
 #include "wtf/PassRefPtr.h"
 #include "wtf/RefPtr.h"
+#include <memory>
 
 namespace blink {
 
@@ -141,7 +141,7 @@
     if (bodyBuffer()) {
         bodyBuffer()->startLoading(FetchDataLoader::createLoaderAsBlobHandle(mimeType()), new BodyBlobConsumer(resolver));
     } else {
-        OwnPtr<BlobData> blobData = BlobData::create();
+        std::unique_ptr<BlobData> blobData = BlobData::create();
         blobData->setContentType(mimeType());
         resolver->resolve(Blob::create(BlobDataHandle::create(std::move(blobData), 0)));
     }
diff --git a/third_party/WebKit/Source/modules/fetch/BodyStreamBuffer.cpp b/third_party/WebKit/Source/modules/fetch/BodyStreamBuffer.cpp
index 0ddba08..a339b1e 100644
--- a/third_party/WebKit/Source/modules/fetch/BodyStreamBuffer.cpp
+++ b/third_party/WebKit/Source/modules/fetch/BodyStreamBuffer.cpp
@@ -20,6 +20,7 @@
 #include "platform/RuntimeEnabledFeatures.h"
 #include "platform/blob/BlobData.h"
 #include "platform/network/EncodedFormData.h"
+#include <memory>
 
 namespace blink {
 
@@ -97,7 +98,7 @@
     Member<FetchDataLoader::Client> m_client;
 };
 
-BodyStreamBuffer::BodyStreamBuffer(ScriptState* scriptState, PassOwnPtr<FetchDataConsumerHandle> handle)
+BodyStreamBuffer::BodyStreamBuffer(ScriptState* scriptState, std::unique_ptr<FetchDataConsumerHandle> handle)
     : UnderlyingSourceBase(scriptState)
     , m_scriptState(scriptState)
     , m_handle(std::move(handle))
@@ -214,7 +215,7 @@
 {
     ASSERT(!m_loader);
     ASSERT(m_scriptState->contextIsValid());
-    OwnPtr<FetchDataConsumerHandle> handle = releaseHandle();
+    std::unique_ptr<FetchDataConsumerHandle> handle = releaseHandle();
     m_loader = loader;
     loader->start(handle.get(), new LoaderClient(m_scriptState->getExecutionContext(), this, client));
 }
@@ -234,8 +235,8 @@
         *branch2 = new BodyStreamBuffer(m_scriptState.get(), stream2);
         return;
     }
-    OwnPtr<FetchDataConsumerHandle> handle = releaseHandle();
-    OwnPtr<FetchDataConsumerHandle> handle1, handle2;
+    std::unique_ptr<FetchDataConsumerHandle> handle = releaseHandle();
+    std::unique_ptr<FetchDataConsumerHandle> handle1, handle2;
     DataConsumerTee::create(m_scriptState->getExecutionContext(), std::move(handle), &handle1, &handle2);
     *branch1 = new BodyStreamBuffer(m_scriptState.get(), std::move(handle1));
     *branch2 = new BodyStreamBuffer(m_scriptState.get(), std::move(handle2));
@@ -449,7 +450,7 @@
     m_loader = nullptr;
 }
 
-PassOwnPtr<FetchDataConsumerHandle> BodyStreamBuffer::releaseHandle()
+std::unique_ptr<FetchDataConsumerHandle> BodyStreamBuffer::releaseHandle()
 {
     DCHECK(!isStreamLocked());
     DCHECK(!isStreamDisturbed());
@@ -469,7 +470,7 @@
     // We need to call these before calling closeAndLockAndDisturb.
     const bool isClosed = isStreamClosed();
     const bool isErrored = isStreamErrored();
-    OwnPtr<FetchDataConsumerHandle> handle = std::move(m_handle);
+    std::unique_ptr<FetchDataConsumerHandle> handle = std::move(m_handle);
 
     closeAndLockAndDisturb();
 
diff --git a/third_party/WebKit/Source/modules/fetch/BodyStreamBuffer.h b/third_party/WebKit/Source/modules/fetch/BodyStreamBuffer.h
index 2ef8bc9..ba0226b 100644
--- a/third_party/WebKit/Source/modules/fetch/BodyStreamBuffer.h
+++ b/third_party/WebKit/Source/modules/fetch/BodyStreamBuffer.h
@@ -17,8 +17,7 @@
 #include "modules/fetch/FetchDataLoader.h"
 #include "platform/heap/Handle.h"
 #include "public/platform/WebDataConsumerHandle.h"
-#include "wtf/OwnPtr.h"
-#include "wtf/PassOwnPtr.h"
+#include <memory>
 
 namespace blink {
 
@@ -32,7 +31,7 @@
     // Needed because we have to release |m_reader| promptly.
     EAGERLY_FINALIZE();
     // |handle| cannot be null and cannot be locked.
-    BodyStreamBuffer(ScriptState*, PassOwnPtr<FetchDataConsumerHandle> /* handle */);
+    BodyStreamBuffer(ScriptState*, std::unique_ptr<FetchDataConsumerHandle> /* handle */);
     // |ReadableStreamOperations::isReadableStream(stream)| must hold.
     BodyStreamBuffer(ScriptState*, ScriptValue stream);
 
@@ -81,11 +80,11 @@
     void processData();
     void endLoading();
     void stopLoading();
-    PassOwnPtr<FetchDataConsumerHandle> releaseHandle();
+    std::unique_ptr<FetchDataConsumerHandle> releaseHandle();
 
     RefPtr<ScriptState> m_scriptState;
-    OwnPtr<FetchDataConsumerHandle> m_handle;
-    OwnPtr<FetchDataConsumerHandle::Reader> m_reader;
+    std::unique_ptr<FetchDataConsumerHandle> m_handle;
+    std::unique_ptr<FetchDataConsumerHandle::Reader> m_reader;
     Member<ReadableByteStream> m_stream;
     // We need this member to keep it alive while loading.
     Member<FetchDataLoader> m_loader;
diff --git a/third_party/WebKit/Source/modules/fetch/BodyStreamBufferTest.cpp b/third_party/WebKit/Source/modules/fetch/BodyStreamBufferTest.cpp
index c7869ca2..defd829 100644
--- a/third_party/WebKit/Source/modules/fetch/BodyStreamBufferTest.cpp
+++ b/third_party/WebKit/Source/modules/fetch/BodyStreamBufferTest.cpp
@@ -15,7 +15,8 @@
 #include "platform/testing/UnitTestHelpers.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
-#include "wtf/OwnPtr.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
@@ -31,7 +32,7 @@
 
 class FakeLoaderFactory : public FetchBlobDataConsumerHandle::LoaderFactory {
 public:
-    PassOwnPtr<ThreadableLoader> create(ExecutionContext&, ThreadableLoaderClient*, const ThreadableLoaderOptions&, const ResourceLoaderOptions&) override
+    std::unique_ptr<ThreadableLoader> create(ExecutionContext&, ThreadableLoaderClient*, const ThreadableLoaderOptions&, const ResourceLoaderOptions&) override
     {
         ASSERT_NOT_REACHED();
         return nullptr;
@@ -50,7 +51,7 @@
     ScriptState* getScriptState() { return ScriptState::forMainWorld(m_page->document().frame()); }
     ExecutionContext* getExecutionContext() { return &m_page->document(); }
 
-    OwnPtr<DummyPageHolder> m_page;
+    std::unique_ptr<DummyPageHolder> m_page;
 
     ScriptValue eval(const char* s)
     {
@@ -93,7 +94,7 @@
     EXPECT_CALL(*client2, didFetchDataLoadedString(String("hello, world")));
     EXPECT_CALL(checkpoint, Call(4));
 
-    OwnPtr<DataConsumerHandleTestUtil::ReplayingHandle> handle = DataConsumerHandleTestUtil::ReplayingHandle::create();
+    std::unique_ptr<DataConsumerHandleTestUtil::ReplayingHandle> handle = DataConsumerHandleTestUtil::ReplayingHandle::create();
     handle->add(DataConsumerHandleTestUtil::Command(DataConsumerHandleTestUtil::Command::Data, "hello, "));
     handle->add(DataConsumerHandleTestUtil::Command(DataConsumerHandleTestUtil::Command::Data, "world"));
     handle->add(DataConsumerHandleTestUtil::Command(DataConsumerHandleTestUtil::Command::Done));
@@ -173,7 +174,7 @@
 
 TEST_F(BodyStreamBufferTest, DrainAsBlobDataHandle)
 {
-    OwnPtr<BlobData> data = BlobData::create();
+    std::unique_ptr<BlobData> data = BlobData::create();
     data->appendText("hello", false);
     auto size = data->length();
     RefPtr<BlobDataHandle> blobDataHandle = BlobDataHandle::create(std::move(data), size);
@@ -193,7 +194,7 @@
 TEST_F(BodyStreamBufferTest, DrainAsBlobDataHandleReturnsNull)
 {
     // This handle is not drainable.
-    OwnPtr<FetchDataConsumerHandle> handle = createFetchDataConsumerHandleFromWebHandle(createWaitingDataConsumerHandle());
+    std::unique_ptr<FetchDataConsumerHandle> handle = createFetchDataConsumerHandleFromWebHandle(createWaitingDataConsumerHandle());
     BodyStreamBuffer* buffer = new BodyStreamBuffer(getScriptState(), std::move(handle));
 
     EXPECT_FALSE(buffer->isStreamLocked());
@@ -249,7 +250,7 @@
 TEST_F(BodyStreamBufferTest, DrainAsFormDataReturnsNull)
 {
     // This handle is not drainable.
-    OwnPtr<FetchDataConsumerHandle> handle = createFetchDataConsumerHandleFromWebHandle(createWaitingDataConsumerHandle());
+    std::unique_ptr<FetchDataConsumerHandle> handle = createFetchDataConsumerHandleFromWebHandle(createWaitingDataConsumerHandle());
     BodyStreamBuffer* buffer = new BodyStreamBuffer(getScriptState(), std::move(handle));
 
     EXPECT_FALSE(buffer->isStreamLocked());
@@ -293,7 +294,7 @@
     EXPECT_CALL(*client, didFetchDataLoadedArrayBufferMock(_)).WillOnce(SaveArg<0>(&arrayBuffer));
     EXPECT_CALL(checkpoint, Call(2));
 
-    OwnPtr<ReplayingHandle> handle = ReplayingHandle::create();
+    std::unique_ptr<ReplayingHandle> handle = ReplayingHandle::create();
     handle->add(Command(Command::Data, "hello"));
     handle->add(Command(Command::Done));
     BodyStreamBuffer* buffer = new BodyStreamBuffer(getScriptState(), createFetchDataConsumerHandleFromWebHandle(std::move(handle)));
@@ -325,7 +326,7 @@
     EXPECT_CALL(*client, didFetchDataLoadedBlobHandleMock(_)).WillOnce(SaveArg<0>(&blobDataHandle));
     EXPECT_CALL(checkpoint, Call(2));
 
-    OwnPtr<ReplayingHandle> handle = ReplayingHandle::create();
+    std::unique_ptr<ReplayingHandle> handle = ReplayingHandle::create();
     handle->add(Command(Command::Data, "hello"));
     handle->add(Command(Command::Done));
     BodyStreamBuffer* buffer = new BodyStreamBuffer(getScriptState(), createFetchDataConsumerHandleFromWebHandle(std::move(handle)));
@@ -355,7 +356,7 @@
     EXPECT_CALL(*client, didFetchDataLoadedString(String("hello")));
     EXPECT_CALL(checkpoint, Call(2));
 
-    OwnPtr<ReplayingHandle> handle = ReplayingHandle::create();
+    std::unique_ptr<ReplayingHandle> handle = ReplayingHandle::create();
     handle->add(Command(Command::Data, "hello"));
     handle->add(Command(Command::Done));
     BodyStreamBuffer* buffer = new BodyStreamBuffer(getScriptState(), createFetchDataConsumerHandleFromWebHandle(std::move(handle)));
@@ -451,7 +452,7 @@
     EXPECT_CALL(*client, didFetchDataLoadedString(String("hello")));
     EXPECT_CALL(checkpoint, Call(2));
 
-    OwnPtr<ReplayingHandle> handle = ReplayingHandle::create();
+    std::unique_ptr<ReplayingHandle> handle = ReplayingHandle::create();
     handle->add(Command(Command::Data, "hello"));
     handle->add(Command(Command::Done));
     Persistent<BodyStreamBuffer> buffer = new BodyStreamBuffer(getScriptState(), createFetchDataConsumerHandleFromWebHandle(std::move(handle)));
@@ -466,7 +467,7 @@
 // TODO(hiroshige): Merge this class into MockFetchDataConsumerHandle.
 class MockFetchDataConsumerHandleWithMockDestructor : public DataConsumerHandleTestUtil::MockFetchDataConsumerHandle {
 public:
-    static PassOwnPtr<::testing::StrictMock<MockFetchDataConsumerHandleWithMockDestructor>> create() { return adoptPtr(new ::testing::StrictMock<MockFetchDataConsumerHandleWithMockDestructor>); }
+    static std::unique_ptr<::testing::StrictMock<MockFetchDataConsumerHandleWithMockDestructor>> create() { return wrapUnique(new ::testing::StrictMock<MockFetchDataConsumerHandleWithMockDestructor>); }
 
     ~MockFetchDataConsumerHandleWithMockDestructor() override
     {
@@ -481,8 +482,8 @@
     ScriptState::Scope scope(getScriptState());
     using MockHandle = MockFetchDataConsumerHandleWithMockDestructor;
     using MockReader = DataConsumerHandleTestUtil::MockFetchDataConsumerReader;
-    OwnPtr<MockHandle> handle = MockHandle::create();
-    OwnPtr<MockReader> reader = MockReader::create();
+    std::unique_ptr<MockHandle> handle = MockHandle::create();
+    std::unique_ptr<MockReader> reader = MockReader::create();
 
     Checkpoint checkpoint;
     InSequence s;
@@ -494,7 +495,7 @@
     EXPECT_CALL(checkpoint, Call(2));
 
     // |reader| is adopted by |obtainReader|.
-    ASSERT_TRUE(reader.leakPtr());
+    ASSERT_TRUE(reader.release());
 
     BodyStreamBuffer* buffer = new BodyStreamBuffer(getScriptState(), std::move(handle));
     checkpoint.Call(1);
diff --git a/third_party/WebKit/Source/modules/fetch/CompositeDataConsumerHandle.cpp b/third_party/WebKit/Source/modules/fetch/CompositeDataConsumerHandle.cpp
index 5679b7b..e1b9266 100644
--- a/third_party/WebKit/Source/modules/fetch/CompositeDataConsumerHandle.cpp
+++ b/third_party/WebKit/Source/modules/fetch/CompositeDataConsumerHandle.cpp
@@ -10,8 +10,10 @@
 #include "public/platform/WebThread.h"
 #include "public/platform/WebTraceLocation.h"
 #include "wtf/Locker.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/ThreadSafeRefCounted.h"
 #include "wtf/ThreadingPrimitives.h"
+#include <memory>
 
 namespace blink {
 
@@ -32,14 +34,14 @@
 class CompositeDataConsumerHandle::Context final : public ThreadSafeRefCounted<Context> {
 public:
     using Token = unsigned;
-    static PassRefPtr<Context> create(PassOwnPtr<WebDataConsumerHandle> handle) { return adoptRef(new Context(std::move(handle))); }
+    static PassRefPtr<Context> create(std::unique_ptr<WebDataConsumerHandle> handle) { return adoptRef(new Context(std::move(handle))); }
     ~Context()
     {
         ASSERT(!m_readerThread);
         ASSERT(!m_reader);
         ASSERT(!m_client);
     }
-    PassOwnPtr<ReaderImpl> obtainReader(Client* client)
+    std::unique_ptr<ReaderImpl> obtainReader(Client* client)
     {
         MutexLocker locker(m_mutex);
         ASSERT(!m_readerThread);
@@ -49,7 +51,7 @@
         m_client = client;
         m_readerThread = Platform::current()->currentThread();
         m_reader = m_handle->obtainReader(m_client);
-        return adoptPtr(new ReaderImpl(this));
+        return wrapUnique(new ReaderImpl(this));
     }
     void detachReader()
     {
@@ -64,7 +66,7 @@
         m_readerThread = nullptr;
         m_client = nullptr;
     }
-    void update(PassOwnPtr<WebDataConsumerHandle> handle)
+    void update(std::unique_ptr<WebDataConsumerHandle> handle)
     {
         MutexLocker locker(m_mutex);
         m_handle = std::move(handle);
@@ -106,7 +108,7 @@
     }
 
 private:
-    explicit Context(PassOwnPtr<WebDataConsumerHandle> handle)
+    explicit Context(std::unique_ptr<WebDataConsumerHandle> handle)
         : m_handle(std::move(handle))
         , m_readerThread(nullptr)
         , m_client(nullptr)
@@ -143,8 +145,8 @@
         m_readerThread->getWebTaskRunner()->postTask(BLINK_FROM_HERE, threadSafeBind(&Context::updateReader, this, m_token));
     }
 
-    OwnPtr<Reader> m_reader;
-    OwnPtr<WebDataConsumerHandle> m_handle;
+    std::unique_ptr<Reader> m_reader;
+    std::unique_ptr<WebDataConsumerHandle> m_handle;
     // Note: Holding a WebThread raw pointer is not generally safe, but we can
     // do that in this case because:
     //  1. Destructing a ReaderImpl when the bound thread ends is a user's
@@ -192,14 +194,14 @@
 
 CompositeDataConsumerHandle::Updater::~Updater() {}
 
-void CompositeDataConsumerHandle::Updater::update(PassOwnPtr<WebDataConsumerHandle> handle)
+void CompositeDataConsumerHandle::Updater::update(std::unique_ptr<WebDataConsumerHandle> handle)
 {
     ASSERT(handle);
     ASSERT(m_thread->isCurrentThread());
     m_context->update(std::move(handle));
 }
 
-CompositeDataConsumerHandle::CompositeDataConsumerHandle(PassOwnPtr<WebDataConsumerHandle> handle, Updater** updater)
+CompositeDataConsumerHandle::CompositeDataConsumerHandle(std::unique_ptr<WebDataConsumerHandle> handle, Updater** updater)
     : m_context(Context::create(std::move(handle)))
 {
     *updater = new Updater(m_context);
@@ -209,7 +211,7 @@
 
 WebDataConsumerHandle::Reader* CompositeDataConsumerHandle::obtainReaderInternal(Client* client)
 {
-    return m_context->obtainReader(client).leakPtr();
+    return m_context->obtainReader(client).release();
 }
 
 } // namespace blink
diff --git a/third_party/WebKit/Source/modules/fetch/CompositeDataConsumerHandle.h b/third_party/WebKit/Source/modules/fetch/CompositeDataConsumerHandle.h
index cc41704d..e2a95d2d 100644
--- a/third_party/WebKit/Source/modules/fetch/CompositeDataConsumerHandle.h
+++ b/third_party/WebKit/Source/modules/fetch/CompositeDataConsumerHandle.h
@@ -9,9 +9,9 @@
 #include "platform/heap/Handle.h"
 #include "public/platform/WebDataConsumerHandle.h"
 #include "wtf/Allocator.h"
-#include "wtf/OwnPtr.h"
-#include "wtf/PassOwnPtr.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/RefPtr.h"
+#include <memory>
 
 namespace blink {
 
@@ -32,7 +32,7 @@
         ~Updater();
 
         // |handle| must not be null and must not be locked.
-        void update(PassOwnPtr<WebDataConsumerHandle> /* handle */);
+        void update(std::unique_ptr<WebDataConsumerHandle> /* handle */);
         DEFINE_INLINE_TRACE() { }
 
     private:
@@ -46,11 +46,11 @@
     // associated updater will be bound to the calling thread.
     // |handle| must not be null and must not be locked.
     template<typename T>
-    static PassOwnPtr<WebDataConsumerHandle> create(PassOwnPtr<WebDataConsumerHandle> handle, T* updater)
+    static std::unique_ptr<WebDataConsumerHandle> create(std::unique_ptr<WebDataConsumerHandle> handle, T* updater)
     {
         ASSERT(handle);
         Updater* u = nullptr;
-        OwnPtr<CompositeDataConsumerHandle> p = adoptPtr(new CompositeDataConsumerHandle(std::move(handle), &u));
+        std::unique_ptr<CompositeDataConsumerHandle> p = wrapUnique(new CompositeDataConsumerHandle(std::move(handle), &u));
         *updater = u;
         return std::move(p);
     }
@@ -62,7 +62,7 @@
 
     const char* debugName() const override { return "CompositeDataConsumerHandle"; }
 
-    CompositeDataConsumerHandle(PassOwnPtr<WebDataConsumerHandle>, Updater**);
+    CompositeDataConsumerHandle(std::unique_ptr<WebDataConsumerHandle>, Updater**);
 
     RefPtr<Context> m_context;
 };
diff --git a/third_party/WebKit/Source/modules/fetch/CompositeDataConsumerHandleTest.cpp b/third_party/WebKit/Source/modules/fetch/CompositeDataConsumerHandleTest.cpp
index 863dd6da..0ff02a9 100644
--- a/third_party/WebKit/Source/modules/fetch/CompositeDataConsumerHandleTest.cpp
+++ b/third_party/WebKit/Source/modules/fetch/CompositeDataConsumerHandleTest.cpp
@@ -14,6 +14,8 @@
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "wtf/Locker.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
@@ -30,7 +32,7 @@
 
 class MockReader : public WebDataConsumerHandle::Reader {
 public:
-    static PassOwnPtr<StrictMock<MockReader>> create() { return adoptPtr(new StrictMock<MockReader>); }
+    static std::unique_ptr<StrictMock<MockReader>> create() { return wrapUnique(new StrictMock<MockReader>); }
 
     using Result = WebDataConsumerHandle::Result;
     using Flags = WebDataConsumerHandle::Flags;
@@ -41,7 +43,7 @@
 
 class MockHandle : public WebDataConsumerHandle {
 public:
-    static PassOwnPtr<StrictMock<MockHandle>> create() { return adoptPtr(new StrictMock<MockHandle>); }
+    static std::unique_ptr<StrictMock<MockHandle>> create() { return wrapUnique(new StrictMock<MockHandle>); }
 
     MOCK_METHOD1(obtainReaderInternal, Reader*(Client*));
 
@@ -57,7 +59,7 @@
     void run()
     {
         ThreadHolder holder(this);
-        m_waitableEvent = adoptPtr(new WaitableEvent());
+        m_waitableEvent = wrapUnique(new WaitableEvent());
 
         postTaskToUpdatingThreadAndWait(BLINK_FROM_HERE, threadSafeBind(&Self::createHandle, this));
         postTaskToReadingThreadAndWait(BLINK_FROM_HERE, threadSafeBind(&Self::obtainReader, this));
@@ -84,7 +86,7 @@
         postTaskToReadingThread(BLINK_FROM_HERE, threadSafeBind(&Self::signalDone, this));
     }
 
-    OwnPtr<WebDataConsumerHandle> m_handle;
+    std::unique_ptr<WebDataConsumerHandle> m_handle;
     CrossThreadPersistent<CompositeDataConsumerHandle::Updater> m_updater;
 };
 
@@ -96,7 +98,7 @@
     void run()
     {
         ThreadHolder holder(this);
-        m_waitableEvent = adoptPtr(new WaitableEvent());
+        m_waitableEvent = wrapUnique(new WaitableEvent());
 
         postTaskToUpdatingThreadAndWait(BLINK_FROM_HERE, threadSafeBind(&Self::createHandle, this));
         postTaskToReadingThreadAndWait(BLINK_FROM_HERE, threadSafeBind(&Self::obtainReader, this));
@@ -125,7 +127,7 @@
         postTaskToReadingThread(BLINK_FROM_HERE, threadSafeBind(&Self::signalDone, this));
     }
 
-    OwnPtr<WebDataConsumerHandle> m_handle;
+    std::unique_ptr<WebDataConsumerHandle> m_handle;
     CrossThreadPersistent<CompositeDataConsumerHandle::Updater> m_updater;
 };
 
@@ -137,7 +139,7 @@
     void run()
     {
         ThreadHolder holder(this);
-        m_waitableEvent = adoptPtr(new WaitableEvent());
+        m_waitableEvent = wrapUnique(new WaitableEvent());
 
         postTaskToUpdatingThreadAndWait(BLINK_FROM_HERE, threadSafeBind(&Self::createHandle, this));
         postTaskToReadingThreadAndWait(BLINK_FROM_HERE, threadSafeBind(&Self::obtainReader, this));
@@ -166,7 +168,7 @@
         postTaskToReadingThread(BLINK_FROM_HERE, threadSafeBind(&Self::signalDone, this));
     }
 
-    OwnPtr<WebDataConsumerHandle> m_handle;
+    std::unique_ptr<WebDataConsumerHandle> m_handle;
     CrossThreadPersistent<CompositeDataConsumerHandle::Updater> m_updater;
 };
 
@@ -178,8 +180,8 @@
     void run()
     {
         ThreadHolder holder(this);
-        m_waitableEvent = adoptPtr(new WaitableEvent());
-        m_updateEvent = adoptPtr(new WaitableEvent());
+        m_waitableEvent = wrapUnique(new WaitableEvent());
+        m_updateEvent = wrapUnique(new WaitableEvent());
 
         postTaskToUpdatingThreadAndWait(BLINK_FROM_HERE, threadSafeBind(&Self::createHandle, this));
         postTaskToReadingThreadAndWait(BLINK_FROM_HERE, threadSafeBind(&Self::obtainReader, this));
@@ -217,9 +219,9 @@
         m_reader = m_handle->obtainReader(&m_client);
     }
 
-    OwnPtr<WebDataConsumerHandle> m_handle;
+    std::unique_ptr<WebDataConsumerHandle> m_handle;
     CrossThreadPersistent<CompositeDataConsumerHandle::Updater> m_updater;
-    OwnPtr<WaitableEvent> m_updateEvent;
+    std::unique_ptr<WaitableEvent> m_updateEvent;
 };
 
 class ThreadingRegistrationUpdateTwiceAtOneTimeTest : public DataConsumerHandleTestUtil::ThreadingTestBase {
@@ -230,8 +232,8 @@
     void run()
     {
         ThreadHolder holder(this);
-        m_waitableEvent = adoptPtr(new WaitableEvent());
-        m_updateEvent = adoptPtr(new WaitableEvent());
+        m_waitableEvent = wrapUnique(new WaitableEvent());
+        m_updateEvent = wrapUnique(new WaitableEvent());
 
         postTaskToUpdatingThreadAndWait(BLINK_FROM_HERE, threadSafeBind(&Self::createHandle, this));
         postTaskToReadingThreadAndWait(BLINK_FROM_HERE, threadSafeBind(&Self::obtainReader, this));
@@ -263,9 +265,9 @@
         postTaskToReadingThread(BLINK_FROM_HERE, threadSafeBind(&Self::signalDone, this));
     }
 
-    OwnPtr<WebDataConsumerHandle> m_handle;
+    std::unique_ptr<WebDataConsumerHandle> m_handle;
     CrossThreadPersistent<CompositeDataConsumerHandle::Updater> m_updater;
-    OwnPtr<WaitableEvent> m_updateEvent;
+    std::unique_ptr<WaitableEvent> m_updateEvent;
 };
 
 TEST(CompositeDataConsumerHandleTest, Read)
@@ -275,10 +277,10 @@
     DataConsumerHandleTestUtil::NoopClient client;
     Checkpoint checkpoint;
 
-    OwnPtr<MockHandle> handle1 = MockHandle::create();
-    OwnPtr<MockHandle> handle2 = MockHandle::create();
-    OwnPtr<MockReader> reader1 = MockReader::create();
-    OwnPtr<MockReader> reader2 = MockReader::create();
+    std::unique_ptr<MockHandle> handle1 = MockHandle::create();
+    std::unique_ptr<MockHandle> handle2 = MockHandle::create();
+    std::unique_ptr<MockReader> reader1 = MockReader::create();
+    std::unique_ptr<MockReader> reader2 = MockReader::create();
 
     InSequence s;
     EXPECT_CALL(checkpoint, Call(0));
@@ -292,13 +294,13 @@
     EXPECT_CALL(checkpoint, Call(4));
 
     // They are adopted by |obtainReader|.
-    ASSERT_TRUE(reader1.leakPtr());
-    ASSERT_TRUE(reader2.leakPtr());
+    ASSERT_TRUE(reader1.release());
+    ASSERT_TRUE(reader2.release());
 
     CompositeDataConsumerHandle::Updater* updater = nullptr;
-    OwnPtr<WebDataConsumerHandle> handle = CompositeDataConsumerHandle::create(std::move(handle1), &updater);
+    std::unique_ptr<WebDataConsumerHandle> handle = CompositeDataConsumerHandle::create(std::move(handle1), &updater);
     checkpoint.Call(0);
-    OwnPtr<WebDataConsumerHandle::Reader> reader = handle->obtainReader(&client);
+    std::unique_ptr<WebDataConsumerHandle::Reader> reader = handle->obtainReader(&client);
     checkpoint.Call(1);
     EXPECT_EQ(kOk, reader->read(buffer, sizeof(buffer), kNone, &size));
     checkpoint.Call(2);
@@ -314,10 +316,10 @@
     size_t size = 0;
     Checkpoint checkpoint;
 
-    OwnPtr<MockHandle> handle1 = MockHandle::create();
-    OwnPtr<MockHandle> handle2 = MockHandle::create();
-    OwnPtr<MockReader> reader1 = MockReader::create();
-    OwnPtr<MockReader> reader2 = MockReader::create();
+    std::unique_ptr<MockHandle> handle1 = MockHandle::create();
+    std::unique_ptr<MockHandle> handle2 = MockHandle::create();
+    std::unique_ptr<MockReader> reader1 = MockReader::create();
+    std::unique_ptr<MockReader> reader2 = MockReader::create();
 
     InSequence s;
     EXPECT_CALL(checkpoint, Call(0));
@@ -335,13 +337,13 @@
     EXPECT_CALL(checkpoint, Call(6));
 
     // They are adopted by |obtainReader|.
-    ASSERT_TRUE(reader1.leakPtr());
-    ASSERT_TRUE(reader2.leakPtr());
+    ASSERT_TRUE(reader1.release());
+    ASSERT_TRUE(reader2.release());
 
     CompositeDataConsumerHandle::Updater* updater = nullptr;
-    OwnPtr<WebDataConsumerHandle> handle = CompositeDataConsumerHandle::create(std::move(handle1), &updater);
+    std::unique_ptr<WebDataConsumerHandle> handle = CompositeDataConsumerHandle::create(std::move(handle1), &updater);
     checkpoint.Call(0);
-    OwnPtr<WebDataConsumerHandle::Reader> reader = handle->obtainReader(nullptr);
+    std::unique_ptr<WebDataConsumerHandle::Reader> reader = handle->obtainReader(nullptr);
     checkpoint.Call(1);
     EXPECT_EQ(kOk, reader->beginRead(&p, kNone, &size));
     checkpoint.Call(2);
@@ -361,12 +363,12 @@
     size_t size = 0;
     Checkpoint checkpoint;
 
-    OwnPtr<MockHandle> handle1 = MockHandle::create();
-    OwnPtr<MockHandle> handle2 = MockHandle::create();
-    OwnPtr<MockHandle> handle3 = MockHandle::create();
-    OwnPtr<MockReader> reader1 = MockReader::create();
-    OwnPtr<MockReader> reader2 = MockReader::create();
-    OwnPtr<MockReader> reader3 = MockReader::create();
+    std::unique_ptr<MockHandle> handle1 = MockHandle::create();
+    std::unique_ptr<MockHandle> handle2 = MockHandle::create();
+    std::unique_ptr<MockHandle> handle3 = MockHandle::create();
+    std::unique_ptr<MockReader> reader1 = MockReader::create();
+    std::unique_ptr<MockReader> reader2 = MockReader::create();
+    std::unique_ptr<MockReader> reader3 = MockReader::create();
 
     InSequence s;
     EXPECT_CALL(checkpoint, Call(0));
@@ -388,14 +390,14 @@
     EXPECT_CALL(checkpoint, Call(8));
 
     // They are adopted by |obtainReader|.
-    ASSERT_TRUE(reader1.leakPtr());
-    ASSERT_TRUE(reader2.leakPtr());
-    ASSERT_TRUE(reader3.leakPtr());
+    ASSERT_TRUE(reader1.release());
+    ASSERT_TRUE(reader2.release());
+    ASSERT_TRUE(reader3.release());
 
     CompositeDataConsumerHandle::Updater* updater = nullptr;
-    OwnPtr<WebDataConsumerHandle> handle = CompositeDataConsumerHandle::create(std::move(handle1), &updater);
+    std::unique_ptr<WebDataConsumerHandle> handle = CompositeDataConsumerHandle::create(std::move(handle1), &updater);
     checkpoint.Call(0);
-    OwnPtr<WebDataConsumerHandle::Reader> reader = handle->obtainReader(nullptr);
+    std::unique_ptr<WebDataConsumerHandle::Reader> reader = handle->obtainReader(nullptr);
     checkpoint.Call(1);
     EXPECT_EQ(kOk, reader->beginRead(&p, kNone, &size));
     checkpoint.Call(2);
diff --git a/third_party/WebKit/Source/modules/fetch/CrossThreadHolder.h b/third_party/WebKit/Source/modules/fetch/CrossThreadHolder.h
index 9492ba1f..12da6c70 100644
--- a/third_party/WebKit/Source/modules/fetch/CrossThreadHolder.h
+++ b/third_party/WebKit/Source/modules/fetch/CrossThreadHolder.h
@@ -10,11 +10,11 @@
 #include "core/dom/ExecutionContext.h"
 #include "public/platform/WebTraceLocation.h"
 #include "wtf/Locker.h"
-#include "wtf/OwnPtr.h"
-#include "wtf/PassOwnPtr.h"
 #include "wtf/PassRefPtr.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/RefPtr.h"
 #include "wtf/ThreadingPrimitives.h"
+#include <memory>
 
 namespace blink {
 
@@ -33,10 +33,10 @@
     // Must be called on the thread where |obj| is created
     // (== the thread of |executionContext|).
     // The current thread must be attached to Oilpan.
-    static PassOwnPtr<CrossThreadHolder<T>> create(ExecutionContext* executionContext, PassOwnPtr<T> obj)
+    static std::unique_ptr<CrossThreadHolder<T>> create(ExecutionContext* executionContext, std::unique_ptr<T> obj)
     {
         ASSERT(executionContext->isContextThread());
-        return adoptPtr(new CrossThreadHolder(executionContext, std::move(obj)));
+        return wrapUnique(new CrossThreadHolder(executionContext, std::move(obj)));
     }
 
     // Can be called from any thread.
@@ -65,7 +65,7 @@
 private:
     // Object graph:
     //                 +------+                          +-----------------+
-    //     T <-OwnPtr- |Bridge| ---------*-------------> |CrossThreadHolder|
+    //     T <-std::unique_ptr- |Bridge| ---------*-------------> |CrossThreadHolder|
     //                 |      | <-CrossThreadPersistent- |                 |
     //                 +------+                          +-----------------+
     //                    |                                    |
@@ -93,7 +93,7 @@
         , public ActiveDOMObject {
         USING_GARBAGE_COLLECTED_MIXIN(Bridge);
     public:
-        Bridge(ExecutionContext* executionContext, PassOwnPtr<T> obj, PassRefPtr<MutexWrapper> mutex, CrossThreadHolder* holder)
+        Bridge(ExecutionContext* executionContext, std::unique_ptr<T> obj, PassRefPtr<MutexWrapper> mutex, CrossThreadHolder* holder)
             : ActiveDOMObject(executionContext)
             , m_obj(std::move(obj))
             , m_mutex(mutex)
@@ -145,7 +145,7 @@
         }
 
 
-        OwnPtr<T> m_obj;
+        std::unique_ptr<T> m_obj;
         // All accesses to |m_holder| must be protected by |m_mutex|.
         RefPtr<MutexWrapper> m_mutex;
         CrossThreadHolder* m_holder;
@@ -159,7 +159,7 @@
         m_bridge.clear();
     }
 
-    CrossThreadHolder(ExecutionContext* executionContext, PassOwnPtr<T> obj)
+    CrossThreadHolder(ExecutionContext* executionContext, std::unique_ptr<T> obj)
         : m_mutex(MutexWrapper::create())
         , m_bridge(new Bridge(executionContext, std::move(obj), m_mutex, this))
     {
diff --git a/third_party/WebKit/Source/modules/fetch/DataConsumerHandleTestUtil.cpp b/third_party/WebKit/Source/modules/fetch/DataConsumerHandleTestUtil.cpp
index efb5391..7b28ea9 100644
--- a/third_party/WebKit/Source/modules/fetch/DataConsumerHandleTestUtil.cpp
+++ b/third_party/WebKit/Source/modules/fetch/DataConsumerHandleTestUtil.cpp
@@ -5,13 +5,15 @@
 #include "modules/fetch/DataConsumerHandleTestUtil.h"
 
 #include "bindings/core/v8/DOMWrapperWorld.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
 DataConsumerHandleTestUtil::Thread::Thread(const char* name, InitializationPolicy initializationPolicy)
     : m_thread(WebThreadSupportingGC::create(name))
     , m_initializationPolicy(initializationPolicy)
-    , m_waitableEvent(adoptPtr(new WaitableEvent()))
+    , m_waitableEvent(wrapUnique(new WaitableEvent()))
 {
     m_thread->postTask(BLINK_FROM_HERE, threadSafeBind(&Thread::initialize, AllowCrossThreadAccess(this)));
     m_waitableEvent->wait();
@@ -26,7 +28,7 @@
 void DataConsumerHandleTestUtil::Thread::initialize()
 {
     if (m_initializationPolicy >= ScriptExecution) {
-        m_isolateHolder = adoptPtr(new gin::IsolateHolder());
+        m_isolateHolder = wrapUnique(new gin::IsolateHolder());
         isolate()->Enter();
     }
     m_thread->initialize();
@@ -165,7 +167,7 @@
     , m_client(nullptr)
     , m_result(ShouldWait)
     , m_isHandleAttached(true)
-    , m_detached(adoptPtr(new WaitableEvent()))
+    , m_detached(wrapUnique(new WaitableEvent()))
 {
 }
 
@@ -229,7 +231,7 @@
     m_context->add(command);
 }
 
-DataConsumerHandleTestUtil::HandleReader::HandleReader(PassOwnPtr<WebDataConsumerHandle> handle, std::unique_ptr<OnFinishedReading> onFinishedReading)
+DataConsumerHandleTestUtil::HandleReader::HandleReader(std::unique_ptr<WebDataConsumerHandle> handle, std::unique_ptr<OnFinishedReading> onFinishedReading)
     : m_reader(handle->obtainReader(this))
     , m_onFinishedReading(std::move(onFinishedReading))
 {
@@ -248,20 +250,20 @@
             break;
         m_data.append(buffer, size);
     }
-    OwnPtr<HandleReadResult> result = adoptPtr(new HandleReadResult(r, m_data));
+    std::unique_ptr<HandleReadResult> result = wrapUnique(new HandleReadResult(r, m_data));
     m_data.clear();
-    Platform::current()->currentThread()->getWebTaskRunner()->postTask(BLINK_FROM_HERE, bind(&HandleReader::runOnFinishedReading, this, passed(std::move(result))));
+    Platform::current()->currentThread()->getWebTaskRunner()->postTask(BLINK_FROM_HERE, WTF::bind(&HandleReader::runOnFinishedReading, this, passed(std::move(result))));
     m_reader = nullptr;
 }
 
-void DataConsumerHandleTestUtil::HandleReader::runOnFinishedReading(PassOwnPtr<HandleReadResult> result)
+void DataConsumerHandleTestUtil::HandleReader::runOnFinishedReading(std::unique_ptr<HandleReadResult> result)
 {
     ASSERT(m_onFinishedReading);
     std::unique_ptr<OnFinishedReading> onFinishedReading(std::move(m_onFinishedReading));
     (*onFinishedReading)(std::move(result));
 }
 
-DataConsumerHandleTestUtil::HandleTwoPhaseReader::HandleTwoPhaseReader(PassOwnPtr<WebDataConsumerHandle> handle, std::unique_ptr<OnFinishedReading> onFinishedReading)
+DataConsumerHandleTestUtil::HandleTwoPhaseReader::HandleTwoPhaseReader(std::unique_ptr<WebDataConsumerHandle> handle, std::unique_ptr<OnFinishedReading> onFinishedReading)
     : m_reader(handle->obtainReader(this))
     , m_onFinishedReading(std::move(onFinishedReading))
 {
@@ -283,13 +285,13 @@
         m_data.append(static_cast<const char*>(buffer), readSize);
         m_reader->endRead(readSize);
     }
-    OwnPtr<HandleReadResult> result = adoptPtr(new HandleReadResult(r, m_data));
+    std::unique_ptr<HandleReadResult> result = wrapUnique(new HandleReadResult(r, m_data));
     m_data.clear();
-    Platform::current()->currentThread()->getWebTaskRunner()->postTask(BLINK_FROM_HERE, bind(&HandleTwoPhaseReader::runOnFinishedReading, this, passed(std::move(result))));
+    Platform::current()->currentThread()->getWebTaskRunner()->postTask(BLINK_FROM_HERE, WTF::bind(&HandleTwoPhaseReader::runOnFinishedReading, this, passed(std::move(result))));
     m_reader = nullptr;
 }
 
-void DataConsumerHandleTestUtil::HandleTwoPhaseReader::runOnFinishedReading(PassOwnPtr<HandleReadResult> result)
+void DataConsumerHandleTestUtil::HandleTwoPhaseReader::runOnFinishedReading(std::unique_ptr<HandleReadResult> result)
 {
     ASSERT(m_onFinishedReading);
     std::unique_ptr<OnFinishedReading> onFinishedReading(std::move(m_onFinishedReading));
diff --git a/third_party/WebKit/Source/modules/fetch/DataConsumerHandleTestUtil.h b/third_party/WebKit/Source/modules/fetch/DataConsumerHandleTestUtil.h
index e629a03..47cb1c70 100644
--- a/third_party/WebKit/Source/modules/fetch/DataConsumerHandleTestUtil.h
+++ b/third_party/WebKit/Source/modules/fetch/DataConsumerHandleTestUtil.h
@@ -20,14 +20,13 @@
 #include "public/platform/WebTraceLocation.h"
 #include "wtf/Deque.h"
 #include "wtf/Locker.h"
-#include "wtf/OwnPtr.h"
-#include "wtf/PassOwnPtr.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/ThreadSafeRefCounted.h"
 #include "wtf/ThreadingPrimitives.h"
 #include "wtf/Vector.h"
-
 #include <gmock/gmock.h>
 #include <gtest/gtest.h>
+#include <memory>
 #include <v8.h>
 
 namespace blink {
@@ -69,11 +68,11 @@
         void initialize();
         void shutdown();
 
-        OwnPtr<WebThreadSupportingGC> m_thread;
+        std::unique_ptr<WebThreadSupportingGC> m_thread;
         const InitializationPolicy m_initializationPolicy;
-        OwnPtr<WaitableEvent> m_waitableEvent;
+        std::unique_ptr<WaitableEvent> m_waitableEvent;
         Persistent<NullExecutionContext> m_executionContext;
-        OwnPtr<gin::IsolateHolder> m_isolateHolder;
+        std::unique_ptr<gin::IsolateHolder> m_isolateHolder;
         RefPtr<ScriptState> m_scriptState;
     };
 
@@ -160,8 +159,8 @@
         public:
             ThreadHolder(ThreadingTestBase* test)
                 : m_context(test->m_context)
-                , m_readingThread(adoptPtr(new Thread("reading thread")))
-                , m_updatingThread(adoptPtr(new Thread("updating thread")))
+                , m_readingThread(wrapUnique(new Thread("reading thread")))
+                , m_updatingThread(wrapUnique(new Thread("updating thread")))
             {
                 m_context->registerThreadHolder(this);
             }
@@ -175,8 +174,8 @@
 
         private:
             RefPtr<Context> m_context;
-            OwnPtr<Thread> m_readingThread;
-            OwnPtr<Thread> m_updatingThread;
+            std::unique_ptr<Thread> m_readingThread;
+            std::unique_ptr<Thread> m_updatingThread;
         };
 
         class ReaderImpl final : public WebDataConsumerHandle::Reader {
@@ -200,9 +199,9 @@
         class DataConsumerHandle final : public WebDataConsumerHandle {
             USING_FAST_MALLOC(DataConsumerHandle);
         public:
-            static PassOwnPtr<WebDataConsumerHandle> create(const String& name, PassRefPtr<Context> context)
+            static std::unique_ptr<WebDataConsumerHandle> create(const String& name, PassRefPtr<Context> context)
             {
-                return adoptPtr(new DataConsumerHandle(name, context));
+                return wrapUnique(new DataConsumerHandle(name, context));
             }
 
         private:
@@ -241,8 +240,8 @@
             : m_context(Context::create()) { }
 
         RefPtr<Context> m_context;
-        OwnPtr<WebDataConsumerHandle::Reader> m_reader;
-        OwnPtr<WaitableEvent> m_waitableEvent;
+        std::unique_ptr<WebDataConsumerHandle::Reader> m_reader;
+        std::unique_ptr<WaitableEvent> m_waitableEvent;
         NoopClient m_client;
     };
 
@@ -251,10 +250,10 @@
         using Self = ThreadingHandleNotificationTest;
         static PassRefPtr<Self> create() { return adoptRef(new Self); }
 
-        void run(PassOwnPtr<WebDataConsumerHandle> handle)
+        void run(std::unique_ptr<WebDataConsumerHandle> handle)
         {
             ThreadHolder holder(this);
-            m_waitableEvent = adoptPtr(new WaitableEvent());
+            m_waitableEvent = wrapUnique(new WaitableEvent());
             m_handle = std::move(handle);
 
             postTaskToReadingThreadAndWait(BLINK_FROM_HERE, threadSafeBind(&Self::obtainReader, this));
@@ -272,7 +271,7 @@
             postTaskToReadingThread(BLINK_FROM_HERE, threadSafeBind(&Self::signalDone, this));
         }
 
-        OwnPtr<WebDataConsumerHandle> m_handle;
+        std::unique_ptr<WebDataConsumerHandle> m_handle;
     };
 
     class ThreadingHandleNoNotificationTest : public ThreadingTestBase, public WebDataConsumerHandle::Client {
@@ -280,10 +279,10 @@
         using Self = ThreadingHandleNoNotificationTest;
         static PassRefPtr<Self> create() { return adoptRef(new Self); }
 
-        void run(PassOwnPtr<WebDataConsumerHandle> handle)
+        void run(std::unique_ptr<WebDataConsumerHandle> handle)
         {
             ThreadHolder holder(this);
-            m_waitableEvent = adoptPtr(new WaitableEvent());
+            m_waitableEvent = wrapUnique(new WaitableEvent());
             m_handle = std::move(handle);
 
             postTaskToReadingThreadAndWait(BLINK_FROM_HERE, threadSafeBind(&Self::obtainReader, this));
@@ -302,12 +301,12 @@
             ASSERT_NOT_REACHED();
         }
 
-        OwnPtr<WebDataConsumerHandle> m_handle;
+        std::unique_ptr<WebDataConsumerHandle> m_handle;
     };
 
     class MockFetchDataConsumerHandle : public FetchDataConsumerHandle {
     public:
-        static PassOwnPtr<::testing::StrictMock<MockFetchDataConsumerHandle>> create() { return adoptPtr(new ::testing::StrictMock<MockFetchDataConsumerHandle>); }
+        static std::unique_ptr<::testing::StrictMock<MockFetchDataConsumerHandle>> create() { return wrapUnique(new ::testing::StrictMock<MockFetchDataConsumerHandle>); }
         MOCK_METHOD1(obtainReaderInternal, Reader*(Client*));
 
     private:
@@ -316,7 +315,7 @@
 
     class MockFetchDataConsumerReader : public FetchDataConsumerHandle::Reader {
     public:
-        static PassOwnPtr<::testing::StrictMock<MockFetchDataConsumerReader>> create() { return adoptPtr(new ::testing::StrictMock<MockFetchDataConsumerReader>); }
+        static std::unique_ptr<::testing::StrictMock<MockFetchDataConsumerReader>> create() { return wrapUnique(new ::testing::StrictMock<MockFetchDataConsumerReader>); }
 
         using Result = WebDataConsumerHandle::Result;
         using Flags = WebDataConsumerHandle::Flags;
@@ -388,7 +387,7 @@
     class ReplayingHandle final : public WebDataConsumerHandle {
         USING_FAST_MALLOC(ReplayingHandle);
     public:
-        static PassOwnPtr<ReplayingHandle> create() { return adoptPtr(new ReplayingHandle()); }
+        static std::unique_ptr<ReplayingHandle> create() { return wrapUnique(new ReplayingHandle()); }
         ~ReplayingHandle();
 
         // Add a command to this handle. This function must be called on the
@@ -425,7 +424,7 @@
             Result m_result;
             bool m_isHandleAttached;
             Mutex m_mutex;
-            OwnPtr<WaitableEvent> m_detached;
+            std::unique_ptr<WaitableEvent> m_detached;
         };
 
         Context* getContext() { return m_context.get(); }
@@ -458,15 +457,15 @@
     class HandleReader final : public WebDataConsumerHandle::Client {
         USING_FAST_MALLOC(HandleReader);
     public:
-        using OnFinishedReading = WTF::Function<void(PassOwnPtr<HandleReadResult>)>;
+        using OnFinishedReading = WTF::Function<void(std::unique_ptr<HandleReadResult>)>;
 
-        HandleReader(PassOwnPtr<WebDataConsumerHandle>, std::unique_ptr<OnFinishedReading>);
+        HandleReader(std::unique_ptr<WebDataConsumerHandle>, std::unique_ptr<OnFinishedReading>);
         void didGetReadable() override;
 
     private:
-        void runOnFinishedReading(PassOwnPtr<HandleReadResult>);
+        void runOnFinishedReading(std::unique_ptr<HandleReadResult>);
 
-        OwnPtr<WebDataConsumerHandle::Reader> m_reader;
+        std::unique_ptr<WebDataConsumerHandle::Reader> m_reader;
         std::unique_ptr<OnFinishedReading> m_onFinishedReading;
         Vector<char> m_data;
     };
@@ -476,15 +475,15 @@
     class HandleTwoPhaseReader final : public WebDataConsumerHandle::Client {
         USING_FAST_MALLOC(HandleTwoPhaseReader);
     public:
-        using OnFinishedReading = WTF::Function<void(PassOwnPtr<HandleReadResult>)>;
+        using OnFinishedReading = WTF::Function<void(std::unique_ptr<HandleReadResult>)>;
 
-        HandleTwoPhaseReader(PassOwnPtr<WebDataConsumerHandle>, std::unique_ptr<OnFinishedReading>);
+        HandleTwoPhaseReader(std::unique_ptr<WebDataConsumerHandle>, std::unique_ptr<OnFinishedReading>);
         void didGetReadable() override;
 
     private:
-        void runOnFinishedReading(PassOwnPtr<HandleReadResult>);
+        void runOnFinishedReading(std::unique_ptr<HandleReadResult>);
 
-        OwnPtr<WebDataConsumerHandle::Reader> m_reader;
+        std::unique_ptr<WebDataConsumerHandle::Reader> m_reader;
         std::unique_ptr<OnFinishedReading> m_onFinishedReading;
         Vector<char> m_data;
     };
@@ -495,9 +494,9 @@
     class HandleReaderRunner final {
         STACK_ALLOCATED();
     public:
-        explicit HandleReaderRunner(PassOwnPtr<WebDataConsumerHandle> handle)
-            : m_thread(adoptPtr(new Thread("reading thread")))
-            , m_event(adoptPtr(new WaitableEvent()))
+        explicit HandleReaderRunner(std::unique_ptr<WebDataConsumerHandle> handle)
+            : m_thread(wrapUnique(new Thread("reading thread")))
+            , m_event(wrapUnique(new WaitableEvent()))
             , m_isDone(false)
         {
             m_thread->thread()->postTask(BLINK_FROM_HERE, threadSafeBind(&HandleReaderRunner::start, AllowCrossThreadAccess(this), passed(std::move(handle))));
@@ -507,7 +506,7 @@
             wait();
         }
 
-        PassOwnPtr<HandleReadResult> wait()
+        std::unique_ptr<HandleReadResult> wait()
         {
             if (m_isDone)
                 return nullptr;
@@ -517,24 +516,24 @@
         }
 
     private:
-        void start(PassOwnPtr<WebDataConsumerHandle> handle)
+        void start(std::unique_ptr<WebDataConsumerHandle> handle)
         {
-            m_handleReader = adoptPtr(new T(std::move(handle), bind<PassOwnPtr<HandleReadResult>>(&HandleReaderRunner::onFinished, this)));
+            m_handleReader = wrapUnique(new T(std::move(handle), WTF::bind<std::unique_ptr<HandleReadResult>>(&HandleReaderRunner::onFinished, this)));
         }
 
-        void onFinished(PassOwnPtr<HandleReadResult> result)
+        void onFinished(std::unique_ptr<HandleReadResult> result)
         {
             m_handleReader = nullptr;
             m_result = std::move(result);
             m_event->signal();
         }
 
-        OwnPtr<Thread> m_thread;
-        OwnPtr<WaitableEvent> m_event;
-        OwnPtr<HandleReadResult> m_result;
+        std::unique_ptr<Thread> m_thread;
+        std::unique_ptr<WaitableEvent> m_event;
+        std::unique_ptr<HandleReadResult> m_result;
         bool m_isDone;
 
-        OwnPtr<T> m_handleReader;
+        std::unique_ptr<T> m_handleReader;
     };
 };
 
diff --git a/third_party/WebKit/Source/modules/fetch/DataConsumerHandleUtil.cpp b/third_party/WebKit/Source/modules/fetch/DataConsumerHandleUtil.cpp
index 34326a17..f53b200 100644
--- a/third_party/WebKit/Source/modules/fetch/DataConsumerHandleUtil.cpp
+++ b/third_party/WebKit/Source/modules/fetch/DataConsumerHandleUtil.cpp
@@ -10,6 +10,8 @@
 #include "public/platform/WebThread.h"
 #include "public/platform/WebTraceLocation.h"
 #include "wtf/Functional.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
@@ -71,11 +73,11 @@
 
 class WebToFetchDataConsumerHandleAdapter : public FetchDataConsumerHandle {
 public:
-    WebToFetchDataConsumerHandleAdapter(PassOwnPtr<WebDataConsumerHandle> handle) : m_handle(std::move(handle)) { }
+    WebToFetchDataConsumerHandleAdapter(std::unique_ptr<WebDataConsumerHandle> handle) : m_handle(std::move(handle)) { }
 private:
     class ReaderImpl final : public FetchDataConsumerHandle::Reader {
     public:
-        ReaderImpl(PassOwnPtr<WebDataConsumerHandle::Reader> reader) : m_reader(std::move(reader)) { }
+        ReaderImpl(std::unique_ptr<WebDataConsumerHandle::Reader> reader) : m_reader(std::move(reader)) { }
         Result read(void* data, size_t size, Flags flags, size_t* readSize) override
         {
             return m_reader->read(data, size, flags, readSize);
@@ -90,36 +92,36 @@
             return m_reader->endRead(readSize);
         }
     private:
-        OwnPtr<WebDataConsumerHandle::Reader> m_reader;
+        std::unique_ptr<WebDataConsumerHandle::Reader> m_reader;
     };
 
     Reader* obtainReaderInternal(Client* client) override { return new ReaderImpl(m_handle->obtainReader(client)); }
 
     const char* debugName() const override { return m_handle->debugName(); }
 
-    OwnPtr<WebDataConsumerHandle> m_handle;
+    std::unique_ptr<WebDataConsumerHandle> m_handle;
 };
 
 } // namespace
 
-PassOwnPtr<WebDataConsumerHandle> createWaitingDataConsumerHandle()
+std::unique_ptr<WebDataConsumerHandle> createWaitingDataConsumerHandle()
 {
-    return adoptPtr(new WaitingHandle);
+    return wrapUnique(new WaitingHandle);
 }
 
-PassOwnPtr<WebDataConsumerHandle> createDoneDataConsumerHandle()
+std::unique_ptr<WebDataConsumerHandle> createDoneDataConsumerHandle()
 {
-    return adoptPtr(new DoneHandle);
+    return wrapUnique(new DoneHandle);
 }
 
-PassOwnPtr<WebDataConsumerHandle> createUnexpectedErrorDataConsumerHandle()
+std::unique_ptr<WebDataConsumerHandle> createUnexpectedErrorDataConsumerHandle()
 {
-    return adoptPtr(new UnexpectedErrorHandle);
+    return wrapUnique(new UnexpectedErrorHandle);
 }
 
-PassOwnPtr<FetchDataConsumerHandle> createFetchDataConsumerHandleFromWebHandle(PassOwnPtr<WebDataConsumerHandle> handle)
+std::unique_ptr<FetchDataConsumerHandle> createFetchDataConsumerHandleFromWebHandle(std::unique_ptr<WebDataConsumerHandle> handle)
 {
-    return adoptPtr(new WebToFetchDataConsumerHandleAdapter(std::move(handle)));
+    return wrapUnique(new WebToFetchDataConsumerHandleAdapter(std::move(handle)));
 }
 
 NotifyOnReaderCreationHelper::NotifyOnReaderCreationHelper(WebDataConsumerHandle::Client* client)
diff --git a/third_party/WebKit/Source/modules/fetch/DataConsumerHandleUtil.h b/third_party/WebKit/Source/modules/fetch/DataConsumerHandleUtil.h
index bbd5585..51602cb 100644
--- a/third_party/WebKit/Source/modules/fetch/DataConsumerHandleUtil.h
+++ b/third_party/WebKit/Source/modules/fetch/DataConsumerHandleUtil.h
@@ -9,25 +9,25 @@
 #include "modules/fetch/FetchDataConsumerHandle.h"
 #include "public/platform/WebDataConsumerHandle.h"
 #include "wtf/Allocator.h"
-#include "wtf/PassOwnPtr.h"
 #include "wtf/WeakPtr.h"
+#include <memory>
 
 namespace blink {
 
 // Returns a handle that returns ShouldWait for read / beginRead and
 // UnexpectedError for endRead.
-MODULES_EXPORT PassOwnPtr<WebDataConsumerHandle> createWaitingDataConsumerHandle();
+MODULES_EXPORT std::unique_ptr<WebDataConsumerHandle> createWaitingDataConsumerHandle();
 
 // Returns a handle that returns Done for read / beginRead and
 // UnexpectedError for endRead.
-MODULES_EXPORT PassOwnPtr<WebDataConsumerHandle> createDoneDataConsumerHandle();
+MODULES_EXPORT std::unique_ptr<WebDataConsumerHandle> createDoneDataConsumerHandle();
 
 // Returns a handle that returns UnexpectedError for read / beginRead /
 // endRead.
-MODULES_EXPORT PassOwnPtr<WebDataConsumerHandle> createUnexpectedErrorDataConsumerHandle();
+MODULES_EXPORT std::unique_ptr<WebDataConsumerHandle> createUnexpectedErrorDataConsumerHandle();
 
 // Returns a FetchDataConsumerHandle that wraps WebDataConsumerHandle.
-MODULES_EXPORT PassOwnPtr<FetchDataConsumerHandle> createFetchDataConsumerHandleFromWebHandle(PassOwnPtr<WebDataConsumerHandle>);
+MODULES_EXPORT std::unique_ptr<FetchDataConsumerHandle> createFetchDataConsumerHandleFromWebHandle(std::unique_ptr<WebDataConsumerHandle>);
 
 // A helper class to call Client::didGetReadable() asynchronously after
 // Reader creation.
diff --git a/third_party/WebKit/Source/modules/fetch/DataConsumerHandleUtilTest.cpp b/third_party/WebKit/Source/modules/fetch/DataConsumerHandleUtilTest.cpp
index 760cf0e..13115fe8 100644
--- a/third_party/WebKit/Source/modules/fetch/DataConsumerHandleUtilTest.cpp
+++ b/third_party/WebKit/Source/modules/fetch/DataConsumerHandleUtilTest.cpp
@@ -5,6 +5,7 @@
 #include "modules/fetch/DataConsumerHandleUtil.h"
 
 #include "modules/fetch/DataConsumerHandleTestUtil.h"
+#include <memory>
 
 namespace blink {
 
@@ -20,8 +21,8 @@
     char buffer[20];
     const void* p = nullptr;
     size_t size = 0;
-    OwnPtr<WebDataConsumerHandle> handle = createWaitingDataConsumerHandle();
-    OwnPtr<WebDataConsumerHandle::Reader> reader = handle->obtainReader(nullptr);
+    std::unique_ptr<WebDataConsumerHandle> handle = createWaitingDataConsumerHandle();
+    std::unique_ptr<WebDataConsumerHandle::Reader> reader = handle->obtainReader(nullptr);
 
     EXPECT_EQ(kShouldWait, reader->read(buffer, sizeof(buffer), kNone, &size));
     EXPECT_EQ(kShouldWait, reader->beginRead(&p, kNone, &size));
@@ -40,8 +41,8 @@
     char buffer[20];
     const void* p = nullptr;
     size_t size = 0;
-    OwnPtr<WebDataConsumerHandle> handle = createDoneDataConsumerHandle();
-    OwnPtr<WebDataConsumerHandle::Reader> reader = handle->obtainReader(nullptr);
+    std::unique_ptr<WebDataConsumerHandle> handle = createDoneDataConsumerHandle();
+    std::unique_ptr<WebDataConsumerHandle::Reader> reader = handle->obtainReader(nullptr);
 
     EXPECT_EQ(kDone, reader->read(buffer, sizeof(buffer), kNone, &size));
     EXPECT_EQ(kDone, reader->beginRead(&p, kNone, &size));
@@ -67,8 +68,8 @@
     char buffer[20];
     const void* p = nullptr;
     size_t size = 0;
-    OwnPtr<WebDataConsumerHandle> handle = createUnexpectedErrorDataConsumerHandle();
-    OwnPtr<WebDataConsumerHandle::Reader> reader = handle->obtainReader(nullptr);
+    std::unique_ptr<WebDataConsumerHandle> handle = createUnexpectedErrorDataConsumerHandle();
+    std::unique_ptr<WebDataConsumerHandle::Reader> reader = handle->obtainReader(nullptr);
 
     EXPECT_EQ(kUnexpectedError, reader->read(buffer, sizeof(buffer), kNone, &size));
     EXPECT_EQ(kUnexpectedError, reader->beginRead(&p, kNone, &size));
diff --git a/third_party/WebKit/Source/modules/fetch/DataConsumerTee.cpp b/third_party/WebKit/Source/modules/fetch/DataConsumerTee.cpp
index 71f3deb..a646561 100644
--- a/third_party/WebKit/Source/modules/fetch/DataConsumerTee.cpp
+++ b/third_party/WebKit/Source/modules/fetch/DataConsumerTee.cpp
@@ -16,9 +16,11 @@
 #include "public/platform/WebTraceLocation.h"
 #include "wtf/Deque.h"
 #include "wtf/Functional.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/ThreadSafeRefCounted.h"
 #include "wtf/ThreadingPrimitives.h"
 #include "wtf/Vector.h"
+#include <memory>
 
 namespace blink {
 
@@ -148,7 +150,7 @@
         {
             MutexLocker locker(m_mutex);
             needsNotification = m_queue.isEmpty();
-            OwnPtr<Vector<char>> data = adoptPtr(new Vector<char>);
+            std::unique_ptr<Vector<char>> data = wrapUnique(new Vector<char>);
             data->append(buffer, size);
             m_queue.append(std::move(data));
         }
@@ -209,7 +211,7 @@
         m_readerThread = nullptr;
         m_client = nullptr;
     }
-    const OwnPtr<Vector<char>>& top() const { return m_queue.first(); }
+    const std::unique_ptr<Vector<char>>& top() const { return m_queue.first(); }
     bool isEmpty() const { return m_queue.isEmpty(); }
     size_t offset() const { return m_offset; }
     void consume(size_t size)
@@ -245,7 +247,7 @@
     }
 
     Result m_result;
-    Deque<OwnPtr<Vector<char>>> m_queue;
+    Deque<std::unique_ptr<Vector<char>>> m_queue;
     // Note: Holding a WebThread raw pointer is not generally safe, but we can
     // do that in this case because:
     //  1. Destructing a ReaderImpl when the bound thread ends is a user's
@@ -287,7 +289,7 @@
         if (context()->isEmpty())
             return context()->getResult();
 
-        const OwnPtr<Vector<char>>& chunk = context()->top();
+        const std::unique_ptr<Vector<char>>& chunk = context()->top();
         *available = chunk->size() - context()->offset();
         *buffer = chunk->data() + context()->offset();
         return WebDataConsumerHandle::Ok;
@@ -310,9 +312,9 @@
 
 class DestinationHandle final : public WebDataConsumerHandle {
 public:
-    static PassOwnPtr<WebDataConsumerHandle> create(PassRefPtr<DestinationContext::Proxy> contextProxy)
+    static std::unique_ptr<WebDataConsumerHandle> create(PassRefPtr<DestinationContext::Proxy> contextProxy)
     {
-        return adoptPtr(new DestinationHandle(contextProxy));
+        return wrapUnique(new DestinationHandle(contextProxy));
     }
 
 private:
@@ -329,7 +331,7 @@
 public:
     SourceContext(
         PassRefPtr<TeeRootObject> root,
-        PassOwnPtr<WebDataConsumerHandle> src,
+        std::unique_ptr<WebDataConsumerHandle> src,
         PassRefPtr<DestinationContext> dest1,
         PassRefPtr<DestinationContext> dest2,
         ExecutionContext* executionContext)
@@ -394,14 +396,14 @@
     }
 
     RefPtr<TeeRootObject> m_root;
-    OwnPtr<WebDataConsumerHandle::Reader> m_reader;
+    std::unique_ptr<WebDataConsumerHandle::Reader> m_reader;
     RefPtr<DestinationContext> m_dest1;
     RefPtr<DestinationContext> m_dest2;
 };
 
 } // namespace
 
-void DataConsumerTee::create(ExecutionContext* executionContext, PassOwnPtr<WebDataConsumerHandle> src, OwnPtr<WebDataConsumerHandle>* dest1, OwnPtr<WebDataConsumerHandle>* dest2)
+void DataConsumerTee::create(ExecutionContext* executionContext, std::unique_ptr<WebDataConsumerHandle> src, std::unique_ptr<WebDataConsumerHandle>* dest1, std::unique_ptr<WebDataConsumerHandle>* dest2)
 {
     RefPtr<TeeRootObject> root = TeeRootObject::create();
     RefPtr<DestinationTracker> tracker = DestinationTracker::create(root);
@@ -414,7 +416,7 @@
     *dest2 = DestinationHandle::create(DestinationContext::Proxy::create(context2, tracker));
 }
 
-void DataConsumerTee::create(ExecutionContext* executionContext, PassOwnPtr<FetchDataConsumerHandle> src, OwnPtr<FetchDataConsumerHandle>* dest1, OwnPtr<FetchDataConsumerHandle>* dest2)
+void DataConsumerTee::create(ExecutionContext* executionContext, std::unique_ptr<FetchDataConsumerHandle> src, std::unique_ptr<FetchDataConsumerHandle>* dest1, std::unique_ptr<FetchDataConsumerHandle>* dest2)
 {
     RefPtr<BlobDataHandle> blobDataHandle = src->obtainReader(nullptr)->drainAsBlobDataHandle(FetchDataConsumerHandle::Reader::AllowBlobWithInvalidSize);
     if (blobDataHandle) {
@@ -423,8 +425,8 @@
         return;
     }
 
-    OwnPtr<WebDataConsumerHandle> webDest1, webDest2;
-    DataConsumerTee::create(executionContext, static_cast<PassOwnPtr<WebDataConsumerHandle>>(std::move(src)), &webDest1, &webDest2);
+    std::unique_ptr<WebDataConsumerHandle> webDest1, webDest2;
+    DataConsumerTee::create(executionContext, static_cast<std::unique_ptr<WebDataConsumerHandle>>(std::move(src)), &webDest1, &webDest2);
     *dest1 = createFetchDataConsumerHandleFromWebHandle(std::move(webDest1));
     *dest2 = createFetchDataConsumerHandleFromWebHandle(std::move(webDest2));
     return;
diff --git a/third_party/WebKit/Source/modules/fetch/DataConsumerTee.h b/third_party/WebKit/Source/modules/fetch/DataConsumerTee.h
index 30a5782..b0e283d2 100644
--- a/third_party/WebKit/Source/modules/fetch/DataConsumerTee.h
+++ b/third_party/WebKit/Source/modules/fetch/DataConsumerTee.h
@@ -9,8 +9,7 @@
 #include "modules/fetch/FetchDataConsumerHandle.h"
 #include "public/platform/WebDataConsumerHandle.h"
 #include "wtf/Allocator.h"
-#include "wtf/OwnPtr.h"
-#include "wtf/PassOwnPtr.h"
+#include <memory>
 
 namespace blink {
 
@@ -20,8 +19,8 @@
     STATIC_ONLY(DataConsumerTee);
 public:
     // Create two handles from one. |src| must be a valid unlocked handle.
-    static void create(ExecutionContext*, PassOwnPtr<WebDataConsumerHandle> src, OwnPtr<WebDataConsumerHandle>* dest1, OwnPtr<WebDataConsumerHandle>* dest2);
-    static void create(ExecutionContext*, PassOwnPtr<FetchDataConsumerHandle> src, OwnPtr<FetchDataConsumerHandle>* dest1, OwnPtr<FetchDataConsumerHandle>* dest2);
+    static void create(ExecutionContext*, std::unique_ptr<WebDataConsumerHandle> src, std::unique_ptr<WebDataConsumerHandle>* dest1, std::unique_ptr<WebDataConsumerHandle>* dest2);
+    static void create(ExecutionContext*, std::unique_ptr<FetchDataConsumerHandle> src, std::unique_ptr<FetchDataConsumerHandle>* dest1, std::unique_ptr<FetchDataConsumerHandle>* dest2);
 };
 
 } // namespace blink
diff --git a/third_party/WebKit/Source/modules/fetch/DataConsumerTeeTest.cpp b/third_party/WebKit/Source/modules/fetch/DataConsumerTeeTest.cpp
index d467143..dfa3d1c 100644
--- a/third_party/WebKit/Source/modules/fetch/DataConsumerTeeTest.cpp
+++ b/third_party/WebKit/Source/modules/fetch/DataConsumerTeeTest.cpp
@@ -15,7 +15,9 @@
 #include "public/platform/WebTraceLocation.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "wtf/PassRefPtr.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/RefPtr.h"
+#include <memory>
 #include <string.h>
 #include <v8.h>
 
@@ -53,10 +55,10 @@
 template<typename Handle>
 class TeeCreationThread {
 public:
-    void run(PassOwnPtr<Handle> src, OwnPtr<Handle>* dest1, OwnPtr<Handle>* dest2)
+    void run(std::unique_ptr<Handle> src, std::unique_ptr<Handle>* dest1, std::unique_ptr<Handle>* dest2)
     {
-        m_thread = adoptPtr(new Thread("src thread", Thread::WithExecutionContext));
-        m_waitableEvent = adoptPtr(new WaitableEvent());
+        m_thread = wrapUnique(new Thread("src thread", Thread::WithExecutionContext));
+        m_waitableEvent = wrapUnique(new WaitableEvent());
         m_thread->thread()->postTask(BLINK_FROM_HERE, threadSafeBind(&TeeCreationThread<Handle>::runInternal, AllowCrossThreadAccess(this), passed(std::move(src)), AllowCrossThreadAccess(dest1), AllowCrossThreadAccess(dest2)));
         m_waitableEvent->wait();
     }
@@ -64,24 +66,24 @@
     Thread* getThread() { return m_thread.get(); }
 
 private:
-    void runInternal(PassOwnPtr<Handle> src, OwnPtr<Handle>* dest1, OwnPtr<Handle>* dest2)
+    void runInternal(std::unique_ptr<Handle> src, std::unique_ptr<Handle>* dest1, std::unique_ptr<Handle>* dest2)
     {
         DataConsumerTee::create(m_thread->getExecutionContext(), std::move(src), dest1, dest2);
         m_waitableEvent->signal();
     }
 
-    OwnPtr<Thread> m_thread;
-    OwnPtr<WaitableEvent> m_waitableEvent;
+    std::unique_ptr<Thread> m_thread;
+    std::unique_ptr<WaitableEvent> m_waitableEvent;
 };
 
 TEST(DataConsumerTeeTest, CreateDone)
 {
-    OwnPtr<Handle> src(Handle::create());
-    OwnPtr<WebDataConsumerHandle> dest1, dest2;
+    std::unique_ptr<Handle> src(Handle::create());
+    std::unique_ptr<WebDataConsumerHandle> dest1, dest2;
 
     src->add(Command(Command::Done));
 
-    OwnPtr<TeeCreationThread<WebDataConsumerHandle>> t = adoptPtr(new TeeCreationThread<WebDataConsumerHandle>());
+    std::unique_ptr<TeeCreationThread<WebDataConsumerHandle>> t = wrapUnique(new TeeCreationThread<WebDataConsumerHandle>());
     t->run(std::move(src), &dest1, &dest2);
 
     ASSERT_TRUE(dest1);
@@ -89,8 +91,8 @@
 
     HandleReaderRunner<HandleReader> r1(std::move(dest1)), r2(std::move(dest2));
 
-    OwnPtr<HandleReadResult> res1 = r1.wait();
-    OwnPtr<HandleReadResult> res2 = r2.wait();
+    std::unique_ptr<HandleReadResult> res1 = r1.wait();
+    std::unique_ptr<HandleReadResult> res2 = r2.wait();
 
     EXPECT_EQ(kDone, res1->result());
     EXPECT_EQ(0u, res1->data().size());
@@ -100,8 +102,8 @@
 
 TEST(DataConsumerTeeTest, Read)
 {
-    OwnPtr<Handle> src(Handle::create());
-    OwnPtr<WebDataConsumerHandle> dest1, dest2;
+    std::unique_ptr<Handle> src(Handle::create());
+    std::unique_ptr<WebDataConsumerHandle> dest1, dest2;
 
     src->add(Command(Command::Wait));
     src->add(Command(Command::Data, "hello, "));
@@ -111,7 +113,7 @@
     src->add(Command(Command::Wait));
     src->add(Command(Command::Done));
 
-    OwnPtr<TeeCreationThread<WebDataConsumerHandle>> t = adoptPtr(new TeeCreationThread<WebDataConsumerHandle>());
+    std::unique_ptr<TeeCreationThread<WebDataConsumerHandle>> t = wrapUnique(new TeeCreationThread<WebDataConsumerHandle>());
     t->run(std::move(src), &dest1, &dest2);
 
     ASSERT_TRUE(dest1);
@@ -120,8 +122,8 @@
     HandleReaderRunner<HandleReader> r1(std::move(dest1));
     HandleReaderRunner<HandleReader> r2(std::move(dest2));
 
-    OwnPtr<HandleReadResult> res1 = r1.wait();
-    OwnPtr<HandleReadResult> res2 = r2.wait();
+    std::unique_ptr<HandleReadResult> res1 = r1.wait();
+    std::unique_ptr<HandleReadResult> res2 = r2.wait();
 
     EXPECT_EQ(kDone, res1->result());
     EXPECT_EQ("hello, world", toString(res1->data()));
@@ -132,8 +134,8 @@
 
 TEST(DataConsumerTeeTest, TwoPhaseRead)
 {
-    OwnPtr<Handle> src(Handle::create());
-    OwnPtr<WebDataConsumerHandle> dest1, dest2;
+    std::unique_ptr<Handle> src(Handle::create());
+    std::unique_ptr<WebDataConsumerHandle> dest1, dest2;
 
     src->add(Command(Command::Wait));
     src->add(Command(Command::Data, "hello, "));
@@ -144,7 +146,7 @@
     src->add(Command(Command::Wait));
     src->add(Command(Command::Done));
 
-    OwnPtr<TeeCreationThread<WebDataConsumerHandle>> t = adoptPtr(new TeeCreationThread<WebDataConsumerHandle>());
+    std::unique_ptr<TeeCreationThread<WebDataConsumerHandle>> t = wrapUnique(new TeeCreationThread<WebDataConsumerHandle>());
     t->run(std::move(src), &dest1, &dest2);
 
     ASSERT_TRUE(dest1);
@@ -153,8 +155,8 @@
     HandleReaderRunner<HandleTwoPhaseReader> r1(std::move(dest1));
     HandleReaderRunner<HandleTwoPhaseReader> r2(std::move(dest2));
 
-    OwnPtr<HandleReadResult> res1 = r1.wait();
-    OwnPtr<HandleReadResult> res2 = r2.wait();
+    std::unique_ptr<HandleReadResult> res1 = r1.wait();
+    std::unique_ptr<HandleReadResult> res2 = r2.wait();
 
     EXPECT_EQ(kDone, res1->result());
     EXPECT_EQ("hello, world", toString(res1->data()));
@@ -165,14 +167,14 @@
 
 TEST(DataConsumerTeeTest, Error)
 {
-    OwnPtr<Handle> src(Handle::create());
-    OwnPtr<WebDataConsumerHandle> dest1, dest2;
+    std::unique_ptr<Handle> src(Handle::create());
+    std::unique_ptr<WebDataConsumerHandle> dest1, dest2;
 
     src->add(Command(Command::Data, "hello, "));
     src->add(Command(Command::Data, "world"));
     src->add(Command(Command::Error));
 
-    OwnPtr<TeeCreationThread<WebDataConsumerHandle>> t = adoptPtr(new TeeCreationThread<WebDataConsumerHandle>());
+    std::unique_ptr<TeeCreationThread<WebDataConsumerHandle>> t = wrapUnique(new TeeCreationThread<WebDataConsumerHandle>());
     t->run(std::move(src), &dest1, &dest2);
 
     ASSERT_TRUE(dest1);
@@ -181,8 +183,8 @@
     HandleReaderRunner<HandleReader> r1(std::move(dest1));
     HandleReaderRunner<HandleReader> r2(std::move(dest2));
 
-    OwnPtr<HandleReadResult> res1 = r1.wait();
-    OwnPtr<HandleReadResult> res2 = r2.wait();
+    std::unique_ptr<HandleReadResult> res1 = r1.wait();
+    std::unique_ptr<HandleReadResult> res2 = r2.wait();
 
     EXPECT_EQ(kUnexpectedError, res1->result());
     EXPECT_EQ(kUnexpectedError, res2->result());
@@ -195,13 +197,13 @@
 
 TEST(DataConsumerTeeTest, StopSource)
 {
-    OwnPtr<Handle> src(Handle::create());
-    OwnPtr<WebDataConsumerHandle> dest1, dest2;
+    std::unique_ptr<Handle> src(Handle::create());
+    std::unique_ptr<WebDataConsumerHandle> dest1, dest2;
 
     src->add(Command(Command::Data, "hello, "));
     src->add(Command(Command::Data, "world"));
 
-    OwnPtr<TeeCreationThread<WebDataConsumerHandle>> t = adoptPtr(new TeeCreationThread<WebDataConsumerHandle>());
+    std::unique_ptr<TeeCreationThread<WebDataConsumerHandle>> t = wrapUnique(new TeeCreationThread<WebDataConsumerHandle>());
     t->run(std::move(src), &dest1, &dest2);
 
     ASSERT_TRUE(dest1);
@@ -214,8 +216,8 @@
     // t->thread() is alive.
     t->getThread()->thread()->postTask(BLINK_FROM_HERE, threadSafeBind(postStop, AllowCrossThreadAccess(t->getThread())));
 
-    OwnPtr<HandleReadResult> res1 = r1.wait();
-    OwnPtr<HandleReadResult> res2 = r2.wait();
+    std::unique_ptr<HandleReadResult> res1 = r1.wait();
+    std::unique_ptr<HandleReadResult> res2 = r2.wait();
 
     EXPECT_EQ(kUnexpectedError, res1->result());
     EXPECT_EQ(kUnexpectedError, res2->result());
@@ -223,13 +225,13 @@
 
 TEST(DataConsumerTeeTest, DetachSource)
 {
-    OwnPtr<Handle> src(Handle::create());
-    OwnPtr<WebDataConsumerHandle> dest1, dest2;
+    std::unique_ptr<Handle> src(Handle::create());
+    std::unique_ptr<WebDataConsumerHandle> dest1, dest2;
 
     src->add(Command(Command::Data, "hello, "));
     src->add(Command(Command::Data, "world"));
 
-    OwnPtr<TeeCreationThread<WebDataConsumerHandle>> t = adoptPtr(new TeeCreationThread<WebDataConsumerHandle>());
+    std::unique_ptr<TeeCreationThread<WebDataConsumerHandle>> t = wrapUnique(new TeeCreationThread<WebDataConsumerHandle>());
     t->run(std::move(src), &dest1, &dest2);
 
     ASSERT_TRUE(dest1);
@@ -240,8 +242,8 @@
 
     t = nullptr;
 
-    OwnPtr<HandleReadResult> res1 = r1.wait();
-    OwnPtr<HandleReadResult> res2 = r2.wait();
+    std::unique_ptr<HandleReadResult> res1 = r1.wait();
+    std::unique_ptr<HandleReadResult> res2 = r2.wait();
 
     EXPECT_EQ(kUnexpectedError, res1->result());
     EXPECT_EQ(kUnexpectedError, res2->result());
@@ -249,21 +251,21 @@
 
 TEST(DataConsumerTeeTest, DetachSourceAfterReadingDone)
 {
-    OwnPtr<Handle> src(Handle::create());
-    OwnPtr<WebDataConsumerHandle> dest1, dest2;
+    std::unique_ptr<Handle> src(Handle::create());
+    std::unique_ptr<WebDataConsumerHandle> dest1, dest2;
 
     src->add(Command(Command::Data, "hello, "));
     src->add(Command(Command::Data, "world"));
     src->add(Command(Command::Done));
 
-    OwnPtr<TeeCreationThread<WebDataConsumerHandle>> t = adoptPtr(new TeeCreationThread<WebDataConsumerHandle>());
+    std::unique_ptr<TeeCreationThread<WebDataConsumerHandle>> t = wrapUnique(new TeeCreationThread<WebDataConsumerHandle>());
     t->run(std::move(src), &dest1, &dest2);
 
     ASSERT_TRUE(dest1);
     ASSERT_TRUE(dest2);
 
     HandleReaderRunner<HandleReader> r1(std::move(dest1));
-    OwnPtr<HandleReadResult> res1 = r1.wait();
+    std::unique_ptr<HandleReadResult> res1 = r1.wait();
 
     EXPECT_EQ(kDone, res1->result());
     EXPECT_EQ("hello, world", toString(res1->data()));
@@ -271,7 +273,7 @@
     t = nullptr;
 
     HandleReaderRunner<HandleReader> r2(std::move(dest2));
-    OwnPtr<HandleReadResult> res2 = r2.wait();
+    std::unique_ptr<HandleReadResult> res2 = r2.wait();
 
     EXPECT_EQ(kDone, res2->result());
     EXPECT_EQ("hello, world", toString(res2->data()));
@@ -279,14 +281,14 @@
 
 TEST(DataConsumerTeeTest, DetachOneDestination)
 {
-    OwnPtr<Handle> src(Handle::create());
-    OwnPtr<WebDataConsumerHandle> dest1, dest2;
+    std::unique_ptr<Handle> src(Handle::create());
+    std::unique_ptr<WebDataConsumerHandle> dest1, dest2;
 
     src->add(Command(Command::Data, "hello, "));
     src->add(Command(Command::Data, "world"));
     src->add(Command(Command::Done));
 
-    OwnPtr<TeeCreationThread<WebDataConsumerHandle>> t = adoptPtr(new TeeCreationThread<WebDataConsumerHandle>());
+    std::unique_ptr<TeeCreationThread<WebDataConsumerHandle>> t = wrapUnique(new TeeCreationThread<WebDataConsumerHandle>());
     t->run(std::move(src), &dest1, &dest2);
 
     ASSERT_TRUE(dest1);
@@ -295,7 +297,7 @@
     dest1 = nullptr;
 
     HandleReaderRunner<HandleReader> r2(std::move(dest2));
-    OwnPtr<HandleReadResult> res2 = r2.wait();
+    std::unique_ptr<HandleReadResult> res2 = r2.wait();
 
     EXPECT_EQ(kDone, res2->result());
     EXPECT_EQ("hello, world", toString(res2->data()));
@@ -303,14 +305,14 @@
 
 TEST(DataConsumerTeeTest, DetachBothDestinationsShouldStopSourceReader)
 {
-    OwnPtr<Handle> src(Handle::create());
+    std::unique_ptr<Handle> src(Handle::create());
     RefPtr<Handle::Context> context(src->getContext());
-    OwnPtr<WebDataConsumerHandle> dest1, dest2;
+    std::unique_ptr<WebDataConsumerHandle> dest1, dest2;
 
     src->add(Command(Command::Data, "hello, "));
     src->add(Command(Command::Data, "world"));
 
-    OwnPtr<TeeCreationThread<WebDataConsumerHandle>> t = adoptPtr(new TeeCreationThread<WebDataConsumerHandle>());
+    std::unique_ptr<TeeCreationThread<WebDataConsumerHandle>> t = wrapUnique(new TeeCreationThread<WebDataConsumerHandle>());
     t->run(std::move(src), &dest1, &dest2);
 
     ASSERT_TRUE(dest1);
@@ -327,8 +329,8 @@
 TEST(FetchDataConsumerTeeTest, Create)
 {
     RefPtr<BlobDataHandle> blobDataHandle = BlobDataHandle::create();
-    OwnPtr<MockFetchDataConsumerHandle> src(MockFetchDataConsumerHandle::create());
-    OwnPtr<MockFetchDataConsumerReader> reader(MockFetchDataConsumerReader::create());
+    std::unique_ptr<MockFetchDataConsumerHandle> src(MockFetchDataConsumerHandle::create());
+    std::unique_ptr<MockFetchDataConsumerReader> reader(MockFetchDataConsumerReader::create());
 
     Checkpoint checkpoint;
     InSequence s;
@@ -339,10 +341,10 @@
     EXPECT_CALL(checkpoint, Call(2));
 
     // |reader| is adopted by |obtainReader|.
-    ASSERT_TRUE(reader.leakPtr());
+    ASSERT_TRUE(reader.release());
 
-    OwnPtr<FetchDataConsumerHandle> dest1, dest2;
-    OwnPtr<TeeCreationThread<FetchDataConsumerHandle>> t = adoptPtr(new TeeCreationThread<FetchDataConsumerHandle>());
+    std::unique_ptr<FetchDataConsumerHandle> dest1, dest2;
+    std::unique_ptr<TeeCreationThread<FetchDataConsumerHandle>> t = wrapUnique(new TeeCreationThread<FetchDataConsumerHandle>());
 
     checkpoint.Call(1);
     t->run(std::move(src), &dest1, &dest2);
@@ -357,8 +359,8 @@
 TEST(FetchDataConsumerTeeTest, CreateFromBlobWithInvalidSize)
 {
     RefPtr<BlobDataHandle> blobDataHandle = BlobDataHandle::create(BlobData::create(), -1);
-    OwnPtr<MockFetchDataConsumerHandle> src(MockFetchDataConsumerHandle::create());
-    OwnPtr<MockFetchDataConsumerReader> reader(MockFetchDataConsumerReader::create());
+    std::unique_ptr<MockFetchDataConsumerHandle> src(MockFetchDataConsumerHandle::create());
+    std::unique_ptr<MockFetchDataConsumerReader> reader(MockFetchDataConsumerReader::create());
 
     Checkpoint checkpoint;
     InSequence s;
@@ -369,10 +371,10 @@
     EXPECT_CALL(checkpoint, Call(2));
 
     // |reader| is adopted by |obtainReader|.
-    ASSERT_TRUE(reader.leakPtr());
+    ASSERT_TRUE(reader.release());
 
-    OwnPtr<FetchDataConsumerHandle> dest1, dest2;
-    OwnPtr<TeeCreationThread<FetchDataConsumerHandle>> t = adoptPtr(new TeeCreationThread<FetchDataConsumerHandle>());
+    std::unique_ptr<FetchDataConsumerHandle> dest1, dest2;
+    std::unique_ptr<TeeCreationThread<FetchDataConsumerHandle>> t = wrapUnique(new TeeCreationThread<FetchDataConsumerHandle>());
 
     checkpoint.Call(1);
     t->run(std::move(src), &dest1, &dest2);
@@ -388,12 +390,12 @@
 
 TEST(FetchDataConsumerTeeTest, CreateDone)
 {
-    OwnPtr<Handle> src(Handle::create());
-    OwnPtr<FetchDataConsumerHandle> dest1, dest2;
+    std::unique_ptr<Handle> src(Handle::create());
+    std::unique_ptr<FetchDataConsumerHandle> dest1, dest2;
 
     src->add(Command(Command::Done));
 
-    OwnPtr<TeeCreationThread<FetchDataConsumerHandle>> t = adoptPtr(new TeeCreationThread<FetchDataConsumerHandle>());
+    std::unique_ptr<TeeCreationThread<FetchDataConsumerHandle>> t = wrapUnique(new TeeCreationThread<FetchDataConsumerHandle>());
     t->run(createFetchDataConsumerHandleFromWebHandle(std::move(src)), &dest1, &dest2);
 
     ASSERT_TRUE(dest1);
@@ -404,8 +406,8 @@
 
     HandleReaderRunner<HandleReader> r1(std::move(dest1)), r2(std::move(dest2));
 
-    OwnPtr<HandleReadResult> res1 = r1.wait();
-    OwnPtr<HandleReadResult> res2 = r2.wait();
+    std::unique_ptr<HandleReadResult> res1 = r1.wait();
+    std::unique_ptr<HandleReadResult> res2 = r2.wait();
 
     EXPECT_EQ(kDone, res1->result());
     EXPECT_EQ(0u, res1->data().size());
diff --git a/third_party/WebKit/Source/modules/fetch/FetchBlobDataConsumerHandle.cpp b/third_party/WebKit/Source/modules/fetch/FetchBlobDataConsumerHandle.cpp
index 9a86008..d7a0254 100644
--- a/third_party/WebKit/Source/modules/fetch/FetchBlobDataConsumerHandle.cpp
+++ b/third_party/WebKit/Source/modules/fetch/FetchBlobDataConsumerHandle.cpp
@@ -13,7 +13,8 @@
 #include "platform/blob/BlobRegistry.h"
 #include "platform/blob/BlobURL.h"
 #include "platform/network/ResourceRequest.h"
-#include "wtf/OwnPtr.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
@@ -102,7 +103,7 @@
     }
 
 private:
-    PassOwnPtr<ThreadableLoader> createLoader(ExecutionContext* executionContext, ThreadableLoaderClient* client) const
+    std::unique_ptr<ThreadableLoader> createLoader(ExecutionContext* executionContext, ThreadableLoaderClient* client) const
     {
         ThreadableLoaderOptions options;
         options.preflightPolicy = ConsiderPreflight;
@@ -117,7 +118,7 @@
     }
 
     // ThreadableLoaderClient
-    void didReceiveResponse(unsigned long, const ResourceResponse&, PassOwnPtr<WebDataConsumerHandle> handle) override
+    void didReceiveResponse(unsigned long, const ResourceResponse&, std::unique_ptr<WebDataConsumerHandle> handle) override
     {
         ASSERT(!m_receivedResponse);
         m_receivedResponse = true;
@@ -153,14 +154,14 @@
 
     RefPtr<BlobDataHandle> m_blobDataHandle;
     Persistent<FetchBlobDataConsumerHandle::LoaderFactory> m_loaderFactory;
-    OwnPtr<ThreadableLoader> m_loader;
+    std::unique_ptr<ThreadableLoader> m_loader;
 
     bool m_receivedResponse;
 };
 
 class DefaultLoaderFactory final : public FetchBlobDataConsumerHandle::LoaderFactory {
 public:
-    PassOwnPtr<ThreadableLoader> create(
+    std::unique_ptr<ThreadableLoader> create(
         ExecutionContext& executionContext,
         ThreadableLoaderClient* client,
         const ThreadableLoaderOptions& options,
@@ -180,7 +181,7 @@
 public:
     class ReaderImpl : public FetchDataConsumerHandle::Reader {
     public:
-        ReaderImpl(Client* client, PassRefPtr<ReaderContext> readerContext, PassOwnPtr<WebDataConsumerHandle::Reader> reader)
+        ReaderImpl(Client* client, PassRefPtr<ReaderContext> readerContext, std::unique_ptr<WebDataConsumerHandle::Reader> reader)
             : m_readerContext(readerContext)
             , m_reader(std::move(reader))
             , m_notifier(client) { }
@@ -238,7 +239,7 @@
 
     private:
         RefPtr<ReaderContext> m_readerContext;
-        OwnPtr<WebDataConsumerHandle::Reader> m_reader;
+        std::unique_ptr<WebDataConsumerHandle::Reader> m_reader;
         NotifyOnReaderCreationHelper m_notifier;
     };
 
@@ -249,12 +250,12 @@
     {
         CompositeDataConsumerHandle::Updater* updater = nullptr;
         m_handle = CompositeDataConsumerHandle::create(createWaitingDataConsumerHandle(), &updater);
-        m_loaderContextHolder = CrossThreadHolder<LoaderContext>::create(executionContext, adoptPtr(new BlobLoaderContext(updater, m_blobDataHandleForDrain, loaderFactory)));
+        m_loaderContextHolder = CrossThreadHolder<LoaderContext>::create(executionContext, wrapUnique(new BlobLoaderContext(updater, m_blobDataHandleForDrain, loaderFactory)));
     }
 
-    PassOwnPtr<FetchDataConsumerHandle::Reader> obtainReader(WebDataConsumerHandle::Client* client)
+    std::unique_ptr<FetchDataConsumerHandle::Reader> obtainReader(WebDataConsumerHandle::Client* client)
     {
-        return adoptPtr(new ReaderImpl(client, this, m_handle->obtainReader(client)));
+        return wrapUnique(new ReaderImpl(client, this, m_handle->obtainReader(client)));
     }
 
 private:
@@ -274,9 +275,9 @@
     bool drained() const { return m_drained; }
     void setDrained() { m_drained = true; }
 
-    OwnPtr<WebDataConsumerHandle> m_handle;
+    std::unique_ptr<WebDataConsumerHandle> m_handle;
     RefPtr<BlobDataHandle> m_blobDataHandleForDrain;
-    OwnPtr<CrossThreadHolder<LoaderContext>> m_loaderContextHolder;
+    std::unique_ptr<CrossThreadHolder<LoaderContext>> m_loaderContextHolder;
 
     bool m_loaderStarted;
     bool m_drained;
@@ -291,25 +292,25 @@
 {
 }
 
-PassOwnPtr<FetchDataConsumerHandle> FetchBlobDataConsumerHandle::create(ExecutionContext* executionContext, PassRefPtr<BlobDataHandle> blobDataHandle, LoaderFactory* loaderFactory)
+std::unique_ptr<FetchDataConsumerHandle> FetchBlobDataConsumerHandle::create(ExecutionContext* executionContext, PassRefPtr<BlobDataHandle> blobDataHandle, LoaderFactory* loaderFactory)
 {
     if (!blobDataHandle)
         return createFetchDataConsumerHandleFromWebHandle(createDoneDataConsumerHandle());
 
-    return adoptPtr(new FetchBlobDataConsumerHandle(executionContext, blobDataHandle, loaderFactory));
+    return wrapUnique(new FetchBlobDataConsumerHandle(executionContext, blobDataHandle, loaderFactory));
 }
 
-PassOwnPtr<FetchDataConsumerHandle> FetchBlobDataConsumerHandle::create(ExecutionContext* executionContext, PassRefPtr<BlobDataHandle> blobDataHandle)
+std::unique_ptr<FetchDataConsumerHandle> FetchBlobDataConsumerHandle::create(ExecutionContext* executionContext, PassRefPtr<BlobDataHandle> blobDataHandle)
 {
     if (!blobDataHandle)
         return createFetchDataConsumerHandleFromWebHandle(createDoneDataConsumerHandle());
 
-    return adoptPtr(new FetchBlobDataConsumerHandle(executionContext, blobDataHandle, new DefaultLoaderFactory));
+    return wrapUnique(new FetchBlobDataConsumerHandle(executionContext, blobDataHandle, new DefaultLoaderFactory));
 }
 
 FetchDataConsumerHandle::Reader* FetchBlobDataConsumerHandle::obtainReaderInternal(Client* client)
 {
-    return m_readerContext->obtainReader(client).leakPtr();
+    return m_readerContext->obtainReader(client).release();
 }
 
 } // namespace blink
diff --git a/third_party/WebKit/Source/modules/fetch/FetchBlobDataConsumerHandle.h b/third_party/WebKit/Source/modules/fetch/FetchBlobDataConsumerHandle.h
index 2167b4b7..658c468 100644
--- a/third_party/WebKit/Source/modules/fetch/FetchBlobDataConsumerHandle.h
+++ b/third_party/WebKit/Source/modules/fetch/FetchBlobDataConsumerHandle.h
@@ -10,9 +10,9 @@
 #include "modules/ModulesExport.h"
 #include "modules/fetch/FetchDataConsumerHandle.h"
 #include "platform/blob/BlobData.h"
-#include "wtf/PassOwnPtr.h"
 #include "wtf/PassRefPtr.h"
 #include "wtf/RefPtr.h"
+#include <memory>
 
 namespace blink {
 
@@ -24,15 +24,15 @@
 public:
     class MODULES_EXPORT LoaderFactory : public GarbageCollectedFinalized<LoaderFactory> {
     public:
-        virtual PassOwnPtr<ThreadableLoader> create(ExecutionContext&, ThreadableLoaderClient*, const ThreadableLoaderOptions&, const ResourceLoaderOptions&) = 0;
+        virtual std::unique_ptr<ThreadableLoader> create(ExecutionContext&, ThreadableLoaderClient*, const ThreadableLoaderOptions&, const ResourceLoaderOptions&) = 0;
         virtual ~LoaderFactory() { }
         DEFINE_INLINE_VIRTUAL_TRACE() { }
     };
 
-    static PassOwnPtr<FetchDataConsumerHandle> create(ExecutionContext*, PassRefPtr<BlobDataHandle>);
+    static std::unique_ptr<FetchDataConsumerHandle> create(ExecutionContext*, PassRefPtr<BlobDataHandle>);
 
     // For testing.
-    static PassOwnPtr<FetchDataConsumerHandle> create(ExecutionContext*, PassRefPtr<BlobDataHandle>, LoaderFactory*);
+    static std::unique_ptr<FetchDataConsumerHandle> create(ExecutionContext*, PassRefPtr<BlobDataHandle>, LoaderFactory*);
 
     ~FetchBlobDataConsumerHandle();
 
diff --git a/third_party/WebKit/Source/modules/fetch/FetchBlobDataConsumerHandleTest.cpp b/third_party/WebKit/Source/modules/fetch/FetchBlobDataConsumerHandleTest.cpp
index 869a7273..aa597e4 100644
--- a/third_party/WebKit/Source/modules/fetch/FetchBlobDataConsumerHandleTest.cpp
+++ b/third_party/WebKit/Source/modules/fetch/FetchBlobDataConsumerHandleTest.cpp
@@ -18,9 +18,10 @@
 #include "platform/testing/UnitTestHelpers.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
-#include "wtf/OwnPtr.h"
 #include "wtf/PassRefPtr.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/RefPtr.h"
+#include <memory>
 #include <string.h>
 
 namespace blink {
@@ -52,9 +53,9 @@
 
 class MockLoaderFactory : public FetchBlobDataConsumerHandle::LoaderFactory {
 public:
-    PassOwnPtr<ThreadableLoader> create(ExecutionContext& executionContext, ThreadableLoaderClient* client, const ThreadableLoaderOptions& threadableLoaderOptions, const ResourceLoaderOptions& resourceLoaderOptions) override
+    std::unique_ptr<ThreadableLoader> create(ExecutionContext& executionContext, ThreadableLoaderClient* client, const ThreadableLoaderOptions& threadableLoaderOptions, const ResourceLoaderOptions& resourceLoaderOptions) override
     {
-        return adoptPtr(createInternal(executionContext, client, threadableLoaderOptions, resourceLoaderOptions));
+        return wrapUnique(createInternal(executionContext, client, threadableLoaderOptions, resourceLoaderOptions));
     }
 
     MOCK_METHOD4(createInternal, ThreadableLoader*(ExecutionContext&, ThreadableLoaderClient*, const ThreadableLoaderOptions&, const ResourceLoaderOptions&));
@@ -62,7 +63,7 @@
 
 PassRefPtr<BlobDataHandle> createBlobDataHandle(const char* s)
 {
-    OwnPtr<BlobData> data = BlobData::create();
+    std::unique_ptr<BlobData> data = BlobData::create();
     data->appendText(s, false);
     auto size = data->length();
     return BlobDataHandle::create(std::move(data), size);
@@ -87,7 +88,7 @@
     Document& document() { return m_dummyPageHolder->document(); }
 
 private:
-    OwnPtr<DummyPageHolder> m_dummyPageHolder;
+    std::unique_ptr<DummyPageHolder> m_dummyPageHolder;
 };
 
 TEST_F(FetchBlobDataConsumerHandleTest, CreateLoader)
@@ -99,7 +100,7 @@
     ThreadableLoaderOptions options;
     ResourceLoaderOptions resourceLoaderOptions;
 
-    OwnPtr<MockThreadableLoader> loader = MockThreadableLoader::create();
+    std::unique_ptr<MockThreadableLoader> loader = MockThreadableLoader::create();
     MockThreadableLoader* loaderPtr = loader.get();
 
     InSequence s;
@@ -107,13 +108,13 @@
     EXPECT_CALL(*factory, createInternal(Ref(document()), _, _, _)).WillOnce(DoAll(
         SaveArg<2>(&options),
         SaveArg<3>(&resourceLoaderOptions),
-        Return(loader.leakPtr())));
+        Return(loader.release())));
     EXPECT_CALL(*loaderPtr, start(_)).WillOnce(SaveArg<0>(&request));
     EXPECT_CALL(checkpoint, Call(2));
     EXPECT_CALL(*loaderPtr, cancel());
 
     RefPtr<BlobDataHandle> blobDataHandle = createBlobDataHandle("Once upon a time");
-    OwnPtr<WebDataConsumerHandle> handle
+    std::unique_ptr<WebDataConsumerHandle> handle
         = FetchBlobDataConsumerHandle::create(&document(), blobDataHandle, factory);
     testing::runPendingTasks();
 
@@ -144,19 +145,19 @@
     auto factory = new StrictMock<MockLoaderFactory>;
     Checkpoint checkpoint;
 
-    OwnPtr<MockThreadableLoader> loader = MockThreadableLoader::create();
+    std::unique_ptr<MockThreadableLoader> loader = MockThreadableLoader::create();
     MockThreadableLoader* loaderPtr = loader.get();
 
     InSequence s;
     EXPECT_CALL(checkpoint, Call(1));
-    EXPECT_CALL(*factory, createInternal(Ref(document()), _, _, _)).WillOnce(Return(loader.leakPtr()));
+    EXPECT_CALL(*factory, createInternal(Ref(document()), _, _, _)).WillOnce(Return(loader.release()));
     EXPECT_CALL(*loaderPtr, start(_));
     EXPECT_CALL(checkpoint, Call(2));
     EXPECT_CALL(*loaderPtr, cancel());
     EXPECT_CALL(checkpoint, Call(3));
 
     RefPtr<BlobDataHandle> blobDataHandle = createBlobDataHandle("Once upon a time");
-    OwnPtr<WebDataConsumerHandle> handle
+    std::unique_ptr<WebDataConsumerHandle> handle
         = FetchBlobDataConsumerHandle::create(&document(), blobDataHandle, factory);
     testing::runPendingTasks();
 
@@ -174,12 +175,12 @@
     auto factory = new StrictMock<MockLoaderFactory>;
     Checkpoint checkpoint;
 
-    OwnPtr<MockThreadableLoader> loader = MockThreadableLoader::create();
+    std::unique_ptr<MockThreadableLoader> loader = MockThreadableLoader::create();
     MockThreadableLoader* loaderPtr = loader.get();
 
     InSequence s;
     EXPECT_CALL(checkpoint, Call(1));
-    EXPECT_CALL(*factory, createInternal(Ref(document()), _, _, _)).WillOnce(Return(loader.leakPtr()));
+    EXPECT_CALL(*factory, createInternal(Ref(document()), _, _, _)).WillOnce(Return(loader.release()));
     EXPECT_CALL(*loaderPtr, start(_));
     EXPECT_CALL(checkpoint, Call(2));
     EXPECT_CALL(checkpoint, Call(3));
@@ -187,9 +188,9 @@
     EXPECT_CALL(checkpoint, Call(4));
 
     RefPtr<BlobDataHandle> blobDataHandle = createBlobDataHandle("Once upon a time");
-    OwnPtr<WebDataConsumerHandle> handle
+    std::unique_ptr<WebDataConsumerHandle> handle
         = FetchBlobDataConsumerHandle::create(&document(), blobDataHandle, factory);
-    OwnPtr<WebDataConsumerHandle::Reader> reader = handle->obtainReader(nullptr);
+    std::unique_ptr<WebDataConsumerHandle::Reader> reader = handle->obtainReader(nullptr);
     testing::runPendingTasks();
 
     size_t size = 0;
@@ -209,22 +210,22 @@
     auto factory = new StrictMock<MockLoaderFactory>;
     Checkpoint checkpoint;
 
-    OwnPtr<MockThreadableLoader> loader = MockThreadableLoader::create();
+    std::unique_ptr<MockThreadableLoader> loader = MockThreadableLoader::create();
     MockThreadableLoader* loaderPtr = loader.get();
     ThreadableLoaderClient* client = nullptr;
 
     InSequence s;
     EXPECT_CALL(checkpoint, Call(1));
-    EXPECT_CALL(*factory, createInternal(Ref(document()), _, _, _)).WillOnce(DoAll(SaveArg<1>(&client), Return(loader.leakPtr())));
+    EXPECT_CALL(*factory, createInternal(Ref(document()), _, _, _)).WillOnce(DoAll(SaveArg<1>(&client), Return(loader.release())));
     EXPECT_CALL(*loaderPtr, start(_));
     EXPECT_CALL(checkpoint, Call(2));
     EXPECT_CALL(*loaderPtr, cancel());
 
     RefPtr<BlobDataHandle> blobDataHandle = createBlobDataHandle("Once upon a time");
-    OwnPtr<WebDataConsumerHandle> handle
+    std::unique_ptr<WebDataConsumerHandle> handle
         = FetchBlobDataConsumerHandle::create(&document(), blobDataHandle, factory);
 
-    OwnPtr<ReplayingHandle> src = ReplayingHandle::create();
+    std::unique_ptr<ReplayingHandle> src = ReplayingHandle::create();
     src->add(Command(Command::Wait));
     src->add(Command(Command::Data, "hello, "));
     src->add(Command(Command::Data, "world"));
@@ -238,7 +239,7 @@
     checkpoint.Call(2);
     client->didReceiveResponse(0, ResourceResponse(), std::move(src));
     HandleReaderRunner<HandleReader> runner(std::move(handle));
-    OwnPtr<HandleReadResult> r = runner.wait();
+    std::unique_ptr<HandleReadResult> r = runner.wait();
     EXPECT_EQ(kDone, r->result());
     EXPECT_EQ("hello, world", toString(r->data()));
 }
@@ -248,22 +249,22 @@
     auto factory = new StrictMock<MockLoaderFactory>;
     Checkpoint checkpoint;
 
-    OwnPtr<MockThreadableLoader> loader = MockThreadableLoader::create();
+    std::unique_ptr<MockThreadableLoader> loader = MockThreadableLoader::create();
     MockThreadableLoader* loaderPtr = loader.get();
     ThreadableLoaderClient* client = nullptr;
 
     InSequence s;
     EXPECT_CALL(checkpoint, Call(1));
-    EXPECT_CALL(*factory, createInternal(Ref(document()), _, _, _)).WillOnce(DoAll(SaveArg<1>(&client), Return(loader.leakPtr())));
+    EXPECT_CALL(*factory, createInternal(Ref(document()), _, _, _)).WillOnce(DoAll(SaveArg<1>(&client), Return(loader.release())));
     EXPECT_CALL(*loaderPtr, start(_));
     EXPECT_CALL(checkpoint, Call(2));
     EXPECT_CALL(*loaderPtr, cancel());
 
     RefPtr<BlobDataHandle> blobDataHandle = createBlobDataHandle("Once upon a time");
-    OwnPtr<WebDataConsumerHandle> handle
+    std::unique_ptr<WebDataConsumerHandle> handle
         = FetchBlobDataConsumerHandle::create(&document(), blobDataHandle, factory);
 
-    OwnPtr<ReplayingHandle> src = ReplayingHandle::create();
+    std::unique_ptr<ReplayingHandle> src = ReplayingHandle::create();
     src->add(Command(Command::Wait));
     src->add(Command(Command::Data, "hello, "));
     src->add(Command(Command::Data, "world"));
@@ -277,7 +278,7 @@
     checkpoint.Call(2);
     client->didReceiveResponse(0, ResourceResponse(), std::move(src));
     HandleReaderRunner<HandleTwoPhaseReader> runner(std::move(handle));
-    OwnPtr<HandleReadResult> r = runner.wait();
+    std::unique_ptr<HandleReadResult> r = runner.wait();
     EXPECT_EQ(kDone, r->result());
     EXPECT_EQ("hello, world", toString(r->data()));
 }
@@ -287,18 +288,18 @@
     auto factory = new StrictMock<MockLoaderFactory>;
     Checkpoint checkpoint;
 
-    OwnPtr<MockThreadableLoader> loader = MockThreadableLoader::create();
+    std::unique_ptr<MockThreadableLoader> loader = MockThreadableLoader::create();
     MockThreadableLoader* loaderPtr = loader.get();
     ThreadableLoaderClient* client = nullptr;
 
     InSequence s;
     EXPECT_CALL(checkpoint, Call(1));
-    EXPECT_CALL(*factory, createInternal(Ref(document()), _, _, _)).WillOnce(DoAll(SaveArg<1>(&client), Return(loader.leakPtr())));
+    EXPECT_CALL(*factory, createInternal(Ref(document()), _, _, _)).WillOnce(DoAll(SaveArg<1>(&client), Return(loader.release())));
     EXPECT_CALL(*loaderPtr, start(_));
     EXPECT_CALL(checkpoint, Call(2));
 
     RefPtr<BlobDataHandle> blobDataHandle = createBlobDataHandle("Once upon a time");
-    OwnPtr<WebDataConsumerHandle> handle
+    std::unique_ptr<WebDataConsumerHandle> handle
         = FetchBlobDataConsumerHandle::create(&document(), blobDataHandle, factory);
 
     size_t size = 0;
@@ -308,7 +309,7 @@
     checkpoint.Call(2);
     client->didFail(ResourceError());
     HandleReaderRunner<HandleReader> runner(std::move(handle));
-    OwnPtr<HandleReadResult> r = runner.wait();
+    std::unique_ptr<HandleReadResult> r = runner.wait();
     EXPECT_EQ(kUnexpectedError, r->result());
 }
 
@@ -317,22 +318,22 @@
     auto factory = new StrictMock<MockLoaderFactory>;
     Checkpoint checkpoint;
 
-    OwnPtr<MockThreadableLoader> loader = MockThreadableLoader::create();
+    std::unique_ptr<MockThreadableLoader> loader = MockThreadableLoader::create();
     MockThreadableLoader* loaderPtr = loader.get();
     ThreadableLoaderClient* client = nullptr;
 
     InSequence s;
     EXPECT_CALL(checkpoint, Call(1));
-    EXPECT_CALL(*factory, createInternal(Ref(document()), _, _, _)).WillOnce(DoAll(SaveArg<1>(&client), Return(loader.leakPtr())));
+    EXPECT_CALL(*factory, createInternal(Ref(document()), _, _, _)).WillOnce(DoAll(SaveArg<1>(&client), Return(loader.release())));
     EXPECT_CALL(*loaderPtr, start(_));
     EXPECT_CALL(checkpoint, Call(2));
     EXPECT_CALL(*loaderPtr, cancel());
 
     RefPtr<BlobDataHandle> blobDataHandle = createBlobDataHandle("Once upon a time");
-    OwnPtr<WebDataConsumerHandle> handle
+    std::unique_ptr<WebDataConsumerHandle> handle
         = FetchBlobDataConsumerHandle::create(&document(), blobDataHandle, factory);
 
-    OwnPtr<ReplayingHandle> src = ReplayingHandle::create();
+    std::unique_ptr<ReplayingHandle> src = ReplayingHandle::create();
     src->add(Command(Command::Wait));
     src->add(Command(Command::Data, "hello, "));
     src->add(Command(Command::Error));
@@ -344,7 +345,7 @@
     checkpoint.Call(2);
     client->didReceiveResponse(0, ResourceResponse(), std::move(src));
     HandleReaderRunner<HandleReader> runner(std::move(handle));
-    OwnPtr<HandleReadResult> r = runner.wait();
+    std::unique_ptr<HandleReadResult> r = runner.wait();
     EXPECT_EQ(kUnexpectedError, r->result());
 }
 
@@ -353,7 +354,7 @@
     auto factory = new StrictMock<MockLoaderFactory>;
 
     RefPtr<BlobDataHandle> blobDataHandle = createBlobDataHandle("Once upon a time");
-    OwnPtr<FetchDataConsumerHandle> handle
+    std::unique_ptr<FetchDataConsumerHandle> handle
         = FetchBlobDataConsumerHandle::create(&document(), blobDataHandle, factory);
 
     size_t size = 0;
@@ -368,7 +369,7 @@
     auto factory = new StrictMock<MockLoaderFactory>;
 
     RefPtr<BlobDataHandle> blobDataHandle = createBlobDataHandle("Once upon a time");
-    OwnPtr<FetchDataConsumerHandle> handle
+    std::unique_ptr<FetchDataConsumerHandle> handle
         = FetchBlobDataConsumerHandle::create(&document(), blobDataHandle, factory);
 
     RefPtr<EncodedFormData> formData = handle->obtainReader(nullptr)->drainAsFormData();
@@ -389,9 +390,9 @@
     auto factory = new StrictMock<MockLoaderFactory>;
 
     RefPtr<BlobDataHandle> blobDataHandle = createBlobDataHandle("Once upon a time");
-    OwnPtr<FetchDataConsumerHandle> handle
+    std::unique_ptr<FetchDataConsumerHandle> handle
         = FetchBlobDataConsumerHandle::create(&document(), blobDataHandle, factory);
-    OwnPtr<FetchDataConsumerHandle::Reader> reader = handle->obtainReader(nullptr);
+    std::unique_ptr<FetchDataConsumerHandle::Reader> reader = handle->obtainReader(nullptr);
 
     size_t readSize;
     EXPECT_EQ(kShouldWait, reader->read(nullptr, 0, kNone, &readSize));
@@ -403,9 +404,9 @@
     auto factory = new StrictMock<MockLoaderFactory>;
 
     RefPtr<BlobDataHandle> blobDataHandle = createBlobDataHandle("Once upon a time");
-    OwnPtr<FetchDataConsumerHandle> handle
+    std::unique_ptr<FetchDataConsumerHandle> handle
         = FetchBlobDataConsumerHandle::create(&document(), blobDataHandle, factory);
-    OwnPtr<FetchDataConsumerHandle::Reader> reader = handle->obtainReader(nullptr);
+    std::unique_ptr<FetchDataConsumerHandle::Reader> reader = handle->obtainReader(nullptr);
 
     size_t readSize;
     char c;
@@ -418,9 +419,9 @@
     auto factory = new StrictMock<MockLoaderFactory>;
 
     RefPtr<BlobDataHandle> blobDataHandle = createBlobDataHandle("Once upon a time");
-    OwnPtr<FetchDataConsumerHandle> handle
+    std::unique_ptr<FetchDataConsumerHandle> handle
         = FetchBlobDataConsumerHandle::create(&document(), blobDataHandle, factory);
-    OwnPtr<FetchDataConsumerHandle::Reader> reader = handle->obtainReader(nullptr);
+    std::unique_ptr<FetchDataConsumerHandle::Reader> reader = handle->obtainReader(nullptr);
 
     const void* buffer;
     size_t available;
diff --git a/third_party/WebKit/Source/modules/fetch/FetchDataConsumerHandle.h b/third_party/WebKit/Source/modules/fetch/FetchDataConsumerHandle.h
index 1179835..608ec91 100644
--- a/third_party/WebKit/Source/modules/fetch/FetchDataConsumerHandle.h
+++ b/third_party/WebKit/Source/modules/fetch/FetchDataConsumerHandle.h
@@ -11,6 +11,8 @@
 #include "public/platform/WebDataConsumerHandle.h"
 #include "wtf/Forward.h"
 #include "wtf/PassRefPtr.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
@@ -64,7 +66,7 @@
     // TODO(yhirano): obtainReader() is currently non-virtual override, and
     // will be changed into virtual override when we can use unique_ptr in
     // Blink.
-    PassOwnPtr<Reader> obtainReader(Client* client) { return adoptPtr(obtainReaderInternal(client)); }
+    std::unique_ptr<Reader> obtainReader(Client* client) { return wrapUnique(obtainReaderInternal(client)); }
 
 private:
     Reader* obtainReaderInternal(Client*) override = 0;
diff --git a/third_party/WebKit/Source/modules/fetch/FetchDataLoader.cpp b/third_party/WebKit/Source/modules/fetch/FetchDataLoader.cpp
index ea21ae5..abf3900 100644
--- a/third_party/WebKit/Source/modules/fetch/FetchDataLoader.cpp
+++ b/third_party/WebKit/Source/modules/fetch/FetchDataLoader.cpp
@@ -5,9 +5,11 @@
 #include "modules/fetch/FetchDataLoader.h"
 
 #include "core/html/parser/TextResourceDecoder.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/text/StringBuilder.h"
 #include "wtf/text/WTFString.h"
 #include "wtf/typed_arrays/ArrayBufferBuilder.h"
+#include <memory>
 
 namespace blink {
 
@@ -101,11 +103,11 @@
         m_client.clear();
     }
 
-    OwnPtr<FetchDataConsumerHandle::Reader> m_reader;
+    std::unique_ptr<FetchDataConsumerHandle::Reader> m_reader;
     Member<FetchDataLoader::Client> m_client;
 
     String m_mimeType;
-    OwnPtr<BlobData> m_blobData;
+    std::unique_ptr<BlobData> m_blobData;
 };
 
 class FetchDataLoaderAsArrayBuffer
@@ -128,7 +130,7 @@
         ASSERT(!m_rawData);
         ASSERT(!m_reader);
         m_client = client;
-        m_rawData = adoptPtr(new ArrayBufferBuilder());
+        m_rawData = wrapUnique(new ArrayBufferBuilder());
         m_reader = handle->obtainReader(this);
     }
 
@@ -191,10 +193,10 @@
         m_client.clear();
     }
 
-    OwnPtr<FetchDataConsumerHandle::Reader> m_reader;
+    std::unique_ptr<FetchDataConsumerHandle::Reader> m_reader;
     Member<FetchDataLoader::Client> m_client;
 
-    OwnPtr<ArrayBufferBuilder> m_rawData;
+    std::unique_ptr<ArrayBufferBuilder> m_rawData;
 };
 
 class FetchDataLoaderAsString
@@ -277,10 +279,10 @@
         m_client.clear();
     }
 
-    OwnPtr<FetchDataConsumerHandle::Reader> m_reader;
+    std::unique_ptr<FetchDataConsumerHandle::Reader> m_reader;
     Member<FetchDataLoader::Client> m_client;
 
-    OwnPtr<TextResourceDecoder> m_decoder;
+    std::unique_ptr<TextResourceDecoder> m_decoder;
     StringBuilder m_builder;
 };
 
@@ -369,7 +371,7 @@
         m_outStream.clear();
     }
 
-    OwnPtr<FetchDataConsumerHandle::Reader> m_reader;
+    std::unique_ptr<FetchDataConsumerHandle::Reader> m_reader;
     Member<FetchDataLoader::Client> m_client;
 
     Member<Stream> m_outStream;
diff --git a/third_party/WebKit/Source/modules/fetch/FetchDataLoaderTest.cpp b/third_party/WebKit/Source/modules/fetch/FetchDataLoaderTest.cpp
index 9c031fa..666ac44 100644
--- a/third_party/WebKit/Source/modules/fetch/FetchDataLoaderTest.cpp
+++ b/third_party/WebKit/Source/modules/fetch/FetchDataLoaderTest.cpp
@@ -7,6 +7,7 @@
 #include "modules/fetch/DataConsumerHandleTestUtil.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
+#include <memory>
 
 namespace blink {
 
@@ -39,8 +40,8 @@
     WebDataConsumerHandle::Client *client = nullptr;
     Checkpoint checkpoint;
 
-    OwnPtr<MockHandle> handle = MockHandle::create();
-    OwnPtr<MockReader> reader = MockReader::create();
+    std::unique_ptr<MockHandle> handle = MockHandle::create();
+    std::unique_ptr<MockReader> reader = MockReader::create();
     FetchDataLoader* fetchDataLoader = FetchDataLoader::createLoaderAsBlobHandle("text/test");
     MockFetchDataLoaderClient* fetchDataLoaderClient = MockFetchDataLoaderClient::create();
     RefPtr<BlobDataHandle> blobDataHandle;
@@ -59,7 +60,7 @@
     EXPECT_CALL(checkpoint, Call(4));
 
     // |reader| is adopted by |obtainReader|.
-    ASSERT_TRUE(reader.leakPtr());
+    ASSERT_TRUE(reader.release());
 
     checkpoint.Call(1);
     fetchDataLoader->start(handle.get(), fetchDataLoaderClient);
@@ -80,8 +81,8 @@
     WebDataConsumerHandle::Client *client = nullptr;
     Checkpoint checkpoint;
 
-    OwnPtr<MockHandle> handle = MockHandle::create();
-    OwnPtr<MockReader> reader = MockReader::create();
+    std::unique_ptr<MockHandle> handle = MockHandle::create();
+    std::unique_ptr<MockReader> reader = MockReader::create();
     FetchDataLoader* fetchDataLoader = FetchDataLoader::createLoaderAsBlobHandle("text/test");
     MockFetchDataLoaderClient* fetchDataLoaderClient = MockFetchDataLoaderClient::create();
 
@@ -99,7 +100,7 @@
     EXPECT_CALL(checkpoint, Call(4));
 
     // |reader| is adopted by |obtainReader|.
-    ASSERT_TRUE(reader.leakPtr());
+    ASSERT_TRUE(reader.release());
 
     checkpoint.Call(1);
     fetchDataLoader->start(handle.get(), fetchDataLoaderClient);
@@ -115,8 +116,8 @@
 {
     Checkpoint checkpoint;
 
-    OwnPtr<MockHandle> handle = MockHandle::create();
-    OwnPtr<MockReader> reader = MockReader::create();
+    std::unique_ptr<MockHandle> handle = MockHandle::create();
+    std::unique_ptr<MockReader> reader = MockReader::create();
     FetchDataLoader* fetchDataLoader = FetchDataLoader::createLoaderAsBlobHandle("text/test");
     MockFetchDataLoaderClient* fetchDataLoaderClient = MockFetchDataLoaderClient::create();
 
@@ -129,7 +130,7 @@
     EXPECT_CALL(checkpoint, Call(3));
 
     // |reader| is adopted by |obtainReader|.
-    ASSERT_TRUE(reader.leakPtr());
+    ASSERT_TRUE(reader.release());
 
     checkpoint.Call(1);
     fetchDataLoader->start(handle.get(), fetchDataLoaderClient);
@@ -140,15 +141,15 @@
 
 TEST(FetchDataLoaderTest, LoadAsBlobViaDrainAsBlobDataHandleWithSameContentType)
 {
-    OwnPtr<BlobData> blobData = BlobData::create();
+    std::unique_ptr<BlobData> blobData = BlobData::create();
     blobData->appendBytes(kQuickBrownFox, kQuickBrownFoxLengthWithTerminatingNull);
     blobData->setContentType("text/test");
     RefPtr<BlobDataHandle> inputBlobDataHandle = BlobDataHandle::create(std::move(blobData), kQuickBrownFoxLengthWithTerminatingNull);
 
     Checkpoint checkpoint;
 
-    OwnPtr<MockHandle> handle = MockHandle::create();
-    OwnPtr<MockReader> reader = MockReader::create();
+    std::unique_ptr<MockHandle> handle = MockHandle::create();
+    std::unique_ptr<MockReader> reader = MockReader::create();
     FetchDataLoader* fetchDataLoader = FetchDataLoader::createLoaderAsBlobHandle("text/test");
     MockFetchDataLoaderClient* fetchDataLoaderClient = MockFetchDataLoaderClient::create();
     RefPtr<BlobDataHandle> blobDataHandle;
@@ -163,7 +164,7 @@
     EXPECT_CALL(checkpoint, Call(3));
 
     // |reader| is adopted by |obtainReader|.
-    ASSERT_TRUE(reader.leakPtr());
+    ASSERT_TRUE(reader.release());
 
     checkpoint.Call(1);
     fetchDataLoader->start(handle.get(), fetchDataLoaderClient);
@@ -179,15 +180,15 @@
 
 TEST(FetchDataLoaderTest, LoadAsBlobViaDrainAsBlobDataHandleWithDifferentContentType)
 {
-    OwnPtr<BlobData> blobData = BlobData::create();
+    std::unique_ptr<BlobData> blobData = BlobData::create();
     blobData->appendBytes(kQuickBrownFox, kQuickBrownFoxLengthWithTerminatingNull);
     blobData->setContentType("text/different");
     RefPtr<BlobDataHandle> inputBlobDataHandle = BlobDataHandle::create(std::move(blobData), kQuickBrownFoxLengthWithTerminatingNull);
 
     Checkpoint checkpoint;
 
-    OwnPtr<MockHandle> handle = MockHandle::create();
-    OwnPtr<MockReader> reader = MockReader::create();
+    std::unique_ptr<MockHandle> handle = MockHandle::create();
+    std::unique_ptr<MockReader> reader = MockReader::create();
     FetchDataLoader* fetchDataLoader = FetchDataLoader::createLoaderAsBlobHandle("text/test");
     MockFetchDataLoaderClient* fetchDataLoaderClient = MockFetchDataLoaderClient::create();
     RefPtr<BlobDataHandle> blobDataHandle;
@@ -202,7 +203,7 @@
     EXPECT_CALL(checkpoint, Call(3));
 
     // |reader| is adopted by |obtainReader|.
-    ASSERT_TRUE(reader.leakPtr());
+    ASSERT_TRUE(reader.release());
 
     checkpoint.Call(1);
     fetchDataLoader->start(handle.get(), fetchDataLoaderClient);
@@ -221,8 +222,8 @@
     WebDataConsumerHandle::Client *client = nullptr;
     Checkpoint checkpoint;
 
-    OwnPtr<MockHandle> handle = MockHandle::create();
-    OwnPtr<MockReader> reader = MockReader::create();
+    std::unique_ptr<MockHandle> handle = MockHandle::create();
+    std::unique_ptr<MockReader> reader = MockReader::create();
     FetchDataLoader* fetchDataLoader = FetchDataLoader::createLoaderAsArrayBuffer();
     MockFetchDataLoaderClient* fetchDataLoaderClient = MockFetchDataLoaderClient::create();
     DOMArrayBuffer* arrayBuffer = nullptr;
@@ -240,7 +241,7 @@
     EXPECT_CALL(checkpoint, Call(4));
 
     // |reader| is adopted by |obtainReader|.
-    ASSERT_TRUE(reader.leakPtr());
+    ASSERT_TRUE(reader.release());
 
     checkpoint.Call(1);
     fetchDataLoader->start(handle.get(), fetchDataLoaderClient);
@@ -261,8 +262,8 @@
     WebDataConsumerHandle::Client *client = nullptr;
     Checkpoint checkpoint;
 
-    OwnPtr<MockHandle> handle = MockHandle::create();
-    OwnPtr<MockReader> reader = MockReader::create();
+    std::unique_ptr<MockHandle> handle = MockHandle::create();
+    std::unique_ptr<MockReader> reader = MockReader::create();
     FetchDataLoader* fetchDataLoader = FetchDataLoader::createLoaderAsArrayBuffer();
     MockFetchDataLoaderClient* fetchDataLoaderClient = MockFetchDataLoaderClient::create();
 
@@ -279,7 +280,7 @@
     EXPECT_CALL(checkpoint, Call(4));
 
     // |reader| is adopted by |obtainReader|.
-    ASSERT_TRUE(reader.leakPtr());
+    ASSERT_TRUE(reader.release());
 
     checkpoint.Call(1);
     fetchDataLoader->start(handle.get(), fetchDataLoaderClient);
@@ -295,8 +296,8 @@
 {
     Checkpoint checkpoint;
 
-    OwnPtr<MockHandle> handle = MockHandle::create();
-    OwnPtr<MockReader> reader = MockReader::create();
+    std::unique_ptr<MockHandle> handle = MockHandle::create();
+    std::unique_ptr<MockReader> reader = MockReader::create();
     FetchDataLoader* fetchDataLoader = FetchDataLoader::createLoaderAsArrayBuffer();
     MockFetchDataLoaderClient* fetchDataLoaderClient = MockFetchDataLoaderClient::create();
 
@@ -308,7 +309,7 @@
     EXPECT_CALL(checkpoint, Call(3));
 
     // |reader| is adopted by |obtainReader|.
-    ASSERT_TRUE(reader.leakPtr());
+    ASSERT_TRUE(reader.release());
 
     checkpoint.Call(1);
     fetchDataLoader->start(handle.get(), fetchDataLoaderClient);
@@ -322,8 +323,8 @@
     WebDataConsumerHandle::Client *client = nullptr;
     Checkpoint checkpoint;
 
-    OwnPtr<MockHandle> handle = MockHandle::create();
-    OwnPtr<MockReader> reader = MockReader::create();
+    std::unique_ptr<MockHandle> handle = MockHandle::create();
+    std::unique_ptr<MockReader> reader = MockReader::create();
     FetchDataLoader* fetchDataLoader = FetchDataLoader::createLoaderAsString();
     MockFetchDataLoaderClient* fetchDataLoaderClient = MockFetchDataLoaderClient::create();
 
@@ -340,7 +341,7 @@
     EXPECT_CALL(checkpoint, Call(4));
 
     // |reader| is adopted by |obtainReader|.
-    ASSERT_TRUE(reader.leakPtr());
+    ASSERT_TRUE(reader.release());
 
     checkpoint.Call(1);
     fetchDataLoader->start(handle.get(), fetchDataLoaderClient);
@@ -357,8 +358,8 @@
     WebDataConsumerHandle::Client *client = nullptr;
     Checkpoint checkpoint;
 
-    OwnPtr<MockHandle> handle = MockHandle::create();
-    OwnPtr<MockReader> reader = MockReader::create();
+    std::unique_ptr<MockHandle> handle = MockHandle::create();
+    std::unique_ptr<MockReader> reader = MockReader::create();
     FetchDataLoader* fetchDataLoader = FetchDataLoader::createLoaderAsString();
     MockFetchDataLoaderClient* fetchDataLoaderClient = MockFetchDataLoaderClient::create();
 
@@ -375,7 +376,7 @@
     EXPECT_CALL(checkpoint, Call(4));
 
     // |reader| is adopted by |obtainReader|.
-    ASSERT_TRUE(reader.leakPtr());
+    ASSERT_TRUE(reader.release());
 
     checkpoint.Call(1);
     fetchDataLoader->start(handle.get(), fetchDataLoaderClient);
@@ -392,8 +393,8 @@
     WebDataConsumerHandle::Client *client = nullptr;
     Checkpoint checkpoint;
 
-    OwnPtr<MockHandle> handle = MockHandle::create();
-    OwnPtr<MockReader> reader = MockReader::create();
+    std::unique_ptr<MockHandle> handle = MockHandle::create();
+    std::unique_ptr<MockReader> reader = MockReader::create();
     FetchDataLoader* fetchDataLoader = FetchDataLoader::createLoaderAsString();
     MockFetchDataLoaderClient* fetchDataLoaderClient = MockFetchDataLoaderClient::create();
 
@@ -410,7 +411,7 @@
     EXPECT_CALL(checkpoint, Call(4));
 
     // |reader| is adopted by |obtainReader|.
-    ASSERT_TRUE(reader.leakPtr());
+    ASSERT_TRUE(reader.release());
 
     checkpoint.Call(1);
     fetchDataLoader->start(handle.get(), fetchDataLoaderClient);
@@ -426,8 +427,8 @@
 {
     Checkpoint checkpoint;
 
-    OwnPtr<MockHandle> handle = MockHandle::create();
-    OwnPtr<MockReader> reader = MockReader::create();
+    std::unique_ptr<MockHandle> handle = MockHandle::create();
+    std::unique_ptr<MockReader> reader = MockReader::create();
     FetchDataLoader* fetchDataLoader = FetchDataLoader::createLoaderAsString();
     MockFetchDataLoaderClient* fetchDataLoaderClient = MockFetchDataLoaderClient::create();
 
@@ -439,7 +440,7 @@
     EXPECT_CALL(checkpoint, Call(3));
 
     // |reader| is adopted by |obtainReader|.
-    ASSERT_TRUE(reader.leakPtr());
+    ASSERT_TRUE(reader.release());
 
     checkpoint.Call(1);
     fetchDataLoader->start(handle.get(), fetchDataLoaderClient);
diff --git a/third_party/WebKit/Source/modules/fetch/FetchFormDataConsumerHandle.cpp b/third_party/WebKit/Source/modules/fetch/FetchFormDataConsumerHandle.cpp
index 36bc1754..b20f742 100644
--- a/third_party/WebKit/Source/modules/fetch/FetchFormDataConsumerHandle.cpp
+++ b/third_party/WebKit/Source/modules/fetch/FetchFormDataConsumerHandle.cpp
@@ -6,12 +6,13 @@
 
 #include "modules/fetch/DataConsumerHandleUtil.h"
 #include "modules/fetch/FetchBlobDataConsumerHandle.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/ThreadingPrimitives.h"
 #include "wtf/Vector.h"
 #include "wtf/text/TextCodec.h"
 #include "wtf/text/TextEncoding.h"
 #include "wtf/text/WTFString.h"
-
+#include <memory>
 #include <utility>
 
 namespace blink {
@@ -35,7 +36,7 @@
     WTF_MAKE_NONCOPYABLE(Context);
 public:
     virtual ~Context() {}
-    virtual PassOwnPtr<FetchDataConsumerHandle::Reader> obtainReader(Client*) = 0;
+    virtual std::unique_ptr<FetchDataConsumerHandle::Reader> obtainReader(Client*) = 0;
 
 protected:
     explicit Context() {}
@@ -48,7 +49,7 @@
     static PassRefPtr<SimpleContext> create(const void* data, size_t size) { return adoptRef(new SimpleContext(data, size)); }
     static PassRefPtr<SimpleContext> create(PassRefPtr<EncodedFormData> body) { return adoptRef(new SimpleContext(body)); }
 
-    PassOwnPtr<Reader> obtainReader(Client* client) override
+    std::unique_ptr<Reader> obtainReader(Client* client) override
     {
         // For memory barrier.
         Mutex m;
@@ -61,7 +62,7 @@
         if (!m_formData)
             return nullptr;
         flatten();
-        OwnPtr<BlobData> blobData = BlobData::create();
+        std::unique_ptr<BlobData> blobData = BlobData::create();
         blobData->appendBytes(m_flattenFormData.data(), m_flattenFormData.size());
         m_flattenFormData.clear();
         auto length = blobData->length();
@@ -121,7 +122,7 @@
     class ReaderImpl final : public FetchDataConsumerHandle::Reader {
         WTF_MAKE_NONCOPYABLE(ReaderImpl);
     public:
-        static PassOwnPtr<ReaderImpl> create(PassRefPtr<SimpleContext> context, Client* client) { return adoptPtr(new ReaderImpl(context, client)); }
+        static std::unique_ptr<ReaderImpl> create(PassRefPtr<SimpleContext> context, Client* client) { return wrapUnique(new ReaderImpl(context, client)); }
         Result read(void* data, size_t size, Flags flags, size_t* readSize) override
         {
             return m_context->read(data, size, flags, readSize);
@@ -184,7 +185,7 @@
         return adoptRef(new ComplexContext(executionContext, formData, factory));
     }
 
-    PassOwnPtr<FetchFormDataConsumerHandle::Reader> obtainReader(Client* client) override
+    std::unique_ptr<FetchFormDataConsumerHandle::Reader> obtainReader(Client* client) override
     {
         // For memory barrier.
         Mutex m;
@@ -196,7 +197,7 @@
     class ReaderImpl final : public FetchDataConsumerHandle::Reader {
         WTF_MAKE_NONCOPYABLE(ReaderImpl);
     public:
-        static PassOwnPtr<ReaderImpl> create(PassRefPtr<ComplexContext> context, Client* client) { return adoptPtr(new ReaderImpl(context, client)); }
+        static std::unique_ptr<ReaderImpl> create(PassRefPtr<ComplexContext> context, Client* client) { return wrapUnique(new ReaderImpl(context, client)); }
         Result read(void* data, size_t size, Flags flags, size_t* readSize) override
         {
             Result r = m_reader->read(data, size, flags, readSize);
@@ -239,12 +240,12 @@
         ReaderImpl(PassRefPtr<ComplexContext> context, Client* client) : m_context(context), m_reader(m_context->m_handle->obtainReader(client)) {}
 
         RefPtr<ComplexContext> m_context;
-        OwnPtr<FetchDataConsumerHandle::Reader> m_reader;
+        std::unique_ptr<FetchDataConsumerHandle::Reader> m_reader;
     };
 
     ComplexContext(ExecutionContext* executionContext, PassRefPtr<EncodedFormData> body, FetchBlobDataConsumerHandle::LoaderFactory* factory)
     {
-        OwnPtr<BlobData> blobData = BlobData::create();
+        std::unique_ptr<BlobData> blobData = BlobData::create();
         for (const auto& element : body->elements()) {
             switch (element.m_type) {
             case FormDataElement::data:
@@ -284,35 +285,35 @@
     }
 
     RefPtr<EncodedFormData> m_formData;
-    OwnPtr<FetchDataConsumerHandle> m_handle;
+    std::unique_ptr<FetchDataConsumerHandle> m_handle;
 };
 
-PassOwnPtr<FetchDataConsumerHandle> FetchFormDataConsumerHandle::create(const String& body)
+std::unique_ptr<FetchDataConsumerHandle> FetchFormDataConsumerHandle::create(const String& body)
 {
-    return adoptPtr(new FetchFormDataConsumerHandle(body));
+    return wrapUnique(new FetchFormDataConsumerHandle(body));
 }
-PassOwnPtr<FetchDataConsumerHandle> FetchFormDataConsumerHandle::create(DOMArrayBuffer* body)
+std::unique_ptr<FetchDataConsumerHandle> FetchFormDataConsumerHandle::create(DOMArrayBuffer* body)
 {
-    return adoptPtr(new FetchFormDataConsumerHandle(body->data(), body->byteLength()));
+    return wrapUnique(new FetchFormDataConsumerHandle(body->data(), body->byteLength()));
 }
-PassOwnPtr<FetchDataConsumerHandle> FetchFormDataConsumerHandle::create(DOMArrayBufferView* body)
+std::unique_ptr<FetchDataConsumerHandle> FetchFormDataConsumerHandle::create(DOMArrayBufferView* body)
 {
-    return adoptPtr(new FetchFormDataConsumerHandle(body->baseAddress(), body->byteLength()));
+    return wrapUnique(new FetchFormDataConsumerHandle(body->baseAddress(), body->byteLength()));
 }
-PassOwnPtr<FetchDataConsumerHandle> FetchFormDataConsumerHandle::create(const void* data, size_t size)
+std::unique_ptr<FetchDataConsumerHandle> FetchFormDataConsumerHandle::create(const void* data, size_t size)
 {
-    return adoptPtr(new FetchFormDataConsumerHandle(data, size));
+    return wrapUnique(new FetchFormDataConsumerHandle(data, size));
 }
-PassOwnPtr<FetchDataConsumerHandle> FetchFormDataConsumerHandle::create(ExecutionContext* executionContext, PassRefPtr<EncodedFormData> body)
+std::unique_ptr<FetchDataConsumerHandle> FetchFormDataConsumerHandle::create(ExecutionContext* executionContext, PassRefPtr<EncodedFormData> body)
 {
-    return adoptPtr(new FetchFormDataConsumerHandle(executionContext, body));
+    return wrapUnique(new FetchFormDataConsumerHandle(executionContext, body));
 }
-PassOwnPtr<FetchDataConsumerHandle> FetchFormDataConsumerHandle::createForTest(
+std::unique_ptr<FetchDataConsumerHandle> FetchFormDataConsumerHandle::createForTest(
     ExecutionContext* executionContext,
     PassRefPtr<EncodedFormData> body,
     FetchBlobDataConsumerHandle::LoaderFactory* loaderFactory)
 {
-    return adoptPtr(new FetchFormDataConsumerHandle(executionContext, body, loaderFactory));
+    return wrapUnique(new FetchFormDataConsumerHandle(executionContext, body, loaderFactory));
 }
 
 FetchFormDataConsumerHandle::FetchFormDataConsumerHandle(const String& body) : m_context(SimpleContext::create(body)) {}
@@ -331,7 +332,7 @@
 
 FetchDataConsumerHandle::Reader* FetchFormDataConsumerHandle::obtainReaderInternal(Client* client)
 {
-    return m_context->obtainReader(client).leakPtr();
+    return m_context->obtainReader(client).release();
 }
 
 } // namespace blink
diff --git a/third_party/WebKit/Source/modules/fetch/FetchFormDataConsumerHandle.h b/third_party/WebKit/Source/modules/fetch/FetchFormDataConsumerHandle.h
index ab25ff88..2abe693d 100644
--- a/third_party/WebKit/Source/modules/fetch/FetchFormDataConsumerHandle.h
+++ b/third_party/WebKit/Source/modules/fetch/FetchFormDataConsumerHandle.h
@@ -13,10 +13,10 @@
 #include "platform/blob/BlobData.h"
 #include "platform/network/EncodedFormData.h"
 #include "wtf/Forward.h"
-#include "wtf/PassOwnPtr.h"
 #include "wtf/PassRefPtr.h"
 #include "wtf/RefPtr.h"
 #include "wtf/ThreadSafeRefCounted.h"
+#include <memory>
 
 namespace blink {
 
@@ -27,16 +27,16 @@
 class MODULES_EXPORT FetchFormDataConsumerHandle final : public FetchDataConsumerHandle {
     WTF_MAKE_NONCOPYABLE(FetchFormDataConsumerHandle);
 public:
-    static PassOwnPtr<FetchDataConsumerHandle> create(const String& body);
-    static PassOwnPtr<FetchDataConsumerHandle> create(DOMArrayBuffer* body);
-    static PassOwnPtr<FetchDataConsumerHandle> create(DOMArrayBufferView* body);
-    static PassOwnPtr<FetchDataConsumerHandle> create(const void* data, size_t);
-    static PassOwnPtr<FetchDataConsumerHandle> create(ExecutionContext*, PassRefPtr<EncodedFormData> body);
+    static std::unique_ptr<FetchDataConsumerHandle> create(const String& body);
+    static std::unique_ptr<FetchDataConsumerHandle> create(DOMArrayBuffer* body);
+    static std::unique_ptr<FetchDataConsumerHandle> create(DOMArrayBufferView* body);
+    static std::unique_ptr<FetchDataConsumerHandle> create(const void* data, size_t);
+    static std::unique_ptr<FetchDataConsumerHandle> create(ExecutionContext*, PassRefPtr<EncodedFormData> body);
     // Use FetchBlobDataConsumerHandle for blobs.
 
     ~FetchFormDataConsumerHandle() override;
 
-    static PassOwnPtr<FetchDataConsumerHandle> createForTest(
+    static std::unique_ptr<FetchDataConsumerHandle> createForTest(
         ExecutionContext*,
         PassRefPtr<EncodedFormData> body,
         FetchBlobDataConsumerHandle::LoaderFactory*);
diff --git a/third_party/WebKit/Source/modules/fetch/FetchFormDataConsumerHandleTest.cpp b/third_party/WebKit/Source/modules/fetch/FetchFormDataConsumerHandleTest.cpp
index f4432a6..43262d0 100644
--- a/third_party/WebKit/Source/modules/fetch/FetchFormDataConsumerHandleTest.cpp
+++ b/third_party/WebKit/Source/modules/fetch/FetchFormDataConsumerHandleTest.cpp
@@ -15,13 +15,12 @@
 #include "platform/weborigin/KURL.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
-#include "wtf/OwnPtr.h"
-#include "wtf/PassOwnPtr.h"
 #include "wtf/PassRefPtr.h"
 #include "wtf/RefPtr.h"
 #include "wtf/Vector.h"
 #include "wtf/text/TextEncoding.h"
 #include "wtf/text/WTFString.h"
+#include <memory>
 #include <string.h>
 
 namespace blink {
@@ -50,14 +49,14 @@
 
 class LoaderFactory : public FetchBlobDataConsumerHandle::LoaderFactory {
 public:
-    explicit LoaderFactory(PassOwnPtr<WebDataConsumerHandle> handle)
+    explicit LoaderFactory(std::unique_ptr<WebDataConsumerHandle> handle)
         : m_client(nullptr)
         , m_handle(std::move(handle)) {}
-    PassOwnPtr<ThreadableLoader> create(ExecutionContext&, ThreadableLoaderClient* client, const ThreadableLoaderOptions&, const ResourceLoaderOptions&) override
+    std::unique_ptr<ThreadableLoader> create(ExecutionContext&, ThreadableLoaderClient* client, const ThreadableLoaderOptions&, const ResourceLoaderOptions&) override
     {
         m_client = client;
 
-        OwnPtr<MockThreadableLoader> loader = MockThreadableLoader::create();
+        std::unique_ptr<MockThreadableLoader> loader = MockThreadableLoader::create();
         EXPECT_CALL(*loader, start(_)).WillOnce(InvokeWithoutArgs(this, &LoaderFactory::handleDidReceiveResponse));
         EXPECT_CALL(*loader, cancel()).Times(1);
         return std::move(loader);
@@ -70,7 +69,7 @@
     }
 
     ThreadableLoaderClient* m_client;
-    OwnPtr<WebDataConsumerHandle> m_handle;
+    std::unique_ptr<WebDataConsumerHandle> m_handle;
 };
 
 class FetchFormDataConsumerHandleTest : public ::testing::Test {
@@ -80,7 +79,7 @@
 protected:
     Document* getDocument() { return &m_page->document(); }
 
-    OwnPtr<DummyPageHolder> m_page;
+    std::unique_ptr<DummyPageHolder> m_page;
 };
 
 PassRefPtr<EncodedFormData> complexFormData()
@@ -90,7 +89,7 @@
     data->appendData("foo", 3);
     data->appendFileRange("/foo/bar/baz", 3, 4, 5);
     data->appendFileSystemURLRange(KURL(KURL(), "file:///foo/bar/baz"), 6, 7, 8);
-    OwnPtr<BlobData> blobData = BlobData::create();
+    std::unique_ptr<BlobData> blobData = BlobData::create();
     blobData->appendText("hello", false);
     auto size = blobData->length();
     RefPtr<BlobDataHandle> blobDataHandle = BlobDataHandle::create(std::move(blobData), size);
@@ -132,18 +131,18 @@
 
 TEST_F(FetchFormDataConsumerHandleTest, ReadFromString)
 {
-    OwnPtr<FetchDataConsumerHandle> handle = FetchFormDataConsumerHandle::create(String("hello, world"));
+    std::unique_ptr<FetchDataConsumerHandle> handle = FetchFormDataConsumerHandle::create(String("hello, world"));
     HandleReaderRunner<HandleReader> runner(std::move(handle));
-    OwnPtr<HandleReadResult> r = runner.wait();
+    std::unique_ptr<HandleReadResult> r = runner.wait();
     EXPECT_EQ(kDone, r->result());
     EXPECT_EQ("hello, world", toString(r->data()));
 }
 
 TEST_F(FetchFormDataConsumerHandleTest, TwoPhaseReadFromString)
 {
-    OwnPtr<FetchDataConsumerHandle> handle = FetchFormDataConsumerHandle::create(String("hello, world"));
+    std::unique_ptr<FetchDataConsumerHandle> handle = FetchFormDataConsumerHandle::create(String("hello, world"));
     HandleReaderRunner<HandleTwoPhaseReader> runner(std::move(handle));
-    OwnPtr<HandleReadResult> r = runner.wait();
+    std::unique_ptr<HandleReadResult> r = runner.wait();
     EXPECT_EQ(kDone, r->result());
     EXPECT_EQ("hello, world", toString(r->data()));
 }
@@ -151,9 +150,9 @@
 TEST_F(FetchFormDataConsumerHandleTest, ReadFromStringNonLatin)
 {
     UChar cs[] = {0x3042, 0};
-    OwnPtr<FetchDataConsumerHandle> handle = FetchFormDataConsumerHandle::create(String(cs));
+    std::unique_ptr<FetchDataConsumerHandle> handle = FetchFormDataConsumerHandle::create(String(cs));
     HandleReaderRunner<HandleReader> runner(std::move(handle));
-    OwnPtr<HandleReadResult> r = runner.wait();
+    std::unique_ptr<HandleReadResult> r = runner.wait();
     EXPECT_EQ(kDone, r->result());
     EXPECT_EQ("\xe3\x81\x82", toString(r->data()));
 }
@@ -162,9 +161,9 @@
 {
     const unsigned char data[] = { 0x21, 0xfe, 0x00, 0x00, 0xff, 0xa3, 0x42, 0x30, 0x42, 0x99, 0x88 };
     DOMArrayBuffer* buffer = DOMArrayBuffer::create(data, WTF_ARRAY_LENGTH(data));
-    OwnPtr<FetchDataConsumerHandle> handle = FetchFormDataConsumerHandle::create(buffer);
+    std::unique_ptr<FetchDataConsumerHandle> handle = FetchFormDataConsumerHandle::create(buffer);
     HandleReaderRunner<HandleReader> runner(std::move(handle));
-    OwnPtr<HandleReadResult> r = runner.wait();
+    std::unique_ptr<HandleReadResult> r = runner.wait();
     EXPECT_EQ(kDone, r->result());
     Vector<char> expected;
     expected.append(data, WTF_ARRAY_LENGTH(data));
@@ -176,9 +175,9 @@
     const unsigned char data[] = { 0x21, 0xfe, 0x00, 0x00, 0xff, 0xa3, 0x42, 0x30, 0x42, 0x99, 0x88 };
     const size_t offset = 1, size = 4;
     DOMArrayBuffer* buffer = DOMArrayBuffer::create(data, WTF_ARRAY_LENGTH(data));
-    OwnPtr<FetchDataConsumerHandle> handle = FetchFormDataConsumerHandle::create(DOMUint8Array::create(buffer, offset, size));
+    std::unique_ptr<FetchDataConsumerHandle> handle = FetchFormDataConsumerHandle::create(DOMUint8Array::create(buffer, offset, size));
     HandleReaderRunner<HandleReader> runner(std::move(handle));
-    OwnPtr<HandleReadResult> r = runner.wait();
+    std::unique_ptr<HandleReadResult> r = runner.wait();
     EXPECT_EQ(kDone, r->result());
     Vector<char> expected;
     expected.append(data + offset, size);
@@ -191,10 +190,10 @@
     data->appendData("foo", 3);
     data->appendData("hoge", 4);
 
-    OwnPtr<FetchDataConsumerHandle> handle = FetchFormDataConsumerHandle::create(getDocument(), data);
+    std::unique_ptr<FetchDataConsumerHandle> handle = FetchFormDataConsumerHandle::create(getDocument(), data);
     HandleReaderRunner<HandleReader> runner(std::move(handle));
     testing::runPendingTasks();
-    OwnPtr<HandleReadResult> r = runner.wait();
+    std::unique_ptr<HandleReadResult> r = runner.wait();
     EXPECT_EQ(kDone, r->result());
     EXPECT_EQ("foohoge", toString(r->data()));
 }
@@ -202,17 +201,17 @@
 TEST_F(FetchFormDataConsumerHandleTest, ReadFromComplexFormData)
 {
     RefPtr<EncodedFormData> data = complexFormData();
-    OwnPtr<ReplayingHandle> src = ReplayingHandle::create();
+    std::unique_ptr<ReplayingHandle> src = ReplayingHandle::create();
     src->add(Command(Command::Data, "bar"));
     src->add(Command(Command::Done));
-    OwnPtr<FetchDataConsumerHandle> handle = FetchFormDataConsumerHandle::createForTest(getDocument(), data, new LoaderFactory(std::move(src)));
+    std::unique_ptr<FetchDataConsumerHandle> handle = FetchFormDataConsumerHandle::createForTest(getDocument(), data, new LoaderFactory(std::move(src)));
     char c;
     size_t readSize;
     EXPECT_EQ(kShouldWait, handle->obtainReader(nullptr)->read(&c, 1, kNone, &readSize));
 
     HandleReaderRunner<HandleReader> runner(std::move(handle));
     testing::runPendingTasks();
-    OwnPtr<HandleReadResult> r = runner.wait();
+    std::unique_ptr<HandleReadResult> r = runner.wait();
     EXPECT_EQ(kDone, r->result());
     EXPECT_EQ("bar", toString(r->data()));
 }
@@ -220,25 +219,25 @@
 TEST_F(FetchFormDataConsumerHandleTest, TwoPhaseReadFromComplexFormData)
 {
     RefPtr<EncodedFormData> data = complexFormData();
-    OwnPtr<ReplayingHandle> src = ReplayingHandle::create();
+    std::unique_ptr<ReplayingHandle> src = ReplayingHandle::create();
     src->add(Command(Command::Data, "bar"));
     src->add(Command(Command::Done));
-    OwnPtr<FetchDataConsumerHandle> handle = FetchFormDataConsumerHandle::createForTest(getDocument(), data, new LoaderFactory(std::move(src)));
+    std::unique_ptr<FetchDataConsumerHandle> handle = FetchFormDataConsumerHandle::createForTest(getDocument(), data, new LoaderFactory(std::move(src)));
     char c;
     size_t readSize;
     EXPECT_EQ(kShouldWait, handle->obtainReader(nullptr)->read(&c, 1, kNone, &readSize));
 
     HandleReaderRunner<HandleTwoPhaseReader> runner(std::move(handle));
     testing::runPendingTasks();
-    OwnPtr<HandleReadResult> r = runner.wait();
+    std::unique_ptr<HandleReadResult> r = runner.wait();
     EXPECT_EQ(kDone, r->result());
     EXPECT_EQ("bar", toString(r->data()));
 }
 
 TEST_F(FetchFormDataConsumerHandleTest, DrainAsBlobDataHandleFromString)
 {
-    OwnPtr<FetchDataConsumerHandle> handle = FetchFormDataConsumerHandle::create(String("hello, world"));
-    OwnPtr<FetchDataConsumerHandle::Reader> reader = handle->obtainReader(nullptr);
+    std::unique_ptr<FetchDataConsumerHandle> handle = FetchFormDataConsumerHandle::create(String("hello, world"));
+    std::unique_ptr<FetchDataConsumerHandle::Reader> reader = handle->obtainReader(nullptr);
     RefPtr<BlobDataHandle> blobDataHandle = reader->drainAsBlobDataHandle();
     ASSERT_TRUE(blobDataHandle);
 
@@ -252,8 +251,8 @@
 
 TEST_F(FetchFormDataConsumerHandleTest, DrainAsBlobDataHandleFromArrayBuffer)
 {
-    OwnPtr<FetchDataConsumerHandle> handle = FetchFormDataConsumerHandle::create(DOMArrayBuffer::create("foo", 3));
-    OwnPtr<FetchDataConsumerHandle::Reader> reader = handle->obtainReader(nullptr);
+    std::unique_ptr<FetchDataConsumerHandle> handle = FetchFormDataConsumerHandle::create(DOMArrayBuffer::create("foo", 3));
+    std::unique_ptr<FetchDataConsumerHandle::Reader> reader = handle->obtainReader(nullptr);
     RefPtr<BlobDataHandle> blobDataHandle = reader->drainAsBlobDataHandle();
     ASSERT_TRUE(blobDataHandle);
 
@@ -272,8 +271,8 @@
     data->append("name2", "value2");
     RefPtr<EncodedFormData> inputFormData = data->encodeMultiPartFormData();
 
-    OwnPtr<FetchDataConsumerHandle> handle = FetchFormDataConsumerHandle::create(getDocument(), inputFormData);
-    OwnPtr<FetchDataConsumerHandle::Reader> reader = handle->obtainReader(nullptr);
+    std::unique_ptr<FetchDataConsumerHandle> handle = FetchFormDataConsumerHandle::create(getDocument(), inputFormData);
+    std::unique_ptr<FetchDataConsumerHandle::Reader> reader = handle->obtainReader(nullptr);
     RefPtr<BlobDataHandle> blobDataHandle = reader->drainAsBlobDataHandle();
     ASSERT_TRUE(blobDataHandle);
 
@@ -289,8 +288,8 @@
 {
     RefPtr<EncodedFormData> inputFormData = complexFormData();
 
-    OwnPtr<FetchDataConsumerHandle> handle = FetchFormDataConsumerHandle::create(getDocument(), inputFormData);
-    OwnPtr<FetchDataConsumerHandle::Reader> reader = handle->obtainReader(nullptr);
+    std::unique_ptr<FetchDataConsumerHandle> handle = FetchFormDataConsumerHandle::create(getDocument(), inputFormData);
+    std::unique_ptr<FetchDataConsumerHandle::Reader> reader = handle->obtainReader(nullptr);
     RefPtr<BlobDataHandle> blobDataHandle = reader->drainAsBlobDataHandle();
     ASSERT_TRUE(blobDataHandle);
 
@@ -302,8 +301,8 @@
 
 TEST_F(FetchFormDataConsumerHandleTest, DrainAsFormDataFromString)
 {
-    OwnPtr<FetchDataConsumerHandle> handle = FetchFormDataConsumerHandle::create(String("hello, world"));
-    OwnPtr<FetchDataConsumerHandle::Reader> reader = handle->obtainReader(nullptr);
+    std::unique_ptr<FetchDataConsumerHandle> handle = FetchFormDataConsumerHandle::create(String("hello, world"));
+    std::unique_ptr<FetchDataConsumerHandle::Reader> reader = handle->obtainReader(nullptr);
     RefPtr<EncodedFormData> formData = reader->drainAsFormData();
     ASSERT_TRUE(formData);
     EXPECT_TRUE(formData->isSafeToSendToAnotherThread());
@@ -317,8 +316,8 @@
 
 TEST_F(FetchFormDataConsumerHandleTest, DrainAsFormDataFromArrayBuffer)
 {
-    OwnPtr<FetchDataConsumerHandle> handle = FetchFormDataConsumerHandle::create(DOMArrayBuffer::create("foo", 3));
-    OwnPtr<FetchDataConsumerHandle::Reader> reader = handle->obtainReader(nullptr);
+    std::unique_ptr<FetchDataConsumerHandle> handle = FetchFormDataConsumerHandle::create(DOMArrayBuffer::create("foo", 3));
+    std::unique_ptr<FetchDataConsumerHandle::Reader> reader = handle->obtainReader(nullptr);
     RefPtr<EncodedFormData> formData = reader->drainAsFormData();
     ASSERT_TRUE(formData);
     EXPECT_TRUE(formData->isSafeToSendToAnotherThread());
@@ -332,8 +331,8 @@
     data->append("name2", "value2");
     RefPtr<EncodedFormData> inputFormData = data->encodeMultiPartFormData();
 
-    OwnPtr<FetchDataConsumerHandle> handle = FetchFormDataConsumerHandle::create(getDocument(), inputFormData);
-    OwnPtr<FetchDataConsumerHandle::Reader> reader = handle->obtainReader(nullptr);
+    std::unique_ptr<FetchDataConsumerHandle> handle = FetchFormDataConsumerHandle::create(getDocument(), inputFormData);
+    std::unique_ptr<FetchDataConsumerHandle::Reader> reader = handle->obtainReader(nullptr);
     RefPtr<EncodedFormData> outputFormData = reader->drainAsFormData();
     ASSERT_TRUE(outputFormData);
     EXPECT_TRUE(outputFormData->isSafeToSendToAnotherThread());
@@ -345,8 +344,8 @@
 {
     RefPtr<EncodedFormData> inputFormData = complexFormData();
 
-    OwnPtr<FetchDataConsumerHandle> handle = FetchFormDataConsumerHandle::create(getDocument(), inputFormData);
-    OwnPtr<FetchDataConsumerHandle::Reader> reader = handle->obtainReader(nullptr);
+    std::unique_ptr<FetchDataConsumerHandle> handle = FetchFormDataConsumerHandle::create(getDocument(), inputFormData);
+    std::unique_ptr<FetchDataConsumerHandle::Reader> reader = handle->obtainReader(nullptr);
     RefPtr<EncodedFormData> outputFormData = reader->drainAsFormData();
     ASSERT_TRUE(outputFormData);
     EXPECT_TRUE(outputFormData->isSafeToSendToAnotherThread());
@@ -356,8 +355,8 @@
 
 TEST_F(FetchFormDataConsumerHandleTest, ZeroByteReadDoesNotAffectDraining)
 {
-    OwnPtr<FetchDataConsumerHandle> handle = FetchFormDataConsumerHandle::create(String("hello, world"));
-    OwnPtr<FetchDataConsumerHandle::Reader> reader = handle->obtainReader(nullptr);
+    std::unique_ptr<FetchDataConsumerHandle> handle = FetchFormDataConsumerHandle::create(String("hello, world"));
+    std::unique_ptr<FetchDataConsumerHandle::Reader> reader = handle->obtainReader(nullptr);
     size_t readSize;
     EXPECT_EQ(kOk, reader->read(nullptr, 0, kNone, &readSize));
     RefPtr<EncodedFormData> formData = reader->drainAsFormData();
@@ -369,8 +368,8 @@
 TEST_F(FetchFormDataConsumerHandleTest, OneByteReadAffectsDraining)
 {
     char c;
-    OwnPtr<FetchDataConsumerHandle> handle = FetchFormDataConsumerHandle::create(String("hello, world"));
-    OwnPtr<FetchDataConsumerHandle::Reader> reader = handle->obtainReader(nullptr);
+    std::unique_ptr<FetchDataConsumerHandle> handle = FetchFormDataConsumerHandle::create(String("hello, world"));
+    std::unique_ptr<FetchDataConsumerHandle::Reader> reader = handle->obtainReader(nullptr);
     size_t readSize;
     EXPECT_EQ(kOk, reader->read(&c, 1, kNone, &readSize));
     EXPECT_EQ(1u, readSize);
@@ -381,8 +380,8 @@
 TEST_F(FetchFormDataConsumerHandleTest, BeginReadAffectsDraining)
 {
     const void* buffer = nullptr;
-    OwnPtr<FetchDataConsumerHandle> handle = FetchFormDataConsumerHandle::create(String("hello, world"));
-    OwnPtr<FetchDataConsumerHandle::Reader> reader = handle->obtainReader(nullptr);
+    std::unique_ptr<FetchDataConsumerHandle> handle = FetchFormDataConsumerHandle::create(String("hello, world"));
+    std::unique_ptr<FetchDataConsumerHandle::Reader> reader = handle->obtainReader(nullptr);
     size_t available;
     EXPECT_EQ(kOk, reader->beginRead(&buffer, kNone, &available));
     ASSERT_TRUE(buffer);
@@ -394,11 +393,11 @@
 
 TEST_F(FetchFormDataConsumerHandleTest, ZeroByteReadDoesNotAffectDrainingForComplexFormData)
 {
-    OwnPtr<ReplayingHandle> src = ReplayingHandle::create();
+    std::unique_ptr<ReplayingHandle> src = ReplayingHandle::create();
     src->add(Command(Command::Data, "bar"));
     src->add(Command(Command::Done));
-    OwnPtr<FetchDataConsumerHandle> handle = FetchFormDataConsumerHandle::createForTest(getDocument(), complexFormData(), new LoaderFactory(std::move(src)));
-    OwnPtr<FetchDataConsumerHandle::Reader> reader = handle->obtainReader(nullptr);
+    std::unique_ptr<FetchDataConsumerHandle> handle = FetchFormDataConsumerHandle::createForTest(getDocument(), complexFormData(), new LoaderFactory(std::move(src)));
+    std::unique_ptr<FetchDataConsumerHandle::Reader> reader = handle->obtainReader(nullptr);
     size_t readSize;
     EXPECT_EQ(kShouldWait, reader->read(nullptr, 0, kNone, &readSize));
     testing::runPendingTasks();
@@ -411,11 +410,11 @@
 
 TEST_F(FetchFormDataConsumerHandleTest, OneByteReadAffectsDrainingForComplexFormData)
 {
-    OwnPtr<ReplayingHandle> src = ReplayingHandle::create();
+    std::unique_ptr<ReplayingHandle> src = ReplayingHandle::create();
     src->add(Command(Command::Data, "bar"));
     src->add(Command(Command::Done));
-    OwnPtr<FetchDataConsumerHandle> handle = FetchFormDataConsumerHandle::createForTest(getDocument(), complexFormData(), new LoaderFactory(std::move(src)));
-    OwnPtr<FetchDataConsumerHandle::Reader> reader = handle->obtainReader(nullptr);
+    std::unique_ptr<FetchDataConsumerHandle> handle = FetchFormDataConsumerHandle::createForTest(getDocument(), complexFormData(), new LoaderFactory(std::move(src)));
+    std::unique_ptr<FetchDataConsumerHandle::Reader> reader = handle->obtainReader(nullptr);
     char c;
     size_t readSize;
     EXPECT_EQ(kShouldWait, reader->read(&c, 1, kNone, &readSize));
@@ -428,12 +427,12 @@
 
 TEST_F(FetchFormDataConsumerHandleTest, BeginReadAffectsDrainingForComplexFormData)
 {
-    OwnPtr<ReplayingHandle> src = ReplayingHandle::create();
+    std::unique_ptr<ReplayingHandle> src = ReplayingHandle::create();
     src->add(Command(Command::Data, "bar"));
     src->add(Command(Command::Done));
     const void* buffer = nullptr;
-    OwnPtr<FetchDataConsumerHandle> handle = FetchFormDataConsumerHandle::createForTest(getDocument(), complexFormData(), new LoaderFactory(std::move(src)));
-    OwnPtr<FetchDataConsumerHandle::Reader> reader = handle->obtainReader(nullptr);
+    std::unique_ptr<FetchDataConsumerHandle> handle = FetchFormDataConsumerHandle::createForTest(getDocument(), complexFormData(), new LoaderFactory(std::move(src)));
+    std::unique_ptr<FetchDataConsumerHandle::Reader> reader = handle->obtainReader(nullptr);
     size_t available;
     EXPECT_EQ(kShouldWait, reader->beginRead(&buffer, kNone, &available));
     testing::runPendingTasks();
diff --git a/third_party/WebKit/Source/modules/fetch/FetchHeaderList.cpp b/third_party/WebKit/Source/modules/fetch/FetchHeaderList.cpp
index cb329ed..aa54baf1 100644
--- a/third_party/WebKit/Source/modules/fetch/FetchHeaderList.cpp
+++ b/third_party/WebKit/Source/modules/fetch/FetchHeaderList.cpp
@@ -6,7 +6,7 @@
 
 #include "core/fetch/FetchUtils.h"
 #include "platform/network/HTTPParsers.h"
-#include "wtf/PassOwnPtr.h"
+#include "wtf/PtrUtil.h"
 
 namespace blink {
 
@@ -36,7 +36,7 @@
     // "To append a name/value (|name|/|value|) pair to a header list (|list|),
     // append a new header whose name is |name|, byte lowercased, and value is
     // |value|, to |list|."
-    m_headerList.append(adoptPtr(new Header(name.lower(), value)));
+    m_headerList.append(wrapUnique(new Header(name.lower(), value)));
 }
 
 void FetchHeaderList::set(const String& name, const String& value)
@@ -61,7 +61,7 @@
             return;
         }
     }
-    m_headerList.append(adoptPtr(new Header(lowercasedName, value)));
+    m_headerList.append(wrapUnique(new Header(lowercasedName, value)));
 }
 
 String FetchHeaderList::extractMIMEType() const
diff --git a/third_party/WebKit/Source/modules/fetch/FetchHeaderList.h b/third_party/WebKit/Source/modules/fetch/FetchHeaderList.h
index 2aa9d0f..e22abab 100644
--- a/third_party/WebKit/Source/modules/fetch/FetchHeaderList.h
+++ b/third_party/WebKit/Source/modules/fetch/FetchHeaderList.h
@@ -7,10 +7,10 @@
 
 #include "modules/ModulesExport.h"
 #include "platform/heap/Handle.h"
-#include "wtf/OwnPtr.h"
 #include "wtf/PassRefPtr.h"
 #include "wtf/Vector.h"
 #include "wtf/text/WTFString.h"
+#include <memory>
 #include <utility>
 
 namespace blink {
@@ -39,7 +39,7 @@
 
     bool containsNonSimpleHeader() const;
 
-    const Vector<OwnPtr<Header>>& list() const { return m_headerList; }
+    const Vector<std::unique_ptr<Header>>& list() const { return m_headerList; }
     const Header& entry(size_t index) const { return *(m_headerList[index].get()); }
 
     static bool isValidHeaderName(const String&);
@@ -49,7 +49,7 @@
 
 private:
     FetchHeaderList();
-    Vector<OwnPtr<Header>> m_headerList;
+    Vector<std::unique_ptr<Header>> m_headerList;
 };
 
 } // namespace blink
diff --git a/third_party/WebKit/Source/modules/fetch/FetchManager.cpp b/third_party/WebKit/Source/modules/fetch/FetchManager.cpp
index 482e116..742c0f6 100644
--- a/third_party/WebKit/Source/modules/fetch/FetchManager.cpp
+++ b/third_party/WebKit/Source/modules/fetch/FetchManager.cpp
@@ -38,9 +38,9 @@
 #include "platform/weborigin/SecurityPolicy.h"
 #include "public/platform/WebURLRequest.h"
 #include "wtf/HashSet.h"
-#include "wtf/OwnPtr.h"
 #include "wtf/Vector.h"
 #include "wtf/text/WTFString.h"
+#include <memory>
 
 namespace blink {
 
@@ -64,7 +64,7 @@
     ~Loader() override;
     DECLARE_VIRTUAL_TRACE();
 
-    void didReceiveResponse(unsigned long, const ResourceResponse&, PassOwnPtr<WebDataConsumerHandle>) override;
+    void didReceiveResponse(unsigned long, const ResourceResponse&, std::unique_ptr<WebDataConsumerHandle>) override;
     void didFinishLoading(unsigned long, double) override;
     void didFail(const ResourceError&) override;
     void didFailAccessControlCheck(const ResourceError&) override;
@@ -80,7 +80,7 @@
         // SRIVerifier takes ownership of |handle| and |response|.
         // |updater| must be garbage collected. The other arguments
         // all must have the lifetime of the give loader.
-        SRIVerifier(PassOwnPtr<WebDataConsumerHandle> handle, CompositeDataConsumerHandle::Updater* updater, Response* response, FetchManager::Loader* loader, String integrityMetadata, const KURL& url)
+        SRIVerifier(std::unique_ptr<WebDataConsumerHandle> handle, CompositeDataConsumerHandle::Updater* updater, Response* response, FetchManager::Loader* loader, String integrityMetadata, const KURL& url)
             : m_handle(std::move(handle))
             , m_updater(updater)
             , m_response(response)
@@ -141,13 +141,13 @@
             visitor->trace(m_loader);
         }
     private:
-        OwnPtr<WebDataConsumerHandle> m_handle;
+        std::unique_ptr<WebDataConsumerHandle> m_handle;
         Member<CompositeDataConsumerHandle::Updater> m_updater;
         Member<Response> m_response;
         Member<FetchManager::Loader> m_loader;
         String m_integrityMetadata;
         KURL m_url;
-        OwnPtr<WebDataConsumerHandle::Reader> m_reader;
+        std::unique_ptr<WebDataConsumerHandle::Reader> m_reader;
         Vector<char> m_buffer;
         bool m_finished;
     };
@@ -167,7 +167,7 @@
     Member<FetchManager> m_fetchManager;
     Member<ScriptPromiseResolver> m_resolver;
     Member<FetchRequestData> m_request;
-    OwnPtr<ThreadableLoader> m_loader;
+    std::unique_ptr<ThreadableLoader> m_loader;
     bool m_failed;
     bool m_finished;
     int m_responseHttpStatusCode;
@@ -206,7 +206,7 @@
     visitor->trace(m_executionContext);
 }
 
-void FetchManager::Loader::didReceiveResponse(unsigned long, const ResourceResponse& response, PassOwnPtr<WebDataConsumerHandle> handle)
+void FetchManager::Loader::didReceiveResponse(unsigned long, const ResourceResponse& response, std::unique_ptr<WebDataConsumerHandle> handle)
 {
     ASSERT(handle);
 
@@ -562,7 +562,7 @@
     request.setHTTPMethod(m_request->method());
     request.setFetchRequestMode(m_request->mode());
     request.setFetchCredentialsMode(m_request->credentials());
-    const Vector<OwnPtr<FetchHeaderList::Header>>& list = m_request->headerList()->list();
+    const Vector<std::unique_ptr<FetchHeaderList::Header>>& list = m_request->headerList()->list();
     for (size_t i = 0; i < list.size(); ++i) {
         request.addHTTPHeaderField(AtomicString(list[i]->first), AtomicString(list[i]->second));
     }
diff --git a/third_party/WebKit/Source/modules/fetch/FetchRequestData.h b/third_party/WebKit/Source/modules/fetch/FetchRequestData.h
index 3935f79..2ba45e8 100644
--- a/third_party/WebKit/Source/modules/fetch/FetchRequestData.h
+++ b/third_party/WebKit/Source/modules/fetch/FetchRequestData.h
@@ -12,7 +12,6 @@
 #include "platform/weborigin/ReferrerPolicy.h"
 #include "public/platform/WebURLRequest.h"
 #include "public/platform/modules/serviceworker/WebServiceWorkerRequest.h"
-#include "wtf/PassOwnPtr.h"
 #include "wtf/PassRefPtr.h"
 #include "wtf/text/AtomicString.h"
 #include "wtf/text/WTFString.h"
diff --git a/third_party/WebKit/Source/modules/fetch/FetchResponseData.cpp b/third_party/WebKit/Source/modules/fetch/FetchResponseData.cpp
index 9e10c5a8..17bfc8c5 100644
--- a/third_party/WebKit/Source/modules/fetch/FetchResponseData.cpp
+++ b/third_party/WebKit/Source/modules/fetch/FetchResponseData.cpp
@@ -11,6 +11,7 @@
 #include "modules/fetch/DataConsumerHandleUtil.h"
 #include "modules/fetch/FetchHeaderList.h"
 #include "public/platform/modules/serviceworker/WebServiceWorkerResponse.h"
+#include "wtf/PtrUtil.h"
 
 namespace blink {
 
@@ -189,7 +190,7 @@
     FetchResponseData* newResponse = create();
     newResponse->m_type = m_type;
     if (m_terminationReason) {
-        newResponse->m_terminationReason = adoptPtr(new TerminationReason);
+        newResponse->m_terminationReason = wrapUnique(new TerminationReason);
         *newResponse->m_terminationReason = *m_terminationReason;
     }
     newResponse->m_url = m_url;
diff --git a/third_party/WebKit/Source/modules/fetch/FetchResponseData.h b/third_party/WebKit/Source/modules/fetch/FetchResponseData.h
index 5f066dec..b4aab02 100644
--- a/third_party/WebKit/Source/modules/fetch/FetchResponseData.h
+++ b/third_party/WebKit/Source/modules/fetch/FetchResponseData.h
@@ -12,6 +12,7 @@
 #include "public/platform/modules/serviceworker/WebServiceWorkerRequest.h"
 #include "wtf/PassRefPtr.h"
 #include "wtf/text/AtomicString.h"
+#include <memory>
 
 namespace blink {
 
@@ -88,7 +89,7 @@
     FetchResponseData(Type, unsigned short, AtomicString);
 
     Type m_type;
-    OwnPtr<TerminationReason> m_terminationReason;
+    std::unique_ptr<TerminationReason> m_terminationReason;
     KURL m_url;
     unsigned short m_status;
     AtomicString m_statusMessage;
diff --git a/third_party/WebKit/Source/modules/fetch/GlobalFetch.cpp b/third_party/WebKit/Source/modules/fetch/GlobalFetch.cpp
index 872a327..12bbb679 100644
--- a/third_party/WebKit/Source/modules/fetch/GlobalFetch.cpp
+++ b/third_party/WebKit/Source/modules/fetch/GlobalFetch.cpp
@@ -12,7 +12,6 @@
 #include "modules/fetch/Request.h"
 #include "platform/Supplementable.h"
 #include "platform/heap/Handle.h"
-#include "wtf/OwnPtr.h"
 
 namespace blink {
 
diff --git a/third_party/WebKit/Source/modules/fetch/Headers.h b/third_party/WebKit/Source/modules/fetch/Headers.h
index e1c6c4e7..ab97171 100644
--- a/third_party/WebKit/Source/modules/fetch/Headers.h
+++ b/third_party/WebKit/Source/modules/fetch/Headers.h
@@ -11,7 +11,6 @@
 #include "modules/ModulesExport.h"
 #include "modules/fetch/FetchHeaderList.h"
 #include "wtf/Forward.h"
-#include "wtf/PassOwnPtr.h"
 
 namespace blink {
 
diff --git a/third_party/WebKit/Source/modules/fetch/ReadableStreamDataConsumerHandle.h b/third_party/WebKit/Source/modules/fetch/ReadableStreamDataConsumerHandle.h
index cb14457..905f0b7 100644
--- a/third_party/WebKit/Source/modules/fetch/ReadableStreamDataConsumerHandle.h
+++ b/third_party/WebKit/Source/modules/fetch/ReadableStreamDataConsumerHandle.h
@@ -9,8 +9,9 @@
 #include "modules/ModulesExport.h"
 #include "modules/fetch/FetchDataConsumerHandle.h"
 #include "wtf/Forward.h"
-#include "wtf/PassOwnPtr.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/RefPtr.h"
+#include <memory>
 
 namespace blink {
 
@@ -29,9 +30,9 @@
 class MODULES_EXPORT ReadableStreamDataConsumerHandle final : public FetchDataConsumerHandle {
     WTF_MAKE_NONCOPYABLE(ReadableStreamDataConsumerHandle);
 public:
-    static PassOwnPtr<ReadableStreamDataConsumerHandle> create(ScriptState* scriptState, ScriptValue streamReader)
+    static std::unique_ptr<ReadableStreamDataConsumerHandle> create(ScriptState* scriptState, ScriptValue streamReader)
     {
-        return adoptPtr(new ReadableStreamDataConsumerHandle(scriptState, streamReader));
+        return wrapUnique(new ReadableStreamDataConsumerHandle(scriptState, streamReader));
     }
     ~ReadableStreamDataConsumerHandle() override;
 
diff --git a/third_party/WebKit/Source/modules/fetch/ReadableStreamDataConsumerHandleTest.cpp b/third_party/WebKit/Source/modules/fetch/ReadableStreamDataConsumerHandleTest.cpp
index fd89148..3cfcf1a8 100644
--- a/third_party/WebKit/Source/modules/fetch/ReadableStreamDataConsumerHandleTest.cpp
+++ b/third_party/WebKit/Source/modules/fetch/ReadableStreamDataConsumerHandleTest.cpp
@@ -16,6 +16,7 @@
 #include "public/platform/WebDataConsumerHandle.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
+#include <memory>
 #include <v8.h>
 
 // TODO(yhirano): Add cross-thread tests once the handle gets thread-safe.
@@ -81,7 +82,7 @@
         return r;
     }
 
-    PassOwnPtr<ReadableStreamDataConsumerHandle> createHandle(ScriptValue stream)
+    std::unique_ptr<ReadableStreamDataConsumerHandle> createHandle(ScriptValue stream)
     {
         NonThrowableExceptionState es;
         ScriptValue reader = ReadableStreamOperations::getReader(getScriptState(), stream, es);
@@ -93,7 +94,7 @@
     void gc() { V8GCController::collectAllGarbageForTesting(isolate()); }
 
 private:
-    OwnPtr<DummyPageHolder> m_page;
+    std::unique_ptr<DummyPageHolder> m_page;
 };
 
 TEST_F(ReadableStreamDataConsumerHandleTest, Create)
@@ -101,7 +102,7 @@
     ScriptState::Scope scope(getScriptState());
     ScriptValue stream(getScriptState(), evalWithPrintingError("new ReadableStream"));
     ASSERT_FALSE(stream.isEmpty());
-    OwnPtr<ReadableStreamDataConsumerHandle> handle = createHandle(stream);
+    std::unique_ptr<ReadableStreamDataConsumerHandle> handle = createHandle(stream);
     ASSERT_TRUE(handle);
     Persistent<MockClient> client = MockClient::create();
     Checkpoint checkpoint;
@@ -111,7 +112,7 @@
     EXPECT_CALL(*client, didGetReadable());
     EXPECT_CALL(checkpoint, Call(2));
 
-    OwnPtr<FetchDataConsumerHandle::Reader> reader = handle->obtainReader(client);
+    std::unique_ptr<FetchDataConsumerHandle::Reader> reader = handle->obtainReader(client);
     ASSERT_TRUE(reader);
     checkpoint.Call(1);
     testing::runPendingTasks();
@@ -124,7 +125,7 @@
     ScriptValue stream(getScriptState(), evalWithPrintingError(
         "new ReadableStream({start: c => c.close()})"));
     ASSERT_FALSE(stream.isEmpty());
-    OwnPtr<ReadableStreamDataConsumerHandle> handle = createHandle(stream);
+    std::unique_ptr<ReadableStreamDataConsumerHandle> handle = createHandle(stream);
     ASSERT_TRUE(handle);
     Persistent<MockClient> client = MockClient::create();
     Checkpoint checkpoint;
@@ -138,7 +139,7 @@
 
     char c;
     size_t readBytes;
-    OwnPtr<FetchDataConsumerHandle::Reader> reader = handle->obtainReader(client);
+    std::unique_ptr<FetchDataConsumerHandle::Reader> reader = handle->obtainReader(client);
     ASSERT_TRUE(reader);
     checkpoint.Call(1);
     testing::runPendingTasks();
@@ -155,7 +156,7 @@
     ScriptValue stream(getScriptState(), evalWithPrintingError(
         "new ReadableStream({start: c => c.error()})"));
     ASSERT_FALSE(stream.isEmpty());
-    OwnPtr<ReadableStreamDataConsumerHandle> handle = createHandle(stream);
+    std::unique_ptr<ReadableStreamDataConsumerHandle> handle = createHandle(stream);
     ASSERT_TRUE(handle);
     Persistent<MockClient> client = MockClient::create();
     Checkpoint checkpoint;
@@ -169,7 +170,7 @@
 
     char c;
     size_t readBytes;
-    OwnPtr<FetchDataConsumerHandle::Reader> reader = handle->obtainReader(client);
+    std::unique_ptr<FetchDataConsumerHandle::Reader> reader = handle->obtainReader(client);
     ASSERT_TRUE(reader);
     checkpoint.Call(1);
     testing::runPendingTasks();
@@ -192,7 +193,7 @@
         "controller.close();"
         "stream"));
     ASSERT_FALSE(stream.isEmpty());
-    OwnPtr<ReadableStreamDataConsumerHandle> handle = createHandle(stream);
+    std::unique_ptr<ReadableStreamDataConsumerHandle> handle = createHandle(stream);
     ASSERT_TRUE(handle);
     Persistent<MockClient> client = MockClient::create();
     Checkpoint checkpoint;
@@ -212,7 +213,7 @@
 
     char buffer[3];
     size_t readBytes;
-    OwnPtr<FetchDataConsumerHandle::Reader> reader = handle->obtainReader(client);
+    std::unique_ptr<FetchDataConsumerHandle::Reader> reader = handle->obtainReader(client);
     ASSERT_TRUE(reader);
     checkpoint.Call(1);
     testing::runPendingTasks();
@@ -260,7 +261,7 @@
         "controller.close();"
         "stream"));
     ASSERT_FALSE(stream.isEmpty());
-    OwnPtr<ReadableStreamDataConsumerHandle> handle = createHandle(stream);
+    std::unique_ptr<ReadableStreamDataConsumerHandle> handle = createHandle(stream);
     ASSERT_TRUE(handle);
     Persistent<MockClient> client = MockClient::create();
     Checkpoint checkpoint;
@@ -280,7 +281,7 @@
 
     const void* buffer;
     size_t available;
-    OwnPtr<FetchDataConsumerHandle::Reader> reader = handle->obtainReader(client);
+    std::unique_ptr<FetchDataConsumerHandle::Reader> reader = handle->obtainReader(client);
     ASSERT_TRUE(reader);
     checkpoint.Call(1);
     testing::runPendingTasks();
@@ -337,7 +338,7 @@
         "controller.close();"
         "stream"));
     ASSERT_FALSE(stream.isEmpty());
-    OwnPtr<ReadableStreamDataConsumerHandle> handle = createHandle(stream);
+    std::unique_ptr<ReadableStreamDataConsumerHandle> handle = createHandle(stream);
     ASSERT_TRUE(handle);
     Persistent<MockClient> client = MockClient::create();
     Checkpoint checkpoint;
@@ -351,7 +352,7 @@
 
     const void* buffer;
     size_t available;
-    OwnPtr<FetchDataConsumerHandle::Reader> reader = handle->obtainReader(client);
+    std::unique_ptr<FetchDataConsumerHandle::Reader> reader = handle->obtainReader(client);
     ASSERT_TRUE(reader);
     checkpoint.Call(1);
     testing::runPendingTasks();
@@ -372,7 +373,7 @@
         "controller.close();"
         "stream"));
     ASSERT_FALSE(stream.isEmpty());
-    OwnPtr<ReadableStreamDataConsumerHandle> handle = createHandle(stream);
+    std::unique_ptr<ReadableStreamDataConsumerHandle> handle = createHandle(stream);
     ASSERT_TRUE(handle);
     Persistent<MockClient> client = MockClient::create();
     Checkpoint checkpoint;
@@ -386,7 +387,7 @@
 
     const void* buffer;
     size_t available;
-    OwnPtr<FetchDataConsumerHandle::Reader> reader = handle->obtainReader(client);
+    std::unique_ptr<FetchDataConsumerHandle::Reader> reader = handle->obtainReader(client);
     ASSERT_TRUE(reader);
     checkpoint.Call(1);
     testing::runPendingTasks();
@@ -407,7 +408,7 @@
         "controller.close();"
         "stream"));
     ASSERT_FALSE(stream.isEmpty());
-    OwnPtr<ReadableStreamDataConsumerHandle> handle = createHandle(stream);
+    std::unique_ptr<ReadableStreamDataConsumerHandle> handle = createHandle(stream);
     ASSERT_TRUE(handle);
     Persistent<MockClient> client = MockClient::create();
     Checkpoint checkpoint;
@@ -421,7 +422,7 @@
 
     const void* buffer;
     size_t available;
-    OwnPtr<FetchDataConsumerHandle::Reader> reader = handle->obtainReader(client);
+    std::unique_ptr<FetchDataConsumerHandle::Reader> reader = handle->obtainReader(client);
     ASSERT_TRUE(reader);
     checkpoint.Call(1);
     testing::runPendingTasks();
@@ -434,7 +435,7 @@
 
 TEST_F(ReadableStreamDataConsumerHandleTest, StreamReaderShouldBeWeak)
 {
-    OwnPtr<FetchDataConsumerHandle::Reader> reader;
+    std::unique_ptr<FetchDataConsumerHandle::Reader> reader;
     Checkpoint checkpoint;
     Persistent<MockClient> client = MockClient::create();
     ScriptValue stream;
@@ -452,7 +453,7 @@
         ScriptState::Scope scope(getScriptState());
         stream = ScriptValue(getScriptState(), evalWithPrintingError("new ReadableStream()"));
         ASSERT_FALSE(stream.isEmpty());
-        OwnPtr<ReadableStreamDataConsumerHandle> handle = createHandle(stream);
+        std::unique_ptr<ReadableStreamDataConsumerHandle> handle = createHandle(stream);
         ASSERT_TRUE(handle);
 
         reader = handle->obtainReader(client);
@@ -475,7 +476,7 @@
 
 TEST_F(ReadableStreamDataConsumerHandleTest, StreamReaderShouldBeWeakWhenReading)
 {
-    OwnPtr<FetchDataConsumerHandle::Reader> reader;
+    std::unique_ptr<FetchDataConsumerHandle::Reader> reader;
     Checkpoint checkpoint;
     Persistent<MockClient> client = MockClient::create();
     ScriptValue stream;
@@ -494,7 +495,7 @@
         ScriptState::Scope scope(getScriptState());
         stream = ScriptValue(getScriptState(), evalWithPrintingError("new ReadableStream()"));
         ASSERT_FALSE(stream.isEmpty());
-        OwnPtr<ReadableStreamDataConsumerHandle> handle = createHandle(stream);
+        std::unique_ptr<ReadableStreamDataConsumerHandle> handle = createHandle(stream);
         ASSERT_TRUE(handle);
 
         reader = handle->obtainReader(client);
diff --git a/third_party/WebKit/Source/modules/fetch/RequestInit.h b/third_party/WebKit/Source/modules/fetch/RequestInit.h
index 7fbf8e2..593f713 100644
--- a/third_party/WebKit/Source/modules/fetch/RequestInit.h
+++ b/third_party/WebKit/Source/modules/fetch/RequestInit.h
@@ -9,9 +9,9 @@
 #include "platform/heap/Handle.h"
 #include "platform/network/EncodedFormData.h"
 #include "platform/weborigin/Referrer.h"
-#include "wtf/OwnPtr.h"
 #include "wtf/RefPtr.h"
 #include "wtf/text/WTFString.h"
+#include <memory>
 
 namespace blink {
 
@@ -29,7 +29,7 @@
     Member<Headers> headers;
     Dictionary headersDictionary;
     String contentType;
-    OwnPtr<FetchDataConsumerHandle> body;
+    std::unique_ptr<FetchDataConsumerHandle> body;
     Referrer referrer;
     String mode;
     String credentials;
diff --git a/third_party/WebKit/Source/modules/fetch/RequestTest.cpp b/third_party/WebKit/Source/modules/fetch/RequestTest.cpp
index cb56d27..a264e1e 100644
--- a/third_party/WebKit/Source/modules/fetch/RequestTest.cpp
+++ b/third_party/WebKit/Source/modules/fetch/RequestTest.cpp
@@ -14,6 +14,7 @@
 #include "testing/gtest/include/gtest/gtest.h"
 #include "wtf/HashMap.h"
 #include "wtf/text/WTFString.h"
+#include <memory>
 
 namespace blink {
 namespace {
@@ -27,7 +28,7 @@
     ExecutionContext* getExecutionContext() { return getScriptState()->getExecutionContext(); }
 
 private:
-    OwnPtr<DummyPageHolder> m_page;
+    std::unique_ptr<DummyPageHolder> m_page;
 };
 
 TEST_F(ServiceWorkerRequestTest, FromString)
diff --git a/third_party/WebKit/Source/modules/fetch/Response.cpp b/third_party/WebKit/Source/modules/fetch/Response.cpp
index 6d74e14..d801f76 100644
--- a/third_party/WebKit/Source/modules/fetch/Response.cpp
+++ b/third_party/WebKit/Source/modules/fetch/Response.cpp
@@ -29,6 +29,7 @@
 #include "platform/network/HTTPHeaderMap.h"
 #include "public/platform/modules/serviceworker/WebServiceWorkerResponse.h"
 #include "wtf/RefPtr.h"
+#include <memory>
 
 namespace blink {
 
@@ -146,7 +147,7 @@
         if (RuntimeEnabledFeatures::responseBodyWithV8ExtraStreamEnabled()) {
             bodyBuffer = new BodyStreamBuffer(scriptState, bodyValue);
         } else {
-            OwnPtr<FetchDataConsumerHandle> bodyHandle;
+            std::unique_ptr<FetchDataConsumerHandle> bodyHandle;
             reader = ReadableStreamOperations::getReader(scriptState, bodyValue, exceptionState);
             if (exceptionState.hadException()) {
                 reader = ScriptValue();
diff --git a/third_party/WebKit/Source/modules/fetch/Response.h b/third_party/WebKit/Source/modules/fetch/Response.h
index 01c16c42..4f91a0d 100644
--- a/third_party/WebKit/Source/modules/fetch/Response.h
+++ b/third_party/WebKit/Source/modules/fetch/Response.h
@@ -15,7 +15,6 @@
 #include "modules/fetch/Headers.h"
 #include "platform/blob/BlobData.h"
 #include "platform/heap/Handle.h"
-#include "wtf/PassOwnPtr.h"
 
 namespace blink {
 
diff --git a/third_party/WebKit/Source/modules/fetch/ResponseTest.cpp b/third_party/WebKit/Source/modules/fetch/ResponseTest.cpp
index a1fad617..0fee482 100644
--- a/third_party/WebKit/Source/modules/fetch/ResponseTest.cpp
+++ b/third_party/WebKit/Source/modules/fetch/ResponseTest.cpp
@@ -17,11 +17,13 @@
 #include "platform/testing/UnitTestHelpers.h"
 #include "public/platform/modules/serviceworker/WebServiceWorkerResponse.h"
 #include "testing/gtest/include/gtest/gtest.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 namespace {
 
-PassOwnPtr<WebServiceWorkerResponse> createTestWebServiceWorkerResponse()
+std::unique_ptr<WebServiceWorkerResponse> createTestWebServiceWorkerResponse()
 {
     const KURL url(ParsedURLString, "http://www.webresponse.com/");
     const unsigned short status = 200;
@@ -31,7 +33,7 @@
         const char* value;
     } headers[] = { { "cache-control", "no-cache" }, { "set-cookie", "foop" }, { "foo", "bar" }, { 0, 0 } };
 
-    OwnPtr<WebServiceWorkerResponse> webResponse = adoptPtr(new WebServiceWorkerResponse());
+    std::unique_ptr<WebServiceWorkerResponse> webResponse = wrapUnique(new WebServiceWorkerResponse());
     webResponse->setURL(url);
     webResponse->setStatus(status);
     webResponse->setStatusText(statusText);
@@ -50,7 +52,7 @@
     ExecutionContext* getExecutionContext() { return getScriptState()->getExecutionContext(); }
 
 private:
-    OwnPtr<DummyPageHolder> m_page;
+    std::unique_ptr<DummyPageHolder> m_page;
 };
 
 
@@ -68,7 +70,7 @@
 
 TEST_F(ServiceWorkerResponseTest, FromWebServiceWorkerResponse)
 {
-    OwnPtr<WebServiceWorkerResponse> webResponse = createTestWebServiceWorkerResponse();
+    std::unique_ptr<WebServiceWorkerResponse> webResponse = createTestWebServiceWorkerResponse();
     Response* response = Response::create(getScriptState(), *webResponse);
     ASSERT(response);
     EXPECT_EQ(webResponse->url(), response->url());
@@ -89,7 +91,7 @@
 
 TEST_F(ServiceWorkerResponseTest, FromWebServiceWorkerResponseDefault)
 {
-    OwnPtr<WebServiceWorkerResponse> webResponse = createTestWebServiceWorkerResponse();
+    std::unique_ptr<WebServiceWorkerResponse> webResponse = createTestWebServiceWorkerResponse();
     webResponse->setResponseType(WebServiceWorkerResponseTypeDefault);
     Response* response = Response::create(getScriptState(), *webResponse);
 
@@ -103,7 +105,7 @@
 
 TEST_F(ServiceWorkerResponseTest, FromWebServiceWorkerResponseBasic)
 {
-    OwnPtr<WebServiceWorkerResponse> webResponse = createTestWebServiceWorkerResponse();
+    std::unique_ptr<WebServiceWorkerResponse> webResponse = createTestWebServiceWorkerResponse();
     webResponse->setResponseType(WebServiceWorkerResponseTypeBasic);
     Response* response = Response::create(getScriptState(), *webResponse);
 
@@ -117,7 +119,7 @@
 
 TEST_F(ServiceWorkerResponseTest, FromWebServiceWorkerResponseCORS)
 {
-    OwnPtr<WebServiceWorkerResponse> webResponse = createTestWebServiceWorkerResponse();
+    std::unique_ptr<WebServiceWorkerResponse> webResponse = createTestWebServiceWorkerResponse();
     webResponse->setResponseType(WebServiceWorkerResponseTypeCORS);
     Response* response = Response::create(getScriptState(), *webResponse);
 
@@ -131,7 +133,7 @@
 
 TEST_F(ServiceWorkerResponseTest, FromWebServiceWorkerResponseOpaque)
 {
-    OwnPtr<WebServiceWorkerResponse> webResponse = createTestWebServiceWorkerResponse();
+    std::unique_ptr<WebServiceWorkerResponse> webResponse = createTestWebServiceWorkerResponse();
     webResponse->setResponseType(WebServiceWorkerResponseTypeOpaque);
     Response* response = Response::create(getScriptState(), *webResponse);
 
@@ -187,7 +189,7 @@
 BodyStreamBuffer* createHelloWorldBuffer(ScriptState* scriptState)
 {
     using Command = DataConsumerHandleTestUtil::Command;
-    OwnPtr<DataConsumerHandleTestUtil::ReplayingHandle> src(DataConsumerHandleTestUtil::ReplayingHandle::create());
+    std::unique_ptr<DataConsumerHandleTestUtil::ReplayingHandle> src(DataConsumerHandleTestUtil::ReplayingHandle::create());
     src->add(Command(Command::Data, "Hello, "));
     src->add(Command(Command::Data, "world"));
     src->add(Command(Command::Done));
diff --git a/third_party/WebKit/Source/modules/filesystem/DOMFileSystem.cpp b/third_party/WebKit/Source/modules/filesystem/DOMFileSystem.cpp
index 980c34d..4f66b32 100644
--- a/third_party/WebKit/Source/modules/filesystem/DOMFileSystem.cpp
+++ b/third_party/WebKit/Source/modules/filesystem/DOMFileSystem.cpp
@@ -46,9 +46,9 @@
 #include "public/platform/WebFileSystem.h"
 #include "public/platform/WebFileSystemCallbacks.h"
 #include "public/platform/WebSecurityOrigin.h"
-#include "wtf/OwnPtr.h"
 #include "wtf/text/StringBuilder.h"
 #include "wtf/text/WTFString.h"
+#include <memory>
 
 namespace blink {
 
@@ -160,7 +160,7 @@
 
     FileWriter* fileWriter = FileWriter::create(getExecutionContext());
     FileWriterBaseCallback* conversionCallback = ConvertToFileWriterCallback::create(successCallback);
-    OwnPtr<AsyncFileSystemCallbacks> callbacks = FileWriterBaseCallbacks::create(fileWriter, conversionCallback, errorCallback, m_context);
+    std::unique_ptr<AsyncFileSystemCallbacks> callbacks = FileWriterBaseCallbacks::create(fileWriter, conversionCallback, errorCallback, m_context);
     fileSystem()->createFileWriter(createFileSystemURL(fileEntry), fileWriter, std::move(callbacks));
 }
 
diff --git a/third_party/WebKit/Source/modules/filesystem/DOMFileSystemBase.cpp b/third_party/WebKit/Source/modules/filesystem/DOMFileSystemBase.cpp
index 07fb06f4..02cf027 100644
--- a/third_party/WebKit/Source/modules/filesystem/DOMFileSystemBase.cpp
+++ b/third_party/WebKit/Source/modules/filesystem/DOMFileSystemBase.cpp
@@ -48,9 +48,9 @@
 #include "public/platform/Platform.h"
 #include "public/platform/WebFileSystem.h"
 #include "public/platform/WebFileSystemCallbacks.h"
-#include "wtf/OwnPtr.h"
 #include "wtf/text/StringBuilder.h"
 #include "wtf/text/TextEncoding.h"
+#include <memory>
 
 namespace blink {
 
@@ -222,7 +222,7 @@
         return;
     }
 
-    OwnPtr<AsyncFileSystemCallbacks> callbacks(MetadataCallbacks::create(successCallback, errorCallback, m_context, this));
+    std::unique_ptr<AsyncFileSystemCallbacks> callbacks(MetadataCallbacks::create(successCallback, errorCallback, m_context, this));
     callbacks->setShouldBlockUntilCompletion(synchronousType == Synchronous);
     fileSystem()->readMetadata(createFileSystemURL(entry), std::move(callbacks));
 }
@@ -269,7 +269,7 @@
         return;
     }
 
-    OwnPtr<AsyncFileSystemCallbacks> callbacks(EntryCallbacks::create(successCallback, errorCallback, m_context, parent->filesystem(), destinationPath, source->isDirectory()));
+    std::unique_ptr<AsyncFileSystemCallbacks> callbacks(EntryCallbacks::create(successCallback, errorCallback, m_context, parent->filesystem(), destinationPath, source->isDirectory()));
     callbacks->setShouldBlockUntilCompletion(synchronousType == Synchronous);
 
     fileSystem()->move(createFileSystemURL(source), parent->filesystem()->createFileSystemURL(destinationPath), std::move(callbacks));
@@ -288,7 +288,7 @@
         return;
     }
 
-    OwnPtr<AsyncFileSystemCallbacks> callbacks(EntryCallbacks::create(successCallback, errorCallback, m_context, parent->filesystem(), destinationPath, source->isDirectory()));
+    std::unique_ptr<AsyncFileSystemCallbacks> callbacks(EntryCallbacks::create(successCallback, errorCallback, m_context, parent->filesystem(), destinationPath, source->isDirectory()));
     callbacks->setShouldBlockUntilCompletion(synchronousType == Synchronous);
 
     fileSystem()->copy(createFileSystemURL(source), parent->filesystem()->createFileSystemURL(destinationPath), std::move(callbacks));
@@ -308,7 +308,7 @@
         return;
     }
 
-    OwnPtr<AsyncFileSystemCallbacks> callbacks(VoidCallbacks::create(successCallback, errorCallback, m_context, this));
+    std::unique_ptr<AsyncFileSystemCallbacks> callbacks(VoidCallbacks::create(successCallback, errorCallback, m_context, this));
     callbacks->setShouldBlockUntilCompletion(synchronousType == Synchronous);
 
     fileSystem()->remove(createFileSystemURL(entry), std::move(callbacks));
@@ -328,7 +328,7 @@
         return;
     }
 
-    OwnPtr<AsyncFileSystemCallbacks> callbacks(VoidCallbacks::create(successCallback, errorCallback, m_context, this));
+    std::unique_ptr<AsyncFileSystemCallbacks> callbacks(VoidCallbacks::create(successCallback, errorCallback, m_context, this));
     callbacks->setShouldBlockUntilCompletion(synchronousType == Synchronous);
 
     fileSystem()->removeRecursively(createFileSystemURL(entry), std::move(callbacks));
@@ -360,7 +360,7 @@
         return;
     }
 
-    OwnPtr<AsyncFileSystemCallbacks> callbacks(EntryCallbacks::create(successCallback, errorCallback, m_context, this, absolutePath, false));
+    std::unique_ptr<AsyncFileSystemCallbacks> callbacks(EntryCallbacks::create(successCallback, errorCallback, m_context, this, absolutePath, false));
     callbacks->setShouldBlockUntilCompletion(synchronousType == Synchronous);
 
     if (flags.createFlag())
@@ -382,7 +382,7 @@
         return;
     }
 
-    OwnPtr<AsyncFileSystemCallbacks> callbacks(EntryCallbacks::create(successCallback, errorCallback, m_context, this, absolutePath, true));
+    std::unique_ptr<AsyncFileSystemCallbacks> callbacks(EntryCallbacks::create(successCallback, errorCallback, m_context, this, absolutePath, true));
     callbacks->setShouldBlockUntilCompletion(synchronousType == Synchronous);
 
     if (flags.createFlag())
@@ -400,7 +400,7 @@
 
     ASSERT(DOMFilePath::isAbsolute(path));
 
-    OwnPtr<AsyncFileSystemCallbacks> callbacks(EntriesCallbacks::create(successCallback, errorCallback, m_context, reader, path));
+    std::unique_ptr<AsyncFileSystemCallbacks> callbacks(EntriesCallbacks::create(successCallback, errorCallback, m_context, reader, path));
     callbacks->setShouldBlockUntilCompletion(synchronousType == Synchronous);
 
     return fileSystem()->readDirectory(createFileSystemURL(path), std::move(callbacks));
diff --git a/third_party/WebKit/Source/modules/filesystem/DOMFileSystemSync.cpp b/third_party/WebKit/Source/modules/filesystem/DOMFileSystemSync.cpp
index c5f2012..e57da4d 100644
--- a/third_party/WebKit/Source/modules/filesystem/DOMFileSystemSync.cpp
+++ b/third_party/WebKit/Source/modules/filesystem/DOMFileSystemSync.cpp
@@ -43,6 +43,8 @@
 #include "platform/FileMetadata.h"
 #include "public/platform/WebFileSystem.h"
 #include "public/platform/WebFileSystemCallbacks.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
@@ -101,9 +103,9 @@
         }
     };
 
-    static PassOwnPtr<AsyncFileSystemCallbacks> create(CreateFileResult* result, const String& name, const KURL& url, FileSystemType type)
+    static std::unique_ptr<AsyncFileSystemCallbacks> create(CreateFileResult* result, const String& name, const KURL& url, FileSystemType type)
     {
-        return adoptPtr(static_cast<AsyncFileSystemCallbacks*>(new CreateFileHelper(result, name, url, type)));
+        return wrapUnique(static_cast<AsyncFileSystemCallbacks*>(new CreateFileHelper(result, name, url, type)));
     }
 
     void didFail(int code) override
@@ -212,7 +214,7 @@
     FileError::ErrorCode errorCode = FileError::OK;
     LocalErrorCallback* errorCallback = LocalErrorCallback::create(errorCode);
 
-    OwnPtr<AsyncFileSystemCallbacks> callbacks = FileWriterBaseCallbacks::create(fileWriter, successCallback, errorCallback, m_context);
+    std::unique_ptr<AsyncFileSystemCallbacks> callbacks = FileWriterBaseCallbacks::create(fileWriter, successCallback, errorCallback, m_context);
     callbacks->setShouldBlockUntilCompletion(true);
 
     fileSystem()->createFileWriter(createFileSystemURL(fileEntry), fileWriter, std::move(callbacks));
diff --git a/third_party/WebKit/Source/modules/filesystem/FileSystemCallbacks.cpp b/third_party/WebKit/Source/modules/filesystem/FileSystemCallbacks.cpp
index b88517d..34c58f2 100644
--- a/third_party/WebKit/Source/modules/filesystem/FileSystemCallbacks.cpp
+++ b/third_party/WebKit/Source/modules/filesystem/FileSystemCallbacks.cpp
@@ -51,6 +51,8 @@
 #include "modules/filesystem/MetadataCallback.h"
 #include "platform/FileMetadata.h"
 #include "public/platform/WebFileWriter.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
@@ -104,9 +106,9 @@
 
 // EntryCallbacks -------------------------------------------------------------
 
-PassOwnPtr<AsyncFileSystemCallbacks> EntryCallbacks::create(EntryCallback* successCallback, ErrorCallback* errorCallback, ExecutionContext* context, DOMFileSystemBase* fileSystem, const String& expectedPath, bool isDirectory)
+std::unique_ptr<AsyncFileSystemCallbacks> EntryCallbacks::create(EntryCallback* successCallback, ErrorCallback* errorCallback, ExecutionContext* context, DOMFileSystemBase* fileSystem, const String& expectedPath, bool isDirectory)
 {
-    return adoptPtr(new EntryCallbacks(successCallback, errorCallback, context, fileSystem, expectedPath, isDirectory));
+    return wrapUnique(new EntryCallbacks(successCallback, errorCallback, context, fileSystem, expectedPath, isDirectory));
 }
 
 EntryCallbacks::EntryCallbacks(EntryCallback* successCallback, ErrorCallback* errorCallback, ExecutionContext* context, DOMFileSystemBase* fileSystem, const String& expectedPath, bool isDirectory)
@@ -129,9 +131,9 @@
 
 // EntriesCallbacks -----------------------------------------------------------
 
-PassOwnPtr<AsyncFileSystemCallbacks> EntriesCallbacks::create(EntriesCallback* successCallback, ErrorCallback* errorCallback, ExecutionContext* context, DirectoryReaderBase* directoryReader, const String& basePath)
+std::unique_ptr<AsyncFileSystemCallbacks> EntriesCallbacks::create(EntriesCallback* successCallback, ErrorCallback* errorCallback, ExecutionContext* context, DirectoryReaderBase* directoryReader, const String& basePath)
 {
-    return adoptPtr(new EntriesCallbacks(successCallback, errorCallback, context, directoryReader, basePath));
+    return wrapUnique(new EntriesCallbacks(successCallback, errorCallback, context, directoryReader, basePath));
 }
 
 EntriesCallbacks::EntriesCallbacks(EntriesCallback* successCallback, ErrorCallback* errorCallback, ExecutionContext* context, DirectoryReaderBase* directoryReader, const String& basePath)
@@ -163,9 +165,9 @@
 
 // FileSystemCallbacks --------------------------------------------------------
 
-PassOwnPtr<AsyncFileSystemCallbacks> FileSystemCallbacks::create(FileSystemCallback* successCallback, ErrorCallback* errorCallback, ExecutionContext* context, FileSystemType type)
+std::unique_ptr<AsyncFileSystemCallbacks> FileSystemCallbacks::create(FileSystemCallback* successCallback, ErrorCallback* errorCallback, ExecutionContext* context, FileSystemType type)
 {
-    return adoptPtr(new FileSystemCallbacks(successCallback, errorCallback, context, type));
+    return wrapUnique(new FileSystemCallbacks(successCallback, errorCallback, context, type));
 }
 
 FileSystemCallbacks::FileSystemCallbacks(FileSystemCallback* successCallback, ErrorCallback* errorCallback, ExecutionContext* context, FileSystemType type)
@@ -183,9 +185,9 @@
 
 // ResolveURICallbacks --------------------------------------------------------
 
-PassOwnPtr<AsyncFileSystemCallbacks> ResolveURICallbacks::create(EntryCallback* successCallback, ErrorCallback* errorCallback, ExecutionContext* context)
+std::unique_ptr<AsyncFileSystemCallbacks> ResolveURICallbacks::create(EntryCallback* successCallback, ErrorCallback* errorCallback, ExecutionContext* context)
 {
-    return adoptPtr(new ResolveURICallbacks(successCallback, errorCallback, context));
+    return wrapUnique(new ResolveURICallbacks(successCallback, errorCallback, context));
 }
 
 ResolveURICallbacks::ResolveURICallbacks(EntryCallback* successCallback, ErrorCallback* errorCallback, ExecutionContext* context)
@@ -213,9 +215,9 @@
 
 // MetadataCallbacks ----------------------------------------------------------
 
-PassOwnPtr<AsyncFileSystemCallbacks> MetadataCallbacks::create(MetadataCallback* successCallback, ErrorCallback* errorCallback, ExecutionContext* context, DOMFileSystemBase* fileSystem)
+std::unique_ptr<AsyncFileSystemCallbacks> MetadataCallbacks::create(MetadataCallback* successCallback, ErrorCallback* errorCallback, ExecutionContext* context, DOMFileSystemBase* fileSystem)
 {
-    return adoptPtr(new MetadataCallbacks(successCallback, errorCallback, context, fileSystem));
+    return wrapUnique(new MetadataCallbacks(successCallback, errorCallback, context, fileSystem));
 }
 
 MetadataCallbacks::MetadataCallbacks(MetadataCallback* successCallback, ErrorCallback* errorCallback, ExecutionContext* context, DOMFileSystemBase* fileSystem)
@@ -232,9 +234,9 @@
 
 // FileWriterBaseCallbacks ----------------------------------------------------
 
-PassOwnPtr<AsyncFileSystemCallbacks> FileWriterBaseCallbacks::create(FileWriterBase* fileWriter, FileWriterBaseCallback* successCallback, ErrorCallback* errorCallback, ExecutionContext* context)
+std::unique_ptr<AsyncFileSystemCallbacks> FileWriterBaseCallbacks::create(FileWriterBase* fileWriter, FileWriterBaseCallback* successCallback, ErrorCallback* errorCallback, ExecutionContext* context)
 {
-    return adoptPtr(new FileWriterBaseCallbacks(fileWriter, successCallback, errorCallback, context));
+    return wrapUnique(new FileWriterBaseCallbacks(fileWriter, successCallback, errorCallback, context));
 }
 
 FileWriterBaseCallbacks::FileWriterBaseCallbacks(FileWriterBase* fileWriter, FileWriterBaseCallback* successCallback, ErrorCallback* errorCallback, ExecutionContext* context)
@@ -244,7 +246,7 @@
 {
 }
 
-void FileWriterBaseCallbacks::didCreateFileWriter(PassOwnPtr<WebFileWriter> fileWriter, long long length)
+void FileWriterBaseCallbacks::didCreateFileWriter(std::unique_ptr<WebFileWriter> fileWriter, long long length)
 {
     m_fileWriter->initialize(std::move(fileWriter), length);
     if (m_successCallback)
@@ -253,9 +255,9 @@
 
 // SnapshotFileCallback -------------------------------------------------------
 
-PassOwnPtr<AsyncFileSystemCallbacks> SnapshotFileCallback::create(DOMFileSystemBase* filesystem, const String& name, const KURL& url, BlobCallback* successCallback, ErrorCallback* errorCallback, ExecutionContext* context)
+std::unique_ptr<AsyncFileSystemCallbacks> SnapshotFileCallback::create(DOMFileSystemBase* filesystem, const String& name, const KURL& url, BlobCallback* successCallback, ErrorCallback* errorCallback, ExecutionContext* context)
 {
-    return adoptPtr(new SnapshotFileCallback(filesystem, name, url, successCallback, errorCallback, context));
+    return wrapUnique(new SnapshotFileCallback(filesystem, name, url, successCallback, errorCallback, context));
 }
 
 SnapshotFileCallback::SnapshotFileCallback(DOMFileSystemBase* filesystem, const String& name, const KURL& url, BlobCallback* successCallback, ErrorCallback* errorCallback, ExecutionContext* context)
@@ -281,9 +283,9 @@
 
 // VoidCallbacks --------------------------------------------------------------
 
-PassOwnPtr<AsyncFileSystemCallbacks> VoidCallbacks::create(VoidCallback* successCallback, ErrorCallback* errorCallback, ExecutionContext* context, DOMFileSystemBase* fileSystem)
+std::unique_ptr<AsyncFileSystemCallbacks> VoidCallbacks::create(VoidCallback* successCallback, ErrorCallback* errorCallback, ExecutionContext* context, DOMFileSystemBase* fileSystem)
 {
-    return adoptPtr(new VoidCallbacks(successCallback, errorCallback, context, fileSystem));
+    return wrapUnique(new VoidCallbacks(successCallback, errorCallback, context, fileSystem));
 }
 
 VoidCallbacks::VoidCallbacks(VoidCallback* successCallback, ErrorCallback* errorCallback, ExecutionContext* context, DOMFileSystemBase* fileSystem)
diff --git a/third_party/WebKit/Source/modules/filesystem/FileSystemCallbacks.h b/third_party/WebKit/Source/modules/filesystem/FileSystemCallbacks.h
index 0deb73a..937f0573 100644
--- a/third_party/WebKit/Source/modules/filesystem/FileSystemCallbacks.h
+++ b/third_party/WebKit/Source/modules/filesystem/FileSystemCallbacks.h
@@ -36,6 +36,7 @@
 #include "platform/FileSystemType.h"
 #include "wtf/Vector.h"
 #include "wtf/text/WTFString.h"
+#include <memory>
 
 namespace blink {
 
@@ -83,7 +84,7 @@
 
 class EntryCallbacks final : public FileSystemCallbacksBase {
 public:
-    static PassOwnPtr<AsyncFileSystemCallbacks> create(EntryCallback*, ErrorCallback*, ExecutionContext*, DOMFileSystemBase*, const String& expectedPath, bool isDirectory);
+    static std::unique_ptr<AsyncFileSystemCallbacks> create(EntryCallback*, ErrorCallback*, ExecutionContext*, DOMFileSystemBase*, const String& expectedPath, bool isDirectory);
     void didSucceed() override;
 
 private:
@@ -95,7 +96,7 @@
 
 class EntriesCallbacks final : public FileSystemCallbacksBase {
 public:
-    static PassOwnPtr<AsyncFileSystemCallbacks> create(EntriesCallback*, ErrorCallback*, ExecutionContext*, DirectoryReaderBase*, const String& basePath);
+    static std::unique_ptr<AsyncFileSystemCallbacks> create(EntriesCallback*, ErrorCallback*, ExecutionContext*, DirectoryReaderBase*, const String& basePath);
     void didReadDirectoryEntry(const String& name, bool isDirectory) override;
     void didReadDirectoryEntries(bool hasMore) override;
 
@@ -109,7 +110,7 @@
 
 class FileSystemCallbacks final : public FileSystemCallbacksBase {
 public:
-    static PassOwnPtr<AsyncFileSystemCallbacks> create(FileSystemCallback*, ErrorCallback*, ExecutionContext*, FileSystemType);
+    static std::unique_ptr<AsyncFileSystemCallbacks> create(FileSystemCallback*, ErrorCallback*, ExecutionContext*, FileSystemType);
     void didOpenFileSystem(const String& name, const KURL& rootURL) override;
 
 private:
@@ -120,7 +121,7 @@
 
 class ResolveURICallbacks final : public FileSystemCallbacksBase {
 public:
-    static PassOwnPtr<AsyncFileSystemCallbacks> create(EntryCallback*, ErrorCallback*, ExecutionContext*);
+    static std::unique_ptr<AsyncFileSystemCallbacks> create(EntryCallback*, ErrorCallback*, ExecutionContext*);
     void didResolveURL(const String& name, const KURL& rootURL, FileSystemType, const String& filePath, bool isDirectry) override;
 
 private:
@@ -130,7 +131,7 @@
 
 class MetadataCallbacks final : public FileSystemCallbacksBase {
 public:
-    static PassOwnPtr<AsyncFileSystemCallbacks> create(MetadataCallback*, ErrorCallback*, ExecutionContext*, DOMFileSystemBase*);
+    static std::unique_ptr<AsyncFileSystemCallbacks> create(MetadataCallback*, ErrorCallback*, ExecutionContext*, DOMFileSystemBase*);
     void didReadMetadata(const FileMetadata&) override;
 
 private:
@@ -140,8 +141,8 @@
 
 class FileWriterBaseCallbacks final : public FileSystemCallbacksBase {
 public:
-    static PassOwnPtr<AsyncFileSystemCallbacks> create(FileWriterBase*, FileWriterBaseCallback*, ErrorCallback*, ExecutionContext*);
-    void didCreateFileWriter(PassOwnPtr<WebFileWriter>, long long length) override;
+    static std::unique_ptr<AsyncFileSystemCallbacks> create(FileWriterBase*, FileWriterBaseCallback*, ErrorCallback*, ExecutionContext*);
+    void didCreateFileWriter(std::unique_ptr<WebFileWriter>, long long length) override;
 
 private:
     FileWriterBaseCallbacks(FileWriterBase*, FileWriterBaseCallback*, ErrorCallback*, ExecutionContext*);
@@ -151,7 +152,7 @@
 
 class SnapshotFileCallback final : public FileSystemCallbacksBase {
 public:
-    static PassOwnPtr<AsyncFileSystemCallbacks> create(DOMFileSystemBase*, const String& name, const KURL&, BlobCallback*, ErrorCallback*, ExecutionContext*);
+    static std::unique_ptr<AsyncFileSystemCallbacks> create(DOMFileSystemBase*, const String& name, const KURL&, BlobCallback*, ErrorCallback*, ExecutionContext*);
     virtual void didCreateSnapshotFile(const FileMetadata&, PassRefPtr<BlobDataHandle> snapshot);
 
 private:
@@ -163,7 +164,7 @@
 
 class VoidCallbacks final : public FileSystemCallbacksBase {
 public:
-    static PassOwnPtr<AsyncFileSystemCallbacks> create(VoidCallback*, ErrorCallback*, ExecutionContext*, DOMFileSystemBase*);
+    static std::unique_ptr<AsyncFileSystemCallbacks> create(VoidCallback*, ErrorCallback*, ExecutionContext*, DOMFileSystemBase*);
     void didSucceed() override;
 
 private:
diff --git a/third_party/WebKit/Source/modules/filesystem/FileSystemClient.h b/third_party/WebKit/Source/modules/filesystem/FileSystemClient.h
index 7fb2fc30..772a179b 100644
--- a/third_party/WebKit/Source/modules/filesystem/FileSystemClient.h
+++ b/third_party/WebKit/Source/modules/filesystem/FileSystemClient.h
@@ -36,6 +36,7 @@
 #include "wtf/Allocator.h"
 #include "wtf/Forward.h"
 #include "wtf/Noncopyable.h"
+#include <memory>
 
 namespace blink {
 
@@ -52,12 +53,12 @@
     virtual ~FileSystemClient() { }
 
     virtual bool requestFileSystemAccessSync(ExecutionContext*) = 0;
-    virtual void requestFileSystemAccessAsync(ExecutionContext*, PassOwnPtr<ContentSettingCallbacks>) = 0;
+    virtual void requestFileSystemAccessAsync(ExecutionContext*, std::unique_ptr<ContentSettingCallbacks>) = 0;
 };
 
-MODULES_EXPORT void provideLocalFileSystemTo(LocalFrame&, PassOwnPtr<FileSystemClient>);
+MODULES_EXPORT void provideLocalFileSystemTo(LocalFrame&, std::unique_ptr<FileSystemClient>);
 
-MODULES_EXPORT void provideLocalFileSystemToWorker(WorkerClients*, PassOwnPtr<FileSystemClient>);
+MODULES_EXPORT void provideLocalFileSystemToWorker(WorkerClients*, std::unique_ptr<FileSystemClient>);
 
 } // namespace blink
 
diff --git a/third_party/WebKit/Source/modules/filesystem/FileWriterBase.cpp b/third_party/WebKit/Source/modules/filesystem/FileWriterBase.cpp
index ab9f91b..46da89cf 100644
--- a/third_party/WebKit/Source/modules/filesystem/FileWriterBase.cpp
+++ b/third_party/WebKit/Source/modules/filesystem/FileWriterBase.cpp
@@ -34,6 +34,7 @@
 #include "core/fileapi/Blob.h"
 #include "core/fileapi/FileError.h"
 #include "public/platform/WebFileWriter.h"
+#include <memory>
 
 namespace blink {
 
@@ -41,7 +42,7 @@
 {
 }
 
-void FileWriterBase::initialize(PassOwnPtr<WebFileWriter> writer, long long length)
+void FileWriterBase::initialize(std::unique_ptr<WebFileWriter> writer, long long length)
 {
     ASSERT(!m_writer);
     ASSERT(length >= 0);
diff --git a/third_party/WebKit/Source/modules/filesystem/FileWriterBase.h b/third_party/WebKit/Source/modules/filesystem/FileWriterBase.h
index 89d97d9..dcace75a0 100644
--- a/third_party/WebKit/Source/modules/filesystem/FileWriterBase.h
+++ b/third_party/WebKit/Source/modules/filesystem/FileWriterBase.h
@@ -32,8 +32,7 @@
 #define FileWriterBase_h
 
 #include "platform/heap/Handle.h"
-#include "wtf/OwnPtr.h"
-#include "wtf/PassOwnPtr.h"
+#include <memory>
 
 namespace blink {
 
@@ -42,7 +41,7 @@
 class FileWriterBase : public GarbageCollectedMixin {
 public:
     virtual ~FileWriterBase();
-    void initialize(PassOwnPtr<WebFileWriter>, long long length);
+    void initialize(std::unique_ptr<WebFileWriter>, long long length);
 
     long long position() const
     {
@@ -76,7 +75,7 @@
     void seekInternal(long long position);
 
 private:
-    OwnPtr<WebFileWriter> m_writer;
+    std::unique_ptr<WebFileWriter> m_writer;
     long long m_position;
     long long m_length;
 };
diff --git a/third_party/WebKit/Source/modules/filesystem/LocalFileSystem.cpp b/third_party/WebKit/Source/modules/filesystem/LocalFileSystem.cpp
index 10feb91..3db0b122 100644
--- a/third_party/WebKit/Source/modules/filesystem/LocalFileSystem.cpp
+++ b/third_party/WebKit/Source/modules/filesystem/LocalFileSystem.cpp
@@ -42,12 +42,13 @@
 #include "public/platform/Platform.h"
 #include "public/platform/WebFileSystem.h"
 #include "wtf/Functional.h"
+#include <memory>
 
 namespace blink {
 
 namespace {
 
-void reportFailure(PassOwnPtr<AsyncFileSystemCallbacks> callbacks, FileError::ErrorCode error)
+void reportFailure(std::unique_ptr<AsyncFileSystemCallbacks> callbacks, FileError::ErrorCode error)
 {
     callbacks->didFail(error);
 }
@@ -56,12 +57,12 @@
 
 class CallbackWrapper final : public GarbageCollectedFinalized<CallbackWrapper> {
 public:
-    CallbackWrapper(PassOwnPtr<AsyncFileSystemCallbacks> c)
+    CallbackWrapper(std::unique_ptr<AsyncFileSystemCallbacks> c)
         : m_callbacks(std::move(c))
     {
     }
     virtual ~CallbackWrapper() { }
-    PassOwnPtr<AsyncFileSystemCallbacks> release()
+    std::unique_ptr<AsyncFileSystemCallbacks> release()
     {
         return std::move(m_callbacks);
     }
@@ -69,10 +70,10 @@
     DEFINE_INLINE_TRACE() { }
 
 private:
-    OwnPtr<AsyncFileSystemCallbacks> m_callbacks;
+    std::unique_ptr<AsyncFileSystemCallbacks> m_callbacks;
 };
 
-LocalFileSystem* LocalFileSystem::create(PassOwnPtr<FileSystemClient> client)
+LocalFileSystem* LocalFileSystem::create(std::unique_ptr<FileSystemClient> client)
 {
     return new LocalFileSystem(std::move(client));
 }
@@ -81,7 +82,7 @@
 {
 }
 
-void LocalFileSystem::resolveURL(ExecutionContext* context, const KURL& fileSystemURL, PassOwnPtr<AsyncFileSystemCallbacks> callbacks)
+void LocalFileSystem::resolveURL(ExecutionContext* context, const KURL& fileSystemURL, std::unique_ptr<AsyncFileSystemCallbacks> callbacks)
 {
     CallbackWrapper* wrapper = new CallbackWrapper(std::move(callbacks));
     requestFileSystemAccessInternal(context,
@@ -89,7 +90,7 @@
         bind(&LocalFileSystem::fileSystemNotAllowedInternal, this, context, wrapper));
 }
 
-void LocalFileSystem::requestFileSystem(ExecutionContext* context, FileSystemType type, long long size, PassOwnPtr<AsyncFileSystemCallbacks> callbacks)
+void LocalFileSystem::requestFileSystem(ExecutionContext* context, FileSystemType type, long long size, std::unique_ptr<AsyncFileSystemCallbacks> callbacks)
 {
     CallbackWrapper* wrapper = new CallbackWrapper(std::move(callbacks));
     requestFileSystemAccessInternal(context,
@@ -97,7 +98,7 @@
         bind(&LocalFileSystem::fileSystemNotAllowedInternal, this, context, wrapper));
 }
 
-void LocalFileSystem::deleteFileSystem(ExecutionContext* context, FileSystemType type, PassOwnPtr<AsyncFileSystemCallbacks> callbacks)
+void LocalFileSystem::deleteFileSystem(ExecutionContext* context, FileSystemType type, std::unique_ptr<AsyncFileSystemCallbacks> callbacks)
 {
     ASSERT(context);
     ASSERT_WITH_SECURITY_IMPLICATION(context->isDocument());
@@ -189,7 +190,7 @@
     fileSystem->deleteFileSystem(storagePartition, static_cast<WebFileSystemType>(type), callbacks->release());
 }
 
-LocalFileSystem::LocalFileSystem(PassOwnPtr<FileSystemClient> client)
+LocalFileSystem::LocalFileSystem(std::unique_ptr<FileSystemClient> client)
     : m_client(std::move(client))
 {
 }
@@ -209,12 +210,12 @@
     return static_cast<LocalFileSystem*>(Supplement<WorkerClients>::from(clients, supplementName()));
 }
 
-void provideLocalFileSystemTo(LocalFrame& frame, PassOwnPtr<FileSystemClient> client)
+void provideLocalFileSystemTo(LocalFrame& frame, std::unique_ptr<FileSystemClient> client)
 {
     frame.provideSupplement(LocalFileSystem::supplementName(), LocalFileSystem::create(std::move(client)));
 }
 
-void provideLocalFileSystemToWorker(WorkerClients* clients, PassOwnPtr<FileSystemClient> client)
+void provideLocalFileSystemToWorker(WorkerClients* clients, std::unique_ptr<FileSystemClient> client)
 {
     clients->provideSupplement(LocalFileSystem::supplementName(), LocalFileSystem::create(std::move(client)));
 }
diff --git a/third_party/WebKit/Source/modules/filesystem/LocalFileSystem.h b/third_party/WebKit/Source/modules/filesystem/LocalFileSystem.h
index 696d955..1255126 100644
--- a/third_party/WebKit/Source/modules/filesystem/LocalFileSystem.h
+++ b/third_party/WebKit/Source/modules/filesystem/LocalFileSystem.h
@@ -37,7 +37,7 @@
 #include "platform/heap/Handle.h"
 #include "wtf/Forward.h"
 #include "wtf/Functional.h"
-#include "wtf/PassOwnPtr.h"
+#include <memory>
 
 namespace blink {
 
@@ -53,12 +53,12 @@
     USING_GARBAGE_COLLECTED_MIXIN(LocalFileSystem);
     WTF_MAKE_NONCOPYABLE(LocalFileSystem);
 public:
-    static LocalFileSystem* create(PassOwnPtr<FileSystemClient>);
+    static LocalFileSystem* create(std::unique_ptr<FileSystemClient>);
     ~LocalFileSystem();
 
-    void resolveURL(ExecutionContext*, const KURL&, PassOwnPtr<AsyncFileSystemCallbacks>);
-    void requestFileSystem(ExecutionContext*, FileSystemType, long long size, PassOwnPtr<AsyncFileSystemCallbacks>);
-    void deleteFileSystem(ExecutionContext*, FileSystemType, PassOwnPtr<AsyncFileSystemCallbacks>);
+    void resolveURL(ExecutionContext*, const KURL&, std::unique_ptr<AsyncFileSystemCallbacks>);
+    void requestFileSystem(ExecutionContext*, FileSystemType, long long size, std::unique_ptr<AsyncFileSystemCallbacks>);
+    void deleteFileSystem(ExecutionContext*, FileSystemType, std::unique_ptr<AsyncFileSystemCallbacks>);
 
     FileSystemClient* client() const { return m_client.get(); }
 
@@ -72,7 +72,7 @@
     }
 
 private:
-    explicit LocalFileSystem(PassOwnPtr<FileSystemClient>);
+    explicit LocalFileSystem(std::unique_ptr<FileSystemClient>);
 
     WebFileSystem* getFileSystem() const;
     void fileSystemNotAvailable(ExecutionContext*, CallbackWrapper*);
@@ -83,7 +83,7 @@
     void resolveURLInternal(ExecutionContext*, const KURL&, CallbackWrapper*);
     void deleteFileSystemInternal(ExecutionContext*, FileSystemType, CallbackWrapper*);
 
-    OwnPtr<FileSystemClient> m_client;
+    std::unique_ptr<FileSystemClient> m_client;
 };
 
 } // namespace blink
diff --git a/third_party/WebKit/Source/modules/filesystem/WorkerGlobalScopeFileSystem.cpp b/third_party/WebKit/Source/modules/filesystem/WorkerGlobalScopeFileSystem.cpp
index 7a0841c0..b9e309b 100644
--- a/third_party/WebKit/Source/modules/filesystem/WorkerGlobalScopeFileSystem.cpp
+++ b/third_party/WebKit/Source/modules/filesystem/WorkerGlobalScopeFileSystem.cpp
@@ -41,6 +41,7 @@
 #include "modules/filesystem/SyncCallbackHelper.h"
 #include "platform/FileSystemType.h"
 #include "platform/weborigin/SecurityOrigin.h"
+#include <memory>
 
 namespace blink {
 
@@ -76,7 +77,7 @@
     }
 
     FileSystemSyncCallbackHelper* helper = FileSystemSyncCallbackHelper::create();
-    OwnPtr<AsyncFileSystemCallbacks> callbacks = FileSystemCallbacks::create(helper->getSuccessCallback(), helper->getErrorCallback(), &worker, fileSystemType);
+    std::unique_ptr<AsyncFileSystemCallbacks> callbacks = FileSystemCallbacks::create(helper->getSuccessCallback(), helper->getErrorCallback(), &worker, fileSystemType);
     callbacks->setShouldBlockUntilCompletion(true);
 
     LocalFileSystem::from(worker)->requestFileSystem(&worker, fileSystemType, size, std::move(callbacks));
@@ -115,7 +116,7 @@
     }
 
     EntrySyncCallbackHelper* resolveURLHelper = EntrySyncCallbackHelper::create();
-    OwnPtr<AsyncFileSystemCallbacks> callbacks = ResolveURICallbacks::create(resolveURLHelper->getSuccessCallback(), resolveURLHelper->getErrorCallback(), &worker);
+    std::unique_ptr<AsyncFileSystemCallbacks> callbacks = ResolveURICallbacks::create(resolveURLHelper->getSuccessCallback(), resolveURLHelper->getErrorCallback(), &worker);
     callbacks->setShouldBlockUntilCompletion(true);
 
     LocalFileSystem::from(worker)->resolveURL(&worker, completedURL, std::move(callbacks));
diff --git a/third_party/WebKit/Source/modules/imagecapture/ImageCapture.cpp b/third_party/WebKit/Source/modules/imagecapture/ImageCapture.cpp
index 7e04c0c..fb0aaf17 100644
--- a/third_party/WebKit/Source/modules/imagecapture/ImageCapture.cpp
+++ b/third_party/WebKit/Source/modules/imagecapture/ImageCapture.cpp
@@ -20,6 +20,7 @@
 #include "public/platform/ServiceRegistry.h"
 #include "public/platform/WebImageCaptureFrameGrabber.h"
 #include "public/platform/WebMediaStreamTrack.h"
+#include "wtf/PtrUtil.h"
 
 namespace blink {
 
@@ -159,7 +160,7 @@
 
     // Create |m_frameGrabber| the first time.
     if (!m_frameGrabber)
-        m_frameGrabber = adoptPtr(Platform::current()->createImageCaptureFrameGrabber());
+        m_frameGrabber = wrapUnique(Platform::current()->createImageCaptureFrameGrabber());
 
     if (!m_frameGrabber) {
         resolver->reject(DOMException::create(UnknownError, "Couldn't create platform resources"));
diff --git a/third_party/WebKit/Source/modules/imagecapture/ImageCapture.h b/third_party/WebKit/Source/modules/imagecapture/ImageCapture.h
index 93c396a..88662e5 100644
--- a/third_party/WebKit/Source/modules/imagecapture/ImageCapture.h
+++ b/third_party/WebKit/Source/modules/imagecapture/ImageCapture.h
@@ -13,6 +13,7 @@
 #include "modules/EventTargetModules.h"
 #include "modules/ModulesExport.h"
 #include "platform/AsyncMethodRunner.h"
+#include <memory>
 
 namespace blink {
 
@@ -64,7 +65,7 @@
     void onServiceConnectionError();
 
     Member<MediaStreamTrack> m_streamTrack;
-    OwnPtr<WebImageCaptureFrameGrabber> m_frameGrabber;
+    std::unique_ptr<WebImageCaptureFrameGrabber> m_frameGrabber;
     media::mojom::blink::ImageCapturePtr m_service;
 
     HeapHashSet<Member<ScriptPromiseResolver>> m_serviceRequests;
diff --git a/third_party/WebKit/Source/modules/indexeddb/IDBCursor.cpp b/third_party/WebKit/Source/modules/indexeddb/IDBCursor.cpp
index f0a5cfab..c168f0a2 100644
--- a/third_party/WebKit/Source/modules/indexeddb/IDBCursor.cpp
+++ b/third_party/WebKit/Source/modules/indexeddb/IDBCursor.cpp
@@ -42,18 +42,19 @@
 #include "public/platform/modules/indexeddb/WebIDBDatabase.h"
 #include "public/platform/modules/indexeddb/WebIDBKeyRange.h"
 #include <limits>
+#include <memory>
 
 using blink::WebIDBCursor;
 using blink::WebIDBDatabase;
 
 namespace blink {
 
-IDBCursor* IDBCursor::create(PassOwnPtr<WebIDBCursor> backend, WebIDBCursorDirection direction, IDBRequest* request, IDBAny* source, IDBTransaction* transaction)
+IDBCursor* IDBCursor::create(std::unique_ptr<WebIDBCursor> backend, WebIDBCursorDirection direction, IDBRequest* request, IDBAny* source, IDBTransaction* transaction)
 {
     return new IDBCursor(std::move(backend), direction, request, source, transaction);
 }
 
-IDBCursor::IDBCursor(PassOwnPtr<WebIDBCursor> backend, WebIDBCursorDirection direction, IDBRequest* request, IDBAny* source, IDBTransaction* transaction)
+IDBCursor::IDBCursor(std::unique_ptr<WebIDBCursor> backend, WebIDBCursorDirection direction, IDBRequest* request, IDBAny* source, IDBTransaction* transaction)
     : m_backend(std::move(backend))
     , m_request(request)
     , m_direction(direction)
@@ -148,7 +149,7 @@
 
     m_request->setPendingCursor(this);
     m_gotValue = false;
-    m_backend->advance(count, WebIDBCallbacksImpl::create(m_request).leakPtr());
+    m_backend->advance(count, WebIDBCallbacksImpl::create(m_request).release());
 }
 
 void IDBCursor::continueFunction(ScriptState* scriptState, const ScriptValue& keyValue, ExceptionState& exceptionState)
@@ -242,7 +243,7 @@
     //        will be on the original context openCursor was called on. Is this right?
     m_request->setPendingCursor(this);
     m_gotValue = false;
-    m_backend->continueFunction(key, primaryKey, WebIDBCallbacksImpl::create(m_request).leakPtr());
+    m_backend->continueFunction(key, primaryKey, WebIDBCallbacksImpl::create(m_request).release());
 }
 
 IDBRequest* IDBCursor::deleteFunction(ScriptState* scriptState, ExceptionState& exceptionState)
@@ -282,7 +283,7 @@
     ASSERT(!exceptionState.hadException());
 
     IDBRequest* request = IDBRequest::create(scriptState, IDBAny::create(this), m_transaction.get());
-    m_transaction->backendDB()->deleteRange(m_transaction->id(), effectiveObjectStore()->id(), keyRange, WebIDBCallbacksImpl::create(request).leakPtr());
+    m_transaction->backendDB()->deleteRange(m_transaction->id(), effectiveObjectStore()->id(), keyRange, WebIDBCallbacksImpl::create(request).release());
     return request;
 }
 
diff --git a/third_party/WebKit/Source/modules/indexeddb/IDBCursor.h b/third_party/WebKit/Source/modules/indexeddb/IDBCursor.h
index e4af669..57c97d5 100644
--- a/third_party/WebKit/Source/modules/indexeddb/IDBCursor.h
+++ b/third_party/WebKit/Source/modules/indexeddb/IDBCursor.h
@@ -35,6 +35,7 @@
 #include "public/platform/modules/indexeddb/WebIDBTypes.h"
 #include "wtf/PassRefPtr.h"
 #include "wtf/RefPtr.h"
+#include <memory>
 
 namespace blink {
 
@@ -49,7 +50,7 @@
 public:
     static WebIDBCursorDirection stringToDirection(const String& modeString);
 
-    static IDBCursor* create(PassOwnPtr<WebIDBCursor>, WebIDBCursorDirection, IDBRequest*, IDBAny* source, IDBTransaction*);
+    static IDBCursor* create(std::unique_ptr<WebIDBCursor>, WebIDBCursorDirection, IDBRequest*, IDBAny* source, IDBTransaction*);
     virtual ~IDBCursor();
     DECLARE_TRACE();
     void contextWillBeDestroyed() { m_backend.reset(); }
@@ -83,12 +84,12 @@
     virtual bool isCursorWithValue() const { return false; }
 
 protected:
-    IDBCursor(PassOwnPtr<WebIDBCursor>, WebIDBCursorDirection, IDBRequest*, IDBAny* source, IDBTransaction*);
+    IDBCursor(std::unique_ptr<WebIDBCursor>, WebIDBCursorDirection, IDBRequest*, IDBAny* source, IDBTransaction*);
 
 private:
     IDBObjectStore* effectiveObjectStore() const;
 
-    OwnPtr<WebIDBCursor> m_backend;
+    std::unique_ptr<WebIDBCursor> m_backend;
     Member<IDBRequest> m_request;
     const WebIDBCursorDirection m_direction;
     Member<IDBAny> m_source;
diff --git a/third_party/WebKit/Source/modules/indexeddb/IDBCursorWithValue.cpp b/third_party/WebKit/Source/modules/indexeddb/IDBCursorWithValue.cpp
index c5a2793..047993a 100644
--- a/third_party/WebKit/Source/modules/indexeddb/IDBCursorWithValue.cpp
+++ b/third_party/WebKit/Source/modules/indexeddb/IDBCursorWithValue.cpp
@@ -26,17 +26,18 @@
 #include "modules/indexeddb/IDBCursorWithValue.h"
 
 #include "modules/indexeddb/IDBKey.h"
+#include <memory>
 
 using blink::WebIDBCursor;
 
 namespace blink {
 
-IDBCursorWithValue* IDBCursorWithValue::create(PassOwnPtr<WebIDBCursor> backend, WebIDBCursorDirection direction, IDBRequest* request, IDBAny* source, IDBTransaction* transaction)
+IDBCursorWithValue* IDBCursorWithValue::create(std::unique_ptr<WebIDBCursor> backend, WebIDBCursorDirection direction, IDBRequest* request, IDBAny* source, IDBTransaction* transaction)
 {
     return new IDBCursorWithValue(std::move(backend), direction, request, source, transaction);
 }
 
-IDBCursorWithValue::IDBCursorWithValue(PassOwnPtr<WebIDBCursor> backend, WebIDBCursorDirection direction, IDBRequest* request, IDBAny* source, IDBTransaction* transaction)
+IDBCursorWithValue::IDBCursorWithValue(std::unique_ptr<WebIDBCursor> backend, WebIDBCursorDirection direction, IDBRequest* request, IDBAny* source, IDBTransaction* transaction)
     : IDBCursor(std::move(backend), direction, request, source, transaction)
 {
 }
diff --git a/third_party/WebKit/Source/modules/indexeddb/IDBCursorWithValue.h b/third_party/WebKit/Source/modules/indexeddb/IDBCursorWithValue.h
index 49ab3e51..9fac966 100644
--- a/third_party/WebKit/Source/modules/indexeddb/IDBCursorWithValue.h
+++ b/third_party/WebKit/Source/modules/indexeddb/IDBCursorWithValue.h
@@ -30,7 +30,7 @@
 #include "modules/indexeddb/IndexedDB.h"
 #include "public/platform/modules/indexeddb/WebIDBCursor.h"
 #include "public/platform/modules/indexeddb/WebIDBTypes.h"
-#include "wtf/PassOwnPtr.h"
+#include <memory>
 
 namespace blink {
 
@@ -41,7 +41,7 @@
 class IDBCursorWithValue final : public IDBCursor {
     DEFINE_WRAPPERTYPEINFO();
 public:
-    static IDBCursorWithValue* create(PassOwnPtr<WebIDBCursor>, WebIDBCursorDirection, IDBRequest*, IDBAny* source, IDBTransaction*);
+    static IDBCursorWithValue* create(std::unique_ptr<WebIDBCursor>, WebIDBCursorDirection, IDBRequest*, IDBAny* source, IDBTransaction*);
     ~IDBCursorWithValue() override;
 
     // The value attribute defined in the IDL is simply implemented in IDBCursor (but not exposed via
@@ -51,7 +51,7 @@
     bool isCursorWithValue() const override { return true; }
 
 private:
-    IDBCursorWithValue(PassOwnPtr<WebIDBCursor>, WebIDBCursorDirection, IDBRequest*, IDBAny* source, IDBTransaction*);
+    IDBCursorWithValue(std::unique_ptr<WebIDBCursor>, WebIDBCursorDirection, IDBRequest*, IDBAny* source, IDBTransaction*);
 };
 
 DEFINE_TYPE_CASTS(IDBCursorWithValue, IDBCursor, cursor, cursor->isCursorWithValue(), cursor.isCursorWithValue());
diff --git a/third_party/WebKit/Source/modules/indexeddb/IDBDatabase.cpp b/third_party/WebKit/Source/modules/indexeddb/IDBDatabase.cpp
index 48c1da54..fa8eda5 100644
--- a/third_party/WebKit/Source/modules/indexeddb/IDBDatabase.cpp
+++ b/third_party/WebKit/Source/modules/indexeddb/IDBDatabase.cpp
@@ -45,6 +45,7 @@
 #include "public/platform/modules/indexeddb/WebIDBTypes.h"
 #include "wtf/Atomics.h"
 #include <limits>
+#include <memory>
 
 using blink::WebIDBDatabase;
 
@@ -66,14 +67,14 @@
 const char IDBDatabase::transactionReadOnlyErrorMessage[] = "The transaction is read-only.";
 const char IDBDatabase::databaseClosedErrorMessage[] = "The database connection is closed.";
 
-IDBDatabase* IDBDatabase::create(ExecutionContext* context, PassOwnPtr<WebIDBDatabase> database, IDBDatabaseCallbacks* callbacks)
+IDBDatabase* IDBDatabase::create(ExecutionContext* context, std::unique_ptr<WebIDBDatabase> database, IDBDatabaseCallbacks* callbacks)
 {
     IDBDatabase* idbDatabase = new IDBDatabase(context, std::move(database), callbacks);
     idbDatabase->suspendIfNeeded();
     return idbDatabase;
 }
 
-IDBDatabase::IDBDatabase(ExecutionContext* context, PassOwnPtr<WebIDBDatabase> backend, IDBDatabaseCallbacks* callbacks)
+IDBDatabase::IDBDatabase(ExecutionContext* context, std::unique_ptr<WebIDBDatabase> backend, IDBDatabaseCallbacks* callbacks)
     : ActiveScriptWrappable(this)
     , ActiveDOMObject(context)
     , m_backend(std::move(backend))
@@ -311,7 +312,7 @@
     }
 
     int64_t transactionId = nextTransactionId();
-    m_backend->createTransaction(transactionId, WebIDBDatabaseCallbacksImpl::create(m_databaseCallbacks).leakPtr(), objectStoreIds, mode);
+    m_backend->createTransaction(transactionId, WebIDBDatabaseCallbacksImpl::create(m_databaseCallbacks).release(), objectStoreIds, mode);
 
     return IDBTransaction::create(scriptState, transactionId, scope, mode, this);
 }
diff --git a/third_party/WebKit/Source/modules/indexeddb/IDBDatabase.h b/third_party/WebKit/Source/modules/indexeddb/IDBDatabase.h
index ff099ff..51fe135 100644
--- a/third_party/WebKit/Source/modules/indexeddb/IDBDatabase.h
+++ b/third_party/WebKit/Source/modules/indexeddb/IDBDatabase.h
@@ -43,10 +43,9 @@
 #include "modules/indexeddb/IndexedDB.h"
 #include "platform/heap/Handle.h"
 #include "public/platform/modules/indexeddb/WebIDBDatabase.h"
-#include "wtf/OwnPtr.h"
-#include "wtf/PassOwnPtr.h"
 #include "wtf/PassRefPtr.h"
 #include "wtf/RefPtr.h"
+#include <memory>
 
 namespace blink {
 
@@ -61,7 +60,7 @@
     USING_GARBAGE_COLLECTED_MIXIN(IDBDatabase);
     DEFINE_WRAPPERTYPEINFO();
 public:
-    static IDBDatabase* create(ExecutionContext*, PassOwnPtr<WebIDBDatabase>, IDBDatabaseCallbacks*);
+    static IDBDatabase* create(ExecutionContext*, std::unique_ptr<WebIDBDatabase>, IDBDatabaseCallbacks*);
     ~IDBDatabase() override;
     DECLARE_VIRTUAL_TRACE();
 
@@ -140,13 +139,13 @@
     DispatchEventResult dispatchEventInternal(Event*) override;
 
 private:
-    IDBDatabase(ExecutionContext*, PassOwnPtr<WebIDBDatabase>, IDBDatabaseCallbacks*);
+    IDBDatabase(ExecutionContext*, std::unique_ptr<WebIDBDatabase>, IDBDatabaseCallbacks*);
 
     IDBObjectStore* createObjectStore(const String& name, const IDBKeyPath&, bool autoIncrement, ExceptionState&);
     void closeConnection();
 
     IDBDatabaseMetadata m_metadata;
-    OwnPtr<WebIDBDatabase> m_backend;
+    std::unique_ptr<WebIDBDatabase> m_backend;
     Member<IDBTransaction> m_versionChangeTransaction;
     HeapHashMap<int64_t, Member<IDBTransaction>> m_transactions;
 
diff --git a/third_party/WebKit/Source/modules/indexeddb/IDBFactory.cpp b/third_party/WebKit/Source/modules/indexeddb/IDBFactory.cpp
index 2826402..7374353 100644
--- a/third_party/WebKit/Source/modules/indexeddb/IDBFactory.cpp
+++ b/third_party/WebKit/Source/modules/indexeddb/IDBFactory.cpp
@@ -45,6 +45,7 @@
 #include "public/platform/Platform.h"
 #include "public/platform/WebSecurityOrigin.h"
 #include "public/platform/modules/indexeddb/WebIDBFactory.h"
+#include <memory>
 
 namespace blink {
 
@@ -81,7 +82,7 @@
         return request;
     }
 
-    Platform::current()->idbFactory()->getDatabaseNames(WebIDBCallbacksImpl::create(request).leakPtr(), WebSecurityOrigin(scriptState->getExecutionContext()->getSecurityOrigin()));
+    Platform::current()->idbFactory()->getDatabaseNames(WebIDBCallbacksImpl::create(request).release(), WebSecurityOrigin(scriptState->getExecutionContext()->getSecurityOrigin()));
     return request;
 }
 
@@ -115,7 +116,7 @@
         return request;
     }
 
-    Platform::current()->idbFactory()->open(name, version, transactionId, WebIDBCallbacksImpl::create(request).leakPtr(), WebIDBDatabaseCallbacksImpl::create(databaseCallbacks).leakPtr(), WebSecurityOrigin(scriptState->getExecutionContext()->getSecurityOrigin()));
+    Platform::current()->idbFactory()->open(name, version, transactionId, WebIDBCallbacksImpl::create(request).release(), WebIDBDatabaseCallbacksImpl::create(databaseCallbacks).release(), WebSecurityOrigin(scriptState->getExecutionContext()->getSecurityOrigin()));
     return request;
 }
 
@@ -143,7 +144,7 @@
         return request;
     }
 
-    Platform::current()->idbFactory()->deleteDatabase(name, WebIDBCallbacksImpl::create(request).leakPtr(), WebSecurityOrigin(scriptState->getExecutionContext()->getSecurityOrigin()));
+    Platform::current()->idbFactory()->deleteDatabase(name, WebIDBCallbacksImpl::create(request).release(), WebSecurityOrigin(scriptState->getExecutionContext()->getSecurityOrigin()));
     return request;
 }
 
diff --git a/third_party/WebKit/Source/modules/indexeddb/IDBIndex.cpp b/third_party/WebKit/Source/modules/indexeddb/IDBIndex.cpp
index b7340d4..86e21667 100644
--- a/third_party/WebKit/Source/modules/indexeddb/IDBIndex.cpp
+++ b/third_party/WebKit/Source/modules/indexeddb/IDBIndex.cpp
@@ -37,6 +37,7 @@
 #include "modules/indexeddb/IDBTransaction.h"
 #include "modules/indexeddb/WebIDBCallbacksImpl.h"
 #include "public/platform/modules/indexeddb/WebIDBKeyRange.h"
+#include <memory>
 
 using blink::WebIDBCallbacks;
 using blink::WebIDBCursor;
@@ -101,7 +102,7 @@
 {
     IDBRequest* request = IDBRequest::create(scriptState, IDBAny::create(this), m_transaction.get());
     request->setCursorDetails(IndexedDB::CursorKeyAndValue, direction);
-    backendDB()->openCursor(m_transaction->id(), m_objectStore->id(), m_metadata.id, keyRange, direction, false, WebIDBTaskTypeNormal, WebIDBCallbacksImpl::create(request).leakPtr());
+    backendDB()->openCursor(m_transaction->id(), m_objectStore->id(), m_metadata.id, keyRange, direction, false, WebIDBTaskTypeNormal, WebIDBCallbacksImpl::create(request).release());
     return request;
 }
 
@@ -131,7 +132,7 @@
     }
 
     IDBRequest* request = IDBRequest::create(scriptState, IDBAny::create(this), m_transaction.get());
-    backendDB()->count(m_transaction->id(), m_objectStore->id(), m_metadata.id, keyRange, WebIDBCallbacksImpl::create(request).leakPtr());
+    backendDB()->count(m_transaction->id(), m_objectStore->id(), m_metadata.id, keyRange, WebIDBCallbacksImpl::create(request).release());
     return request;
 }
 
@@ -161,7 +162,7 @@
 
     IDBRequest* request = IDBRequest::create(scriptState, IDBAny::create(this), m_transaction.get());
     request->setCursorDetails(IndexedDB::CursorKeyOnly, direction);
-    backendDB()->openCursor(m_transaction->id(), m_objectStore->id(), m_metadata.id, keyRange, direction, true, WebIDBTaskTypeNormal, WebIDBCallbacksImpl::create(request).leakPtr());
+    backendDB()->openCursor(m_transaction->id(), m_objectStore->id(), m_metadata.id, keyRange, direction, true, WebIDBTaskTypeNormal, WebIDBCallbacksImpl::create(request).release());
     return request;
 }
 
@@ -227,7 +228,7 @@
     }
 
     IDBRequest* request = IDBRequest::create(scriptState, IDBAny::create(this), m_transaction.get());
-    backendDB()->get(m_transaction->id(), m_objectStore->id(), m_metadata.id, keyRange, keyOnly, WebIDBCallbacksImpl::create(request).leakPtr());
+    backendDB()->get(m_transaction->id(), m_objectStore->id(), m_metadata.id, keyRange, keyOnly, WebIDBCallbacksImpl::create(request).release());
     return request;
 }
 
@@ -258,7 +259,7 @@
     }
 
     IDBRequest* request = IDBRequest::create(scriptState, IDBAny::create(this), m_transaction.get());
-    backendDB()->getAll(m_transaction->id(), m_objectStore->id(), m_metadata.id, keyRange, maxCount, keyOnly, WebIDBCallbacksImpl::create(request).leakPtr());
+    backendDB()->getAll(m_transaction->id(), m_objectStore->id(), m_metadata.id, keyRange, maxCount, keyOnly, WebIDBCallbacksImpl::create(request).release());
     return request;
 }
 
diff --git a/third_party/WebKit/Source/modules/indexeddb/IDBObjectStore.cpp b/third_party/WebKit/Source/modules/indexeddb/IDBObjectStore.cpp
index 98764c5e..2f035a20 100644
--- a/third_party/WebKit/Source/modules/indexeddb/IDBObjectStore.cpp
+++ b/third_party/WebKit/Source/modules/indexeddb/IDBObjectStore.cpp
@@ -46,6 +46,7 @@
 #include "public/platform/WebVector.h"
 #include "public/platform/modules/indexeddb/WebIDBKey.h"
 #include "public/platform/modules/indexeddb/WebIDBKeyRange.h"
+#include <memory>
 #include <v8.h>
 
 using blink::WebBlobInfo;
@@ -113,7 +114,7 @@
     }
 
     IDBRequest* request = IDBRequest::create(scriptState, IDBAny::create(this), m_transaction.get());
-    backendDB()->get(m_transaction->id(), id(), IDBIndexMetadata::InvalidId, keyRange, false, WebIDBCallbacksImpl::create(request).leakPtr());
+    backendDB()->get(m_transaction->id(), id(), IDBIndexMetadata::InvalidId, keyRange, false, WebIDBCallbacksImpl::create(request).release());
     return request;
 }
 
@@ -149,7 +150,7 @@
     }
 
     IDBRequest* request = IDBRequest::create(scriptState, IDBAny::create(this), m_transaction.get());
-    backendDB()->getAll(m_transaction->id(), id(), IDBIndexMetadata::InvalidId, range, maxCount, false, WebIDBCallbacksImpl::create(request).leakPtr());
+    backendDB()->getAll(m_transaction->id(), id(), IDBIndexMetadata::InvalidId, range, maxCount, false, WebIDBCallbacksImpl::create(request).release());
     return request;
 }
 
@@ -185,7 +186,7 @@
     }
 
     IDBRequest* request = IDBRequest::create(scriptState, IDBAny::create(this), m_transaction.get());
-    backendDB()->getAll(m_transaction->id(), id(), IDBIndexMetadata::InvalidId, range, maxCount, true, WebIDBCallbacksImpl::create(request).leakPtr());
+    backendDB()->getAll(m_transaction->id(), id(), IDBIndexMetadata::InvalidId, range, maxCount, true, WebIDBCallbacksImpl::create(request).release());
     return request;
 }
 
@@ -340,7 +341,7 @@
     serializedValue->toWireBytes(wireBytes);
     RefPtr<SharedBuffer> valueBuffer = SharedBuffer::adoptVector(wireBytes);
 
-    backendDB()->put(m_transaction->id(), id(), WebData(valueBuffer), blobInfo, key, static_cast<WebIDBPutMode>(putMode), WebIDBCallbacksImpl::create(request).leakPtr(), indexIds, indexKeys);
+    backendDB()->put(m_transaction->id(), id(), WebData(valueBuffer), blobInfo, key, static_cast<WebIDBPutMode>(putMode), WebIDBCallbacksImpl::create(request).release(), indexIds, indexKeys);
     return request;
 }
 
@@ -377,7 +378,7 @@
     }
 
     IDBRequest* request = IDBRequest::create(scriptState, IDBAny::create(this), m_transaction.get());
-    backendDB()->deleteRange(m_transaction->id(), id(), keyRange, WebIDBCallbacksImpl::create(request).leakPtr());
+    backendDB()->deleteRange(m_transaction->id(), id(), keyRange, WebIDBCallbacksImpl::create(request).release());
     return request;
 }
 
@@ -406,7 +407,7 @@
     }
 
     IDBRequest* request = IDBRequest::create(scriptState, IDBAny::create(this), m_transaction.get());
-    backendDB()->clear(m_transaction->id(), id(), WebIDBCallbacksImpl::create(request).leakPtr());
+    backendDB()->clear(m_transaction->id(), id(), WebIDBCallbacksImpl::create(request).release());
     return request;
 }
 
@@ -665,7 +666,7 @@
     IDBRequest* request = IDBRequest::create(scriptState, IDBAny::create(this), m_transaction.get());
     request->setCursorDetails(IndexedDB::CursorKeyAndValue, direction);
 
-    backendDB()->openCursor(m_transaction->id(), id(), IDBIndexMetadata::InvalidId, range, direction, false, taskType, WebIDBCallbacksImpl::create(request).leakPtr());
+    backendDB()->openCursor(m_transaction->id(), id(), IDBIndexMetadata::InvalidId, range, direction, false, taskType, WebIDBCallbacksImpl::create(request).release());
     return request;
 }
 
@@ -698,7 +699,7 @@
     IDBRequest* request = IDBRequest::create(scriptState, IDBAny::create(this), m_transaction.get());
     request->setCursorDetails(IndexedDB::CursorKeyOnly, direction);
 
-    backendDB()->openCursor(m_transaction->id(), id(), IDBIndexMetadata::InvalidId, keyRange, direction, true, WebIDBTaskTypeNormal, WebIDBCallbacksImpl::create(request).leakPtr());
+    backendDB()->openCursor(m_transaction->id(), id(), IDBIndexMetadata::InvalidId, keyRange, direction, true, WebIDBTaskTypeNormal, WebIDBCallbacksImpl::create(request).release());
     return request;
 }
 
@@ -728,7 +729,7 @@
     }
 
     IDBRequest* request = IDBRequest::create(scriptState, IDBAny::create(this), m_transaction.get());
-    backendDB()->count(m_transaction->id(), id(), IDBIndexMetadata::InvalidId, keyRange, WebIDBCallbacksImpl::create(request).leakPtr());
+    backendDB()->count(m_transaction->id(), id(), IDBIndexMetadata::InvalidId, keyRange, WebIDBCallbacksImpl::create(request).release());
     return request;
 }
 
diff --git a/third_party/WebKit/Source/modules/indexeddb/IDBOpenDBRequest.cpp b/third_party/WebKit/Source/modules/indexeddb/IDBOpenDBRequest.cpp
index ce8ba0c..9be4f6b 100644
--- a/third_party/WebKit/Source/modules/indexeddb/IDBOpenDBRequest.cpp
+++ b/third_party/WebKit/Source/modules/indexeddb/IDBOpenDBRequest.cpp
@@ -33,6 +33,7 @@
 #include "modules/indexeddb/IDBDatabaseCallbacks.h"
 #include "modules/indexeddb/IDBTracing.h"
 #include "modules/indexeddb/IDBVersionChangeEvent.h"
+#include <memory>
 
 using blink::WebIDBDatabase;
 
@@ -78,11 +79,11 @@
     enqueueEvent(IDBVersionChangeEvent::create(EventTypeNames::blocked, oldVersion, newVersionNullable));
 }
 
-void IDBOpenDBRequest::onUpgradeNeeded(int64_t oldVersion, PassOwnPtr<WebIDBDatabase> backend, const IDBDatabaseMetadata& metadata, WebIDBDataLoss dataLoss, String dataLossMessage)
+void IDBOpenDBRequest::onUpgradeNeeded(int64_t oldVersion, std::unique_ptr<WebIDBDatabase> backend, const IDBDatabaseMetadata& metadata, WebIDBDataLoss dataLoss, String dataLossMessage)
 {
     IDB_TRACE("IDBOpenDBRequest::onUpgradeNeeded()");
     if (m_contextStopped || !getExecutionContext()) {
-        OwnPtr<WebIDBDatabase> db = std::move(backend);
+        std::unique_ptr<WebIDBDatabase> db = std::move(backend);
         db->abort(m_transactionId);
         db->close();
         return;
@@ -110,11 +111,11 @@
     enqueueEvent(IDBVersionChangeEvent::create(EventTypeNames::upgradeneeded, oldVersion, m_version, dataLoss, dataLossMessage));
 }
 
-void IDBOpenDBRequest::onSuccess(PassOwnPtr<WebIDBDatabase> backend, const IDBDatabaseMetadata& metadata)
+void IDBOpenDBRequest::onSuccess(std::unique_ptr<WebIDBDatabase> backend, const IDBDatabaseMetadata& metadata)
 {
     IDB_TRACE("IDBOpenDBRequest::onSuccess()");
     if (m_contextStopped || !getExecutionContext()) {
-        OwnPtr<WebIDBDatabase> db = std::move(backend);
+        std::unique_ptr<WebIDBDatabase> db = std::move(backend);
         if (db)
             db->close();
         return;
diff --git a/third_party/WebKit/Source/modules/indexeddb/IDBOpenDBRequest.h b/third_party/WebKit/Source/modules/indexeddb/IDBOpenDBRequest.h
index 8347cb6..637d1a28 100644
--- a/third_party/WebKit/Source/modules/indexeddb/IDBOpenDBRequest.h
+++ b/third_party/WebKit/Source/modules/indexeddb/IDBOpenDBRequest.h
@@ -29,6 +29,7 @@
 #include "modules/ModulesExport.h"
 #include "modules/indexeddb/IDBRequest.h"
 #include "public/platform/modules/indexeddb/WebIDBDatabase.h"
+#include <memory>
 
 namespace blink {
 
@@ -44,8 +45,8 @@
     using IDBRequest::onSuccess;
 
     void onBlocked(int64_t existingVersion) override;
-    void onUpgradeNeeded(int64_t oldVersion, PassOwnPtr<WebIDBDatabase>, const IDBDatabaseMetadata&, WebIDBDataLoss, String dataLossMessage) override;
-    void onSuccess(PassOwnPtr<WebIDBDatabase>, const IDBDatabaseMetadata&) override;
+    void onUpgradeNeeded(int64_t oldVersion, std::unique_ptr<WebIDBDatabase>, const IDBDatabaseMetadata&, WebIDBDataLoss, String dataLossMessage) override;
+    void onSuccess(std::unique_ptr<WebIDBDatabase>, const IDBDatabaseMetadata&) override;
     void onSuccess(int64_t oldVersion) override;
 
     // EventTarget
diff --git a/third_party/WebKit/Source/modules/indexeddb/IDBRequest.cpp b/third_party/WebKit/Source/modules/indexeddb/IDBRequest.cpp
index c4157b0..7c1d7d8 100644
--- a/third_party/WebKit/Source/modules/indexeddb/IDBRequest.cpp
+++ b/third_party/WebKit/Source/modules/indexeddb/IDBRequest.cpp
@@ -44,6 +44,7 @@
 #include "modules/indexeddb/IDBValue.h"
 #include "platform/SharedBuffer.h"
 #include "public/platform/WebBlobInfo.h"
+#include <memory>
 
 using blink::WebIDBCursor;
 
@@ -249,7 +250,7 @@
     onSuccessInternal(IDBAny::create(domStringList));
 }
 
-void IDBRequest::onSuccess(PassOwnPtr<WebIDBCursor> backend, IDBKey* key, IDBKey* primaryKey, PassRefPtr<IDBValue> value)
+void IDBRequest::onSuccess(std::unique_ptr<WebIDBCursor> backend, IDBKey* key, IDBKey* primaryKey, PassRefPtr<IDBValue> value)
 {
     IDB_TRACE("IDBRequest::onSuccess(IDBCursor)");
     if (!shouldEnqueueEvent())
diff --git a/third_party/WebKit/Source/modules/indexeddb/IDBRequest.h b/third_party/WebKit/Source/modules/indexeddb/IDBRequest.h
index 16e1875..112f0b0 100644
--- a/third_party/WebKit/Source/modules/indexeddb/IDBRequest.h
+++ b/third_party/WebKit/Source/modules/indexeddb/IDBRequest.h
@@ -46,6 +46,7 @@
 #include "public/platform/WebBlobInfo.h"
 #include "public/platform/modules/indexeddb/WebIDBCursor.h"
 #include "public/platform/modules/indexeddb/WebIDBTypes.h"
+#include <memory>
 
 namespace blink {
 
@@ -97,7 +98,7 @@
 
     virtual void onError(DOMException*);
     virtual void onSuccess(const Vector<String>&);
-    virtual void onSuccess(PassOwnPtr<WebIDBCursor>, IDBKey*, IDBKey* primaryKey, PassRefPtr<IDBValue>);
+    virtual void onSuccess(std::unique_ptr<WebIDBCursor>, IDBKey*, IDBKey* primaryKey, PassRefPtr<IDBValue>);
     virtual void onSuccess(IDBKey*);
     virtual void onSuccess(PassRefPtr<IDBValue>);
     virtual void onSuccess(const Vector<RefPtr<IDBValue>>&);
@@ -107,8 +108,8 @@
 
     // Only IDBOpenDBRequest instances should receive these:
     virtual void onBlocked(int64_t oldVersion) { ASSERT_NOT_REACHED(); }
-    virtual void onUpgradeNeeded(int64_t oldVersion, PassOwnPtr<WebIDBDatabase>, const IDBDatabaseMetadata&, WebIDBDataLoss, String dataLossMessage) { ASSERT_NOT_REACHED(); }
-    virtual void onSuccess(PassOwnPtr<WebIDBDatabase>, const IDBDatabaseMetadata&) { ASSERT_NOT_REACHED(); }
+    virtual void onUpgradeNeeded(int64_t oldVersion, std::unique_ptr<WebIDBDatabase>, const IDBDatabaseMetadata&, WebIDBDataLoss, String dataLossMessage) { ASSERT_NOT_REACHED(); }
+    virtual void onSuccess(std::unique_ptr<WebIDBDatabase>, const IDBDatabaseMetadata&) { ASSERT_NOT_REACHED(); }
 
     // ActiveScriptWrappable
     bool hasPendingActivity() const final;
diff --git a/third_party/WebKit/Source/modules/indexeddb/IDBRequestTest.cpp b/third_party/WebKit/Source/modules/indexeddb/IDBRequestTest.cpp
index f594ece9..17c17087 100644
--- a/third_party/WebKit/Source/modules/indexeddb/IDBRequestTest.cpp
+++ b/third_party/WebKit/Source/modules/indexeddb/IDBRequestTest.cpp
@@ -39,11 +39,10 @@
 #include "modules/indexeddb/MockWebIDBDatabase.h"
 #include "platform/SharedBuffer.h"
 #include "testing/gtest/include/gtest/gtest.h"
-#include "wtf/OwnPtr.h"
-#include "wtf/PassOwnPtr.h"
 #include "wtf/PassRefPtr.h"
 #include "wtf/Vector.h"
 #include "wtf/dtoa/utils.h"
+#include <memory>
 #include <v8.h>
 
 namespace blink {
@@ -97,7 +96,7 @@
     Persistent<IDBDatabaseCallbacks> callbacks = IDBDatabaseCallbacks::create();
 
     {
-        OwnPtr<MockWebIDBDatabase> backend = MockWebIDBDatabase::create();
+        std::unique_ptr<MockWebIDBDatabase> backend = MockWebIDBDatabase::create();
         EXPECT_CALL(*backend, abort(transactionId))
             .Times(1);
         EXPECT_CALL(*backend, close())
@@ -110,7 +109,7 @@
     }
 
     {
-        OwnPtr<MockWebIDBDatabase> backend = MockWebIDBDatabase::create();
+        std::unique_ptr<MockWebIDBDatabase> backend = MockWebIDBDatabase::create();
         EXPECT_CALL(*backend, close())
             .Times(1);
         IDBOpenDBRequest* request = IDBOpenDBRequest::create(scope.getScriptState(), callbacks, transactionId, version);
diff --git a/third_party/WebKit/Source/modules/indexeddb/IDBTransaction.cpp b/third_party/WebKit/Source/modules/indexeddb/IDBTransaction.cpp
index 6bb3ca61..aa6524d 100644
--- a/third_party/WebKit/Source/modules/indexeddb/IDBTransaction.cpp
+++ b/third_party/WebKit/Source/modules/indexeddb/IDBTransaction.cpp
@@ -39,6 +39,8 @@
 #include "modules/indexeddb/IDBObjectStore.h"
 #include "modules/indexeddb/IDBOpenDBRequest.h"
 #include "modules/indexeddb/IDBTracing.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 using blink::WebIDBDatabase;
 
@@ -63,9 +65,9 @@
 
 class DeactivateTransactionTask : public V8PerIsolateData::EndOfScopeTask {
 public:
-    static PassOwnPtr<DeactivateTransactionTask> create(IDBTransaction* transaction)
+    static std::unique_ptr<DeactivateTransactionTask> create(IDBTransaction* transaction)
     {
-        return adoptPtr(new DeactivateTransactionTask(transaction));
+        return wrapUnique(new DeactivateTransactionTask(transaction));
     }
 
     void run() override
diff --git a/third_party/WebKit/Source/modules/indexeddb/IDBTransactionTest.cpp b/third_party/WebKit/Source/modules/indexeddb/IDBTransactionTest.cpp
index 6fde069..ce3a478 100644
--- a/third_party/WebKit/Source/modules/indexeddb/IDBTransactionTest.cpp
+++ b/third_party/WebKit/Source/modules/indexeddb/IDBTransactionTest.cpp
@@ -39,6 +39,7 @@
 #include "modules/indexeddb/MockWebIDBDatabase.h"
 #include "platform/SharedBuffer.h"
 #include "testing/gtest/include/gtest/gtest.h"
+#include <memory>
 #include <v8.h>
 
 namespace blink {
@@ -63,7 +64,7 @@
 TEST(IDBTransactionTest, EnsureLifetime)
 {
     V8TestingScope scope;
-    OwnPtr<MockWebIDBDatabase> backend = MockWebIDBDatabase::create();
+    std::unique_ptr<MockWebIDBDatabase> backend = MockWebIDBDatabase::create();
     EXPECT_CALL(*backend, close())
         .Times(1);
     Persistent<IDBDatabase> db = IDBDatabase::create(scope.getExecutionContext(), std::move(backend), FakeIDBDatabaseCallbacks::create());
@@ -98,7 +99,7 @@
     V8TestingScope scope;
     const int64_t transactionId = 1234;
 
-    OwnPtr<MockWebIDBDatabase> backend = MockWebIDBDatabase::create();
+    std::unique_ptr<MockWebIDBDatabase> backend = MockWebIDBDatabase::create();
     EXPECT_CALL(*backend, commit(transactionId))
         .Times(1);
     EXPECT_CALL(*backend, close())
diff --git a/third_party/WebKit/Source/modules/indexeddb/IDBValue.cpp b/third_party/WebKit/Source/modules/indexeddb/IDBValue.cpp
index ca3bcd78..5e30bc95 100644
--- a/third_party/WebKit/Source/modules/indexeddb/IDBValue.cpp
+++ b/third_party/WebKit/Source/modules/indexeddb/IDBValue.cpp
@@ -7,6 +7,7 @@
 #include "platform/blob/BlobData.h"
 #include "public/platform/WebBlobInfo.h"
 #include "public/platform/modules/indexeddb/WebIDBValue.h"
+#include "wtf/PtrUtil.h"
 
 namespace blink {
 
@@ -19,8 +20,8 @@
 
 IDBValue::IDBValue(PassRefPtr<SharedBuffer> data, const WebVector<WebBlobInfo>& webBlobInfo, IDBKey* primaryKey, const IDBKeyPath& keyPath)
     : m_data(data)
-    , m_blobData(adoptPtr(new Vector<RefPtr<BlobDataHandle>>()))
-    , m_blobInfo(adoptPtr(new Vector<WebBlobInfo>(webBlobInfo.size())))
+    , m_blobData(wrapUnique(new Vector<RefPtr<BlobDataHandle>>()))
+    , m_blobInfo(wrapUnique(new Vector<WebBlobInfo>(webBlobInfo.size())))
     , m_primaryKey(primaryKey && primaryKey->isValid() ? primaryKey : nullptr)
     , m_keyPath(keyPath)
 {
@@ -32,8 +33,8 @@
 
 IDBValue::IDBValue(const IDBValue* value, IDBKey* primaryKey, const IDBKeyPath& keyPath)
     : m_data(value->m_data)
-    , m_blobData(adoptPtr(new Vector<RefPtr<BlobDataHandle>>()))
-    , m_blobInfo(adoptPtr(new Vector<WebBlobInfo>(value->m_blobInfo->size())))
+    , m_blobData(wrapUnique(new Vector<RefPtr<BlobDataHandle>>()))
+    , m_blobInfo(wrapUnique(new Vector<WebBlobInfo>(value->m_blobInfo->size())))
     , m_primaryKey(primaryKey)
     , m_keyPath(keyPath)
 {
diff --git a/third_party/WebKit/Source/modules/indexeddb/IDBValue.h b/third_party/WebKit/Source/modules/indexeddb/IDBValue.h
index 69fd9c6a..84cccd7 100644
--- a/third_party/WebKit/Source/modules/indexeddb/IDBValue.h
+++ b/third_party/WebKit/Source/modules/indexeddb/IDBValue.h
@@ -10,8 +10,8 @@
 #include "modules/indexeddb/IDBKeyPath.h"
 #include "platform/SharedBuffer.h"
 #include "public/platform/WebVector.h"
-#include "wtf/OwnPtr.h"
 #include "wtf/RefPtr.h"
+#include <memory>
 
 namespace blink {
 
@@ -39,8 +39,8 @@
     IDBValue(const IDBValue*, IDBKey*, const IDBKeyPath&);
 
     const RefPtr<SharedBuffer> m_data;
-    const OwnPtr<Vector<RefPtr<BlobDataHandle>>> m_blobData;
-    const OwnPtr<Vector<WebBlobInfo>> m_blobInfo;
+    const std::unique_ptr<Vector<RefPtr<BlobDataHandle>>> m_blobData;
+    const std::unique_ptr<Vector<WebBlobInfo>> m_blobInfo;
     const Persistent<IDBKey> m_primaryKey;
     const IDBKeyPath m_keyPath;
 };
diff --git a/third_party/WebKit/Source/modules/indexeddb/InspectorIndexedDBAgent.h b/third_party/WebKit/Source/modules/indexeddb/InspectorIndexedDBAgent.h
index ea13563..c66535c 100644
--- a/third_party/WebKit/Source/modules/indexeddb/InspectorIndexedDBAgent.h
+++ b/third_party/WebKit/Source/modules/indexeddb/InspectorIndexedDBAgent.h
@@ -34,7 +34,6 @@
 #include "core/inspector/InspectorBaseAgent.h"
 #include "core/inspector/protocol/IndexedDB.h"
 #include "modules/ModulesExport.h"
-#include "wtf/PassOwnPtr.h"
 #include "wtf/text/WTFString.h"
 
 namespace blink {
diff --git a/third_party/WebKit/Source/modules/indexeddb/MockWebIDBDatabase.cpp b/third_party/WebKit/Source/modules/indexeddb/MockWebIDBDatabase.cpp
index af6d5d7..1d27732 100644
--- a/third_party/WebKit/Source/modules/indexeddb/MockWebIDBDatabase.cpp
+++ b/third_party/WebKit/Source/modules/indexeddb/MockWebIDBDatabase.cpp
@@ -4,15 +4,18 @@
 
 #include "MockWebIDBDatabase.h"
 
+#include "wtf/PtrUtil.h"
+#include <memory>
+
 namespace blink {
 
 MockWebIDBDatabase::MockWebIDBDatabase() {}
 
 MockWebIDBDatabase::~MockWebIDBDatabase() {}
 
-PassOwnPtr<MockWebIDBDatabase> MockWebIDBDatabase::create()
+std::unique_ptr<MockWebIDBDatabase> MockWebIDBDatabase::create()
 {
-    return adoptPtr(new MockWebIDBDatabase());
+    return wrapUnique(new MockWebIDBDatabase());
 }
 
 } // namespace blink
diff --git a/third_party/WebKit/Source/modules/indexeddb/MockWebIDBDatabase.h b/third_party/WebKit/Source/modules/indexeddb/MockWebIDBDatabase.h
index 5492dac..30445548 100644
--- a/third_party/WebKit/Source/modules/indexeddb/MockWebIDBDatabase.h
+++ b/third_party/WebKit/Source/modules/indexeddb/MockWebIDBDatabase.h
@@ -9,8 +9,8 @@
 #include "modules/indexeddb/IDBKeyRange.h"
 #include "public/platform/modules/indexeddb/WebIDBDatabase.h"
 #include "public/platform/modules/indexeddb/WebIDBKeyRange.h"
-#include "wtf/PassOwnPtr.h"
 #include <gmock/gmock.h>
+#include <memory>
 
 namespace blink {
 
@@ -18,7 +18,7 @@
 public:
     virtual ~MockWebIDBDatabase();
 
-    static PassOwnPtr<MockWebIDBDatabase> create();
+    static std::unique_ptr<MockWebIDBDatabase> create();
 
     MOCK_METHOD5(createObjectStore, void(long long transactionId, long long objectStoreId, const WebString& name, const WebIDBKeyPath&, bool autoIncrement));
     MOCK_METHOD2(deleteObjectStore, void(long long transactionId, long long objectStoreId));
diff --git a/third_party/WebKit/Source/modules/indexeddb/WebIDBCallbacksImpl.cpp b/third_party/WebKit/Source/modules/indexeddb/WebIDBCallbacksImpl.cpp
index b97c3024..abecd340 100644
--- a/third_party/WebKit/Source/modules/indexeddb/WebIDBCallbacksImpl.cpp
+++ b/third_party/WebKit/Source/modules/indexeddb/WebIDBCallbacksImpl.cpp
@@ -39,6 +39,8 @@
 #include "public/platform/modules/indexeddb/WebIDBDatabaseError.h"
 #include "public/platform/modules/indexeddb/WebIDBKey.h"
 #include "public/platform/modules/indexeddb/WebIDBValue.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 using blink::WebIDBCursor;
 using blink::WebIDBDatabase;
@@ -52,9 +54,9 @@
 namespace blink {
 
 // static
-PassOwnPtr<WebIDBCallbacksImpl> WebIDBCallbacksImpl::create(IDBRequest* request)
+std::unique_ptr<WebIDBCallbacksImpl> WebIDBCallbacksImpl::create(IDBRequest* request)
 {
-    return adoptPtr(new WebIDBCallbacksImpl(request));
+    return wrapUnique(new WebIDBCallbacksImpl(request));
 }
 
 WebIDBCallbacksImpl::WebIDBCallbacksImpl(IDBRequest* request)
@@ -86,13 +88,13 @@
 void WebIDBCallbacksImpl::onSuccess(WebIDBCursor* cursor, const WebIDBKey& key, const WebIDBKey& primaryKey, const WebIDBValue& value)
 {
     InspectorInstrumentation::AsyncTask asyncTask(m_request->getExecutionContext(), this);
-    m_request->onSuccess(adoptPtr(cursor), key, primaryKey, IDBValue::create(value));
+    m_request->onSuccess(wrapUnique(cursor), key, primaryKey, IDBValue::create(value));
 }
 
 void WebIDBCallbacksImpl::onSuccess(WebIDBDatabase* backend, const WebIDBMetadata& metadata)
 {
     InspectorInstrumentation::AsyncTask asyncTask(m_request->getExecutionContext(), this);
-    m_request->onSuccess(adoptPtr(backend), IDBDatabaseMetadata(metadata));
+    m_request->onSuccess(wrapUnique(backend), IDBDatabaseMetadata(metadata));
 }
 
 void WebIDBCallbacksImpl::onSuccess(const WebIDBKey& key)
@@ -143,7 +145,7 @@
 void WebIDBCallbacksImpl::onUpgradeNeeded(long long oldVersion, WebIDBDatabase* database, const WebIDBMetadata& metadata, unsigned short dataLoss, WebString dataLossMessage)
 {
     InspectorInstrumentation::AsyncTask asyncTask(m_request->getExecutionContext(), this);
-    m_request->onUpgradeNeeded(oldVersion, adoptPtr(database), IDBDatabaseMetadata(metadata), static_cast<WebIDBDataLoss>(dataLoss), dataLossMessage);
+    m_request->onUpgradeNeeded(oldVersion, wrapUnique(database), IDBDatabaseMetadata(metadata), static_cast<WebIDBDataLoss>(dataLoss), dataLossMessage);
 }
 
 } // namespace blink
diff --git a/third_party/WebKit/Source/modules/indexeddb/WebIDBCallbacksImpl.h b/third_party/WebKit/Source/modules/indexeddb/WebIDBCallbacksImpl.h
index 4f8d0c23..6443648 100644
--- a/third_party/WebKit/Source/modules/indexeddb/WebIDBCallbacksImpl.h
+++ b/third_party/WebKit/Source/modules/indexeddb/WebIDBCallbacksImpl.h
@@ -30,9 +30,9 @@
 #define WebIDBCallbacksImpl_h
 
 #include "public/platform/modules/indexeddb/WebIDBCallbacks.h"
-#include "wtf/PassOwnPtr.h"
 #include "wtf/PassRefPtr.h"
 #include "wtf/RefPtr.h"
+#include <memory>
 
 namespace blink {
 
@@ -47,7 +47,7 @@
 class WebIDBCallbacksImpl final : public WebIDBCallbacks {
     USING_FAST_MALLOC(WebIDBCallbacksImpl);
 public:
-    static PassOwnPtr<WebIDBCallbacksImpl> create(IDBRequest*);
+    static std::unique_ptr<WebIDBCallbacksImpl> create(IDBRequest*);
 
     ~WebIDBCallbacksImpl() override;
 
diff --git a/third_party/WebKit/Source/modules/indexeddb/WebIDBDatabaseCallbacksImpl.cpp b/third_party/WebKit/Source/modules/indexeddb/WebIDBDatabaseCallbacksImpl.cpp
index 89bcc52..d134a77f 100644
--- a/third_party/WebKit/Source/modules/indexeddb/WebIDBDatabaseCallbacksImpl.cpp
+++ b/third_party/WebKit/Source/modules/indexeddb/WebIDBDatabaseCallbacksImpl.cpp
@@ -26,13 +26,15 @@
 #include "modules/indexeddb/WebIDBDatabaseCallbacksImpl.h"
 
 #include "core/dom/DOMException.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
 // static
-PassOwnPtr<WebIDBDatabaseCallbacksImpl> WebIDBDatabaseCallbacksImpl::create(IDBDatabaseCallbacks* callbacks)
+std::unique_ptr<WebIDBDatabaseCallbacksImpl> WebIDBDatabaseCallbacksImpl::create(IDBDatabaseCallbacks* callbacks)
 {
-    return adoptPtr(new WebIDBDatabaseCallbacksImpl(callbacks));
+    return wrapUnique(new WebIDBDatabaseCallbacksImpl(callbacks));
 }
 
 WebIDBDatabaseCallbacksImpl::WebIDBDatabaseCallbacksImpl(IDBDatabaseCallbacks* callbacks)
diff --git a/third_party/WebKit/Source/modules/indexeddb/WebIDBDatabaseCallbacksImpl.h b/third_party/WebKit/Source/modules/indexeddb/WebIDBDatabaseCallbacksImpl.h
index 25fd433..0f2067945 100644
--- a/third_party/WebKit/Source/modules/indexeddb/WebIDBDatabaseCallbacksImpl.h
+++ b/third_party/WebKit/Source/modules/indexeddb/WebIDBDatabaseCallbacksImpl.h
@@ -30,16 +30,16 @@
 #include "public/platform/WebString.h"
 #include "public/platform/modules/indexeddb/WebIDBDatabaseCallbacks.h"
 #include "public/platform/modules/indexeddb/WebIDBDatabaseError.h"
-#include "wtf/PassOwnPtr.h"
 #include "wtf/PassRefPtr.h"
 #include "wtf/RefPtr.h"
+#include <memory>
 
 namespace blink {
 
 class WebIDBDatabaseCallbacksImpl final : public WebIDBDatabaseCallbacks {
     USING_FAST_MALLOC(WebIDBDatabaseCallbacksImpl);
 public:
-    static PassOwnPtr<WebIDBDatabaseCallbacksImpl> create(IDBDatabaseCallbacks*);
+    static std::unique_ptr<WebIDBDatabaseCallbacksImpl> create(IDBDatabaseCallbacks*);
 
     ~WebIDBDatabaseCallbacksImpl() override;
 
diff --git a/third_party/WebKit/Source/modules/mediacapturefromelement/AutoCanvasDrawListener.cpp b/third_party/WebKit/Source/modules/mediacapturefromelement/AutoCanvasDrawListener.cpp
index d5aca1b..1109202 100644
--- a/third_party/WebKit/Source/modules/mediacapturefromelement/AutoCanvasDrawListener.cpp
+++ b/third_party/WebKit/Source/modules/mediacapturefromelement/AutoCanvasDrawListener.cpp
@@ -4,15 +4,17 @@
 
 #include "modules/mediacapturefromelement/AutoCanvasDrawListener.h"
 
+#include <memory>
+
 namespace blink {
 
-AutoCanvasDrawListener::AutoCanvasDrawListener(PassOwnPtr<WebCanvasCaptureHandler> handler)
+AutoCanvasDrawListener::AutoCanvasDrawListener(std::unique_ptr<WebCanvasCaptureHandler> handler)
     : CanvasDrawListener(std::move(handler))
 {
 }
 
 // static
-AutoCanvasDrawListener* AutoCanvasDrawListener::create(PassOwnPtr<WebCanvasCaptureHandler> handler)
+AutoCanvasDrawListener* AutoCanvasDrawListener::create(std::unique_ptr<WebCanvasCaptureHandler> handler)
 {
     return new AutoCanvasDrawListener(std::move(handler));
 }
diff --git a/third_party/WebKit/Source/modules/mediacapturefromelement/AutoCanvasDrawListener.h b/third_party/WebKit/Source/modules/mediacapturefromelement/AutoCanvasDrawListener.h
index 4a3fdf31d..2d58d4dd 100644
--- a/third_party/WebKit/Source/modules/mediacapturefromelement/AutoCanvasDrawListener.h
+++ b/third_party/WebKit/Source/modules/mediacapturefromelement/AutoCanvasDrawListener.h
@@ -8,18 +8,19 @@
 #include "core/html/canvas/CanvasDrawListener.h"
 #include "platform/heap/Handle.h"
 #include "public/platform/WebCanvasCaptureHandler.h"
+#include <memory>
 
 namespace blink {
 
 class AutoCanvasDrawListener final : public GarbageCollectedFinalized<AutoCanvasDrawListener>, public CanvasDrawListener {
     USING_GARBAGE_COLLECTED_MIXIN(AutoCanvasDrawListener);
 public:
-    static AutoCanvasDrawListener* create(PassOwnPtr<WebCanvasCaptureHandler>);
+    static AutoCanvasDrawListener* create(std::unique_ptr<WebCanvasCaptureHandler>);
     ~AutoCanvasDrawListener() {}
 
     DEFINE_INLINE_TRACE() {}
 private:
-    AutoCanvasDrawListener(PassOwnPtr<WebCanvasCaptureHandler>);
+    AutoCanvasDrawListener(std::unique_ptr<WebCanvasCaptureHandler>);
 };
 
 } // namespace blink
diff --git a/third_party/WebKit/Source/modules/mediacapturefromelement/CanvasCaptureMediaStreamTrack.cpp b/third_party/WebKit/Source/modules/mediacapturefromelement/CanvasCaptureMediaStreamTrack.cpp
index 023e959..7fd5002 100644
--- a/third_party/WebKit/Source/modules/mediacapturefromelement/CanvasCaptureMediaStreamTrack.cpp
+++ b/third_party/WebKit/Source/modules/mediacapturefromelement/CanvasCaptureMediaStreamTrack.cpp
@@ -9,15 +9,16 @@
 #include "modules/mediacapturefromelement/OnRequestCanvasDrawListener.h"
 #include "modules/mediacapturefromelement/TimedCanvasDrawListener.h"
 #include "platform/mediastream/MediaStreamCenter.h"
+#include <memory>
 
 namespace blink {
 
-CanvasCaptureMediaStreamTrack* CanvasCaptureMediaStreamTrack::create(MediaStreamComponent* component, HTMLCanvasElement* element, PassOwnPtr<WebCanvasCaptureHandler> handler)
+CanvasCaptureMediaStreamTrack* CanvasCaptureMediaStreamTrack::create(MediaStreamComponent* component, HTMLCanvasElement* element, std::unique_ptr<WebCanvasCaptureHandler> handler)
 {
     return new CanvasCaptureMediaStreamTrack(component, element, std::move(handler));
 }
 
-CanvasCaptureMediaStreamTrack* CanvasCaptureMediaStreamTrack::create(MediaStreamComponent* component, HTMLCanvasElement* element, PassOwnPtr<WebCanvasCaptureHandler> handler, double frameRate)
+CanvasCaptureMediaStreamTrack* CanvasCaptureMediaStreamTrack::create(MediaStreamComponent* component, HTMLCanvasElement* element, std::unique_ptr<WebCanvasCaptureHandler> handler, double frameRate)
 {
     return new CanvasCaptureMediaStreamTrack(component, element, std::move(handler), frameRate);
 }
@@ -56,7 +57,7 @@
     m_canvasElement->addListener(m_drawListener.get());
 }
 
-CanvasCaptureMediaStreamTrack::CanvasCaptureMediaStreamTrack(MediaStreamComponent* component, HTMLCanvasElement* element, PassOwnPtr<WebCanvasCaptureHandler> handler)
+CanvasCaptureMediaStreamTrack::CanvasCaptureMediaStreamTrack(MediaStreamComponent* component, HTMLCanvasElement* element, std::unique_ptr<WebCanvasCaptureHandler> handler)
     : MediaStreamTrack(element->getExecutionContext(), component)
     , m_canvasElement(element)
 {
@@ -65,7 +66,7 @@
     m_canvasElement->addListener(m_drawListener.get());
 }
 
-CanvasCaptureMediaStreamTrack::CanvasCaptureMediaStreamTrack(MediaStreamComponent* component, HTMLCanvasElement* element, PassOwnPtr<WebCanvasCaptureHandler> handler, double frameRate)
+CanvasCaptureMediaStreamTrack::CanvasCaptureMediaStreamTrack(MediaStreamComponent* component, HTMLCanvasElement* element, std::unique_ptr<WebCanvasCaptureHandler> handler, double frameRate)
     : MediaStreamTrack(element->getExecutionContext(), component)
     , m_canvasElement(element)
 {
diff --git a/third_party/WebKit/Source/modules/mediacapturefromelement/CanvasCaptureMediaStreamTrack.h b/third_party/WebKit/Source/modules/mediacapturefromelement/CanvasCaptureMediaStreamTrack.h
index a906bf1..6aae39b 100644
--- a/third_party/WebKit/Source/modules/mediacapturefromelement/CanvasCaptureMediaStreamTrack.h
+++ b/third_party/WebKit/Source/modules/mediacapturefromelement/CanvasCaptureMediaStreamTrack.h
@@ -8,6 +8,7 @@
 #include "core/html/canvas/CanvasDrawListener.h"
 #include "modules/mediastream/MediaStreamTrack.h"
 #include "platform/heap/Handle.h"
+#include <memory>
 
 namespace blink {
 
@@ -17,8 +18,8 @@
 class CanvasCaptureMediaStreamTrack final : public MediaStreamTrack {
     DEFINE_WRAPPERTYPEINFO();
 public:
-    static CanvasCaptureMediaStreamTrack* create(MediaStreamComponent*, HTMLCanvasElement*, PassOwnPtr<WebCanvasCaptureHandler>);
-    static CanvasCaptureMediaStreamTrack* create(MediaStreamComponent*, HTMLCanvasElement*, PassOwnPtr<WebCanvasCaptureHandler>, double frameRate);
+    static CanvasCaptureMediaStreamTrack* create(MediaStreamComponent*, HTMLCanvasElement*, std::unique_ptr<WebCanvasCaptureHandler>);
+    static CanvasCaptureMediaStreamTrack* create(MediaStreamComponent*, HTMLCanvasElement*, std::unique_ptr<WebCanvasCaptureHandler>, double frameRate);
 
     HTMLCanvasElement* canvas() const;
     void requestFrame();
@@ -29,8 +30,8 @@
 
 private:
     CanvasCaptureMediaStreamTrack(const CanvasCaptureMediaStreamTrack&, MediaStreamComponent*);
-    CanvasCaptureMediaStreamTrack(MediaStreamComponent*, HTMLCanvasElement*, PassOwnPtr<WebCanvasCaptureHandler>);
-    CanvasCaptureMediaStreamTrack(MediaStreamComponent*, HTMLCanvasElement*, PassOwnPtr<WebCanvasCaptureHandler>, double frameRate);
+    CanvasCaptureMediaStreamTrack(MediaStreamComponent*, HTMLCanvasElement*, std::unique_ptr<WebCanvasCaptureHandler>);
+    CanvasCaptureMediaStreamTrack(MediaStreamComponent*, HTMLCanvasElement*, std::unique_ptr<WebCanvasCaptureHandler>, double frameRate);
 
     Member<HTMLCanvasElement> m_canvasElement;
     Member<CanvasDrawListener> m_drawListener;
diff --git a/third_party/WebKit/Source/modules/mediacapturefromelement/HTMLCanvasElementCapture.cpp b/third_party/WebKit/Source/modules/mediacapturefromelement/HTMLCanvasElementCapture.cpp
index cdf1317e..cb88f4c 100644
--- a/third_party/WebKit/Source/modules/mediacapturefromelement/HTMLCanvasElementCapture.cpp
+++ b/third_party/WebKit/Source/modules/mediacapturefromelement/HTMLCanvasElementCapture.cpp
@@ -12,6 +12,8 @@
 #include "public/platform/WebCanvasCaptureHandler.h"
 #include "public/platform/WebMediaStream.h"
 #include "public/platform/WebMediaStreamTrack.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace {
 const double kDefaultFrameRate = 60.0;
@@ -43,11 +45,11 @@
 
     WebMediaStreamTrack track;
     const WebSize size(element.width(), element.height());
-    OwnPtr<WebCanvasCaptureHandler> handler;
+    std::unique_ptr<WebCanvasCaptureHandler> handler;
     if (givenFrameRate)
-        handler = adoptPtr(Platform::current()->createCanvasCaptureHandler(size, frameRate, &track));
+        handler = wrapUnique(Platform::current()->createCanvasCaptureHandler(size, frameRate, &track));
     else
-        handler = adoptPtr(Platform::current()->createCanvasCaptureHandler(size, kDefaultFrameRate, &track));
+        handler = wrapUnique(Platform::current()->createCanvasCaptureHandler(size, kDefaultFrameRate, &track));
 
     if (!handler) {
         exceptionState.throwDOMException(NotSupportedError, "No CanvasCapture handler can be created.");
diff --git a/third_party/WebKit/Source/modules/mediacapturefromelement/OnRequestCanvasDrawListener.cpp b/third_party/WebKit/Source/modules/mediacapturefromelement/OnRequestCanvasDrawListener.cpp
index 87cee32..2cad4d3 100644
--- a/third_party/WebKit/Source/modules/mediacapturefromelement/OnRequestCanvasDrawListener.cpp
+++ b/third_party/WebKit/Source/modules/mediacapturefromelement/OnRequestCanvasDrawListener.cpp
@@ -4,9 +4,11 @@
 
 #include "modules/mediacapturefromelement/OnRequestCanvasDrawListener.h"
 
+#include <memory>
+
 namespace blink {
 
-OnRequestCanvasDrawListener::OnRequestCanvasDrawListener(PassOwnPtr<WebCanvasCaptureHandler> handler)
+OnRequestCanvasDrawListener::OnRequestCanvasDrawListener(std::unique_ptr<WebCanvasCaptureHandler> handler)
     : CanvasDrawListener(std::move(handler))
 {
 }
@@ -14,7 +16,7 @@
 OnRequestCanvasDrawListener::~OnRequestCanvasDrawListener() {}
 
 // static
-OnRequestCanvasDrawListener* OnRequestCanvasDrawListener::create(PassOwnPtr<WebCanvasCaptureHandler> handler)
+OnRequestCanvasDrawListener* OnRequestCanvasDrawListener::create(std::unique_ptr<WebCanvasCaptureHandler> handler)
 {
     return new OnRequestCanvasDrawListener(std::move(handler));
 }
diff --git a/third_party/WebKit/Source/modules/mediacapturefromelement/OnRequestCanvasDrawListener.h b/third_party/WebKit/Source/modules/mediacapturefromelement/OnRequestCanvasDrawListener.h
index 5992b90..d84e024 100644
--- a/third_party/WebKit/Source/modules/mediacapturefromelement/OnRequestCanvasDrawListener.h
+++ b/third_party/WebKit/Source/modules/mediacapturefromelement/OnRequestCanvasDrawListener.h
@@ -8,6 +8,7 @@
 #include "core/html/canvas/CanvasDrawListener.h"
 #include "platform/heap/Handle.h"
 #include "public/platform/WebCanvasCaptureHandler.h"
+#include <memory>
 
 namespace blink {
 
@@ -15,12 +16,12 @@
     USING_GARBAGE_COLLECTED_MIXIN(OnRequestCanvasDrawListener);
 public:
     ~OnRequestCanvasDrawListener();
-    static OnRequestCanvasDrawListener* create(PassOwnPtr<WebCanvasCaptureHandler>);
+    static OnRequestCanvasDrawListener* create(std::unique_ptr<WebCanvasCaptureHandler>);
     void sendNewFrame(const WTF::PassRefPtr<SkImage>&) override;
 
     DEFINE_INLINE_TRACE() {}
 private:
-    OnRequestCanvasDrawListener(PassOwnPtr<WebCanvasCaptureHandler>);
+    OnRequestCanvasDrawListener(std::unique_ptr<WebCanvasCaptureHandler>);
 };
 
 } // namespace blink
diff --git a/third_party/WebKit/Source/modules/mediacapturefromelement/TimedCanvasDrawListener.cpp b/third_party/WebKit/Source/modules/mediacapturefromelement/TimedCanvasDrawListener.cpp
index 60a8586..7615cc5 100644
--- a/third_party/WebKit/Source/modules/mediacapturefromelement/TimedCanvasDrawListener.cpp
+++ b/third_party/WebKit/Source/modules/mediacapturefromelement/TimedCanvasDrawListener.cpp
@@ -4,9 +4,11 @@
 
 #include "modules/mediacapturefromelement/TimedCanvasDrawListener.h"
 
+#include <memory>
+
 namespace blink {
 
-TimedCanvasDrawListener::TimedCanvasDrawListener(PassOwnPtr<WebCanvasCaptureHandler> handler, double frameRate)
+TimedCanvasDrawListener::TimedCanvasDrawListener(std::unique_ptr<WebCanvasCaptureHandler> handler, double frameRate)
     : CanvasDrawListener(std::move(handler))
     , m_frameInterval(1 / frameRate)
     , m_requestFrameTimer(this, &TimedCanvasDrawListener::requestFrameTimerFired)
@@ -16,7 +18,7 @@
 TimedCanvasDrawListener::~TimedCanvasDrawListener() {}
 
 // static
-TimedCanvasDrawListener* TimedCanvasDrawListener::create(PassOwnPtr<WebCanvasCaptureHandler> handler, double frameRate)
+TimedCanvasDrawListener* TimedCanvasDrawListener::create(std::unique_ptr<WebCanvasCaptureHandler> handler, double frameRate)
 {
     TimedCanvasDrawListener* listener = new TimedCanvasDrawListener(std::move(handler), frameRate);
     listener->m_requestFrameTimer.startRepeating(listener->m_frameInterval, BLINK_FROM_HERE);
diff --git a/third_party/WebKit/Source/modules/mediacapturefromelement/TimedCanvasDrawListener.h b/third_party/WebKit/Source/modules/mediacapturefromelement/TimedCanvasDrawListener.h
index 1786473..039fc16 100644
--- a/third_party/WebKit/Source/modules/mediacapturefromelement/TimedCanvasDrawListener.h
+++ b/third_party/WebKit/Source/modules/mediacapturefromelement/TimedCanvasDrawListener.h
@@ -9,6 +9,7 @@
 #include "platform/Timer.h"
 #include "platform/heap/Handle.h"
 #include "public/platform/WebCanvasCaptureHandler.h"
+#include <memory>
 
 namespace blink {
 
@@ -16,12 +17,12 @@
     USING_GARBAGE_COLLECTED_MIXIN(TimedCanvasDrawListener);
 public:
     ~TimedCanvasDrawListener();
-    static TimedCanvasDrawListener* create(PassOwnPtr<WebCanvasCaptureHandler>, double frameRate);
+    static TimedCanvasDrawListener* create(std::unique_ptr<WebCanvasCaptureHandler>, double frameRate);
     void sendNewFrame(const WTF::PassRefPtr<SkImage>&) override;
 
     DEFINE_INLINE_TRACE() {}
 private:
-    TimedCanvasDrawListener(PassOwnPtr<WebCanvasCaptureHandler>, double frameRate);
+    TimedCanvasDrawListener(std::unique_ptr<WebCanvasCaptureHandler>, double frameRate);
     // Implementation of TimerFiredFunction.
     void requestFrameTimerFired(Timer<TimedCanvasDrawListener>*);
 
diff --git a/third_party/WebKit/Source/modules/mediarecorder/MediaRecorder.cpp b/third_party/WebKit/Source/modules/mediarecorder/MediaRecorder.cpp
index c7dd954..4d415e0 100644
--- a/third_party/WebKit/Source/modules/mediarecorder/MediaRecorder.cpp
+++ b/third_party/WebKit/Source/modules/mediarecorder/MediaRecorder.cpp
@@ -14,6 +14,7 @@
 #include "platform/blob/BlobData.h"
 #include "public/platform/Platform.h"
 #include "public/platform/WebMediaStream.h"
+#include "wtf/PtrUtil.h"
 #include <algorithm>
 
 namespace blink {
@@ -145,7 +146,7 @@
 {
     DCHECK(m_stream->getTracks().size());
 
-    m_recorderHandler = adoptPtr(Platform::current()->createMediaRecorderHandler());
+    m_recorderHandler = wrapUnique(Platform::current()->createMediaRecorderHandler());
     DCHECK(m_recorderHandler);
 
     if (!m_recorderHandler) {
diff --git a/third_party/WebKit/Source/modules/mediarecorder/MediaRecorder.h b/third_party/WebKit/Source/modules/mediarecorder/MediaRecorder.h
index 52de037c..a0972e0 100644
--- a/third_party/WebKit/Source/modules/mediarecorder/MediaRecorder.h
+++ b/third_party/WebKit/Source/modules/mediarecorder/MediaRecorder.h
@@ -15,6 +15,7 @@
 #include "platform/AsyncMethodRunner.h"
 #include "public/platform/WebMediaRecorderHandler.h"
 #include "public/platform/WebMediaRecorderHandlerClient.h"
+#include <memory>
 
 namespace blink {
 
@@ -102,9 +103,9 @@
 
     State m_state;
 
-    OwnPtr<BlobData> m_blobData;
+    std::unique_ptr<BlobData> m_blobData;
 
-    OwnPtr<WebMediaRecorderHandler> m_recorderHandler;
+    std::unique_ptr<WebMediaRecorderHandler> m_recorderHandler;
 
     Member<AsyncMethodRunner<MediaRecorder>> m_dispatchScheduledEventRunner;
     HeapVector<Member<Event>> m_scheduledEvents;
diff --git a/third_party/WebKit/Source/modules/mediasession/MediaSession.cpp b/third_party/WebKit/Source/modules/mediasession/MediaSession.cpp
index d5062dd8..5f47c82 100644
--- a/third_party/WebKit/Source/modules/mediasession/MediaSession.cpp
+++ b/third_party/WebKit/Source/modules/mediasession/MediaSession.cpp
@@ -14,10 +14,11 @@
 #include "core/loader/FrameLoaderClient.h"
 #include "modules/mediasession/MediaMetadata.h"
 #include "modules/mediasession/MediaSessionError.h"
+#include <memory>
 
 namespace blink {
 
-MediaSession::MediaSession(PassOwnPtr<WebMediaSession> webMediaSession)
+MediaSession::MediaSession(std::unique_ptr<WebMediaSession> webMediaSession)
     : m_webMediaSession(std::move(webMediaSession))
 {
     DCHECK(m_webMediaSession);
@@ -28,7 +29,7 @@
     Document* document = toDocument(context);
     LocalFrame* frame = document->frame();
     FrameLoaderClient* client = frame->loader().client();
-    OwnPtr<WebMediaSession> webMediaSession = client->createWebMediaSession();
+    std::unique_ptr<WebMediaSession> webMediaSession = client->createWebMediaSession();
     if (!webMediaSession) {
         exceptionState.throwDOMException(NotSupportedError, "Missing platform implementation.");
         return nullptr;
diff --git a/third_party/WebKit/Source/modules/mediasession/MediaSession.h b/third_party/WebKit/Source/modules/mediasession/MediaSession.h
index 8501a3bd4..07c250043 100644
--- a/third_party/WebKit/Source/modules/mediasession/MediaSession.h
+++ b/third_party/WebKit/Source/modules/mediasession/MediaSession.h
@@ -10,7 +10,7 @@
 #include "modules/ModulesExport.h"
 #include "platform/heap/Handle.h"
 #include "public/platform/modules/mediasession/WebMediaSession.h"
-#include "wtf/OwnPtr.h"
+#include <memory>
 
 namespace blink {
 
@@ -37,9 +37,9 @@
 private:
     friend class MediaSessionTest;
 
-    explicit MediaSession(PassOwnPtr<WebMediaSession>);
+    explicit MediaSession(std::unique_ptr<WebMediaSession>);
 
-    OwnPtr<WebMediaSession> m_webMediaSession;
+    std::unique_ptr<WebMediaSession> m_webMediaSession;
     Member<MediaMetadata> m_metadata;
 };
 
diff --git a/third_party/WebKit/Source/modules/mediasession/MediaSessionTest.cpp b/third_party/WebKit/Source/modules/mediasession/MediaSessionTest.cpp
index 654d9b6..165d225e 100644
--- a/third_party/WebKit/Source/modules/mediasession/MediaSessionTest.cpp
+++ b/third_party/WebKit/Source/modules/mediasession/MediaSessionTest.cpp
@@ -11,6 +11,8 @@
 #include "public/platform/modules/mediasession/WebMediaSession.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 using ::testing::_;
 using ::testing::Invoke;
@@ -27,13 +29,13 @@
     {
         // The MediaSession takes ownership of the WebMediaSession, and the
         // caller must take care to not end up with a stale pointer.
-        return new MediaSession(adoptPtr(webMediaSession));
+        return new MediaSession(wrapUnique(webMediaSession));
     }
 
     Document& document() { return m_page->document(); }
     ScriptState* mainScriptState() { return ScriptState::forMainWorld(document().frame()); }
 private:
-    OwnPtr<DummyPageHolder> m_page;
+    std::unique_ptr<DummyPageHolder> m_page;
 };
 
 namespace {
diff --git a/third_party/WebKit/Source/modules/mediasource/MediaSource.cpp b/third_party/WebKit/Source/modules/mediasource/MediaSource.cpp
index 2ab2e78..6ff989d 100644
--- a/third_party/WebKit/Source/modules/mediasource/MediaSource.cpp
+++ b/third_party/WebKit/Source/modules/mediasource/MediaSource.cpp
@@ -46,7 +46,9 @@
 #include "platform/TraceEvent.h"
 #include "public/platform/WebMediaSource.h"
 #include "public/platform/WebSourceBuffer.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/text/CString.h"
+#include <memory>
 
 using blink::WebMediaSource;
 using blink::WebSourceBuffer;
@@ -148,7 +150,7 @@
     // 5. Create a new SourceBuffer object and associated resources.
     ContentType contentType(type);
     String codecs = contentType.parameter("codecs");
-    OwnPtr<WebSourceBuffer> webSourceBuffer = createWebSourceBuffer(contentType.type(), codecs, exceptionState);
+    std::unique_ptr<WebSourceBuffer> webSourceBuffer = createWebSourceBuffer(contentType.type(), codecs, exceptionState);
 
     if (!webSourceBuffer) {
         DCHECK(exceptionState.code() == NotSupportedError || exceptionState.code() == QuotaExceededError);
@@ -285,7 +287,7 @@
     ActiveDOMObject::trace(visitor);
 }
 
-void MediaSource::setWebMediaSourceAndOpen(PassOwnPtr<WebMediaSource> webMediaSource)
+void MediaSource::setWebMediaSourceAndOpen(std::unique_ptr<WebMediaSource> webMediaSource)
 {
     TRACE_EVENT_ASYNC_END0("media", "MediaSource::attachToElement", this);
     DCHECK(webMediaSource);
@@ -577,13 +579,13 @@
     m_webMediaSource.reset();
 }
 
-PassOwnPtr<WebSourceBuffer> MediaSource::createWebSourceBuffer(const String& type, const String& codecs, ExceptionState& exceptionState)
+std::unique_ptr<WebSourceBuffer> MediaSource::createWebSourceBuffer(const String& type, const String& codecs, ExceptionState& exceptionState)
 {
     WebSourceBuffer* webSourceBuffer = 0;
 
     switch (m_webMediaSource->addSourceBuffer(type, codecs, &webSourceBuffer)) {
     case WebMediaSource::AddStatusOk:
-        return adoptPtr(webSourceBuffer);
+        return wrapUnique(webSourceBuffer);
     case WebMediaSource::AddStatusNotSupported:
         DCHECK(!webSourceBuffer);
         // 2.2 https://dvcs.w3.org/hg/html-media/raw-file/default/media-source/media-source.html#widl-MediaSource-addSourceBuffer-SourceBuffer-DOMString-type
diff --git a/third_party/WebKit/Source/modules/mediasource/MediaSource.h b/third_party/WebKit/Source/modules/mediasource/MediaSource.h
index 6c0a4d6..d022f7d 100644
--- a/third_party/WebKit/Source/modules/mediasource/MediaSource.h
+++ b/third_party/WebKit/Source/modules/mediasource/MediaSource.h
@@ -39,8 +39,8 @@
 #include "modules/mediasource/SourceBuffer.h"
 #include "modules/mediasource/SourceBufferList.h"
 #include "public/platform/WebMediaSource.h"
-#include "wtf/PassOwnPtr.h"
 #include "wtf/Vector.h"
+#include <memory>
 
 namespace blink {
 
@@ -78,7 +78,7 @@
 
     // HTMLMediaSource
     bool attachToElement(HTMLMediaElement*) override;
-    void setWebMediaSourceAndOpen(PassOwnPtr<WebMediaSource>) override;
+    void setWebMediaSourceAndOpen(std::unique_ptr<WebMediaSource>) override;
     void close() override;
     bool isClosed() const override;
     double duration() const override;
@@ -118,7 +118,7 @@
 
     bool isUpdating() const;
 
-    PassOwnPtr<WebSourceBuffer> createWebSourceBuffer(const String& type, const String& codecs, ExceptionState&);
+    std::unique_ptr<WebSourceBuffer> createWebSourceBuffer(const String& type, const String& codecs, ExceptionState&);
     void scheduleEvent(const AtomicString& eventName);
     void endOfStreamInternal(const WebMediaSource::EndOfStreamStatus, ExceptionState&);
 
@@ -126,7 +126,7 @@
     // https://dvcs.w3.org/hg/html-media/raw-file/default/media-source/media-source.html#duration-change-algorithm
     void durationChangeAlgorithm(double newDuration);
 
-    OwnPtr<WebMediaSource> m_webMediaSource;
+    std::unique_ptr<WebMediaSource> m_webMediaSource;
     AtomicString m_readyState;
     Member<GenericEventQueue> m_asyncEventQueue;
     WeakMember<HTMLMediaElement> m_attachedElement;
diff --git a/third_party/WebKit/Source/modules/mediasource/SourceBuffer.cpp b/third_party/WebKit/Source/modules/mediasource/SourceBuffer.cpp
index 2405720e..67c78a8a 100644
--- a/third_party/WebKit/Source/modules/mediasource/SourceBuffer.cpp
+++ b/third_party/WebKit/Source/modules/mediasource/SourceBuffer.cpp
@@ -53,8 +53,8 @@
 #include "platform/TraceEvent.h"
 #include "public/platform/WebSourceBuffer.h"
 #include "wtf/MathExtras.h"
-
 #include <limits>
+#include <memory>
 #include <sstream>
 
 using blink::WebSourceBuffer;
@@ -96,14 +96,14 @@
 
 } // namespace
 
-SourceBuffer* SourceBuffer::create(PassOwnPtr<WebSourceBuffer> webSourceBuffer, MediaSource* source, GenericEventQueue* asyncEventQueue)
+SourceBuffer* SourceBuffer::create(std::unique_ptr<WebSourceBuffer> webSourceBuffer, MediaSource* source, GenericEventQueue* asyncEventQueue)
 {
     SourceBuffer* sourceBuffer = new SourceBuffer(std::move(webSourceBuffer), source, asyncEventQueue);
     sourceBuffer->suspendIfNeeded();
     return sourceBuffer;
 }
 
-SourceBuffer::SourceBuffer(PassOwnPtr<WebSourceBuffer> webSourceBuffer, MediaSource* source, GenericEventQueue* asyncEventQueue)
+SourceBuffer::SourceBuffer(std::unique_ptr<WebSourceBuffer> webSourceBuffer, MediaSource* source, GenericEventQueue* asyncEventQueue)
     : ActiveScriptWrappable(this)
     , ActiveDOMObject(source->getExecutionContext())
     , m_webSourceBuffer(std::move(webSourceBuffer))
diff --git a/third_party/WebKit/Source/modules/mediasource/SourceBuffer.h b/third_party/WebKit/Source/modules/mediasource/SourceBuffer.h
index 5add19d..2d38752 100644
--- a/third_party/WebKit/Source/modules/mediasource/SourceBuffer.h
+++ b/third_party/WebKit/Source/modules/mediasource/SourceBuffer.h
@@ -40,6 +40,7 @@
 #include "platform/weborigin/KURL.h"
 #include "public/platform/WebSourceBufferClient.h"
 #include "wtf/text/WTFString.h"
+#include <memory>
 
 namespace blink {
 
@@ -65,7 +66,7 @@
     DEFINE_WRAPPERTYPEINFO();
     USING_PRE_FINALIZER(SourceBuffer, dispose);
 public:
-    static SourceBuffer* create(PassOwnPtr<WebSourceBuffer>, MediaSource*, GenericEventQueue*);
+    static SourceBuffer* create(std::unique_ptr<WebSourceBuffer>, MediaSource*, GenericEventQueue*);
     static const AtomicString& segmentsKeyword();
     static const AtomicString& sequenceKeyword();
 
@@ -115,7 +116,7 @@
     DECLARE_VIRTUAL_TRACE();
 
 private:
-    SourceBuffer(PassOwnPtr<WebSourceBuffer>, MediaSource*, GenericEventQueue*);
+    SourceBuffer(std::unique_ptr<WebSourceBuffer>, MediaSource*, GenericEventQueue*);
     void dispose();
 
     bool isRemoved() const;
@@ -142,7 +143,7 @@
     void didFinishLoading() override;
     void didFail(FileError::ErrorCode) override;
 
-    OwnPtr<WebSourceBuffer> m_webSourceBuffer;
+    std::unique_ptr<WebSourceBuffer> m_webSourceBuffer;
     Member<MediaSource> m_source;
     Member<TrackDefaultList> m_trackDefaults;
     Member<GenericEventQueue> m_asyncEventQueue;
@@ -168,7 +169,7 @@
     unsigned long long m_streamMaxSize;
     Member<AsyncMethodRunner<SourceBuffer>> m_appendStreamAsyncPartRunner;
     Member<Stream> m_stream;
-    OwnPtr<FileReaderLoader> m_loader;
+    std::unique_ptr<FileReaderLoader> m_loader;
 };
 
 } // namespace blink
diff --git a/third_party/WebKit/Source/modules/mediastream/MediaDevicesRequest.h b/third_party/WebKit/Source/modules/mediastream/MediaDevicesRequest.h
index 39c35ca2..8819abb 100644
--- a/third_party/WebKit/Source/modules/mediastream/MediaDevicesRequest.h
+++ b/third_party/WebKit/Source/modules/mediastream/MediaDevicesRequest.h
@@ -31,7 +31,6 @@
 #include "modules/ModulesExport.h"
 #include "modules/mediastream/MediaDeviceInfo.h"
 #include "platform/heap/Handle.h"
-#include "wtf/PassOwnPtr.h"
 
 namespace blink {
 
diff --git a/third_party/WebKit/Source/modules/mediastream/MediaStreamTrack.cpp b/third_party/WebKit/Source/modules/mediastream/MediaStreamTrack.cpp
index 3ead30dc..26670613 100644
--- a/third_party/WebKit/Source/modules/mediastream/MediaStreamTrack.cpp
+++ b/third_party/WebKit/Source/modules/mediastream/MediaStreamTrack.cpp
@@ -42,6 +42,7 @@
 #include "public/platform/WebMediaStreamTrack.h"
 #include "public/platform/WebSourceInfo.h"
 #include "wtf/Assertions.h"
+#include <memory>
 
 namespace blink {
 
@@ -255,7 +256,7 @@
     return !ended() && hasEventListeners(EventTypeNames::ended);
 }
 
-PassOwnPtr<AudioSourceProvider> MediaStreamTrack::createWebAudioSource()
+std::unique_ptr<AudioSourceProvider> MediaStreamTrack::createWebAudioSource()
 {
     return MediaStreamCenter::instance().createWebAudioSourceFromMediaStreamTrack(component());
 }
diff --git a/third_party/WebKit/Source/modules/mediastream/MediaStreamTrack.h b/third_party/WebKit/Source/modules/mediastream/MediaStreamTrack.h
index 99ed5f8..31f11568 100644
--- a/third_party/WebKit/Source/modules/mediastream/MediaStreamTrack.h
+++ b/third_party/WebKit/Source/modules/mediastream/MediaStreamTrack.h
@@ -35,6 +35,7 @@
 #include "platform/mediastream/MediaStreamSource.h"
 #include "public/platform/WebMediaConstraints.h"
 #include "wtf/Forward.h"
+#include <memory>
 
 namespace blink {
 
@@ -99,7 +100,7 @@
     // ActiveDOMObject
     void stop() override;
 
-    PassOwnPtr<AudioSourceProvider> createWebAudioSource();
+    std::unique_ptr<AudioSourceProvider> createWebAudioSource();
 
     DECLARE_VIRTUAL_TRACE();
 
diff --git a/third_party/WebKit/Source/modules/mediastream/MediaStreamTrackSourcesRequestImpl.cpp b/third_party/WebKit/Source/modules/mediastream/MediaStreamTrackSourcesRequestImpl.cpp
index f16f517..3d800b0 100644
--- a/third_party/WebKit/Source/modules/mediastream/MediaStreamTrackSourcesRequestImpl.cpp
+++ b/third_party/WebKit/Source/modules/mediastream/MediaStreamTrackSourcesRequestImpl.cpp
@@ -32,7 +32,6 @@
 #include "public/platform/WebSourceInfo.h"
 #include "public/platform/WebTraceLocation.h"
 #include "wtf/Functional.h"
-#include "wtf/PassOwnPtr.h"
 
 namespace blink {
 
diff --git a/third_party/WebKit/Source/modules/mediastream/RTCCertificate.cpp b/third_party/WebKit/Source/modules/mediastream/RTCCertificate.cpp
index 96ecb6c..f80a229 100644
--- a/third_party/WebKit/Source/modules/mediastream/RTCCertificate.cpp
+++ b/third_party/WebKit/Source/modules/mediastream/RTCCertificate.cpp
@@ -30,10 +30,12 @@
 
 #include "modules/mediastream/RTCCertificate.h"
 
+#include "wtf/PtrUtil.h"
+
 namespace blink {
 
 RTCCertificate::RTCCertificate(std::unique_ptr<WebRTCCertificate> certificate)
-    : m_certificate(adoptPtr(certificate.release()))
+    : m_certificate(wrapUnique(certificate.release()))
 {
 }
 
diff --git a/third_party/WebKit/Source/modules/mediastream/RTCCertificate.h b/third_party/WebKit/Source/modules/mediastream/RTCCertificate.h
index a3e155f..d51268a 100644
--- a/third_party/WebKit/Source/modules/mediastream/RTCCertificate.h
+++ b/third_party/WebKit/Source/modules/mediastream/RTCCertificate.h
@@ -35,8 +35,6 @@
 #include "core/dom/DOMTimeStamp.h"
 #include "platform/heap/GarbageCollected.h"
 #include "public/platform/WebRTCCertificate.h"
-#include "wtf/OwnPtr.h"
-
 #include <memory>
 
 namespace blink {
@@ -57,7 +55,7 @@
     DOMTimeStamp expires() const;
 
 private:
-    OwnPtr<WebRTCCertificate> m_certificate;
+    std::unique_ptr<WebRTCCertificate> m_certificate;
 };
 
 } // namespace blink
diff --git a/third_party/WebKit/Source/modules/mediastream/RTCDTMFSender.cpp b/third_party/WebKit/Source/modules/mediastream/RTCDTMFSender.cpp
index fcde7c0..d1a433f 100644
--- a/third_party/WebKit/Source/modules/mediastream/RTCDTMFSender.cpp
+++ b/third_party/WebKit/Source/modules/mediastream/RTCDTMFSender.cpp
@@ -34,6 +34,8 @@
 #include "public/platform/WebMediaStreamTrack.h"
 #include "public/platform/WebRTCDTMFSenderHandler.h"
 #include "public/platform/WebRTCPeerConnectionHandler.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
@@ -45,7 +47,7 @@
 
 RTCDTMFSender* RTCDTMFSender::create(ExecutionContext* context, WebRTCPeerConnectionHandler* peerConnectionHandler, MediaStreamTrack* track, ExceptionState& exceptionState)
 {
-    OwnPtr<WebRTCDTMFSenderHandler> handler = adoptPtr(peerConnectionHandler->createDTMFSender(track->component()));
+    std::unique_ptr<WebRTCDTMFSenderHandler> handler = wrapUnique(peerConnectionHandler->createDTMFSender(track->component()));
     if (!handler) {
         exceptionState.throwDOMException(NotSupportedError, "The MediaStreamTrack provided is not an element of a MediaStream that's currently in the local streams set.");
         return nullptr;
@@ -56,7 +58,7 @@
     return dtmfSender;
 }
 
-RTCDTMFSender::RTCDTMFSender(ExecutionContext* context, MediaStreamTrack* track, PassOwnPtr<WebRTCDTMFSenderHandler> handler)
+RTCDTMFSender::RTCDTMFSender(ExecutionContext* context, MediaStreamTrack* track, std::unique_ptr<WebRTCDTMFSenderHandler> handler)
     : ActiveDOMObject(context)
     , m_track(track)
     , m_duration(defaultToneDurationMs)
diff --git a/third_party/WebKit/Source/modules/mediastream/RTCDTMFSender.h b/third_party/WebKit/Source/modules/mediastream/RTCDTMFSender.h
index 9518f11..dbe33121 100644
--- a/third_party/WebKit/Source/modules/mediastream/RTCDTMFSender.h
+++ b/third_party/WebKit/Source/modules/mediastream/RTCDTMFSender.h
@@ -30,6 +30,7 @@
 #include "modules/EventTargetModules.h"
 #include "platform/Timer.h"
 #include "public/platform/WebRTCDTMFSenderHandlerClient.h"
+#include <memory>
 
 namespace blink {
 
@@ -71,7 +72,7 @@
     DECLARE_VIRTUAL_TRACE();
 
 private:
-    RTCDTMFSender(ExecutionContext*, MediaStreamTrack*, PassOwnPtr<WebRTCDTMFSenderHandler>);
+    RTCDTMFSender(ExecutionContext*, MediaStreamTrack*, std::unique_ptr<WebRTCDTMFSenderHandler>);
     void dispose();
 
     void scheduleDispatchEvent(Event*);
@@ -84,7 +85,7 @@
     int m_duration;
     int m_interToneGap;
 
-    OwnPtr<WebRTCDTMFSenderHandler> m_handler;
+    std::unique_ptr<WebRTCDTMFSenderHandler> m_handler;
 
     bool m_stopped;
 
diff --git a/third_party/WebKit/Source/modules/mediastream/RTCDataChannel.cpp b/third_party/WebKit/Source/modules/mediastream/RTCDataChannel.cpp
index e054159b..a3e9296d 100644
--- a/third_party/WebKit/Source/modules/mediastream/RTCDataChannel.cpp
+++ b/third_party/WebKit/Source/modules/mediastream/RTCDataChannel.cpp
@@ -33,6 +33,8 @@
 #include "core/fileapi/Blob.h"
 #include "modules/mediastream/RTCPeerConnection.h"
 #include "public/platform/WebRTCPeerConnectionHandler.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
@@ -51,7 +53,7 @@
     exceptionState.throwDOMException(NotSupportedError, "Blob support not implemented yet");
 }
 
-RTCDataChannel* RTCDataChannel::create(ExecutionContext* context, PassOwnPtr<WebRTCDataChannelHandler> handler)
+RTCDataChannel* RTCDataChannel::create(ExecutionContext* context, std::unique_ptr<WebRTCDataChannelHandler> handler)
 {
     DCHECK(handler);
     RTCDataChannel* channel = new RTCDataChannel(context, std::move(handler));
@@ -62,7 +64,7 @@
 
 RTCDataChannel* RTCDataChannel::create(ExecutionContext* context, WebRTCPeerConnectionHandler* peerConnectionHandler, const String& label, const WebRTCDataChannelInit& init, ExceptionState& exceptionState)
 {
-    OwnPtr<WebRTCDataChannelHandler> handler = adoptPtr(peerConnectionHandler->createDataChannel(label, init));
+    std::unique_ptr<WebRTCDataChannelHandler> handler = wrapUnique(peerConnectionHandler->createDataChannel(label, init));
     if (!handler) {
         exceptionState.throwDOMException(NotSupportedError, "RTCDataChannel is not supported");
         return nullptr;
@@ -73,7 +75,7 @@
     return channel;
 }
 
-RTCDataChannel::RTCDataChannel(ExecutionContext* context, PassOwnPtr<WebRTCDataChannelHandler> handler)
+RTCDataChannel::RTCDataChannel(ExecutionContext* context, std::unique_ptr<WebRTCDataChannelHandler> handler)
     : ActiveScriptWrappable(this)
     , ActiveDOMObject(context)
     , m_handler(std::move(handler))
diff --git a/third_party/WebKit/Source/modules/mediastream/RTCDataChannel.h b/third_party/WebKit/Source/modules/mediastream/RTCDataChannel.h
index ed92c02..6091d2b 100644
--- a/third_party/WebKit/Source/modules/mediastream/RTCDataChannel.h
+++ b/third_party/WebKit/Source/modules/mediastream/RTCDataChannel.h
@@ -34,6 +34,7 @@
 #include "public/platform/WebRTCDataChannelHandler.h"
 #include "public/platform/WebRTCDataChannelHandlerClient.h"
 #include "wtf/Compiler.h"
+#include <memory>
 
 namespace blink {
 
@@ -55,7 +56,7 @@
     DEFINE_WRAPPERTYPEINFO();
     USING_PRE_FINALIZER(RTCDataChannel, dispose);
 public:
-    static RTCDataChannel* create(ExecutionContext*, PassOwnPtr<WebRTCDataChannelHandler>);
+    static RTCDataChannel* create(ExecutionContext*, std::unique_ptr<WebRTCDataChannelHandler>);
     static RTCDataChannel* create(ExecutionContext*, WebRTCPeerConnectionHandler*, const String& label, const WebRTCDataChannelInit&, ExceptionState&);
     ~RTCDataChannel() override;
 
@@ -116,13 +117,13 @@
     void didDetectError() override;
 
 private:
-    RTCDataChannel(ExecutionContext*, PassOwnPtr<WebRTCDataChannelHandler>);
+    RTCDataChannel(ExecutionContext*, std::unique_ptr<WebRTCDataChannelHandler>);
     void dispose();
 
     void scheduleDispatchEvent(Event*);
     void scheduledEventTimerFired(Timer<RTCDataChannel>*);
 
-    OwnPtr<WebRTCDataChannelHandler> m_handler;
+    std::unique_ptr<WebRTCDataChannelHandler> m_handler;
 
     WebRTCDataChannelHandlerClient::ReadyState m_readyState;
 
diff --git a/third_party/WebKit/Source/modules/mediastream/RTCDataChannelTest.cpp b/third_party/WebKit/Source/modules/mediastream/RTCDataChannelTest.cpp
index 500a4c2..de660958 100644
--- a/third_party/WebKit/Source/modules/mediastream/RTCDataChannelTest.cpp
+++ b/third_party/WebKit/Source/modules/mediastream/RTCDataChannelTest.cpp
@@ -12,6 +12,7 @@
 #include "public/platform/WebRTCDataChannelHandler.h"
 #include "public/platform/WebVector.h"
 #include "testing/gtest/include/gtest/gtest.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/RefPtr.h"
 #include "wtf/text/WTFString.h"
 
@@ -77,7 +78,7 @@
 TEST(RTCDataChannelTest, BufferedAmount)
 {
     MockHandler* handler = new MockHandler();
-    RTCDataChannel* channel = RTCDataChannel::create(0, adoptPtr(handler));
+    RTCDataChannel* channel = RTCDataChannel::create(0, wrapUnique(handler));
 
     handler->changeState(WebRTCDataChannelHandlerClient::ReadyStateOpen);
     String message(std::string(100, 'A').c_str());
@@ -88,7 +89,7 @@
 TEST(RTCDataChannelTest, BufferedAmountLow)
 {
     MockHandler* handler = new MockHandler();
-    RTCDataChannel* channel = RTCDataChannel::create(0, adoptPtr(handler));
+    RTCDataChannel* channel = RTCDataChannel::create(0, wrapUnique(handler));
 
     // Add and drain 100 bytes
     handler->changeState(WebRTCDataChannelHandlerClient::ReadyStateOpen);
diff --git a/third_party/WebKit/Source/modules/mediastream/RTCPeerConnection.cpp b/third_party/WebKit/Source/modules/mediastream/RTCPeerConnection.cpp
index 0467f453..a421337 100644
--- a/third_party/WebKit/Source/modules/mediastream/RTCPeerConnection.cpp
+++ b/third_party/WebKit/Source/modules/mediastream/RTCPeerConnection.cpp
@@ -90,7 +90,7 @@
 #include "public/platform/WebRTCStatsRequest.h"
 #include "public/platform/WebRTCVoidRequest.h"
 #include "wtf/CurrentTime.h"
-
+#include "wtf/PtrUtil.h"
 #include <memory>
 
 namespace blink {
@@ -455,7 +455,7 @@
         return;
     }
 
-    m_peerHandler = adoptPtr(Platform::current()->createRTCPeerConnectionHandler(this));
+    m_peerHandler = wrapUnique(Platform::current()->createRTCPeerConnectionHandler(this));
     if (!m_peerHandler) {
         m_closed = true;
         m_stopped = true;
@@ -747,7 +747,7 @@
     }
     DCHECK(!keyParams.isNull());
 
-    OwnPtr<WebRTCCertificateGenerator> certificateGenerator = adoptPtr(
+    std::unique_ptr<WebRTCCertificateGenerator> certificateGenerator = wrapUnique(
         Platform::current()->createRTCCertificateGenerator());
 
     // |keyParams| was successfully constructed, but does the certificate generator support these parameters?
@@ -1102,7 +1102,7 @@
     if (m_signalingState == SignalingStateClosed)
         return;
 
-    RTCDataChannel* channel = RTCDataChannel::create(getExecutionContext(), adoptPtr(handler));
+    RTCDataChannel* channel = RTCDataChannel::create(getExecutionContext(), wrapUnique(handler));
     scheduleDispatchEvent(RTCDataChannelEvent::create(EventTypeNames::datachannel, false, false, channel));
 }
 
diff --git a/third_party/WebKit/Source/modules/mediastream/RTCPeerConnection.h b/third_party/WebKit/Source/modules/mediastream/RTCPeerConnection.h
index 560b210..823d949d 100644
--- a/third_party/WebKit/Source/modules/mediastream/RTCPeerConnection.h
+++ b/third_party/WebKit/Source/modules/mediastream/RTCPeerConnection.h
@@ -43,6 +43,7 @@
 #include "public/platform/WebMediaConstraints.h"
 #include "public/platform/WebRTCPeerConnectionHandler.h"
 #include "public/platform/WebRTCPeerConnectionHandlerClient.h"
+#include <memory>
 
 namespace blink {
 class ExceptionState;
@@ -204,7 +205,7 @@
     MediaStreamVector m_localStreams;
     MediaStreamVector m_remoteStreams;
 
-    OwnPtr<WebRTCPeerConnectionHandler> m_peerHandler;
+    std::unique_ptr<WebRTCPeerConnectionHandler> m_peerHandler;
 
     Member<AsyncMethodRunner<RTCPeerConnection>> m_dispatchScheduledEventRunner;
     HeapVector<Member<EventWrapper>> m_scheduledEvents;
diff --git a/third_party/WebKit/Source/modules/mediastream/RTCSessionDescriptionRequestImpl.h b/third_party/WebKit/Source/modules/mediastream/RTCSessionDescriptionRequestImpl.h
index a8a7f183..11dbf432 100644
--- a/third_party/WebKit/Source/modules/mediastream/RTCSessionDescriptionRequestImpl.h
+++ b/third_party/WebKit/Source/modules/mediastream/RTCSessionDescriptionRequestImpl.h
@@ -34,7 +34,6 @@
 #include "core/dom/ActiveDOMObject.h"
 #include "platform/heap/Handle.h"
 #include "platform/mediastream/RTCSessionDescriptionRequest.h"
-#include "wtf/PassOwnPtr.h"
 #include "wtf/PassRefPtr.h"
 
 namespace blink {
diff --git a/third_party/WebKit/Source/modules/mediastream/UserMediaController.h b/third_party/WebKit/Source/modules/mediastream/UserMediaController.h
index 471a42b..d185880 100644
--- a/third_party/WebKit/Source/modules/mediastream/UserMediaController.h
+++ b/third_party/WebKit/Source/modules/mediastream/UserMediaController.h
@@ -27,7 +27,6 @@
 
 #include "core/frame/LocalFrame.h"
 #include "modules/mediastream/UserMediaClient.h"
-#include "wtf/PassOwnPtr.h"
 
 namespace blink {
 
diff --git a/third_party/WebKit/Source/modules/navigatorcontentutils/NavigatorContentUtils.h b/third_party/WebKit/Source/modules/navigatorcontentutils/NavigatorContentUtils.h
index 2708fb3..d510d47e 100644
--- a/third_party/WebKit/Source/modules/navigatorcontentutils/NavigatorContentUtils.h
+++ b/third_party/WebKit/Source/modules/navigatorcontentutils/NavigatorContentUtils.h
@@ -31,7 +31,6 @@
 #include "modules/navigatorcontentutils/NavigatorContentUtilsClient.h"
 #include "platform/Supplementable.h"
 #include "platform/heap/Handle.h"
-#include "wtf/OwnPtr.h"
 #include "wtf/text/WTFString.h"
 
 namespace blink {
diff --git a/third_party/WebKit/Source/modules/notifications/NotificationImageLoader.cpp b/third_party/WebKit/Source/modules/notifications/NotificationImageLoader.cpp
index 41f05f7..3b545f9 100644
--- a/third_party/WebKit/Source/modules/notifications/NotificationImageLoader.cpp
+++ b/third_party/WebKit/Source/modules/notifications/NotificationImageLoader.cpp
@@ -17,6 +17,7 @@
 #include "third_party/skia/include/core/SkBitmap.h"
 #include "wtf/CurrentTime.h"
 #include "wtf/Threading.h"
+#include <memory>
 
 namespace blink {
 
@@ -93,7 +94,7 @@
         DEFINE_THREAD_SAFE_STATIC_LOCAL(CustomCountHistogram, fileSizeHistogram, new CustomCountHistogram("Notifications.Icon.FileSize", 1, 10000000 /* ~10mb max */, 50 /* buckets */));
         fileSizeHistogram.count(m_data->size());
 
-        OwnPtr<ImageDecoder> decoder = ImageDecoder::create(*m_data.get(), ImageDecoder::AlphaPremultiplied, ImageDecoder::GammaAndColorProfileApplied);
+        std::unique_ptr<ImageDecoder> decoder = ImageDecoder::create(*m_data.get(), ImageDecoder::AlphaPremultiplied, ImageDecoder::GammaAndColorProfileApplied);
         if (decoder) {
             decoder->setData(m_data.get(), true /* allDataReceived */);
             // The |ImageFrame*| is owned by the decoder.
diff --git a/third_party/WebKit/Source/modules/notifications/NotificationImageLoader.h b/third_party/WebKit/Source/modules/notifications/NotificationImageLoader.h
index 8aeb557..363b4fb 100644
--- a/third_party/WebKit/Source/modules/notifications/NotificationImageLoader.h
+++ b/third_party/WebKit/Source/modules/notifications/NotificationImageLoader.h
@@ -10,9 +10,8 @@
 #include "platform/SharedBuffer.h"
 #include "platform/heap/Handle.h"
 #include "wtf/Functional.h"
-#include "wtf/OwnPtr.h"
-#include "wtf/PassOwnPtr.h"
 #include "wtf/RefPtr.h"
+#include <memory>
 
 class SkBitmap;
 
@@ -56,7 +55,7 @@
     double m_startTime;
     RefPtr<SharedBuffer> m_data;
     std::unique_ptr<ImageCallback> m_imageCallback;
-    OwnPtr<ThreadableLoader> m_threadableLoader;
+    std::unique_ptr<ThreadableLoader> m_threadableLoader;
 };
 
 } // namespace blink
diff --git a/third_party/WebKit/Source/modules/notifications/NotificationPermissionClient.h b/third_party/WebKit/Source/modules/notifications/NotificationPermissionClient.h
index 26e2243c..fda8a9b5 100644
--- a/third_party/WebKit/Source/modules/notifications/NotificationPermissionClient.h
+++ b/third_party/WebKit/Source/modules/notifications/NotificationPermissionClient.h
@@ -8,7 +8,6 @@
 #include "bindings/core/v8/ScriptPromise.h"
 #include "modules/ModulesExport.h"
 #include "platform/Supplementable.h"
-#include "wtf/PassOwnPtr.h"
 
 namespace blink {
 
diff --git a/third_party/WebKit/Source/modules/notifications/NotificationResourcesLoader.h b/third_party/WebKit/Source/modules/notifications/NotificationResourcesLoader.h
index a3424d83..238a53d 100644
--- a/third_party/WebKit/Source/modules/notifications/NotificationResourcesLoader.h
+++ b/third_party/WebKit/Source/modules/notifications/NotificationResourcesLoader.h
@@ -13,8 +13,6 @@
 #include "platform/heap/ThreadState.h"
 #include "third_party/skia/include/core/SkBitmap.h"
 #include "wtf/Functional.h"
-#include "wtf/OwnPtr.h"
-#include "wtf/PassOwnPtr.h"
 #include "wtf/Vector.h"
 #include <memory>
 
diff --git a/third_party/WebKit/Source/modules/notifications/NotificationResourcesLoaderTest.cpp b/third_party/WebKit/Source/modules/notifications/NotificationResourcesLoaderTest.cpp
index cd82f45d..c3aba1c 100644
--- a/third_party/WebKit/Source/modules/notifications/NotificationResourcesLoaderTest.cpp
+++ b/third_party/WebKit/Source/modules/notifications/NotificationResourcesLoaderTest.cpp
@@ -84,7 +84,7 @@
     }
 
 private:
-    OwnPtr<DummyPageHolder> m_page;
+    std::unique_ptr<DummyPageHolder> m_page;
     Persistent<NotificationResourcesLoader> m_loader;
     std::unique_ptr<WebNotificationResources> m_resources;
 };
diff --git a/third_party/WebKit/Source/modules/notifications/ServiceWorkerRegistrationNotifications.cpp b/third_party/WebKit/Source/modules/notifications/ServiceWorkerRegistrationNotifications.cpp
index d5967e45..990ea7a 100644
--- a/third_party/WebKit/Source/modules/notifications/ServiceWorkerRegistrationNotifications.cpp
+++ b/third_party/WebKit/Source/modules/notifications/ServiceWorkerRegistrationNotifications.cpp
@@ -21,7 +21,9 @@
 #include "public/platform/WebSecurityOrigin.h"
 #include "public/platform/modules/notifications/WebNotificationData.h"
 #include "wtf/Assertions.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/RefPtr.h"
+#include <memory>
 
 namespace blink {
 namespace {
@@ -76,7 +78,7 @@
     ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState);
     ScriptPromise promise = resolver->promise();
 
-    OwnPtr<WebNotificationShowCallbacks> callbacks = adoptPtr(new CallbackPromiseAdapter<void, void>(resolver));
+    std::unique_ptr<WebNotificationShowCallbacks> callbacks = wrapUnique(new CallbackPromiseAdapter<void, void>(resolver));
     ServiceWorkerRegistrationNotifications::from(executionContext, registration).prepareShow(data, std::move(callbacks));
 
     return promise;
@@ -125,22 +127,22 @@
     return *supplement;
 }
 
-void ServiceWorkerRegistrationNotifications::prepareShow(const WebNotificationData& data, PassOwnPtr<WebNotificationShowCallbacks> callbacks)
+void ServiceWorkerRegistrationNotifications::prepareShow(const WebNotificationData& data, std::unique_ptr<WebNotificationShowCallbacks> callbacks)
 {
     RefPtr<SecurityOrigin> origin = getExecutionContext()->getSecurityOrigin();
-    NotificationResourcesLoader* loader = new NotificationResourcesLoader(bind<NotificationResourcesLoader*>(&ServiceWorkerRegistrationNotifications::didLoadResources, WeakPersistentThisPointer<ServiceWorkerRegistrationNotifications>(this), origin.release(), data, passed(std::move(callbacks))));
+    NotificationResourcesLoader* loader = new NotificationResourcesLoader(WTF::bind<NotificationResourcesLoader*>(&ServiceWorkerRegistrationNotifications::didLoadResources, WeakPersistentThisPointer<ServiceWorkerRegistrationNotifications>(this), origin.release(), data, passed(std::move(callbacks))));
     m_loaders.add(loader);
     loader->start(getExecutionContext(), data);
 }
 
-void ServiceWorkerRegistrationNotifications::didLoadResources(PassRefPtr<SecurityOrigin> origin, const WebNotificationData& data, PassOwnPtr<WebNotificationShowCallbacks> callbacks, NotificationResourcesLoader* loader)
+void ServiceWorkerRegistrationNotifications::didLoadResources(PassRefPtr<SecurityOrigin> origin, const WebNotificationData& data, std::unique_ptr<WebNotificationShowCallbacks> callbacks, NotificationResourcesLoader* loader)
 {
     DCHECK(m_loaders.contains(loader));
 
     WebNotificationManager* notificationManager = Platform::current()->notificationManager();
     DCHECK(notificationManager);
 
-    notificationManager->showPersistent(WebSecurityOrigin(origin.get()), data, loader->getResources(), m_registration->webRegistration(), callbacks.leakPtr());
+    notificationManager->showPersistent(WebSecurityOrigin(origin.get()), data, loader->getResources(), m_registration->webRegistration(), callbacks.release());
     m_loaders.remove(loader);
 }
 
diff --git a/third_party/WebKit/Source/modules/notifications/ServiceWorkerRegistrationNotifications.h b/third_party/WebKit/Source/modules/notifications/ServiceWorkerRegistrationNotifications.h
index 53c3b55..445c3e6a 100644
--- a/third_party/WebKit/Source/modules/notifications/ServiceWorkerRegistrationNotifications.h
+++ b/third_party/WebKit/Source/modules/notifications/ServiceWorkerRegistrationNotifications.h
@@ -14,9 +14,8 @@
 #include "platform/heap/Visitor.h"
 #include "public/platform/modules/notifications/WebNotificationManager.h"
 #include "wtf/Noncopyable.h"
-#include "wtf/OwnPtr.h"
-#include "wtf/PassOwnPtr.h"
 #include "wtf/PassRefPtr.h"
+#include <memory>
 
 namespace blink {
 
@@ -48,8 +47,8 @@
     static const char* supplementName();
     static ServiceWorkerRegistrationNotifications& from(ExecutionContext*, ServiceWorkerRegistration&);
 
-    void prepareShow(const WebNotificationData&, PassOwnPtr<WebNotificationShowCallbacks>);
-    void didLoadResources(PassRefPtr<SecurityOrigin>, const WebNotificationData&, PassOwnPtr<WebNotificationShowCallbacks>, NotificationResourcesLoader*);
+    void prepareShow(const WebNotificationData&, std::unique_ptr<WebNotificationShowCallbacks>);
+    void didLoadResources(PassRefPtr<SecurityOrigin>, const WebNotificationData&, std::unique_ptr<WebNotificationShowCallbacks>, NotificationResourcesLoader*);
 
     Member<ServiceWorkerRegistration> m_registration;
     HeapHashSet<Member<NotificationResourcesLoader>> m_loaders;
diff --git a/third_party/WebKit/Source/modules/offscreencanvas2d/OffscreenCanvasRenderingContext2D.h b/third_party/WebKit/Source/modules/offscreencanvas2d/OffscreenCanvasRenderingContext2D.h
index 89bcba6..6fef3c01 100644
--- a/third_party/WebKit/Source/modules/offscreencanvas2d/OffscreenCanvasRenderingContext2D.h
+++ b/third_party/WebKit/Source/modules/offscreencanvas2d/OffscreenCanvasRenderingContext2D.h
@@ -9,6 +9,7 @@
 #include "core/html/canvas/CanvasRenderingContext.h"
 #include "core/html/canvas/CanvasRenderingContextFactory.h"
 #include "modules/canvas2d/BaseRenderingContext2D.h"
+#include <memory>
 
 namespace blink {
 
@@ -80,7 +81,7 @@
 private:
     bool m_hasAlpha;
     bool m_needsMatrixClipRestore = false;
-    OwnPtr<ImageBuffer> m_imageBuffer;
+    std::unique_ptr<ImageBuffer> m_imageBuffer;
 };
 
 } // namespace blink
diff --git a/third_party/WebKit/Source/modules/payments/PaymentRequestDetailsTest.cpp b/third_party/WebKit/Source/modules/payments/PaymentRequestDetailsTest.cpp
index eaf46a0..260ca91 100644
--- a/third_party/WebKit/Source/modules/payments/PaymentRequestDetailsTest.cpp
+++ b/third_party/WebKit/Source/modules/payments/PaymentRequestDetailsTest.cpp
@@ -12,7 +12,6 @@
 #include "modules/payments/PaymentDetails.h"
 #include "modules/payments/PaymentTestHelper.h"
 #include "testing/gtest/include/gtest/gtest.h"
-#include "wtf/OwnPtr.h"
 #include <ostream> // NOLINT
 
 namespace blink {
diff --git a/third_party/WebKit/Source/modules/payments/PaymentRequestUpdateEventTest.cpp b/third_party/WebKit/Source/modules/payments/PaymentRequestUpdateEventTest.cpp
index b0d152c..ce0d4a7 100644
--- a/third_party/WebKit/Source/modules/payments/PaymentRequestUpdateEventTest.cpp
+++ b/third_party/WebKit/Source/modules/payments/PaymentRequestUpdateEventTest.cpp
@@ -12,7 +12,7 @@
 #include "modules/payments/PaymentUpdater.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
-#include "wtf/OwnPtr.h"
+#include <memory>
 
 namespace blink {
 namespace {
diff --git a/third_party/WebKit/Source/modules/payments/PaymentResponseTest.cpp b/third_party/WebKit/Source/modules/payments/PaymentResponseTest.cpp
index 12812b4..577877f 100644
--- a/third_party/WebKit/Source/modules/payments/PaymentResponseTest.cpp
+++ b/third_party/WebKit/Source/modules/payments/PaymentResponseTest.cpp
@@ -13,7 +13,7 @@
 #include "modules/payments/PaymentTestHelper.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
-#include "wtf/OwnPtr.h"
+#include <memory>
 #include <utility>
 
 namespace blink {
diff --git a/third_party/WebKit/Source/modules/permissions/Permissions.cpp b/third_party/WebKit/Source/modules/permissions/Permissions.cpp
index 64f5741a..a0530be 100644
--- a/third_party/WebKit/Source/modules/permissions/Permissions.cpp
+++ b/third_party/WebKit/Source/modules/permissions/Permissions.cpp
@@ -23,7 +23,9 @@
 #include "public/platform/Platform.h"
 #include "public/platform/modules/permissions/WebPermissionClient.h"
 #include "wtf/NotFound.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/Vector.h"
+#include <memory>
 
 namespace blink {
 
@@ -167,8 +169,8 @@
         return ScriptPromise::rejectWithDOMException(scriptState, DOMException::create(InvalidStateError, "In its current state, the global scope can't request permissions."));
 
     ExceptionState exceptionState(ExceptionState::GetterContext,  "request", "Permissions", scriptState->context()->Global(), scriptState->isolate());
-    OwnPtr<Vector<WebPermissionType>> internalPermissions = adoptPtr(new Vector<WebPermissionType>());
-    OwnPtr<Vector<int>> callerIndexToInternalIndex = adoptPtr(new Vector<int>(rawPermissions.size()));
+    std::unique_ptr<Vector<WebPermissionType>> internalPermissions = wrapUnique(new Vector<WebPermissionType>());
+    std::unique_ptr<Vector<int>> callerIndexToInternalIndex = wrapUnique(new Vector<int>(rawPermissions.size()));
     for (size_t i = 0; i < rawPermissions.size(); ++i) {
         const Dictionary& rawPermission = rawPermissions[i];
 
diff --git a/third_party/WebKit/Source/modules/permissions/PermissionsCallback.cpp b/third_party/WebKit/Source/modules/permissions/PermissionsCallback.cpp
index b60a017..5e8006a8 100644
--- a/third_party/WebKit/Source/modules/permissions/PermissionsCallback.cpp
+++ b/third_party/WebKit/Source/modules/permissions/PermissionsCallback.cpp
@@ -6,10 +6,12 @@
 
 #include "bindings/core/v8/ScriptPromiseResolver.h"
 #include "modules/permissions/PermissionStatus.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
-PermissionsCallback::PermissionsCallback(ScriptPromiseResolver* resolver, PassOwnPtr<Vector<WebPermissionType>> internalPermissions, PassOwnPtr<Vector<int>> callerIndexToInternalIndex)
+PermissionsCallback::PermissionsCallback(ScriptPromiseResolver* resolver, std::unique_ptr<Vector<WebPermissionType>> internalPermissions, std::unique_ptr<Vector<int>> callerIndexToInternalIndex)
     : m_resolver(resolver)
     , m_internalPermissions(std::move(internalPermissions))
     , m_callerIndexToInternalIndex(std::move(callerIndexToInternalIndex))
@@ -22,7 +24,7 @@
     if (!m_resolver->getExecutionContext() || m_resolver->getExecutionContext()->activeDOMObjectsAreStopped())
         return;
 
-    OwnPtr<WebVector<WebPermissionStatus>> statusPtr = adoptPtr(permissionStatus.release());
+    std::unique_ptr<WebVector<WebPermissionStatus>> statusPtr = wrapUnique(permissionStatus.release());
     HeapVector<Member<PermissionStatus>> result(m_callerIndexToInternalIndex->size());
 
     // Create the response vector by finding the status for each index by
diff --git a/third_party/WebKit/Source/modules/permissions/PermissionsCallback.h b/third_party/WebKit/Source/modules/permissions/PermissionsCallback.h
index a2351c9..2173f58e 100644
--- a/third_party/WebKit/Source/modules/permissions/PermissionsCallback.h
+++ b/third_party/WebKit/Source/modules/permissions/PermissionsCallback.h
@@ -13,7 +13,6 @@
 #include "wtf/Noncopyable.h"
 #include "wtf/PassRefPtr.h"
 #include "wtf/RefPtr.h"
-
 #include <memory>
 
 namespace blink {
@@ -27,7 +26,7 @@
 class PermissionsCallback final
     : public WebCallbacks<std::unique_ptr<WebVector<WebPermissionStatus>>, void> {
 public:
-    PermissionsCallback(ScriptPromiseResolver*, PassOwnPtr<Vector<WebPermissionType>>, PassOwnPtr<Vector<int>>);
+    PermissionsCallback(ScriptPromiseResolver*, std::unique_ptr<Vector<WebPermissionType>>, std::unique_ptr<Vector<int>>);
     ~PermissionsCallback() = default;
 
     void onSuccess(std::unique_ptr<WebVector<WebPermissionStatus>>) override;
@@ -37,12 +36,12 @@
     Persistent<ScriptPromiseResolver> m_resolver;
 
     // The permission types which were passed to the client to be requested.
-    OwnPtr<Vector<WebPermissionType>> m_internalPermissions;
+    std::unique_ptr<Vector<WebPermissionType>> m_internalPermissions;
 
     // Maps each index in the caller vector to the corresponding index in the
     // internal vector (i.e. the vector passsed to the client) such that both
     // indices have the same WebPermissionType.
-    OwnPtr<Vector<int>> m_callerIndexToInternalIndex;
+    std::unique_ptr<Vector<int>> m_callerIndexToInternalIndex;
 
     WTF_MAKE_NONCOPYABLE(PermissionsCallback);
 };
diff --git a/third_party/WebKit/Source/modules/presentation/PresentationConnection.cpp b/third_party/WebKit/Source/modules/presentation/PresentationConnection.cpp
index 70c9c53..c1ccce2 100644
--- a/third_party/WebKit/Source/modules/presentation/PresentationConnection.cpp
+++ b/third_party/WebKit/Source/modules/presentation/PresentationConnection.cpp
@@ -24,8 +24,8 @@
 #include "modules/presentation/PresentationRequest.h"
 #include "public/platform/modules/presentation/WebPresentationConnectionClient.h"
 #include "wtf/Assertions.h"
-#include "wtf/OwnPtr.h"
 #include "wtf/text/AtomicString.h"
+#include <memory>
 
 namespace blink {
 
@@ -171,7 +171,7 @@
 }
 
 // static
-PresentationConnection* PresentationConnection::take(ScriptPromiseResolver* resolver, PassOwnPtr<WebPresentationConnectionClient> client, PresentationRequest* request)
+PresentationConnection* PresentationConnection::take(ScriptPromiseResolver* resolver, std::unique_ptr<WebPresentationConnectionClient> client, PresentationRequest* request)
 {
     ASSERT(resolver);
     ASSERT(client);
@@ -190,7 +190,7 @@
 }
 
 // static
-PresentationConnection* PresentationConnection::take(PresentationController* controller, PassOwnPtr<WebPresentationConnectionClient> client, PresentationRequest* request)
+PresentationConnection* PresentationConnection::take(PresentationController* controller, std::unique_ptr<WebPresentationConnectionClient> client, PresentationRequest* request)
 {
     ASSERT(controller);
     ASSERT(request);
@@ -355,7 +355,7 @@
 
     switch (m_binaryType) {
     case BinaryTypeBlob: {
-        OwnPtr<BlobData> blobData = BlobData::create();
+        std::unique_ptr<BlobData> blobData = BlobData::create();
         blobData->appendBytes(data, length);
         Blob* blob = Blob::create(BlobDataHandle::create(std::move(blobData), length));
         dispatchEvent(MessageEvent::create(blob));
diff --git a/third_party/WebKit/Source/modules/presentation/PresentationConnection.h b/third_party/WebKit/Source/modules/presentation/PresentationConnection.h
index 130fbcf2..4c1cc29 100644
--- a/third_party/WebKit/Source/modules/presentation/PresentationConnection.h
+++ b/third_party/WebKit/Source/modules/presentation/PresentationConnection.h
@@ -11,8 +11,8 @@
 #include "core/frame/DOMWindowProperty.h"
 #include "platform/heap/Handle.h"
 #include "public/platform/modules/presentation/WebPresentationConnectionClient.h"
-#include "wtf/OwnPtr.h"
 #include "wtf/text/WTFString.h"
+#include <memory>
 
 namespace WTF {
 class AtomicString;
@@ -32,10 +32,10 @@
     DEFINE_WRAPPERTYPEINFO();
 public:
     // For CallbackPromiseAdapter.
-    using WebType = OwnPtr<WebPresentationConnectionClient>;
+    using WebType = std::unique_ptr<WebPresentationConnectionClient>;
 
-    static PresentationConnection* take(ScriptPromiseResolver*, PassOwnPtr<WebPresentationConnectionClient>, PresentationRequest*);
-    static PresentationConnection* take(PresentationController*, PassOwnPtr<WebPresentationConnectionClient>, PresentationRequest*);
+    static PresentationConnection* take(ScriptPromiseResolver*, std::unique_ptr<WebPresentationConnectionClient>, PresentationRequest*);
+    static PresentationConnection* take(PresentationController*, std::unique_ptr<WebPresentationConnectionClient>, PresentationRequest*);
     ~PresentationConnection() override;
 
     // EventTarget implementation.
diff --git a/third_party/WebKit/Source/modules/presentation/PresentationConnectionCallbacks.cpp b/third_party/WebKit/Source/modules/presentation/PresentationConnectionCallbacks.cpp
index a9d211b..e9511d1 100644
--- a/third_party/WebKit/Source/modules/presentation/PresentationConnectionCallbacks.cpp
+++ b/third_party/WebKit/Source/modules/presentation/PresentationConnectionCallbacks.cpp
@@ -10,6 +10,8 @@
 #include "modules/presentation/PresentationRequest.h"
 #include "public/platform/modules/presentation/WebPresentationConnectionClient.h"
 #include "public/platform/modules/presentation/WebPresentationError.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
@@ -23,7 +25,7 @@
 
 void PresentationConnectionCallbacks::onSuccess(std::unique_ptr<WebPresentationConnectionClient> PresentationConnectionClient)
 {
-    OwnPtr<WebPresentationConnectionClient> result(adoptPtr(PresentationConnectionClient.release()));
+    std::unique_ptr<WebPresentationConnectionClient> result(wrapUnique(PresentationConnectionClient.release()));
 
     if (!m_resolver->getExecutionContext() || m_resolver->getExecutionContext()->activeDOMObjectsAreStopped())
         return;
diff --git a/third_party/WebKit/Source/modules/presentation/PresentationController.cpp b/third_party/WebKit/Source/modules/presentation/PresentationController.cpp
index f0904d2f..2cc3b32 100644
--- a/third_party/WebKit/Source/modules/presentation/PresentationController.cpp
+++ b/third_party/WebKit/Source/modules/presentation/PresentationController.cpp
@@ -7,6 +7,8 @@
 #include "core/frame/LocalFrame.h"
 #include "modules/presentation/PresentationConnection.h"
 #include "public/platform/modules/presentation/WebPresentationClient.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
@@ -65,12 +67,12 @@
 {
     if (!m_presentation || !m_presentation->defaultRequest())
         return;
-    PresentationConnection::take(this, adoptPtr(connectionClient), m_presentation->defaultRequest());
+    PresentationConnection::take(this, wrapUnique(connectionClient), m_presentation->defaultRequest());
 }
 
 void PresentationController::didChangeSessionState(WebPresentationConnectionClient* connectionClient, WebPresentationConnectionState state)
 {
-    OwnPtr<WebPresentationConnectionClient> client = adoptPtr(connectionClient);
+    std::unique_ptr<WebPresentationConnectionClient> client = wrapUnique(connectionClient);
 
     PresentationConnection* connection = findConnection(client.get());
     if (!connection)
@@ -80,7 +82,7 @@
 
 void PresentationController::didCloseConnection(WebPresentationConnectionClient* connectionClient, WebPresentationConnectionCloseReason reason, const WebString& message)
 {
-    OwnPtr<WebPresentationConnectionClient> client = adoptPtr(connectionClient);
+    std::unique_ptr<WebPresentationConnectionClient> client = wrapUnique(connectionClient);
 
     PresentationConnection* connection = findConnection(client.get());
     if (!connection)
@@ -90,7 +92,7 @@
 
 void PresentationController::didReceiveSessionTextMessage(WebPresentationConnectionClient* connectionClient, const WebString& message)
 {
-    OwnPtr<WebPresentationConnectionClient> client = adoptPtr(connectionClient);
+    std::unique_ptr<WebPresentationConnectionClient> client = wrapUnique(connectionClient);
 
     PresentationConnection* connection = findConnection(client.get());
     if (!connection)
@@ -100,7 +102,7 @@
 
 void PresentationController::didReceiveSessionBinaryMessage(WebPresentationConnectionClient* connectionClient, const uint8_t* data, size_t length)
 {
-    OwnPtr<WebPresentationConnectionClient> client = adoptPtr(connectionClient);
+    std::unique_ptr<WebPresentationConnectionClient> client = wrapUnique(connectionClient);
 
     PresentationConnection* connection = findConnection(client.get());
     if (!connection)
diff --git a/third_party/WebKit/Source/modules/presentation/PresentationError.cpp b/third_party/WebKit/Source/modules/presentation/PresentationError.cpp
index cb35d89..cf37005 100644
--- a/third_party/WebKit/Source/modules/presentation/PresentationError.cpp
+++ b/third_party/WebKit/Source/modules/presentation/PresentationError.cpp
@@ -7,7 +7,6 @@
 #include "core/dom/DOMException.h"
 #include "core/dom/ExceptionCode.h"
 #include "public/platform/modules/presentation/WebPresentationError.h"
-#include "wtf/OwnPtr.h"
 
 namespace blink {
 
diff --git a/third_party/WebKit/Source/modules/push_messaging/PushController.cpp b/third_party/WebKit/Source/modules/push_messaging/PushController.cpp
index 2172060..5bb8e508 100644
--- a/third_party/WebKit/Source/modules/push_messaging/PushController.cpp
+++ b/third_party/WebKit/Source/modules/push_messaging/PushController.cpp
@@ -6,7 +6,6 @@
 
 #include "public/platform/modules/push_messaging/WebPushClient.h"
 #include "wtf/Assertions.h"
-#include "wtf/PassOwnPtr.h"
 
 namespace blink {
 
diff --git a/third_party/WebKit/Source/modules/push_messaging/PushController.h b/third_party/WebKit/Source/modules/push_messaging/PushController.h
index 797c023..eb29149c 100644
--- a/third_party/WebKit/Source/modules/push_messaging/PushController.h
+++ b/third_party/WebKit/Source/modules/push_messaging/PushController.h
@@ -10,7 +10,6 @@
 #include "platform/Supplementable.h"
 #include "wtf/Forward.h"
 #include "wtf/Noncopyable.h"
-#include "wtf/PassOwnPtr.h"
 
 namespace blink {
 
diff --git a/third_party/WebKit/Source/modules/push_messaging/PushMessageData.cpp b/third_party/WebKit/Source/modules/push_messaging/PushMessageData.cpp
index 08bda90d..91c2a586 100644
--- a/third_party/WebKit/Source/modules/push_messaging/PushMessageData.cpp
+++ b/third_party/WebKit/Source/modules/push_messaging/PushMessageData.cpp
@@ -13,7 +13,7 @@
 #include "platform/blob/BlobData.h"
 #include "wtf/Assertions.h"
 #include "wtf/text/TextEncoding.h"
-
+#include <memory>
 #include <v8.h>
 
 namespace blink {
@@ -63,7 +63,7 @@
 
 Blob* PushMessageData::blob() const
 {
-    OwnPtr<BlobData> blobData = BlobData::create();
+    std::unique_ptr<BlobData> blobData = BlobData::create();
     blobData->appendBytes(m_data.data(), m_data.size());
 
     // Note that the content type of the Blob object is deliberately not being
diff --git a/third_party/WebKit/Source/modules/push_messaging/PushSubscription.cpp b/third_party/WebKit/Source/modules/push_messaging/PushSubscription.cpp
index a83699c..01363e82 100644
--- a/third_party/WebKit/Source/modules/push_messaging/PushSubscription.cpp
+++ b/third_party/WebKit/Source/modules/push_messaging/PushSubscription.cpp
@@ -13,12 +13,12 @@
 #include "public/platform/modules/push_messaging/WebPushProvider.h"
 #include "public/platform/modules/push_messaging/WebPushSubscription.h"
 #include "wtf/Assertions.h"
-#include "wtf/OwnPtr.h"
 #include "wtf/text/Base64.h"
+#include <memory>
 
 namespace blink {
 
-PushSubscription* PushSubscription::take(ScriptPromiseResolver*, PassOwnPtr<WebPushSubscription> pushSubscription, ServiceWorkerRegistration* serviceWorkerRegistration)
+PushSubscription* PushSubscription::take(ScriptPromiseResolver*, std::unique_ptr<WebPushSubscription> pushSubscription, ServiceWorkerRegistration* serviceWorkerRegistration)
 {
     if (!pushSubscription)
         return nullptr;
diff --git a/third_party/WebKit/Source/modules/push_messaging/PushSubscription.h b/third_party/WebKit/Source/modules/push_messaging/PushSubscription.h
index be6fd12d..e21dcbd 100644
--- a/third_party/WebKit/Source/modules/push_messaging/PushSubscription.h
+++ b/third_party/WebKit/Source/modules/push_messaging/PushSubscription.h
@@ -13,6 +13,7 @@
 #include "platform/weborigin/KURL.h"
 #include "wtf/PassRefPtr.h"
 #include "wtf/RefPtr.h"
+#include <memory>
 
 namespace blink {
 
@@ -24,7 +25,7 @@
 class PushSubscription final : public GarbageCollectedFinalized<PushSubscription>, public ScriptWrappable {
     DEFINE_WRAPPERTYPEINFO();
 public:
-    static PushSubscription* take(ScriptPromiseResolver*, PassOwnPtr<WebPushSubscription>, ServiceWorkerRegistration*);
+    static PushSubscription* take(ScriptPromiseResolver*, std::unique_ptr<WebPushSubscription>, ServiceWorkerRegistration*);
     static void dispose(WebPushSubscription* subscriptionRaw);
 
     virtual ~PushSubscription();
diff --git a/third_party/WebKit/Source/modules/push_messaging/PushSubscriptionCallbacks.cpp b/third_party/WebKit/Source/modules/push_messaging/PushSubscriptionCallbacks.cpp
index 8dea001..fa77180 100644
--- a/third_party/WebKit/Source/modules/push_messaging/PushSubscriptionCallbacks.cpp
+++ b/third_party/WebKit/Source/modules/push_messaging/PushSubscriptionCallbacks.cpp
@@ -10,6 +10,7 @@
 #include "modules/serviceworkers/ServiceWorkerRegistration.h"
 #include "public/platform/modules/push_messaging/WebPushSubscription.h"
 #include "wtf/Assertions.h"
+#include "wtf/PtrUtil.h"
 
 namespace blink {
 
@@ -30,7 +31,7 @@
     if (!m_resolver->getExecutionContext() || m_resolver->getExecutionContext()->activeDOMObjectsAreStopped())
         return;
 
-    m_resolver->resolve(PushSubscription::take(m_resolver.get(), adoptPtr(webPushSubscription.release()), m_serviceWorkerRegistration));
+    m_resolver->resolve(PushSubscription::take(m_resolver.get(), wrapUnique(webPushSubscription.release()), m_serviceWorkerRegistration));
 }
 
 void PushSubscriptionCallbacks::onError(const WebPushError& error)
diff --git a/third_party/WebKit/Source/modules/quota/DeprecatedStorageQuota.h b/third_party/WebKit/Source/modules/quota/DeprecatedStorageQuota.h
index 01936d8..f39bdda5 100644
--- a/third_party/WebKit/Source/modules/quota/DeprecatedStorageQuota.h
+++ b/third_party/WebKit/Source/modules/quota/DeprecatedStorageQuota.h
@@ -33,7 +33,6 @@
 
 #include "bindings/core/v8/ScriptWrappable.h"
 #include "platform/heap/Handle.h"
-#include "wtf/PassOwnPtr.h"
 
 namespace blink {
 
diff --git a/third_party/WebKit/Source/modules/quota/DeprecatedStorageQuotaCallbacksImpl.h b/third_party/WebKit/Source/modules/quota/DeprecatedStorageQuotaCallbacksImpl.h
index 5b80d08..8529807 100644
--- a/third_party/WebKit/Source/modules/quota/DeprecatedStorageQuotaCallbacksImpl.h
+++ b/third_party/WebKit/Source/modules/quota/DeprecatedStorageQuotaCallbacksImpl.h
@@ -36,7 +36,6 @@
 #include "modules/quota/StorageQuotaCallback.h"
 #include "modules/quota/StorageUsageCallback.h"
 #include "platform/StorageQuotaCallbacks.h"
-#include "wtf/OwnPtr.h"
 #include "wtf/PassRefPtr.h"
 #include "wtf/RefPtr.h"
 
diff --git a/third_party/WebKit/Source/modules/quota/StorageQuotaCallbacksImpl.h b/third_party/WebKit/Source/modules/quota/StorageQuotaCallbacksImpl.h
index 14300b3..d12e720 100644
--- a/third_party/WebKit/Source/modules/quota/StorageQuotaCallbacksImpl.h
+++ b/third_party/WebKit/Source/modules/quota/StorageQuotaCallbacksImpl.h
@@ -34,7 +34,6 @@
 #include "bindings/core/v8/ScriptPromiseResolver.h"
 #include "modules/ModulesExport.h"
 #include "platform/StorageQuotaCallbacks.h"
-#include "wtf/OwnPtr.h"
 #include "wtf/PassRefPtr.h"
 #include "wtf/RefPtr.h"
 
diff --git a/third_party/WebKit/Source/modules/serviceworkers/ServiceWorker.cpp b/third_party/WebKit/Source/modules/serviceworkers/ServiceWorker.cpp
index bb3e62cc..f3b58f8 100644
--- a/third_party/WebKit/Source/modules/serviceworkers/ServiceWorker.cpp
+++ b/third_party/WebKit/Source/modules/serviceworkers/ServiceWorker.cpp
@@ -41,6 +41,7 @@
 #include "public/platform/WebSecurityOrigin.h"
 #include "public/platform/WebString.h"
 #include "public/platform/modules/serviceworker/WebServiceWorkerState.h"
+#include <memory>
 
 namespace blink {
 
@@ -58,7 +59,7 @@
     }
 
     // Disentangle the port in preparation for sending it to the remote context.
-    OwnPtr<MessagePortChannelArray> channels = MessagePort::disentanglePorts(context, ports, exceptionState);
+    std::unique_ptr<MessagePortChannelArray> channels = MessagePort::disentanglePorts(context, ports, exceptionState);
     if (exceptionState.hadException())
         return;
     if (m_handle->serviceWorker()->state() == WebServiceWorkerStateRedundant) {
@@ -70,8 +71,8 @@
         context->addConsoleMessage(ConsoleMessage::create(JSMessageSource, WarningMessageLevel, "ServiceWorker cannot send an ArrayBuffer as a transferable object yet. See http://crbug.com/511119"));
 
     WebString messageString = message->toWireString();
-    OwnPtr<WebMessagePortChannelArray> webChannels = MessagePort::toWebMessagePortChannelArray(std::move(channels));
-    m_handle->serviceWorker()->postMessage(client->provider(), messageString, WebSecurityOrigin(getExecutionContext()->getSecurityOrigin()), webChannels.leakPtr());
+    std::unique_ptr<WebMessagePortChannelArray> webChannels = MessagePort::toWebMessagePortChannelArray(std::move(channels));
+    m_handle->serviceWorker()->postMessage(client->provider(), messageString, WebSecurityOrigin(getExecutionContext()->getSecurityOrigin()), webChannels.release());
 }
 
 void ServiceWorker::internalsTerminate()
@@ -112,7 +113,7 @@
     }
 }
 
-ServiceWorker* ServiceWorker::from(ExecutionContext* executionContext, PassOwnPtr<WebServiceWorker::Handle> handle)
+ServiceWorker* ServiceWorker::from(ExecutionContext* executionContext, std::unique_ptr<WebServiceWorker::Handle> handle)
 {
     return getOrCreate(executionContext, std::move(handle));
 }
@@ -129,7 +130,7 @@
     m_wasStopped = true;
 }
 
-ServiceWorker* ServiceWorker::getOrCreate(ExecutionContext* executionContext, PassOwnPtr<WebServiceWorker::Handle> handle)
+ServiceWorker* ServiceWorker::getOrCreate(ExecutionContext* executionContext, std::unique_ptr<WebServiceWorker::Handle> handle)
 {
     if (!handle)
         return nullptr;
@@ -145,7 +146,7 @@
     return newWorker;
 }
 
-ServiceWorker::ServiceWorker(ExecutionContext* executionContext, PassOwnPtr<WebServiceWorker::Handle> handle)
+ServiceWorker::ServiceWorker(ExecutionContext* executionContext, std::unique_ptr<WebServiceWorker::Handle> handle)
     : AbstractWorker(executionContext)
     , ActiveScriptWrappable(this)
     , m_handle(std::move(handle))
diff --git a/third_party/WebKit/Source/modules/serviceworkers/ServiceWorker.h b/third_party/WebKit/Source/modules/serviceworkers/ServiceWorker.h
index 1d93fa0..fdd2d3f 100644
--- a/third_party/WebKit/Source/modules/serviceworkers/ServiceWorker.h
+++ b/third_party/WebKit/Source/modules/serviceworkers/ServiceWorker.h
@@ -38,9 +38,8 @@
 #include "modules/ModulesExport.h"
 #include "public/platform/modules/serviceworker/WebServiceWorker.h"
 #include "public/platform/modules/serviceworker/WebServiceWorkerProxy.h"
-#include "wtf/OwnPtr.h"
-#include "wtf/PassOwnPtr.h"
 #include "wtf/PassRefPtr.h"
+#include <memory>
 
 namespace blink {
 
@@ -50,7 +49,7 @@
     DEFINE_WRAPPERTYPEINFO();
     USING_GARBAGE_COLLECTED_MIXIN(ServiceWorker);
 public:
-    static ServiceWorker* from(ExecutionContext*, PassOwnPtr<WebServiceWorker::Handle>);
+    static ServiceWorker* from(ExecutionContext*, std::unique_ptr<WebServiceWorker::Handle>);
 
     ~ServiceWorker() override;
     DECLARE_VIRTUAL_TRACE();
@@ -72,8 +71,8 @@
 
     void internalsTerminate();
 private:
-    static ServiceWorker* getOrCreate(ExecutionContext*, PassOwnPtr<WebServiceWorker::Handle>);
-    ServiceWorker(ExecutionContext*, PassOwnPtr<WebServiceWorker::Handle>);
+    static ServiceWorker* getOrCreate(ExecutionContext*, std::unique_ptr<WebServiceWorker::Handle>);
+    ServiceWorker(ExecutionContext*, std::unique_ptr<WebServiceWorker::Handle>);
 
     // ActiveScriptWrappable overrides.
     bool hasPendingActivity() const final;
@@ -82,7 +81,7 @@
     void stop() override;
 
     // A handle to the service worker representation in the embedder.
-    OwnPtr<WebServiceWorker::Handle> m_handle;
+    std::unique_ptr<WebServiceWorker::Handle> m_handle;
     bool m_wasStopped;
 };
 
diff --git a/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerClient.cpp b/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerClient.cpp
index ae934b81..c77396fd 100644
--- a/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerClient.cpp
+++ b/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerClient.cpp
@@ -12,10 +12,11 @@
 #include "modules/serviceworkers/ServiceWorkerGlobalScopeClient.h"
 #include "public/platform/WebString.h"
 #include "wtf/RefPtr.h"
+#include <memory>
 
 namespace blink {
 
-ServiceWorkerClient* ServiceWorkerClient::take(ScriptPromiseResolver*, PassOwnPtr<WebServiceWorkerClientInfo> webClient)
+ServiceWorkerClient* ServiceWorkerClient::take(ScriptPromiseResolver*, std::unique_ptr<WebServiceWorkerClientInfo> webClient)
 {
     if (!webClient)
         return nullptr;
@@ -70,7 +71,7 @@
 void ServiceWorkerClient::postMessage(ExecutionContext* context, PassRefPtr<SerializedScriptValue> message, const MessagePortArray& ports, ExceptionState& exceptionState)
 {
     // Disentangle the port in preparation for sending it to the remote context.
-    OwnPtr<MessagePortChannelArray> channels = MessagePort::disentanglePorts(context, ports, exceptionState);
+    std::unique_ptr<MessagePortChannelArray> channels = MessagePort::disentanglePorts(context, ports, exceptionState);
     if (exceptionState.hadException())
         return;
 
@@ -78,7 +79,7 @@
         context->addConsoleMessage(ConsoleMessage::create(JSMessageSource, WarningMessageLevel, "ServiceWorkerClient cannot send an ArrayBuffer as a transferable object yet. See http://crbug.com/511119"));
 
     WebString messageString = message->toWireString();
-    OwnPtr<WebMessagePortChannelArray> webChannels = MessagePort::toWebMessagePortChannelArray(std::move(channels));
+    std::unique_ptr<WebMessagePortChannelArray> webChannels = MessagePort::toWebMessagePortChannelArray(std::move(channels));
     ServiceWorkerGlobalScopeClient::from(context)->postMessageToClient(m_uuid, messageString, std::move(webChannels));
 }
 
diff --git a/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerClient.h b/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerClient.h
index 4a2419d..b847b72 100644
--- a/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerClient.h
+++ b/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerClient.h
@@ -12,6 +12,7 @@
 #include "platform/heap/Handle.h"
 #include "public/platform/modules/serviceworker/WebServiceWorkerClientsInfo.h"
 #include "wtf/Forward.h"
+#include <memory>
 
 namespace blink {
 
@@ -23,9 +24,9 @@
     DEFINE_WRAPPERTYPEINFO();
 public:
     // To be used by CallbackPromiseAdapter.
-    using WebType = OwnPtr<WebServiceWorkerClientInfo>;
+    using WebType = std::unique_ptr<WebServiceWorkerClientInfo>;
 
-    static ServiceWorkerClient* take(ScriptPromiseResolver*, PassOwnPtr<WebServiceWorkerClientInfo>);
+    static ServiceWorkerClient* take(ScriptPromiseResolver*, std::unique_ptr<WebServiceWorkerClientInfo>);
     static ServiceWorkerClient* create(const WebServiceWorkerClientInfo&);
 
     virtual ~ServiceWorkerClient();
diff --git a/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerClients.cpp b/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerClients.cpp
index 85cad8a..ab56d4f 100644
--- a/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerClients.cpp
+++ b/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerClients.cpp
@@ -16,10 +16,10 @@
 #include "modules/serviceworkers/ServiceWorkerWindowClientCallback.h"
 #include "public/platform/modules/serviceworker/WebServiceWorkerClientQueryOptions.h"
 #include "public/platform/modules/serviceworker/WebServiceWorkerClientsInfo.h"
-#include "wtf/OwnPtr.h"
-#include "wtf/PassOwnPtr.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/RefPtr.h"
 #include "wtf/Vector.h"
+#include <memory>
 
 namespace blink {
 
@@ -68,7 +68,7 @@
 
     void onSuccess(std::unique_ptr<WebServiceWorkerClientInfo> webClient) override
     {
-        OwnPtr<WebServiceWorkerClientInfo> client = adoptPtr(webClient.release());
+        std::unique_ptr<WebServiceWorkerClientInfo> client = wrapUnique(webClient.release());
         if (!m_resolver->getExecutionContext() || m_resolver->getExecutionContext()->activeDOMObjectsAreStopped())
             return;
         if (!client) {
diff --git a/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerContainer.cpp b/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerContainer.cpp
index efd57b7..7298ac3 100644
--- a/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerContainer.cpp
+++ b/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerContainer.cpp
@@ -56,6 +56,8 @@
 #include "public/platform/modules/serviceworker/WebServiceWorker.h"
 #include "public/platform/modules/serviceworker/WebServiceWorkerProvider.h"
 #include "public/platform/modules/serviceworker/WebServiceWorkerRegistration.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
@@ -69,7 +71,7 @@
     {
         if (!m_resolver->getExecutionContext() || m_resolver->getExecutionContext()->activeDOMObjectsAreStopped())
             return;
-        m_resolver->resolve(ServiceWorkerRegistration::getOrCreate(m_resolver->getExecutionContext(), adoptPtr(handle.release())));
+        m_resolver->resolve(ServiceWorkerRegistration::getOrCreate(m_resolver->getExecutionContext(), wrapUnique(handle.release())));
     }
 
     void onError(const WebServiceWorkerError& error) override
@@ -96,7 +98,7 @@
 
     void onSuccess(std::unique_ptr<WebServiceWorkerRegistration::Handle> webPassHandle) override
     {
-        OwnPtr<WebServiceWorkerRegistration::Handle> handle = adoptPtr(webPassHandle.release());
+        std::unique_ptr<WebServiceWorkerRegistration::Handle> handle = wrapUnique(webPassHandle.release());
         if (!m_resolver->getExecutionContext() || m_resolver->getExecutionContext()->activeDOMObjectsAreStopped())
             return;
         if (!handle) {
@@ -127,10 +129,10 @@
 
     void onSuccess(std::unique_ptr<WebVector<WebServiceWorkerRegistration::Handle*>> webPassRegistrations) override
     {
-        Vector<OwnPtr<WebServiceWorkerRegistration::Handle>> handles;
-        OwnPtr<WebVector<WebServiceWorkerRegistration::Handle*>> webRegistrations = adoptPtr(webPassRegistrations.release());
+        Vector<std::unique_ptr<WebServiceWorkerRegistration::Handle>> handles;
+        std::unique_ptr<WebVector<WebServiceWorkerRegistration::Handle*>> webRegistrations = wrapUnique(webPassRegistrations.release());
         for (auto& handle : *webRegistrations) {
-            handles.append(adoptPtr(handle));
+            handles.append(wrapUnique(handle));
         }
 
         if (!m_resolver->getExecutionContext() || m_resolver->getExecutionContext()->activeDOMObjectsAreStopped())
@@ -161,7 +163,7 @@
         ASSERT(m_ready->getState() == ReadyProperty::Pending);
 
         if (m_ready->getExecutionContext() && !m_ready->getExecutionContext()->activeDOMObjectsAreStopped())
-            m_ready->resolve(ServiceWorkerRegistration::getOrCreate(m_ready->getExecutionContext(), adoptPtr(handle.release())));
+            m_ready->resolve(ServiceWorkerRegistration::getOrCreate(m_ready->getExecutionContext(), wrapUnique(handle.release())));
     }
 
 private:
@@ -195,7 +197,7 @@
     ContextLifecycleObserver::trace(visitor);
 }
 
-void ServiceWorkerContainer::registerServiceWorkerImpl(ExecutionContext* executionContext, const KURL& rawScriptURL, const KURL& scope, PassOwnPtr<RegistrationCallbacks> callbacks)
+void ServiceWorkerContainer::registerServiceWorkerImpl(ExecutionContext* executionContext, const KURL& rawScriptURL, const KURL& scope, std::unique_ptr<RegistrationCallbacks> callbacks)
 {
     if (!m_provider) {
         callbacks->onError(WebServiceWorkerError(WebServiceWorkerError::ErrorTypeState, "Failed to register a ServiceWorker: The document is in an invalid state."));
@@ -255,7 +257,7 @@
         }
     }
 
-    m_provider->registerServiceWorker(patternURL, scriptURL, callbacks.leakPtr());
+    m_provider->registerServiceWorker(patternURL, scriptURL, callbacks.release());
 }
 
 ScriptPromise ServiceWorkerContainer::registerServiceWorker(ScriptState* scriptState, const String& url, const RegistrationOptions& options)
@@ -282,7 +284,7 @@
     else
         patternURL = enteredExecutionContext(scriptState->isolate())->completeURL(options.scope());
 
-    registerServiceWorkerImpl(executionContext, scriptURL, patternURL, adoptPtr(new RegistrationCallback(resolver)));
+    registerServiceWorkerImpl(executionContext, scriptURL, patternURL, wrapUnique(new RegistrationCallback(resolver)));
 
     return promise;
 }
@@ -385,7 +387,7 @@
 {
     if (!getExecutionContext())
         return;
-    m_controller = ServiceWorker::from(getExecutionContext(), adoptPtr(handle.release()));
+    m_controller = ServiceWorker::from(getExecutionContext(), wrapUnique(handle.release()));
     if (m_controller)
         UseCounter::count(getExecutionContext(), UseCounter::ServiceWorkerControlledPage);
     if (shouldNotifyControllerChange)
@@ -399,7 +401,7 @@
 
     MessagePortArray* ports = MessagePort::toMessagePortArray(getExecutionContext(), webChannels);
     RefPtr<SerializedScriptValue> value = SerializedScriptValue::create(message);
-    ServiceWorker* source = ServiceWorker::from(getExecutionContext(), adoptPtr(handle.release()));
+    ServiceWorker* source = ServiceWorker::from(getExecutionContext(), wrapUnique(handle.release()));
     dispatchEvent(ServiceWorkerMessageEvent::create(ports, value, source, getExecutionContext()->getSecurityOrigin()->toString()));
 }
 
diff --git a/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerContainer.h b/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerContainer.h
index 0103990..b912d7c 100644
--- a/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerContainer.h
+++ b/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerContainer.h
@@ -44,6 +44,7 @@
 #include "public/platform/modules/serviceworker/WebServiceWorkerProvider.h"
 #include "public/platform/modules/serviceworker/WebServiceWorkerProviderClient.h"
 #include "wtf/Forward.h"
+#include <memory>
 
 namespace blink {
 
@@ -72,7 +73,7 @@
     ScriptPromise ready(ScriptState*);
     WebServiceWorkerProvider* provider() { return m_provider; }
 
-    void registerServiceWorkerImpl(ExecutionContext*, const KURL& scriptURL, const KURL& scope, PassOwnPtr<RegistrationCallbacks>);
+    void registerServiceWorkerImpl(ExecutionContext*, const KURL& scriptURL, const KURL& scope, std::unique_ptr<RegistrationCallbacks>);
 
     ScriptPromise registerServiceWorker(ScriptState*, const String& pattern, const RegistrationOptions&);
     ScriptPromise getRegistration(ScriptState*, const String& documentURL);
diff --git a/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerContainerClient.cpp b/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerContainerClient.cpp
index 8842166..7237bfab 100644
--- a/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerContainerClient.cpp
+++ b/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerContainerClient.cpp
@@ -10,15 +10,16 @@
 #include "core/loader/FrameLoaderClient.h"
 #include "core/workers/WorkerGlobalScope.h"
 #include "public/platform/modules/serviceworker/WebServiceWorkerProvider.h"
+#include <memory>
 
 namespace blink {
 
-ServiceWorkerContainerClient* ServiceWorkerContainerClient::create(PassOwnPtr<WebServiceWorkerProvider> provider)
+ServiceWorkerContainerClient* ServiceWorkerContainerClient::create(std::unique_ptr<WebServiceWorkerProvider> provider)
 {
     return new ServiceWorkerContainerClient(std::move(provider));
 }
 
-ServiceWorkerContainerClient::ServiceWorkerContainerClient(PassOwnPtr<WebServiceWorkerProvider> provider)
+ServiceWorkerContainerClient::ServiceWorkerContainerClient(std::unique_ptr<WebServiceWorkerProvider> provider)
     : m_provider(std::move(provider))
 {
 }
@@ -51,7 +52,7 @@
     return client;
 }
 
-void provideServiceWorkerContainerClientToWorker(WorkerClients* clients, PassOwnPtr<WebServiceWorkerProvider> provider)
+void provideServiceWorkerContainerClientToWorker(WorkerClients* clients, std::unique_ptr<WebServiceWorkerProvider> provider)
 {
     clients->provideSupplement(ServiceWorkerContainerClient::supplementName(), ServiceWorkerContainerClient::create(std::move(provider)));
 }
diff --git a/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerContainerClient.h b/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerContainerClient.h
index 28e63b6a..e28b38b 100644
--- a/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerContainerClient.h
+++ b/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerContainerClient.h
@@ -9,6 +9,7 @@
 #include "core/workers/WorkerClients.h"
 #include "modules/ModulesExport.h"
 #include "wtf/Forward.h"
+#include <memory>
 
 namespace blink {
 
@@ -24,7 +25,7 @@
     USING_GARBAGE_COLLECTED_MIXIN(ServiceWorkerContainerClient);
     WTF_MAKE_NONCOPYABLE(ServiceWorkerContainerClient);
 public:
-    static ServiceWorkerContainerClient* create(PassOwnPtr<WebServiceWorkerProvider>);
+    static ServiceWorkerContainerClient* create(std::unique_ptr<WebServiceWorkerProvider>);
     virtual ~ServiceWorkerContainerClient();
 
     WebServiceWorkerProvider* provider() { return m_provider.get(); }
@@ -39,12 +40,12 @@
     }
 
 protected:
-    explicit ServiceWorkerContainerClient(PassOwnPtr<WebServiceWorkerProvider>);
+    explicit ServiceWorkerContainerClient(std::unique_ptr<WebServiceWorkerProvider>);
 
-    OwnPtr<WebServiceWorkerProvider> m_provider;
+    std::unique_ptr<WebServiceWorkerProvider> m_provider;
 };
 
-MODULES_EXPORT void provideServiceWorkerContainerClientToWorker(WorkerClients*, PassOwnPtr<WebServiceWorkerProvider>);
+MODULES_EXPORT void provideServiceWorkerContainerClientToWorker(WorkerClients*, std::unique_ptr<WebServiceWorkerProvider>);
 
 } // namespace blink
 
diff --git a/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerContainerTest.cpp b/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerContainerTest.cpp
index fbc9c84..f57b4ce 100644
--- a/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerContainerTest.cpp
+++ b/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerContainerTest.cpp
@@ -23,9 +23,9 @@
 #include "public/platform/modules/serviceworker/WebServiceWorkerClientsInfo.h"
 #include "public/platform/modules/serviceworker/WebServiceWorkerProvider.h"
 #include "testing/gtest/include/gtest/gtest.h"
-#include "wtf/OwnPtr.h"
-#include "wtf/PassOwnPtr.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/text/WTFString.h"
+#include <memory>
 #include <v8.h>
 
 namespace blink {
@@ -162,7 +162,7 @@
     v8::Isolate* isolate() { return v8::Isolate::GetCurrent(); }
     ScriptState* getScriptState() { return ScriptState::forMainWorld(m_page->document().frame()); }
 
-    void provide(PassOwnPtr<WebServiceWorkerProvider> provider)
+    void provide(std::unique_ptr<WebServiceWorkerProvider> provider)
     {
         Supplement<Document>::provideTo(m_page->document(), ServiceWorkerContainerClient::supplementName(), ServiceWorkerContainerClient::create(std::move(provider)));
     }
@@ -180,7 +180,7 @@
     {
         // When the registration is rejected, a register call must not reach
         // the provider.
-        provide(adoptPtr(new NotReachedWebServiceWorkerProvider()));
+        provide(wrapUnique(new NotReachedWebServiceWorkerProvider()));
 
         ServiceWorkerContainer* container = ServiceWorkerContainer::create(getExecutionContext());
         ScriptState::Scope scriptScope(getScriptState());
@@ -194,7 +194,7 @@
 
     void testGetRegistrationRejected(const String& documentURL, const ScriptValueTest& valueTest)
     {
-        provide(adoptPtr(new NotReachedWebServiceWorkerProvider()));
+        provide(wrapUnique(new NotReachedWebServiceWorkerProvider()));
 
         ServiceWorkerContainer* container = ServiceWorkerContainer::create(getExecutionContext());
         ScriptState::Scope scriptScope(getScriptState());
@@ -205,7 +205,7 @@
     }
 
 private:
-    OwnPtr<DummyPageHolder> m_page;
+    std::unique_ptr<DummyPageHolder> m_page;
 };
 
 TEST_F(ServiceWorkerContainerTest, Register_NonSecureOriginIsRejected)
@@ -263,9 +263,9 @@
     // StubWebServiceWorkerProvider, but |registerServiceWorker| and
     // other methods must not be called after the
     // StubWebServiceWorkerProvider dies.
-    PassOwnPtr<WebServiceWorkerProvider> provider()
+    std::unique_ptr<WebServiceWorkerProvider> provider()
     {
-        return adoptPtr(new WebServiceWorkerProviderImpl(*this));
+        return wrapUnique(new WebServiceWorkerProviderImpl(*this));
     }
 
     size_t registerCallCount() { return m_registerCallCount; }
@@ -289,14 +289,14 @@
             m_owner.m_registerCallCount++;
             m_owner.m_registerScope = pattern;
             m_owner.m_registerScriptURL = scriptURL;
-            m_registrationCallbacksToDelete.append(adoptPtr(callbacks));
+            m_registrationCallbacksToDelete.append(wrapUnique(callbacks));
         }
 
         void getRegistration(const WebURL& documentURL, WebServiceWorkerGetRegistrationCallbacks* callbacks) override
         {
             m_owner.m_getRegistrationCallCount++;
             m_owner.m_getRegistrationURL = documentURL;
-            m_getRegistrationCallbacksToDelete.append(adoptPtr(callbacks));
+            m_getRegistrationCallbacksToDelete.append(wrapUnique(callbacks));
         }
 
         bool validateScopeAndScriptURL(const WebURL& scope, const WebURL& scriptURL, WebString* errorMessage)
@@ -306,8 +306,8 @@
 
     private:
         StubWebServiceWorkerProvider& m_owner;
-        Vector<OwnPtr<WebServiceWorkerRegistrationCallbacks>> m_registrationCallbacksToDelete;
-        Vector<OwnPtr<WebServiceWorkerGetRegistrationCallbacks>> m_getRegistrationCallbacksToDelete;
+        Vector<std::unique_ptr<WebServiceWorkerRegistrationCallbacks>> m_registrationCallbacksToDelete;
+        Vector<std::unique_ptr<WebServiceWorkerGetRegistrationCallbacks>> m_getRegistrationCallbacksToDelete;
     };
 
 private:
diff --git a/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerError.h b/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerError.h
index c2054d7b..9145d11 100644
--- a/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerError.h
+++ b/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerError.h
@@ -33,8 +33,6 @@
 
 #include "platform/heap/Handle.h"
 #include "public/platform/modules/serviceworker/WebServiceWorkerError.h"
-#include "wtf/OwnPtr.h"
-#include "wtf/PassOwnPtr.h"
 
 namespace blink {
 
diff --git a/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerGlobalScope.cpp b/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerGlobalScope.cpp
index de78c5e..82d10cd 100644
--- a/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerGlobalScope.cpp
+++ b/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerGlobalScope.cpp
@@ -62,10 +62,12 @@
 #include "public/platform/Platform.h"
 #include "public/platform/WebURL.h"
 #include "wtf/CurrentTime.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
-ServiceWorkerGlobalScope* ServiceWorkerGlobalScope::create(ServiceWorkerThread* thread, PassOwnPtr<WorkerThreadStartupData> startupData)
+ServiceWorkerGlobalScope* ServiceWorkerGlobalScope::create(ServiceWorkerThread* thread, std::unique_ptr<WorkerThreadStartupData> startupData)
 {
     // Note: startupData is finalized on return. After the relevant parts has been
     // passed along to the created 'context'.
@@ -79,7 +81,7 @@
     return context;
 }
 
-ServiceWorkerGlobalScope::ServiceWorkerGlobalScope(const KURL& url, const String& userAgent, ServiceWorkerThread* thread, double timeOrigin, PassOwnPtr<SecurityOrigin::PrivilegeData> starterOriginPrivilegeData, WorkerClients* workerClients)
+ServiceWorkerGlobalScope::ServiceWorkerGlobalScope(const KURL& url, const String& userAgent, ServiceWorkerThread* thread, double timeOrigin, std::unique_ptr<SecurityOrigin::PrivilegeData> starterOriginPrivilegeData, WorkerClients* workerClients)
     : WorkerGlobalScope(url, userAgent, thread, timeOrigin, std::move(starterOriginPrivilegeData), workerClients)
     , m_didEvaluateScript(false)
     , m_hadErrorInTopLevelEventHandler(false)
@@ -142,7 +144,7 @@
 {
     if (!getExecutionContext())
         return;
-    m_registration = ServiceWorkerRegistration::getOrCreate(getExecutionContext(), adoptPtr(handle.release()));
+    m_registration = ServiceWorkerRegistration::getOrCreate(getExecutionContext(), wrapUnique(handle.release()));
 }
 
 bool ServiceWorkerGlobalScope::addEventListenerInternal(const AtomicString& eventType, EventListener* listener, const AddEventListenerOptions& options)
@@ -208,7 +210,7 @@
     return ServiceWorkerScriptCachedMetadataHandler::create(this, scriptURL, metaData);
 }
 
-void ServiceWorkerGlobalScope::logExceptionToConsole(const String& errorMessage, PassOwnPtr<SourceLocation> location)
+void ServiceWorkerGlobalScope::logExceptionToConsole(const String& errorMessage, std::unique_ptr<SourceLocation> location)
 {
     WorkerGlobalScope::logExceptionToConsole(errorMessage, location->clone());
     ConsoleMessage* consoleMessage = ConsoleMessage::create(JSMessageSource, ErrorMessageLevel, errorMessage, std::move(location));
diff --git a/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerGlobalScope.h b/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerGlobalScope.h
index 330860b..7abf63fb 100644
--- a/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerGlobalScope.h
+++ b/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerGlobalScope.h
@@ -37,6 +37,7 @@
 #include "public/platform/modules/serviceworker/WebServiceWorkerRegistration.h"
 #include "wtf/Assertions.h"
 #include "wtf/Forward.h"
+#include <memory>
 
 namespace blink {
 
@@ -55,7 +56,7 @@
 class MODULES_EXPORT ServiceWorkerGlobalScope final : public WorkerGlobalScope {
     DEFINE_WRAPPERTYPEINFO();
 public:
-    static ServiceWorkerGlobalScope* create(ServiceWorkerThread*, PassOwnPtr<WorkerThreadStartupData>);
+    static ServiceWorkerGlobalScope* create(ServiceWorkerThread*, std::unique_ptr<WorkerThreadStartupData>);
 
     ~ServiceWorkerGlobalScope() override;
     bool isServiceWorkerGlobalScope() const override { return true; }
@@ -92,10 +93,10 @@
     bool addEventListenerInternal(const AtomicString& eventType, EventListener*, const AddEventListenerOptions&) override;
 
 private:
-    ServiceWorkerGlobalScope(const KURL&, const String& userAgent, ServiceWorkerThread*, double timeOrigin, PassOwnPtr<SecurityOrigin::PrivilegeData>, WorkerClients*);
+    ServiceWorkerGlobalScope(const KURL&, const String& userAgent, ServiceWorkerThread*, double timeOrigin, std::unique_ptr<SecurityOrigin::PrivilegeData>, WorkerClients*);
     void importScripts(const Vector<String>& urls, ExceptionState&) override;
     CachedMetadataHandler* createWorkerScriptCachedMetadataHandler(const KURL& scriptURL, const Vector<char>* metaData) override;
-    void logExceptionToConsole(const String& errorMessage, PassOwnPtr<SourceLocation>) override;
+    void logExceptionToConsole(const String& errorMessage, std::unique_ptr<SourceLocation>) override;
     void scriptLoaded(size_t scriptSize, size_t cachedMetadataSize) override;
 
     Member<ServiceWorkerClients> m_clients;
diff --git a/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerGlobalScopeClient.h b/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerGlobalScopeClient.h
index 91d839f..8040ac1 100644
--- a/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerGlobalScopeClient.h
+++ b/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerGlobalScopeClient.h
@@ -41,6 +41,7 @@
 #include "public/platform/modules/serviceworker/WebServiceWorkerSkipWaitingCallbacks.h"
 #include "wtf/Forward.h"
 #include "wtf/Noncopyable.h"
+#include <memory>
 
 namespace blink {
 
@@ -79,8 +80,8 @@
     virtual void didHandleNotificationCloseEvent(int eventID, WebServiceWorkerEventResult) = 0;
     virtual void didHandlePushEvent(int pushEventID, WebServiceWorkerEventResult) = 0;
     virtual void didHandleSyncEvent(int syncEventID, WebServiceWorkerEventResult) = 0;
-    virtual void postMessageToClient(const WebString& clientUUID, const WebString& message, PassOwnPtr<WebMessagePortChannelArray>) = 0;
-    virtual void postMessageToCrossOriginClient(const WebCrossOriginServiceWorkerClient&, const WebString& message, PassOwnPtr<WebMessagePortChannelArray>) = 0;
+    virtual void postMessageToClient(const WebString& clientUUID, const WebString& message, std::unique_ptr<WebMessagePortChannelArray>) = 0;
+    virtual void postMessageToCrossOriginClient(const WebCrossOriginServiceWorkerClient&, const WebString& message, std::unique_ptr<WebMessagePortChannelArray>) = 0;
     virtual void skipWaiting(WebServiceWorkerSkipWaitingCallbacks*) = 0;
     virtual void claim(WebServiceWorkerClientsClaimCallbacks*) = 0;
     virtual void focus(const WebString& clientUUID, WebServiceWorkerClientCallbacks*) = 0;
diff --git a/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerLinkResource.cpp b/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerLinkResource.cpp
index 255f515d..effb5e78 100644
--- a/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerLinkResource.cpp
+++ b/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerLinkResource.cpp
@@ -13,6 +13,7 @@
 #include "modules/serviceworkers/ServiceWorkerContainer.h"
 #include "public/platform/Platform.h"
 #include "public/platform/WebScheduler.h"
+#include "wtf/PtrUtil.h"
 
 namespace blink {
 
@@ -72,7 +73,7 @@
 
     TrackExceptionState exceptionState;
 
-    NavigatorServiceWorker::serviceWorker(&document, *document.frame()->domWindow()->navigator(), exceptionState)->registerServiceWorkerImpl(&document, scriptURL, scopeURL, adoptPtr(new RegistrationCallback(m_owner)));
+    NavigatorServiceWorker::serviceWorker(&document, *document.frame()->domWindow()->navigator(), exceptionState)->registerServiceWorkerImpl(&document, scriptURL, scopeURL, wrapUnique(new RegistrationCallback(m_owner)));
 }
 
 bool ServiceWorkerLinkResource::hasLoaded() const
diff --git a/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerLinkResource.h b/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerLinkResource.h
index 5ea5f60..3e372dd 100644
--- a/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerLinkResource.h
+++ b/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerLinkResource.h
@@ -8,7 +8,6 @@
 #include "core/html/LinkResource.h"
 #include "modules/ModulesExport.h"
 #include "wtf/Allocator.h"
-#include "wtf/PassOwnPtr.h"
 #include "wtf/RefPtr.h"
 
 namespace blink {
diff --git a/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerRegistration.cpp b/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerRegistration.cpp
index 6572f6d..1582384 100644
--- a/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerRegistration.cpp
+++ b/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerRegistration.cpp
@@ -15,6 +15,8 @@
 #include "modules/serviceworkers/ServiceWorkerContainerClient.h"
 #include "modules/serviceworkers/ServiceWorkerError.h"
 #include "public/platform/modules/serviceworker/WebServiceWorkerProvider.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
@@ -32,24 +34,24 @@
 {
     if (!getExecutionContext())
         return;
-    m_installing = ServiceWorker::from(getExecutionContext(), adoptPtr(handle.release()));
+    m_installing = ServiceWorker::from(getExecutionContext(), wrapUnique(handle.release()));
 }
 
 void ServiceWorkerRegistration::setWaiting(std::unique_ptr<WebServiceWorker::Handle> handle)
 {
     if (!getExecutionContext())
         return;
-    m_waiting = ServiceWorker::from(getExecutionContext(), adoptPtr(handle.release()));
+    m_waiting = ServiceWorker::from(getExecutionContext(), wrapUnique(handle.release()));
 }
 
 void ServiceWorkerRegistration::setActive(std::unique_ptr<WebServiceWorker::Handle> handle)
 {
     if (!getExecutionContext())
         return;
-    m_active = ServiceWorker::from(getExecutionContext(), adoptPtr(handle.release()));
+    m_active = ServiceWorker::from(getExecutionContext(), wrapUnique(handle.release()));
 }
 
-ServiceWorkerRegistration* ServiceWorkerRegistration::getOrCreate(ExecutionContext* executionContext, PassOwnPtr<WebServiceWorkerRegistration::Handle> handle)
+ServiceWorkerRegistration* ServiceWorkerRegistration::getOrCreate(ExecutionContext* executionContext, std::unique_ptr<WebServiceWorkerRegistration::Handle> handle)
 {
     ASSERT(handle);
 
@@ -93,7 +95,7 @@
     return promise;
 }
 
-ServiceWorkerRegistration::ServiceWorkerRegistration(ExecutionContext* executionContext, PassOwnPtr<WebServiceWorkerRegistration::Handle> handle)
+ServiceWorkerRegistration::ServiceWorkerRegistration(ExecutionContext* executionContext, std::unique_ptr<WebServiceWorkerRegistration::Handle> handle)
     : ActiveScriptWrappable(this)
     , ActiveDOMObject(executionContext)
     , m_handle(std::move(handle))
diff --git a/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerRegistration.h b/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerRegistration.h
index 1368c7e..bff04eb6 100644
--- a/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerRegistration.h
+++ b/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerRegistration.h
@@ -15,7 +15,7 @@
 #include "public/platform/modules/serviceworker/WebServiceWorkerRegistration.h"
 #include "public/platform/modules/serviceworker/WebServiceWorkerRegistrationProxy.h"
 #include "wtf/Forward.h"
-#include "wtf/OwnPtr.h"
+#include <memory>
 
 namespace blink {
 
@@ -48,7 +48,7 @@
 
     // Returns an existing registration object for the handle if it exists.
     // Otherwise, returns a new registration object.
-    static ServiceWorkerRegistration* getOrCreate(ExecutionContext*, PassOwnPtr<WebServiceWorkerRegistration::Handle>);
+    static ServiceWorkerRegistration* getOrCreate(ExecutionContext*, std::unique_ptr<WebServiceWorkerRegistration::Handle>);
 
     ServiceWorker* installing() { return m_installing; }
     ServiceWorker* waiting() { return m_waiting; }
@@ -68,7 +68,7 @@
     DECLARE_VIRTUAL_TRACE();
 
 private:
-    ServiceWorkerRegistration(ExecutionContext*, PassOwnPtr<WebServiceWorkerRegistration::Handle>);
+    ServiceWorkerRegistration(ExecutionContext*, std::unique_ptr<WebServiceWorkerRegistration::Handle>);
     void dispose();
 
     // ActiveScriptWrappable overrides.
@@ -78,7 +78,7 @@
     void stop() override;
 
     // A handle to the registration representation in the embedder.
-    OwnPtr<WebServiceWorkerRegistration::Handle> m_handle;
+    std::unique_ptr<WebServiceWorkerRegistration::Handle> m_handle;
 
     Member<ServiceWorker> m_installing;
     Member<ServiceWorker> m_waiting;
@@ -90,7 +90,7 @@
 class ServiceWorkerRegistrationArray {
     STATIC_ONLY(ServiceWorkerRegistrationArray);
 public:
-    static HeapVector<Member<ServiceWorkerRegistration>> take(ScriptPromiseResolver* resolver, Vector<OwnPtr<WebServiceWorkerRegistration::Handle>>* webServiceWorkerRegistrations)
+    static HeapVector<Member<ServiceWorkerRegistration>> take(ScriptPromiseResolver* resolver, Vector<std::unique_ptr<WebServiceWorkerRegistration::Handle>>* webServiceWorkerRegistrations)
     {
         HeapVector<Member<ServiceWorkerRegistration>> registrations;
         for (auto& registration : *webServiceWorkerRegistrations)
diff --git a/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerScriptCachedMetadataHandler.h b/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerScriptCachedMetadataHandler.h
index a6beb078..45feb02 100644
--- a/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerScriptCachedMetadataHandler.h
+++ b/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerScriptCachedMetadataHandler.h
@@ -8,7 +8,6 @@
 #include "core/fetch/CachedMetadataHandler.h"
 #include "platform/heap/Handle.h"
 #include "platform/weborigin/KURL.h"
-#include "wtf/PassOwnPtr.h"
 #include "wtf/Vector.h"
 
 namespace blink {
diff --git a/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerThread.cpp b/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerThread.cpp
index 933be5c..831291fd 100644
--- a/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerThread.cpp
+++ b/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerThread.cpp
@@ -33,12 +33,14 @@
 #include "core/workers/WorkerBackingThread.h"
 #include "core/workers/WorkerThreadStartupData.h"
 #include "modules/serviceworkers/ServiceWorkerGlobalScope.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
-PassOwnPtr<ServiceWorkerThread> ServiceWorkerThread::create(PassRefPtr<WorkerLoaderProxy> workerLoaderProxy, WorkerReportingProxy& workerReportingProxy)
+std::unique_ptr<ServiceWorkerThread> ServiceWorkerThread::create(PassRefPtr<WorkerLoaderProxy> workerLoaderProxy, WorkerReportingProxy& workerReportingProxy)
 {
-    return adoptPtr(new ServiceWorkerThread(workerLoaderProxy, workerReportingProxy));
+    return wrapUnique(new ServiceWorkerThread(workerLoaderProxy, workerReportingProxy));
 }
 
 ServiceWorkerThread::ServiceWorkerThread(PassRefPtr<WorkerLoaderProxy> workerLoaderProxy, WorkerReportingProxy& workerReportingProxy)
@@ -51,7 +53,7 @@
 {
 }
 
-WorkerGlobalScope* ServiceWorkerThread::createWorkerGlobalScope(PassOwnPtr<WorkerThreadStartupData> startupData)
+WorkerGlobalScope* ServiceWorkerThread::createWorkerGlobalScope(std::unique_ptr<WorkerThreadStartupData> startupData)
 {
     return ServiceWorkerGlobalScope::create(this, std::move(startupData));
 }
diff --git a/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerThread.h b/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerThread.h
index 0a178d4a..7328fbf 100644
--- a/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerThread.h
+++ b/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerThread.h
@@ -33,6 +33,7 @@
 #include "core/frame/csp/ContentSecurityPolicy.h"
 #include "core/workers/WorkerThread.h"
 #include "modules/ModulesExport.h"
+#include <memory>
 
 namespace blink {
 
@@ -40,17 +41,17 @@
 
 class MODULES_EXPORT ServiceWorkerThread final : public WorkerThread {
 public:
-    static PassOwnPtr<ServiceWorkerThread> create(PassRefPtr<WorkerLoaderProxy>, WorkerReportingProxy&);
+    static std::unique_ptr<ServiceWorkerThread> create(PassRefPtr<WorkerLoaderProxy>, WorkerReportingProxy&);
     ~ServiceWorkerThread() override;
 
     WorkerBackingThread& workerBackingThread() override { return *m_workerBackingThread; }
 
 protected:
-    WorkerGlobalScope* createWorkerGlobalScope(PassOwnPtr<WorkerThreadStartupData>) override;
+    WorkerGlobalScope* createWorkerGlobalScope(std::unique_ptr<WorkerThreadStartupData>) override;
 
 private:
     ServiceWorkerThread(PassRefPtr<WorkerLoaderProxy>, WorkerReportingProxy&);
-    OwnPtr<WorkerBackingThread> m_workerBackingThread;
+    std::unique_ptr<WorkerBackingThread> m_workerBackingThread;
 };
 
 } // namespace blink
diff --git a/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerWindowClient.cpp b/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerWindowClient.cpp
index 3bf05a0..5064c5e 100644
--- a/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerWindowClient.cpp
+++ b/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerWindowClient.cpp
@@ -16,10 +16,11 @@
 #include "modules/serviceworkers/ServiceWorkerWindowClientCallback.h"
 #include "public/platform/WebString.h"
 #include "wtf/RefPtr.h"
+#include <memory>
 
 namespace blink {
 
-ServiceWorkerWindowClient* ServiceWorkerWindowClient::take(ScriptPromiseResolver*, PassOwnPtr<WebServiceWorkerClientInfo> webClient)
+ServiceWorkerWindowClient* ServiceWorkerWindowClient::take(ScriptPromiseResolver*, std::unique_ptr<WebServiceWorkerClientInfo> webClient)
 {
     return webClient ? ServiceWorkerWindowClient::create(*webClient) : nullptr;
 }
diff --git a/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerWindowClient.h b/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerWindowClient.h
index c0c714f..8ecc696a 100644
--- a/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerWindowClient.h
+++ b/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerWindowClient.h
@@ -10,8 +10,7 @@
 #include "modules/serviceworkers/ServiceWorkerClient.h"
 #include "platform/heap/Handle.h"
 #include "wtf/Forward.h"
-#include "wtf/OwnPtr.h"
-#include "wtf/PassOwnPtr.h"
+#include <memory>
 
 namespace blink {
 
@@ -22,9 +21,9 @@
     DEFINE_WRAPPERTYPEINFO();
 public:
     // To be used by CallbackPromiseAdapter.
-    using WebType = OwnPtr<WebServiceWorkerClientInfo>;
+    using WebType = std::unique_ptr<WebServiceWorkerClientInfo>;
 
-    static ServiceWorkerWindowClient* take(ScriptPromiseResolver*, PassOwnPtr<WebServiceWorkerClientInfo>);
+    static ServiceWorkerWindowClient* take(ScriptPromiseResolver*, std::unique_ptr<WebServiceWorkerClientInfo>);
 
     static ServiceWorkerWindowClient* create(const WebServiceWorkerClientInfo&);
     ~ServiceWorkerWindowClient() override;
diff --git a/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerWindowClientCallback.cpp b/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerWindowClientCallback.cpp
index 2658542..36a1fab 100644
--- a/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerWindowClientCallback.cpp
+++ b/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerWindowClientCallback.cpp
@@ -8,6 +8,7 @@
 #include "core/dom/DOMException.h"
 #include "modules/serviceworkers/ServiceWorkerError.h"
 #include "modules/serviceworkers/ServiceWorkerWindowClient.h"
+#include "wtf/PtrUtil.h"
 
 namespace blink {
 
@@ -15,7 +16,7 @@
 {
     if (!m_resolver->getExecutionContext() || m_resolver->getExecutionContext()->activeDOMObjectsAreStopped())
         return;
-    m_resolver->resolve(ServiceWorkerWindowClient::take(m_resolver.get(), adoptPtr(clientInfo.release())));
+    m_resolver->resolve(ServiceWorkerWindowClient::take(m_resolver.get(), wrapUnique(clientInfo.release())));
 }
 
 void NavigateClientCallback::onError(const WebServiceWorkerError& error)
diff --git a/third_party/WebKit/Source/modules/speech/SpeechRecognitionClient.h b/third_party/WebKit/Source/modules/speech/SpeechRecognitionClient.h
index 80d6f9b..4fdbe5f 100644
--- a/third_party/WebKit/Source/modules/speech/SpeechRecognitionClient.h
+++ b/third_party/WebKit/Source/modules/speech/SpeechRecognitionClient.h
@@ -28,6 +28,7 @@
 
 #include "modules/ModulesExport.h"
 #include "wtf/text/WTFString.h"
+#include <memory>
 
 namespace blink {
 
@@ -45,7 +46,7 @@
     virtual ~SpeechRecognitionClient() { }
 };
 
-MODULES_EXPORT void provideSpeechRecognitionTo(Page&, PassOwnPtr<SpeechRecognitionClient>);
+MODULES_EXPORT void provideSpeechRecognitionTo(Page&, std::unique_ptr<SpeechRecognitionClient>);
 
 } // namespace blink
 
diff --git a/third_party/WebKit/Source/modules/speech/SpeechRecognitionController.cpp b/third_party/WebKit/Source/modules/speech/SpeechRecognitionController.cpp
index 7867771..ed82c39 100644
--- a/third_party/WebKit/Source/modules/speech/SpeechRecognitionController.cpp
+++ b/third_party/WebKit/Source/modules/speech/SpeechRecognitionController.cpp
@@ -25,6 +25,8 @@
 
 #include "modules/speech/SpeechRecognitionController.h"
 
+#include <memory>
+
 namespace blink {
 
 const char* SpeechRecognitionController::supplementName()
@@ -32,7 +34,7 @@
     return "SpeechRecognitionController";
 }
 
-SpeechRecognitionController::SpeechRecognitionController(PassOwnPtr<SpeechRecognitionClient> client)
+SpeechRecognitionController::SpeechRecognitionController(std::unique_ptr<SpeechRecognitionClient> client)
     : m_client(std::move(client))
 {
 }
@@ -42,12 +44,12 @@
     // FIXME: Call m_client->pageDestroyed(); once we have implemented a client.
 }
 
-SpeechRecognitionController* SpeechRecognitionController::create(PassOwnPtr<SpeechRecognitionClient> client)
+SpeechRecognitionController* SpeechRecognitionController::create(std::unique_ptr<SpeechRecognitionClient> client)
 {
     return new SpeechRecognitionController(std::move(client));
 }
 
-void provideSpeechRecognitionTo(Page& page, PassOwnPtr<SpeechRecognitionClient> client)
+void provideSpeechRecognitionTo(Page& page, std::unique_ptr<SpeechRecognitionClient> client)
 {
     SpeechRecognitionController::provideTo(page, SpeechRecognitionController::supplementName(), SpeechRecognitionController::create(std::move(client)));
 }
diff --git a/third_party/WebKit/Source/modules/speech/SpeechRecognitionController.h b/third_party/WebKit/Source/modules/speech/SpeechRecognitionController.h
index 6eced0e..68971af 100644
--- a/third_party/WebKit/Source/modules/speech/SpeechRecognitionController.h
+++ b/third_party/WebKit/Source/modules/speech/SpeechRecognitionController.h
@@ -28,7 +28,7 @@
 
 #include "core/page/Page.h"
 #include "modules/speech/SpeechRecognitionClient.h"
-#include "wtf/PassOwnPtr.h"
+#include <memory>
 
 namespace blink {
 
@@ -47,16 +47,16 @@
     void stop(SpeechRecognition* recognition) { m_client->stop(recognition); }
     void abort(SpeechRecognition* recognition) { m_client->abort(recognition); }
 
-    static SpeechRecognitionController* create(PassOwnPtr<SpeechRecognitionClient>);
+    static SpeechRecognitionController* create(std::unique_ptr<SpeechRecognitionClient>);
     static const char* supplementName();
     static SpeechRecognitionController* from(Page* page) { return static_cast<SpeechRecognitionController*>(Supplement<Page>::from(page, supplementName())); }
 
     DEFINE_INLINE_VIRTUAL_TRACE() { Supplement<Page>::trace(visitor); }
 
 private:
-    explicit SpeechRecognitionController(PassOwnPtr<SpeechRecognitionClient>);
+    explicit SpeechRecognitionController(std::unique_ptr<SpeechRecognitionClient>);
 
-    OwnPtr<SpeechRecognitionClient> m_client;
+    std::unique_ptr<SpeechRecognitionClient> m_client;
 };
 
 } // namespace blink
diff --git a/third_party/WebKit/Source/modules/storage/InspectorDOMStorageAgent.h b/third_party/WebKit/Source/modules/storage/InspectorDOMStorageAgent.h
index 34b7370..13d50e5 100644
--- a/third_party/WebKit/Source/modules/storage/InspectorDOMStorageAgent.h
+++ b/third_party/WebKit/Source/modules/storage/InspectorDOMStorageAgent.h
@@ -34,7 +34,6 @@
 #include "modules/ModulesExport.h"
 #include "modules/storage/StorageArea.h"
 #include "wtf/HashMap.h"
-#include "wtf/PassOwnPtr.h"
 #include "wtf/text/WTFString.h"
 
 namespace blink {
diff --git a/third_party/WebKit/Source/modules/storage/Storage.cpp b/third_party/WebKit/Source/modules/storage/Storage.cpp
index 06bb4ecb..323111b 100644
--- a/third_party/WebKit/Source/modules/storage/Storage.cpp
+++ b/third_party/WebKit/Source/modules/storage/Storage.cpp
@@ -26,7 +26,6 @@
 #include "modules/storage/Storage.h"
 
 #include "bindings/core/v8/ExceptionState.h"
-#include "wtf/PassOwnPtr.h"
 #include "wtf/PassRefPtr.h"
 #include "wtf/text/WTFString.h"
 
diff --git a/third_party/WebKit/Source/modules/storage/StorageArea.cpp b/third_party/WebKit/Source/modules/storage/StorageArea.cpp
index ca5f398..7447f5b 100644
--- a/third_party/WebKit/Source/modules/storage/StorageArea.cpp
+++ b/third_party/WebKit/Source/modules/storage/StorageArea.cpp
@@ -43,15 +43,16 @@
 #include "public/platform/WebStorageArea.h"
 #include "public/platform/WebString.h"
 #include "public/platform/WebURL.h"
+#include <memory>
 
 namespace blink {
 
-StorageArea* StorageArea::create(PassOwnPtr<WebStorageArea> storageArea, StorageType storageType)
+StorageArea* StorageArea::create(std::unique_ptr<WebStorageArea> storageArea, StorageType storageType)
 {
     return new StorageArea(std::move(storageArea), storageType);
 }
 
-StorageArea::StorageArea(PassOwnPtr<WebStorageArea> storageArea, StorageType storageType)
+StorageArea::StorageArea(std::unique_ptr<WebStorageArea> storageArea, StorageType storageType)
     : LocalFrameLifecycleObserver(nullptr)
     , m_storageArea(std::move(storageArea))
     , m_storageType(storageType)
@@ -209,7 +210,7 @@
 {
     ASSERT(storage);
     StorageArea* area = storage->area();
-    return area->m_storageArea == sourceAreaInstance;
+    return area->m_storageArea.get() == sourceAreaInstance;
 }
 
 } // namespace blink
diff --git a/third_party/WebKit/Source/modules/storage/StorageArea.h b/third_party/WebKit/Source/modules/storage/StorageArea.h
index 406012a8..3f28860 100644
--- a/third_party/WebKit/Source/modules/storage/StorageArea.h
+++ b/third_party/WebKit/Source/modules/storage/StorageArea.h
@@ -29,9 +29,8 @@
 #include "core/frame/LocalFrameLifecycleObserver.h"
 #include "modules/ModulesExport.h"
 #include "platform/heap/Handle.h"
-#include "wtf/OwnPtr.h"
-#include "wtf/PassOwnPtr.h"
 #include "wtf/text/WTFString.h"
+#include <memory>
 
 namespace blink {
 
@@ -51,7 +50,7 @@
 class MODULES_EXPORT StorageArea final : public GarbageCollectedFinalized<StorageArea>, public LocalFrameLifecycleObserver {
     USING_GARBAGE_COLLECTED_MIXIN(StorageArea);
 public:
-    static StorageArea* create(PassOwnPtr<WebStorageArea>, StorageType);
+    static StorageArea* create(std::unique_ptr<WebStorageArea>, StorageType);
 
     virtual ~StorageArea();
 
@@ -74,11 +73,11 @@
     DECLARE_TRACE();
 
 private:
-    StorageArea(PassOwnPtr<WebStorageArea>, StorageType);
+    StorageArea(std::unique_ptr<WebStorageArea>, StorageType);
 
     static bool isEventSource(Storage*, WebStorageArea* sourceAreaInstance);
 
-    OwnPtr<WebStorageArea> m_storageArea;
+    std::unique_ptr<WebStorageArea> m_storageArea;
     StorageType m_storageType;
     bool m_canAccessStorageCachedResult;
 };
diff --git a/third_party/WebKit/Source/modules/storage/StorageClient.h b/third_party/WebKit/Source/modules/storage/StorageClient.h
index ef98e4a1..ef26ffec 100644
--- a/third_party/WebKit/Source/modules/storage/StorageClient.h
+++ b/third_party/WebKit/Source/modules/storage/StorageClient.h
@@ -6,7 +6,7 @@
 #define StorageClient_h
 
 #include "modules/storage/StorageArea.h"
-#include "wtf/PassOwnPtr.h"
+#include <memory>
 
 namespace blink {
 
@@ -16,7 +16,7 @@
 public:
     virtual ~StorageClient() { }
 
-    virtual PassOwnPtr<StorageNamespace> createSessionStorageNamespace() = 0;
+    virtual std::unique_ptr<StorageNamespace> createSessionStorageNamespace() = 0;
     virtual bool canAccessStorage(LocalFrame*, StorageType) const = 0;
 };
 
diff --git a/third_party/WebKit/Source/modules/storage/StorageNamespace.cpp b/third_party/WebKit/Source/modules/storage/StorageNamespace.cpp
index 60f68693..1ad21f84 100644
--- a/third_party/WebKit/Source/modules/storage/StorageNamespace.cpp
+++ b/third_party/WebKit/Source/modules/storage/StorageNamespace.cpp
@@ -30,10 +30,12 @@
 #include "public/platform/Platform.h"
 #include "public/platform/WebStorageArea.h"
 #include "public/platform/WebStorageNamespace.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
-StorageNamespace::StorageNamespace(PassOwnPtr<WebStorageNamespace> webStorageNamespace)
+StorageNamespace::StorageNamespace(std::unique_ptr<WebStorageNamespace> webStorageNamespace)
     : m_webStorageNamespace(std::move(webStorageNamespace))
 {
 }
@@ -48,12 +50,12 @@
     static WebStorageNamespace* localStorageNamespace = nullptr;
     if (!localStorageNamespace)
         localStorageNamespace = Platform::current()->createLocalStorageNamespace();
-    return StorageArea::create(adoptPtr(localStorageNamespace->createStorageArea(origin->toString())), LocalStorage);
+    return StorageArea::create(wrapUnique(localStorageNamespace->createStorageArea(origin->toString())), LocalStorage);
 }
 
 StorageArea* StorageNamespace::storageArea(SecurityOrigin* origin)
 {
-    return StorageArea::create(adoptPtr(m_webStorageNamespace->createStorageArea(origin->toString())), SessionStorage);
+    return StorageArea::create(wrapUnique(m_webStorageNamespace->createStorageArea(origin->toString())), SessionStorage);
 }
 
 bool StorageNamespace::isSameNamespace(const WebStorageNamespace& sessionNamespace) const
diff --git a/third_party/WebKit/Source/modules/storage/StorageNamespace.h b/third_party/WebKit/Source/modules/storage/StorageNamespace.h
index 1161c6e..48565ba 100644
--- a/third_party/WebKit/Source/modules/storage/StorageNamespace.h
+++ b/third_party/WebKit/Source/modules/storage/StorageNamespace.h
@@ -28,8 +28,7 @@
 
 #include "modules/ModulesExport.h"
 #include "platform/heap/Handle.h"
-#include "wtf/OwnPtr.h"
-#include "wtf/PassOwnPtr.h"
+#include <memory>
 
 namespace blink {
 
@@ -40,7 +39,7 @@
 class MODULES_EXPORT StorageNamespace {
     USING_FAST_MALLOC(StorageNamespace);
 public:
-    explicit StorageNamespace(PassOwnPtr<WebStorageNamespace>);
+    explicit StorageNamespace(std::unique_ptr<WebStorageNamespace>);
     ~StorageNamespace();
 
     static StorageArea* localStorageArea(SecurityOrigin*);
@@ -49,7 +48,7 @@
     bool isSameNamespace(const WebStorageNamespace& sessionNamespace) const;
 
 private:
-    OwnPtr<WebStorageNamespace> m_webStorageNamespace;
+    std::unique_ptr<WebStorageNamespace> m_webStorageNamespace;
 };
 
 } // namespace blink
diff --git a/third_party/WebKit/Source/modules/storage/StorageNamespaceController.h b/third_party/WebKit/Source/modules/storage/StorageNamespaceController.h
index 8ac6cb08..b0deffaf 100644
--- a/third_party/WebKit/Source/modules/storage/StorageNamespaceController.h
+++ b/third_party/WebKit/Source/modules/storage/StorageNamespaceController.h
@@ -8,7 +8,7 @@
 #include "core/page/Page.h"
 #include "modules/ModulesExport.h"
 #include "platform/Supplementable.h"
-#include "wtf/PassOwnPtr.h"
+#include <memory>
 
 namespace blink {
 
@@ -33,7 +33,7 @@
 private:
     explicit StorageNamespaceController(StorageClient*);
     static const char* supplementName();
-    OwnPtr<StorageNamespace> m_sessionStorage;
+    std::unique_ptr<StorageNamespace> m_sessionStorage;
     StorageClient* m_client;
     Member<InspectorDOMStorageAgent> m_inspectorAgent;
 };
diff --git a/third_party/WebKit/Source/modules/webaudio/AsyncAudioDecoder.cpp b/third_party/WebKit/Source/modules/webaudio/AsyncAudioDecoder.cpp
index 0bc7237..e0aa660 100644
--- a/third_party/WebKit/Source/modules/webaudio/AsyncAudioDecoder.cpp
+++ b/third_party/WebKit/Source/modules/webaudio/AsyncAudioDecoder.cpp
@@ -22,9 +22,9 @@
  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-#include "modules/webaudio/AsyncAudioDecoder.h"
 #include "core/dom/DOMArrayBuffer.h"
 #include "modules/webaudio/AbstractAudioContext.h"
+#include "modules/webaudio/AsyncAudioDecoder.h"
 #include "modules/webaudio/AudioBuffer.h"
 #include "modules/webaudio/AudioBufferCallback.h"
 #include "platform/ThreadSafeFunctional.h"
@@ -32,12 +32,12 @@
 #include "platform/audio/AudioFileReader.h"
 #include "public/platform/Platform.h"
 #include "public/platform/WebTraceLocation.h"
-#include "wtf/PassOwnPtr.h"
+#include "wtf/PtrUtil.h"
 
 namespace blink {
 
 AsyncAudioDecoder::AsyncAudioDecoder()
-    : m_thread(adoptPtr(Platform::current()->createThread("Audio Decoder")))
+    : m_thread(wrapUnique(Platform::current()->createThread("Audio Decoder")))
 {
 }
 
diff --git a/third_party/WebKit/Source/modules/webaudio/AsyncAudioDecoder.h b/third_party/WebKit/Source/modules/webaudio/AsyncAudioDecoder.h
index 859e59f3..b05694c 100644
--- a/third_party/WebKit/Source/modules/webaudio/AsyncAudioDecoder.h
+++ b/third_party/WebKit/Source/modules/webaudio/AsyncAudioDecoder.h
@@ -27,8 +27,8 @@
 
 #include "platform/heap/Handle.h"
 #include "public/platform/WebThread.h"
-#include "wtf/OwnPtr.h"
 #include "wtf/build_config.h"
+#include <memory>
 
 namespace blink {
 
@@ -59,7 +59,7 @@
     static void decode(DOMArrayBuffer* audioData, float sampleRate, AudioBufferCallback* successCallback, AudioBufferCallback* errorCallback, ScriptPromiseResolver*, AbstractAudioContext*);
     static void notifyComplete(DOMArrayBuffer* audioData, AudioBufferCallback* successCallback, AudioBufferCallback* errorCallback, AudioBus*, ScriptPromiseResolver*, AbstractAudioContext*);
 
-    OwnPtr<WebThread> m_thread;
+    std::unique_ptr<WebThread> m_thread;
 };
 
 } // namespace blink
diff --git a/third_party/WebKit/Source/modules/webaudio/AudioBasicProcessorHandler.cpp b/third_party/WebKit/Source/modules/webaudio/AudioBasicProcessorHandler.cpp
index 9e6cc6a..2d7a126 100644
--- a/third_party/WebKit/Source/modules/webaudio/AudioBasicProcessorHandler.cpp
+++ b/third_party/WebKit/Source/modules/webaudio/AudioBasicProcessorHandler.cpp
@@ -27,10 +27,11 @@
 #include "modules/webaudio/AudioNodeOutput.h"
 #include "platform/audio/AudioBus.h"
 #include "platform/audio/AudioProcessor.h"
+#include <memory>
 
 namespace blink {
 
-AudioBasicProcessorHandler::AudioBasicProcessorHandler(NodeType nodeType, AudioNode& node, float sampleRate, PassOwnPtr<AudioProcessor> processor)
+AudioBasicProcessorHandler::AudioBasicProcessorHandler(NodeType nodeType, AudioNode& node, float sampleRate, std::unique_ptr<AudioProcessor> processor)
     : AudioHandler(nodeType, node, sampleRate)
     , m_processor(std::move(processor))
 {
@@ -38,7 +39,7 @@
     addOutput(1);
 }
 
-PassRefPtr<AudioBasicProcessorHandler> AudioBasicProcessorHandler::create(NodeType nodeType, AudioNode& node, float sampleRate, PassOwnPtr<AudioProcessor> processor)
+PassRefPtr<AudioBasicProcessorHandler> AudioBasicProcessorHandler::create(NodeType nodeType, AudioNode& node, float sampleRate, std::unique_ptr<AudioProcessor> processor)
 {
     return adoptRef(new AudioBasicProcessorHandler(nodeType, node, sampleRate, std::move(processor)));
 }
diff --git a/third_party/WebKit/Source/modules/webaudio/AudioBasicProcessorHandler.h b/third_party/WebKit/Source/modules/webaudio/AudioBasicProcessorHandler.h
index 2b8ab3d77..46677685 100644
--- a/third_party/WebKit/Source/modules/webaudio/AudioBasicProcessorHandler.h
+++ b/third_party/WebKit/Source/modules/webaudio/AudioBasicProcessorHandler.h
@@ -28,6 +28,7 @@
 #include "modules/ModulesExport.h"
 #include "modules/webaudio/AudioNode.h"
 #include "wtf/Forward.h"
+#include <memory>
 
 namespace blink {
 
@@ -38,7 +39,7 @@
 // where the input and output have the same number of channels.
 class MODULES_EXPORT AudioBasicProcessorHandler : public AudioHandler {
 public:
-    static PassRefPtr<AudioBasicProcessorHandler> create(NodeType, AudioNode&, float sampleRate, PassOwnPtr<AudioProcessor>);
+    static PassRefPtr<AudioBasicProcessorHandler> create(NodeType, AudioNode&, float sampleRate, std::unique_ptr<AudioProcessor>);
     ~AudioBasicProcessorHandler() override;
 
     // AudioHandler
@@ -55,11 +56,11 @@
     AudioProcessor* processor() { return m_processor.get(); }
 
 private:
-    AudioBasicProcessorHandler(NodeType, AudioNode&, float sampleRate, PassOwnPtr<AudioProcessor>);
+    AudioBasicProcessorHandler(NodeType, AudioNode&, float sampleRate, std::unique_ptr<AudioProcessor>);
     double tailTime() const final;
     double latencyTime() const final;
 
-    OwnPtr<AudioProcessor> m_processor;
+    std::unique_ptr<AudioProcessor> m_processor;
 };
 
 } // namespace blink
diff --git a/third_party/WebKit/Source/modules/webaudio/AudioBasicProcessorHandlerTest.cpp b/third_party/WebKit/Source/modules/webaudio/AudioBasicProcessorHandlerTest.cpp
index 612c176..535d1a1 100644
--- a/third_party/WebKit/Source/modules/webaudio/AudioBasicProcessorHandlerTest.cpp
+++ b/third_party/WebKit/Source/modules/webaudio/AudioBasicProcessorHandlerTest.cpp
@@ -2,11 +2,13 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "modules/webaudio/AudioBasicProcessorHandler.h"
 #include "core/testing/DummyPageHolder.h"
+#include "modules/webaudio/AudioBasicProcessorHandler.h"
 #include "modules/webaudio/OfflineAudioContext.h"
 #include "platform/audio/AudioProcessor.h"
 #include "testing/gtest/include/gtest/gtest.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
@@ -28,14 +30,14 @@
     MockProcessorNode(AbstractAudioContext& context)
         : AudioNode(context)
     {
-        setHandler(AudioBasicProcessorHandler::create(AudioHandler::NodeTypeWaveShaper, *this, 48000, adoptPtr(new MockAudioProcessor())));
+        setHandler(AudioBasicProcessorHandler::create(AudioHandler::NodeTypeWaveShaper, *this, 48000, wrapUnique(new MockAudioProcessor())));
         handler().initialize();
     }
 };
 
 TEST(AudioBasicProcessorHandlerTest, ProcessorFinalization)
 {
-    OwnPtr<DummyPageHolder> page = DummyPageHolder::create();
+    std::unique_ptr<DummyPageHolder> page = DummyPageHolder::create();
     OfflineAudioContext* context = OfflineAudioContext::create(&page->document(), 2, 1, 48000, ASSERT_NO_EXCEPTION);
     MockProcessorNode* node = new MockProcessorNode(*context);
     AudioBasicProcessorHandler& handler = static_cast<AudioBasicProcessorHandler&>(node->handler());
diff --git a/third_party/WebKit/Source/modules/webaudio/AudioBufferSourceNode.cpp b/third_party/WebKit/Source/modules/webaudio/AudioBufferSourceNode.cpp
index bb0d054..f660a33 100644
--- a/third_party/WebKit/Source/modules/webaudio/AudioBufferSourceNode.cpp
+++ b/third_party/WebKit/Source/modules/webaudio/AudioBufferSourceNode.cpp
@@ -22,16 +22,17 @@
  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-#include "modules/webaudio/AudioBufferSourceNode.h"
 #include "bindings/core/v8/ExceptionMessages.h"
 #include "bindings/core/v8/ExceptionState.h"
 #include "core/dom/ExceptionCode.h"
 #include "core/frame/UseCounter.h"
 #include "modules/webaudio/AbstractAudioContext.h"
+#include "modules/webaudio/AudioBufferSourceNode.h"
 #include "modules/webaudio/AudioNodeOutput.h"
 #include "platform/FloatConversion.h"
 #include "platform/audio/AudioUtilities.h"
 #include "wtf/MathExtras.h"
+#include "wtf/PtrUtil.h"
 #include <algorithm>
 
 namespace blink {
@@ -369,8 +370,8 @@
 
         output(0).setNumberOfChannels(numberOfChannels);
 
-        m_sourceChannels = adoptArrayPtr(new const float* [numberOfChannels]);
-        m_destinationChannels = adoptArrayPtr(new float* [numberOfChannels]);
+        m_sourceChannels = wrapArrayUnique(new const float* [numberOfChannels]);
+        m_destinationChannels = wrapArrayUnique(new float* [numberOfChannels]);
 
         for (unsigned i = 0; i < numberOfChannels; ++i)
             m_sourceChannels[i] = buffer->getChannelData(i)->data();
diff --git a/third_party/WebKit/Source/modules/webaudio/AudioBufferSourceNode.h b/third_party/WebKit/Source/modules/webaudio/AudioBufferSourceNode.h
index 35f1c1e4..70de4a2 100644
--- a/third_party/WebKit/Source/modules/webaudio/AudioBufferSourceNode.h
+++ b/third_party/WebKit/Source/modules/webaudio/AudioBufferSourceNode.h
@@ -30,10 +30,10 @@
 #include "modules/webaudio/AudioScheduledSourceNode.h"
 #include "modules/webaudio/PannerNode.h"
 #include "platform/audio/AudioBus.h"
-#include "wtf/OwnPtr.h"
 #include "wtf/PassRefPtr.h"
 #include "wtf/RefPtr.h"
 #include "wtf/Threading.h"
+#include <memory>
 
 namespace blink {
 
@@ -103,8 +103,8 @@
     Persistent<AudioBuffer> m_buffer;
 
     // Pointers for the buffer and destination.
-    OwnPtr<const float*[]> m_sourceChannels;
-    OwnPtr<float*[]> m_destinationChannels;
+    std::unique_ptr<const float*[]> m_sourceChannels;
+    std::unique_ptr<float*[]> m_destinationChannels;
 
     RefPtr<AudioParamHandler> m_playbackRate;
     RefPtr<AudioParamHandler> m_detune;
diff --git a/third_party/WebKit/Source/modules/webaudio/AudioNode.h b/third_party/WebKit/Source/modules/webaudio/AudioNode.h
index 15a3bd5..9d7fda8 100644
--- a/third_party/WebKit/Source/modules/webaudio/AudioNode.h
+++ b/third_party/WebKit/Source/modules/webaudio/AudioNode.h
@@ -29,12 +29,11 @@
 #include "modules/ModulesExport.h"
 #include "platform/audio/AudioBus.h"
 #include "wtf/Forward.h"
-#include "wtf/OwnPtr.h"
-#include "wtf/PassOwnPtr.h"
 #include "wtf/RefPtr.h"
 #include "wtf/ThreadSafeRefCounted.h"
 #include "wtf/Vector.h"
 #include "wtf/build_config.h"
+#include <memory>
 
 #define DEBUG_AUDIONODE_REFERENCES 0
 
@@ -252,8 +251,8 @@
     UntracedMember<AbstractAudioContext> m_context;
 
     float m_sampleRate;
-    Vector<OwnPtr<AudioNodeInput>> m_inputs;
-    Vector<OwnPtr<AudioNodeOutput>> m_outputs;
+    Vector<std::unique_ptr<AudioNodeInput>> m_inputs;
+    Vector<std::unique_ptr<AudioNodeOutput>> m_outputs;
 
     double m_lastProcessingTime;
     double m_lastNonSilentTime;
diff --git a/third_party/WebKit/Source/modules/webaudio/AudioNodeInput.cpp b/third_party/WebKit/Source/modules/webaudio/AudioNodeInput.cpp
index a6af8e30..090af4fb 100644
--- a/third_party/WebKit/Source/modules/webaudio/AudioNodeInput.cpp
+++ b/third_party/WebKit/Source/modules/webaudio/AudioNodeInput.cpp
@@ -24,7 +24,9 @@
 
 #include "modules/webaudio/AudioNodeInput.h"
 #include "modules/webaudio/AudioNodeOutput.h"
+#include "wtf/PtrUtil.h"
 #include <algorithm>
+#include <memory>
 
 namespace blink {
 
@@ -36,9 +38,9 @@
     m_internalSummingBus = AudioBus::create(1, AudioHandler::ProcessingSizeInFrames);
 }
 
-PassOwnPtr<AudioNodeInput> AudioNodeInput::create(AudioHandler& handler)
+std::unique_ptr<AudioNodeInput> AudioNodeInput::create(AudioHandler& handler)
 {
-    return adoptPtr(new AudioNodeInput(handler));
+    return wrapUnique(new AudioNodeInput(handler));
 }
 
 void AudioNodeInput::connect(AudioNodeOutput& output)
diff --git a/third_party/WebKit/Source/modules/webaudio/AudioNodeInput.h b/third_party/WebKit/Source/modules/webaudio/AudioNodeInput.h
index c790d9ae..3af2208 100644
--- a/third_party/WebKit/Source/modules/webaudio/AudioNodeInput.h
+++ b/third_party/WebKit/Source/modules/webaudio/AudioNodeInput.h
@@ -30,6 +30,7 @@
 #include "platform/audio/AudioBus.h"
 #include "wtf/Allocator.h"
 #include "wtf/HashSet.h"
+#include <memory>
 
 namespace blink {
 
@@ -42,7 +43,7 @@
 class AudioNodeInput final : public AudioSummingJunction {
     USING_FAST_MALLOC(AudioNodeInput);
 public:
-    static PassOwnPtr<AudioNodeInput> create(AudioHandler&);
+    static std::unique_ptr<AudioNodeInput> create(AudioHandler&);
 
     // AudioSummingJunction
     void didUpdate() override;
diff --git a/third_party/WebKit/Source/modules/webaudio/AudioNodeOutput.cpp b/third_party/WebKit/Source/modules/webaudio/AudioNodeOutput.cpp
index 1bc384d6..ed17124 100644
--- a/third_party/WebKit/Source/modules/webaudio/AudioNodeOutput.cpp
+++ b/third_party/WebKit/Source/modules/webaudio/AudioNodeOutput.cpp
@@ -22,10 +22,12 @@
  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-#include "modules/webaudio/AudioNodeOutput.h"
 #include "modules/webaudio/AbstractAudioContext.h"
 #include "modules/webaudio/AudioNodeInput.h"
+#include "modules/webaudio/AudioNodeOutput.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/Threading.h"
+#include <memory>
 
 namespace blink {
 
@@ -46,9 +48,9 @@
     m_internalBus = AudioBus::create(numberOfChannels, AudioHandler::ProcessingSizeInFrames);
 }
 
-PassOwnPtr<AudioNodeOutput> AudioNodeOutput::create(AudioHandler* handler, unsigned numberOfChannels)
+std::unique_ptr<AudioNodeOutput> AudioNodeOutput::create(AudioHandler* handler, unsigned numberOfChannels)
 {
-    return adoptPtr(new AudioNodeOutput(handler, numberOfChannels));
+    return wrapUnique(new AudioNodeOutput(handler, numberOfChannels));
 }
 
 void AudioNodeOutput::dispose()
diff --git a/third_party/WebKit/Source/modules/webaudio/AudioNodeOutput.h b/third_party/WebKit/Source/modules/webaudio/AudioNodeOutput.h
index ebddbff..8fe931c 100644
--- a/third_party/WebKit/Source/modules/webaudio/AudioNodeOutput.h
+++ b/third_party/WebKit/Source/modules/webaudio/AudioNodeOutput.h
@@ -30,6 +30,7 @@
 #include "platform/audio/AudioBus.h"
 #include "wtf/HashSet.h"
 #include "wtf/RefPtr.h"
+#include <memory>
 
 namespace blink {
 
@@ -42,7 +43,7 @@
 public:
     // It's OK to pass 0 for numberOfChannels in which case
     // setNumberOfChannels() must be called later on.
-    static PassOwnPtr<AudioNodeOutput> create(AudioHandler*, unsigned numberOfChannels);
+    static std::unique_ptr<AudioNodeOutput> create(AudioHandler*, unsigned numberOfChannels);
     void dispose();
 
     // Causes our AudioNode to process if it hasn't already for this render quantum.
diff --git a/third_party/WebKit/Source/modules/webaudio/BiquadFilterNode.cpp b/third_party/WebKit/Source/modules/webaudio/BiquadFilterNode.cpp
index 68a13022..7053583 100644
--- a/third_party/WebKit/Source/modules/webaudio/BiquadFilterNode.cpp
+++ b/third_party/WebKit/Source/modules/webaudio/BiquadFilterNode.cpp
@@ -23,8 +23,10 @@
  */
 
 #include "modules/webaudio/BiquadFilterNode.h"
+
 #include "modules/webaudio/AudioBasicProcessorHandler.h"
 #include "platform/Histogram.h"
+#include "wtf/PtrUtil.h"
 
 namespace blink {
 
@@ -39,7 +41,7 @@
         AudioHandler::NodeTypeBiquadFilter,
         *this,
         context.sampleRate(),
-        adoptPtr(new BiquadProcessor(
+        wrapUnique(new BiquadProcessor(
             context.sampleRate(),
             1,
             m_frequency->handler(),
diff --git a/third_party/WebKit/Source/modules/webaudio/BiquadProcessor.cpp b/third_party/WebKit/Source/modules/webaudio/BiquadProcessor.cpp
index 110dff4..a665e78b 100644
--- a/third_party/WebKit/Source/modules/webaudio/BiquadProcessor.cpp
+++ b/third_party/WebKit/Source/modules/webaudio/BiquadProcessor.cpp
@@ -22,8 +22,10 @@
  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-#include "modules/webaudio/BiquadProcessor.h"
 #include "modules/webaudio/BiquadDSPKernel.h"
+#include "modules/webaudio/BiquadProcessor.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
@@ -45,9 +47,9 @@
         uninitialize();
 }
 
-PassOwnPtr<AudioDSPKernel> BiquadProcessor::createKernel()
+std::unique_ptr<AudioDSPKernel> BiquadProcessor::createKernel()
 {
-    return adoptPtr(new BiquadDSPKernel(this));
+    return wrapUnique(new BiquadDSPKernel(this));
 }
 
 void BiquadProcessor::checkForDirtyCoefficients()
@@ -110,7 +112,7 @@
     // to avoid interfering with the processing running in the audio
     // thread on the main kernels.
 
-    OwnPtr<BiquadDSPKernel> responseKernel = adoptPtr(new BiquadDSPKernel(this));
+    std::unique_ptr<BiquadDSPKernel> responseKernel = wrapUnique(new BiquadDSPKernel(this));
     responseKernel->getFrequencyResponse(nFrequencies, frequencyHz, magResponse, phaseResponse);
 }
 
diff --git a/third_party/WebKit/Source/modules/webaudio/BiquadProcessor.h b/third_party/WebKit/Source/modules/webaudio/BiquadProcessor.h
index c9d29e2..13fe5bb 100644
--- a/third_party/WebKit/Source/modules/webaudio/BiquadProcessor.h
+++ b/third_party/WebKit/Source/modules/webaudio/BiquadProcessor.h
@@ -31,6 +31,7 @@
 #include "platform/audio/AudioDSPKernelProcessor.h"
 #include "platform/audio/Biquad.h"
 #include "wtf/RefPtr.h"
+#include <memory>
 
 namespace blink {
 
@@ -53,7 +54,7 @@
     BiquadProcessor(float sampleRate, size_t numberOfChannels, AudioParamHandler& frequency, AudioParamHandler& q, AudioParamHandler& gain, AudioParamHandler& detune);
     ~BiquadProcessor() override;
 
-    PassOwnPtr<AudioDSPKernel> createKernel() override;
+    std::unique_ptr<AudioDSPKernel> createKernel() override;
 
     void process(const AudioBus* source, AudioBus* destination, size_t framesToProcess) override;
 
diff --git a/third_party/WebKit/Source/modules/webaudio/ConvolverNode.cpp b/third_party/WebKit/Source/modules/webaudio/ConvolverNode.cpp
index 3413e7a..dee1806 100644
--- a/third_party/WebKit/Source/modules/webaudio/ConvolverNode.cpp
+++ b/third_party/WebKit/Source/modules/webaudio/ConvolverNode.cpp
@@ -22,13 +22,15 @@
  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-#include "modules/webaudio/ConvolverNode.h"
 #include "bindings/core/v8/ExceptionState.h"
 #include "core/dom/ExceptionCode.h"
 #include "modules/webaudio/AudioBuffer.h"
 #include "modules/webaudio/AudioNodeInput.h"
 #include "modules/webaudio/AudioNodeOutput.h"
+#include "modules/webaudio/ConvolverNode.h"
 #include "platform/audio/Reverb.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 // Note about empirical tuning:
 // The maximum FFT size affects reverb performance and accuracy.
@@ -127,7 +129,7 @@
     bufferBus->setSampleRate(buffer->sampleRate());
 
     // Create the reverb with the given impulse response.
-    OwnPtr<Reverb> reverb = adoptPtr(new Reverb(bufferBus.get(), ProcessingSizeInFrames, MaxFFTSize, 2, context() && context()->hasRealtimeConstraint(), m_normalize));
+    std::unique_ptr<Reverb> reverb = wrapUnique(new Reverb(bufferBus.get(), ProcessingSizeInFrames, MaxFFTSize, 2, context() && context()->hasRealtimeConstraint(), m_normalize));
 
     {
         // Synchronize with process().
diff --git a/third_party/WebKit/Source/modules/webaudio/ConvolverNode.h b/third_party/WebKit/Source/modules/webaudio/ConvolverNode.h
index 294fde6..d27be4e 100644
--- a/third_party/WebKit/Source/modules/webaudio/ConvolverNode.h
+++ b/third_party/WebKit/Source/modules/webaudio/ConvolverNode.h
@@ -28,9 +28,9 @@
 #include "base/gtest_prod_util.h"
 #include "modules/ModulesExport.h"
 #include "modules/webaudio/AudioNode.h"
-#include "wtf/OwnPtr.h"
 #include "wtf/RefPtr.h"
 #include "wtf/ThreadingPrimitives.h"
+#include <memory>
 
 namespace blink {
 
@@ -58,7 +58,7 @@
     double tailTime() const override;
     double latencyTime() const override;
 
-    OwnPtr<Reverb> m_reverb;
+    std::unique_ptr<Reverb> m_reverb;
     // This Persistent doesn't make a reference cycle including the owner
     // ConvolverNode.
     Persistent<AudioBuffer> m_buffer;
diff --git a/third_party/WebKit/Source/modules/webaudio/ConvolverNodeTest.cpp b/third_party/WebKit/Source/modules/webaudio/ConvolverNodeTest.cpp
index 04d5122..ff2545cd 100644
--- a/third_party/WebKit/Source/modules/webaudio/ConvolverNodeTest.cpp
+++ b/third_party/WebKit/Source/modules/webaudio/ConvolverNodeTest.cpp
@@ -2,16 +2,17 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "modules/webaudio/ConvolverNode.h"
 #include "core/testing/DummyPageHolder.h"
+#include "modules/webaudio/ConvolverNode.h"
 #include "modules/webaudio/OfflineAudioContext.h"
 #include "testing/gtest/include/gtest/gtest.h"
+#include <memory>
 
 namespace blink {
 
 TEST(ConvolverNodeTest, ReverbLifetime)
 {
-    OwnPtr<DummyPageHolder> page = DummyPageHolder::create();
+    std::unique_ptr<DummyPageHolder> page = DummyPageHolder::create();
     OfflineAudioContext* context = OfflineAudioContext::create(&page->document(), 2, 1, 48000, ASSERT_NO_EXCEPTION);
     ConvolverNode* node = context->createConvolver(ASSERT_NO_EXCEPTION);
     ConvolverHandler& handler = node->convolverHandler();
diff --git a/third_party/WebKit/Source/modules/webaudio/DefaultAudioDestinationNode.h b/third_party/WebKit/Source/modules/webaudio/DefaultAudioDestinationNode.h
index 9b6a8d2..4940ac8 100644
--- a/third_party/WebKit/Source/modules/webaudio/DefaultAudioDestinationNode.h
+++ b/third_party/WebKit/Source/modules/webaudio/DefaultAudioDestinationNode.h
@@ -27,7 +27,7 @@
 
 #include "modules/webaudio/AudioDestinationNode.h"
 #include "platform/audio/AudioDestination.h"
-#include "wtf/OwnPtr.h"
+#include <memory>
 
 namespace blink {
 
@@ -54,7 +54,7 @@
     explicit DefaultAudioDestinationHandler(AudioNode&);
     void createDestination();
 
-    OwnPtr<AudioDestination> m_destination;
+    std::unique_ptr<AudioDestination> m_destination;
     String m_inputDeviceId;
     unsigned m_numberOfInputChannels;
 };
diff --git a/third_party/WebKit/Source/modules/webaudio/DelayNode.cpp b/third_party/WebKit/Source/modules/webaudio/DelayNode.cpp
index b8d530f..eb35ee1 100644
--- a/third_party/WebKit/Source/modules/webaudio/DelayNode.cpp
+++ b/third_party/WebKit/Source/modules/webaudio/DelayNode.cpp
@@ -22,13 +22,14 @@
  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-#include "modules/webaudio/DelayNode.h"
 #include "bindings/core/v8/ExceptionMessages.h"
 #include "bindings/core/v8/ExceptionState.h"
 #include "core/dom/ExceptionCode.h"
 #include "modules/webaudio/AudioBasicProcessorHandler.h"
+#include "modules/webaudio/DelayNode.h"
 #include "modules/webaudio/DelayProcessor.h"
 #include "wtf/MathExtras.h"
+#include "wtf/PtrUtil.h"
 
 namespace blink {
 
@@ -42,7 +43,7 @@
         AudioHandler::NodeTypeDelay,
         *this,
         context.sampleRate(),
-        adoptPtr(new DelayProcessor(
+        wrapUnique(new DelayProcessor(
             context.sampleRate(),
             1,
             m_delayTime->handler(),
diff --git a/third_party/WebKit/Source/modules/webaudio/DelayProcessor.cpp b/third_party/WebKit/Source/modules/webaudio/DelayProcessor.cpp
index 3a35f865..c502851 100644
--- a/third_party/WebKit/Source/modules/webaudio/DelayProcessor.cpp
+++ b/third_party/WebKit/Source/modules/webaudio/DelayProcessor.cpp
@@ -22,8 +22,10 @@
  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-#include "modules/webaudio/DelayProcessor.h"
 #include "modules/webaudio/DelayDSPKernel.h"
+#include "modules/webaudio/DelayProcessor.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
@@ -40,9 +42,9 @@
         uninitialize();
 }
 
-PassOwnPtr<AudioDSPKernel> DelayProcessor::createKernel()
+std::unique_ptr<AudioDSPKernel> DelayProcessor::createKernel()
 {
-    return adoptPtr(new DelayDSPKernel(this));
+    return wrapUnique(new DelayDSPKernel(this));
 }
 
 } // namespace blink
diff --git a/third_party/WebKit/Source/modules/webaudio/DelayProcessor.h b/third_party/WebKit/Source/modules/webaudio/DelayProcessor.h
index 20278f6..a8223e5 100644
--- a/third_party/WebKit/Source/modules/webaudio/DelayProcessor.h
+++ b/third_party/WebKit/Source/modules/webaudio/DelayProcessor.h
@@ -27,8 +27,8 @@
 
 #include "modules/webaudio/AudioParam.h"
 #include "platform/audio/AudioDSPKernelProcessor.h"
-#include "wtf/PassOwnPtr.h"
 #include "wtf/RefPtr.h"
+#include <memory>
 
 namespace blink {
 
@@ -39,7 +39,7 @@
     DelayProcessor(float sampleRate, unsigned numberOfChannels, AudioParamHandler& delayTime, double maxDelayTime);
     ~DelayProcessor() override;
 
-    PassOwnPtr<AudioDSPKernel> createKernel() override;
+    std::unique_ptr<AudioDSPKernel> createKernel() override;
 
     AudioParamHandler& delayTime() const { return *m_delayTime; }
     double maxDelayTime() { return m_maxDelayTime; }
diff --git a/third_party/WebKit/Source/modules/webaudio/DynamicsCompressorNode.cpp b/third_party/WebKit/Source/modules/webaudio/DynamicsCompressorNode.cpp
index b259ddb..d12764d 100644
--- a/third_party/WebKit/Source/modules/webaudio/DynamicsCompressorNode.cpp
+++ b/third_party/WebKit/Source/modules/webaudio/DynamicsCompressorNode.cpp
@@ -22,10 +22,11 @@
  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-#include "modules/webaudio/DynamicsCompressorNode.h"
 #include "modules/webaudio/AudioNodeInput.h"
 #include "modules/webaudio/AudioNodeOutput.h"
+#include "modules/webaudio/DynamicsCompressorNode.h"
 #include "platform/audio/DynamicsCompressor.h"
+#include "wtf/PtrUtil.h"
 
 // Set output to stereo by default.
 static const unsigned defaultNumberOfOutputChannels = 2;
@@ -105,7 +106,7 @@
         return;
 
     AudioHandler::initialize();
-    m_dynamicsCompressor = adoptPtr(new DynamicsCompressor(sampleRate(), defaultNumberOfOutputChannels));
+    m_dynamicsCompressor = wrapUnique(new DynamicsCompressor(sampleRate(), defaultNumberOfOutputChannels));
 }
 
 void DynamicsCompressorHandler::clearInternalStateWhenDisabled()
diff --git a/third_party/WebKit/Source/modules/webaudio/DynamicsCompressorNode.h b/third_party/WebKit/Source/modules/webaudio/DynamicsCompressorNode.h
index 6eb63ca..27e2201 100644
--- a/third_party/WebKit/Source/modules/webaudio/DynamicsCompressorNode.h
+++ b/third_party/WebKit/Source/modules/webaudio/DynamicsCompressorNode.h
@@ -29,7 +29,7 @@
 #include "modules/ModulesExport.h"
 #include "modules/webaudio/AudioNode.h"
 #include "modules/webaudio/AudioParam.h"
-#include "wtf/OwnPtr.h"
+#include <memory>
 
 namespace blink {
 
@@ -67,7 +67,7 @@
     double tailTime() const override;
     double latencyTime() const override;
 
-    OwnPtr<DynamicsCompressor> m_dynamicsCompressor;
+    std::unique_ptr<DynamicsCompressor> m_dynamicsCompressor;
     RefPtr<AudioParamHandler> m_threshold;
     RefPtr<AudioParamHandler> m_knee;
     RefPtr<AudioParamHandler> m_ratio;
diff --git a/third_party/WebKit/Source/modules/webaudio/DynamicsCompressorNodeTest.cpp b/third_party/WebKit/Source/modules/webaudio/DynamicsCompressorNodeTest.cpp
index 67bd8b7..e04a567 100644
--- a/third_party/WebKit/Source/modules/webaudio/DynamicsCompressorNodeTest.cpp
+++ b/third_party/WebKit/Source/modules/webaudio/DynamicsCompressorNodeTest.cpp
@@ -2,17 +2,18 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "modules/webaudio/DynamicsCompressorNode.h"
 #include "core/testing/DummyPageHolder.h"
 #include "modules/webaudio/AbstractAudioContext.h"
+#include "modules/webaudio/DynamicsCompressorNode.h"
 #include "modules/webaudio/OfflineAudioContext.h"
 #include "testing/gtest/include/gtest/gtest.h"
+#include <memory>
 
 namespace blink {
 
 TEST(DynamicsCompressorNodeTest, ProcessorLifetime)
 {
-    OwnPtr<DummyPageHolder> page = DummyPageHolder::create();
+    std::unique_ptr<DummyPageHolder> page = DummyPageHolder::create();
     OfflineAudioContext* context = OfflineAudioContext::create(&page->document(), 2, 1, 48000, ASSERT_NO_EXCEPTION);
     DynamicsCompressorNode* node = context->createDynamicsCompressor(ASSERT_NO_EXCEPTION);
     DynamicsCompressorHandler& handler = node->dynamicsCompressorHandler();
diff --git a/third_party/WebKit/Source/modules/webaudio/IIRFilterNode.cpp b/third_party/WebKit/Source/modules/webaudio/IIRFilterNode.cpp
index bde304df..98d008e 100644
--- a/third_party/WebKit/Source/modules/webaudio/IIRFilterNode.cpp
+++ b/third_party/WebKit/Source/modules/webaudio/IIRFilterNode.cpp
@@ -10,6 +10,7 @@
 #include "modules/webaudio/AbstractAudioContext.h"
 #include "modules/webaudio/AudioBasicProcessorHandler.h"
 #include "platform/Histogram.h"
+#include "wtf/PtrUtil.h"
 
 namespace blink {
 
@@ -18,7 +19,7 @@
 {
     setHandler(AudioBasicProcessorHandler::create(
         AudioHandler::NodeTypeIIRFilter, *this, context.sampleRate(),
-        adoptPtr(new IIRProcessor(context.sampleRate(), 1, feedforwardCoef, feedbackCoef))));
+        wrapUnique(new IIRProcessor(context.sampleRate(), 1, feedforwardCoef, feedbackCoef))));
 
     // Histogram of the IIRFilter order.  createIIRFilter ensures that the length of |feedbackCoef|
     // is in the range [1, IIRFilter::kMaxOrder + 1].  The order is one less than the length of this
diff --git a/third_party/WebKit/Source/modules/webaudio/IIRProcessor.cpp b/third_party/WebKit/Source/modules/webaudio/IIRProcessor.cpp
index 660dd44..e6ce38f 100644
--- a/third_party/WebKit/Source/modules/webaudio/IIRProcessor.cpp
+++ b/third_party/WebKit/Source/modules/webaudio/IIRProcessor.cpp
@@ -5,6 +5,8 @@
 #include "modules/webaudio/IIRProcessor.h"
 
 #include "modules/webaudio/IIRDSPKernel.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
@@ -46,7 +48,7 @@
         m_feedback[0] = 1;
     }
 
-    m_responseKernel = adoptPtr(new IIRDSPKernel(this));
+    m_responseKernel = wrapUnique(new IIRDSPKernel(this));
 }
 
 IIRProcessor::~IIRProcessor()
@@ -55,9 +57,9 @@
         uninitialize();
 }
 
-PassOwnPtr<AudioDSPKernel> IIRProcessor::createKernel()
+std::unique_ptr<AudioDSPKernel> IIRProcessor::createKernel()
 {
-    return adoptPtr(new IIRDSPKernel(this));
+    return wrapUnique(new IIRDSPKernel(this));
 }
 
 void IIRProcessor::process(const AudioBus* source, AudioBus* destination, size_t framesToProcess)
diff --git a/third_party/WebKit/Source/modules/webaudio/IIRProcessor.h b/third_party/WebKit/Source/modules/webaudio/IIRProcessor.h
index e6866c0b..11b39be6 100644
--- a/third_party/WebKit/Source/modules/webaudio/IIRProcessor.h
+++ b/third_party/WebKit/Source/modules/webaudio/IIRProcessor.h
@@ -9,6 +9,7 @@
 #include "platform/audio/AudioDSPKernel.h"
 #include "platform/audio/AudioDSPKernelProcessor.h"
 #include "platform/audio/IIRFilter.h"
+#include <memory>
 
 namespace blink {
 
@@ -20,7 +21,7 @@
         const Vector<double>& feedforwardCoef, const Vector<double>& feedbackCoef);
     ~IIRProcessor() override;
 
-    PassOwnPtr<AudioDSPKernel> createKernel() override;
+    std::unique_ptr<AudioDSPKernel> createKernel() override;
 
     void process(const AudioBus* source, AudioBus* destination, size_t framesToProcess) override;
 
@@ -36,7 +37,7 @@
     AudioDoubleArray m_feedback;
     AudioDoubleArray m_feedforward;
     // This holds the IIR kernel for computing the frequency response.
-    OwnPtr<IIRDSPKernel> m_responseKernel;
+    std::unique_ptr<IIRDSPKernel> m_responseKernel;
 };
 
 } // namespace blink
diff --git a/third_party/WebKit/Source/modules/webaudio/MediaElementAudioSourceNode.cpp b/third_party/WebKit/Source/modules/webaudio/MediaElementAudioSourceNode.cpp
index c1fb73a..f4309bb 100644
--- a/third_party/WebKit/Source/modules/webaudio/MediaElementAudioSourceNode.cpp
+++ b/third_party/WebKit/Source/modules/webaudio/MediaElementAudioSourceNode.cpp
@@ -22,16 +22,17 @@
  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-#include "modules/webaudio/MediaElementAudioSourceNode.h"
 #include "core/dom/CrossThreadTask.h"
 #include "core/html/HTMLMediaElement.h"
 #include "core/inspector/ConsoleMessage.h"
 #include "modules/webaudio/AbstractAudioContext.h"
 #include "modules/webaudio/AudioNodeOutput.h"
+#include "modules/webaudio/MediaElementAudioSourceNode.h"
 #include "platform/Logging.h"
 #include "platform/audio/AudioUtilities.h"
 #include "platform/weborigin/SecurityOrigin.h"
 #include "wtf/Locker.h"
+#include "wtf/PtrUtil.h"
 
 namespace blink {
 
@@ -90,7 +91,7 @@
 
         if (sourceSampleRate != sampleRate()) {
             double scaleFactor = sourceSampleRate / sampleRate();
-            m_multiChannelResampler = adoptPtr(new MultiChannelResampler(scaleFactor, numberOfChannels));
+            m_multiChannelResampler = wrapUnique(new MultiChannelResampler(scaleFactor, numberOfChannels));
         } else {
             // Bypass resampling.
             m_multiChannelResampler.reset();
diff --git a/third_party/WebKit/Source/modules/webaudio/MediaElementAudioSourceNode.h b/third_party/WebKit/Source/modules/webaudio/MediaElementAudioSourceNode.h
index c0181005..20fa9a6 100644
--- a/third_party/WebKit/Source/modules/webaudio/MediaElementAudioSourceNode.h
+++ b/third_party/WebKit/Source/modules/webaudio/MediaElementAudioSourceNode.h
@@ -28,9 +28,9 @@
 #include "modules/webaudio/AudioSourceNode.h"
 #include "platform/audio/AudioSourceProviderClient.h"
 #include "platform/audio/MultiChannelResampler.h"
-#include "wtf/OwnPtr.h"
 #include "wtf/PassRefPtr.h"
 #include "wtf/ThreadingPrimitives.h"
+#include <memory>
 
 namespace blink {
 
@@ -78,7 +78,7 @@
     unsigned m_sourceNumberOfChannels;
     double m_sourceSampleRate;
 
-    OwnPtr<MultiChannelResampler> m_multiChannelResampler;
+    std::unique_ptr<MultiChannelResampler> m_multiChannelResampler;
 
     // |m_passesCurrentSrcCORSAccessCheck| holds the value of
     // context()->getSecurityOrigin() && context()->getSecurityOrigin()->canRequest(mediaElement()->currentSrc()),
diff --git a/third_party/WebKit/Source/modules/webaudio/MediaStreamAudioDestinationNode.h b/third_party/WebKit/Source/modules/webaudio/MediaStreamAudioDestinationNode.h
index cf4989d..2267b15 100644
--- a/third_party/WebKit/Source/modules/webaudio/MediaStreamAudioDestinationNode.h
+++ b/third_party/WebKit/Source/modules/webaudio/MediaStreamAudioDestinationNode.h
@@ -28,7 +28,6 @@
 #include "modules/mediastream/MediaStream.h"
 #include "modules/webaudio/AudioBasicInspectorNode.h"
 #include "platform/audio/AudioBus.h"
-#include "wtf/OwnPtr.h"
 #include "wtf/PassRefPtr.h"
 
 namespace blink {
diff --git a/third_party/WebKit/Source/modules/webaudio/MediaStreamAudioSourceNode.cpp b/third_party/WebKit/Source/modules/webaudio/MediaStreamAudioSourceNode.cpp
index 0a911f61..e976165 100644
--- a/third_party/WebKit/Source/modules/webaudio/MediaStreamAudioSourceNode.cpp
+++ b/third_party/WebKit/Source/modules/webaudio/MediaStreamAudioSourceNode.cpp
@@ -29,10 +29,11 @@
 #include "modules/webaudio/AudioNodeOutput.h"
 #include "platform/Logging.h"
 #include "wtf/Locker.h"
+#include <memory>
 
 namespace blink {
 
-MediaStreamAudioSourceHandler::MediaStreamAudioSourceHandler(AudioNode& node, MediaStream& mediaStream, MediaStreamTrack* audioTrack, PassOwnPtr<AudioSourceProvider> audioSourceProvider)
+MediaStreamAudioSourceHandler::MediaStreamAudioSourceHandler(AudioNode& node, MediaStream& mediaStream, MediaStreamTrack* audioTrack, std::unique_ptr<AudioSourceProvider> audioSourceProvider)
     : AudioHandler(NodeTypeMediaStreamAudioSource, node, node.context()->sampleRate())
     , m_mediaStream(mediaStream)
     , m_audioTrack(audioTrack)
@@ -46,7 +47,7 @@
     initialize();
 }
 
-PassRefPtr<MediaStreamAudioSourceHandler> MediaStreamAudioSourceHandler::create(AudioNode& node, MediaStream& mediaStream, MediaStreamTrack* audioTrack, PassOwnPtr<AudioSourceProvider> audioSourceProvider)
+PassRefPtr<MediaStreamAudioSourceHandler> MediaStreamAudioSourceHandler::create(AudioNode& node, MediaStream& mediaStream, MediaStreamTrack* audioTrack, std::unique_ptr<AudioSourceProvider> audioSourceProvider)
 {
     return adoptRef(new MediaStreamAudioSourceHandler(node, mediaStream, audioTrack, std::move(audioSourceProvider)));
 }
@@ -110,7 +111,7 @@
 
 // ----------------------------------------------------------------
 
-MediaStreamAudioSourceNode::MediaStreamAudioSourceNode(AbstractAudioContext& context, MediaStream& mediaStream, MediaStreamTrack* audioTrack, PassOwnPtr<AudioSourceProvider> audioSourceProvider)
+MediaStreamAudioSourceNode::MediaStreamAudioSourceNode(AbstractAudioContext& context, MediaStream& mediaStream, MediaStreamTrack* audioTrack, std::unique_ptr<AudioSourceProvider> audioSourceProvider)
     : AudioSourceNode(context)
 {
     setHandler(MediaStreamAudioSourceHandler::create(*this, mediaStream, audioTrack, std::move(audioSourceProvider)));
@@ -135,7 +136,7 @@
 
     // Use the first audio track in the media stream.
     MediaStreamTrack* audioTrack = audioTracks[0];
-    OwnPtr<AudioSourceProvider> provider = audioTrack->createWebAudioSource();
+    std::unique_ptr<AudioSourceProvider> provider = audioTrack->createWebAudioSource();
 
     MediaStreamAudioSourceNode* node = new MediaStreamAudioSourceNode(context, mediaStream, audioTrack, std::move(provider));
 
diff --git a/third_party/WebKit/Source/modules/webaudio/MediaStreamAudioSourceNode.h b/third_party/WebKit/Source/modules/webaudio/MediaStreamAudioSourceNode.h
index da461bc..d0f448d 100644
--- a/third_party/WebKit/Source/modules/webaudio/MediaStreamAudioSourceNode.h
+++ b/third_party/WebKit/Source/modules/webaudio/MediaStreamAudioSourceNode.h
@@ -29,9 +29,9 @@
 #include "modules/webaudio/AudioSourceNode.h"
 #include "platform/audio/AudioSourceProvider.h"
 #include "platform/audio/AudioSourceProviderClient.h"
-#include "wtf/OwnPtr.h"
 #include "wtf/PassRefPtr.h"
 #include "wtf/Threading.h"
+#include <memory>
 
 namespace blink {
 
@@ -39,7 +39,7 @@
 
 class MediaStreamAudioSourceHandler final : public AudioHandler {
 public:
-    static PassRefPtr<MediaStreamAudioSourceHandler> create(AudioNode&, MediaStream&, MediaStreamTrack*, PassOwnPtr<AudioSourceProvider>);
+    static PassRefPtr<MediaStreamAudioSourceHandler> create(AudioNode&, MediaStream&, MediaStreamTrack*, std::unique_ptr<AudioSourceProvider>);
     ~MediaStreamAudioSourceHandler() override;
 
     MediaStream* getMediaStream() { return m_mediaStream.get(); }
@@ -54,7 +54,7 @@
     AudioSourceProvider* getAudioSourceProvider() const { return m_audioSourceProvider.get(); }
 
 private:
-    MediaStreamAudioSourceHandler(AudioNode&, MediaStream&, MediaStreamTrack*, PassOwnPtr<AudioSourceProvider>);
+    MediaStreamAudioSourceHandler(AudioNode&, MediaStream&, MediaStreamTrack*, std::unique_ptr<AudioSourceProvider>);
     // As an audio source, we will never propagate silence.
     bool propagatesSilence() const override { return false; }
 
@@ -62,7 +62,7 @@
     // MediaStreamAudioSourceNode.
     Persistent<MediaStream> m_mediaStream;
     Persistent<MediaStreamTrack> m_audioTrack;
-    OwnPtr<AudioSourceProvider> m_audioSourceProvider;
+    std::unique_ptr<AudioSourceProvider> m_audioSourceProvider;
 
     Mutex m_processLock;
 
@@ -83,7 +83,7 @@
     void setFormat(size_t numberOfChannels, float sampleRate) override;
 
 private:
-    MediaStreamAudioSourceNode(AbstractAudioContext&, MediaStream&, MediaStreamTrack*, PassOwnPtr<AudioSourceProvider>);
+    MediaStreamAudioSourceNode(AbstractAudioContext&, MediaStream&, MediaStreamTrack*, std::unique_ptr<AudioSourceProvider>);
 };
 
 } // namespace blink
diff --git a/third_party/WebKit/Source/modules/webaudio/OfflineAudioDestinationNode.cpp b/third_party/WebKit/Source/modules/webaudio/OfflineAudioDestinationNode.cpp
index 92696e0..b1a943e8 100644
--- a/third_party/WebKit/Source/modules/webaudio/OfflineAudioDestinationNode.cpp
+++ b/third_party/WebKit/Source/modules/webaudio/OfflineAudioDestinationNode.cpp
@@ -22,16 +22,17 @@
  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-#include "modules/webaudio/OfflineAudioDestinationNode.h"
 #include "core/dom/CrossThreadTask.h"
 #include "modules/webaudio/AbstractAudioContext.h"
 #include "modules/webaudio/AudioNodeInput.h"
 #include "modules/webaudio/AudioNodeOutput.h"
 #include "modules/webaudio/OfflineAudioContext.h"
+#include "modules/webaudio/OfflineAudioDestinationNode.h"
 #include "platform/audio/AudioBus.h"
 #include "platform/audio/DenormalDisabler.h"
 #include "platform/audio/HRTFDatabaseLoader.h"
 #include "public/platform/Platform.h"
+#include "wtf/PtrUtil.h"
 #include <algorithm>
 
 namespace blink {
@@ -41,7 +42,7 @@
 OfflineAudioDestinationHandler::OfflineAudioDestinationHandler(AudioNode& node, AudioBuffer* renderTarget)
     : AudioDestinationHandler(node, renderTarget->sampleRate())
     , m_renderTarget(renderTarget)
-    , m_renderThread(adoptPtr(Platform::current()->createThread("offline audio renderer")))
+    , m_renderThread(wrapUnique(Platform::current()->createThread("offline audio renderer")))
     , m_framesProcessed(0)
     , m_framesToProcess(0)
     , m_isRenderingStarted(false)
diff --git a/third_party/WebKit/Source/modules/webaudio/OfflineAudioDestinationNode.h b/third_party/WebKit/Source/modules/webaudio/OfflineAudioDestinationNode.h
index 69a700b..b4a4716 100644
--- a/third_party/WebKit/Source/modules/webaudio/OfflineAudioDestinationNode.h
+++ b/third_party/WebKit/Source/modules/webaudio/OfflineAudioDestinationNode.h
@@ -31,6 +31,7 @@
 #include "public/platform/WebThread.h"
 #include "wtf/PassRefPtr.h"
 #include "wtf/RefPtr.h"
+#include <memory>
 
 namespace blink {
 
@@ -98,7 +99,7 @@
     RefPtr<AudioBus> m_renderBus;
 
     // Rendering thread.
-    OwnPtr<WebThread> m_renderThread;
+    std::unique_ptr<WebThread> m_renderThread;
 
     // These variables are for counting the number of frames for the current
     // progress and the remaining frames to be processed.
diff --git a/third_party/WebKit/Source/modules/webaudio/OscillatorNode.h b/third_party/WebKit/Source/modules/webaudio/OscillatorNode.h
index 841bad2..f515946e 100644
--- a/third_party/WebKit/Source/modules/webaudio/OscillatorNode.h
+++ b/third_party/WebKit/Source/modules/webaudio/OscillatorNode.h
@@ -28,7 +28,6 @@
 #include "modules/webaudio/AudioParam.h"
 #include "modules/webaudio/AudioScheduledSourceNode.h"
 #include "platform/audio/AudioBus.h"
-#include "wtf/OwnPtr.h"
 #include "wtf/PassRefPtr.h"
 #include "wtf/RefPtr.h"
 #include "wtf/Threading.h"
diff --git a/third_party/WebKit/Source/modules/webaudio/PannerNode.h b/third_party/WebKit/Source/modules/webaudio/PannerNode.h
index e360a27..ca5fde4 100644
--- a/third_party/WebKit/Source/modules/webaudio/PannerNode.h
+++ b/third_party/WebKit/Source/modules/webaudio/PannerNode.h
@@ -34,6 +34,7 @@
 #include "platform/audio/Panner.h"
 #include "platform/geometry/FloatPoint3D.h"
 #include "wtf/HashMap.h"
+#include <memory>
 
 namespace blink {
 
@@ -152,7 +153,7 @@
     // This Persistent doesn't make a reference cycle including the owner
     // PannerNode.
     Persistent<AudioListener> m_listener;
-    OwnPtr<Panner> m_panner;
+    std::unique_ptr<Panner> m_panner;
     unsigned m_panningModel;
     unsigned m_distanceModel;
 
diff --git a/third_party/WebKit/Source/modules/webaudio/PeriodicWave.cpp b/third_party/WebKit/Source/modules/webaudio/PeriodicWave.cpp
index cbe3d43..fdd7ebd 100644
--- a/third_party/WebKit/Source/modules/webaudio/PeriodicWave.cpp
+++ b/third_party/WebKit/Source/modules/webaudio/PeriodicWave.cpp
@@ -26,15 +26,17 @@
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-#include "modules/webaudio/PeriodicWave.h"
 #include "bindings/core/v8/ExceptionMessages.h"
 #include "bindings/core/v8/ExceptionState.h"
 #include "core/dom/ExceptionCode.h"
 #include "modules/webaudio/AbstractAudioContext.h"
 #include "modules/webaudio/OscillatorNode.h"
+#include "modules/webaudio/PeriodicWave.h"
 #include "platform/audio/FFTFrame.h"
 #include "platform/audio/VectorMath.h"
+#include "wtf/PtrUtil.h"
 #include <algorithm>
+#include <memory>
 
 namespace blink {
 
@@ -242,7 +244,7 @@
 
         // Create the band-limited table.
         unsigned waveSize = periodicWaveSize();
-        OwnPtr<AudioFloatArray> table = adoptPtr(new AudioFloatArray(waveSize));
+        std::unique_ptr<AudioFloatArray> table = wrapUnique(new AudioFloatArray(waveSize));
         adjustV8ExternalMemory(waveSize * sizeof(float));
         m_bandLimitedTables.append(std::move(table));
 
diff --git a/third_party/WebKit/Source/modules/webaudio/PeriodicWave.h b/third_party/WebKit/Source/modules/webaudio/PeriodicWave.h
index 17a7844..a5629b9 100644
--- a/third_party/WebKit/Source/modules/webaudio/PeriodicWave.h
+++ b/third_party/WebKit/Source/modules/webaudio/PeriodicWave.h
@@ -34,6 +34,7 @@
 #include "platform/audio/AudioArray.h"
 #include "wtf/Forward.h"
 #include "wtf/Vector.h"
+#include <memory>
 
 namespace blink {
 
@@ -104,7 +105,7 @@
 
     // Creates tables based on numberOfComponents Fourier coefficients.
     void createBandLimitedTables(const float* real, const float* imag, unsigned numberOfComponents, bool disableNormalization);
-    Vector<OwnPtr<AudioFloatArray>> m_bandLimitedTables;
+    Vector<std::unique_ptr<AudioFloatArray>> m_bandLimitedTables;
 };
 
 } // namespace blink
diff --git a/third_party/WebKit/Source/modules/webaudio/RealtimeAnalyser.cpp b/third_party/WebKit/Source/modules/webaudio/RealtimeAnalyser.cpp
index 212e4d0..3acf089 100644
--- a/third_party/WebKit/Source/modules/webaudio/RealtimeAnalyser.cpp
+++ b/third_party/WebKit/Source/modules/webaudio/RealtimeAnalyser.cpp
@@ -27,6 +27,7 @@
 #include "platform/audio/AudioUtilities.h"
 #include "platform/audio/VectorMath.h"
 #include "wtf/MathExtras.h"
+#include "wtf/PtrUtil.h"
 #include <algorithm>
 #include <complex>
 #include <limits.h>
@@ -54,7 +55,7 @@
     , m_maxDecibels(DefaultMaxDecibels)
     , m_lastAnalysisTime(-1)
 {
-    m_analysisFrame = adoptPtr(new FFTFrame(DefaultFFTSize));
+    m_analysisFrame = wrapUnique(new FFTFrame(DefaultFFTSize));
 }
 
 bool RealtimeAnalyser::setFftSize(size_t size)
@@ -69,7 +70,7 @@
         return false;
 
     if (m_fftSize != size) {
-        m_analysisFrame = adoptPtr(new FFTFrame(size));
+        m_analysisFrame = wrapUnique(new FFTFrame(size));
         // m_magnitudeBuffer has size = fftSize / 2 because it contains floats reduced from complex values in m_analysisFrame.
         m_magnitudeBuffer.allocate(size / 2);
         m_fftSize = size;
diff --git a/third_party/WebKit/Source/modules/webaudio/RealtimeAnalyser.h b/third_party/WebKit/Source/modules/webaudio/RealtimeAnalyser.h
index 2b27a00..6d61f94 100644
--- a/third_party/WebKit/Source/modules/webaudio/RealtimeAnalyser.h
+++ b/third_party/WebKit/Source/modules/webaudio/RealtimeAnalyser.h
@@ -29,7 +29,7 @@
 #include "platform/audio/AudioArray.h"
 #include "platform/audio/FFTFrame.h"
 #include "wtf/Noncopyable.h"
-#include "wtf/OwnPtr.h"
+#include <memory>
 
 namespace blink {
 
@@ -81,7 +81,7 @@
     RefPtr<AudioBus> m_downMixBus;
 
     size_t m_fftSize;
-    OwnPtr<FFTFrame> m_analysisFrame;
+    std::unique_ptr<FFTFrame> m_analysisFrame;
     void doFFTAnalysis();
 
     // Convert the contents of magnitudeBuffer to byte values, saving the result in |destination|.
diff --git a/third_party/WebKit/Source/modules/webaudio/ScriptProcessorNodeTest.cpp b/third_party/WebKit/Source/modules/webaudio/ScriptProcessorNodeTest.cpp
index db38a7d..d22af2d 100644
--- a/third_party/WebKit/Source/modules/webaudio/ScriptProcessorNodeTest.cpp
+++ b/third_party/WebKit/Source/modules/webaudio/ScriptProcessorNodeTest.cpp
@@ -2,16 +2,17 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "modules/webaudio/ScriptProcessorNode.h"
 #include "core/testing/DummyPageHolder.h"
 #include "modules/webaudio/OfflineAudioContext.h"
+#include "modules/webaudio/ScriptProcessorNode.h"
 #include "testing/gtest/include/gtest/gtest.h"
+#include <memory>
 
 namespace blink {
 
 TEST(ScriptProcessorNodeTest, BufferLifetime)
 {
-    OwnPtr<DummyPageHolder> page = DummyPageHolder::create();
+    std::unique_ptr<DummyPageHolder> page = DummyPageHolder::create();
     OfflineAudioContext* context = OfflineAudioContext::create(&page->document(), 2, 1, 48000, ASSERT_NO_EXCEPTION);
     ScriptProcessorNode* node = context->createScriptProcessor(ASSERT_NO_EXCEPTION);
     ScriptProcessorHandler& handler = static_cast<ScriptProcessorHandler&>(node->handler());
diff --git a/third_party/WebKit/Source/modules/webaudio/StereoPannerNode.h b/third_party/WebKit/Source/modules/webaudio/StereoPannerNode.h
index 32f1d9b1..4837c43 100644
--- a/third_party/WebKit/Source/modules/webaudio/StereoPannerNode.h
+++ b/third_party/WebKit/Source/modules/webaudio/StereoPannerNode.h
@@ -10,6 +10,7 @@
 #include "modules/webaudio/AudioParam.h"
 #include "platform/audio/AudioBus.h"
 #include "platform/audio/Spatializer.h"
+#include <memory>
 
 namespace blink {
 
@@ -31,7 +32,7 @@
 private:
     StereoPannerHandler(AudioNode&, float sampleRate, AudioParamHandler& pan);
 
-    OwnPtr<Spatializer> m_stereoPanner;
+    std::unique_ptr<Spatializer> m_stereoPanner;
     RefPtr<AudioParamHandler> m_pan;
 
     AudioFloatArray m_sampleAccuratePanValues;
diff --git a/third_party/WebKit/Source/modules/webaudio/StereoPannerNodeTest.cpp b/third_party/WebKit/Source/modules/webaudio/StereoPannerNodeTest.cpp
index a195c09a..2f02f60 100644
--- a/third_party/WebKit/Source/modules/webaudio/StereoPannerNodeTest.cpp
+++ b/third_party/WebKit/Source/modules/webaudio/StereoPannerNodeTest.cpp
@@ -2,16 +2,17 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "modules/webaudio/StereoPannerNode.h"
 #include "core/testing/DummyPageHolder.h"
 #include "modules/webaudio/OfflineAudioContext.h"
+#include "modules/webaudio/StereoPannerNode.h"
 #include "testing/gtest/include/gtest/gtest.h"
+#include <memory>
 
 namespace blink {
 
 TEST(StereoPannerNodeTest, StereoPannerLifetime)
 {
-    OwnPtr<DummyPageHolder> page = DummyPageHolder::create();
+    std::unique_ptr<DummyPageHolder> page = DummyPageHolder::create();
     OfflineAudioContext* context = OfflineAudioContext::create(&page->document(), 2, 1, 48000, ASSERT_NO_EXCEPTION);
     StereoPannerNode* node = context->createStereoPanner(ASSERT_NO_EXCEPTION);
     StereoPannerHandler& handler = static_cast<StereoPannerHandler&>(node->handler());
diff --git a/third_party/WebKit/Source/modules/webaudio/WaveShaperDSPKernel.cpp b/third_party/WebKit/Source/modules/webaudio/WaveShaperDSPKernel.cpp
index fdd64071..f841b05 100644
--- a/third_party/WebKit/Source/modules/webaudio/WaveShaperDSPKernel.cpp
+++ b/third_party/WebKit/Source/modules/webaudio/WaveShaperDSPKernel.cpp
@@ -23,6 +23,7 @@
  */
 
 #include "modules/webaudio/WaveShaperDSPKernel.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/Threading.h"
 #include <algorithm>
 
@@ -40,12 +41,12 @@
 void WaveShaperDSPKernel::lazyInitializeOversampling()
 {
     if (!m_tempBuffer) {
-        m_tempBuffer = adoptPtr(new AudioFloatArray(RenderingQuantum * 2));
-        m_tempBuffer2 = adoptPtr(new AudioFloatArray(RenderingQuantum * 4));
-        m_upSampler = adoptPtr(new UpSampler(RenderingQuantum));
-        m_downSampler = adoptPtr(new DownSampler(RenderingQuantum * 2));
-        m_upSampler2 = adoptPtr(new UpSampler(RenderingQuantum * 2));
-        m_downSampler2 = adoptPtr(new DownSampler(RenderingQuantum * 4));
+        m_tempBuffer = wrapUnique(new AudioFloatArray(RenderingQuantum * 2));
+        m_tempBuffer2 = wrapUnique(new AudioFloatArray(RenderingQuantum * 4));
+        m_upSampler = wrapUnique(new UpSampler(RenderingQuantum));
+        m_downSampler = wrapUnique(new DownSampler(RenderingQuantum * 2));
+        m_upSampler2 = wrapUnique(new UpSampler(RenderingQuantum * 2));
+        m_downSampler2 = wrapUnique(new DownSampler(RenderingQuantum * 4));
     }
 }
 
diff --git a/third_party/WebKit/Source/modules/webaudio/WaveShaperDSPKernel.h b/third_party/WebKit/Source/modules/webaudio/WaveShaperDSPKernel.h
index 7d8c2dd3..67d143a 100644
--- a/third_party/WebKit/Source/modules/webaudio/WaveShaperDSPKernel.h
+++ b/third_party/WebKit/Source/modules/webaudio/WaveShaperDSPKernel.h
@@ -30,7 +30,7 @@
 #include "platform/audio/AudioDSPKernel.h"
 #include "platform/audio/DownSampler.h"
 #include "platform/audio/UpSampler.h"
-#include "wtf/OwnPtr.h"
+#include <memory>
 
 namespace blink {
 
@@ -62,12 +62,12 @@
     WaveShaperProcessor* getWaveShaperProcessor() { return static_cast<WaveShaperProcessor*>(processor()); }
 
     // Oversampling.
-    OwnPtr<AudioFloatArray> m_tempBuffer;
-    OwnPtr<AudioFloatArray> m_tempBuffer2;
-    OwnPtr<UpSampler> m_upSampler;
-    OwnPtr<DownSampler> m_downSampler;
-    OwnPtr<UpSampler> m_upSampler2;
-    OwnPtr<DownSampler> m_downSampler2;
+    std::unique_ptr<AudioFloatArray> m_tempBuffer;
+    std::unique_ptr<AudioFloatArray> m_tempBuffer2;
+    std::unique_ptr<UpSampler> m_upSampler;
+    std::unique_ptr<DownSampler> m_downSampler;
+    std::unique_ptr<UpSampler> m_upSampler2;
+    std::unique_ptr<DownSampler> m_downSampler2;
 };
 
 } // namespace blink
diff --git a/third_party/WebKit/Source/modules/webaudio/WaveShaperNode.cpp b/third_party/WebKit/Source/modules/webaudio/WaveShaperNode.cpp
index 6247608..ae9ae322 100644
--- a/third_party/WebKit/Source/modules/webaudio/WaveShaperNode.cpp
+++ b/third_party/WebKit/Source/modules/webaudio/WaveShaperNode.cpp
@@ -22,19 +22,20 @@
  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-#include "modules/webaudio/WaveShaperNode.h"
 #include "bindings/core/v8/ExceptionMessages.h"
 #include "bindings/core/v8/ExceptionState.h"
 #include "core/dom/ExceptionCode.h"
 #include "modules/webaudio/AbstractAudioContext.h"
 #include "modules/webaudio/AudioBasicProcessorHandler.h"
+#include "modules/webaudio/WaveShaperNode.h"
+#include "wtf/PtrUtil.h"
 
 namespace blink {
 
 WaveShaperNode::WaveShaperNode(AbstractAudioContext& context)
     : AudioNode(context)
 {
-    setHandler(AudioBasicProcessorHandler::create(AudioHandler::NodeTypeWaveShaper, *this, context.sampleRate(), adoptPtr(new WaveShaperProcessor(context.sampleRate(), 1))));
+    setHandler(AudioBasicProcessorHandler::create(AudioHandler::NodeTypeWaveShaper, *this, context.sampleRate(), wrapUnique(new WaveShaperProcessor(context.sampleRate(), 1))));
 
     handler().initialize();
 }
diff --git a/third_party/WebKit/Source/modules/webaudio/WaveShaperProcessor.cpp b/third_party/WebKit/Source/modules/webaudio/WaveShaperProcessor.cpp
index a289cb7a..3ad18df 100644
--- a/third_party/WebKit/Source/modules/webaudio/WaveShaperProcessor.cpp
+++ b/third_party/WebKit/Source/modules/webaudio/WaveShaperProcessor.cpp
@@ -22,8 +22,10 @@
  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-#include "modules/webaudio/WaveShaperProcessor.h"
 #include "modules/webaudio/WaveShaperDSPKernel.h"
+#include "modules/webaudio/WaveShaperProcessor.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
@@ -39,9 +41,9 @@
         uninitialize();
 }
 
-PassOwnPtr<AudioDSPKernel> WaveShaperProcessor::createKernel()
+std::unique_ptr<AudioDSPKernel> WaveShaperProcessor::createKernel()
 {
-    return adoptPtr(new WaveShaperDSPKernel(this));
+    return wrapUnique(new WaveShaperDSPKernel(this));
 }
 
 void WaveShaperProcessor::setCurve(DOMFloat32Array* curve)
diff --git a/third_party/WebKit/Source/modules/webaudio/WaveShaperProcessor.h b/third_party/WebKit/Source/modules/webaudio/WaveShaperProcessor.h
index 3a54e9b..b6b6708 100644
--- a/third_party/WebKit/Source/modules/webaudio/WaveShaperProcessor.h
+++ b/third_party/WebKit/Source/modules/webaudio/WaveShaperProcessor.h
@@ -31,6 +31,7 @@
 #include "platform/audio/AudioDSPKernelProcessor.h"
 #include "wtf/RefPtr.h"
 #include "wtf/ThreadingPrimitives.h"
+#include <memory>
 
 namespace blink {
 
@@ -48,7 +49,7 @@
 
     ~WaveShaperProcessor() override;
 
-    PassOwnPtr<AudioDSPKernel> createKernel() override;
+    std::unique_ptr<AudioDSPKernel> createKernel() override;
 
     void process(const AudioBus* source, AudioBus* destination, size_t framesToProcess) override;
 
diff --git a/third_party/WebKit/Source/modules/webdatabase/ChangeVersionWrapper.h b/third_party/WebKit/Source/modules/webdatabase/ChangeVersionWrapper.h
index dbf4c20..00d7b1c 100644
--- a/third_party/WebKit/Source/modules/webdatabase/ChangeVersionWrapper.h
+++ b/third_party/WebKit/Source/modules/webdatabase/ChangeVersionWrapper.h
@@ -31,6 +31,7 @@
 #include "modules/webdatabase/SQLTransactionBackend.h"
 #include "platform/heap/Handle.h"
 #include "wtf/Forward.h"
+#include <memory>
 
 namespace blink {
 
@@ -50,7 +51,7 @@
 
     String m_oldVersion;
     String m_newVersion;
-    OwnPtr<SQLErrorData> m_sqlError;
+    std::unique_ptr<SQLErrorData> m_sqlError;
 };
 
 } // namespace blink
diff --git a/third_party/WebKit/Source/modules/webdatabase/Database.cpp b/third_party/WebKit/Source/modules/webdatabase/Database.cpp
index 2f31777..101fb0a7 100644
--- a/third_party/WebKit/Source/modules/webdatabase/Database.cpp
+++ b/third_party/WebKit/Source/modules/webdatabase/Database.cpp
@@ -55,6 +55,7 @@
 #include "public/platform/WebSecurityOrigin.h"
 #include "wtf/Atomics.h"
 #include "wtf/CurrentTime.h"
+#include <memory>
 
 // Registering "opened" databases with the DatabaseTracker
 // =======================================================
@@ -265,7 +266,7 @@
 
     DatabaseTracker::tracker().prepareToOpenDatabase(this);
     bool success = false;
-    OwnPtr<DatabaseOpenTask> task = DatabaseOpenTask::create(this, setVersionInNewDatabase, &synchronizer, error, errorMessage, success);
+    std::unique_ptr<DatabaseOpenTask> task = DatabaseOpenTask::create(this, setVersionInNewDatabase, &synchronizer, error, errorMessage, success);
     getDatabaseContext()->databaseThread()->scheduleTask(std::move(task));
     synchronizer.waitForTaskCompletion();
 
@@ -331,7 +332,7 @@
         transaction = m_transactionQueue.takeFirst();
 
     if (transaction && getDatabaseContext()->databaseThreadAvailable()) {
-        OwnPtr<DatabaseTransactionTask> task = DatabaseTransactionTask::create(transaction);
+        std::unique_ptr<DatabaseTransactionTask> task = DatabaseTransactionTask::create(transaction);
         WTF_LOG(StorageAPI, "Scheduling DatabaseTransactionTask %p for transaction %p\n", task.get(), task->transaction());
         m_transactionInProgress = true;
         getDatabaseContext()->databaseThread()->scheduleTask(std::move(task));
@@ -345,7 +346,7 @@
     if (!getDatabaseContext()->databaseThreadAvailable())
         return;
 
-    OwnPtr<DatabaseTransactionTask> task = DatabaseTransactionTask::create(transaction);
+    std::unique_ptr<DatabaseTransactionTask> task = DatabaseTransactionTask::create(transaction);
     WTF_LOG(StorageAPI, "Scheduling DatabaseTransactionTask %p for the transaction step\n", task.get());
     getDatabaseContext()->databaseThread()->scheduleTask(std::move(task));
 }
@@ -809,7 +810,7 @@
     runTransaction(callback, errorCallback, successCallback, true);
 }
 
-static void callTransactionErrorCallback(SQLTransactionErrorCallback* callback, PassOwnPtr<SQLErrorData> errorData)
+static void callTransactionErrorCallback(SQLTransactionErrorCallback* callback, std::unique_ptr<SQLErrorData> errorData)
 {
     callback->handleEvent(SQLError::create(*errorData));
 }
@@ -835,7 +836,7 @@
         SQLTransactionErrorCallback* callback = transaction->releaseErrorCallback();
         ASSERT(callback == originalErrorCallback);
         if (callback) {
-            OwnPtr<SQLErrorData> error = SQLErrorData::create(SQLError::UNKNOWN_ERR, "database has been closed");
+            std::unique_ptr<SQLErrorData> error = SQLErrorData::create(SQLError::UNKNOWN_ERR, "database has been closed");
             getExecutionContext()->postTask(BLINK_FROM_HERE, createSameThreadTask(&callTransactionErrorCallback, callback, passed(std::move(error))));
         }
     }
@@ -887,7 +888,7 @@
     if (!getDatabaseContext()->databaseThreadAvailable())
         return result;
 
-    OwnPtr<DatabaseTableNamesTask> task = DatabaseTableNamesTask::create(this, &synchronizer, result);
+    std::unique_ptr<DatabaseTableNamesTask> task = DatabaseTableNamesTask::create(this, &synchronizer, result);
     getDatabaseContext()->databaseThread()->scheduleTask(std::move(task));
     synchronizer.waitForTaskCompletion();
 
diff --git a/third_party/WebKit/Source/modules/webdatabase/DatabaseTask.h b/third_party/WebKit/Source/modules/webdatabase/DatabaseTask.h
index 84deeb1..6102d48 100644
--- a/third_party/WebKit/Source/modules/webdatabase/DatabaseTask.h
+++ b/third_party/WebKit/Source/modules/webdatabase/DatabaseTask.h
@@ -35,11 +35,11 @@
 #include "modules/webdatabase/SQLTransactionBackend.h"
 #include "platform/TaskSynchronizer.h"
 #include "platform/heap/Handle.h"
-#include "wtf/OwnPtr.h"
-#include "wtf/PassOwnPtr.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/Threading.h"
 #include "wtf/Vector.h"
 #include "wtf/text/WTFString.h"
+#include <memory>
 
 namespace blink {
 
@@ -73,9 +73,9 @@
 
 class Database::DatabaseOpenTask final : public DatabaseTask {
 public:
-    static PassOwnPtr<DatabaseOpenTask> create(Database* db, bool setVersionInNewDatabase, TaskSynchronizer* synchronizer, DatabaseError& error, String& errorMessage, bool& success)
+    static std::unique_ptr<DatabaseOpenTask> create(Database* db, bool setVersionInNewDatabase, TaskSynchronizer* synchronizer, DatabaseError& error, String& errorMessage, bool& success)
     {
-        return adoptPtr(new DatabaseOpenTask(db, setVersionInNewDatabase, synchronizer, error, errorMessage, success));
+        return wrapUnique(new DatabaseOpenTask(db, setVersionInNewDatabase, synchronizer, error, errorMessage, success));
     }
 
 private:
@@ -94,9 +94,9 @@
 
 class Database::DatabaseCloseTask final : public DatabaseTask {
 public:
-    static PassOwnPtr<DatabaseCloseTask> create(Database* db, TaskSynchronizer* synchronizer)
+    static std::unique_ptr<DatabaseCloseTask> create(Database* db, TaskSynchronizer* synchronizer)
     {
-        return adoptPtr(new DatabaseCloseTask(db, synchronizer));
+        return wrapUnique(new DatabaseCloseTask(db, synchronizer));
     }
 
 private:
@@ -113,9 +113,9 @@
     ~DatabaseTransactionTask() override;
 
     // Transaction task is never synchronous, so no 'synchronizer' parameter.
-    static PassOwnPtr<DatabaseTransactionTask> create(SQLTransactionBackend* transaction)
+    static std::unique_ptr<DatabaseTransactionTask> create(SQLTransactionBackend* transaction)
     {
-        return adoptPtr(new DatabaseTransactionTask(transaction));
+        return wrapUnique(new DatabaseTransactionTask(transaction));
     }
 
     SQLTransactionBackend* transaction() const { return m_transaction.get(); }
@@ -134,9 +134,9 @@
 
 class Database::DatabaseTableNamesTask final : public DatabaseTask {
 public:
-    static PassOwnPtr<DatabaseTableNamesTask> create(Database* db, TaskSynchronizer* synchronizer, Vector<String>& names)
+    static std::unique_ptr<DatabaseTableNamesTask> create(Database* db, TaskSynchronizer* synchronizer, Vector<String>& names)
     {
-        return adoptPtr(new DatabaseTableNamesTask(db, synchronizer, names));
+        return wrapUnique(new DatabaseTableNamesTask(db, synchronizer, names));
     }
 
 private:
diff --git a/third_party/WebKit/Source/modules/webdatabase/DatabaseThread.cpp b/third_party/WebKit/Source/modules/webdatabase/DatabaseThread.cpp
index 0fe5777..e6bc6f22 100644
--- a/third_party/WebKit/Source/modules/webdatabase/DatabaseThread.cpp
+++ b/third_party/WebKit/Source/modules/webdatabase/DatabaseThread.cpp
@@ -36,11 +36,13 @@
 #include "platform/ThreadSafeFunctional.h"
 #include "platform/WebThreadSupportingGC.h"
 #include "public/platform/Platform.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
 DatabaseThread::DatabaseThread()
-    : m_transactionClient(adoptPtr(new SQLTransactionClient()))
+    : m_transactionClient(wrapUnique(new SQLTransactionClient()))
     , m_cleanupSync(nullptr)
     , m_terminationRequested(false)
 {
@@ -160,7 +162,7 @@
     return !isMainThread();
 }
 
-void DatabaseThread::scheduleTask(PassOwnPtr<DatabaseTask> task)
+void DatabaseThread::scheduleTask(std::unique_ptr<DatabaseTask> task)
 {
     ASSERT(m_thread);
 #if ENABLE(ASSERT)
diff --git a/third_party/WebKit/Source/modules/webdatabase/DatabaseThread.h b/third_party/WebKit/Source/modules/webdatabase/DatabaseThread.h
index 26355298..afe5454 100644
--- a/third_party/WebKit/Source/modules/webdatabase/DatabaseThread.h
+++ b/third_party/WebKit/Source/modules/webdatabase/DatabaseThread.h
@@ -31,9 +31,8 @@
 #include "platform/WebThreadSupportingGC.h"
 #include "platform/heap/Handle.h"
 #include "wtf/HashMap.h"
-#include "wtf/OwnPtr.h"
-#include "wtf/PassOwnPtr.h"
 #include "wtf/ThreadingPrimitives.h"
+#include <memory>
 
 namespace blink {
 
@@ -54,7 +53,7 @@
     void terminate();
 
     // Callable from the main thread or the database thread.
-    void scheduleTask(PassOwnPtr<DatabaseTask>);
+    void scheduleTask(std::unique_ptr<DatabaseTask>);
     bool isDatabaseThread() const;
 
     // Callable only from the database thread.
@@ -72,14 +71,14 @@
     void cleanupDatabaseThread();
     void cleanupDatabaseThreadCompleted();
 
-    OwnPtr<WebThreadSupportingGC> m_thread;
+    std::unique_ptr<WebThreadSupportingGC> m_thread;
 
     // This set keeps track of the open databases that have been used on this thread.
     // This must be updated in the database thread though it is constructed and
     // destructed in the context thread.
     HashSet<CrossThreadPersistent<Database>> m_openDatabaseSet;
 
-    OwnPtr<SQLTransactionClient> m_transactionClient;
+    std::unique_ptr<SQLTransactionClient> m_transactionClient;
     CrossThreadPersistent<SQLTransactionCoordinator> m_transactionCoordinator;
     TaskSynchronizer* m_cleanupSync;
 
diff --git a/third_party/WebKit/Source/modules/webdatabase/DatabaseTracker.cpp b/third_party/WebKit/Source/modules/webdatabase/DatabaseTracker.cpp
index d19c06e4..3c31da46 100644
--- a/third_party/WebKit/Source/modules/webdatabase/DatabaseTracker.cpp
+++ b/third_party/WebKit/Source/modules/webdatabase/DatabaseTracker.cpp
@@ -88,7 +88,7 @@
 {
     MutexLocker openDatabaseMapLock(m_openDatabaseMapGuard);
     if (!m_openDatabaseMap)
-        m_openDatabaseMap = adoptPtr(new DatabaseOriginMap);
+        m_openDatabaseMap = wrapUnique(new DatabaseOriginMap);
 
     String originString = database->getSecurityOrigin()->toRawString();
     DatabaseNameMap* nameMap = m_openDatabaseMap->get(originString);
diff --git a/third_party/WebKit/Source/modules/webdatabase/DatabaseTracker.h b/third_party/WebKit/Source/modules/webdatabase/DatabaseTracker.h
index 03a57a7..3a8bc64 100644
--- a/third_party/WebKit/Source/modules/webdatabase/DatabaseTracker.h
+++ b/third_party/WebKit/Source/modules/webdatabase/DatabaseTracker.h
@@ -38,6 +38,7 @@
 #include "wtf/ThreadingPrimitives.h"
 #include "wtf/text/StringHash.h"
 #include "wtf/text/WTFString.h"
+#include <memory>
 
 namespace blink {
 
@@ -85,7 +86,7 @@
 
     Mutex m_openDatabaseMapGuard;
 
-    mutable OwnPtr<DatabaseOriginMap> m_openDatabaseMap;
+    mutable std::unique_ptr<DatabaseOriginMap> m_openDatabaseMap;
 };
 
 } // namespace blink
diff --git a/third_party/WebKit/Source/modules/webdatabase/InspectorDatabaseAgent.h b/third_party/WebKit/Source/modules/webdatabase/InspectorDatabaseAgent.h
index 5ceb9c1..b8ec23c 100644
--- a/third_party/WebKit/Source/modules/webdatabase/InspectorDatabaseAgent.h
+++ b/third_party/WebKit/Source/modules/webdatabase/InspectorDatabaseAgent.h
@@ -35,7 +35,6 @@
 #include "platform/heap/Handle.h"
 #include "wtf/HashMap.h"
 #include "wtf/Noncopyable.h"
-#include "wtf/PassOwnPtr.h"
 #include "wtf/text/WTFString.h"
 
 namespace blink {
diff --git a/third_party/WebKit/Source/modules/webdatabase/SQLError.h b/third_party/WebKit/Source/modules/webdatabase/SQLError.h
index 25187680..730f5c9 100644
--- a/third_party/WebKit/Source/modules/webdatabase/SQLError.h
+++ b/third_party/WebKit/Source/modules/webdatabase/SQLError.h
@@ -30,24 +30,26 @@
 #define SQLError_h
 
 #include "bindings/core/v8/ScriptWrappable.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/text/WTFString.h"
+#include <memory>
 
 namespace blink {
 
 class SQLErrorData {
     USING_FAST_MALLOC(SQLErrorData);
 public:
-    static PassOwnPtr<SQLErrorData> create(unsigned code, const String& message)
+    static std::unique_ptr<SQLErrorData> create(unsigned code, const String& message)
     {
-        return adoptPtr(new SQLErrorData(code, message));
+        return wrapUnique(new SQLErrorData(code, message));
     }
 
-    static PassOwnPtr<SQLErrorData> create(unsigned code, const char* message, int sqliteCode, const char* sqliteMessage)
+    static std::unique_ptr<SQLErrorData> create(unsigned code, const char* message, int sqliteCode, const char* sqliteMessage)
     {
         return create(code, String::format("%s (%d %s)", message, sqliteCode, sqliteMessage));
     }
 
-    static PassOwnPtr<SQLErrorData> create(const SQLErrorData& data)
+    static std::unique_ptr<SQLErrorData> create(const SQLErrorData& data)
     {
         return create(data.code(), data.message());
     }
diff --git a/third_party/WebKit/Source/modules/webdatabase/SQLStatementBackend.h b/third_party/WebKit/Source/modules/webdatabase/SQLStatementBackend.h
index 204d50b..1f789c6 100644
--- a/third_party/WebKit/Source/modules/webdatabase/SQLStatementBackend.h
+++ b/third_party/WebKit/Source/modules/webdatabase/SQLStatementBackend.h
@@ -33,6 +33,7 @@
 #include "wtf/Forward.h"
 #include "wtf/Vector.h"
 #include "wtf/text/WTFString.h"
+#include <memory>
 
 namespace blink {
 
@@ -71,7 +72,7 @@
     bool m_hasCallback;
     bool m_hasErrorCallback;
 
-    OwnPtr<SQLErrorData> m_error;
+    std::unique_ptr<SQLErrorData> m_error;
     Member<SQLResultSet> m_resultSet;
 
     int m_permissions;
diff --git a/third_party/WebKit/Source/modules/webdatabase/SQLTransaction.h b/third_party/WebKit/Source/modules/webdatabase/SQLTransaction.h
index 21e5eaf7..ed47e55 100644
--- a/third_party/WebKit/Source/modules/webdatabase/SQLTransaction.h
+++ b/third_party/WebKit/Source/modules/webdatabase/SQLTransaction.h
@@ -35,6 +35,7 @@
 #include "modules/webdatabase/SQLStatement.h"
 #include "modules/webdatabase/SQLTransactionStateMachine.h"
 #include "platform/heap/Handle.h"
+#include <memory>
 
 namespace blink {
 
@@ -110,7 +111,7 @@
     Member<SQLTransactionErrorCallback> m_errorCallback;
 
     bool m_executeSqlAllowed;
-    OwnPtr<SQLErrorData> m_transactionError;
+    std::unique_ptr<SQLErrorData> m_transactionError;
 
     bool m_readOnly;
 };
diff --git a/third_party/WebKit/Source/modules/webdatabase/SQLTransactionBackend.cpp b/third_party/WebKit/Source/modules/webdatabase/SQLTransactionBackend.cpp
index d1f589f8..8a4f350 100644
--- a/third_party/WebKit/Source/modules/webdatabase/SQLTransactionBackend.cpp
+++ b/third_party/WebKit/Source/modules/webdatabase/SQLTransactionBackend.cpp
@@ -41,7 +41,9 @@
 #include "modules/webdatabase/sqlite/SQLValue.h"
 #include "modules/webdatabase/sqlite/SQLiteTransaction.h"
 #include "platform/Logging.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/StdLibExtras.h"
+#include <memory>
 
 
 // How does a SQLTransaction work?
@@ -253,7 +255,7 @@
 //
 //     When executing the transaction (in DatabaseThread::databaseThread()):
 //     ====================================================================
-//     OwnPtr<DatabaseTask> task;             // points to ...
+//     std::unique_ptr<DatabaseTask> task;             // points to ...
 //     --> DatabaseTransactionTask            // Member<SQLTransactionBackend> m_transaction points to ...
 //         --> SQLTransactionBackend          // Member<SQLTransaction> m_frontend;
 //             --> SQLTransaction             // Member<SQLTransactionBackend> m_backend points to ...
@@ -277,7 +279,7 @@
 //     However, there will still be a DatabaseTask pointing to the SQLTransactionBackend (see
 //     the "When executing the transaction" chain above). This will keep the
 //     SQLTransactionBackend alive until DatabaseThread::databaseThread() releases its
-//     task OwnPtr.
+//     task std::unique_ptr.
 //
 //     What happens if a transaction is interrupted?
 //     ============================================
@@ -561,7 +563,7 @@
         m_database->sqliteDatabase().setMaximumSize(m_database->maximumSize());
 
     ASSERT(!m_sqliteTransaction);
-    m_sqliteTransaction = adoptPtr(new SQLiteTransaction(m_database->sqliteDatabase(), m_readOnly));
+    m_sqliteTransaction = wrapUnique(new SQLiteTransaction(m_database->sqliteDatabase(), m_readOnly));
 
     m_database->resetDeletes();
     m_database->disableAuthorizer();
diff --git a/third_party/WebKit/Source/modules/webdatabase/SQLTransactionBackend.h b/third_party/WebKit/Source/modules/webdatabase/SQLTransactionBackend.h
index c3504d8d..989d733 100644
--- a/third_party/WebKit/Source/modules/webdatabase/SQLTransactionBackend.h
+++ b/third_party/WebKit/Source/modules/webdatabase/SQLTransactionBackend.h
@@ -35,6 +35,7 @@
 #include "wtf/Deque.h"
 #include "wtf/Forward.h"
 #include "wtf/ThreadingPrimitives.h"
+#include <memory>
 
 namespace blink {
 
@@ -110,7 +111,7 @@
 
     Member<Database> m_database;
     Member<SQLTransactionWrapper> m_wrapper;
-    OwnPtr<SQLErrorData> m_transactionError;
+    std::unique_ptr<SQLErrorData> m_transactionError;
 
     bool m_hasCallback;
     bool m_hasSuccessCallback;
@@ -124,7 +125,7 @@
     Mutex m_statementMutex;
     Deque<CrossThreadPersistent<SQLStatementBackend>> m_statementQueue;
 
-    OwnPtr<SQLiteTransaction> m_sqliteTransaction;
+    std::unique_ptr<SQLiteTransaction> m_sqliteTransaction;
 };
 
 } // namespace blink
diff --git a/third_party/WebKit/Source/modules/webdatabase/sqlite/SQLiteStatement.cpp b/third_party/WebKit/Source/modules/webdatabase/sqlite/SQLiteStatement.cpp
index 9b0db26..230486d9 100644
--- a/third_party/WebKit/Source/modules/webdatabase/sqlite/SQLiteStatement.cpp
+++ b/third_party/WebKit/Source/modules/webdatabase/sqlite/SQLiteStatement.cpp
@@ -30,7 +30,9 @@
 #include "platform/heap/SafePoint.h"
 #include "third_party/sqlite/sqlite3.h"
 #include "wtf/Assertions.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/text/CString.h"
+#include <memory>
 
 // SQLite 3.6.16 makes sqlite3_prepare_v2 automatically retry preparing the statement
 // once if the database scheme has changed. We rely on this behavior.
@@ -100,8 +102,8 @@
 
     // Need to pass non-stack |const char*| and |sqlite3_stmt*| to avoid race
     // with Oilpan stack scanning.
-    OwnPtr<const char*> tail = adoptPtr(new const char*);
-    OwnPtr<sqlite3_stmt*> statement = adoptPtr(new sqlite3_stmt*);
+    std::unique_ptr<const char*> tail = wrapUnique(new const char*);
+    std::unique_ptr<sqlite3_stmt*> statement = wrapUnique(new sqlite3_stmt*);
     *tail = nullptr;
     *statement = nullptr;
     int error;
diff --git a/third_party/WebKit/Source/modules/webgl/WebGL2RenderingContext.cpp b/third_party/WebKit/Source/modules/webgl/WebGL2RenderingContext.cpp
index 0f85d11..a9ddea2 100644
--- a/third_party/WebKit/Source/modules/webgl/WebGL2RenderingContext.cpp
+++ b/third_party/WebKit/Source/modules/webgl/WebGL2RenderingContext.cpp
@@ -28,6 +28,7 @@
 #include "platform/graphics/gpu/DrawingBuffer.h"
 #include "public/platform/Platform.h"
 #include "public/platform/WebGraphicsContext3DProvider.h"
+#include <memory>
 
 namespace blink {
 
@@ -39,11 +40,11 @@
     }
 
     WebGLContextAttributes attributes = toWebGLContextAttributes(attrs);
-    OwnPtr<WebGraphicsContext3DProvider> contextProvider(createWebGraphicsContext3DProvider(canvas, attributes, 2));
+    std::unique_ptr<WebGraphicsContext3DProvider> contextProvider(createWebGraphicsContext3DProvider(canvas, attributes, 2));
     if (!contextProvider)
         return nullptr;
     gpu::gles2::GLES2Interface* gl = contextProvider->contextGL();
-    OwnPtr<Extensions3DUtil> extensionsUtil = Extensions3DUtil::create(gl);
+    std::unique_ptr<Extensions3DUtil> extensionsUtil = Extensions3DUtil::create(gl);
     if (!extensionsUtil)
         return nullptr;
     if (extensionsUtil->supportsExtension("GL_EXT_debug_marker")) {
@@ -69,7 +70,7 @@
     canvas->dispatchEvent(WebGLContextEvent::create(EventTypeNames::webglcontextcreationerror, false, true, error));
 }
 
-WebGL2RenderingContext::WebGL2RenderingContext(HTMLCanvasElement* passedCanvas, PassOwnPtr<WebGraphicsContext3DProvider> contextProvider, const WebGLContextAttributes& requestedAttributes)
+WebGL2RenderingContext::WebGL2RenderingContext(HTMLCanvasElement* passedCanvas, std::unique_ptr<WebGraphicsContext3DProvider> contextProvider, const WebGLContextAttributes& requestedAttributes)
     : WebGL2RenderingContextBase(passedCanvas, std::move(contextProvider), requestedAttributes)
 {
 }
diff --git a/third_party/WebKit/Source/modules/webgl/WebGL2RenderingContext.h b/third_party/WebKit/Source/modules/webgl/WebGL2RenderingContext.h
index ea07b6d..68959acd 100644
--- a/third_party/WebKit/Source/modules/webgl/WebGL2RenderingContext.h
+++ b/third_party/WebKit/Source/modules/webgl/WebGL2RenderingContext.h
@@ -7,6 +7,7 @@
 
 #include "core/html/canvas/CanvasRenderingContextFactory.h"
 #include "modules/webgl/WebGL2RenderingContextBase.h"
+#include <memory>
 
 namespace blink {
 
@@ -42,7 +43,7 @@
     DECLARE_VIRTUAL_TRACE_WRAPPERS();
 
 protected:
-    WebGL2RenderingContext(HTMLCanvasElement* passedCanvas, PassOwnPtr<WebGraphicsContext3DProvider>, const WebGLContextAttributes& requestedAttributes);
+    WebGL2RenderingContext(HTMLCanvasElement* passedCanvas, std::unique_ptr<WebGraphicsContext3DProvider>, const WebGLContextAttributes& requestedAttributes);
 
     Member<EXTColorBufferFloat> m_extColorBufferFloat;
     Member<EXTDisjointTimerQuery> m_extDisjointTimerQuery;
diff --git a/third_party/WebKit/Source/modules/webgl/WebGL2RenderingContextBase.cpp b/third_party/WebKit/Source/modules/webgl/WebGL2RenderingContextBase.cpp
index d5e7e456..1a18fb1 100644
--- a/third_party/WebKit/Source/modules/webgl/WebGL2RenderingContextBase.cpp
+++ b/third_party/WebKit/Source/modules/webgl/WebGL2RenderingContextBase.cpp
@@ -26,9 +26,9 @@
 #include "modules/webgl/WebGLVertexArrayObject.h"
 #include "platform/CheckedInt.h"
 #include "public/platform/WebGraphicsContext3DProvider.h"
-#include "wtf/OwnPtr.h"
-#include "wtf/PassOwnPtr.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/text/WTFString.h"
+#include <memory>
 
 using WTF::String;
 
@@ -114,7 +114,7 @@
     GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC,
 };
 
-WebGL2RenderingContextBase::WebGL2RenderingContextBase(HTMLCanvasElement* passedCanvas, PassOwnPtr<WebGraphicsContext3DProvider> contextProvider, const WebGLContextAttributes& requestedAttributes)
+WebGL2RenderingContextBase::WebGL2RenderingContextBase(HTMLCanvasElement* passedCanvas, std::unique_ptr<WebGraphicsContext3DProvider> contextProvider, const WebGLContextAttributes& requestedAttributes)
     : WebGLRenderingContextBase(passedCanvas, std::move(contextProvider), requestedAttributes)
 {
     m_supportedInternalFormatsStorage.insert(kSupportedInternalFormatsStorage, kSupportedInternalFormatsStorage + WTF_ARRAY_LENGTH(kSupportedInternalFormatsStorage));
@@ -405,20 +405,20 @@
     switch (pname) {
     case GL_SAMPLES:
         {
-            OwnPtr<GLint[]> values;
+            std::unique_ptr<GLint[]> values;
             GLint length = -1;
             if (!floatType) {
                 contextGL()->GetInternalformativ(target, internalformat, GL_NUM_SAMPLE_COUNTS, 1, &length);
                 if (length <= 0)
                     return WebGLAny(scriptState, DOMInt32Array::create(0));
 
-                values = adoptArrayPtr(new GLint[length]);
+                values = wrapArrayUnique(new GLint[length]);
                 for (GLint ii = 0; ii < length; ++ii)
                     values[ii] = 0;
                 contextGL()->GetInternalformativ(target, internalformat, GL_SAMPLES, length, values.get());
             } else {
                 length = 1;
-                values = adoptArrayPtr(new GLint[1]);
+                values = wrapArrayUnique(new GLint[1]);
                 values[0] = 1;
             }
             return WebGLAny(scriptState, DOMInt32Array::create(values.get(), length));
@@ -2116,7 +2116,7 @@
     if (maxNameLength <= 0) {
         return nullptr;
     }
-    OwnPtr<GLchar[]> name = adoptArrayPtr(new GLchar[maxNameLength]);
+    std::unique_ptr<GLchar[]> name = wrapArrayUnique(new GLchar[maxNameLength]);
     GLsizei length = 0;
     GLsizei size = 0;
     GLenum type = 0;
@@ -2409,7 +2409,7 @@
         synthesizeGLError(GL_INVALID_VALUE, "getActiveUniformBlockName", "invalid uniform block index");
         return String();
     }
-    OwnPtr<GLchar[]> name = adoptArrayPtr(new GLchar[maxNameLength]);
+    std::unique_ptr<GLchar[]> name = wrapArrayUnique(new GLchar[maxNameLength]);
 
     GLsizei length = 0;
     contextGL()->GetActiveUniformBlockName(objectOrZero(program), uniformBlockIndex, maxNameLength, &length, name.get());
diff --git a/third_party/WebKit/Source/modules/webgl/WebGL2RenderingContextBase.h b/third_party/WebKit/Source/modules/webgl/WebGL2RenderingContextBase.h
index 9910182c..60d9fd2 100644
--- a/third_party/WebKit/Source/modules/webgl/WebGL2RenderingContextBase.h
+++ b/third_party/WebKit/Source/modules/webgl/WebGL2RenderingContextBase.h
@@ -7,6 +7,7 @@
 
 #include "modules/webgl/WebGLExtension.h"
 #include "modules/webgl/WebGLRenderingContextBase.h"
+#include <memory>
 
 namespace blink {
 
@@ -217,7 +218,7 @@
     DECLARE_VIRTUAL_TRACE();
 
 protected:
-    WebGL2RenderingContextBase(HTMLCanvasElement*, PassOwnPtr<WebGraphicsContext3DProvider>, const WebGLContextAttributes& requestedAttributes);
+    WebGL2RenderingContextBase(HTMLCanvasElement*, std::unique_ptr<WebGraphicsContext3DProvider>, const WebGLContextAttributes& requestedAttributes);
 
     // Helper function to validate target and the attachment combination for getFramebufferAttachmentParameters.
     // Generate GL error and return false if parameters are illegal.
diff --git a/third_party/WebKit/Source/modules/webgl/WebGLRenderingContext.cpp b/third_party/WebKit/Source/modules/webgl/WebGLRenderingContext.cpp
index 377dc58..c2509ac 100644
--- a/third_party/WebKit/Source/modules/webgl/WebGLRenderingContext.cpp
+++ b/third_party/WebKit/Source/modules/webgl/WebGLRenderingContext.cpp
@@ -62,6 +62,7 @@
 #include "platform/graphics/gpu/DrawingBuffer.h"
 #include "public/platform/Platform.h"
 #include "public/platform/WebGraphicsContext3DProvider.h"
+#include <memory>
 
 namespace blink {
 
@@ -72,7 +73,7 @@
     if (!contextProvider)
         return false;
     gpu::gles2::GLES2Interface* gl = contextProvider->contextGL();
-    OwnPtr<Extensions3DUtil> extensionsUtil = Extensions3DUtil::create(gl);
+    std::unique_ptr<Extensions3DUtil> extensionsUtil = Extensions3DUtil::create(gl);
     if (!extensionsUtil)
         return false;
     if (extensionsUtil->supportsExtension("GL_EXT_debug_marker")) {
@@ -85,7 +86,7 @@
 CanvasRenderingContext* WebGLRenderingContext::Factory::create(ScriptState* scriptState, OffscreenCanvas* offscreenCanvas, const CanvasContextCreationAttributes& attrs)
 {
     WebGLContextAttributes attributes = toWebGLContextAttributes(attrs);
-    OwnPtr<WebGraphicsContext3DProvider> contextProvider(createWebGraphicsContext3DProvider(scriptState, attributes, 1));
+    std::unique_ptr<WebGraphicsContext3DProvider> contextProvider(createWebGraphicsContext3DProvider(scriptState, attributes, 1));
     if (!shouldCreateContext(contextProvider.get()))
         return nullptr;
 
@@ -101,7 +102,7 @@
 CanvasRenderingContext* WebGLRenderingContext::Factory::create(HTMLCanvasElement* canvas, const CanvasContextCreationAttributes& attrs, Document&)
 {
     WebGLContextAttributes attributes = toWebGLContextAttributes(attrs);
-    OwnPtr<WebGraphicsContext3DProvider> contextProvider(createWebGraphicsContext3DProvider(canvas, attributes, 1));
+    std::unique_ptr<WebGraphicsContext3DProvider> contextProvider(createWebGraphicsContext3DProvider(canvas, attributes, 1));
     if (!shouldCreateContext(contextProvider.get()))
         return nullptr;
 
@@ -121,12 +122,12 @@
     canvas->dispatchEvent(WebGLContextEvent::create(EventTypeNames::webglcontextcreationerror, false, true, error));
 }
 
-WebGLRenderingContext::WebGLRenderingContext(HTMLCanvasElement* passedCanvas, PassOwnPtr<WebGraphicsContext3DProvider> contextProvider, const WebGLContextAttributes& requestedAttributes)
+WebGLRenderingContext::WebGLRenderingContext(HTMLCanvasElement* passedCanvas, std::unique_ptr<WebGraphicsContext3DProvider> contextProvider, const WebGLContextAttributes& requestedAttributes)
     : WebGLRenderingContextBase(passedCanvas, std::move(contextProvider), requestedAttributes)
 {
 }
 
-WebGLRenderingContext::WebGLRenderingContext(OffscreenCanvas* passedOffscreenCanvas, PassOwnPtr<WebGraphicsContext3DProvider> contextProvider, const WebGLContextAttributes& requestedAttributes)
+WebGLRenderingContext::WebGLRenderingContext(OffscreenCanvas* passedOffscreenCanvas, std::unique_ptr<WebGraphicsContext3DProvider> contextProvider, const WebGLContextAttributes& requestedAttributes)
     : WebGLRenderingContextBase(passedOffscreenCanvas, std::move(contextProvider), requestedAttributes)
 {
 }
diff --git a/third_party/WebKit/Source/modules/webgl/WebGLRenderingContext.h b/third_party/WebKit/Source/modules/webgl/WebGLRenderingContext.h
index bd12bf1..d3d7b2bd 100644
--- a/third_party/WebKit/Source/modules/webgl/WebGLRenderingContext.h
+++ b/third_party/WebKit/Source/modules/webgl/WebGLRenderingContext.h
@@ -28,6 +28,7 @@
 
 #include "core/html/canvas/CanvasRenderingContextFactory.h"
 #include "modules/webgl/WebGLRenderingContextBase.h"
+#include <memory>
 
 namespace blink {
 
@@ -64,8 +65,8 @@
     DECLARE_VIRTUAL_TRACE_WRAPPERS();
 
 private:
-    WebGLRenderingContext(HTMLCanvasElement*, PassOwnPtr<WebGraphicsContext3DProvider>, const WebGLContextAttributes&);
-    WebGLRenderingContext(OffscreenCanvas*, PassOwnPtr<WebGraphicsContext3DProvider>, const WebGLContextAttributes&);
+    WebGLRenderingContext(HTMLCanvasElement*, std::unique_ptr<WebGraphicsContext3DProvider>, const WebGLContextAttributes&);
+    WebGLRenderingContext(OffscreenCanvas*, std::unique_ptr<WebGraphicsContext3DProvider>, const WebGLContextAttributes&);
 
     // Enabled extension objects.
     Member<ANGLEInstancedArrays> m_angleInstancedArrays;
diff --git a/third_party/WebKit/Source/modules/webgl/WebGLRenderingContextBase.cpp b/third_party/WebKit/Source/modules/webgl/WebGLRenderingContextBase.cpp
index 8bff5927..548a2cd 100644
--- a/third_party/WebKit/Source/modules/webgl/WebGLRenderingContextBase.cpp
+++ b/third_party/WebKit/Source/modules/webgl/WebGLRenderingContextBase.cpp
@@ -93,11 +93,10 @@
 #include "public/platform/Platform.h"
 #include "public/platform/functional/WebFunction.h"
 #include "wtf/Functional.h"
-#include "wtf/PassOwnPtr.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/text/StringBuilder.h"
 #include "wtf/text/StringUTF8Adaptor.h"
 #include "wtf/typed_arrays/ArrayBufferContents.h"
-
 #include <memory>
 
 namespace blink {
@@ -537,18 +536,18 @@
     Platform::GraphicsInfo* glInfo;
     ScriptState* scriptState;
     // Outputs.
-    OwnPtr<WebGraphicsContext3DProvider> createdContextProvider;
+    std::unique_ptr<WebGraphicsContext3DProvider> createdContextProvider;
 };
 
 static void createContextProviderOnMainThread(ContextProviderCreationInfo* creationInfo, WaitableEvent* waitableEvent)
 {
     ASSERT(isMainThread());
-    creationInfo->createdContextProvider = adoptPtr(Platform::current()->createOffscreenGraphicsContext3DProvider(
+    creationInfo->createdContextProvider = wrapUnique(Platform::current()->createOffscreenGraphicsContext3DProvider(
         creationInfo->contextAttributes, creationInfo->scriptState->getExecutionContext()->url(), 0, creationInfo->glInfo));
     waitableEvent->signal();
 }
 
-static PassOwnPtr<WebGraphicsContext3DProvider> createContextProviderOnWorkerThread(Platform::ContextAttributes contextAttributes, Platform::GraphicsInfo* glInfo, ScriptState* scriptState)
+static std::unique_ptr<WebGraphicsContext3DProvider> createContextProviderOnWorkerThread(Platform::ContextAttributes contextAttributes, Platform::GraphicsInfo* glInfo, ScriptState* scriptState)
 {
     WaitableEvent waitableEvent;
     ContextProviderCreationInfo creationInfo;
@@ -561,7 +560,7 @@
     return std::move(creationInfo.createdContextProvider);
 }
 
-PassOwnPtr<WebGraphicsContext3DProvider> WebGLRenderingContextBase::createContextProviderInternal(HTMLCanvasElement* canvas, ScriptState* scriptState, WebGLContextAttributes attributes, unsigned webGLVersion)
+std::unique_ptr<WebGraphicsContext3DProvider> WebGLRenderingContextBase::createContextProviderInternal(HTMLCanvasElement* canvas, ScriptState* scriptState, WebGLContextAttributes attributes, unsigned webGLVersion)
 {
     // Exactly one of these must be provided.
     DCHECK_EQ(!canvas, !!scriptState);
@@ -570,10 +569,10 @@
 
     Platform::ContextAttributes contextAttributes = toPlatformContextAttributes(attributes, webGLVersion);
     Platform::GraphicsInfo glInfo;
-    OwnPtr<WebGraphicsContext3DProvider> contextProvider;
+    std::unique_ptr<WebGraphicsContext3DProvider> contextProvider;
     if (isMainThread()) {
         const auto& url = canvas ? canvas->document().topDocument().url() : scriptState->getExecutionContext()->url();
-        contextProvider = adoptPtr(Platform::current()->createOffscreenGraphicsContext3DProvider(
+        contextProvider = wrapUnique(Platform::current()->createOffscreenGraphicsContext3DProvider(
             contextAttributes, url, 0, &glInfo));
     } else {
         contextProvider = createContextProviderOnWorkerThread(contextAttributes, &glInfo, scriptState);
@@ -599,7 +598,7 @@
     return contextProvider;
 }
 
-PassOwnPtr<WebGraphicsContext3DProvider> WebGLRenderingContextBase::createWebGraphicsContext3DProvider(HTMLCanvasElement* canvas, WebGLContextAttributes attributes, unsigned webGLVersion)
+std::unique_ptr<WebGraphicsContext3DProvider> WebGLRenderingContextBase::createWebGraphicsContext3DProvider(HTMLCanvasElement* canvas, WebGLContextAttributes attributes, unsigned webGLVersion)
 {
     Document& document = canvas->document();
     LocalFrame* frame = document.frame();
@@ -619,7 +618,7 @@
     return createContextProviderInternal(canvas, nullptr, attributes, webGLVersion);
 }
 
-PassOwnPtr<WebGraphicsContext3DProvider> WebGLRenderingContextBase::createWebGraphicsContext3DProvider(ScriptState* scriptState, WebGLContextAttributes attributes, unsigned webGLVersion)
+std::unique_ptr<WebGraphicsContext3DProvider> WebGLRenderingContextBase::createWebGraphicsContext3DProvider(ScriptState* scriptState, WebGLContextAttributes attributes, unsigned webGLVersion)
 {
     return createContextProviderInternal(nullptr, scriptState, attributes, webGLVersion);
 }
@@ -878,15 +877,15 @@
 
 } // namespace
 
-WebGLRenderingContextBase::WebGLRenderingContextBase(OffscreenCanvas* passedOffscreenCanvas, PassOwnPtr<WebGraphicsContext3DProvider> contextProvider, const WebGLContextAttributes& requestedAttributes)
+WebGLRenderingContextBase::WebGLRenderingContextBase(OffscreenCanvas* passedOffscreenCanvas, std::unique_ptr<WebGraphicsContext3DProvider> contextProvider, const WebGLContextAttributes& requestedAttributes)
     : WebGLRenderingContextBase(nullptr, passedOffscreenCanvas, std::move(contextProvider), requestedAttributes)
 { }
 
-WebGLRenderingContextBase::WebGLRenderingContextBase(HTMLCanvasElement* passedCanvas, PassOwnPtr<WebGraphicsContext3DProvider> contextProvider, const WebGLContextAttributes& requestedAttributes)
+WebGLRenderingContextBase::WebGLRenderingContextBase(HTMLCanvasElement* passedCanvas, std::unique_ptr<WebGraphicsContext3DProvider> contextProvider, const WebGLContextAttributes& requestedAttributes)
     : WebGLRenderingContextBase(passedCanvas, nullptr, std::move(contextProvider), requestedAttributes)
 { }
 
-WebGLRenderingContextBase::WebGLRenderingContextBase(HTMLCanvasElement* passedCanvas, OffscreenCanvas* passedOffscreenCanvas, PassOwnPtr<WebGraphicsContext3DProvider> contextProvider, const WebGLContextAttributes& requestedAttributes)
+WebGLRenderingContextBase::WebGLRenderingContextBase(HTMLCanvasElement* passedCanvas, OffscreenCanvas* passedOffscreenCanvas, std::unique_ptr<WebGraphicsContext3DProvider> contextProvider, const WebGLContextAttributes& requestedAttributes)
     : CanvasRenderingContext(passedCanvas, passedOffscreenCanvas)
     , m_isHidden(false)
     , m_contextLostMode(NotLostContext)
@@ -937,7 +936,7 @@
     ADD_VALUES_TO_SET(m_supportedTypes, kSupportedTypesES2);
 }
 
-PassRefPtr<DrawingBuffer> WebGLRenderingContextBase::createDrawingBuffer(PassOwnPtr<WebGraphicsContext3DProvider> contextProvider)
+PassRefPtr<DrawingBuffer> WebGLRenderingContextBase::createDrawingBuffer(std::unique_ptr<WebGraphicsContext3DProvider> contextProvider)
 {
     bool premultipliedAlpha = m_requestedAttributes.premultipliedAlpha();
     bool wantAlphaChannel = m_requestedAttributes.alpha();
@@ -4434,9 +4433,9 @@
             }
 
             // Try using an accelerated image buffer, this allows YUV conversion to be done on the GPU.
-            OwnPtr<ImageBufferSurface> surface = adoptPtr(new AcceleratedImageBufferSurface(IntSize(video->videoWidth(), video->videoHeight())));
+            std::unique_ptr<ImageBufferSurface> surface = wrapUnique(new AcceleratedImageBufferSurface(IntSize(video->videoWidth(), video->videoHeight())));
             if (surface->isValid()) {
-                OwnPtr<ImageBuffer> imageBuffer(ImageBuffer::create(std::move(surface)));
+                std::unique_ptr<ImageBuffer> imageBuffer(ImageBuffer::create(std::move(surface)));
                 if (imageBuffer) {
                     // The video element paints an RGBA frame into our surface here. By using an AcceleratedImageBufferSurface,
                     // we enable the WebMediaPlayer implementation to do any necessary color space conversion on the GPU (though it
@@ -4486,7 +4485,7 @@
     ASSERT(bitmap->bitmapImage());
     RefPtr<SkImage> skImage = bitmap->bitmapImage()->imageForCurrentFrame();
     SkPixmap pixmap;
-    OwnPtr<uint8_t[]> pixelData;
+    std::unique_ptr<uint8_t[]> pixelData;
     uint8_t* pixelDataPtr = nullptr;
     // TODO(crbug.com/613411): peekPixels fails if the SkImage is texture-backed
     // Use texture mailbox in that case.
@@ -6091,7 +6090,7 @@
 
     Platform::ContextAttributes attributes = toPlatformContextAttributes(m_requestedAttributes, version());
     Platform::GraphicsInfo glInfo;
-    OwnPtr<WebGraphicsContext3DProvider> contextProvider = adoptPtr(Platform::current()->createOffscreenGraphicsContext3DProvider(
+    std::unique_ptr<WebGraphicsContext3DProvider> contextProvider = wrapUnique(Platform::current()->createOffscreenGraphicsContext3DProvider(
         attributes, canvas()->document().topDocument().url(), 0, &glInfo));
     RefPtr<DrawingBuffer> buffer;
     if (contextProvider->bindToCurrentThread()) {
@@ -6133,7 +6132,7 @@
 }
 
 WebGLRenderingContextBase::LRUImageBufferCache::LRUImageBufferCache(int capacity)
-    : m_buffers(adoptArrayPtr(new OwnPtr<ImageBuffer>[capacity]))
+    : m_buffers(wrapArrayUnique(new std::unique_ptr<ImageBuffer>[capacity]))
     , m_capacity(capacity)
 {
 }
@@ -6151,7 +6150,7 @@
         return buf;
     }
 
-    OwnPtr<ImageBuffer> temp(ImageBuffer::create(size));
+    std::unique_ptr<ImageBuffer> temp(ImageBuffer::create(size));
     if (!temp)
         return nullptr;
     i = std::min(m_capacity - 1, i);
diff --git a/third_party/WebKit/Source/modules/webgl/WebGLRenderingContextBase.h b/third_party/WebKit/Source/modules/webgl/WebGLRenderingContextBase.h
index db23380a..ed747be 100644
--- a/third_party/WebKit/Source/modules/webgl/WebGLRenderingContextBase.h
+++ b/third_party/WebKit/Source/modules/webgl/WebGLRenderingContextBase.h
@@ -48,9 +48,8 @@
 #include "public/platform/Platform.h"
 #include "public/platform/WebGraphicsContext3DProvider.h"
 #include "third_party/khronos/GLES2/gl2.h"
-#include "wtf/OwnPtr.h"
 #include "wtf/text/WTFString.h"
-
+#include <memory>
 #include <set>
 
 namespace blink {
@@ -140,8 +139,8 @@
 
     static unsigned getWebGLVersion(const CanvasRenderingContext*);
 
-    static PassOwnPtr<WebGraphicsContext3DProvider> createWebGraphicsContext3DProvider(HTMLCanvasElement*, WebGLContextAttributes, unsigned webGLVersion);
-    static PassOwnPtr<WebGraphicsContext3DProvider> createWebGraphicsContext3DProvider(ScriptState*, WebGLContextAttributes, unsigned webGLVersion);
+    static std::unique_ptr<WebGraphicsContext3DProvider> createWebGraphicsContext3DProvider(HTMLCanvasElement*, WebGLContextAttributes, unsigned webGLVersion);
+    static std::unique_ptr<WebGraphicsContext3DProvider> createWebGraphicsContext3DProvider(ScriptState*, WebGLContextAttributes, unsigned webGLVersion);
     static void forceNextWebGLContextCreationToFail();
 
     int drawingBufferWidth() const;
@@ -431,9 +430,9 @@
     friend class ScopedTexture2DRestorer;
     friend class ScopedFramebufferRestorer;
 
-    WebGLRenderingContextBase(HTMLCanvasElement*, PassOwnPtr<WebGraphicsContext3DProvider>, const WebGLContextAttributes&);
-    WebGLRenderingContextBase(OffscreenCanvas*, PassOwnPtr<WebGraphicsContext3DProvider>, const WebGLContextAttributes&);
-    PassRefPtr<DrawingBuffer> createDrawingBuffer(PassOwnPtr<WebGraphicsContext3DProvider>);
+    WebGLRenderingContextBase(HTMLCanvasElement*, std::unique_ptr<WebGraphicsContext3DProvider>, const WebGLContextAttributes&);
+    WebGLRenderingContextBase(OffscreenCanvas*, std::unique_ptr<WebGraphicsContext3DProvider>, const WebGLContextAttributes&);
+    PassRefPtr<DrawingBuffer> createDrawingBuffer(std::unique_ptr<WebGraphicsContext3DProvider>);
     void setupFlags();
 
     // CanvasRenderingContext implementation.
@@ -537,7 +536,7 @@
         ImageBuffer* imageBuffer(const IntSize&);
     private:
         void bubbleToFront(int idx);
-        OwnPtr<OwnPtr<ImageBuffer>[]> m_buffers;
+        std::unique_ptr<std::unique_ptr<ImageBuffer>[]> m_buffers;
         int m_capacity;
     };
     LRUImageBufferCache m_generatedImageCache;
@@ -586,7 +585,7 @@
 
     unsigned long m_onePlusMaxNonDefaultTextureUnit;
 
-    OwnPtr<Extensions3DUtil> m_extensionsUtil;
+    std::unique_ptr<Extensions3DUtil> m_extensionsUtil;
 
     enum ExtensionFlags {
         ApprovedExtension               = 0x00,
@@ -1104,8 +1103,8 @@
     static const char* getTexImageFunctionName(TexImageFunctionID);
 
 private:
-    WebGLRenderingContextBase(HTMLCanvasElement*, OffscreenCanvas*, PassOwnPtr<WebGraphicsContext3DProvider>, const WebGLContextAttributes&);
-    static PassOwnPtr<WebGraphicsContext3DProvider> createContextProviderInternal(HTMLCanvasElement*, ScriptState*, WebGLContextAttributes, unsigned);
+    WebGLRenderingContextBase(HTMLCanvasElement*, OffscreenCanvas*, std::unique_ptr<WebGraphicsContext3DProvider>, const WebGLContextAttributes&);
+    static std::unique_ptr<WebGraphicsContext3DProvider> createContextProviderInternal(HTMLCanvasElement*, ScriptState*, WebGLContextAttributes, unsigned);
 };
 
 DEFINE_TYPE_CASTS(WebGLRenderingContextBase, CanvasRenderingContext, context, context->is3d(), context.is3d());
diff --git a/third_party/WebKit/Source/modules/webmidi/MIDIAccess.cpp b/third_party/WebKit/Source/modules/webmidi/MIDIAccess.cpp
index 4fdf4f1..bb99e15 100644
--- a/third_party/WebKit/Source/modules/webmidi/MIDIAccess.cpp
+++ b/third_party/WebKit/Source/modules/webmidi/MIDIAccess.cpp
@@ -42,12 +42,13 @@
 #include "modules/webmidi/MIDIOutputMap.h"
 #include "modules/webmidi/MIDIPort.h"
 #include "platform/AsyncMethodRunner.h"
+#include <memory>
 
 namespace blink {
 
 using PortState = MIDIAccessor::MIDIPortState;
 
-MIDIAccess::MIDIAccess(PassOwnPtr<MIDIAccessor> accessor, bool sysexEnabled, const Vector<MIDIAccessInitializer::PortDescriptor>& ports, ExecutionContext* executionContext)
+MIDIAccess::MIDIAccess(std::unique_ptr<MIDIAccessor> accessor, bool sysexEnabled, const Vector<MIDIAccessInitializer::PortDescriptor>& ports, ExecutionContext* executionContext)
     : ActiveScriptWrappable(this)
     , ActiveDOMObject(executionContext)
     , m_accessor(std::move(accessor))
diff --git a/third_party/WebKit/Source/modules/webmidi/MIDIAccess.h b/third_party/WebKit/Source/modules/webmidi/MIDIAccess.h
index 6484a205..b6e61ad 100644
--- a/third_party/WebKit/Source/modules/webmidi/MIDIAccess.h
+++ b/third_party/WebKit/Source/modules/webmidi/MIDIAccess.h
@@ -40,6 +40,7 @@
 #include "modules/webmidi/MIDIAccessorClient.h"
 #include "platform/heap/Handle.h"
 #include "wtf/Vector.h"
+#include <memory>
 
 namespace blink {
 
@@ -54,7 +55,7 @@
     USING_GARBAGE_COLLECTED_MIXIN(MIDIAccess);
     USING_PRE_FINALIZER(MIDIAccess, dispose);
 public:
-    static MIDIAccess* create(PassOwnPtr<MIDIAccessor> accessor, bool sysexEnabled, const Vector<MIDIAccessInitializer::PortDescriptor>& ports, ExecutionContext* executionContext)
+    static MIDIAccess* create(std::unique_ptr<MIDIAccessor> accessor, bool sysexEnabled, const Vector<MIDIAccessInitializer::PortDescriptor>& ports, ExecutionContext* executionContext)
     {
         MIDIAccess* access = new MIDIAccess(std::move(accessor), sysexEnabled, ports, executionContext);
         access->suspendIfNeeded();
@@ -102,10 +103,10 @@
     DECLARE_VIRTUAL_TRACE();
 
 private:
-    MIDIAccess(PassOwnPtr<MIDIAccessor>, bool sysexEnabled, const Vector<MIDIAccessInitializer::PortDescriptor>&, ExecutionContext*);
+    MIDIAccess(std::unique_ptr<MIDIAccessor>, bool sysexEnabled, const Vector<MIDIAccessInitializer::PortDescriptor>&, ExecutionContext*);
     void dispose();
 
-    OwnPtr<MIDIAccessor> m_accessor;
+    std::unique_ptr<MIDIAccessor> m_accessor;
     bool m_sysexEnabled;
     bool m_hasPendingActivity;
     HeapVector<Member<MIDIInput>> m_inputs;
diff --git a/third_party/WebKit/Source/modules/webmidi/MIDIAccessInitializer.h b/third_party/WebKit/Source/modules/webmidi/MIDIAccessInitializer.h
index 727630c..ed1e4e5e7 100644
--- a/third_party/WebKit/Source/modules/webmidi/MIDIAccessInitializer.h
+++ b/third_party/WebKit/Source/modules/webmidi/MIDIAccessInitializer.h
@@ -12,8 +12,8 @@
 #include "modules/webmidi/MIDIAccessorClient.h"
 #include "modules/webmidi/MIDIOptions.h"
 #include "modules/webmidi/MIDIPort.h"
-#include "wtf/OwnPtr.h"
 #include "wtf/Vector.h"
+#include <memory>
 
 namespace blink {
 
@@ -73,7 +73,7 @@
 
     void contextDestroyed() override;
 
-    OwnPtr<MIDIAccessor> m_accessor;
+    std::unique_ptr<MIDIAccessor> m_accessor;
     Vector<PortDescriptor> m_portDescriptors;
     MIDIOptions m_options;
     bool m_hasBeenDisposed;
diff --git a/third_party/WebKit/Source/modules/webmidi/MIDIAccessor.cpp b/third_party/WebKit/Source/modules/webmidi/MIDIAccessor.cpp
index 47d2bce..262b448 100644
--- a/third_party/WebKit/Source/modules/webmidi/MIDIAccessor.cpp
+++ b/third_party/WebKit/Source/modules/webmidi/MIDIAccessor.cpp
@@ -32,16 +32,18 @@
 
 #include "modules/webmidi/MIDIAccessorClient.h"
 #include "public/platform/Platform.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/text/WTFString.h"
+#include <memory>
 
 using blink::WebString;
 
 namespace blink {
 
 // Factory method
-PassOwnPtr<MIDIAccessor> MIDIAccessor::create(MIDIAccessorClient* client)
+std::unique_ptr<MIDIAccessor> MIDIAccessor::create(MIDIAccessorClient* client)
 {
-    return adoptPtr(new MIDIAccessor(client));
+    return wrapUnique(new MIDIAccessor(client));
 }
 
 MIDIAccessor::MIDIAccessor(MIDIAccessorClient* client)
@@ -49,7 +51,7 @@
 {
     DCHECK(client);
 
-    m_accessor = adoptPtr(Platform::current()->createMIDIAccessor(this));
+    m_accessor = wrapUnique(Platform::current()->createMIDIAccessor(this));
 
     DCHECK(m_accessor);
 }
diff --git a/third_party/WebKit/Source/modules/webmidi/MIDIAccessor.h b/third_party/WebKit/Source/modules/webmidi/MIDIAccessor.h
index 43b8e921..66a8863 100644
--- a/third_party/WebKit/Source/modules/webmidi/MIDIAccessor.h
+++ b/third_party/WebKit/Source/modules/webmidi/MIDIAccessor.h
@@ -34,8 +34,7 @@
 #include "public/platform/modules/webmidi/WebMIDIAccessor.h"
 #include "public/platform/modules/webmidi/WebMIDIAccessorClient.h"
 #include "wtf/Allocator.h"
-#include "wtf/OwnPtr.h"
-#include "wtf/PassOwnPtr.h"
+#include <memory>
 
 namespace blink {
 
@@ -44,7 +43,7 @@
 class MIDIAccessor final : public WebMIDIAccessorClient {
     USING_FAST_MALLOC(MIDIAccessor);
 public:
-    static PassOwnPtr<MIDIAccessor> create(MIDIAccessorClient*);
+    static std::unique_ptr<MIDIAccessor> create(MIDIAccessorClient*);
 
     ~MIDIAccessor() override { }
 
@@ -67,7 +66,7 @@
     explicit MIDIAccessor(MIDIAccessorClient*);
 
     MIDIAccessorClient* m_client;
-    OwnPtr<WebMIDIAccessor> m_accessor;
+    std::unique_ptr<WebMIDIAccessor> m_accessor;
 };
 
 } // namespace blink
diff --git a/third_party/WebKit/Source/modules/webmidi/MIDIClient.h b/third_party/WebKit/Source/modules/webmidi/MIDIClient.h
index f260923e..c5a93e34 100644
--- a/third_party/WebKit/Source/modules/webmidi/MIDIClient.h
+++ b/third_party/WebKit/Source/modules/webmidi/MIDIClient.h
@@ -33,6 +33,7 @@
 
 #include "modules/ModulesExport.h"
 #include "platform/heap/Handle.h"
+#include <memory>
 
 namespace blink {
 
@@ -48,7 +49,7 @@
     virtual ~MIDIClient() { }
 };
 
-MODULES_EXPORT void provideMIDITo(LocalFrame&, PassOwnPtr<MIDIClient>);
+MODULES_EXPORT void provideMIDITo(LocalFrame&, std::unique_ptr<MIDIClient>);
 
 } // namespace blink
 
diff --git a/third_party/WebKit/Source/modules/webmidi/MIDIController.cpp b/third_party/WebKit/Source/modules/webmidi/MIDIController.cpp
index 8ea0a21..3ae61d7 100644
--- a/third_party/WebKit/Source/modules/webmidi/MIDIController.cpp
+++ b/third_party/WebKit/Source/modules/webmidi/MIDIController.cpp
@@ -32,6 +32,7 @@
 
 #include "modules/webmidi/MIDIAccessInitializer.h"
 #include "modules/webmidi/MIDIClient.h"
+#include <memory>
 
 namespace blink {
 
@@ -40,7 +41,7 @@
     return "MIDIController";
 }
 
-MIDIController::MIDIController(PassOwnPtr<MIDIClient> client)
+MIDIController::MIDIController(std::unique_ptr<MIDIClient> client)
     : m_client(std::move(client))
 {
     DCHECK(m_client);
@@ -50,7 +51,7 @@
 {
 }
 
-MIDIController* MIDIController::create(PassOwnPtr<MIDIClient> client)
+MIDIController* MIDIController::create(std::unique_ptr<MIDIClient> client)
 {
     return new MIDIController(std::move(client));
 }
@@ -65,7 +66,7 @@
     m_client->cancelPermissionRequest(initializer);
 }
 
-void provideMIDITo(LocalFrame& frame, PassOwnPtr<MIDIClient> client)
+void provideMIDITo(LocalFrame& frame, std::unique_ptr<MIDIClient> client)
 {
     MIDIController::provideTo(frame, MIDIController::supplementName(), MIDIController::create(std::move(client)));
 }
diff --git a/third_party/WebKit/Source/modules/webmidi/MIDIController.h b/third_party/WebKit/Source/modules/webmidi/MIDIController.h
index 4cf7bdf..cdb7d4a 100644
--- a/third_party/WebKit/Source/modules/webmidi/MIDIController.h
+++ b/third_party/WebKit/Source/modules/webmidi/MIDIController.h
@@ -33,6 +33,7 @@
 
 #include "core/frame/LocalFrame.h"
 #include "platform/heap/Handle.h"
+#include <memory>
 
 namespace blink {
 
@@ -48,17 +49,17 @@
     void requestPermission(MIDIAccessInitializer*, const MIDIOptions&);
     void cancelPermissionRequest(MIDIAccessInitializer*);
 
-    static MIDIController* create(PassOwnPtr<MIDIClient>);
+    static MIDIController* create(std::unique_ptr<MIDIClient>);
     static const char* supplementName();
     static MIDIController* from(LocalFrame* frame) { return static_cast<MIDIController*>(Supplement<LocalFrame>::from(frame, supplementName())); }
 
     DEFINE_INLINE_VIRTUAL_TRACE() { Supplement<LocalFrame>::trace(visitor); }
 
 protected:
-    explicit MIDIController(PassOwnPtr<MIDIClient>);
+    explicit MIDIController(std::unique_ptr<MIDIClient>);
 
 private:
-    OwnPtr<MIDIClient> m_client;
+    std::unique_ptr<MIDIClient> m_client;
 };
 
 } // namespace blink
diff --git a/third_party/WebKit/Source/modules/websockets/DOMWebSocket.cpp b/third_party/WebKit/Source/modules/websockets/DOMWebSocket.cpp
index 8a008b84..b30348d 100644
--- a/third_party/WebKit/Source/modules/websockets/DOMWebSocket.cpp
+++ b/third_party/WebKit/Source/modules/websockets/DOMWebSocket.cpp
@@ -58,11 +58,11 @@
 #include "public/platform/WebInsecureRequestPolicy.h"
 #include "wtf/Assertions.h"
 #include "wtf/HashSet.h"
-#include "wtf/PassOwnPtr.h"
 #include "wtf/StdLibExtras.h"
 #include "wtf/text/CString.h"
 #include "wtf/text/StringBuilder.h"
 #include "wtf/text/WTFString.h"
+#include <memory>
 
 namespace blink {
 
@@ -638,7 +638,7 @@
     m_eventQueue->dispatch(MessageEvent::create(msg, SecurityOrigin::create(m_url)->toString()));
 }
 
-void DOMWebSocket::didReceiveBinaryMessage(PassOwnPtr<Vector<char>> binaryData)
+void DOMWebSocket::didReceiveBinaryMessage(std::unique_ptr<Vector<char>> binaryData)
 {
     WTF_LOG(Network, "WebSocket %p didReceiveBinaryMessage() %lu byte binary message", this, static_cast<unsigned long>(binaryData->size()));
     switch (m_binaryType) {
@@ -646,7 +646,7 @@
         size_t size = binaryData->size();
         RefPtr<RawData> rawData = RawData::create();
         binaryData->swap(*rawData->mutableData());
-        OwnPtr<BlobData> blobData = BlobData::create();
+        std::unique_ptr<BlobData> blobData = BlobData::create();
         blobData->appendData(rawData.release(), 0, BlobDataItem::toEndOfFile);
         Blob* blob = Blob::create(BlobDataHandle::create(std::move(blobData), size));
         recordReceiveTypeHistogram(WebSocketReceiveTypeBlob);
diff --git a/third_party/WebKit/Source/modules/websockets/DOMWebSocket.h b/third_party/WebKit/Source/modules/websockets/DOMWebSocket.h
index 2badc24..15fb738 100644
--- a/third_party/WebKit/Source/modules/websockets/DOMWebSocket.h
+++ b/third_party/WebKit/Source/modules/websockets/DOMWebSocket.h
@@ -48,6 +48,7 @@
 #include "wtf/PassRefPtr.h"
 #include "wtf/RefPtr.h"
 #include "wtf/text/WTFString.h"
+#include <memory>
 #include <stdint.h>
 
 namespace blink {
@@ -127,7 +128,7 @@
     // WebSocketChannelClient functions.
     void didConnect(const String& subprotocol, const String& extensions) override;
     void didReceiveTextMessage(const String& message) override;
-    void didReceiveBinaryMessage(PassOwnPtr<Vector<char>>) override;
+    void didReceiveBinaryMessage(std::unique_ptr<Vector<char>>) override;
     void didError() override;
     void didConsumeBufferedAmount(uint64_t) override;
     void didStartClosingHandshake() override;
diff --git a/third_party/WebKit/Source/modules/websockets/DOMWebSocketTest.cpp b/third_party/WebKit/Source/modules/websockets/DOMWebSocketTest.cpp
index d41105e..8ca88848 100644
--- a/third_party/WebKit/Source/modules/websockets/DOMWebSocketTest.cpp
+++ b/third_party/WebKit/Source/modules/websockets/DOMWebSocketTest.cpp
@@ -18,10 +18,10 @@
 #include "public/platform/WebInsecureRequestPolicy.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
-#include "wtf/OwnPtr.h"
 #include "wtf/Vector.h"
 #include "wtf/text/CString.h"
 #include "wtf/text/WTFString.h"
+#include <memory>
 #include <v8.h>
 
 using testing::_;
@@ -52,19 +52,19 @@
     MOCK_METHOD3(send, void(const DOMArrayBuffer&, unsigned, unsigned));
     MOCK_METHOD1(send, void(PassRefPtr<BlobDataHandle>));
     MOCK_METHOD1(sendTextAsCharVectorMock, void(Vector<char>*));
-    void sendTextAsCharVector(PassOwnPtr<Vector<char>> vector)
+    void sendTextAsCharVector(std::unique_ptr<Vector<char>> vector)
     {
         sendTextAsCharVectorMock(vector.get());
     }
     MOCK_METHOD1(sendBinaryAsCharVectorMock, void(Vector<char>*));
-    void sendBinaryAsCharVector(PassOwnPtr<Vector<char>> vector)
+    void sendBinaryAsCharVector(std::unique_ptr<Vector<char>> vector)
     {
         sendBinaryAsCharVectorMock(vector.get());
     }
     MOCK_CONST_METHOD0(bufferedAmount, unsigned());
     MOCK_METHOD2(close, void(int, const String&));
     MOCK_METHOD3(failMock, void(const String&, MessageLevel, SourceLocation*));
-    void fail(const String& reason, MessageLevel level, PassOwnPtr<SourceLocation> location)
+    void fail(const String& reason, MessageLevel level, std::unique_ptr<SourceLocation> location)
     {
         failMock(reason, level, location.get());
     }
diff --git a/third_party/WebKit/Source/modules/websockets/DocumentWebSocketChannel.cpp b/third_party/WebKit/Source/modules/websockets/DocumentWebSocketChannel.cpp
index ca91d4b9..f329365 100644
--- a/third_party/WebKit/Source/modules/websockets/DocumentWebSocketChannel.cpp
+++ b/third_party/WebKit/Source/modules/websockets/DocumentWebSocketChannel.cpp
@@ -55,6 +55,8 @@
 #include "public/platform/WebVector.h"
 #include "public/platform/modules/websockets/WebSocketHandshakeRequestInfo.h"
 #include "public/platform/modules/websockets/WebSocketHandshakeResponseInfo.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 using blink::WebSocketHandle;
 
@@ -89,7 +91,7 @@
     explicit Message(PassRefPtr<BlobDataHandle>);
     explicit Message(DOMArrayBuffer*);
     // For WorkerWebSocketChannel
-    explicit Message(PassOwnPtr<Vector<char>>, MessageType);
+    explicit Message(std::unique_ptr<Vector<char>>, MessageType);
     // Close message
     Message(unsigned short code, const String& reason);
 
@@ -103,7 +105,7 @@
     CString text;
     RefPtr<BlobDataHandle> blobDataHandle;
     Member<DOMArrayBuffer> arrayBuffer;
-    OwnPtr<Vector<char>> vectorData;
+    std::unique_ptr<Vector<char>> vectorData;
     unsigned short code;
     String reason;
 };
@@ -134,9 +136,9 @@
     // |this| is deleted here.
 }
 
-DocumentWebSocketChannel::DocumentWebSocketChannel(Document* document, WebSocketChannelClient* client, PassOwnPtr<SourceLocation> location, WebSocketHandle *handle)
+DocumentWebSocketChannel::DocumentWebSocketChannel(Document* document, WebSocketChannelClient* client, std::unique_ptr<SourceLocation> location, WebSocketHandle *handle)
     : ContextLifecycleObserver(document)
-    , m_handle(adoptPtr(handle ? handle : Platform::current()->createWebSocketHandle()))
+    , m_handle(wrapUnique(handle ? handle : Platform::current()->createWebSocketHandle()))
     , m_client(client)
     , m_identifier(createUniqueIdentifier())
     , m_sendingQuota(0)
@@ -226,7 +228,7 @@
     processSendQueue();
 }
 
-void DocumentWebSocketChannel::sendTextAsCharVector(PassOwnPtr<Vector<char>> data)
+void DocumentWebSocketChannel::sendTextAsCharVector(std::unique_ptr<Vector<char>> data)
 {
     WTF_LOG(Network, "DocumentWebSocketChannel %p sendTextAsCharVector(%p, %llu)", this, data.get(), static_cast<unsigned long long>(data->size()));
     // FIXME: Change the inspector API to show the entire message instead
@@ -236,7 +238,7 @@
     processSendQueue();
 }
 
-void DocumentWebSocketChannel::sendBinaryAsCharVector(PassOwnPtr<Vector<char>> data)
+void DocumentWebSocketChannel::sendBinaryAsCharVector(std::unique_ptr<Vector<char>> data)
 {
     WTF_LOG(Network, "DocumentWebSocketChannel %p sendBinaryAsCharVector(%p, %llu)", this, data.get(), static_cast<unsigned long long>(data->size()));
     // FIXME: Change the inspector API to show the entire message instead
@@ -255,7 +257,7 @@
     processSendQueue();
 }
 
-void DocumentWebSocketChannel::fail(const String& reason, MessageLevel level, PassOwnPtr<SourceLocation> location)
+void DocumentWebSocketChannel::fail(const String& reason, MessageLevel level, std::unique_ptr<SourceLocation> location)
 {
     WTF_LOG(Network, "DocumentWebSocketChannel %p fail(%s)", this, reason.utf8().data());
     // m_handle and m_client can be null here.
@@ -297,7 +299,7 @@
     : type(MessageTypeArrayBuffer)
     , arrayBuffer(arrayBuffer) { }
 
-DocumentWebSocketChannel::Message::Message(PassOwnPtr<Vector<char>> vectorData, MessageType type)
+DocumentWebSocketChannel::Message::Message(std::unique_ptr<Vector<char>> vectorData, MessageType type)
     : type(type)
     , vectorData(std::move(vectorData))
 {
@@ -416,7 +418,7 @@
     WTF_LOG(Network, "DocumentWebSocketChannel %p didConnect(%p, %s, %s)", this, handle, selectedProtocol.utf8().c_str(), extensions.utf8().c_str());
 
     ASSERT(m_handle);
-    ASSERT(handle == m_handle);
+    ASSERT(handle == m_handle.get());
     ASSERT(m_client);
 
     m_client->didConnect(selectedProtocol, extensions);
@@ -427,7 +429,7 @@
     WTF_LOG(Network, "DocumentWebSocketChannel %p didStartOpeningHandshake(%p)", this, handle);
 
     ASSERT(m_handle);
-    ASSERT(handle == m_handle);
+    ASSERT(handle == m_handle.get());
 
     TRACE_EVENT_INSTANT1("devtools.timeline", "WebSocketSendHandshakeRequest", TRACE_EVENT_SCOPE_THREAD, "data", InspectorWebSocketEvent::data(document(), m_identifier));
     InspectorInstrumentation::willSendWebSocketHandshakeRequest(document(), m_identifier, &request.toCoreRequest());
@@ -439,7 +441,7 @@
     WTF_LOG(Network, "DocumentWebSocketChannel %p didFinishOpeningHandshake(%p)", this, handle);
 
     ASSERT(m_handle);
-    ASSERT(handle == m_handle);
+    ASSERT(handle == m_handle.get());
 
     TRACE_EVENT_INSTANT1("devtools.timeline", "WebSocketReceiveHandshakeResponse", TRACE_EVENT_SCOPE_THREAD, "data", InspectorWebSocketEvent::data(document(), m_identifier));
     InspectorInstrumentation::didReceiveWebSocketHandshakeResponse(document(), m_identifier, m_handshakeRequest.get(), &response.toCoreResponse());
@@ -451,7 +453,7 @@
     WTF_LOG(Network, "DocumentWebSocketChannel %p didFail(%p, %s)", this, handle, message.utf8().data());
 
     ASSERT(m_handle);
-    ASSERT(handle == m_handle);
+    ASSERT(handle == m_handle.get());
 
     // This function is called when the browser is required to fail the
     // WebSocketConnection. Hence we fail this channel by calling
@@ -465,7 +467,7 @@
     WTF_LOG(Network, "DocumentWebSocketChannel %p didReceiveData(%p, %d, %d, (%p, %zu))", this, handle, fin, type, data, size);
 
     ASSERT(m_handle);
-    ASSERT(handle == m_handle);
+    ASSERT(handle == m_handle.get());
     ASSERT(m_client);
     // Non-final frames cannot be empty.
     ASSERT(fin || size);
@@ -505,7 +507,7 @@
             m_client->didReceiveTextMessage(message);
         }
     } else {
-        OwnPtr<Vector<char>> binaryData = adoptPtr(new Vector<char>);
+        std::unique_ptr<Vector<char>> binaryData = wrapUnique(new Vector<char>);
         binaryData->swap(m_receivingMessageData);
         m_client->didReceiveBinaryMessage(std::move(binaryData));
     }
@@ -516,7 +518,7 @@
     WTF_LOG(Network, "DocumentWebSocketChannel %p didClose(%p, %d, %u, %s)", this, handle, wasClean, code, String(reason).utf8().data());
 
     ASSERT(m_handle);
-    ASSERT(handle == m_handle);
+    ASSERT(handle == m_handle.get());
 
     m_handle.reset();
 
@@ -535,7 +537,7 @@
     WTF_LOG(Network, "DocumentWebSocketChannel %p didReceiveFlowControl(%p, %ld)", this, handle, static_cast<long>(quota));
 
     ASSERT(m_handle);
-    ASSERT(handle == m_handle);
+    ASSERT(handle == m_handle.get());
     ASSERT(quota >= 0);
 
     m_sendingQuota += quota;
@@ -547,7 +549,7 @@
     WTF_LOG(Network, "DocumentWebSocketChannel %p didStartClosingHandshake(%p)", this, handle);
 
     ASSERT(m_handle);
-    ASSERT(handle == m_handle);
+    ASSERT(handle == m_handle.get());
 
     if (m_client)
         m_client->didStartClosingHandshake();
diff --git a/third_party/WebKit/Source/modules/websockets/DocumentWebSocketChannel.h b/third_party/WebKit/Source/modules/websockets/DocumentWebSocketChannel.h
index ae655665..9b964e5 100644
--- a/third_party/WebKit/Source/modules/websockets/DocumentWebSocketChannel.h
+++ b/third_party/WebKit/Source/modules/websockets/DocumentWebSocketChannel.h
@@ -43,13 +43,12 @@
 #include "public/platform/modules/websockets/WebSocketHandle.h"
 #include "public/platform/modules/websockets/WebSocketHandleClient.h"
 #include "wtf/Deque.h"
-#include "wtf/OwnPtr.h"
-#include "wtf/PassOwnPtr.h"
 #include "wtf/PassRefPtr.h"
 #include "wtf/RefPtr.h"
 #include "wtf/Vector.h"
 #include "wtf/text/CString.h"
 #include "wtf/text/WTFString.h"
+#include <memory>
 #include <stdint.h>
 
 namespace blink {
@@ -69,7 +68,7 @@
     // In the usual case, they are set automatically and you don't have to
     // pass it.
     // Specify handle explicitly only in tests.
-    static DocumentWebSocketChannel* create(Document* document, WebSocketChannelClient* client, PassOwnPtr<SourceLocation> location, WebSocketHandle *handle = 0)
+    static DocumentWebSocketChannel* create(Document* document, WebSocketChannelClient* client, std::unique_ptr<SourceLocation> location, WebSocketHandle *handle = 0)
     {
         return new DocumentWebSocketChannel(document, client, std::move(location), handle);
     }
@@ -80,12 +79,12 @@
     void send(const CString& message) override;
     void send(const DOMArrayBuffer&, unsigned byteOffset, unsigned byteLength) override;
     void send(PassRefPtr<BlobDataHandle>) override;
-    void sendTextAsCharVector(PassOwnPtr<Vector<char>> data) override;
-    void sendBinaryAsCharVector(PassOwnPtr<Vector<char>> data) override;
+    void sendTextAsCharVector(std::unique_ptr<Vector<char>> data) override;
+    void sendBinaryAsCharVector(std::unique_ptr<Vector<char>> data) override;
     // Start closing handshake. Use the CloseEventCodeNotSpecified for the code
     // argument to omit payload.
     void close(int code, const String& reason) override;
-    void fail(const String& reason, MessageLevel, PassOwnPtr<SourceLocation>) override;
+    void fail(const String& reason, MessageLevel, std::unique_ptr<SourceLocation>) override;
     void disconnect() override;
 
     DECLARE_VIRTUAL_TRACE();
@@ -108,7 +107,7 @@
         Vector<char> data;
     };
 
-    DocumentWebSocketChannel(Document*, WebSocketChannelClient*, PassOwnPtr<SourceLocation>, WebSocketHandle*);
+    DocumentWebSocketChannel(Document*, WebSocketChannelClient*, std::unique_ptr<SourceLocation>, WebSocketHandle*);
     void sendInternal(WebSocketHandle::MessageType, const char* data, size_t totalSize, uint64_t* consumedBufferedAmount);
     void processSendQueue();
     void flowControlIfNecessary();
@@ -133,7 +132,7 @@
 
     // m_handle is a handle of the connection.
     // m_handle == 0 means this channel is closed.
-    OwnPtr<WebSocketHandle> m_handle;
+    std::unique_ptr<WebSocketHandle> m_handle;
 
     // m_client can be deleted while this channel is alive, but this class
     // expects that disconnect() is called before the deletion.
@@ -150,7 +149,7 @@
     uint64_t m_receivedDataSizeForFlowControl;
     size_t m_sentSizeOfTopMessage;
 
-    OwnPtr<SourceLocation> m_locationAtConstruction;
+    std::unique_ptr<SourceLocation> m_locationAtConstruction;
     RefPtr<WebSocketHandshakeRequest> m_handshakeRequest;
 
     static const uint64_t receivedDataSizeForFlowControlHighWaterMark = 1 << 15;
diff --git a/third_party/WebKit/Source/modules/websockets/DocumentWebSocketChannelTest.cpp b/third_party/WebKit/Source/modules/websockets/DocumentWebSocketChannelTest.cpp
index 73b697cb..6903609 100644
--- a/third_party/WebKit/Source/modules/websockets/DocumentWebSocketChannelTest.cpp
+++ b/third_party/WebKit/Source/modules/websockets/DocumentWebSocketChannelTest.cpp
@@ -21,9 +21,10 @@
 #include "public/platform/modules/websockets/WebSocketHandleClient.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
-#include "wtf/OwnPtr.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/Vector.h"
 #include "wtf/text/WTFString.h"
+#include <memory>
 #include <stdint.h>
 
 using testing::_;
@@ -52,7 +53,7 @@
 
     MOCK_METHOD2(didConnect, void(const String&, const String&));
     MOCK_METHOD1(didReceiveTextMessage, void(const String&));
-    void didReceiveBinaryMessage(PassOwnPtr<Vector<char>> payload) override
+    void didReceiveBinaryMessage(std::unique_ptr<Vector<char>> payload) override
     {
         didReceiveBinaryMessageMock(*payload);
     }
@@ -141,7 +142,7 @@
         ::testing::Mock::VerifyAndClearExpectations(this);
     }
 
-    OwnPtr<DummyPageHolder> m_pageHolder;
+    std::unique_ptr<DummyPageHolder> m_pageHolder;
     Persistent<MockWebSocketChannelClient> m_channelClient;
     MockWebSocketHandle* m_handle;
     Persistent<DocumentWebSocketChannel> m_channel;
@@ -240,7 +241,7 @@
 
     Vector<char> fooVector;
     fooVector.append("foo", 3);
-    channel()->sendBinaryAsCharVector(adoptPtr(new Vector<char>(fooVector)));
+    channel()->sendBinaryAsCharVector(wrapUnique(new Vector<char>(fooVector)));
 
     EXPECT_EQ(3ul, m_sumOfConsumedBufferedAmount);
 }
@@ -262,22 +263,22 @@
     {
         Vector<char> v;
         v.append("\0ar", 3);
-        channel()->sendBinaryAsCharVector(adoptPtr(new Vector<char>(v)));
+        channel()->sendBinaryAsCharVector(wrapUnique(new Vector<char>(v)));
     }
     {
         Vector<char> v;
         v.append("b\0z", 3);
-        channel()->sendBinaryAsCharVector(adoptPtr(new Vector<char>(v)));
+        channel()->sendBinaryAsCharVector(wrapUnique(new Vector<char>(v)));
     }
     {
         Vector<char> v;
         v.append("qu\0", 3);
-        channel()->sendBinaryAsCharVector(adoptPtr(new Vector<char>(v)));
+        channel()->sendBinaryAsCharVector(wrapUnique(new Vector<char>(v)));
     }
     {
         Vector<char> v;
         v.append("\0\0\0", 3);
-        channel()->sendBinaryAsCharVector(adoptPtr(new Vector<char>(v)));
+        channel()->sendBinaryAsCharVector(wrapUnique(new Vector<char>(v)));
     }
 
     EXPECT_EQ(12ul, m_sumOfConsumedBufferedAmount);
@@ -293,7 +294,7 @@
 
     Vector<char> v;
     v.append("\xe7\x8b\x90", 3);
-    channel()->sendBinaryAsCharVector(adoptPtr(new Vector<char>(v)));
+    channel()->sendBinaryAsCharVector(wrapUnique(new Vector<char>(v)));
 
     EXPECT_EQ(3ul, m_sumOfConsumedBufferedAmount);
 }
@@ -308,7 +309,7 @@
 
     Vector<char> v;
     v.append("\x80\xff\xe7", 3);
-    channel()->sendBinaryAsCharVector(adoptPtr(new Vector<char>(v)));
+    channel()->sendBinaryAsCharVector(wrapUnique(new Vector<char>(v)));
 
     EXPECT_EQ(3ul, m_sumOfConsumedBufferedAmount);
 }
@@ -329,7 +330,7 @@
 
     Vector<char> v;
     v.append("\xe7\x8b\x90\xe7\x8b\x90\xe7\x8b\x90\xe7\x8b\x90\xe7\x8b\x90\xe7\x8b\x90", 18);
-    channel()->sendBinaryAsCharVector(adoptPtr(new Vector<char>(v)));
+    channel()->sendBinaryAsCharVector(wrapUnique(new Vector<char>(v)));
     checkpoint.Call(1);
 
     handleClient()->didReceiveFlowControl(handle(), 16);
diff --git a/third_party/WebKit/Source/modules/websockets/InspectorWebSocketEvents.cpp b/third_party/WebKit/Source/modules/websockets/InspectorWebSocketEvents.cpp
index e95695f1..c48f7c56 100644
--- a/third_party/WebKit/Source/modules/websockets/InspectorWebSocketEvents.cpp
+++ b/third_party/WebKit/Source/modules/websockets/InspectorWebSocketEvents.cpp
@@ -6,12 +6,13 @@
 
 #include "core/dom/Document.h"
 #include "platform/weborigin/KURL.h"
+#include <memory>
 
 namespace blink {
 
-PassOwnPtr<TracedValue> InspectorWebSocketCreateEvent::data(Document* document, unsigned long identifier, const KURL& url, const String& protocol)
+std::unique_ptr<TracedValue> InspectorWebSocketCreateEvent::data(Document* document, unsigned long identifier, const KURL& url, const String& protocol)
 {
-    OwnPtr<TracedValue> value = TracedValue::create();
+    std::unique_ptr<TracedValue> value = TracedValue::create();
     value->setInteger("identifier", identifier);
     value->setString("url", url.getString());
     value->setString("frame", toHexString(document->frame()));
@@ -21,9 +22,9 @@
     return value;
 }
 
-PassOwnPtr<TracedValue> InspectorWebSocketEvent::data(Document* document, unsigned long identifier)
+std::unique_ptr<TracedValue> InspectorWebSocketEvent::data(Document* document, unsigned long identifier)
 {
-    OwnPtr<TracedValue> value = TracedValue::create();
+    std::unique_ptr<TracedValue> value = TracedValue::create();
     value->setInteger("identifier", identifier);
     value->setString("frame", toHexString(document->frame()));
     setCallStack(value.get());
diff --git a/third_party/WebKit/Source/modules/websockets/InspectorWebSocketEvents.h b/third_party/WebKit/Source/modules/websockets/InspectorWebSocketEvents.h
index 418f0e66..35ed61f57 100644
--- a/third_party/WebKit/Source/modules/websockets/InspectorWebSocketEvents.h
+++ b/third_party/WebKit/Source/modules/websockets/InspectorWebSocketEvents.h
@@ -11,6 +11,7 @@
 #include "platform/heap/Handle.h"
 #include "wtf/Forward.h"
 #include "wtf/Functional.h"
+#include <memory>
 
 namespace blink {
 
@@ -20,13 +21,13 @@
 class InspectorWebSocketCreateEvent {
     STATIC_ONLY(InspectorWebSocketCreateEvent);
 public:
-    static PassOwnPtr<TracedValue> data(Document*, unsigned long identifier, const KURL&, const String& protocol);
+    static std::unique_ptr<TracedValue> data(Document*, unsigned long identifier, const KURL&, const String& protocol);
 };
 
 class InspectorWebSocketEvent {
     STATIC_ONLY(InspectorWebSocketEvent);
 public:
-    static PassOwnPtr<TracedValue> data(Document*, unsigned long identifier);
+    static std::unique_ptr<TracedValue> data(Document*, unsigned long identifier);
 };
 
 } // namespace blink
diff --git a/third_party/WebKit/Source/modules/websockets/WebSocketChannel.cpp b/third_party/WebKit/Source/modules/websockets/WebSocketChannel.cpp
index 49e46a1..3cbc754 100644
--- a/third_party/WebKit/Source/modules/websockets/WebSocketChannel.cpp
+++ b/third_party/WebKit/Source/modules/websockets/WebSocketChannel.cpp
@@ -38,6 +38,7 @@
 #include "modules/websockets/DocumentWebSocketChannel.h"
 #include "modules/websockets/WebSocketChannelClient.h"
 #include "modules/websockets/WorkerWebSocketChannel.h"
+#include <memory>
 
 namespace blink {
 
@@ -46,7 +47,7 @@
     ASSERT(context);
     ASSERT(client);
 
-    OwnPtr<SourceLocation> location = SourceLocation::capture(context);
+    std::unique_ptr<SourceLocation> location = SourceLocation::capture(context);
 
     if (context->isWorkerGlobalScope()) {
         WorkerGlobalScope* workerGlobalScope = toWorkerGlobalScope(context);
diff --git a/third_party/WebKit/Source/modules/websockets/WebSocketChannel.h b/third_party/WebKit/Source/modules/websockets/WebSocketChannel.h
index 14cdd686..b702aaa 100644
--- a/third_party/WebKit/Source/modules/websockets/WebSocketChannel.h
+++ b/third_party/WebKit/Source/modules/websockets/WebSocketChannel.h
@@ -37,6 +37,7 @@
 #include "platform/v8_inspector/public/ConsoleTypes.h"
 #include "wtf/Forward.h"
 #include "wtf/Noncopyable.h"
+#include <memory>
 
 namespace blink {
 
@@ -77,8 +78,8 @@
     virtual void send(PassRefPtr<BlobDataHandle>) = 0;
 
     // For WorkerWebSocketChannel.
-    virtual void sendTextAsCharVector(PassOwnPtr<Vector<char>>) = 0;
-    virtual void sendBinaryAsCharVector(PassOwnPtr<Vector<char>>) = 0;
+    virtual void sendTextAsCharVector(std::unique_ptr<Vector<char>>) = 0;
+    virtual void sendBinaryAsCharVector(std::unique_ptr<Vector<char>>) = 0;
 
     // Do not call |send| after calling this method.
     virtual void close(int code, const String& reason) = 0;
@@ -91,7 +92,7 @@
     // and the "current" location in the sense of JavaScript execution
     // may be shown if this method is called in a JS execution context.
     // Location should not be null.
-    virtual void fail(const String& reason, MessageLevel, PassOwnPtr<SourceLocation>) = 0;
+    virtual void fail(const String& reason, MessageLevel, std::unique_ptr<SourceLocation>) = 0;
 
     // Do not call any methods after calling this method.
     virtual void disconnect() = 0; // Will suppress didClose().
diff --git a/third_party/WebKit/Source/modules/websockets/WebSocketChannelClient.h b/third_party/WebKit/Source/modules/websockets/WebSocketChannelClient.h
index 3777408..25f1926 100644
--- a/third_party/WebKit/Source/modules/websockets/WebSocketChannelClient.h
+++ b/third_party/WebKit/Source/modules/websockets/WebSocketChannelClient.h
@@ -34,8 +34,8 @@
 #include "modules/ModulesExport.h"
 #include "platform/heap/Handle.h"
 #include "wtf/Forward.h"
-#include "wtf/PassOwnPtr.h"
 #include "wtf/Vector.h"
+#include <memory>
 #include <stdint.h>
 
 namespace blink {
@@ -45,7 +45,7 @@
     virtual ~WebSocketChannelClient() { }
     virtual void didConnect(const String& subprotocol, const String& extensions) { }
     virtual void didReceiveTextMessage(const String&) { }
-    virtual void didReceiveBinaryMessage(PassOwnPtr<Vector<char>>) { }
+    virtual void didReceiveBinaryMessage(std::unique_ptr<Vector<char>>) { }
     virtual void didError() { }
     virtual void didConsumeBufferedAmount(uint64_t consumed) { }
     virtual void didStartClosingHandshake() { }
diff --git a/third_party/WebKit/Source/modules/websockets/WorkerWebSocketChannel.cpp b/third_party/WebKit/Source/modules/websockets/WorkerWebSocketChannel.cpp
index 3fe0bd7..51a29d6 100644
--- a/third_party/WebKit/Source/modules/websockets/WorkerWebSocketChannel.cpp
+++ b/third_party/WebKit/Source/modules/websockets/WorkerWebSocketChannel.cpp
@@ -45,8 +45,10 @@
 #include "public/platform/Platform.h"
 #include "wtf/Assertions.h"
 #include "wtf/Functional.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/text/CString.h"
 #include "wtf/text/WTFString.h"
+#include <memory>
 
 namespace blink {
 
@@ -58,7 +60,7 @@
 // thread. signalWorkerThread() must be called before any getters are called.
 class WebSocketChannelSyncHelper : public GarbageCollectedFinalized<WebSocketChannelSyncHelper> {
 public:
-    static WebSocketChannelSyncHelper* create(PassOwnPtr<WaitableEvent> event)
+    static WebSocketChannelSyncHelper* create(std::unique_ptr<WaitableEvent> event)
     {
         return new WebSocketChannelSyncHelper(std::move(event));
     }
@@ -93,17 +95,17 @@
     DEFINE_INLINE_TRACE() { }
 
 private:
-    explicit WebSocketChannelSyncHelper(PassOwnPtr<WaitableEvent> event)
+    explicit WebSocketChannelSyncHelper(std::unique_ptr<WaitableEvent> event)
         : m_event(std::move(event))
         , m_connectRequestResult(false)
     {
     }
 
-    OwnPtr<WaitableEvent> m_event;
+    std::unique_ptr<WaitableEvent> m_event;
     bool m_connectRequestResult;
 };
 
-WorkerWebSocketChannel::WorkerWebSocketChannel(WorkerGlobalScope& workerGlobalScope, WebSocketChannelClient* client, PassOwnPtr<SourceLocation> location)
+WorkerWebSocketChannel::WorkerWebSocketChannel(WorkerGlobalScope& workerGlobalScope, WebSocketChannelClient* client, std::unique_ptr<SourceLocation> location)
     : m_bridge(new Bridge(client, workerGlobalScope))
     , m_locationAtConnection(std::move(location))
 {
@@ -145,12 +147,12 @@
     m_bridge->close(code, reason);
 }
 
-void WorkerWebSocketChannel::fail(const String& reason, MessageLevel level, PassOwnPtr<SourceLocation> location)
+void WorkerWebSocketChannel::fail(const String& reason, MessageLevel level, std::unique_ptr<SourceLocation> location)
 {
     if (!m_bridge)
         return;
 
-    OwnPtr<SourceLocation> capturedLocation = SourceLocation::capture();
+    std::unique_ptr<SourceLocation> capturedLocation = SourceLocation::capture();
     if (!capturedLocation->isUnknown()) {
         // If we are in JavaScript context, use the current location instead
         // of passed one - it's more precise.
@@ -192,7 +194,7 @@
     DCHECK(isMainThread());
 }
 
-bool Peer::initialize(PassOwnPtr<SourceLocation> location, ExecutionContext* context)
+bool Peer::initialize(std::unique_ptr<SourceLocation> location, ExecutionContext* context)
 {
     ASSERT(isMainThread());
     if (wasContextDestroyedBeforeObserverCreation())
@@ -215,14 +217,14 @@
     m_syncHelper->signalWorkerThread();
 }
 
-void Peer::sendTextAsCharVector(PassOwnPtr<Vector<char>> data)
+void Peer::sendTextAsCharVector(std::unique_ptr<Vector<char>> data)
 {
     ASSERT(isMainThread());
     if (m_mainWebSocketChannel)
         m_mainWebSocketChannel->sendTextAsCharVector(std::move(data));
 }
 
-void Peer::sendBinaryAsCharVector(PassOwnPtr<Vector<char>> data)
+void Peer::sendBinaryAsCharVector(std::unique_ptr<Vector<char>> data)
 {
     ASSERT(isMainThread());
     if (m_mainWebSocketChannel)
@@ -245,7 +247,7 @@
     m_mainWebSocketChannel->close(code, reason);
 }
 
-void Peer::fail(const String& reason, MessageLevel level, PassOwnPtr<SourceLocation> location)
+void Peer::fail(const String& reason, MessageLevel level, std::unique_ptr<SourceLocation> location)
 {
     ASSERT(isMainThread());
     ASSERT(m_syncHelper);
@@ -291,14 +293,14 @@
     m_loaderProxy->postTaskToWorkerGlobalScope(createCrossThreadTask(&workerGlobalScopeDidReceiveTextMessage, m_bridge, payload));
 }
 
-static void workerGlobalScopeDidReceiveBinaryMessage(Bridge* bridge, PassOwnPtr<Vector<char>> payload, ExecutionContext* context)
+static void workerGlobalScopeDidReceiveBinaryMessage(Bridge* bridge, std::unique_ptr<Vector<char>> payload, ExecutionContext* context)
 {
     ASSERT_UNUSED(context, context->isWorkerGlobalScope());
     if (bridge->client())
         bridge->client()->didReceiveBinaryMessage(std::move(payload));
 }
 
-void Peer::didReceiveBinaryMessage(PassOwnPtr<Vector<char>> payload)
+void Peer::didReceiveBinaryMessage(std::unique_ptr<Vector<char>> payload)
 {
     ASSERT(isMainThread());
     m_loaderProxy->postTaskToWorkerGlobalScope(createCrossThreadTask(&workerGlobalScopeDidReceiveBinaryMessage, m_bridge, passed(std::move(payload))));
@@ -382,7 +384,7 @@
     : m_client(client)
     , m_workerGlobalScope(workerGlobalScope)
     , m_loaderProxy(m_workerGlobalScope->thread()->workerLoaderProxy())
-    , m_syncHelper(WebSocketChannelSyncHelper::create(adoptPtr(new WaitableEvent())))
+    , m_syncHelper(WebSocketChannelSyncHelper::create(wrapUnique(new WaitableEvent())))
 {
 }
 
@@ -391,7 +393,7 @@
     ASSERT(!m_peer);
 }
 
-void Bridge::createPeerOnMainThread(PassOwnPtr<SourceLocation> location, WorkerThreadLifecycleContext* workerThreadLifecycleContext, ExecutionContext* context)
+void Bridge::createPeerOnMainThread(std::unique_ptr<SourceLocation> location, WorkerThreadLifecycleContext* workerThreadLifecycleContext, ExecutionContext* context)
 {
     DCHECK(isMainThread());
     DCHECK(!m_peer);
@@ -401,7 +403,7 @@
     m_syncHelper->signalWorkerThread();
 }
 
-void Bridge::initialize(PassOwnPtr<SourceLocation> location)
+void Bridge::initialize(std::unique_ptr<SourceLocation> location)
 {
     // Wait for completion of the task on the main thread because the connection
     // must synchronously be established (see Bridge::connect).
@@ -427,7 +429,7 @@
 void Bridge::send(const CString& message)
 {
     ASSERT(m_peer);
-    OwnPtr<Vector<char>> data = adoptPtr(new Vector<char>(message.length()));
+    std::unique_ptr<Vector<char>> data = wrapUnique(new Vector<char>(message.length()));
     if (message.length())
         memcpy(data->data(), static_cast<const char*>(message.data()), message.length());
 
@@ -438,7 +440,7 @@
 {
     ASSERT(m_peer);
     // ArrayBuffer isn't thread-safe, hence the content of ArrayBuffer is copied into Vector<char>.
-    OwnPtr<Vector<char>> data = adoptPtr(new Vector<char>(byteLength));
+    std::unique_ptr<Vector<char>> data = wrapUnique(new Vector<char>(byteLength));
     if (binaryData.byteLength())
         memcpy(data->data(), static_cast<const char*>(binaryData.data()) + byteOffset, byteLength);
 
@@ -457,7 +459,7 @@
     m_loaderProxy->postTaskToLoader(createCrossThreadTask(&Peer::close, wrapCrossThreadPersistent(m_peer.get()), code, reason));
 }
 
-void Bridge::fail(const String& reason, MessageLevel level, PassOwnPtr<SourceLocation> location)
+void Bridge::fail(const String& reason, MessageLevel level, std::unique_ptr<SourceLocation> location)
 {
     ASSERT(m_peer);
     m_loaderProxy->postTaskToLoader(createCrossThreadTask(&Peer::fail, wrapCrossThreadPersistent(m_peer.get()), reason, level, passed(std::move(location))));
diff --git a/third_party/WebKit/Source/modules/websockets/WorkerWebSocketChannel.h b/third_party/WebKit/Source/modules/websockets/WorkerWebSocketChannel.h
index 9a6b4ee..1efba5f 100644
--- a/third_party/WebKit/Source/modules/websockets/WorkerWebSocketChannel.h
+++ b/third_party/WebKit/Source/modules/websockets/WorkerWebSocketChannel.h
@@ -39,10 +39,10 @@
 #include "platform/v8_inspector/public/ConsoleTypes.h"
 #include "wtf/Assertions.h"
 #include "wtf/Forward.h"
-#include "wtf/OwnPtr.h"
 #include "wtf/RefPtr.h"
 #include "wtf/Vector.h"
 #include "wtf/text/WTFString.h"
+#include <memory>
 #include <stdint.h>
 
 namespace blink {
@@ -58,7 +58,7 @@
 class WorkerWebSocketChannel final : public WebSocketChannel {
     WTF_MAKE_NONCOPYABLE(WorkerWebSocketChannel);
 public:
-    static WebSocketChannel* create(WorkerGlobalScope& workerGlobalScope, WebSocketChannelClient* client, PassOwnPtr<SourceLocation> location)
+    static WebSocketChannel* create(WorkerGlobalScope& workerGlobalScope, WebSocketChannelClient* client, std::unique_ptr<SourceLocation> location)
     {
         return new WorkerWebSocketChannel(workerGlobalScope, client, std::move(location));
     }
@@ -69,16 +69,16 @@
     void send(const CString&) override;
     void send(const DOMArrayBuffer&, unsigned byteOffset, unsigned byteLength) override;
     void send(PassRefPtr<BlobDataHandle>) override;
-    void sendTextAsCharVector(PassOwnPtr<Vector<char>>) override
+    void sendTextAsCharVector(std::unique_ptr<Vector<char>>) override
     {
         ASSERT_NOT_REACHED();
     }
-    void sendBinaryAsCharVector(PassOwnPtr<Vector<char>>) override
+    void sendBinaryAsCharVector(std::unique_ptr<Vector<char>>) override
     {
         ASSERT_NOT_REACHED();
     }
     void close(int code, const String& reason) override;
-    void fail(const String& reason, MessageLevel, PassOwnPtr<SourceLocation>) override;
+    void fail(const String& reason, MessageLevel, std::unique_ptr<SourceLocation>) override;
     void disconnect() override; // Will suppress didClose().
 
     DECLARE_VIRTUAL_TRACE();
@@ -93,14 +93,14 @@
         ~Peer() override;
 
         // SourceLocation parameter may be shown when the connection fails.
-        bool initialize(PassOwnPtr<SourceLocation>, ExecutionContext*);
+        bool initialize(std::unique_ptr<SourceLocation>, ExecutionContext*);
 
         void connect(const KURL&, const String& protocol);
-        void sendTextAsCharVector(PassOwnPtr<Vector<char>>);
-        void sendBinaryAsCharVector(PassOwnPtr<Vector<char>>);
+        void sendTextAsCharVector(std::unique_ptr<Vector<char>>);
+        void sendBinaryAsCharVector(std::unique_ptr<Vector<char>>);
         void sendBlob(PassRefPtr<BlobDataHandle>);
         void close(int code, const String& reason);
-        void fail(const String& reason, MessageLevel, PassOwnPtr<SourceLocation>);
+        void fail(const String& reason, MessageLevel, std::unique_ptr<SourceLocation>);
         void disconnect();
 
         DECLARE_VIRTUAL_TRACE();
@@ -110,7 +110,7 @@
         // WebSocketChannelClient functions.
         void didConnect(const String& subprotocol, const String& extensions) override;
         void didReceiveTextMessage(const String& payload) override;
-        void didReceiveBinaryMessage(PassOwnPtr<Vector<char>>) override;
+        void didReceiveBinaryMessage(std::unique_ptr<Vector<char>>) override;
         void didConsumeBufferedAmount(uint64_t) override;
         void didStartClosingHandshake() override;
         void didClose(ClosingHandshakeCompletionStatus, unsigned short code, const String& reason) override;
@@ -133,16 +133,16 @@
         Bridge(WebSocketChannelClient*, WorkerGlobalScope&);
         ~Bridge();
         // SourceLocation parameter may be shown when the connection fails.
-        void initialize(PassOwnPtr<SourceLocation>);
+        void initialize(std::unique_ptr<SourceLocation>);
         bool connect(const KURL&, const String& protocol);
         void send(const CString& message);
         void send(const DOMArrayBuffer&, unsigned byteOffset, unsigned byteLength);
         void send(PassRefPtr<BlobDataHandle>);
         void close(int code, const String& reason);
-        void fail(const String& reason, MessageLevel, PassOwnPtr<SourceLocation>);
+        void fail(const String& reason, MessageLevel, std::unique_ptr<SourceLocation>);
         void disconnect();
 
-        void createPeerOnMainThread(PassOwnPtr<SourceLocation>, WorkerThreadLifecycleContext*, ExecutionContext*);
+        void createPeerOnMainThread(std::unique_ptr<SourceLocation>, WorkerThreadLifecycleContext*, ExecutionContext*);
 
         // Returns null when |disconnect| has already been called.
         WebSocketChannelClient* client() { return m_client; }
@@ -163,10 +163,10 @@
     };
 
 private:
-    WorkerWebSocketChannel(WorkerGlobalScope&, WebSocketChannelClient*, PassOwnPtr<SourceLocation>);
+    WorkerWebSocketChannel(WorkerGlobalScope&, WebSocketChannelClient*, std::unique_ptr<SourceLocation>);
 
     Member<Bridge> m_bridge;
-    OwnPtr<SourceLocation> m_locationAtConnection;
+    std::unique_ptr<SourceLocation> m_locationAtConnection;
 };
 
 } // namespace blink
diff --git a/third_party/WebKit/Source/platform/AsyncFileSystemCallbacks.h b/third_party/WebKit/Source/platform/AsyncFileSystemCallbacks.h
index 0285d3b..5ec265c 100644
--- a/third_party/WebKit/Source/platform/AsyncFileSystemCallbacks.h
+++ b/third_party/WebKit/Source/platform/AsyncFileSystemCallbacks.h
@@ -39,6 +39,7 @@
 #include "wtf/Assertions.h"
 #include "wtf/Noncopyable.h"
 #include "wtf/text/WTFString.h"
+#include <memory>
 
 namespace blink {
 
@@ -70,7 +71,7 @@
     virtual void didReadDirectoryEntries(bool hasMore) { ASSERT_NOT_REACHED(); }
 
     // Called when an AsyncFileWrter has been created successfully.
-    virtual void didCreateFileWriter(PassOwnPtr<WebFileWriter>, long long length) { ASSERT_NOT_REACHED(); }
+    virtual void didCreateFileWriter(std::unique_ptr<WebFileWriter>, long long length) { ASSERT_NOT_REACHED(); }
 
     // Called when there was an error.
     virtual void didFail(int code) = 0;
diff --git a/third_party/WebKit/Source/platform/CalculationValue.h b/third_party/WebKit/Source/platform/CalculationValue.h
index 9ec1c61..68bf3163 100644
--- a/third_party/WebKit/Source/platform/CalculationValue.h
+++ b/third_party/WebKit/Source/platform/CalculationValue.h
@@ -33,8 +33,6 @@
 
 #include "platform/Length.h"
 #include "platform/LengthFunctions.h"
-#include "wtf/OwnPtr.h"
-#include "wtf/PassOwnPtr.h"
 #include "wtf/RefCounted.h"
 
 namespace blink {
diff --git a/third_party/WebKit/Source/platform/ContentSettingCallbacks.cpp b/third_party/WebKit/Source/platform/ContentSettingCallbacks.cpp
index 7431999..76a3143 100644
--- a/third_party/WebKit/Source/platform/ContentSettingCallbacks.cpp
+++ b/third_party/WebKit/Source/platform/ContentSettingCallbacks.cpp
@@ -30,11 +30,14 @@
 
 #include "platform/ContentSettingCallbacks.h"
 
+#include "wtf/PtrUtil.h"
+#include <memory>
+
 namespace blink {
 
-PassOwnPtr<ContentSettingCallbacks> ContentSettingCallbacks::create(std::unique_ptr<SameThreadClosure> allowed, std::unique_ptr<SameThreadClosure> denied)
+std::unique_ptr<ContentSettingCallbacks> ContentSettingCallbacks::create(std::unique_ptr<SameThreadClosure> allowed, std::unique_ptr<SameThreadClosure> denied)
 {
-    return adoptPtr(new ContentSettingCallbacks(std::move(allowed), std::move(denied)));
+    return wrapUnique(new ContentSettingCallbacks(std::move(allowed), std::move(denied)));
 }
 
 ContentSettingCallbacks::ContentSettingCallbacks(std::unique_ptr<SameThreadClosure> allowed, std::unique_ptr<SameThreadClosure> denied)
diff --git a/third_party/WebKit/Source/platform/ContentSettingCallbacks.h b/third_party/WebKit/Source/platform/ContentSettingCallbacks.h
index 2a76970..08f52831 100644
--- a/third_party/WebKit/Source/platform/ContentSettingCallbacks.h
+++ b/third_party/WebKit/Source/platform/ContentSettingCallbacks.h
@@ -9,8 +9,7 @@
 #include "wtf/Allocator.h"
 #include "wtf/Functional.h"
 #include "wtf/Noncopyable.h"
-#include "wtf/OwnPtr.h"
-#include "wtf/PassOwnPtr.h"
+#include <memory>
 
 namespace blink {
 
@@ -18,7 +17,7 @@
     USING_FAST_MALLOC(ContentSettingCallbacks);
     WTF_MAKE_NONCOPYABLE(ContentSettingCallbacks);
 public:
-    static PassOwnPtr<ContentSettingCallbacks> create(std::unique_ptr<SameThreadClosure> allowed, std::unique_ptr<SameThreadClosure> denied);
+    static std::unique_ptr<ContentSettingCallbacks> create(std::unique_ptr<SameThreadClosure> allowed, std::unique_ptr<SameThreadClosure> denied);
     virtual ~ContentSettingCallbacks() { }
 
     void onAllowed() { (*m_allowed)(); }
diff --git a/third_party/WebKit/Source/platform/ContextMenuItem.h b/third_party/WebKit/Source/platform/ContextMenuItem.h
index 854c9fb..29690412 100644
--- a/third_party/WebKit/Source/platform/ContextMenuItem.h
+++ b/third_party/WebKit/Source/platform/ContextMenuItem.h
@@ -29,7 +29,6 @@
 
 #include "platform/PlatformExport.h"
 #include "wtf/Allocator.h"
-#include "wtf/OwnPtr.h"
 #include "wtf/text/WTFString.h"
 
 namespace blink {
diff --git a/third_party/WebKit/Source/platform/CrossThreadCopier.cpp b/third_party/WebKit/Source/platform/CrossThreadCopier.cpp
index f5b4c797..80337ad 100644
--- a/third_party/WebKit/Source/platform/CrossThreadCopier.cpp
+++ b/third_party/WebKit/Source/platform/CrossThreadCopier.cpp
@@ -35,6 +35,7 @@
 #include "platform/network/ResourceResponse.h"
 #include "platform/weborigin/KURL.h"
 #include "wtf/text/WTFString.h"
+#include <memory>
 
 namespace blink {
 
@@ -113,11 +114,11 @@
     >::value),
     "Raw pointer RefCounted test");
 
-// Verify that PassOwnPtr gets passed through.
+// Verify that std::unique_ptr gets passed through.
 static_assert((std::is_same<
-    PassOwnPtr<float>,
-    CrossThreadCopier<PassOwnPtr<float>>::Type
+    std::unique_ptr<float>,
+    CrossThreadCopier<std::unique_ptr<float>>::Type
     >::value),
-    "PassOwnPtr test");
+    "std::unique_ptr test");
 
 } // namespace blink
diff --git a/third_party/WebKit/Source/platform/CrossThreadCopier.h b/third_party/WebKit/Source/platform/CrossThreadCopier.h
index 40fca7bc..cfb46fa 100644
--- a/third_party/WebKit/Source/platform/CrossThreadCopier.h
+++ b/third_party/WebKit/Source/platform/CrossThreadCopier.h
@@ -35,11 +35,11 @@
 #include "platform/heap/Handle.h"
 #include "wtf/Assertions.h"
 #include "wtf/Forward.h"
-#include "wtf/PassOwnPtr.h"
 #include "wtf/PassRefPtr.h"
 #include "wtf/RefPtr.h"
 #include "wtf/ThreadSafeRefCounted.h"
 #include "wtf/TypeTraits.h"
+#include <memory>
 
 class SkRefCnt;
 
@@ -134,16 +134,6 @@
     STATIC_ONLY(CrossThreadCopier);
 };
 
-template <typename T>
-struct CrossThreadCopier<PassOwnPtr<T>> {
-    STATIC_ONLY(CrossThreadCopier);
-    typedef PassOwnPtr<T> Type;
-    static Type copy(Type ownPtr)
-    {
-        return ownPtr;
-    }
-};
-
 template <typename T, typename Deleter>
 struct CrossThreadCopier<std::unique_ptr<T, Deleter>> {
     STATIC_ONLY(CrossThreadCopier);
@@ -205,14 +195,14 @@
 template <>
 struct CrossThreadCopier<ResourceRequest> {
     STATIC_ONLY(CrossThreadCopier);
-    typedef WTF::PassedWrapper<PassOwnPtr<CrossThreadResourceRequestData>> Type;
+    typedef WTF::PassedWrapper<std::unique_ptr<CrossThreadResourceRequestData>> Type;
     PLATFORM_EXPORT static Type copy(const ResourceRequest&);
 };
 
 template <>
 struct CrossThreadCopier<ResourceResponse> {
     STATIC_ONLY(CrossThreadCopier);
-    typedef WTF::PassedWrapper<PassOwnPtr<CrossThreadResourceResponseData>> Type;
+    typedef WTF::PassedWrapper<std::unique_ptr<CrossThreadResourceResponseData>> Type;
     PLATFORM_EXPORT static Type copy(const ResourceResponse&);
 };
 
diff --git a/third_party/WebKit/Source/platform/Crypto.cpp b/third_party/WebKit/Source/platform/Crypto.cpp
index 00cdd51..79fa67b 100644
--- a/third_party/WebKit/Source/platform/Crypto.cpp
+++ b/third_party/WebKit/Source/platform/Crypto.cpp
@@ -7,6 +7,8 @@
 #include "public/platform/Platform.h"
 #include "public/platform/WebCrypto.h"
 #include "public/platform/WebCryptoAlgorithm.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
@@ -36,7 +38,7 @@
 
     ASSERT(crypto);
 
-    OwnPtr<WebCryptoDigestor> digestor = adoptPtr(crypto->createDigestor(algorithmId));
+    std::unique_ptr<WebCryptoDigestor> digestor = wrapUnique(crypto->createDigestor(algorithmId));
     if (!digestor.get() || !digestor->consume(reinterpret_cast<const unsigned char*>(digestable), length) || !digestor->finish(result, resultSize))
         return false;
 
@@ -44,9 +46,9 @@
     return true;
 }
 
-PassOwnPtr<WebCryptoDigestor> createDigestor(HashAlgorithm algorithm)
+std::unique_ptr<WebCryptoDigestor> createDigestor(HashAlgorithm algorithm)
 {
-    return adoptPtr(Platform::current()->crypto()->createDigestor(toWebCryptoAlgorithmId(algorithm)));
+    return wrapUnique(Platform::current()->crypto()->createDigestor(toWebCryptoAlgorithmId(algorithm)));
 }
 
 void finishDigestor(WebCryptoDigestor* digestor, DigestValue& digestResult)
diff --git a/third_party/WebKit/Source/platform/Crypto.h b/third_party/WebKit/Source/platform/Crypto.h
index 891d685d..388462e 100644
--- a/third_party/WebKit/Source/platform/Crypto.h
+++ b/third_party/WebKit/Source/platform/Crypto.h
@@ -17,6 +17,7 @@
 #include "wtf/HashSet.h"
 #include "wtf/StringHasher.h"
 #include "wtf/Vector.h"
+#include <memory>
 
 namespace blink {
 
@@ -32,7 +33,7 @@
 };
 
 PLATFORM_EXPORT bool computeDigest(HashAlgorithm, const char* digestable, size_t length, DigestValue& digestResult);
-PLATFORM_EXPORT PassOwnPtr<WebCryptoDigestor> createDigestor(HashAlgorithm);
+PLATFORM_EXPORT std::unique_ptr<WebCryptoDigestor> createDigestor(HashAlgorithm);
 PLATFORM_EXPORT void finishDigestor(WebCryptoDigestor*, DigestValue& digestResult);
 
 } // namespace blink
diff --git a/third_party/WebKit/Source/platform/DragImage.cpp b/third_party/WebKit/Source/platform/DragImage.cpp
index 52e7c7e..35e3a2c 100644
--- a/third_party/WebKit/Source/platform/DragImage.cpp
+++ b/third_party/WebKit/Source/platform/DragImage.cpp
@@ -50,11 +50,11 @@
 #include "third_party/skia/include/core/SkImage.h"
 #include "third_party/skia/include/core/SkMatrix.h"
 #include "third_party/skia/include/core/SkSurface.h"
-#include "wtf/PassOwnPtr.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/RefPtr.h"
 #include "wtf/text/WTFString.h"
-
 #include <algorithm>
+#include <memory>
 
 namespace blink {
 
@@ -132,7 +132,7 @@
     return imageScale;
 }
 
-PassOwnPtr<DragImage> DragImage::create(Image* image,
+std::unique_ptr<DragImage> DragImage::create(Image* image,
     RespectImageOrientationEnum shouldRespectImageOrientation, float deviceScaleFactor,
     InterpolationQuality interpolationQuality, float opacity, FloatSize imageScale)
 {
@@ -153,7 +153,7 @@
     if (!resizedImage || !resizedImage->asLegacyBitmap(&bm, SkImage::kRO_LegacyBitmapMode))
         return nullptr;
 
-    return adoptPtr(new DragImage(bm, deviceScaleFactor, interpolationQuality));
+    return wrapUnique(new DragImage(bm, deviceScaleFactor, interpolationQuality));
 }
 
 static Font deriveDragLabelFont(int size, FontWeight fontWeight, const FontDescription& systemFont)
@@ -167,7 +167,7 @@
     return result;
 }
 
-PassOwnPtr<DragImage> DragImage::create(const KURL& url, const String& inLabel, const FontDescription& systemFont, float deviceScaleFactor)
+std::unique_ptr<DragImage> DragImage::create(const KURL& url, const String& inLabel, const FontDescription& systemFont, float deviceScaleFactor)
 {
     const Font labelFont = deriveDragLabelFont(kDragLinkLabelFontSize, FontWeightBold, systemFont);
     const Font urlFont = deriveDragLabelFont(kDragLinkUrlFontSize, FontWeightNormal, systemFont);
@@ -213,7 +213,7 @@
     // fill the background
     IntSize scaledImageSize = imageSize;
     scaledImageSize.scale(deviceScaleFactor);
-    OwnPtr<ImageBuffer> buffer(ImageBuffer::create(scaledImageSize));
+    std::unique_ptr<ImageBuffer> buffer(ImageBuffer::create(scaledImageSize));
     if (!buffer)
         return nullptr;
 
diff --git a/third_party/WebKit/Source/platform/DragImage.h b/third_party/WebKit/Source/platform/DragImage.h
index 64f458ae..9fd422c7 100644
--- a/third_party/WebKit/Source/platform/DragImage.h
+++ b/third_party/WebKit/Source/platform/DragImage.h
@@ -34,6 +34,7 @@
 #include "third_party/skia/include/core/SkBitmap.h"
 #include "wtf/Allocator.h"
 #include "wtf/Forward.h"
+#include <memory>
 
 class SkImage;
 
@@ -47,12 +48,12 @@
     USING_FAST_MALLOC(DragImage);
     WTF_MAKE_NONCOPYABLE(DragImage);
 public:
-    static PassOwnPtr<DragImage> create(Image*,
+    static std::unique_ptr<DragImage> create(Image*,
         RespectImageOrientationEnum = DoNotRespectImageOrientation, float deviceScaleFactor = 1,
         InterpolationQuality = InterpolationHigh, float opacity = 1,
         FloatSize imageScale = FloatSize(1, 1));
 
-    static PassOwnPtr<DragImage> create(const KURL&, const String& label, const FontDescription& systemFont, float deviceScaleFactor);
+    static std::unique_ptr<DragImage> create(const KURL&, const String& label, const FontDescription& systemFont, float deviceScaleFactor);
     ~DragImage();
 
     static FloatSize clampedImageScale(const IntSize&, const IntSize&, const IntSize& maxSize);
diff --git a/third_party/WebKit/Source/platform/DragImageTest.cpp b/third_party/WebKit/Source/platform/DragImageTest.cpp
index ba67881..d8f295e 100644
--- a/third_party/WebKit/Source/platform/DragImageTest.cpp
+++ b/third_party/WebKit/Source/platform/DragImageTest.cpp
@@ -43,10 +43,9 @@
 #include "third_party/skia/include/core/SkImage.h"
 #include "third_party/skia/include/core/SkPixelRef.h"
 #include "third_party/skia/include/core/SkSurface.h"
-#include "wtf/OwnPtr.h"
-#include "wtf/PassOwnPtr.h"
 #include "wtf/PassRefPtr.h"
 #include "wtf/RefPtr.h"
+#include <memory>
 
 namespace blink {
 
@@ -125,7 +124,7 @@
 TEST(DragImageTest, NonNullHandling)
 {
     RefPtr<TestImage> testImage(TestImage::create(IntSize(2, 2)));
-    OwnPtr<DragImage> dragImage = DragImage::create(testImage.get());
+    std::unique_ptr<DragImage> dragImage = DragImage::create(testImage.get());
     ASSERT_TRUE(dragImage);
 
     dragImage->scale(0.5, 0.5);
@@ -158,9 +157,9 @@
     fontDescription.setWeight(FontWeightNormal);
     fontDescription.setStyle(FontStyleNormal);
 
-    OwnPtr<DragImage> testImage =
+    std::unique_ptr<DragImage> testImage =
         DragImage::create(url, testLabel, fontDescription, deviceScaleFactor);
-    OwnPtr<DragImage> expectedImage =
+    std::unique_ptr<DragImage> expectedImage =
         DragImage::create(url, expectedLabel, fontDescription, deviceScaleFactor);
 
     EXPECT_EQ(testImage->size().width(), expectedImage->size().width());
@@ -193,7 +192,7 @@
     // Create a DragImage from it. In MSAN builds, this will cause a failure if
     // the pixel memory is not initialized, if we have to respect non-default
     // orientation.
-    OwnPtr<DragImage> dragImage = DragImage::create(image.get(), RespectImageOrientation);
+    std::unique_ptr<DragImage> dragImage = DragImage::create(image.get(), RespectImageOrientation);
 
     // With an invalid pixel ref, BitmapImage should have no backing SkImage => we don't allocate
     // a DragImage.
@@ -223,7 +222,7 @@
     }
 
     RefPtr<TestImage> testImage = TestImage::create(fromSkSp(SkImage::MakeFromBitmap(testBitmap)));
-    OwnPtr<DragImage> dragImage = DragImage::create(testImage.get(), DoNotRespectImageOrientation, 1, InterpolationNone);
+    std::unique_ptr<DragImage> dragImage = DragImage::create(testImage.get(), DoNotRespectImageOrientation, 1, InterpolationNone);
     ASSERT_TRUE(dragImage);
     dragImage->scale(2, 2);
     const SkBitmap& dragBitmap = dragImage->bitmap();
diff --git a/third_party/WebKit/Source/platform/EventTracer.cpp b/third_party/WebKit/Source/platform/EventTracer.cpp
index 6e6b386..7e5d35ab 100644
--- a/third_party/WebKit/Source/platform/EventTracer.cpp
+++ b/third_party/WebKit/Source/platform/EventTracer.cpp
@@ -37,6 +37,7 @@
 #include "public/platform/Platform.h"
 #include "wtf/Assertions.h"
 #include "wtf/text/StringUTF8Adaptor.h"
+#include <memory>
 #include <stdio.h>
 
 namespace blink {
@@ -72,8 +73,8 @@
     const char* name, const char* scope, unsigned long long id, unsigned long long bindId, double timestamp,
     int numArgs, const char* argNames[], const unsigned char argTypes[],
     const unsigned long long argValues[],
-    PassOwnPtr<TracedValue> tracedValue1,
-    PassOwnPtr<TracedValue> tracedValue2,
+    std::unique_ptr<TracedValue> tracedValue1,
+    std::unique_ptr<TracedValue> tracedValue2,
     unsigned flags)
 {
     std::unique_ptr<base::trace_event::ConvertableToTraceFormat> convertables[2];
diff --git a/third_party/WebKit/Source/platform/EventTracer.h b/third_party/WebKit/Source/platform/EventTracer.h
index 4f896619..2b1f9c1 100644
--- a/third_party/WebKit/Source/platform/EventTracer.h
+++ b/third_party/WebKit/Source/platform/EventTracer.h
@@ -33,9 +33,7 @@
 
 #include "platform/PlatformExport.h"
 #include "wtf/Allocator.h"
-#include "wtf/PassOwnPtr.h"
 #include "wtf/text/WTFString.h"
-
 #include <memory>
 #include <stdint.h>
 
@@ -78,8 +76,8 @@
         const char* argNames[],
         const unsigned char argTypes[],
         const unsigned long long argValues[],
-        PassOwnPtr<TracedValue>,
-        PassOwnPtr<TracedValue>,
+        std::unique_ptr<TracedValue>,
+        std::unique_ptr<TracedValue>,
         unsigned flags);
     static TraceEvent::TraceEventHandle addTraceEvent(char phase,
         const unsigned char* categoryEnabledFlag,
diff --git a/third_party/WebKit/Source/platform/PODArena.h b/third_party/WebKit/Source/platform/PODArena.h
index 3250e786..d8ebf83 100644
--- a/third_party/WebKit/Source/platform/PODArena.h
+++ b/third_party/WebKit/Source/platform/PODArena.h
@@ -29,11 +29,11 @@
 #include "wtf/Allocator.h"
 #include "wtf/Assertions.h"
 #include "wtf/Noncopyable.h"
-#include "wtf/OwnPtr.h"
-#include "wtf/PassOwnPtr.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/RefCounted.h"
 #include "wtf/Vector.h"
 #include "wtf/allocator/Partitions.h"
+#include <memory>
 #include <stdint.h>
 
 namespace blink {
@@ -132,7 +132,7 @@
         if (!ptr) {
             if (roundedSize > m_currentChunkSize)
                 m_currentChunkSize = roundedSize;
-            m_chunks.append(adoptPtr(new Chunk(m_allocator.get(), m_currentChunkSize)));
+            m_chunks.append(wrapUnique(new Chunk(m_allocator.get(), m_currentChunkSize)));
             m_current = m_chunks.last().get();
             ptr = m_current->allocate(roundedSize);
         }
@@ -194,7 +194,7 @@
     RefPtr<Allocator> m_allocator;
     Chunk* m_current;
     size_t m_currentChunkSize;
-    Vector<OwnPtr<Chunk>> m_chunks;
+    Vector<std::unique_ptr<Chunk>> m_chunks;
 };
 
 } // namespace blink
diff --git a/third_party/WebKit/Source/platform/PurgeableVector.cpp b/third_party/WebKit/Source/platform/PurgeableVector.cpp
index b193230b..5c42bd1 100644
--- a/third_party/WebKit/Source/platform/PurgeableVector.cpp
+++ b/third_party/WebKit/Source/platform/PurgeableVector.cpp
@@ -34,11 +34,8 @@
 #include "base/memory/discardable_memory_allocator.h"
 #include "platform/web_process_memory_dump.h"
 #include "wtf/Assertions.h"
-#include "wtf/OwnPtr.h"
-#include "wtf/PassOwnPtr.h"
 #include "wtf/text/StringUTF8Adaptor.h"
 #include "wtf/text/WTFString.h"
-
 #include <cstring>
 #include <utility>
 
diff --git a/third_party/WebKit/Source/platform/SharedBuffer.h b/third_party/WebKit/Source/platform/SharedBuffer.h
index 7b522cb..9edad438 100644
--- a/third_party/WebKit/Source/platform/SharedBuffer.h
+++ b/third_party/WebKit/Source/platform/SharedBuffer.h
@@ -31,7 +31,6 @@
 #include "platform/PurgeableVector.h"
 #include "third_party/skia/include/core/SkData.h"
 #include "wtf/Forward.h"
-#include "wtf/OwnPtr.h"
 #include "wtf/RefCounted.h"
 #include "wtf/text/WTFString.h"
 
diff --git a/third_party/WebKit/Source/platform/SharedBufferTest.cpp b/third_party/WebKit/Source/platform/SharedBufferTest.cpp
index 5dfda03d..a93154e 100644
--- a/third_party/WebKit/Source/platform/SharedBufferTest.cpp
+++ b/third_party/WebKit/Source/platform/SharedBufferTest.cpp
@@ -31,12 +31,12 @@
 #include "platform/SharedBuffer.h"
 
 #include "testing/gtest/include/gtest/gtest.h"
-#include "wtf/OwnPtr.h"
-#include "wtf/PassOwnPtr.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/RefPtr.h"
 #include "wtf/Vector.h"
 #include <algorithm>
 #include <cstdlib>
+#include <memory>
 
 namespace blink {
 
@@ -51,7 +51,7 @@
     sharedBuffer->append(testData2, strlen(testData2));
 
     const size_t size = sharedBuffer->size();
-    OwnPtr<char[]> data = adoptArrayPtr(new char[size]);
+    std::unique_ptr<char[]> data = wrapArrayUnique(new char[size]);
     ASSERT_TRUE(sharedBuffer->getAsBytes(data.get(), size));
 
     char expectedConcatenation[] = "HelloWorldGoodbye";
@@ -76,7 +76,7 @@
     sharedBuffer->append(vector2);
 
     const size_t size = sharedBuffer->size();
-    OwnPtr<char[]> data = adoptArrayPtr(new char[size]);
+    std::unique_ptr<char[]> data = wrapArrayUnique(new char[size]);
     ASSERT_TRUE(sharedBuffer->getAsBytes(data.get(), size));
 
     ASSERT_EQ(0x4000U + 0x4000U + 0x4000U, size);
diff --git a/third_party/WebKit/Source/platform/TimerTest.cpp b/third_party/WebKit/Source/platform/TimerTest.cpp
index 22a5a8a..dec68506 100644
--- a/third_party/WebKit/Source/platform/TimerTest.cpp
+++ b/third_party/WebKit/Source/platform/TimerTest.cpp
@@ -11,7 +11,9 @@
 #include "public/platform/WebViewScheduler.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/RefCounted.h"
+#include <memory>
 #include <queue>
 
 using testing::ElementsAre;
@@ -20,10 +22,10 @@
 namespace {
 double gCurrentTimeSecs = 0.0;
 
-// This class exists because gcc doesn't know how to move an OwnPtr.
+// This class exists because gcc doesn't know how to move an std::unique_ptr.
 class RefCountedTaskContainer : public RefCounted<RefCountedTaskContainer> {
 public:
-    explicit RefCountedTaskContainer(WebTaskRunner::Task* task) : m_task(adoptPtr(task)) { }
+    explicit RefCountedTaskContainer(WebTaskRunner::Task* task) : m_task(wrapUnique(task)) { }
 
     ~RefCountedTaskContainer() { }
 
@@ -33,7 +35,7 @@
     }
 
 private:
-    OwnPtr<WebTaskRunner::Task> m_task;
+    std::unique_ptr<WebTaskRunner::Task> m_task;
 };
 
 class DelayedTask {
@@ -200,7 +202,7 @@
 
 class FakeWebThread : public WebThread {
 public:
-    FakeWebThread() : m_webScheduler(adoptPtr(new MockWebScheduler())) { }
+    FakeWebThread() : m_webScheduler(wrapUnique(new MockWebScheduler())) { }
     ~FakeWebThread() override { }
 
     virtual bool isCurrentThread() const
@@ -237,13 +239,13 @@
     }
 
 private:
-    OwnPtr<MockWebScheduler> m_webScheduler;
+    std::unique_ptr<MockWebScheduler> m_webScheduler;
 };
 
 class TimerTestPlatform : public TestingPlatformSupport {
 public:
     TimerTestPlatform()
-        : m_webThread(adoptPtr(new FakeWebThread())) { }
+        : m_webThread(wrapUnique(new FakeWebThread())) { }
     ~TimerTestPlatform() override { }
 
     WebThread* currentThread() override
@@ -282,7 +284,7 @@
         return static_cast<MockWebScheduler*>(m_webThread->scheduler());
     }
 
-    OwnPtr<FakeWebThread> m_webThread;
+    std::unique_ptr<FakeWebThread> m_webThread;
 };
 
 class TimerTest : public testing::Test {
diff --git a/third_party/WebKit/Source/platform/TraceEvent.h b/third_party/WebKit/Source/platform/TraceEvent.h
index 6fca921..bbb08f2 100644
--- a/third_party/WebKit/Source/platform/TraceEvent.h
+++ b/third_party/WebKit/Source/platform/TraceEvent.h
@@ -37,8 +37,8 @@
 #include "wtf/Allocator.h"
 #include "wtf/DynamicAnnotations.h"
 #include "wtf/Noncopyable.h"
-#include "wtf/PassOwnPtr.h"
 #include "wtf/text/CString.h"
+#include <memory>
 
 ////////////////////////////////////////////////////////////////////////////////
 // Implementation specific tracing API definitions.
@@ -116,7 +116,7 @@
 //                    const char** arg_names,
 //                    const unsigned char* arg_types,
 //                    const unsigned long long* arg_values,
-//                    PassOwnPtr<TracedValue> tracedValues[],
+//                    std::unique_ptr<TracedValue> tracedValues[],
 //                    unsigned char flags)
 #define TRACE_EVENT_API_ADD_TRACE_EVENT \
     blink::EventTracer::addTraceEvent
@@ -427,22 +427,22 @@
     *type = TRACE_VALUE_TYPE_CONVERTABLE;
 }
 
-template<typename T> static inline void setTraceValue(const PassOwnPtr<T>& ptr, unsigned char* type, unsigned long long* value)
+template<typename T> static inline void setTraceValue(const std::unique_ptr<T>& ptr, unsigned char* type, unsigned long long* value)
 {
     setTraceValue(ptr.get(), type, value);
 }
 
 template<typename T> struct TracedValueTraits {
     static const bool isTracedValue = false;
-    static PassOwnPtr<TracedValue> moveFromIfTracedValue(const T&)
+    static std::unique_ptr<TracedValue> moveFromIfTracedValue(const T&)
     {
         return nullptr;
     }
 };
 
-template<typename T> struct TracedValueTraits<PassOwnPtr<T>> {
+template<typename T> struct TracedValueTraits<std::unique_ptr<T>> {
     static const bool isTracedValue = std::is_convertible<T*, TracedValue*>::value;
-    static PassOwnPtr<TracedValue> moveFromIfTracedValue(PassOwnPtr<T>&& tracedValue)
+    static std::unique_ptr<TracedValue> moveFromIfTracedValue(std::unique_ptr<T>&& tracedValue)
     {
         return std::move(tracedValue);
     }
@@ -453,7 +453,7 @@
     return TracedValueTraits<T>::isTracedValue;
 }
 
-template<typename T> PassOwnPtr<TracedValue> moveFromIfTracedValue(T&& value)
+template<typename T> std::unique_ptr<TracedValue> moveFromIfTracedValue(T&& value)
 {
     return TracedValueTraits<T>::moveFromIfTracedValue(std::forward<T>(value));
 }
diff --git a/third_party/WebKit/Source/platform/TraceEventCommon.h b/third_party/WebKit/Source/platform/TraceEventCommon.h
index b38208d..95addda 100644
--- a/third_party/WebKit/Source/platform/TraceEventCommon.h
+++ b/third_party/WebKit/Source/platform/TraceEventCommon.h
@@ -148,8 +148,8 @@
 //   class MyData {
 //    public:
 //     MyData() {}
-//     PassOwnPtr<TracedValue> toTracedValue() {
-//       OwnPtr<TracedValue> tracedValue = TracedValue::create();
+//     std::unique_ptr<TracedValue> toTracedValue() {
+//       std::unique_ptr<TracedValue> tracedValue = TracedValue::create();
 //       tracedValue->setInteger("foo", 1);
 //       tracedValue->beginArray("bar");
 //       tracedValue->pushInteger(2);
diff --git a/third_party/WebKit/Source/platform/TracedValue.cpp b/third_party/WebKit/Source/platform/TracedValue.cpp
index 3302698e..d60ad77f 100644
--- a/third_party/WebKit/Source/platform/TracedValue.cpp
+++ b/third_party/WebKit/Source/platform/TracedValue.cpp
@@ -5,13 +5,15 @@
 #include "platform/TracedValue.h"
 
 #include "base/trace_event/trace_event_argument.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/text/StringUTF8Adaptor.h"
+#include <memory>
 
 namespace blink {
 
-PassOwnPtr<TracedValue> TracedValue::create()
+std::unique_ptr<TracedValue> TracedValue::create()
 {
-    return adoptPtr(new TracedValue());
+    return wrapUnique(new TracedValue());
 }
 
 TracedValue::TracedValue()
diff --git a/third_party/WebKit/Source/platform/TracedValue.h b/third_party/WebKit/Source/platform/TracedValue.h
index 2423700ac..f3b315b0 100644
--- a/third_party/WebKit/Source/platform/TracedValue.h
+++ b/third_party/WebKit/Source/platform/TracedValue.h
@@ -7,8 +7,8 @@
 
 #include "base/memory/ref_counted.h"
 #include "platform/EventTracer.h"
-#include "wtf/PassOwnPtr.h"
 #include "wtf/text/WTFString.h"
+#include <memory>
 
 namespace base {
 namespace trace_event {
@@ -25,7 +25,7 @@
 public:
     ~TracedValue();
 
-    static PassOwnPtr<TracedValue> create();
+    static std::unique_ptr<TracedValue> create();
 
     void endDictionary();
     void endArray();
diff --git a/third_party/WebKit/Source/platform/TracedValueTest.cpp b/third_party/WebKit/Source/platform/TracedValueTest.cpp
index b2357545..7a35df6 100644
--- a/third_party/WebKit/Source/platform/TracedValueTest.cpp
+++ b/third_party/WebKit/Source/platform/TracedValueTest.cpp
@@ -7,10 +7,11 @@
 #include "base/json/json_reader.h"
 #include "base/values.h"
 #include "testing/gtest/include/gtest/gtest.h"
+#include <memory>
 
 namespace blink {
 
-std::unique_ptr<base::Value> parseTracedValue(PassOwnPtr<TracedValue> value)
+std::unique_ptr<base::Value> parseTracedValue(std::unique_ptr<TracedValue> value)
 {
     base::JSONReader reader;
     CString utf8 = value->toString().utf8();
@@ -19,7 +20,7 @@
 
 TEST(TracedValueTest, FlatDictionary)
 {
-    OwnPtr<TracedValue> value = TracedValue::create();
+    std::unique_ptr<TracedValue> value = TracedValue::create();
     value->setInteger("int", 2014);
     value->setDouble("double", 0.0);
     value->setBoolean("bool", true);
@@ -41,7 +42,7 @@
 
 TEST(TracedValueTest, Hierarchy)
 {
-    OwnPtr<TracedValue> value = TracedValue::create();
+    std::unique_ptr<TracedValue> value = TracedValue::create();
     value->setInteger("i0", 2014);
     value->beginDictionary("dict1");
     value->setInteger("i1", 2014);
@@ -102,7 +103,7 @@
 
 TEST(TracedValueTest, Escape)
 {
-    OwnPtr<TracedValue> value = TracedValue::create();
+    std::unique_ptr<TracedValue> value = TracedValue::create();
     value->setString("s0", "value0\\");
     value->setString("s1", "value\n1");
     value->setString("s2", "\"value2\"");
diff --git a/third_party/WebKit/Source/platform/WaitableEvent.cpp b/third_party/WebKit/Source/platform/WaitableEvent.cpp
index 6c5f9ee..3bbb8577 100644
--- a/third_party/WebKit/Source/platform/WaitableEvent.cpp
+++ b/third_party/WebKit/Source/platform/WaitableEvent.cpp
@@ -5,15 +5,14 @@
 #include "platform/WaitableEvent.h"
 
 #include "base/synchronization/waitable_event.h"
-#include "wtf/PassOwnPtr.h"
-
+#include "wtf/PtrUtil.h"
 #include <vector>
 
 namespace blink {
 
 WaitableEvent::WaitableEvent(ResetPolicy policy, InitialState state)
 {
-    m_impl = adoptPtr(new base::WaitableEvent(
+    m_impl = wrapUnique(new base::WaitableEvent(
         policy == ResetPolicy::Manual
             ? base::WaitableEvent::ResetPolicy::MANUAL
             : base::WaitableEvent::ResetPolicy::AUTOMATIC,
diff --git a/third_party/WebKit/Source/platform/WaitableEvent.h b/third_party/WebKit/Source/platform/WaitableEvent.h
index 8b227cc..dad4a30 100644
--- a/third_party/WebKit/Source/platform/WaitableEvent.h
+++ b/third_party/WebKit/Source/platform/WaitableEvent.h
@@ -32,8 +32,8 @@
 #define WaitableEvent_h
 
 #include "platform/PlatformExport.h"
-#include "wtf/OwnPtr.h"
 #include "wtf/Vector.h"
+#include <memory>
 
 namespace base {
 class WaitableEvent;
@@ -78,7 +78,7 @@
     WaitableEvent(const WaitableEvent&) = delete;
     void operator=(const WaitableEvent&) = delete;
 
-    OwnPtr<base::WaitableEvent> m_impl;
+    std::unique_ptr<base::WaitableEvent> m_impl;
 };
 
 } // namespace blink
diff --git a/third_party/WebKit/Source/platform/WebScheduler.cpp b/third_party/WebKit/Source/platform/WebScheduler.cpp
index 7e0a116..7cb3420 100644
--- a/third_party/WebKit/Source/platform/WebScheduler.cpp
+++ b/third_party/WebKit/Source/platform/WebScheduler.cpp
@@ -7,7 +7,6 @@
 #include "public/platform/WebFrameScheduler.h"
 #include "public/platform/WebTraceLocation.h"
 #include "wtf/Assertions.h"
-#include "wtf/OwnPtr.h"
 
 namespace blink {
 
diff --git a/third_party/WebKit/Source/platform/WebThreadSupportingGC.cpp b/third_party/WebKit/Source/platform/WebThreadSupportingGC.cpp
index 6c7f2cdc..bb85da48 100644
--- a/third_party/WebKit/Source/platform/WebThreadSupportingGC.cpp
+++ b/third_party/WebKit/Source/platform/WebThreadSupportingGC.cpp
@@ -6,18 +6,20 @@
 
 #include "platform/heap/SafePoint.h"
 #include "public/platform/WebScheduler.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/Threading.h"
+#include <memory>
 
 namespace blink {
 
-PassOwnPtr<WebThreadSupportingGC> WebThreadSupportingGC::create(const char* name, bool perThreadHeapEnabled)
+std::unique_ptr<WebThreadSupportingGC> WebThreadSupportingGC::create(const char* name, bool perThreadHeapEnabled)
 {
-    return adoptPtr(new WebThreadSupportingGC(name, nullptr, perThreadHeapEnabled));
+    return wrapUnique(new WebThreadSupportingGC(name, nullptr, perThreadHeapEnabled));
 }
 
-PassOwnPtr<WebThreadSupportingGC> WebThreadSupportingGC::createForThread(WebThread* thread, bool perThreadHeapEnabled)
+std::unique_ptr<WebThreadSupportingGC> WebThreadSupportingGC::createForThread(WebThread* thread, bool perThreadHeapEnabled)
 {
-    return adoptPtr(new WebThreadSupportingGC(nullptr, thread, perThreadHeapEnabled));
+    return wrapUnique(new WebThreadSupportingGC(nullptr, thread, perThreadHeapEnabled));
 }
 
 WebThreadSupportingGC::WebThreadSupportingGC(const char* name, WebThread* thread, bool perThreadHeapEnabled)
@@ -32,7 +34,7 @@
 #endif
     if (!m_thread) {
         // If |thread| is not given, create a new one and own it.
-        m_owningThread = adoptPtr(Platform::current()->createThread(name));
+        m_owningThread = wrapUnique(Platform::current()->createThread(name));
         m_thread = m_owningThread.get();
     }
 }
@@ -49,7 +51,7 @@
 void WebThreadSupportingGC::initialize()
 {
     ThreadState::attachCurrentThread(m_perThreadHeapEnabled);
-    m_gcTaskRunner = adoptPtr(new GCTaskRunner(m_thread));
+    m_gcTaskRunner = wrapUnique(new GCTaskRunner(m_thread));
 }
 
 void WebThreadSupportingGC::shutdown()
diff --git a/third_party/WebKit/Source/platform/WebThreadSupportingGC.h b/third_party/WebKit/Source/platform/WebThreadSupportingGC.h
index faeacc2d..184365c 100644
--- a/third_party/WebKit/Source/platform/WebThreadSupportingGC.h
+++ b/third_party/WebKit/Source/platform/WebThreadSupportingGC.h
@@ -11,8 +11,7 @@
 #include "public/platform/WebThread.h"
 #include "wtf/Allocator.h"
 #include "wtf/Noncopyable.h"
-#include "wtf/OwnPtr.h"
-#include "wtf/PassOwnPtr.h"
+#include <memory>
 
 namespace blink {
 
@@ -29,8 +28,8 @@
     USING_FAST_MALLOC(WebThreadSupportingGC);
     WTF_MAKE_NONCOPYABLE(WebThreadSupportingGC);
 public:
-    static PassOwnPtr<WebThreadSupportingGC> create(const char* name, bool perThreadHeapEnabled = false);
-    static PassOwnPtr<WebThreadSupportingGC> createForThread(WebThread*, bool perThreadHeapEnabled = false);
+    static std::unique_ptr<WebThreadSupportingGC> create(const char* name, bool perThreadHeapEnabled = false);
+    static std::unique_ptr<WebThreadSupportingGC> createForThread(WebThread*, bool perThreadHeapEnabled = false);
     ~WebThreadSupportingGC();
 
     void postTask(const WebTraceLocation& location, std::unique_ptr<SameThreadClosure> task)
@@ -80,13 +79,13 @@
 private:
     WebThreadSupportingGC(const char* name, WebThread*, bool perThreadHeapEnabled);
 
-    OwnPtr<GCTaskRunner> m_gcTaskRunner;
+    std::unique_ptr<GCTaskRunner> m_gcTaskRunner;
 
     // m_thread is guaranteed to be non-null after this instance is constructed.
     // m_owningThread is non-null unless this instance is constructed for an
     // existing thread via createForThread().
     WebThread* m_thread = nullptr;
-    OwnPtr<WebThread> m_owningThread;
+    std::unique_ptr<WebThread> m_owningThread;
     bool m_perThreadHeapEnabled;
 };
 
diff --git a/third_party/WebKit/Source/platform/animation/AnimationTranslationUtilTest.cpp b/third_party/WebKit/Source/platform/animation/AnimationTranslationUtilTest.cpp
index 0e9ac9b..4a1934b 100644
--- a/third_party/WebKit/Source/platform/animation/AnimationTranslationUtilTest.cpp
+++ b/third_party/WebKit/Source/platform/animation/AnimationTranslationUtilTest.cpp
@@ -34,13 +34,14 @@
 #include "platform/transforms/TranslateTransformOperation.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "wtf/RefPtr.h"
+#include <memory>
 
 namespace blink {
 
 TEST(AnimationTranslationUtilTest, transformsWork)
 {
     TransformOperations ops;
-    OwnPtr<CompositorTransformOperations> outOps = CompositorTransformOperations::create();
+    std::unique_ptr<CompositorTransformOperations> outOps = CompositorTransformOperations::create();
 
     ops.operations().append(TranslateTransformOperation::create(Length(2, Fixed), Length(0, Fixed), TransformOperation::TranslateX));
     ops.operations().append(RotateTransformOperation::create(0.1, 0.2, 0.3, 200000.4, TransformOperation::Rotate3D));
@@ -73,7 +74,7 @@
 TEST(AnimationTranslationUtilTest, filtersWork)
 {
     FilterOperations ops;
-    OwnPtr<CompositorFilterOperations> outOps = CompositorFilterOperations::create();
+    std::unique_ptr<CompositorFilterOperations> outOps = CompositorFilterOperations::create();
 
     ops.operations().append(BasicColorMatrixFilterOperation::create(0.5, FilterOperation::SATURATE));
     ops.operations().append(BasicColorMatrixFilterOperation::create(0.2, FilterOperation::GRAYSCALE));
diff --git a/third_party/WebKit/Source/platform/animation/CompositorAnimation.cpp b/third_party/WebKit/Source/platform/animation/CompositorAnimation.cpp
index 2b73cd8..63becca 100644
--- a/third_party/WebKit/Source/platform/animation/CompositorAnimation.cpp
+++ b/third_party/WebKit/Source/platform/animation/CompositorAnimation.cpp
@@ -13,6 +13,7 @@
 #include "platform/animation/CompositorFloatAnimationCurve.h"
 #include "platform/animation/CompositorScrollOffsetAnimationCurve.h"
 #include "platform/animation/CompositorTransformAnimationCurve.h"
+#include <memory>
 
 using cc::Animation;
 using cc::AnimationIdProvider;
@@ -126,7 +127,7 @@
     return std::move(m_animation);
 }
 
-PassOwnPtr<CompositorFloatAnimationCurve> CompositorAnimation::floatCurveForTesting() const
+std::unique_ptr<CompositorFloatAnimationCurve> CompositorAnimation::floatCurveForTesting() const
 {
     const cc::AnimationCurve* curve = m_animation->curve();
     DCHECK_EQ(cc::AnimationCurve::FLOAT, curve->Type());
diff --git a/third_party/WebKit/Source/platform/animation/CompositorAnimation.h b/third_party/WebKit/Source/platform/animation/CompositorAnimation.h
index c3e7bd85..681141a 100644
--- a/third_party/WebKit/Source/platform/animation/CompositorAnimation.h
+++ b/third_party/WebKit/Source/platform/animation/CompositorAnimation.h
@@ -9,8 +9,7 @@
 #include "platform/PlatformExport.h"
 #include "platform/animation/CompositorTargetProperty.h"
 #include "wtf/Noncopyable.h"
-#include "wtf/PassOwnPtr.h"
-
+#include "wtf/PtrUtil.h"
 #include <memory>
 
 namespace cc {
@@ -29,9 +28,9 @@
     using Direction = cc::Animation::Direction;
     using FillMode = cc::Animation::FillMode;
 
-    static PassOwnPtr<CompositorAnimation> create(const blink::CompositorAnimationCurve& curve, CompositorTargetProperty::Type target, int groupId, int animationId)
+    static std::unique_ptr<CompositorAnimation> create(const blink::CompositorAnimationCurve& curve, CompositorTargetProperty::Type target, int groupId, int animationId)
     {
-        return adoptPtr(new CompositorAnimation(curve, target, animationId, groupId));
+        return wrapUnique(new CompositorAnimation(curve, target, animationId, groupId));
     }
 
     ~CompositorAnimation();
@@ -68,7 +67,7 @@
 
     std::unique_ptr<cc::Animation> passAnimation();
 
-    PassOwnPtr<CompositorFloatAnimationCurve> floatCurveForTesting() const;
+    std::unique_ptr<CompositorFloatAnimationCurve> floatCurveForTesting() const;
 
 private:
     CompositorAnimation(const CompositorAnimationCurve&, CompositorTargetProperty::Type, int animationId, int groupId);
diff --git a/third_party/WebKit/Source/platform/animation/CompositorAnimationHostTest.cpp b/third_party/WebKit/Source/platform/animation/CompositorAnimationHostTest.cpp
index 1514d2d4..30b47359 100644
--- a/third_party/WebKit/Source/platform/animation/CompositorAnimationHostTest.cpp
+++ b/third_party/WebKit/Source/platform/animation/CompositorAnimationHostTest.cpp
@@ -8,6 +8,8 @@
 #include "platform/animation/CompositorAnimationTimeline.h"
 #include "platform/testing/CompositorTest.h"
 #include "platform/testing/WebLayerTreeViewImplForTesting.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
@@ -16,13 +18,13 @@
 
 TEST_F(CompositorAnimationHostTest, AnimationHostNullWhenTimelineDetached)
 {
-    OwnPtr<CompositorAnimationTimeline> timeline = CompositorAnimationTimeline::create();
+    std::unique_ptr<CompositorAnimationTimeline> timeline = CompositorAnimationTimeline::create();
 
     scoped_refptr<cc::AnimationTimeline> ccTimeline = timeline->animationTimeline();
     EXPECT_FALSE(ccTimeline->animation_host());
     EXPECT_TRUE(timeline->compositorAnimationHost().isNull());
 
-    OwnPtr<WebLayerTreeView> layerTreeHost = adoptPtr(new WebLayerTreeViewImplForTesting);
+    std::unique_ptr<WebLayerTreeView> layerTreeHost = wrapUnique(new WebLayerTreeViewImplForTesting);
     DCHECK(layerTreeHost);
 
     layerTreeHost->attachCompositorAnimationTimeline(timeline->animationTimeline());
diff --git a/third_party/WebKit/Source/platform/animation/CompositorAnimationPlayer.h b/third_party/WebKit/Source/platform/animation/CompositorAnimationPlayer.h
index 117ffcc..003ae77 100644
--- a/third_party/WebKit/Source/platform/animation/CompositorAnimationPlayer.h
+++ b/third_party/WebKit/Source/platform/animation/CompositorAnimationPlayer.h
@@ -12,8 +12,7 @@
 #include "cc/animation/animation_player.h"
 #include "platform/PlatformExport.h"
 #include "wtf/Noncopyable.h"
-#include "wtf/PassOwnPtr.h"
-
+#include "wtf/PtrUtil.h"
 #include <memory>
 
 namespace blink {
@@ -26,9 +25,9 @@
 class PLATFORM_EXPORT CompositorAnimationPlayer : public cc::AnimationDelegate {
     WTF_MAKE_NONCOPYABLE(CompositorAnimationPlayer);
 public:
-    static PassOwnPtr<CompositorAnimationPlayer> create()
+    static std::unique_ptr<CompositorAnimationPlayer> create()
     {
-        return adoptPtr(new CompositorAnimationPlayer());
+        return wrapUnique(new CompositorAnimationPlayer());
     }
 
     ~CompositorAnimationPlayer();
diff --git a/third_party/WebKit/Source/platform/animation/CompositorAnimationPlayerTest.cpp b/third_party/WebKit/Source/platform/animation/CompositorAnimationPlayerTest.cpp
index 25d8fdc..daa8206 100644
--- a/third_party/WebKit/Source/platform/animation/CompositorAnimationPlayerTest.cpp
+++ b/third_party/WebKit/Source/platform/animation/CompositorAnimationPlayerTest.cpp
@@ -44,7 +44,7 @@
         return m_player.get();
     }
 
-    OwnPtr<CompositorAnimationPlayer> m_player;
+    std::unique_ptr<CompositorAnimationPlayer> m_player;
 };
 
 class CompositorAnimationPlayerTest : public CompositorTest {
@@ -56,7 +56,7 @@
 {
     std::unique_ptr<CompositorAnimationDelegateForTesting> delegate(new CompositorAnimationDelegateForTesting);
 
-    OwnPtr<CompositorAnimationPlayer> player = CompositorAnimationPlayer::create();
+    std::unique_ptr<CompositorAnimationPlayer> player = CompositorAnimationPlayer::create();
     cc::AnimationPlayer* ccPlayer = player->animationPlayer();
 
     player->setAnimationDelegate(delegate.get());
@@ -76,7 +76,7 @@
 {
     std::unique_ptr<CompositorAnimationDelegateForTesting> delegate(new CompositorAnimationDelegateForTesting);
 
-    OwnPtr<CompositorAnimationPlayer> player = CompositorAnimationPlayer::create();
+    std::unique_ptr<CompositorAnimationPlayer> player = CompositorAnimationPlayer::create();
     scoped_refptr<cc::AnimationPlayer> ccPlayer = player->animationPlayer();
 
     player->setAnimationDelegate(delegate.get());
@@ -92,7 +92,7 @@
 
 TEST_F(CompositorAnimationPlayerTest, CompositorPlayerDeletionDetachesFromCCTimeline)
 {
-    OwnPtr<CompositorAnimationTimeline> timeline = CompositorAnimationTimeline::create();
+    std::unique_ptr<CompositorAnimationTimeline> timeline = CompositorAnimationTimeline::create();
     std::unique_ptr<CompositorAnimationPlayerTestClient> client(new CompositorAnimationPlayerTestClient);
 
     scoped_refptr<cc::AnimationTimeline> ccTimeline = timeline->animationTimeline();
diff --git a/third_party/WebKit/Source/platform/animation/CompositorAnimationTest.cpp b/third_party/WebKit/Source/platform/animation/CompositorAnimationTest.cpp
index 066b14e..b230193 100644
--- a/third_party/WebKit/Source/platform/animation/CompositorAnimationTest.cpp
+++ b/third_party/WebKit/Source/platform/animation/CompositorAnimationTest.cpp
@@ -11,8 +11,8 @@
 
 TEST(WebCompositorAnimationTest, DefaultSettings)
 {
-    OwnPtr<CompositorAnimationCurve> curve = CompositorFloatAnimationCurve::create();
-    OwnPtr<CompositorAnimation> animation = CompositorAnimation::create(
+    std::unique_ptr<CompositorAnimationCurve> curve = CompositorFloatAnimationCurve::create();
+    std::unique_ptr<CompositorAnimation> animation = CompositorAnimation::create(
         *curve, CompositorTargetProperty::OPACITY, 1, 0);
 
     // Ensure that the defaults are correct.
@@ -24,8 +24,8 @@
 
 TEST(WebCompositorAnimationTest, ModifiedSettings)
 {
-    OwnPtr<CompositorFloatAnimationCurve> curve = CompositorFloatAnimationCurve::create();
-    OwnPtr<CompositorAnimation> animation = CompositorAnimation::create(
+    std::unique_ptr<CompositorFloatAnimationCurve> curve = CompositorFloatAnimationCurve::create();
+    std::unique_ptr<CompositorAnimation> animation = CompositorAnimation::create(
         *curve, CompositorTargetProperty::OPACITY, 1, 0);
     animation->setIterations(2);
     animation->setStartTime(2);
diff --git a/third_party/WebKit/Source/platform/animation/CompositorAnimationTimeline.h b/third_party/WebKit/Source/platform/animation/CompositorAnimationTimeline.h
index 384c1a2..7a8eece 100644
--- a/third_party/WebKit/Source/platform/animation/CompositorAnimationTimeline.h
+++ b/third_party/WebKit/Source/platform/animation/CompositorAnimationTimeline.h
@@ -9,8 +9,7 @@
 #include "cc/animation/animation_timeline.h"
 #include "platform/PlatformExport.h"
 #include "wtf/Noncopyable.h"
-#include "wtf/PassOwnPtr.h"
-
+#include "wtf/PtrUtil.h"
 #include <memory>
 
 namespace blink {
@@ -22,9 +21,9 @@
 class PLATFORM_EXPORT CompositorAnimationTimeline {
     WTF_MAKE_NONCOPYABLE(CompositorAnimationTimeline);
 public:
-    static PassOwnPtr<CompositorAnimationTimeline> create()
+    static std::unique_ptr<CompositorAnimationTimeline> create()
     {
-        return adoptPtr(new CompositorAnimationTimeline());
+        return wrapUnique(new CompositorAnimationTimeline());
     }
 
     ~CompositorAnimationTimeline();
diff --git a/third_party/WebKit/Source/platform/animation/CompositorAnimationTimelineTest.cpp b/third_party/WebKit/Source/platform/animation/CompositorAnimationTimelineTest.cpp
index 99912f9..c4d4d5d 100644
--- a/third_party/WebKit/Source/platform/animation/CompositorAnimationTimelineTest.cpp
+++ b/third_party/WebKit/Source/platform/animation/CompositorAnimationTimelineTest.cpp
@@ -9,6 +9,8 @@
 #include "platform/animation/CompositorAnimationPlayer.h"
 #include "platform/testing/CompositorTest.h"
 #include "platform/testing/WebLayerTreeViewImplForTesting.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
@@ -17,12 +19,12 @@
 
 TEST_F(CompositorAnimationTimelineTest, CompositorTimelineDeletionDetachesFromAnimationHost)
 {
-    OwnPtr<CompositorAnimationTimeline> timeline = CompositorAnimationTimeline::create();
+    std::unique_ptr<CompositorAnimationTimeline> timeline = CompositorAnimationTimeline::create();
 
     scoped_refptr<cc::AnimationTimeline> ccTimeline = timeline->animationTimeline();
     EXPECT_FALSE(ccTimeline->animation_host());
 
-    OwnPtr<WebLayerTreeView> layerTreeHost = adoptPtr(new WebLayerTreeViewImplForTesting);
+    std::unique_ptr<WebLayerTreeView> layerTreeHost = wrapUnique(new WebLayerTreeViewImplForTesting);
     DCHECK(layerTreeHost);
 
     layerTreeHost->attachCompositorAnimationTimeline(timeline->animationTimeline());
diff --git a/third_party/WebKit/Source/platform/animation/CompositorFilterAnimationCurve.h b/third_party/WebKit/Source/platform/animation/CompositorFilterAnimationCurve.h
index 9984335..4b621f1 100644
--- a/third_party/WebKit/Source/platform/animation/CompositorFilterAnimationCurve.h
+++ b/third_party/WebKit/Source/platform/animation/CompositorFilterAnimationCurve.h
@@ -10,7 +10,8 @@
 #include "platform/animation/CompositorFilterKeyframe.h"
 #include "platform/animation/TimingFunction.h"
 #include "wtf/Noncopyable.h"
-#include "wtf/PassOwnPtr.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace cc {
 class KeyframedFilterAnimationCurve;
@@ -26,9 +27,9 @@
 class PLATFORM_EXPORT CompositorFilterAnimationCurve : public CompositorAnimationCurve {
     WTF_MAKE_NONCOPYABLE(CompositorFilterAnimationCurve);
 public:
-    static PassOwnPtr<CompositorFilterAnimationCurve> create()
+    static std::unique_ptr<CompositorFilterAnimationCurve> create()
     {
-        return adoptPtr(new CompositorFilterAnimationCurve());
+        return wrapUnique(new CompositorFilterAnimationCurve());
     }
     ~CompositorFilterAnimationCurve() override;
 
diff --git a/third_party/WebKit/Source/platform/animation/CompositorFilterKeyframe.cpp b/third_party/WebKit/Source/platform/animation/CompositorFilterKeyframe.cpp
index 1758ee89..d67ba928 100644
--- a/third_party/WebKit/Source/platform/animation/CompositorFilterKeyframe.cpp
+++ b/third_party/WebKit/Source/platform/animation/CompositorFilterKeyframe.cpp
@@ -4,9 +4,11 @@
 
 #include "platform/animation/CompositorFilterKeyframe.h"
 
+#include <memory>
+
 namespace blink {
 
-CompositorFilterKeyframe::CompositorFilterKeyframe(double time, PassOwnPtr<CompositorFilterOperations> value)
+CompositorFilterKeyframe::CompositorFilterKeyframe(double time, std::unique_ptr<CompositorFilterOperations> value)
     : m_time(time)
     , m_value(std::move(value))
 {
diff --git a/third_party/WebKit/Source/platform/animation/CompositorFilterKeyframe.h b/third_party/WebKit/Source/platform/animation/CompositorFilterKeyframe.h
index 75a8687..bbecf3fa 100644
--- a/third_party/WebKit/Source/platform/animation/CompositorFilterKeyframe.h
+++ b/third_party/WebKit/Source/platform/animation/CompositorFilterKeyframe.h
@@ -7,14 +7,13 @@
 
 #include "platform/PlatformExport.h"
 #include "platform/graphics/CompositorFilterOperations.h"
-#include "wtf/OwnPtr.h"
-#include "wtf/PassOwnPtr.h"
+#include <memory>
 
 namespace blink {
 
 class PLATFORM_EXPORT CompositorFilterKeyframe {
 public:
-    CompositorFilterKeyframe(double time, PassOwnPtr<CompositorFilterOperations>);
+    CompositorFilterKeyframe(double time, std::unique_ptr<CompositorFilterOperations>);
     ~CompositorFilterKeyframe();
 
     double time() const { return m_time; }
@@ -23,7 +22,7 @@
 
 private:
     double m_time;
-    OwnPtr<CompositorFilterOperations> m_value;
+    std::unique_ptr<CompositorFilterOperations> m_value;
 };
 
 } // namespace blink
diff --git a/third_party/WebKit/Source/platform/animation/CompositorFloatAnimationCurve.cpp b/third_party/WebKit/Source/platform/animation/CompositorFloatAnimationCurve.cpp
index 47fd8da..5c6a461 100644
--- a/third_party/WebKit/Source/platform/animation/CompositorFloatAnimationCurve.cpp
+++ b/third_party/WebKit/Source/platform/animation/CompositorFloatAnimationCurve.cpp
@@ -7,6 +7,8 @@
 #include "cc/animation/animation_curve.h"
 #include "cc/animation/keyframed_animation_curve.h"
 #include "cc/animation/timing_function.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 using blink::CompositorFloatKeyframe;
 
@@ -26,9 +28,9 @@
 {
 }
 
-PassOwnPtr<CompositorFloatAnimationCurve> CompositorFloatAnimationCurve::CreateForTesting(std::unique_ptr<cc::KeyframedFloatAnimationCurve> curve)
+std::unique_ptr<CompositorFloatAnimationCurve> CompositorFloatAnimationCurve::CreateForTesting(std::unique_ptr<cc::KeyframedFloatAnimationCurve> curve)
 {
-    return adoptPtr(new CompositorFloatAnimationCurve(std::move(curve)));
+    return wrapUnique(new CompositorFloatAnimationCurve(std::move(curve)));
 }
 
 Vector<CompositorFloatKeyframe> CompositorFloatAnimationCurve::keyframesForTesting() const
diff --git a/third_party/WebKit/Source/platform/animation/CompositorFloatAnimationCurve.h b/third_party/WebKit/Source/platform/animation/CompositorFloatAnimationCurve.h
index 2ddc495..69340ce 100644
--- a/third_party/WebKit/Source/platform/animation/CompositorFloatAnimationCurve.h
+++ b/third_party/WebKit/Source/platform/animation/CompositorFloatAnimationCurve.h
@@ -10,8 +10,9 @@
 #include "platform/animation/CompositorFloatKeyframe.h"
 #include "platform/animation/TimingFunction.h"
 #include "wtf/Noncopyable.h"
-#include "wtf/PassOwnPtr.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/Vector.h"
+#include <memory>
 
 namespace cc {
 class KeyframedFloatAnimationCurve;
@@ -27,14 +28,14 @@
 class PLATFORM_EXPORT CompositorFloatAnimationCurve : public CompositorAnimationCurve {
     WTF_MAKE_NONCOPYABLE(CompositorFloatAnimationCurve);
 public:
-    static PassOwnPtr<CompositorFloatAnimationCurve> create()
+    static std::unique_ptr<CompositorFloatAnimationCurve> create()
     {
-        return adoptPtr(new CompositorFloatAnimationCurve());
+        return wrapUnique(new CompositorFloatAnimationCurve());
     }
 
     ~CompositorFloatAnimationCurve() override;
 
-    static PassOwnPtr<CompositorFloatAnimationCurve> CreateForTesting(std::unique_ptr<cc::KeyframedFloatAnimationCurve>);
+    static std::unique_ptr<CompositorFloatAnimationCurve> CreateForTesting(std::unique_ptr<cc::KeyframedFloatAnimationCurve>);
     Vector<CompositorFloatKeyframe> keyframesForTesting() const;
 
     // TODO(loyso): Erase these methods once blink/cc timing functions unified.
diff --git a/third_party/WebKit/Source/platform/animation/CompositorFloatAnimationCurveTest.cpp b/third_party/WebKit/Source/platform/animation/CompositorFloatAnimationCurveTest.cpp
index 23900099..dc34795 100644
--- a/third_party/WebKit/Source/platform/animation/CompositorFloatAnimationCurveTest.cpp
+++ b/third_party/WebKit/Source/platform/animation/CompositorFloatAnimationCurveTest.cpp
@@ -18,7 +18,7 @@
 // Tests that a float animation with one keyframe works as expected.
 TEST(WebFloatAnimationCurveTest, OneFloatKeyframe)
 {
-    OwnPtr<CompositorFloatAnimationCurve> curve = CompositorFloatAnimationCurve::create();
+    std::unique_ptr<CompositorFloatAnimationCurve> curve = CompositorFloatAnimationCurve::create();
     curve->addLinearKeyframe(CompositorFloatKeyframe(0, 2));
     EXPECT_FLOAT_EQ(2, curve->getValue(-1));
     EXPECT_FLOAT_EQ(2, curve->getValue(0));
@@ -30,7 +30,7 @@
 // Tests that a float animation with two keyframes works as expected.
 TEST(WebFloatAnimationCurveTest, TwoFloatKeyframe)
 {
-    OwnPtr<CompositorFloatAnimationCurve> curve = CompositorFloatAnimationCurve::create();
+    std::unique_ptr<CompositorFloatAnimationCurve> curve = CompositorFloatAnimationCurve::create();
     curve->addLinearKeyframe(CompositorFloatKeyframe(0, 2));
     curve->addLinearKeyframe(CompositorFloatKeyframe(1, 4));
     EXPECT_FLOAT_EQ(2, curve->getValue(-1));
@@ -43,7 +43,7 @@
 // Tests that a float animation with three keyframes works as expected.
 TEST(WebFloatAnimationCurveTest, ThreeFloatKeyframe)
 {
-    OwnPtr<CompositorFloatAnimationCurve> curve = CompositorFloatAnimationCurve::create();
+    std::unique_ptr<CompositorFloatAnimationCurve> curve = CompositorFloatAnimationCurve::create();
     curve->addLinearKeyframe(CompositorFloatKeyframe(0, 2));
     curve->addLinearKeyframe(CompositorFloatKeyframe(1, 4));
     curve->addLinearKeyframe(CompositorFloatKeyframe(2, 8));
@@ -59,7 +59,7 @@
 // Tests that a float animation with multiple keys at a given time works sanely.
 TEST(WebFloatAnimationCurveTest, RepeatedFloatKeyTimes)
 {
-    OwnPtr<CompositorFloatAnimationCurve> curve = CompositorFloatAnimationCurve::create();
+    std::unique_ptr<CompositorFloatAnimationCurve> curve = CompositorFloatAnimationCurve::create();
     curve->addLinearKeyframe(CompositorFloatKeyframe(0, 4));
     curve->addLinearKeyframe(CompositorFloatKeyframe(1, 4));
     curve->addLinearKeyframe(CompositorFloatKeyframe(1, 6));
@@ -81,7 +81,7 @@
 // Tests that the keyframes may be added out of order.
 TEST(WebFloatAnimationCurveTest, UnsortedKeyframes)
 {
-    OwnPtr<CompositorFloatAnimationCurve> curve = CompositorFloatAnimationCurve::create();
+    std::unique_ptr<CompositorFloatAnimationCurve> curve = CompositorFloatAnimationCurve::create();
     curve->addLinearKeyframe(CompositorFloatKeyframe(2, 8));
     curve->addLinearKeyframe(CompositorFloatKeyframe(0, 2));
     curve->addLinearKeyframe(CompositorFloatKeyframe(1, 4));
@@ -98,7 +98,7 @@
 // Tests that a cubic bezier timing function works as expected.
 TEST(WebFloatAnimationCurveTest, CubicBezierTimingFunction)
 {
-    OwnPtr<CompositorFloatAnimationCurve> curve = CompositorFloatAnimationCurve::create();
+    std::unique_ptr<CompositorFloatAnimationCurve> curve = CompositorFloatAnimationCurve::create();
     curve->addCubicBezierKeyframe(CompositorFloatKeyframe(0, 0), 0.25, 0, 0.75, 1);
     curve->addLinearKeyframe(CompositorFloatKeyframe(1, 1));
 
@@ -114,7 +114,7 @@
 // Tests that an ease timing function works as expected.
 TEST(WebFloatAnimationCurveTest, EaseTimingFunction)
 {
-    OwnPtr<CompositorFloatAnimationCurve> curve = CompositorFloatAnimationCurve::create();
+    std::unique_ptr<CompositorFloatAnimationCurve> curve = CompositorFloatAnimationCurve::create();
     curve->addCubicBezierKeyframe(CompositorFloatKeyframe(0, 0), CubicBezierTimingFunction::EaseType::EASE);
     curve->addLinearKeyframe(CompositorFloatKeyframe(1, 1));
 
@@ -129,7 +129,7 @@
 // Tests using a linear timing function.
 TEST(WebFloatAnimationCurveTest, LinearTimingFunction)
 {
-    OwnPtr<CompositorFloatAnimationCurve> curve = CompositorFloatAnimationCurve::create();
+    std::unique_ptr<CompositorFloatAnimationCurve> curve = CompositorFloatAnimationCurve::create();
     curve->addLinearKeyframe(CompositorFloatKeyframe(0, 0));
     curve->addLinearKeyframe(CompositorFloatKeyframe(1, 1));
 
@@ -142,7 +142,7 @@
 // Tests that an ease in timing function works as expected.
 TEST(WebFloatAnimationCurveTest, EaseInTimingFunction)
 {
-    OwnPtr<CompositorFloatAnimationCurve> curve = CompositorFloatAnimationCurve::create();
+    std::unique_ptr<CompositorFloatAnimationCurve> curve = CompositorFloatAnimationCurve::create();
     curve->addCubicBezierKeyframe(CompositorFloatKeyframe(0, 0), CubicBezierTimingFunction::EaseType::EASE_IN);
     curve->addLinearKeyframe(CompositorFloatKeyframe(1, 1));
 
@@ -157,7 +157,7 @@
 // Tests that an ease in timing function works as expected.
 TEST(WebFloatAnimationCurveTest, EaseOutTimingFunction)
 {
-    OwnPtr<CompositorFloatAnimationCurve> curve = CompositorFloatAnimationCurve::create();
+    std::unique_ptr<CompositorFloatAnimationCurve> curve = CompositorFloatAnimationCurve::create();
     curve->addCubicBezierKeyframe(CompositorFloatKeyframe(0, 0), CubicBezierTimingFunction::EaseType::EASE_OUT);
     curve->addLinearKeyframe(CompositorFloatKeyframe(1, 1));
 
@@ -172,7 +172,7 @@
 // Tests that an ease in timing function works as expected.
 TEST(WebFloatAnimationCurveTest, EaseInOutTimingFunction)
 {
-    OwnPtr<CompositorFloatAnimationCurve> curve = CompositorFloatAnimationCurve::create();
+    std::unique_ptr<CompositorFloatAnimationCurve> curve = CompositorFloatAnimationCurve::create();
     curve->addCubicBezierKeyframe(CompositorFloatKeyframe(0, 0), CubicBezierTimingFunction::EaseType::EASE_IN_OUT);
     curve->addLinearKeyframe(CompositorFloatKeyframe(1, 1));
 
@@ -187,7 +187,7 @@
 // Tests that an ease in timing function works as expected.
 TEST(WebFloatAnimationCurveTest, CustomBezierTimingFunction)
 {
-    OwnPtr<CompositorFloatAnimationCurve> curve = CompositorFloatAnimationCurve::create();
+    std::unique_ptr<CompositorFloatAnimationCurve> curve = CompositorFloatAnimationCurve::create();
     double x1 = 0.3;
     double y1 = 0.2;
     double x2 = 0.8;
@@ -206,7 +206,7 @@
 // Tests that the default timing function is indeed ease.
 TEST(WebFloatAnimationCurveTest, DefaultTimingFunction)
 {
-    OwnPtr<CompositorFloatAnimationCurve> curve = CompositorFloatAnimationCurve::create();
+    std::unique_ptr<CompositorFloatAnimationCurve> curve = CompositorFloatAnimationCurve::create();
     curve->addCubicBezierKeyframe(CompositorFloatKeyframe(0, 0), CubicBezierTimingFunction::EaseType::EASE);
     curve->addLinearKeyframe(CompositorFloatKeyframe(1, 1));
 
diff --git a/third_party/WebKit/Source/platform/animation/CompositorScrollOffsetAnimationCurve.h b/third_party/WebKit/Source/platform/animation/CompositorScrollOffsetAnimationCurve.h
index af799e3c..fc6a25d77 100644
--- a/third_party/WebKit/Source/platform/animation/CompositorScrollOffsetAnimationCurve.h
+++ b/third_party/WebKit/Source/platform/animation/CompositorScrollOffsetAnimationCurve.h
@@ -9,7 +9,8 @@
 #include "platform/animation/CompositorAnimationCurve.h"
 #include "platform/geometry/FloatPoint.h"
 #include "wtf/Noncopyable.h"
-#include "wtf/PassOwnPtr.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace cc {
 class ScrollOffsetAnimationCurve;
@@ -26,13 +27,13 @@
         ScrollDurationInverseDelta
     };
 
-    static PassOwnPtr<CompositorScrollOffsetAnimationCurve> create(FloatPoint targetValue, CompositorScrollOffsetAnimationCurve::ScrollDurationBehavior durationBehavior)
+    static std::unique_ptr<CompositorScrollOffsetAnimationCurve> create(FloatPoint targetValue, CompositorScrollOffsetAnimationCurve::ScrollDurationBehavior durationBehavior)
     {
-        return adoptPtr(new CompositorScrollOffsetAnimationCurve(targetValue, durationBehavior));
+        return wrapUnique(new CompositorScrollOffsetAnimationCurve(targetValue, durationBehavior));
     }
-    static PassOwnPtr<CompositorScrollOffsetAnimationCurve> create(cc::ScrollOffsetAnimationCurve* curve)
+    static std::unique_ptr<CompositorScrollOffsetAnimationCurve> create(cc::ScrollOffsetAnimationCurve* curve)
     {
-        return adoptPtr(new CompositorScrollOffsetAnimationCurve(curve));
+        return wrapUnique(new CompositorScrollOffsetAnimationCurve(curve));
     }
 
     ~CompositorScrollOffsetAnimationCurve() override;
diff --git a/third_party/WebKit/Source/platform/animation/CompositorTransformAnimationCurve.h b/third_party/WebKit/Source/platform/animation/CompositorTransformAnimationCurve.h
index fcab856..1b882e3 100644
--- a/third_party/WebKit/Source/platform/animation/CompositorTransformAnimationCurve.h
+++ b/third_party/WebKit/Source/platform/animation/CompositorTransformAnimationCurve.h
@@ -10,7 +10,8 @@
 #include "platform/animation/CompositorTransformKeyframe.h"
 #include "platform/animation/TimingFunction.h"
 #include "wtf/Noncopyable.h"
-#include "wtf/PassOwnPtr.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace cc {
 class KeyframedTransformAnimationCurve;
@@ -26,9 +27,9 @@
 class PLATFORM_EXPORT CompositorTransformAnimationCurve : public CompositorAnimationCurve {
     WTF_MAKE_NONCOPYABLE(CompositorTransformAnimationCurve);
 public:
-    static PassOwnPtr<CompositorTransformAnimationCurve> create()
+    static std::unique_ptr<CompositorTransformAnimationCurve> create()
     {
-        return adoptPtr(new CompositorTransformAnimationCurve());
+        return wrapUnique(new CompositorTransformAnimationCurve());
     }
 
     ~CompositorTransformAnimationCurve() override;
diff --git a/third_party/WebKit/Source/platform/animation/CompositorTransformKeyframe.cpp b/third_party/WebKit/Source/platform/animation/CompositorTransformKeyframe.cpp
index dc7e32a..0bcc1d2 100644
--- a/third_party/WebKit/Source/platform/animation/CompositorTransformKeyframe.cpp
+++ b/third_party/WebKit/Source/platform/animation/CompositorTransformKeyframe.cpp
@@ -4,9 +4,11 @@
 
 #include "platform/animation/CompositorTransformKeyframe.h"
 
+#include <memory>
+
 namespace blink {
 
-CompositorTransformKeyframe::CompositorTransformKeyframe(double time, PassOwnPtr<CompositorTransformOperations> value)
+CompositorTransformKeyframe::CompositorTransformKeyframe(double time, std::unique_ptr<CompositorTransformOperations> value)
     : m_time(time)
     , m_value(std::move(value))
 {
diff --git a/third_party/WebKit/Source/platform/animation/CompositorTransformKeyframe.h b/third_party/WebKit/Source/platform/animation/CompositorTransformKeyframe.h
index 4188a38f..1eeecd6 100644
--- a/third_party/WebKit/Source/platform/animation/CompositorTransformKeyframe.h
+++ b/third_party/WebKit/Source/platform/animation/CompositorTransformKeyframe.h
@@ -8,15 +8,14 @@
 #include "platform/PlatformExport.h"
 #include "platform/animation/CompositorTransformOperations.h"
 #include "wtf/Noncopyable.h"
-#include "wtf/OwnPtr.h"
-#include "wtf/PassOwnPtr.h"
+#include <memory>
 
 namespace blink {
 
 class PLATFORM_EXPORT CompositorTransformKeyframe {
     WTF_MAKE_NONCOPYABLE(CompositorTransformKeyframe);
 public:
-    CompositorTransformKeyframe(double time, PassOwnPtr<CompositorTransformOperations> value);
+    CompositorTransformKeyframe(double time, std::unique_ptr<CompositorTransformOperations> value);
     ~CompositorTransformKeyframe();
 
     double time() const;
@@ -24,7 +23,7 @@
 
 private:
     double m_time;
-    OwnPtr<CompositorTransformOperations> m_value;
+    std::unique_ptr<CompositorTransformOperations> m_value;
 };
 
 } // namespace blink
diff --git a/third_party/WebKit/Source/platform/animation/CompositorTransformOperations.h b/third_party/WebKit/Source/platform/animation/CompositorTransformOperations.h
index 418a3a9..6bf5254 100644
--- a/third_party/WebKit/Source/platform/animation/CompositorTransformOperations.h
+++ b/third_party/WebKit/Source/platform/animation/CompositorTransformOperations.h
@@ -8,7 +8,8 @@
 #include "cc/animation/transform_operations.h"
 #include "platform/PlatformExport.h"
 #include "wtf/Noncopyable.h"
-#include "wtf/PassOwnPtr.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 class SkMatrix44;
 
@@ -17,9 +18,9 @@
 class PLATFORM_EXPORT CompositorTransformOperations {
     WTF_MAKE_NONCOPYABLE(CompositorTransformOperations);
 public:
-    static PassOwnPtr<CompositorTransformOperations> create()
+    static std::unique_ptr<CompositorTransformOperations> create()
     {
-        return adoptPtr(new CompositorTransformOperations());
+        return wrapUnique(new CompositorTransformOperations());
     }
 
     const cc::TransformOperations& asTransformOperations() const;
diff --git a/third_party/WebKit/Source/platform/animation/TimingFunction.h b/third_party/WebKit/Source/platform/animation/TimingFunction.h
index caab057..fb84a1d 100644
--- a/third_party/WebKit/Source/platform/animation/TimingFunction.h
+++ b/third_party/WebKit/Source/platform/animation/TimingFunction.h
@@ -30,8 +30,6 @@
 #include "platform/heap/Handle.h"
 #include "platform/heap/Heap.h"
 #include "ui/gfx/geometry/cubic_bezier.h"
-#include "wtf/OwnPtr.h"
-#include "wtf/PassOwnPtr.h"
 #include "wtf/PassRefPtr.h"
 #include "wtf/RefCounted.h"
 #include "wtf/StdLibExtras.h"
diff --git a/third_party/WebKit/Source/platform/audio/AudioBus.cpp b/third_party/WebKit/Source/platform/audio/AudioBus.cpp
index 2c8d4f4..91483ad 100644
--- a/third_party/WebKit/Source/platform/audio/AudioBus.cpp
+++ b/third_party/WebKit/Source/platform/audio/AudioBus.cpp
@@ -33,10 +33,11 @@
 #include "platform/audio/VectorMath.h"
 #include "public/platform/Platform.h"
 #include "public/platform/WebAudioBus.h"
-#include "wtf/OwnPtr.h"
+#include "wtf/PtrUtil.h"
+#include <algorithm>
 #include <assert.h>
 #include <math.h>
-#include <algorithm>
+#include <memory>
 
 namespace blink {
 
@@ -62,7 +63,7 @@
     m_channels.reserveInitialCapacity(numberOfChannels);
 
     for (unsigned i = 0; i < numberOfChannels; ++i) {
-        PassOwnPtr<AudioChannel> channel = allocate ? adoptPtr(new AudioChannel(length)) : adoptPtr(new AudioChannel(0, length));
+        std::unique_ptr<AudioChannel> channel = allocate ? wrapUnique(new AudioChannel(length)) : wrapUnique(new AudioChannel(0, length));
         m_channels.append(std::move(channel));
     }
 
@@ -489,7 +490,7 @@
 
     if (framesToDezipper) {
         if (!m_dezipperGainValues.get() || m_dezipperGainValues->size() < framesToDezipper)
-            m_dezipperGainValues = adoptPtr(new AudioFloatArray(framesToDezipper));
+            m_dezipperGainValues = wrapUnique(new AudioFloatArray(framesToDezipper));
 
         float* gainValues = m_dezipperGainValues->data();
         for (unsigned i = 0; i < framesToDezipper; ++i) {
diff --git a/third_party/WebKit/Source/platform/audio/AudioBus.h b/third_party/WebKit/Source/platform/audio/AudioBus.h
index eb20236..6f661961 100644
--- a/third_party/WebKit/Source/platform/audio/AudioBus.h
+++ b/third_party/WebKit/Source/platform/audio/AudioBus.h
@@ -31,9 +31,9 @@
 
 #include "platform/audio/AudioChannel.h"
 #include "wtf/Noncopyable.h"
-#include "wtf/PassOwnPtr.h"
 #include "wtf/ThreadSafeRefCounted.h"
 #include "wtf/Vector.h"
+#include <memory>
 
 namespace blink {
 
@@ -159,10 +159,10 @@
     void sumFromByDownMixing(const AudioBus&);
 
     size_t m_length;
-    Vector<OwnPtr<AudioChannel>> m_channels;
+    Vector<std::unique_ptr<AudioChannel>> m_channels;
     int m_layout;
     float m_busGain;
-    OwnPtr<AudioFloatArray> m_dezipperGainValues;
+    std::unique_ptr<AudioFloatArray> m_dezipperGainValues;
     bool m_isFirstTime;
     float m_sampleRate; // 0.0 if unknown or N/A
 };
diff --git a/third_party/WebKit/Source/platform/audio/AudioChannel.cpp b/third_party/WebKit/Source/platform/audio/AudioChannel.cpp
index 9c8edc63..d6c089f 100644
--- a/third_party/WebKit/Source/platform/audio/AudioChannel.cpp
+++ b/third_party/WebKit/Source/platform/audio/AudioChannel.cpp
@@ -28,7 +28,6 @@
 
 #include "platform/audio/AudioChannel.h"
 #include "platform/audio/VectorMath.h"
-#include "wtf/OwnPtr.h"
 #include <algorithm>
 #include <math.h>
 
diff --git a/third_party/WebKit/Source/platform/audio/AudioChannel.h b/third_party/WebKit/Source/platform/audio/AudioChannel.h
index f156911..472227b 100644
--- a/third_party/WebKit/Source/platform/audio/AudioChannel.h
+++ b/third_party/WebKit/Source/platform/audio/AudioChannel.h
@@ -32,7 +32,8 @@
 #include "platform/PlatformExport.h"
 #include "platform/audio/AudioArray.h"
 #include "wtf/Allocator.h"
-#include "wtf/PassOwnPtr.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
@@ -58,7 +59,7 @@
         , m_rawPointer(nullptr)
         , m_silent(true)
     {
-        m_memBuffer = adoptPtr(new AudioFloatArray(length));
+        m_memBuffer = wrapUnique(new AudioFloatArray(length));
     }
 
     // A "blank" audio channel -- must call set() before it's useful...
@@ -133,7 +134,7 @@
     size_t m_length;
 
     float* m_rawPointer;
-    OwnPtr<AudioFloatArray> m_memBuffer;
+    std::unique_ptr<AudioFloatArray> m_memBuffer;
     bool m_silent;
 };
 
diff --git a/third_party/WebKit/Source/platform/audio/AudioDSPKernelProcessor.h b/third_party/WebKit/Source/platform/audio/AudioDSPKernelProcessor.h
index ac02a9c0..abc1e20 100644
--- a/third_party/WebKit/Source/platform/audio/AudioDSPKernelProcessor.h
+++ b/third_party/WebKit/Source/platform/audio/AudioDSPKernelProcessor.h
@@ -33,10 +33,9 @@
 
 #include "platform/audio/AudioBus.h"
 #include "platform/audio/AudioProcessor.h"
-#include "wtf/OwnPtr.h"
-#include "wtf/PassOwnPtr.h"
 #include "wtf/ThreadingPrimitives.h"
 #include "wtf/Vector.h"
+#include <memory>
 
 namespace blink {
 
@@ -55,7 +54,7 @@
 
     // Subclasses create the appropriate type of processing kernel here.
     // We'll call this to create a kernel for each channel.
-    virtual PassOwnPtr<AudioDSPKernel> createKernel() = 0;
+    virtual std::unique_ptr<AudioDSPKernel> createKernel() = 0;
 
     // AudioProcessor methods
     void initialize() override;
@@ -69,7 +68,7 @@
     double latencyTime() const override;
 
 protected:
-    Vector<OwnPtr<AudioDSPKernel>> m_kernels;
+    Vector<std::unique_ptr<AudioDSPKernel>> m_kernels;
     mutable Mutex m_processLock;
     bool m_hasJustReset;
 };
diff --git a/third_party/WebKit/Source/platform/audio/AudioDestination.cpp b/third_party/WebKit/Source/platform/audio/AudioDestination.cpp
index 53c329f..145baa8 100644
--- a/third_party/WebKit/Source/platform/audio/AudioDestination.cpp
+++ b/third_party/WebKit/Source/platform/audio/AudioDestination.cpp
@@ -33,6 +33,8 @@
 #include "platform/audio/AudioPullFIFO.h"
 #include "public/platform/Platform.h"
 #include "public/platform/WebSecurityOrigin.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
@@ -43,9 +45,9 @@
 const size_t fifoSize = 8192;
 
 // Factory method: Chromium-implementation
-PassOwnPtr<AudioDestination> AudioDestination::create(AudioIOCallback& callback, const String& inputDeviceId, unsigned numberOfInputChannels, unsigned numberOfOutputChannels, float sampleRate, const PassRefPtr<SecurityOrigin>& securityOrigin)
+std::unique_ptr<AudioDestination> AudioDestination::create(AudioIOCallback& callback, const String& inputDeviceId, unsigned numberOfInputChannels, unsigned numberOfOutputChannels, float sampleRate, const PassRefPtr<SecurityOrigin>& securityOrigin)
 {
-    return adoptPtr(new AudioDestination(callback, inputDeviceId, numberOfInputChannels, numberOfOutputChannels, sampleRate, securityOrigin));
+    return wrapUnique(new AudioDestination(callback, inputDeviceId, numberOfInputChannels, numberOfOutputChannels, sampleRate, securityOrigin));
 }
 
 AudioDestination::AudioDestination(AudioIOCallback& callback, const String& inputDeviceId, unsigned numberOfInputChannels, unsigned numberOfOutputChannels, float sampleRate, const PassRefPtr<SecurityOrigin>& securityOrigin)
@@ -89,7 +91,7 @@
     if (m_callbackBufferSize + renderBufferSize > fifoSize)
         return;
 
-    m_audioDevice = adoptPtr(Platform::current()->createAudioDevice(m_callbackBufferSize, numberOfInputChannels, numberOfOutputChannels, sampleRate, this, inputDeviceId, securityOrigin));
+    m_audioDevice = wrapUnique(Platform::current()->createAudioDevice(m_callbackBufferSize, numberOfInputChannels, numberOfOutputChannels, sampleRate, this, inputDeviceId, securityOrigin));
     ASSERT(m_audioDevice);
 
     // Record the sizes if we successfully created an output device.
@@ -101,10 +103,10 @@
     // contains enough data, the data will be provided directly.
     // Otherwise, the FIFO will call the provider enough times to
     // satisfy the request for data.
-    m_fifo = adoptPtr(new AudioPullFIFO(*this, numberOfOutputChannels, fifoSize, renderBufferSize));
+    m_fifo = wrapUnique(new AudioPullFIFO(*this, numberOfOutputChannels, fifoSize, renderBufferSize));
 
     // Input buffering.
-    m_inputFifo = adoptPtr(new AudioFIFO(numberOfInputChannels, fifoSize));
+    m_inputFifo = wrapUnique(new AudioFIFO(numberOfInputChannels, fifoSize));
 
     // If the callback size does not match the render size, then we need to buffer some
     // extra silence for the input. Otherwise, we can over-consume the input FIFO.
diff --git a/third_party/WebKit/Source/platform/audio/AudioDestination.h b/third_party/WebKit/Source/platform/audio/AudioDestination.h
index 70b4780e..14c8f91 100644
--- a/third_party/WebKit/Source/platform/audio/AudioDestination.h
+++ b/third_party/WebKit/Source/platform/audio/AudioDestination.h
@@ -37,6 +37,7 @@
 #include "wtf/Allocator.h"
 #include "wtf/Noncopyable.h"
 #include "wtf/text/WTFString.h"
+#include <memory>
 
 namespace blink {
 
@@ -55,7 +56,7 @@
 
     // Pass in (numberOfInputChannels > 0) if live/local audio input is desired.
     // Port-specific device identification information for live/local input streams can be passed in the inputDeviceId.
-    static PassOwnPtr<AudioDestination> create(AudioIOCallback&, const String& inputDeviceId, unsigned numberOfInputChannels, unsigned numberOfOutputChannels, float sampleRate, const PassRefPtr<SecurityOrigin>&);
+    static std::unique_ptr<AudioDestination> create(AudioIOCallback&, const String& inputDeviceId, unsigned numberOfInputChannels, unsigned numberOfOutputChannels, float sampleRate, const PassRefPtr<SecurityOrigin>&);
 
     virtual void start();
     virtual void stop();
@@ -86,11 +87,11 @@
     RefPtr<AudioBus> m_renderBus;
     float m_sampleRate;
     bool m_isPlaying;
-    OwnPtr<WebAudioDevice> m_audioDevice;
+    std::unique_ptr<WebAudioDevice> m_audioDevice;
     size_t m_callbackBufferSize;
 
-    OwnPtr<AudioFIFO> m_inputFifo;
-    OwnPtr<AudioPullFIFO> m_fifo;
+    std::unique_ptr<AudioFIFO> m_inputFifo;
+    std::unique_ptr<AudioPullFIFO> m_fifo;
 };
 
 } // namespace blink
diff --git a/third_party/WebKit/Source/platform/audio/AudioResampler.cpp b/third_party/WebKit/Source/platform/audio/AudioResampler.cpp
index 175a5e1..2e6e3d9 100644
--- a/third_party/WebKit/Source/platform/audio/AudioResampler.cpp
+++ b/third_party/WebKit/Source/platform/audio/AudioResampler.cpp
@@ -23,8 +23,9 @@
  */
 
 #include "platform/audio/AudioResampler.h"
-#include <algorithm>
 #include "wtf/MathExtras.h"
+#include "wtf/PtrUtil.h"
+#include <algorithm>
 
 namespace blink {
 
@@ -33,7 +34,7 @@
 AudioResampler::AudioResampler()
     : m_rate(1.0)
 {
-    m_kernels.append(adoptPtr(new AudioResamplerKernel(this)));
+    m_kernels.append(wrapUnique(new AudioResamplerKernel(this)));
     m_sourceBus = AudioBus::create(1, 0, false);
 }
 
@@ -41,7 +42,7 @@
     : m_rate(1.0)
 {
     for (unsigned i = 0; i < numberOfChannels; ++i)
-        m_kernels.append(adoptPtr(new AudioResamplerKernel(this)));
+        m_kernels.append(wrapUnique(new AudioResamplerKernel(this)));
 
     m_sourceBus = AudioBus::create(numberOfChannels, 0, false);
 }
@@ -55,7 +56,7 @@
     // First deal with adding or removing kernels.
     if (numberOfChannels > currentSize) {
         for (unsigned i = currentSize; i < numberOfChannels; ++i)
-            m_kernels.append(adoptPtr(new AudioResamplerKernel(this)));
+            m_kernels.append(wrapUnique(new AudioResamplerKernel(this)));
     } else
         m_kernels.resize(numberOfChannels);
 
diff --git a/third_party/WebKit/Source/platform/audio/AudioResampler.h b/third_party/WebKit/Source/platform/audio/AudioResampler.h
index 5fc4636..1f6298c 100644
--- a/third_party/WebKit/Source/platform/audio/AudioResampler.h
+++ b/third_party/WebKit/Source/platform/audio/AudioResampler.h
@@ -30,8 +30,8 @@
 #include "platform/audio/AudioSourceProvider.h"
 #include "wtf/Allocator.h"
 #include "wtf/Noncopyable.h"
-#include "wtf/OwnPtr.h"
 #include "wtf/Vector.h"
+#include <memory>
 
 namespace blink {
 
@@ -63,7 +63,7 @@
 
 private:
     double m_rate;
-    Vector<OwnPtr<AudioResamplerKernel>> m_kernels;
+    Vector<std::unique_ptr<AudioResamplerKernel>> m_kernels;
     RefPtr<AudioBus> m_sourceBus;
 };
 
diff --git a/third_party/WebKit/Source/platform/audio/DynamicsCompressor.cpp b/third_party/WebKit/Source/platform/audio/DynamicsCompressor.cpp
index 2658a871..163e21bfe 100644
--- a/third_party/WebKit/Source/platform/audio/DynamicsCompressor.cpp
+++ b/third_party/WebKit/Source/platform/audio/DynamicsCompressor.cpp
@@ -26,10 +26,11 @@
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-#include "platform/audio/DynamicsCompressor.h"
 #include "platform/audio/AudioBus.h"
 #include "platform/audio/AudioUtilities.h"
+#include "platform/audio/DynamicsCompressor.h"
 #include "wtf/MathExtras.h"
+#include "wtf/PtrUtil.h"
 
 namespace blink {
 
@@ -195,8 +196,8 @@
 
 void DynamicsCompressor::setNumberOfChannels(unsigned numberOfChannels)
 {
-    m_sourceChannels = adoptArrayPtr(new const float* [numberOfChannels]);
-    m_destinationChannels = adoptArrayPtr(new float* [numberOfChannels]);
+    m_sourceChannels = wrapArrayUnique(new const float* [numberOfChannels]);
+    m_destinationChannels = wrapArrayUnique(new float* [numberOfChannels]);
 
     m_compressor.setNumberOfChannels(numberOfChannels);
     m_numberOfChannels = numberOfChannels;
diff --git a/third_party/WebKit/Source/platform/audio/DynamicsCompressor.h b/third_party/WebKit/Source/platform/audio/DynamicsCompressor.h
index a27ec22..b799cad 100644
--- a/third_party/WebKit/Source/platform/audio/DynamicsCompressor.h
+++ b/third_party/WebKit/Source/platform/audio/DynamicsCompressor.h
@@ -34,7 +34,7 @@
 #include "platform/audio/ZeroPole.h"
 #include "wtf/Allocator.h"
 #include "wtf/Noncopyable.h"
-#include "wtf/OwnPtr.h"
+#include <memory>
 
 namespace blink {
 
@@ -98,8 +98,8 @@
     float m_lastAnchor;
     float m_lastFilterStageGain;
 
-    OwnPtr<const float*[]> m_sourceChannels;
-    OwnPtr<float*[]> m_destinationChannels;
+    std::unique_ptr<const float*[]> m_sourceChannels;
+    std::unique_ptr<float*[]> m_destinationChannels;
 
     // The core compressor.
     DynamicsCompressorKernel m_compressor;
diff --git a/third_party/WebKit/Source/platform/audio/DynamicsCompressorKernel.cpp b/third_party/WebKit/Source/platform/audio/DynamicsCompressorKernel.cpp
index 81fab59..cdb8282 100644
--- a/third_party/WebKit/Source/platform/audio/DynamicsCompressorKernel.cpp
+++ b/third_party/WebKit/Source/platform/audio/DynamicsCompressorKernel.cpp
@@ -26,10 +26,11 @@
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-#include "platform/audio/DynamicsCompressorKernel.h"
 #include "platform/audio/AudioUtilities.h"
 #include "platform/audio/DenormalDisabler.h"
+#include "platform/audio/DynamicsCompressorKernel.h"
 #include "wtf/MathExtras.h"
+#include "wtf/PtrUtil.h"
 #include <algorithm>
 #include <cmath>
 
@@ -72,7 +73,7 @@
 
     m_preDelayBuffers.clear();
     for (unsigned i = 0; i < numberOfChannels; ++i)
-        m_preDelayBuffers.append(adoptPtr(new AudioFloatArray(MaxPreDelayFrames)));
+        m_preDelayBuffers.append(wrapUnique(new AudioFloatArray(MaxPreDelayFrames)));
 }
 
 void DynamicsCompressorKernel::setPreDelayTime(float preDelayTime)
diff --git a/third_party/WebKit/Source/platform/audio/DynamicsCompressorKernel.h b/third_party/WebKit/Source/platform/audio/DynamicsCompressorKernel.h
index e743ede..32da625 100644
--- a/third_party/WebKit/Source/platform/audio/DynamicsCompressorKernel.h
+++ b/third_party/WebKit/Source/platform/audio/DynamicsCompressorKernel.h
@@ -33,8 +33,7 @@
 #include "platform/audio/AudioArray.h"
 #include "wtf/Allocator.h"
 #include "wtf/Noncopyable.h"
-#include "wtf/OwnPtr.h"
-#include "wtf/PassOwnPtr.h"
+#include <memory>
 
 namespace blink {
 
@@ -92,7 +91,7 @@
     unsigned m_lastPreDelayFrames;
     void setPreDelayTime(float);
 
-    Vector<OwnPtr<AudioFloatArray>> m_preDelayBuffers;
+    Vector<std::unique_ptr<AudioFloatArray>> m_preDelayBuffers;
     int m_preDelayReadIndex;
     int m_preDelayWriteIndex;
 
diff --git a/third_party/WebKit/Source/platform/audio/FFTFrame.cpp b/third_party/WebKit/Source/platform/audio/FFTFrame.cpp
index 9d70364c..9e167e8 100644
--- a/third_party/WebKit/Source/platform/audio/FFTFrame.cpp
+++ b/third_party/WebKit/Source/platform/audio/FFTFrame.cpp
@@ -30,8 +30,9 @@
 #include "platform/audio/VectorMath.h"
 #include "platform/Logging.h"
 #include "wtf/MathExtras.h"
-#include "wtf/OwnPtr.h"
+#include "wtf/PtrUtil.h"
 #include <complex>
+#include <memory>
 
 #ifndef NDEBUG
 #include <stdio.h>
@@ -49,9 +50,9 @@
     doFFT(paddedResponse.data());
 }
 
-PassOwnPtr<FFTFrame> FFTFrame::createInterpolatedFrame(const FFTFrame& frame1, const FFTFrame& frame2, double x)
+std::unique_ptr<FFTFrame> FFTFrame::createInterpolatedFrame(const FFTFrame& frame1, const FFTFrame& frame2, double x)
 {
-    OwnPtr<FFTFrame> newFrame = adoptPtr(new FFTFrame(frame1.fftSize()));
+    std::unique_ptr<FFTFrame> newFrame = wrapUnique(new FFTFrame(frame1.fftSize()));
 
     newFrame->interpolateFrequencyComponents(frame1, frame2, x);
 
diff --git a/third_party/WebKit/Source/platform/audio/FFTFrame.h b/third_party/WebKit/Source/platform/audio/FFTFrame.h
index 2450084..fccda3b 100644
--- a/third_party/WebKit/Source/platform/audio/FFTFrame.h
+++ b/third_party/WebKit/Source/platform/audio/FFTFrame.h
@@ -33,8 +33,8 @@
 #include "platform/audio/AudioArray.h"
 #include "wtf/Allocator.h"
 #include "wtf/Forward.h"
-#include "wtf/PassOwnPtr.h"
 #include "wtf/Threading.h"
+#include <memory>
 
 #if OS(MACOSX)
 #include <Accelerate/Accelerate.h>
@@ -74,7 +74,7 @@
     // The remaining public methods have cross-platform implementations:
 
     // Interpolates from frame1 -> frame2 as x goes from 0.0 -> 1.0
-    static PassOwnPtr<FFTFrame> createInterpolatedFrame(const FFTFrame& frame1, const FFTFrame& frame2, double x);
+    static std::unique_ptr<FFTFrame> createInterpolatedFrame(const FFTFrame& frame1, const FFTFrame& frame2, double x);
     void doPaddedFFT(const float* data, size_t dataSize); // zero-padding with dataSize <= fftSize
     double extractAverageGroupDelay();
     void addConstantGroupDelay(double sampleFrameDelay);
diff --git a/third_party/WebKit/Source/platform/audio/HRTFDatabase.cpp b/third_party/WebKit/Source/platform/audio/HRTFDatabase.cpp
index 7b88489..6b79e7f 100644
--- a/third_party/WebKit/Source/platform/audio/HRTFDatabase.cpp
+++ b/third_party/WebKit/Source/platform/audio/HRTFDatabase.cpp
@@ -29,6 +29,8 @@
 #include "platform/audio/HRTFDatabase.h"
 
 #include "wtf/MathExtras.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
@@ -39,9 +41,9 @@
 const unsigned HRTFDatabase::InterpolationFactor = 1;
 const unsigned HRTFDatabase::NumberOfTotalElevations = NumberOfRawElevations * InterpolationFactor;
 
-PassOwnPtr<HRTFDatabase> HRTFDatabase::create(float sampleRate)
+std::unique_ptr<HRTFDatabase> HRTFDatabase::create(float sampleRate)
 {
-    return adoptPtr(new HRTFDatabase(sampleRate));
+    return wrapUnique(new HRTFDatabase(sampleRate));
 }
 
 HRTFDatabase::HRTFDatabase(float sampleRate)
@@ -50,7 +52,7 @@
 {
     unsigned elevationIndex = 0;
     for (int elevation = MinElevation; elevation <= MaxElevation; elevation += RawElevationAngleSpacing) {
-        OwnPtr<HRTFElevation> hrtfElevation = HRTFElevation::createForSubject("Composite", elevation, sampleRate);
+        std::unique_ptr<HRTFElevation> hrtfElevation = HRTFElevation::createForSubject("Composite", elevation, sampleRate);
         ASSERT(hrtfElevation.get());
         if (!hrtfElevation.get())
             return;
diff --git a/third_party/WebKit/Source/platform/audio/HRTFDatabase.h b/third_party/WebKit/Source/platform/audio/HRTFDatabase.h
index 1674f90..81d8ada 100644
--- a/third_party/WebKit/Source/platform/audio/HRTFDatabase.h
+++ b/third_party/WebKit/Source/platform/audio/HRTFDatabase.h
@@ -33,9 +33,9 @@
 #include "wtf/Allocator.h"
 #include "wtf/Forward.h"
 #include "wtf/Noncopyable.h"
-#include "wtf/OwnPtr.h"
 #include "wtf/PassRefPtr.h"
 #include "wtf/Vector.h"
+#include <memory>
 
 namespace blink {
 
@@ -45,7 +45,7 @@
     USING_FAST_MALLOC(HRTFDatabase);
     WTF_MAKE_NONCOPYABLE(HRTFDatabase);
 public:
-    static PassOwnPtr<HRTFDatabase> create(float sampleRate);
+    static std::unique_ptr<HRTFDatabase> create(float sampleRate);
 
     // getKernelsFromAzimuthElevation() returns a left and right ear kernel, and an interpolated left and right frame delay for the given azimuth and elevation.
     // azimuthBlend must be in the range 0 -> 1.
@@ -78,7 +78,7 @@
     // Returns the index for the correct HRTFElevation given the elevation angle.
     static unsigned indexFromElevationAngle(double);
 
-    Vector<OwnPtr<HRTFElevation>> m_elevations;
+    Vector<std::unique_ptr<HRTFElevation>> m_elevations;
     float m_sampleRate;
 };
 
diff --git a/third_party/WebKit/Source/platform/audio/HRTFDatabaseLoader.cpp b/third_party/WebKit/Source/platform/audio/HRTFDatabaseLoader.cpp
index d57b760..6a150874 100644
--- a/third_party/WebKit/Source/platform/audio/HRTFDatabaseLoader.cpp
+++ b/third_party/WebKit/Source/platform/audio/HRTFDatabaseLoader.cpp
@@ -26,12 +26,13 @@
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-#include "platform/audio/HRTFDatabaseLoader.h"
 #include "platform/TaskSynchronizer.h"
 #include "platform/ThreadSafeFunctional.h"
+#include "platform/audio/HRTFDatabaseLoader.h"
 #include "public/platform/Platform.h"
 #include "public/platform/WebTaskRunner.h"
 #include "public/platform/WebTraceLocation.h"
+#include "wtf/PtrUtil.h"
 
 namespace blink {
 
@@ -92,7 +93,7 @@
     MutexLocker locker(m_lock);
     if (!m_hrtfDatabase && !m_thread) {
         // Start the asynchronous database loading process.
-        m_thread = adoptPtr(Platform::current()->createThread("HRTF database loader"));
+        m_thread = wrapUnique(Platform::current()->createThread("HRTF database loader"));
         // TODO(alexclarke): Should this be posted as a loading task?
         m_thread->getWebTaskRunner()->postTask(BLINK_FROM_HERE, threadSafeBind(&HRTFDatabaseLoader::loadTask, AllowCrossThreadAccess(this)));
     }
diff --git a/third_party/WebKit/Source/platform/audio/HRTFDatabaseLoader.h b/third_party/WebKit/Source/platform/audio/HRTFDatabaseLoader.h
index 2b630880..bf8ec64 100644
--- a/third_party/WebKit/Source/platform/audio/HRTFDatabaseLoader.h
+++ b/third_party/WebKit/Source/platform/audio/HRTFDatabaseLoader.h
@@ -34,6 +34,7 @@
 #include "wtf/HashMap.h"
 #include "wtf/RefCounted.h"
 #include "wtf/ThreadingPrimitives.h"
+#include <memory>
 
 namespace blink {
 
@@ -76,9 +77,9 @@
 
     // Holding a m_lock is required when accessing m_hrtfDatabase since we access it from multiple threads.
     Mutex m_lock;
-    OwnPtr<HRTFDatabase> m_hrtfDatabase;
+    std::unique_ptr<HRTFDatabase> m_hrtfDatabase;
 
-    OwnPtr<WebThread> m_thread;
+    std::unique_ptr<WebThread> m_thread;
 
     float m_databaseSampleRate;
 };
diff --git a/third_party/WebKit/Source/platform/audio/HRTFElevation.cpp b/third_party/WebKit/Source/platform/audio/HRTFElevation.cpp
index aa8ca147..c51917d 100644
--- a/third_party/WebKit/Source/platform/audio/HRTFElevation.cpp
+++ b/third_party/WebKit/Source/platform/audio/HRTFElevation.cpp
@@ -26,13 +26,15 @@
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-#include "platform/audio/HRTFElevation.h"
-#include <math.h>
-#include <algorithm>
 #include "platform/audio/AudioBus.h"
+#include "platform/audio/HRTFElevation.h"
 #include "platform/audio/HRTFPanner.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/ThreadingPrimitives.h"
 #include "wtf/text/StringHash.h"
+#include <algorithm>
+#include <math.h>
+#include <memory>
 
 namespace blink {
 
@@ -96,7 +98,7 @@
 }
 #endif
 
-bool HRTFElevation::calculateKernelsForAzimuthElevation(int azimuth, int elevation, float sampleRate, const String& subjectName, OwnPtr<HRTFKernel>& kernelL, OwnPtr<HRTFKernel>& kernelR)
+bool HRTFElevation::calculateKernelsForAzimuthElevation(int azimuth, int elevation, float sampleRate, const String& subjectName, std::unique_ptr<HRTFKernel>& kernelL, std::unique_ptr<HRTFKernel>& kernelR)
 {
     // Valid values for azimuth are 0 -> 345 in 15 degree increments.
     // Valid values for elevation are -45 -> +90 in 15 degree increments.
@@ -219,15 +221,15 @@
     45 //  345
 };
 
-PassOwnPtr<HRTFElevation> HRTFElevation::createForSubject(const String& subjectName, int elevation, float sampleRate)
+std::unique_ptr<HRTFElevation> HRTFElevation::createForSubject(const String& subjectName, int elevation, float sampleRate)
 {
     bool isElevationGood = elevation >= -45 && elevation <= 90 && (elevation / 15) * 15 == elevation;
     ASSERT(isElevationGood);
     if (!isElevationGood)
         return nullptr;
 
-    OwnPtr<HRTFKernelList> kernelListL = adoptPtr(new HRTFKernelList(NumberOfTotalAzimuths));
-    OwnPtr<HRTFKernelList> kernelListR = adoptPtr(new HRTFKernelList(NumberOfTotalAzimuths));
+    std::unique_ptr<HRTFKernelList> kernelListL = wrapUnique(new HRTFKernelList(NumberOfTotalAzimuths));
+    std::unique_ptr<HRTFKernelList> kernelListR = wrapUnique(new HRTFKernelList(NumberOfTotalAzimuths));
 
     // Load convolution kernels from HRTF files.
     int interpolatedIndex = 0;
@@ -256,11 +258,11 @@
         }
     }
 
-    OwnPtr<HRTFElevation> hrtfElevation = adoptPtr(new HRTFElevation(std::move(kernelListL), std::move(kernelListR), elevation, sampleRate));
+    std::unique_ptr<HRTFElevation> hrtfElevation = wrapUnique(new HRTFElevation(std::move(kernelListL), std::move(kernelListR), elevation, sampleRate));
     return hrtfElevation;
 }
 
-PassOwnPtr<HRTFElevation> HRTFElevation::createByInterpolatingSlices(HRTFElevation* hrtfElevation1, HRTFElevation* hrtfElevation2, float x, float sampleRate)
+std::unique_ptr<HRTFElevation> HRTFElevation::createByInterpolatingSlices(HRTFElevation* hrtfElevation1, HRTFElevation* hrtfElevation2, float x, float sampleRate)
 {
     ASSERT(hrtfElevation1 && hrtfElevation2);
     if (!hrtfElevation1 || !hrtfElevation2)
@@ -268,8 +270,8 @@
 
     ASSERT(x >= 0.0 && x < 1.0);
 
-    OwnPtr<HRTFKernelList> kernelListL = adoptPtr(new HRTFKernelList(NumberOfTotalAzimuths));
-    OwnPtr<HRTFKernelList> kernelListR = adoptPtr(new HRTFKernelList(NumberOfTotalAzimuths));
+    std::unique_ptr<HRTFKernelList> kernelListL = wrapUnique(new HRTFKernelList(NumberOfTotalAzimuths));
+    std::unique_ptr<HRTFKernelList> kernelListR = wrapUnique(new HRTFKernelList(NumberOfTotalAzimuths));
 
     HRTFKernelList* kernelListL1 = hrtfElevation1->kernelListL();
     HRTFKernelList* kernelListR1 = hrtfElevation1->kernelListR();
@@ -285,7 +287,7 @@
     // Interpolate elevation angle.
     double angle = (1.0 - x) * hrtfElevation1->elevationAngle() + x * hrtfElevation2->elevationAngle();
 
-    OwnPtr<HRTFElevation> hrtfElevation = adoptPtr(new HRTFElevation(std::move(kernelListL), std::move(kernelListR), static_cast<int>(angle), sampleRate));
+    std::unique_ptr<HRTFElevation> hrtfElevation = wrapUnique(new HRTFElevation(std::move(kernelListL), std::move(kernelListR), static_cast<int>(angle), sampleRate));
     return hrtfElevation;
 }
 
diff --git a/third_party/WebKit/Source/platform/audio/HRTFElevation.h b/third_party/WebKit/Source/platform/audio/HRTFElevation.h
index 988a204..f3786c3d 100644
--- a/third_party/WebKit/Source/platform/audio/HRTFElevation.h
+++ b/third_party/WebKit/Source/platform/audio/HRTFElevation.h
@@ -32,12 +32,11 @@
 #include "platform/audio/HRTFKernel.h"
 #include "wtf/Allocator.h"
 #include "wtf/Noncopyable.h"
-#include "wtf/OwnPtr.h"
-#include "wtf/PassOwnPtr.h"
 #include "wtf/PassRefPtr.h"
 #include "wtf/RefPtr.h"
 #include "wtf/text/CString.h"
 #include "wtf/text/WTFString.h"
+#include <memory>
 
 namespace blink {
 
@@ -51,10 +50,10 @@
     // Normally, there will only be a single HRTF database set, but this API supports the possibility of multiple ones with different names.
     // Interpolated azimuths will be generated based on InterpolationFactor.
     // Valid values for elevation are -45 -> +90 in 15 degree increments.
-    static PassOwnPtr<HRTFElevation> createForSubject(const String& subjectName, int elevation, float sampleRate);
+    static std::unique_ptr<HRTFElevation> createForSubject(const String& subjectName, int elevation, float sampleRate);
 
     // Given two HRTFElevations, and an interpolation factor x: 0 -> 1, returns an interpolated HRTFElevation.
-    static PassOwnPtr<HRTFElevation> createByInterpolatingSlices(HRTFElevation* hrtfElevation1, HRTFElevation* hrtfElevation2, float x, float sampleRate);
+    static std::unique_ptr<HRTFElevation> createByInterpolatingSlices(HRTFElevation* hrtfElevation1, HRTFElevation* hrtfElevation2, float x, float sampleRate);
 
     // Returns the list of left or right ear HRTFKernels for all the azimuths going from 0 to 360 degrees.
     HRTFKernelList* kernelListL() { return m_kernelListL.get(); }
@@ -84,10 +83,10 @@
     // Valid values for azimuth are 0 -> 345 in 15 degree increments.
     // Valid values for elevation are -45 -> +90 in 15 degree increments.
     // Returns true on success.
-    static bool calculateKernelsForAzimuthElevation(int azimuth, int elevation, float sampleRate, const String& subjectName, OwnPtr<HRTFKernel>& kernelL, OwnPtr<HRTFKernel>& kernelR);
+    static bool calculateKernelsForAzimuthElevation(int azimuth, int elevation, float sampleRate, const String& subjectName, std::unique_ptr<HRTFKernel>& kernelL, std::unique_ptr<HRTFKernel>& kernelR);
 
 private:
-    HRTFElevation(PassOwnPtr<HRTFKernelList> kernelListL, PassOwnPtr<HRTFKernelList> kernelListR, int elevation, float sampleRate)
+    HRTFElevation(std::unique_ptr<HRTFKernelList> kernelListL, std::unique_ptr<HRTFKernelList> kernelListR, int elevation, float sampleRate)
         : m_kernelListL(std::move(kernelListL))
         , m_kernelListR(std::move(kernelListR))
         , m_elevationAngle(elevation)
@@ -95,8 +94,8 @@
     {
     }
 
-    OwnPtr<HRTFKernelList> m_kernelListL;
-    OwnPtr<HRTFKernelList> m_kernelListR;
+    std::unique_ptr<HRTFKernelList> m_kernelListL;
+    std::unique_ptr<HRTFKernelList> m_kernelListR;
     double m_elevationAngle;
     float m_sampleRate;
 };
diff --git a/third_party/WebKit/Source/platform/audio/HRTFKernel.cpp b/third_party/WebKit/Source/platform/audio/HRTFKernel.cpp
index 6ef5208b..df21d79 100644
--- a/third_party/WebKit/Source/platform/audio/HRTFKernel.cpp
+++ b/third_party/WebKit/Source/platform/audio/HRTFKernel.cpp
@@ -26,11 +26,13 @@
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-#include "platform/audio/HRTFKernel.h"
-#include "platform/audio/AudioChannel.h"
 #include "platform/FloatConversion.h"
+#include "platform/audio/AudioChannel.h"
+#include "platform/audio/HRTFKernel.h"
 #include "wtf/MathExtras.h"
+#include "wtf/PtrUtil.h"
 #include <algorithm>
+#include <memory>
 
 namespace blink {
 
@@ -86,13 +88,13 @@
         }
     }
 
-    m_fftFrame = adoptPtr(new FFTFrame(fftSize));
+    m_fftFrame = wrapUnique(new FFTFrame(fftSize));
     m_fftFrame->doPaddedFFT(impulseResponse, truncatedResponseLength);
 }
 
-PassOwnPtr<AudioChannel> HRTFKernel::createImpulseResponse()
+std::unique_ptr<AudioChannel> HRTFKernel::createImpulseResponse()
 {
-    OwnPtr<AudioChannel> channel = adoptPtr(new AudioChannel(fftSize()));
+    std::unique_ptr<AudioChannel> channel = wrapUnique(new AudioChannel(fftSize()));
     FFTFrame fftFrame(*m_fftFrame);
 
     // Add leading delay back in.
@@ -103,7 +105,7 @@
 }
 
 // Interpolates two kernels with x: 0 -> 1 and returns the result.
-PassOwnPtr<HRTFKernel> HRTFKernel::createInterpolatedKernel(HRTFKernel* kernel1, HRTFKernel* kernel2, float x)
+std::unique_ptr<HRTFKernel> HRTFKernel::createInterpolatedKernel(HRTFKernel* kernel1, HRTFKernel* kernel2, float x)
 {
     ASSERT(kernel1 && kernel2);
     if (!kernel1 || !kernel2)
@@ -120,7 +122,7 @@
 
     float frameDelay = (1 - x) * kernel1->frameDelay() + x * kernel2->frameDelay();
 
-    OwnPtr<FFTFrame> interpolatedFrame = FFTFrame::createInterpolatedFrame(*kernel1->fftFrame(), *kernel2->fftFrame(), x);
+    std::unique_ptr<FFTFrame> interpolatedFrame = FFTFrame::createInterpolatedFrame(*kernel1->fftFrame(), *kernel2->fftFrame(), x);
     return HRTFKernel::create(std::move(interpolatedFrame), frameDelay, sampleRate1);
 }
 
diff --git a/third_party/WebKit/Source/platform/audio/HRTFKernel.h b/third_party/WebKit/Source/platform/audio/HRTFKernel.h
index 1de613d..d1e9f44 100644
--- a/third_party/WebKit/Source/platform/audio/HRTFKernel.h
+++ b/third_party/WebKit/Source/platform/audio/HRTFKernel.h
@@ -32,9 +32,9 @@
 #include "platform/audio/FFTFrame.h"
 #include "wtf/Allocator.h"
 #include "wtf/Noncopyable.h"
-#include "wtf/OwnPtr.h"
-#include "wtf/PassOwnPtr.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/Vector.h"
+#include <memory>
 
 namespace blink {
 
@@ -52,18 +52,18 @@
 public:
     // Note: this is destructive on the passed in AudioChannel.
     // The length of channel must be a power of two.
-    static PassOwnPtr<HRTFKernel> create(AudioChannel* channel, size_t fftSize, float sampleRate)
+    static std::unique_ptr<HRTFKernel> create(AudioChannel* channel, size_t fftSize, float sampleRate)
     {
-        return adoptPtr(new HRTFKernel(channel, fftSize, sampleRate));
+        return wrapUnique(new HRTFKernel(channel, fftSize, sampleRate));
     }
 
-    static PassOwnPtr<HRTFKernel> create(PassOwnPtr<FFTFrame> fftFrame, float frameDelay, float sampleRate)
+    static std::unique_ptr<HRTFKernel> create(std::unique_ptr<FFTFrame> fftFrame, float frameDelay, float sampleRate)
     {
-        return adoptPtr(new HRTFKernel(std::move(fftFrame), frameDelay, sampleRate));
+        return wrapUnique(new HRTFKernel(std::move(fftFrame), frameDelay, sampleRate));
     }
 
     // Given two HRTFKernels, and an interpolation factor x: 0 -> 1, returns an interpolated HRTFKernel.
-    static PassOwnPtr<HRTFKernel> createInterpolatedKernel(HRTFKernel* kernel1, HRTFKernel* kernel2, float x);
+    static std::unique_ptr<HRTFKernel> createInterpolatedKernel(HRTFKernel* kernel1, HRTFKernel* kernel2, float x);
 
     FFTFrame* fftFrame() { return m_fftFrame.get(); }
 
@@ -74,25 +74,25 @@
     double nyquist() const { return 0.5 * sampleRate(); }
 
     // Converts back into impulse-response form.
-    PassOwnPtr<AudioChannel> createImpulseResponse();
+    std::unique_ptr<AudioChannel> createImpulseResponse();
 
 private:
     // Note: this is destructive on the passed in AudioChannel.
     HRTFKernel(AudioChannel*, size_t fftSize, float sampleRate);
 
-    HRTFKernel(PassOwnPtr<FFTFrame> fftFrame, float frameDelay, float sampleRate)
+    HRTFKernel(std::unique_ptr<FFTFrame> fftFrame, float frameDelay, float sampleRate)
         : m_fftFrame(std::move(fftFrame))
         , m_frameDelay(frameDelay)
         , m_sampleRate(sampleRate)
     {
     }
 
-    OwnPtr<FFTFrame> m_fftFrame;
+    std::unique_ptr<FFTFrame> m_fftFrame;
     float m_frameDelay;
     float m_sampleRate;
 };
 
-typedef Vector<OwnPtr<HRTFKernel>> HRTFKernelList;
+typedef Vector<std::unique_ptr<HRTFKernel>> HRTFKernelList;
 
 } // namespace blink
 
diff --git a/third_party/WebKit/Source/platform/audio/MultiChannelResampler.cpp b/third_party/WebKit/Source/platform/audio/MultiChannelResampler.cpp
index e8b7168e..af2e8a24 100644
--- a/third_party/WebKit/Source/platform/audio/MultiChannelResampler.cpp
+++ b/third_party/WebKit/Source/platform/audio/MultiChannelResampler.cpp
@@ -26,8 +26,9 @@
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-#include "platform/audio/MultiChannelResampler.h"
 #include "platform/audio/AudioBus.h"
+#include "platform/audio/MultiChannelResampler.h"
+#include "wtf/PtrUtil.h"
 
 namespace blink {
 
@@ -92,7 +93,7 @@
 {
     // Create each channel's resampler.
     for (unsigned channelIndex = 0; channelIndex < numberOfChannels; ++channelIndex)
-        m_kernels.append(adoptPtr(new SincResampler(scaleFactor)));
+        m_kernels.append(wrapUnique(new SincResampler(scaleFactor)));
 }
 
 void MultiChannelResampler::process(AudioSourceProvider* provider, AudioBus* destination, size_t framesToProcess)
diff --git a/third_party/WebKit/Source/platform/audio/MultiChannelResampler.h b/third_party/WebKit/Source/platform/audio/MultiChannelResampler.h
index 2888e08..33f02b2 100644
--- a/third_party/WebKit/Source/platform/audio/MultiChannelResampler.h
+++ b/third_party/WebKit/Source/platform/audio/MultiChannelResampler.h
@@ -32,7 +32,7 @@
 #include "platform/audio/SincResampler.h"
 #include "wtf/Allocator.h"
 #include "wtf/Noncopyable.h"
-#include "wtf/OwnPtr.h"
+#include <memory>
 
 namespace blink {
 
@@ -53,7 +53,7 @@
     // https://bugs.webkit.org/show_bug.cgi?id=75118
 
     // Each channel will be resampled using a high-quality SincResampler.
-    Vector<OwnPtr<SincResampler>> m_kernels;
+    Vector<std::unique_ptr<SincResampler>> m_kernels;
 
     unsigned m_numberOfChannels;
 };
diff --git a/third_party/WebKit/Source/platform/audio/Panner.cpp b/third_party/WebKit/Source/platform/audio/Panner.cpp
index 363999dc..196e071 100644
--- a/third_party/WebKit/Source/platform/audio/Panner.cpp
+++ b/third_party/WebKit/Source/platform/audio/Panner.cpp
@@ -26,20 +26,22 @@
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-#include "platform/audio/Panner.h"
 #include "platform/audio/EqualPowerPanner.h"
 #include "platform/audio/HRTFPanner.h"
+#include "platform/audio/Panner.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
-PassOwnPtr<Panner> Panner::create(PanningModel model, float sampleRate, HRTFDatabaseLoader* databaseLoader)
+std::unique_ptr<Panner> Panner::create(PanningModel model, float sampleRate, HRTFDatabaseLoader* databaseLoader)
 {
     switch (model) {
     case PanningModelEqualPower:
-        return adoptPtr(new EqualPowerPanner(sampleRate));
+        return wrapUnique(new EqualPowerPanner(sampleRate));
 
     case PanningModelHRTF:
-        return adoptPtr(new HRTFPanner(sampleRate, databaseLoader));
+        return wrapUnique(new HRTFPanner(sampleRate, databaseLoader));
 
     default:
         ASSERT_NOT_REACHED();
diff --git a/third_party/WebKit/Source/platform/audio/Panner.h b/third_party/WebKit/Source/platform/audio/Panner.h
index 896863a..79109cb 100644
--- a/third_party/WebKit/Source/platform/audio/Panner.h
+++ b/third_party/WebKit/Source/platform/audio/Panner.h
@@ -32,8 +32,8 @@
 #include "platform/PlatformExport.h"
 #include "wtf/Allocator.h"
 #include "wtf/Noncopyable.h"
-#include "wtf/PassOwnPtr.h"
 #include "wtf/build_config.h"
+#include <memory>
 
 namespace blink {
 
@@ -54,7 +54,7 @@
 
     typedef unsigned PanningModel;
 
-    static PassOwnPtr<Panner> create(PanningModel, float sampleRate, HRTFDatabaseLoader*);
+    static std::unique_ptr<Panner> create(PanningModel, float sampleRate, HRTFDatabaseLoader*);
 
     virtual ~Panner() { };
 
diff --git a/third_party/WebKit/Source/platform/audio/Reverb.cpp b/third_party/WebKit/Source/platform/audio/Reverb.cpp
index dc7e9ea..5f4babda 100644
--- a/third_party/WebKit/Source/platform/audio/Reverb.cpp
+++ b/third_party/WebKit/Source/platform/audio/Reverb.cpp
@@ -26,13 +26,13 @@
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-#include "platform/audio/Reverb.h"
-#include <math.h>
 #include "platform/audio/AudioBus.h"
+#include "platform/audio/Reverb.h"
 #include "platform/audio/VectorMath.h"
 #include "wtf/MathExtras.h"
-#include "wtf/OwnPtr.h"
-#include "wtf/PassOwnPtr.h"
+#include "wtf/PtrUtil.h"
+#include <math.h>
+#include <memory>
 
 #if OS(MACOSX)
 using namespace std;
@@ -116,7 +116,7 @@
     for (size_t i = 0; i < numResponseChannels; ++i) {
         AudioChannel* channel = impulseResponseBuffer->channel(i);
 
-        OwnPtr<ReverbConvolver> convolver = adoptPtr(new ReverbConvolver(channel, renderSliceSize, maxFFTSize, convolverRenderPhase, useBackgroundThreads));
+        std::unique_ptr<ReverbConvolver> convolver = wrapUnique(new ReverbConvolver(channel, renderSliceSize, maxFFTSize, convolverRenderPhase, useBackgroundThreads));
         m_convolvers.append(std::move(convolver));
 
         convolverRenderPhase += renderSliceSize;
diff --git a/third_party/WebKit/Source/platform/audio/Reverb.h b/third_party/WebKit/Source/platform/audio/Reverb.h
index 1fb29a8..3320931 100644
--- a/third_party/WebKit/Source/platform/audio/Reverb.h
+++ b/third_party/WebKit/Source/platform/audio/Reverb.h
@@ -33,6 +33,7 @@
 #include "wtf/Allocator.h"
 #include "wtf/Noncopyable.h"
 #include "wtf/Vector.h"
+#include <memory>
 
 namespace blink {
 
@@ -60,7 +61,7 @@
 
     size_t m_impulseResponseLength;
 
-    Vector<OwnPtr<ReverbConvolver>> m_convolvers;
+    Vector<std::unique_ptr<ReverbConvolver>> m_convolvers;
 
     // For "True" stereo processing
     RefPtr<AudioBus> m_tempBuffer;
diff --git a/third_party/WebKit/Source/platform/audio/ReverbConvolver.cpp b/third_party/WebKit/Source/platform/audio/ReverbConvolver.cpp
index 4a59630..dfa6ab7 100644
--- a/third_party/WebKit/Source/platform/audio/ReverbConvolver.cpp
+++ b/third_party/WebKit/Source/platform/audio/ReverbConvolver.cpp
@@ -26,14 +26,16 @@
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-#include "platform/audio/ReverbConvolver.h"
 #include "platform/ThreadSafeFunctional.h"
 #include "platform/audio/AudioBus.h"
+#include "platform/audio/ReverbConvolver.h"
 #include "platform/audio/VectorMath.h"
 #include "public/platform/Platform.h"
 #include "public/platform/WebTaskRunner.h"
 #include "public/platform/WebThread.h"
 #include "public/platform/WebTraceLocation.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
@@ -88,7 +90,7 @@
 
         bool useDirectConvolver = !stageOffset;
 
-        OwnPtr<ReverbConvolverStage> stage = adoptPtr(new ReverbConvolverStage(response, totalResponseLength, reverbTotalLatency, stageOffset, stageSize, fftSize, renderPhase, renderSliceSize, &m_accumulationBuffer, useDirectConvolver));
+        std::unique_ptr<ReverbConvolverStage> stage = wrapUnique(new ReverbConvolverStage(response, totalResponseLength, reverbTotalLatency, stageOffset, stageSize, fftSize, renderPhase, renderSliceSize, &m_accumulationBuffer, useDirectConvolver));
 
         bool isBackgroundStage = false;
 
@@ -116,7 +118,7 @@
     // Start up background thread
     // FIXME: would be better to up the thread priority here.  It doesn't need to be real-time, but higher than the default...
     if (useBackgroundThreads && m_backgroundStages.size() > 0)
-        m_backgroundThread = adoptPtr(Platform::current()->createThread("Reverb convolution background thread"));
+        m_backgroundThread = wrapUnique(Platform::current()->createThread("Reverb convolution background thread"));
 }
 
 ReverbConvolver::~ReverbConvolver()
diff --git a/third_party/WebKit/Source/platform/audio/ReverbConvolver.h b/third_party/WebKit/Source/platform/audio/ReverbConvolver.h
index 07b981b..5e61ee77 100644
--- a/third_party/WebKit/Source/platform/audio/ReverbConvolver.h
+++ b/third_party/WebKit/Source/platform/audio/ReverbConvolver.h
@@ -36,8 +36,8 @@
 #include "platform/audio/ReverbConvolverStage.h"
 #include "platform/audio/ReverbInputBuffer.h"
 #include "wtf/Allocator.h"
-#include "wtf/OwnPtr.h"
 #include "wtf/Vector.h"
+#include <memory>
 
 namespace blink {
 
@@ -64,8 +64,8 @@
 private:
     void processInBackground();
 
-    Vector<OwnPtr<ReverbConvolverStage>> m_stages;
-    Vector<OwnPtr<ReverbConvolverStage>> m_backgroundStages;
+    Vector<std::unique_ptr<ReverbConvolverStage>> m_stages;
+    Vector<std::unique_ptr<ReverbConvolverStage>> m_backgroundStages;
     size_t m_impulseResponseLength;
 
     ReverbAccumulationBuffer m_accumulationBuffer;
@@ -81,7 +81,7 @@
     size_t m_maxRealtimeFFTSize;
 
     // Background thread and synchronization
-    OwnPtr<WebThread> m_backgroundThread;
+    std::unique_ptr<WebThread> m_backgroundThread;
 };
 
 } // namespace blink
diff --git a/third_party/WebKit/Source/platform/audio/ReverbConvolverStage.cpp b/third_party/WebKit/Source/platform/audio/ReverbConvolverStage.cpp
index 7bc04a3d..4b3d63e 100644
--- a/third_party/WebKit/Source/platform/audio/ReverbConvolverStage.cpp
+++ b/third_party/WebKit/Source/platform/audio/ReverbConvolverStage.cpp
@@ -26,12 +26,12 @@
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-#include "platform/audio/ReverbConvolverStage.h"
 #include "platform/audio/ReverbAccumulationBuffer.h"
 #include "platform/audio/ReverbConvolver.h"
+#include "platform/audio/ReverbConvolverStage.h"
 #include "platform/audio/ReverbInputBuffer.h"
 #include "platform/audio/VectorMath.h"
-#include "wtf/PassOwnPtr.h"
+#include "wtf/PtrUtil.h"
 
 namespace blink {
 
@@ -48,16 +48,16 @@
     ASSERT(accumulationBuffer);
 
     if (!m_directMode) {
-        m_fftKernel = adoptPtr(new FFTFrame(fftSize));
+        m_fftKernel = wrapUnique(new FFTFrame(fftSize));
         m_fftKernel->doPaddedFFT(impulseResponse + stageOffset, stageLength);
-        m_fftConvolver = adoptPtr(new FFTConvolver(fftSize));
+        m_fftConvolver = wrapUnique(new FFTConvolver(fftSize));
     } else {
         ASSERT(!stageOffset);
         ASSERT(stageLength <= fftSize / 2);
 
-        m_directKernel = adoptPtr(new AudioFloatArray(fftSize / 2));
+        m_directKernel = wrapUnique(new AudioFloatArray(fftSize / 2));
         m_directKernel->copyToRange(impulseResponse, 0, stageLength);
-        m_directConvolver = adoptPtr(new DirectConvolver(renderSliceSize));
+        m_directConvolver = wrapUnique(new DirectConvolver(renderSliceSize));
     }
     m_temporaryBuffer.allocate(renderSliceSize);
 
diff --git a/third_party/WebKit/Source/platform/audio/ReverbConvolverStage.h b/third_party/WebKit/Source/platform/audio/ReverbConvolverStage.h
index 8b4983a..e1b99d3e 100644
--- a/third_party/WebKit/Source/platform/audio/ReverbConvolverStage.h
+++ b/third_party/WebKit/Source/platform/audio/ReverbConvolverStage.h
@@ -33,7 +33,7 @@
 #include "platform/audio/FFTFrame.h"
 #include "wtf/Allocator.h"
 #include "wtf/Noncopyable.h"
-#include "wtf/OwnPtr.h"
+#include <memory>
 
 namespace blink {
 
@@ -63,8 +63,8 @@
     int inputReadIndex() const { return m_inputReadIndex; }
 
 private:
-    OwnPtr<FFTFrame> m_fftKernel;
-    OwnPtr<FFTConvolver> m_fftConvolver;
+    std::unique_ptr<FFTFrame> m_fftKernel;
+    std::unique_ptr<FFTConvolver> m_fftConvolver;
 
     AudioFloatArray m_preDelayBuffer;
 
@@ -80,8 +80,8 @@
     AudioFloatArray m_temporaryBuffer;
 
     bool m_directMode;
-    OwnPtr<AudioFloatArray> m_directKernel;
-    OwnPtr<DirectConvolver> m_directConvolver;
+    std::unique_ptr<AudioFloatArray> m_directKernel;
+    std::unique_ptr<DirectConvolver> m_directConvolver;
 };
 
 } // namespace blink
diff --git a/third_party/WebKit/Source/platform/audio/Spatializer.cpp b/third_party/WebKit/Source/platform/audio/Spatializer.cpp
index ba11fbc3..ff4896c 100644
--- a/third_party/WebKit/Source/platform/audio/Spatializer.cpp
+++ b/third_party/WebKit/Source/platform/audio/Spatializer.cpp
@@ -4,14 +4,16 @@
 
 #include "platform/audio/Spatializer.h"
 #include "platform/audio/StereoPanner.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
-PassOwnPtr<Spatializer> Spatializer::create(PanningModel model, float sampleRate)
+std::unique_ptr<Spatializer> Spatializer::create(PanningModel model, float sampleRate)
 {
     switch (model) {
     case PanningModelEqualPower:
-        return adoptPtr(new StereoPanner(sampleRate));
+        return wrapUnique(new StereoPanner(sampleRate));
     default:
         ASSERT_NOT_REACHED();
         return nullptr;
diff --git a/third_party/WebKit/Source/platform/audio/Spatializer.h b/third_party/WebKit/Source/platform/audio/Spatializer.h
index 9da000b..a4629a5 100644
--- a/third_party/WebKit/Source/platform/audio/Spatializer.h
+++ b/third_party/WebKit/Source/platform/audio/Spatializer.h
@@ -8,7 +8,7 @@
 #include "platform/PlatformExport.h"
 #include "wtf/Allocator.h"
 #include "wtf/Noncopyable.h"
-#include "wtf/PassOwnPtr.h"
+#include <memory>
 
 namespace blink {
 
@@ -28,7 +28,7 @@
 
     typedef unsigned PanningModel;
 
-    static PassOwnPtr<Spatializer> create(PanningModel, float sampleRate);
+    static std::unique_ptr<Spatializer> create(PanningModel, float sampleRate);
     virtual ~Spatializer();
 
     // Handle sample-accurate panning by AudioParam automation.
diff --git a/third_party/WebKit/Source/platform/blob/BlobData.cpp b/third_party/WebKit/Source/platform/blob/BlobData.cpp
index 85c4f2e..4a82ea4 100644
--- a/third_party/WebKit/Source/platform/blob/BlobData.cpp
+++ b/third_party/WebKit/Source/platform/blob/BlobData.cpp
@@ -33,12 +33,13 @@
 #include "platform/UUID.h"
 #include "platform/blob/BlobRegistry.h"
 #include "platform/text/LineEnding.h"
-#include "wtf/OwnPtr.h"
 #include "wtf/PassRefPtr.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/RefPtr.h"
 #include "wtf/Vector.h"
 #include "wtf/text/CString.h"
 #include "wtf/text/TextEncoding.h"
+#include <memory>
 
 namespace blink {
 
@@ -78,9 +79,9 @@
     fileSystemURL = fileSystemURL.copy();
 }
 
-PassOwnPtr<BlobData> BlobData::create()
+std::unique_ptr<BlobData> BlobData::create()
 {
-    return adoptPtr(new BlobData());
+    return wrapUnique(new BlobData());
 }
 
 void BlobData::detachFromCurrentThread()
@@ -203,7 +204,7 @@
     BlobRegistry::registerBlobData(m_uuid, BlobData::create());
 }
 
-BlobDataHandle::BlobDataHandle(PassOwnPtr<BlobData> data, long long size)
+BlobDataHandle::BlobDataHandle(std::unique_ptr<BlobData> data, long long size)
     : m_uuid(createCanonicalUUIDString())
     , m_type(data->contentType().isolatedCopy())
     , m_size(size)
diff --git a/third_party/WebKit/Source/platform/blob/BlobData.h b/third_party/WebKit/Source/platform/blob/BlobData.h
index d357358c..c132b95 100644
--- a/third_party/WebKit/Source/platform/blob/BlobData.h
+++ b/third_party/WebKit/Source/platform/blob/BlobData.h
@@ -35,9 +35,9 @@
 #include "platform/FileMetadata.h"
 #include "platform/weborigin/KURL.h"
 #include "wtf/Forward.h"
-#include "wtf/PassOwnPtr.h"
 #include "wtf/ThreadSafeRefCounted.h"
 #include "wtf/text/WTFString.h"
+#include <memory>
 
 namespace blink {
 
@@ -164,7 +164,7 @@
     USING_FAST_MALLOC(BlobData);
     WTF_MAKE_NONCOPYABLE(BlobData);
 public:
-    static PassOwnPtr<BlobData> create();
+    static std::unique_ptr<BlobData> create();
 
     // Detaches from current thread so that it can be passed to another thread.
     void detachFromCurrentThread();
@@ -208,7 +208,7 @@
     }
 
     // For initial creation.
-    static PassRefPtr<BlobDataHandle> create(PassOwnPtr<BlobData> data, long long size)
+    static PassRefPtr<BlobDataHandle> create(std::unique_ptr<BlobData> data, long long size)
     {
         return adoptRef(new BlobDataHandle(std::move(data), size));
     }
@@ -227,7 +227,7 @@
 
 private:
     BlobDataHandle();
-    BlobDataHandle(PassOwnPtr<BlobData>, long long size);
+    BlobDataHandle(std::unique_ptr<BlobData>, long long size);
     BlobDataHandle(const String& uuid, const String& type, long long size);
 
     const String m_uuid;
diff --git a/third_party/WebKit/Source/platform/blob/BlobDataTest.cpp b/third_party/WebKit/Source/platform/blob/BlobDataTest.cpp
index e7bef25..8ac1d5ac 100644
--- a/third_party/WebKit/Source/platform/blob/BlobDataTest.cpp
+++ b/third_party/WebKit/Source/platform/blob/BlobDataTest.cpp
@@ -6,8 +6,8 @@
 
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
-#include "wtf/OwnPtr.h"
-#include "wtf/PassOwnPtr.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
@@ -28,7 +28,7 @@
     EXPECT_EQ(0, memcmp(data.m_items[0].data->data(), "abcdefps1ps2", 12));
 
 
-    OwnPtr<char[]> large_data = adoptArrayPtr(new char[kMaxConsolidatedItemSizeInBytes]);
+    std::unique_ptr<char[]> large_data = wrapArrayUnique(new char[kMaxConsolidatedItemSizeInBytes]);
     data.appendBytes(large_data.get(), kMaxConsolidatedItemSizeInBytes);
 
     EXPECT_EQ(2u, data.m_items.size());
diff --git a/third_party/WebKit/Source/platform/blob/BlobRegistry.cpp b/third_party/WebKit/Source/platform/blob/BlobRegistry.cpp
index c0d11582..6458fd9 100644
--- a/third_party/WebKit/Source/platform/blob/BlobRegistry.cpp
+++ b/third_party/WebKit/Source/platform/blob/BlobRegistry.cpp
@@ -48,6 +48,7 @@
 #include "wtf/Threading.h"
 #include "wtf/text/StringHash.h"
 #include "wtf/text/WTFString.h"
+#include <memory>
 
 namespace blink {
 
@@ -88,7 +89,7 @@
         originMap()->remove(url.getString());
 }
 
-void BlobRegistry::registerBlobData(const String& uuid, PassOwnPtr<BlobData> data)
+void BlobRegistry::registerBlobData(const String& uuid, std::unique_ptr<BlobData> data)
 {
     blobRegistry()->registerBlobData(uuid, WebBlobData(std::move(data)));
 }
diff --git a/third_party/WebKit/Source/platform/blob/BlobRegistry.h b/third_party/WebKit/Source/platform/blob/BlobRegistry.h
index 603cd52..3631adc 100644
--- a/third_party/WebKit/Source/platform/blob/BlobRegistry.h
+++ b/third_party/WebKit/Source/platform/blob/BlobRegistry.h
@@ -34,8 +34,8 @@
 #include "platform/PlatformExport.h"
 #include "wtf/Allocator.h"
 #include "wtf/Forward.h"
-#include "wtf/PassOwnPtr.h"
 #include "wtf/PassRefPtr.h"
+#include <memory>
 
 namespace blink {
 
@@ -50,7 +50,7 @@
     STATIC_ONLY(BlobRegistry);
 public:
     // Methods for controlling Blobs.
-    static void registerBlobData(const String& uuid, PassOwnPtr<BlobData>);
+    static void registerBlobData(const String& uuid, std::unique_ptr<BlobData>);
     static void addBlobDataRef(const String& uuid);
     static void removeBlobDataRef(const String& uuid);
     static void registerPublicBlobURL(SecurityOrigin*, const KURL&, PassRefPtr<BlobDataHandle>);
diff --git a/third_party/WebKit/Source/platform/exported/Platform.cpp b/third_party/WebKit/Source/platform/exported/Platform.cpp
index 1eaf688..c0f50a0 100644
--- a/third_party/WebKit/Source/platform/exported/Platform.cpp
+++ b/third_party/WebKit/Source/platform/exported/Platform.cpp
@@ -40,7 +40,6 @@
 #include "public/platform/ServiceRegistry.h"
 #include "public/platform/WebPrerenderingSupport.h"
 #include "wtf/HashMap.h"
-#include "wtf/OwnPtr.h"
 
 namespace blink {
 
diff --git a/third_party/WebKit/Source/platform/exported/WebActiveGestureAnimation.cpp b/third_party/WebKit/Source/platform/exported/WebActiveGestureAnimation.cpp
index 50453e7..a5dd44f 100644
--- a/third_party/WebKit/Source/platform/exported/WebActiveGestureAnimation.cpp
+++ b/third_party/WebKit/Source/platform/exported/WebActiveGestureAnimation.cpp
@@ -27,24 +27,26 @@
 
 #include "public/platform/WebGestureCurve.h"
 #include "public/platform/WebGestureCurveTarget.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
-PassOwnPtr<WebActiveGestureAnimation> WebActiveGestureAnimation::createAtAnimationStart(PassOwnPtr<WebGestureCurve> curve, WebGestureCurveTarget* target)
+std::unique_ptr<WebActiveGestureAnimation> WebActiveGestureAnimation::createAtAnimationStart(std::unique_ptr<WebGestureCurve> curve, WebGestureCurveTarget* target)
 {
-    return adoptPtr(new WebActiveGestureAnimation(std::move(curve), target, 0, true));
+    return wrapUnique(new WebActiveGestureAnimation(std::move(curve), target, 0, true));
 }
 
-PassOwnPtr<WebActiveGestureAnimation> WebActiveGestureAnimation::createWithTimeOffset(PassOwnPtr<WebGestureCurve> curve, WebGestureCurveTarget* target, double startTime)
+std::unique_ptr<WebActiveGestureAnimation> WebActiveGestureAnimation::createWithTimeOffset(std::unique_ptr<WebGestureCurve> curve, WebGestureCurveTarget* target, double startTime)
 {
-    return adoptPtr(new WebActiveGestureAnimation(std::move(curve), target, startTime, false));
+    return wrapUnique(new WebActiveGestureAnimation(std::move(curve), target, startTime, false));
 }
 
 WebActiveGestureAnimation::~WebActiveGestureAnimation()
 {
 }
 
-WebActiveGestureAnimation::WebActiveGestureAnimation(PassOwnPtr<WebGestureCurve> curve, WebGestureCurveTarget* target, double startTime, bool waitingForFirstTick)
+WebActiveGestureAnimation::WebActiveGestureAnimation(std::unique_ptr<WebGestureCurve> curve, WebGestureCurveTarget* target, double startTime, bool waitingForFirstTick)
     : m_startTime(startTime)
     , m_waitingForFirstTick(waitingForFirstTick)
     , m_curve(std::move(curve))
diff --git a/third_party/WebKit/Source/platform/exported/WebActiveGestureAnimation.h b/third_party/WebKit/Source/platform/exported/WebActiveGestureAnimation.h
index 4510ff8..9ca0bec 100644
--- a/third_party/WebKit/Source/platform/exported/WebActiveGestureAnimation.h
+++ b/third_party/WebKit/Source/platform/exported/WebActiveGestureAnimation.h
@@ -29,8 +29,7 @@
 #include "platform/PlatformExport.h"
 #include "wtf/Allocator.h"
 #include "wtf/Noncopyable.h"
-#include "wtf/OwnPtr.h"
-#include "wtf/PassOwnPtr.h"
+#include <memory>
 
 namespace blink {
 
@@ -45,19 +44,19 @@
     USING_FAST_MALLOC(WebActiveGestureAnimation);
     WTF_MAKE_NONCOPYABLE(WebActiveGestureAnimation);
 public:
-    static PassOwnPtr<WebActiveGestureAnimation> createAtAnimationStart(PassOwnPtr<WebGestureCurve>, WebGestureCurveTarget*);
-    static PassOwnPtr<WebActiveGestureAnimation> createWithTimeOffset(PassOwnPtr<WebGestureCurve>, WebGestureCurveTarget*, double startTime);
+    static std::unique_ptr<WebActiveGestureAnimation> createAtAnimationStart(std::unique_ptr<WebGestureCurve>, WebGestureCurveTarget*);
+    static std::unique_ptr<WebActiveGestureAnimation> createWithTimeOffset(std::unique_ptr<WebGestureCurve>, WebGestureCurveTarget*, double startTime);
     ~WebActiveGestureAnimation();
 
     bool animate(double time);
 
 private:
     // Assumes a valid WebGestureCurveTarget that outlives the animation.
-    WebActiveGestureAnimation(PassOwnPtr<WebGestureCurve>, WebGestureCurveTarget*, double startTime, bool waitingForFirstTick);
+    WebActiveGestureAnimation(std::unique_ptr<WebGestureCurve>, WebGestureCurveTarget*, double startTime, bool waitingForFirstTick);
 
     double m_startTime;
     bool m_waitingForFirstTick;
-    OwnPtr<WebGestureCurve> m_curve;
+    std::unique_ptr<WebGestureCurve> m_curve;
     WebGestureCurveTarget* m_target;
 };
 
diff --git a/third_party/WebKit/Source/platform/exported/WebBlobData.cpp b/third_party/WebKit/Source/platform/exported/WebBlobData.cpp
index 6b67d588..942d2aec 100644
--- a/third_party/WebKit/Source/platform/exported/WebBlobData.cpp
+++ b/third_party/WebKit/Source/platform/exported/WebBlobData.cpp
@@ -32,7 +32,7 @@
 #include "public/platform/WebBlobData.h"
 
 #include "platform/blob/BlobData.h"
-#include "wtf/PassOwnPtr.h"
+#include <memory>
 
 namespace blink {
 
@@ -94,18 +94,18 @@
     return m_private->contentType();
 }
 
-WebBlobData::WebBlobData(PassOwnPtr<BlobData> data)
+WebBlobData::WebBlobData(std::unique_ptr<BlobData> data)
     : m_private(std::move(data))
 {
 }
 
-WebBlobData& WebBlobData::operator=(PassOwnPtr<BlobData> data)
+WebBlobData& WebBlobData::operator=(std::unique_ptr<BlobData> data)
 {
     m_private.reset(std::move(data));
     return *this;
 }
 
-WebBlobData::operator PassOwnPtr<BlobData>()
+WebBlobData::operator std::unique_ptr<BlobData>()
 {
     return m_private.release();
 }
diff --git a/third_party/WebKit/Source/platform/exported/WebContentSettingCallbacks.cpp b/third_party/WebKit/Source/platform/exported/WebContentSettingCallbacks.cpp
index de907f6e..2524e147 100644
--- a/third_party/WebKit/Source/platform/exported/WebContentSettingCallbacks.cpp
+++ b/third_party/WebKit/Source/platform/exported/WebContentSettingCallbacks.cpp
@@ -6,12 +6,13 @@
 
 #include "platform/ContentSettingCallbacks.h"
 #include "wtf/RefCounted.h"
+#include <memory>
 
 namespace blink {
 
 class WebContentSettingCallbacksPrivate : public RefCounted<WebContentSettingCallbacksPrivate> {
 public:
-    static PassRefPtr<WebContentSettingCallbacksPrivate> create(PassOwnPtr<ContentSettingCallbacks> callbacks)
+    static PassRefPtr<WebContentSettingCallbacksPrivate> create(std::unique_ptr<ContentSettingCallbacks> callbacks)
     {
         return adoptRef(new WebContentSettingCallbacksPrivate(std::move(callbacks)));
     }
@@ -19,11 +20,11 @@
     ContentSettingCallbacks* callbacks() { return m_callbacks.get(); }
 
 private:
-    WebContentSettingCallbacksPrivate(PassOwnPtr<ContentSettingCallbacks> callbacks) : m_callbacks(std::move(callbacks)) { }
-    OwnPtr<ContentSettingCallbacks> m_callbacks;
+    WebContentSettingCallbacksPrivate(std::unique_ptr<ContentSettingCallbacks> callbacks) : m_callbacks(std::move(callbacks)) { }
+    std::unique_ptr<ContentSettingCallbacks> m_callbacks;
 };
 
-WebContentSettingCallbacks::WebContentSettingCallbacks(PassOwnPtr<ContentSettingCallbacks>&& callbacks)
+WebContentSettingCallbacks::WebContentSettingCallbacks(std::unique_ptr<ContentSettingCallbacks>&& callbacks)
 {
     m_private = WebContentSettingCallbacksPrivate::create(std::move(callbacks));
 }
diff --git a/third_party/WebKit/Source/platform/exported/WebCryptoAlgorithm.cpp b/third_party/WebKit/Source/platform/exported/WebCryptoAlgorithm.cpp
index eb1793b6..b174f45 100644
--- a/third_party/WebKit/Source/platform/exported/WebCryptoAlgorithm.cpp
+++ b/third_party/WebKit/Source/platform/exported/WebCryptoAlgorithm.cpp
@@ -32,9 +32,10 @@
 
 #include "public/platform/WebCryptoAlgorithmParams.h"
 #include "wtf/Assertions.h"
-#include "wtf/OwnPtr.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/StdLibExtras.h"
 #include "wtf/ThreadSafeRefCounted.h"
+#include <memory>
 
 namespace blink {
 
@@ -295,17 +296,17 @@
 
 class WebCryptoAlgorithmPrivate : public ThreadSafeRefCounted<WebCryptoAlgorithmPrivate> {
 public:
-    WebCryptoAlgorithmPrivate(WebCryptoAlgorithmId id, PassOwnPtr<WebCryptoAlgorithmParams> params)
+    WebCryptoAlgorithmPrivate(WebCryptoAlgorithmId id, std::unique_ptr<WebCryptoAlgorithmParams> params)
         : id(id)
         , params(std::move(params))
     {
     }
 
     WebCryptoAlgorithmId id;
-    OwnPtr<WebCryptoAlgorithmParams> params;
+    std::unique_ptr<WebCryptoAlgorithmParams> params;
 };
 
-WebCryptoAlgorithm::WebCryptoAlgorithm(WebCryptoAlgorithmId id, PassOwnPtr<WebCryptoAlgorithmParams> params)
+WebCryptoAlgorithm::WebCryptoAlgorithm(WebCryptoAlgorithmId id, std::unique_ptr<WebCryptoAlgorithmParams> params)
     : m_private(adoptRef(new WebCryptoAlgorithmPrivate(id, std::move(params))))
 {
 }
@@ -317,7 +318,7 @@
 
 WebCryptoAlgorithm WebCryptoAlgorithm::adoptParamsAndCreate(WebCryptoAlgorithmId id, WebCryptoAlgorithmParams* params)
 {
-    return WebCryptoAlgorithm(id, adoptPtr(params));
+    return WebCryptoAlgorithm(id, wrapUnique(params));
 }
 
 const WebCryptoAlgorithmInfo* WebCryptoAlgorithm::lookupAlgorithmInfo(WebCryptoAlgorithmId id)
diff --git a/third_party/WebKit/Source/platform/exported/WebCryptoKey.cpp b/third_party/WebKit/Source/platform/exported/WebCryptoKey.cpp
index 97660f7..07437ec 100644
--- a/third_party/WebKit/Source/platform/exported/WebCryptoKey.cpp
+++ b/third_party/WebKit/Source/platform/exported/WebCryptoKey.cpp
@@ -33,14 +33,15 @@
 #include "public/platform/WebCryptoAlgorithm.h"
 #include "public/platform/WebCryptoAlgorithmParams.h"
 #include "public/platform/WebCryptoKeyAlgorithm.h"
-#include "wtf/OwnPtr.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/ThreadSafeRefCounted.h"
+#include <memory>
 
 namespace blink {
 
 class WebCryptoKeyPrivate : public ThreadSafeRefCounted<WebCryptoKeyPrivate> {
 public:
-    WebCryptoKeyPrivate(PassOwnPtr<WebCryptoKeyHandle> handle, WebCryptoKeyType type, bool extractable, const WebCryptoKeyAlgorithm& algorithm, WebCryptoKeyUsageMask usages)
+    WebCryptoKeyPrivate(std::unique_ptr<WebCryptoKeyHandle> handle, WebCryptoKeyType type, bool extractable, const WebCryptoKeyAlgorithm& algorithm, WebCryptoKeyUsageMask usages)
         : handle(std::move(handle))
         , type(type)
         , extractable(extractable)
@@ -50,7 +51,7 @@
         ASSERT(!algorithm.isNull());
     }
 
-    const OwnPtr<WebCryptoKeyHandle> handle;
+    const std::unique_ptr<WebCryptoKeyHandle> handle;
     const WebCryptoKeyType type;
     const bool extractable;
     const WebCryptoKeyAlgorithm algorithm;
@@ -60,7 +61,7 @@
 WebCryptoKey WebCryptoKey::create(WebCryptoKeyHandle* handle, WebCryptoKeyType type, bool extractable, const WebCryptoKeyAlgorithm& algorithm, WebCryptoKeyUsageMask usages)
 {
     WebCryptoKey key;
-    key.m_private = adoptRef(new WebCryptoKeyPrivate(adoptPtr(handle), type, extractable, algorithm, usages));
+    key.m_private = adoptRef(new WebCryptoKeyPrivate(wrapUnique(handle), type, extractable, algorithm, usages));
     return key;
 }
 
diff --git a/third_party/WebKit/Source/platform/exported/WebCryptoKeyAlgorithm.cpp b/third_party/WebKit/Source/platform/exported/WebCryptoKeyAlgorithm.cpp
index 45e406a..771722e2 100644
--- a/third_party/WebKit/Source/platform/exported/WebCryptoKeyAlgorithm.cpp
+++ b/third_party/WebKit/Source/platform/exported/WebCryptoKeyAlgorithm.cpp
@@ -30,8 +30,9 @@
 
 #include "public/platform/WebCryptoKeyAlgorithm.h"
 
-#include "wtf/OwnPtr.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/ThreadSafeRefCounted.h"
+#include <memory>
 
 namespace blink {
 
@@ -43,24 +44,24 @@
 
 class WebCryptoKeyAlgorithmPrivate : public ThreadSafeRefCounted<WebCryptoKeyAlgorithmPrivate> {
 public:
-    WebCryptoKeyAlgorithmPrivate(WebCryptoAlgorithmId id, PassOwnPtr<WebCryptoKeyAlgorithmParams> params)
+    WebCryptoKeyAlgorithmPrivate(WebCryptoAlgorithmId id, std::unique_ptr<WebCryptoKeyAlgorithmParams> params)
         : id(id)
         , params(std::move(params))
     {
     }
 
     WebCryptoAlgorithmId id;
-    OwnPtr<WebCryptoKeyAlgorithmParams> params;
+    std::unique_ptr<WebCryptoKeyAlgorithmParams> params;
 };
 
-WebCryptoKeyAlgorithm::WebCryptoKeyAlgorithm(WebCryptoAlgorithmId id, PassOwnPtr<WebCryptoKeyAlgorithmParams> params)
+WebCryptoKeyAlgorithm::WebCryptoKeyAlgorithm(WebCryptoAlgorithmId id, std::unique_ptr<WebCryptoKeyAlgorithmParams> params)
     : m_private(adoptRef(new WebCryptoKeyAlgorithmPrivate(id, std::move(params))))
 {
 }
 
 WebCryptoKeyAlgorithm WebCryptoKeyAlgorithm::adoptParamsAndCreate(WebCryptoAlgorithmId id, WebCryptoKeyAlgorithmParams* params)
 {
-    return WebCryptoKeyAlgorithm(id, adoptPtr(params));
+    return WebCryptoKeyAlgorithm(id, wrapUnique(params));
 }
 
 WebCryptoKeyAlgorithm WebCryptoKeyAlgorithm::createAes(WebCryptoAlgorithmId id, unsigned short keyLengthBits)
@@ -69,14 +70,14 @@
     // FIXME: Move this somewhere more general.
     if (keyLengthBits != 128 && keyLengthBits != 192 && keyLengthBits != 256)
         return WebCryptoKeyAlgorithm();
-    return WebCryptoKeyAlgorithm(id, adoptPtr(new WebCryptoAesKeyAlgorithmParams(keyLengthBits)));
+    return WebCryptoKeyAlgorithm(id, wrapUnique(new WebCryptoAesKeyAlgorithmParams(keyLengthBits)));
 }
 
 WebCryptoKeyAlgorithm WebCryptoKeyAlgorithm::createHmac(WebCryptoAlgorithmId hash, unsigned keyLengthBits)
 {
     if (!WebCryptoAlgorithm::isHash(hash))
         return WebCryptoKeyAlgorithm();
-    return WebCryptoKeyAlgorithm(WebCryptoAlgorithmIdHmac, adoptPtr(new WebCryptoHmacKeyAlgorithmParams(createHash(hash), keyLengthBits)));
+    return WebCryptoKeyAlgorithm(WebCryptoAlgorithmIdHmac, wrapUnique(new WebCryptoHmacKeyAlgorithmParams(createHash(hash), keyLengthBits)));
 }
 
 WebCryptoKeyAlgorithm WebCryptoKeyAlgorithm::createRsaHashed(WebCryptoAlgorithmId id, unsigned modulusLengthBits, const unsigned char* publicExponent, unsigned publicExponentSize, WebCryptoAlgorithmId hash)
@@ -84,12 +85,12 @@
     // FIXME: Verify that id is an RSA algorithm which expects a hash
     if (!WebCryptoAlgorithm::isHash(hash))
         return WebCryptoKeyAlgorithm();
-    return WebCryptoKeyAlgorithm(id, adoptPtr(new WebCryptoRsaHashedKeyAlgorithmParams(modulusLengthBits, publicExponent, publicExponentSize, createHash(hash))));
+    return WebCryptoKeyAlgorithm(id, wrapUnique(new WebCryptoRsaHashedKeyAlgorithmParams(modulusLengthBits, publicExponent, publicExponentSize, createHash(hash))));
 }
 
 WebCryptoKeyAlgorithm WebCryptoKeyAlgorithm::createEc(WebCryptoAlgorithmId id, WebCryptoNamedCurve namedCurve)
 {
-    return WebCryptoKeyAlgorithm(id, adoptPtr(new WebCryptoEcKeyAlgorithmParams(namedCurve)));
+    return WebCryptoKeyAlgorithm(id, wrapUnique(new WebCryptoEcKeyAlgorithmParams(namedCurve)));
 }
 
 WebCryptoKeyAlgorithm WebCryptoKeyAlgorithm::createWithoutParams(WebCryptoAlgorithmId id)
diff --git a/third_party/WebKit/Source/platform/exported/WebDataConsumerHandle.cpp b/third_party/WebKit/Source/platform/exported/WebDataConsumerHandle.cpp
index 3e757f9e..5c87021 100644
--- a/third_party/WebKit/Source/platform/exported/WebDataConsumerHandle.cpp
+++ b/third_party/WebKit/Source/platform/exported/WebDataConsumerHandle.cpp
@@ -5,8 +5,9 @@
 #include "public/platform/WebDataConsumerHandle.h"
 
 #include "platform/heap/Handle.h"
-
+#include "wtf/PtrUtil.h"
 #include <algorithm>
+#include <memory>
 #include <string.h>
 
 namespace blink {
@@ -21,10 +22,10 @@
     ASSERT(ThreadState::current());
 }
 
-PassOwnPtr<WebDataConsumerHandle::Reader> WebDataConsumerHandle::obtainReader(WebDataConsumerHandle::Client* client)
+std::unique_ptr<WebDataConsumerHandle::Reader> WebDataConsumerHandle::obtainReader(WebDataConsumerHandle::Client* client)
 {
     ASSERT(ThreadState::current());
-    return adoptPtr(obtainReaderInternal(client));
+    return wrapUnique(obtainReaderInternal(client));
 }
 
 WebDataConsumerHandle::Result WebDataConsumerHandle::Reader::read(void* data, size_t size, Flags flags, size_t* readSize)
diff --git a/third_party/WebKit/Source/platform/exported/WebFileSystemCallbacks.cpp b/third_party/WebKit/Source/platform/exported/WebFileSystemCallbacks.cpp
index 410ccbc..92e8975 100644
--- a/third_party/WebKit/Source/platform/exported/WebFileSystemCallbacks.cpp
+++ b/third_party/WebKit/Source/platform/exported/WebFileSystemCallbacks.cpp
@@ -37,15 +37,16 @@
 #include "public/platform/WebFileSystemEntry.h"
 #include "public/platform/WebFileWriter.h"
 #include "public/platform/WebString.h"
-#include "wtf/PassOwnPtr.h"
 #include "wtf/PassRefPtr.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/RefCounted.h"
+#include <memory>
 
 namespace blink {
 
 class WebFileSystemCallbacksPrivate : public RefCounted<WebFileSystemCallbacksPrivate> {
 public:
-    static PassRefPtr<WebFileSystemCallbacksPrivate> create(PassOwnPtr<AsyncFileSystemCallbacks> callbacks)
+    static PassRefPtr<WebFileSystemCallbacksPrivate> create(std::unique_ptr<AsyncFileSystemCallbacks> callbacks)
     {
         return adoptRef(new WebFileSystemCallbacksPrivate(std::move(callbacks)));
     }
@@ -53,11 +54,11 @@
     AsyncFileSystemCallbacks* callbacks() { return m_callbacks.get(); }
 
 private:
-    WebFileSystemCallbacksPrivate(PassOwnPtr<AsyncFileSystemCallbacks> callbacks) : m_callbacks(std::move(callbacks)) { }
-    OwnPtr<AsyncFileSystemCallbacks> m_callbacks;
+    WebFileSystemCallbacksPrivate(std::unique_ptr<AsyncFileSystemCallbacks> callbacks) : m_callbacks(std::move(callbacks)) { }
+    std::unique_ptr<AsyncFileSystemCallbacks> m_callbacks;
 };
 
-WebFileSystemCallbacks::WebFileSystemCallbacks(PassOwnPtr<AsyncFileSystemCallbacks>&& callbacks)
+WebFileSystemCallbacks::WebFileSystemCallbacks(std::unique_ptr<AsyncFileSystemCallbacks>&& callbacks)
 {
     m_private = WebFileSystemCallbacksPrivate::create(std::move(callbacks));
 }
@@ -96,7 +97,7 @@
     ASSERT(!m_private.isNull());
     // It's important to create a BlobDataHandle that refers to the platform file path prior
     // to return from this method so the underlying file will not be deleted.
-    OwnPtr<BlobData> blobData = BlobData::create();
+    std::unique_ptr<BlobData> blobData = BlobData::create();
     blobData->appendFile(webFileInfo.platformPath, 0, webFileInfo.length, invalidFileTime());
     RefPtr<BlobDataHandle> snapshotBlob = BlobDataHandle::create(std::move(blobData), webFileInfo.length);
 
@@ -135,7 +136,7 @@
 void WebFileSystemCallbacks::didCreateFileWriter(WebFileWriter* webFileWriter, long long length)
 {
     ASSERT(!m_private.isNull());
-    m_private->callbacks()->didCreateFileWriter(adoptPtr(webFileWriter), length);
+    m_private->callbacks()->didCreateFileWriter(wrapUnique(webFileWriter), length);
     m_private.reset();
 }
 
diff --git a/third_party/WebKit/Source/platform/exported/WebImage.cpp b/third_party/WebKit/Source/platform/exported/WebImage.cpp
index bb14044..31dc8d7 100644
--- a/third_party/WebKit/Source/platform/exported/WebImage.cpp
+++ b/third_party/WebKit/Source/platform/exported/WebImage.cpp
@@ -36,18 +36,17 @@
 #include "public/platform/WebData.h"
 #include "public/platform/WebSize.h"
 #include "third_party/skia/include/core/SkImage.h"
-#include "wtf/OwnPtr.h"
-#include "wtf/PassOwnPtr.h"
 #include "wtf/PassRefPtr.h"
 #include "wtf/Vector.h"
 #include <algorithm>
+#include <memory>
 
 namespace blink {
 
 WebImage WebImage::fromData(const WebData& data, const WebSize& desiredSize)
 {
     RefPtr<SharedBuffer> buffer = PassRefPtr<SharedBuffer>(data);
-    OwnPtr<ImageDecoder> decoder(ImageDecoder::create(*buffer.get(), ImageDecoder::AlphaPremultiplied, ImageDecoder::GammaAndColorProfileIgnored));
+    std::unique_ptr<ImageDecoder> decoder(ImageDecoder::create(*buffer.get(), ImageDecoder::AlphaPremultiplied, ImageDecoder::GammaAndColorProfileIgnored));
     if (!decoder)
         return WebImage();
 
@@ -91,7 +90,7 @@
     const size_t maxFrameCount = 8;
 
     RefPtr<SharedBuffer> buffer = PassRefPtr<SharedBuffer>(data);
-    OwnPtr<ImageDecoder> decoder(ImageDecoder::create(*buffer.get(), ImageDecoder::AlphaPremultiplied, ImageDecoder::GammaAndColorProfileIgnored));
+    std::unique_ptr<ImageDecoder> decoder(ImageDecoder::create(*buffer.get(), ImageDecoder::AlphaPremultiplied, ImageDecoder::GammaAndColorProfileIgnored));
     if (!decoder)
         return WebVector<WebImage>();
 
diff --git a/third_party/WebKit/Source/platform/exported/WebMediaStream.cpp b/third_party/WebKit/Source/platform/exported/WebMediaStream.cpp
index 468f919..9573897 100644
--- a/third_party/WebKit/Source/platform/exported/WebMediaStream.cpp
+++ b/third_party/WebKit/Source/platform/exported/WebMediaStream.cpp
@@ -31,9 +31,9 @@
 #include "public/platform/WebMediaStreamSource.h"
 #include "public/platform/WebMediaStreamTrack.h"
 #include "public/platform/WebString.h"
-#include "wtf/OwnPtr.h"
-#include "wtf/PassOwnPtr.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/Vector.h"
+#include <memory>
 
 namespace blink {
 
@@ -41,12 +41,12 @@
 
 class ExtraDataContainer : public MediaStreamDescriptor::ExtraData {
 public:
-    ExtraDataContainer(PassOwnPtr<WebMediaStream::ExtraData> extraData) : m_extraData(std::move(extraData)) { }
+    ExtraDataContainer(std::unique_ptr<WebMediaStream::ExtraData> extraData) : m_extraData(std::move(extraData)) { }
 
     WebMediaStream::ExtraData* getExtraData() { return m_extraData.get(); }
 
 private:
-    OwnPtr<WebMediaStream::ExtraData> m_extraData;
+    std::unique_ptr<WebMediaStream::ExtraData> m_extraData;
 };
 
 } // namespace
@@ -76,7 +76,7 @@
 
 void WebMediaStream::setExtraData(ExtraData* extraData)
 {
-    m_private->setExtraData(adoptPtr(new ExtraDataContainer(adoptPtr(extraData))));
+    m_private->setExtraData(wrapUnique(new ExtraDataContainer(wrapUnique(extraData))));
 }
 
 void WebMediaStream::audioTracks(WebVector<WebMediaStreamTrack>& webTracks) const
diff --git a/third_party/WebKit/Source/platform/exported/WebMediaStreamSource.cpp b/third_party/WebKit/Source/platform/exported/WebMediaStreamSource.cpp
index 59996c8..be39614 100644
--- a/third_party/WebKit/Source/platform/exported/WebMediaStreamSource.cpp
+++ b/third_party/WebKit/Source/platform/exported/WebMediaStreamSource.cpp
@@ -35,8 +35,9 @@
 #include "public/platform/WebAudioDestinationConsumer.h"
 #include "public/platform/WebMediaConstraints.h"
 #include "public/platform/WebString.h"
-#include "wtf/PassOwnPtr.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/Vector.h"
+#include <memory>
 
 namespace blink {
 
@@ -44,12 +45,12 @@
 
 class ExtraDataContainer : public MediaStreamSource::ExtraData {
 public:
-    ExtraDataContainer(PassOwnPtr<WebMediaStreamSource::ExtraData> extraData) : m_extraData(std::move(extraData)) { }
+    ExtraDataContainer(std::unique_ptr<WebMediaStreamSource::ExtraData> extraData) : m_extraData(std::move(extraData)) { }
 
     WebMediaStreamSource::ExtraData* getExtraData() { return m_extraData.get(); }
 
 private:
-    OwnPtr<WebMediaStreamSource::ExtraData> m_extraData;
+    std::unique_ptr<WebMediaStreamSource::ExtraData> m_extraData;
 };
 
 } // namespace
@@ -154,7 +155,7 @@
     if (extraData)
         extraData->setOwner(m_private.get());
 
-    m_private->setExtraData(adoptPtr(new ExtraDataContainer(adoptPtr(extraData))));
+    m_private->setExtraData(wrapUnique(new ExtraDataContainer(wrapUnique(extraData))));
 }
 
 WebMediaConstraints WebMediaStreamSource::constraints()
diff --git a/third_party/WebKit/Source/platform/exported/WebMediaStreamTrack.cpp b/third_party/WebKit/Source/platform/exported/WebMediaStreamTrack.cpp
index 9111c56..7f3468f 100644
--- a/third_party/WebKit/Source/platform/exported/WebMediaStreamTrack.cpp
+++ b/third_party/WebKit/Source/platform/exported/WebMediaStreamTrack.cpp
@@ -30,6 +30,8 @@
 #include "public/platform/WebMediaStream.h"
 #include "public/platform/WebMediaStreamSource.h"
 #include "public/platform/WebString.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
@@ -37,7 +39,7 @@
 
     class TrackDataContainer : public MediaStreamComponent::TrackData {
     public:
-        explicit TrackDataContainer(PassOwnPtr<WebMediaStreamTrack::TrackData> extraData)
+        explicit TrackDataContainer(std::unique_ptr<WebMediaStreamTrack::TrackData> extraData)
             : m_extraData(std::move(extraData))
         {
         }
@@ -49,7 +51,7 @@
         }
 
     private:
-        OwnPtr<WebMediaStreamTrack::TrackData> m_extraData;
+        std::unique_ptr<WebMediaStreamTrack::TrackData> m_extraData;
 };
 
 } // namespace
@@ -121,7 +123,7 @@
 {
     ASSERT(!m_private.isNull());
 
-    m_private->setTrackData(adoptPtr(new TrackDataContainer(adoptPtr(extraData))));
+    m_private->setTrackData(wrapUnique(new TrackDataContainer(wrapUnique(extraData))));
 }
 
 void WebMediaStreamTrack::setSourceProvider(WebAudioSourceProvider* provider)
diff --git a/third_party/WebKit/Source/platform/exported/WebMediaStreamTrackSourcesRequest.cpp b/third_party/WebKit/Source/platform/exported/WebMediaStreamTrackSourcesRequest.cpp
index 8e9b69b..700e14c7 100644
--- a/third_party/WebKit/Source/platform/exported/WebMediaStreamTrackSourcesRequest.cpp
+++ b/third_party/WebKit/Source/platform/exported/WebMediaStreamTrackSourcesRequest.cpp
@@ -28,7 +28,6 @@
 #include "platform/mediastream/MediaStreamTrackSourcesRequest.h"
 #include "platform/weborigin/SecurityOrigin.h"
 #include "public/platform/WebSourceInfo.h"
-#include "wtf/PassOwnPtr.h"
 #include "wtf/text/WTFString.h"
 
 namespace blink {
diff --git a/third_party/WebKit/Source/platform/exported/WebPrerender.cpp b/third_party/WebKit/Source/platform/exported/WebPrerender.cpp
index f7d33ee..5f23fca 100644
--- a/third_party/WebKit/Source/platform/exported/WebPrerender.cpp
+++ b/third_party/WebKit/Source/platform/exported/WebPrerender.cpp
@@ -32,6 +32,8 @@
 
 #include "platform/Prerender.h"
 #include "wtf/PassRefPtr.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
@@ -47,11 +49,11 @@
 
 private:
     explicit ExtraDataContainer(WebPrerender::ExtraData* extraData)
-        : m_extraData(adoptPtr(extraData))
+        : m_extraData(wrapUnique(extraData))
     {
     }
 
-    OwnPtr<WebPrerender::ExtraData> m_extraData;
+    std::unique_ptr<WebPrerender::ExtraData> m_extraData;
 };
 
 } // namespace
diff --git a/third_party/WebKit/Source/platform/exported/WebRTCSessionDescriptionRequest.cpp b/third_party/WebKit/Source/platform/exported/WebRTCSessionDescriptionRequest.cpp
index 119fff05..513c92d7 100644
--- a/third_party/WebKit/Source/platform/exported/WebRTCSessionDescriptionRequest.cpp
+++ b/third_party/WebKit/Source/platform/exported/WebRTCSessionDescriptionRequest.cpp
@@ -32,7 +32,6 @@
 
 #include "platform/mediastream/RTCSessionDescriptionRequest.h"
 #include "public/platform/WebRTCSessionDescription.h"
-#include "wtf/PassOwnPtr.h"
 #include "wtf/text/WTFString.h"
 
 namespace blink {
diff --git a/third_party/WebKit/Source/platform/exported/WebRTCStatsRequest.cpp b/third_party/WebKit/Source/platform/exported/WebRTCStatsRequest.cpp
index 10452de7..db537f4 100644
--- a/third_party/WebKit/Source/platform/exported/WebRTCStatsRequest.cpp
+++ b/third_party/WebKit/Source/platform/exported/WebRTCStatsRequest.cpp
@@ -35,7 +35,6 @@
 #include "public/platform/WebMediaStream.h"
 #include "public/platform/WebMediaStreamTrack.h"
 #include "public/platform/WebRTCStatsResponse.h"
-#include "wtf/PassOwnPtr.h"
 
 namespace blink {
 
diff --git a/third_party/WebKit/Source/platform/exported/WebRTCStatsResponse.cpp b/third_party/WebKit/Source/platform/exported/WebRTCStatsResponse.cpp
index e3ad7e38..dd47529 100644
--- a/third_party/WebKit/Source/platform/exported/WebRTCStatsResponse.cpp
+++ b/third_party/WebKit/Source/platform/exported/WebRTCStatsResponse.cpp
@@ -25,7 +25,6 @@
 #include "public/platform/WebRTCStatsResponse.h"
 
 #include "platform/mediastream/RTCStatsResponseBase.h"
-#include "wtf/PassOwnPtr.h"
 #include "wtf/text/WTFString.h"
 
 namespace blink {
diff --git a/third_party/WebKit/Source/platform/exported/WebRTCVoidRequest.cpp b/third_party/WebKit/Source/platform/exported/WebRTCVoidRequest.cpp
index 1fdc7b4f..166c6cc 100644
--- a/third_party/WebKit/Source/platform/exported/WebRTCVoidRequest.cpp
+++ b/third_party/WebKit/Source/platform/exported/WebRTCVoidRequest.cpp
@@ -31,7 +31,6 @@
 #include "public/platform/WebRTCVoidRequest.h"
 
 #include "platform/mediastream/RTCVoidRequest.h"
-#include "wtf/PassOwnPtr.h"
 #include "wtf/text/WTFString.h"
 
 namespace blink {
diff --git a/third_party/WebKit/Source/platform/exported/WebScrollbarThemeGeometryNative.cpp b/third_party/WebKit/Source/platform/exported/WebScrollbarThemeGeometryNative.cpp
index 5f39f1b..1cc919f 100644
--- a/third_party/WebKit/Source/platform/exported/WebScrollbarThemeGeometryNative.cpp
+++ b/third_party/WebKit/Source/platform/exported/WebScrollbarThemeGeometryNative.cpp
@@ -28,12 +28,14 @@
 #include "platform/exported/WebScrollbarThemeClientImpl.h"
 #include "platform/scroll/ScrollbarTheme.h"
 #include "public/platform/WebScrollbar.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
-PassOwnPtr<WebScrollbarThemeGeometryNative> WebScrollbarThemeGeometryNative::create(ScrollbarTheme& theme)
+std::unique_ptr<WebScrollbarThemeGeometryNative> WebScrollbarThemeGeometryNative::create(ScrollbarTheme& theme)
 {
-    return adoptPtr(new WebScrollbarThemeGeometryNative(theme));
+    return wrapUnique(new WebScrollbarThemeGeometryNative(theme));
 }
 
 WebScrollbarThemeGeometryNative::WebScrollbarThemeGeometryNative(ScrollbarTheme& theme)
diff --git a/third_party/WebKit/Source/platform/exported/WebScrollbarThemeGeometryNative.h b/third_party/WebKit/Source/platform/exported/WebScrollbarThemeGeometryNative.h
index b280628..cb0ca43 100644
--- a/third_party/WebKit/Source/platform/exported/WebScrollbarThemeGeometryNative.h
+++ b/third_party/WebKit/Source/platform/exported/WebScrollbarThemeGeometryNative.h
@@ -31,7 +31,7 @@
 #include "public/platform/WebScrollbarThemeGeometry.h"
 #include "wtf/Allocator.h"
 #include "wtf/Noncopyable.h"
-#include "wtf/PassOwnPtr.h"
+#include <memory>
 
 namespace blink {
 
@@ -42,7 +42,7 @@
     USING_FAST_MALLOC(WebScrollbarThemeGeometryNative);
     WTF_MAKE_NONCOPYABLE(WebScrollbarThemeGeometryNative);
 public:
-    static PassOwnPtr<WebScrollbarThemeGeometryNative> create(ScrollbarTheme&);
+    static std::unique_ptr<WebScrollbarThemeGeometryNative> create(ScrollbarTheme&);
 
     bool hasButtons(WebScrollbar*) override;
     bool hasThumb(WebScrollbar*) override;
diff --git a/third_party/WebKit/Source/platform/exported/WebURLRequest.cpp b/third_party/WebKit/Source/platform/exported/WebURLRequest.cpp
index c2592d82..54776d2 100644
--- a/third_party/WebKit/Source/platform/exported/WebURLRequest.cpp
+++ b/third_party/WebKit/Source/platform/exported/WebURLRequest.cpp
@@ -39,6 +39,8 @@
 #include "public/platform/WebURL.h"
 #include "wtf/Allocator.h"
 #include "wtf/Noncopyable.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
@@ -54,11 +56,11 @@
 
 private:
     explicit ExtraDataContainer(WebURLRequest::ExtraData* extraData)
-        : m_extraData(adoptPtr(extraData))
+        : m_extraData(wrapUnique(extraData))
     {
     }
 
-    OwnPtr<WebURLRequest::ExtraData> m_extraData;
+    std::unique_ptr<WebURLRequest::ExtraData> m_extraData;
 };
 
 } // namespace
diff --git a/third_party/WebKit/Source/platform/exported/WebURLResponse.cpp b/third_party/WebKit/Source/platform/exported/WebURLResponse.cpp
index 1766df4..2dda37a 100644
--- a/third_party/WebKit/Source/platform/exported/WebURLResponse.cpp
+++ b/third_party/WebKit/Source/platform/exported/WebURLResponse.cpp
@@ -39,7 +39,9 @@
 #include "public/platform/WebURL.h"
 #include "public/platform/WebURLLoadTiming.h"
 #include "wtf/Allocator.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/RefPtr.h"
+#include <memory>
 
 namespace blink {
 
@@ -55,11 +57,11 @@
 
 private:
     explicit ExtraDataContainer(WebURLResponse::ExtraData* extraData)
-        : m_extraData(adoptPtr(extraData))
+        : m_extraData(wrapUnique(extraData))
     {
     }
 
-    OwnPtr<WebURLResponse::ExtraData> m_extraData;
+    std::unique_ptr<WebURLResponse::ExtraData> m_extraData;
 };
 
 } // namespace
diff --git a/third_party/WebKit/Source/platform/fonts/FontCache.cpp b/third_party/WebKit/Source/platform/fonts/FontCache.cpp
index ac4a0eb3..3a7a8db2 100644
--- a/third_party/WebKit/Source/platform/fonts/FontCache.cpp
+++ b/third_party/WebKit/Source/platform/fonts/FontCache.cpp
@@ -50,10 +50,12 @@
 #include "public/platform/Platform.h"
 #include "wtf/HashMap.h"
 #include "wtf/ListHashSet.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/StdLibExtras.h"
 #include "wtf/Vector.h"
 #include "wtf/text/AtomicStringHash.h"
 #include "wtf/text/StringHash.h"
+#include <memory>
 
 using namespace WTF;
 
@@ -67,9 +69,9 @@
 }
 #endif // !OS(WIN) && !OS(LINUX)
 
-typedef HashMap<unsigned, OwnPtr<FontPlatformData>, WTF::IntHash<unsigned>, WTF::UnsignedWithZeroKeyHashTraits<unsigned>> SizedFontPlatformDataSet;
+typedef HashMap<unsigned, std::unique_ptr<FontPlatformData>, WTF::IntHash<unsigned>, WTF::UnsignedWithZeroKeyHashTraits<unsigned>> SizedFontPlatformDataSet;
 typedef HashMap<FontCacheKey, SizedFontPlatformDataSet, FontCacheKeyHash, FontCacheKeyTraits> FontPlatformDataCache;
-typedef HashMap<FallbackListCompositeKey, OwnPtr<ShapeCache>, FallbackListCompositeKeyHash, FallbackListCompositeKeyTraits> FallbackListShaperCache;
+typedef HashMap<FallbackListCompositeKey, std::unique_ptr<ShapeCache>, FallbackListCompositeKeyHash, FallbackListCompositeKeyTraits> FallbackListShaperCache;
 
 static FontPlatformDataCache* gFontPlatformDataCache = nullptr;
 static FallbackListShaperCache* gFallbackListShaperCache = nullptr;
@@ -118,7 +120,7 @@
         // Take a different size instance of the same font before adding an entry to |sizedFont|.
         FontPlatformData* anotherSize = wasEmpty ? nullptr : sizedFonts->begin()->value.get();
         auto addResult = sizedFonts->add(roundedSize, nullptr);
-        OwnPtr<FontPlatformData>* found = &addResult.storedValue->value;
+        std::unique_ptr<FontPlatformData>* found = &addResult.storedValue->value;
         if (addResult.isNewEntry) {
             if (wasEmpty)
                 *found = createFontPlatformData(fontDescription, creationParams, size);
@@ -141,19 +143,19 @@
         if (result) {
             // Cache the result under the old name.
             auto adding = &gFontPlatformDataCache->add(key, SizedFontPlatformDataSet()).storedValue->value;
-            adding->set(roundedSize, adoptPtr(new FontPlatformData(*result)));
+            adding->set(roundedSize, wrapUnique(new FontPlatformData(*result)));
         }
     }
 
     return result;
 }
 
-PassOwnPtr<FontPlatformData> FontCache::scaleFontPlatformData(const FontPlatformData& fontPlatformData, const FontDescription& fontDescription, const FontFaceCreationParams& creationParams, float fontSize)
+std::unique_ptr<FontPlatformData> FontCache::scaleFontPlatformData(const FontPlatformData& fontPlatformData, const FontDescription& fontDescription, const FontFaceCreationParams& creationParams, float fontSize)
 {
 #if OS(MACOSX)
     return createFontPlatformData(fontDescription, creationParams, fontSize);
 #else
-    return adoptPtr(new FontPlatformData(fontPlatformData, fontSize));
+    return wrapUnique(new FontPlatformData(fontPlatformData, fontSize));
 #endif
 }
 
@@ -166,7 +168,7 @@
     ShapeCache* result = nullptr;
     if (it == gFallbackListShaperCache->end()) {
         result = new ShapeCache();
-        gFallbackListShaperCache->set(key, adoptPtr(result));
+        gFallbackListShaperCache->set(key, wrapUnique(result));
     } else {
         result = it->value.get();
     }
diff --git a/third_party/WebKit/Source/platform/fonts/FontCache.h b/third_party/WebKit/Source/platform/fonts/FontCache.h
index 52bb119..189d3e0 100644
--- a/third_party/WebKit/Source/platform/fonts/FontCache.h
+++ b/third_party/WebKit/Source/platform/fonts/FontCache.h
@@ -44,6 +44,7 @@
 #include "wtf/text/Unicode.h"
 #include "wtf/text/WTFString.h"
 #include <limits.h>
+#include <memory>
 
 #include "SkFontMgr.h"
 
@@ -172,8 +173,8 @@
     FontPlatformData* getFontPlatformData(const FontDescription&, const FontFaceCreationParams&, bool checkingAlternateName = false);
 
     // These methods are implemented by each platform.
-    PassOwnPtr<FontPlatformData> createFontPlatformData(const FontDescription&, const FontFaceCreationParams&, float fontSize);
-    PassOwnPtr<FontPlatformData> scaleFontPlatformData(const FontPlatformData&, const FontDescription&, const FontFaceCreationParams&, float fontSize);
+    std::unique_ptr<FontPlatformData> createFontPlatformData(const FontDescription&, const FontFaceCreationParams&, float fontSize);
+    std::unique_ptr<FontPlatformData> scaleFontPlatformData(const FontPlatformData&, const FontDescription&, const FontFaceCreationParams&, float fontSize);
 
     // Implemented on skia platforms.
     PassRefPtr<SkTypeface> createTypeface(const FontDescription&, const FontFaceCreationParams&, CString& name);
diff --git a/third_party/WebKit/Source/platform/fonts/FontCustomPlatformData.cpp b/third_party/WebKit/Source/platform/fonts/FontCustomPlatformData.cpp
index 5b80c62..c38d495f 100644
--- a/third_party/WebKit/Source/platform/fonts/FontCustomPlatformData.cpp
+++ b/third_party/WebKit/Source/platform/fonts/FontCustomPlatformData.cpp
@@ -39,7 +39,8 @@
 #include "platform/fonts/WebFontDecoder.h"
 #include "third_party/skia/include/core/SkStream.h"
 #include "third_party/skia/include/core/SkTypeface.h"
-#include "wtf/PassOwnPtr.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
@@ -56,7 +57,7 @@
     return FontPlatformData(m_typeface.get(), "", size, bold && !m_typeface->isBold(), italic && !m_typeface->isItalic(), orientation);
 }
 
-PassOwnPtr<FontCustomPlatformData> FontCustomPlatformData::create(SharedBuffer* buffer, String& otsParseMessage)
+std::unique_ptr<FontCustomPlatformData> FontCustomPlatformData::create(SharedBuffer* buffer, String& otsParseMessage)
 {
     DCHECK(buffer);
     WebFontDecoder decoder;
@@ -65,7 +66,7 @@
         otsParseMessage = decoder.getErrorString();
         return nullptr;
     }
-    return adoptPtr(new FontCustomPlatformData(typeface.release()));
+    return wrapUnique(new FontCustomPlatformData(typeface.release()));
 }
 
 bool FontCustomPlatformData::supportsFormat(const String& format)
diff --git a/third_party/WebKit/Source/platform/fonts/FontCustomPlatformData.h b/third_party/WebKit/Source/platform/fonts/FontCustomPlatformData.h
index dc11a4c..022879b 100644
--- a/third_party/WebKit/Source/platform/fonts/FontCustomPlatformData.h
+++ b/third_party/WebKit/Source/platform/fonts/FontCustomPlatformData.h
@@ -39,6 +39,7 @@
 #include "wtf/Noncopyable.h"
 #include "wtf/RefPtr.h"
 #include "wtf/text/WTFString.h"
+#include <memory>
 
 class SkTypeface;
 
@@ -51,7 +52,7 @@
     USING_FAST_MALLOC(FontCustomPlatformData);
     WTF_MAKE_NONCOPYABLE(FontCustomPlatformData);
 public:
-    static PassOwnPtr<FontCustomPlatformData> create(SharedBuffer*, String& otsParseMessage);
+    static std::unique_ptr<FontCustomPlatformData> create(SharedBuffer*, String& otsParseMessage);
     ~FontCustomPlatformData();
 
     FontPlatformData fontPlatformData(float size, bool bold, bool italic, FontOrientation = FontOrientation::Horizontal);
diff --git a/third_party/WebKit/Source/platform/fonts/GlyphMetricsMap.h b/third_party/WebKit/Source/platform/fonts/GlyphMetricsMap.h
index b5e412d..f4225f0 100644
--- a/third_party/WebKit/Source/platform/fonts/GlyphMetricsMap.h
+++ b/third_party/WebKit/Source/platform/fonts/GlyphMetricsMap.h
@@ -34,9 +34,9 @@
 #include "wtf/Allocator.h"
 #include "wtf/Assertions.h"
 #include "wtf/HashMap.h"
-#include "wtf/OwnPtr.h"
-#include "wtf/PassOwnPtr.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/text/Unicode.h"
+#include <memory>
 
 namespace blink {
 
@@ -93,7 +93,7 @@
 
     bool m_filledPrimaryPage;
     GlyphMetricsPage m_primaryPage; // We optimize for the page that contains glyph indices 0-255.
-    OwnPtr<HashMap<int, OwnPtr<GlyphMetricsPage>>> m_pages;
+    std::unique_ptr<HashMap<int, std::unique_ptr<GlyphMetricsPage>>> m_pages;
 };
 
 template<> inline float GlyphMetricsMap<float>::unknownMetrics()
@@ -119,10 +119,10 @@
             if (page)
                 return page;
         } else {
-            m_pages = adoptPtr(new HashMap<int, OwnPtr<GlyphMetricsPage>>);
+            m_pages = wrapUnique(new HashMap<int, std::unique_ptr<GlyphMetricsPage>>);
         }
         page = new GlyphMetricsPage;
-        m_pages->set(pageNumber, adoptPtr(page));
+        m_pages->set(pageNumber, wrapUnique(page));
     }
 
     // Fill in the whole page with the unknown glyph information.
diff --git a/third_party/WebKit/Source/platform/fonts/GlyphPageTreeNode.cpp b/third_party/WebKit/Source/platform/fonts/GlyphPageTreeNode.cpp
index d0b99cf..46238b2 100644
--- a/third_party/WebKit/Source/platform/fonts/GlyphPageTreeNode.cpp
+++ b/third_party/WebKit/Source/platform/fonts/GlyphPageTreeNode.cpp
@@ -31,9 +31,11 @@
 #include "platform/fonts/SegmentedFontData.h"
 #include "platform/fonts/SimpleFontData.h"
 #include "platform/fonts/opentype/OpenTypeVerticalData.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/text/CString.h"
 #include "wtf/text/CharacterNames.h"
 #include "wtf/text/WTFString.h"
+#include <memory>
 #include <stdio.h>
 
 namespace blink {
@@ -355,7 +357,7 @@
 #if ENABLE(ASSERT)
     child->m_pageNumber = m_pageNumber;
 #endif
-    m_children.set(fontData, adoptPtr(child));
+    m_children.set(fontData, wrapUnique(child));
     fontData->setMaxGlyphPageTreeLevel(max(fontData->maxGlyphPageTreeLevel(), child->m_level));
     child->initializePage(fontData, pageNumber);
     return child;
@@ -369,7 +371,7 @@
         return m_systemFallbackChild.get();
 
     SystemFallbackGlyphPageTreeNode* child = new SystemFallbackGlyphPageTreeNode(this);
-    m_systemFallbackChild = adoptPtr(child);
+    m_systemFallbackChild = wrapUnique(child);
 #if ENABLE(ASSERT)
     child->m_pageNumber = m_pageNumber;
 #endif
@@ -382,7 +384,7 @@
         return;
 
     // Prune any branch that contains this FontData.
-    if (OwnPtr<GlyphPageTreeNode> node = m_children.take(fontData)) {
+    if (std::unique_ptr<GlyphPageTreeNode> node = m_children.take(fontData)) {
         if (unsigned customFontCount = node->m_customFontCount + 1) {
             for (GlyphPageTreeNode* curr = this; curr; curr = curr->m_parent)
                 curr->m_customFontCount -= customFontCount;
@@ -411,7 +413,7 @@
         m_page->removePerGlyphFontData(fontData);
 
     // Prune any branch that contains this FontData.
-    if (OwnPtr<GlyphPageTreeNode> node = m_children.take(fontData)) {
+    if (std::unique_ptr<GlyphPageTreeNode> node = m_children.take(fontData)) {
         if (unsigned customFontCount = node->m_customFontCount) {
             for (GlyphPageTreeNode* curr = this; curr; curr = curr->m_parent)
                 curr->m_customFontCount -= customFontCount;
diff --git a/third_party/WebKit/Source/platform/fonts/GlyphPageTreeNode.h b/third_party/WebKit/Source/platform/fonts/GlyphPageTreeNode.h
index 5926e2b..3954e36 100644
--- a/third_party/WebKit/Source/platform/fonts/GlyphPageTreeNode.h
+++ b/third_party/WebKit/Source/platform/fonts/GlyphPageTreeNode.h
@@ -32,11 +32,10 @@
 #include "platform/fonts/GlyphPage.h"
 #include "wtf/Allocator.h"
 #include "wtf/HashMap.h"
-#include "wtf/OwnPtr.h"
 #include "wtf/PassRefPtr.h"
 #include "wtf/text/Unicode.h"
+#include <memory>
 #include <string.h>
-
 #include <unicode/uscript.h>
 
 namespace blink {
@@ -134,9 +133,9 @@
     static GlyphPageTreeNode* pageZeroRoot;
 
     RefPtr<GlyphPage> m_page;
-    typedef HashMap<const FontData*, OwnPtr<GlyphPageTreeNode>> GlyphPageTreeNodeMap;
+    typedef HashMap<const FontData*, std::unique_ptr<GlyphPageTreeNode>> GlyphPageTreeNodeMap;
     GlyphPageTreeNodeMap m_children;
-    OwnPtr<SystemFallbackGlyphPageTreeNode> m_systemFallbackChild;
+    std::unique_ptr<SystemFallbackGlyphPageTreeNode> m_systemFallbackChild;
 };
 
 class PLATFORM_EXPORT SystemFallbackGlyphPageTreeNode : public GlyphPageTreeNodeBase {
diff --git a/third_party/WebKit/Source/platform/fonts/OrientationIterator.cpp b/third_party/WebKit/Source/platform/fonts/OrientationIterator.cpp
index fe03220..2f40b00 100644
--- a/third_party/WebKit/Source/platform/fonts/OrientationIterator.cpp
+++ b/third_party/WebKit/Source/platform/fonts/OrientationIterator.cpp
@@ -4,10 +4,12 @@
 
 #include "OrientationIterator.h"
 
+#include "wtf/PtrUtil.h"
+
 namespace blink {
 
 OrientationIterator::OrientationIterator(const UChar* buffer, unsigned bufferSize, FontOrientation runOrientation)
-    : m_utf16Iterator(adoptPtr(new UTF16TextIterator(buffer, bufferSize)))
+    : m_utf16Iterator(wrapUnique(new UTF16TextIterator(buffer, bufferSize)))
     , m_bufferSize(bufferSize)
     , m_atEnd(bufferSize == 0)
 {
diff --git a/third_party/WebKit/Source/platform/fonts/OrientationIterator.h b/third_party/WebKit/Source/platform/fonts/OrientationIterator.h
index 30ec83b..a67650a 100644
--- a/third_party/WebKit/Source/platform/fonts/OrientationIterator.h
+++ b/third_party/WebKit/Source/platform/fonts/OrientationIterator.h
@@ -10,6 +10,7 @@
 #include "platform/fonts/UTF16TextIterator.h"
 #include "wtf/Allocator.h"
 #include "wtf/Noncopyable.h"
+#include <memory>
 
 namespace blink {
 
@@ -27,7 +28,7 @@
 
     bool consume(unsigned* orientationLimit, RenderOrientation*);
 private:
-    OwnPtr<UTF16TextIterator> m_utf16Iterator;
+    std::unique_ptr<UTF16TextIterator> m_utf16Iterator;
     unsigned m_bufferSize;
     bool m_atEnd;
 };
diff --git a/third_party/WebKit/Source/platform/fonts/SimpleFontData.cpp b/third_party/WebKit/Source/platform/fonts/SimpleFontData.cpp
index e18b729..efed5b90 100644
--- a/third_party/WebKit/Source/platform/fonts/SimpleFontData.cpp
+++ b/third_party/WebKit/Source/platform/fonts/SimpleFontData.cpp
@@ -38,9 +38,11 @@
 #include "platform/fonts/VDMXParser.h"
 #include "platform/geometry/FloatRect.h"
 #include "wtf/MathExtras.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/allocator/Partitions.h"
 #include "wtf/text/CharacterNames.h"
 #include "wtf/text/Unicode.h"
+#include <memory>
 #include <unicode/unorm.h>
 #include <unicode/utf16.h>
 
@@ -343,9 +345,9 @@
         || fontData->m_derivedFontData->verticalRightOrientation == this;
 }
 
-PassOwnPtr<SimpleFontData::DerivedFontData> SimpleFontData::DerivedFontData::create(bool forCustomFont)
+std::unique_ptr<SimpleFontData::DerivedFontData> SimpleFontData::DerivedFontData::create(bool forCustomFont)
 {
-    return adoptPtr(new DerivedFontData(forCustomFont));
+    return wrapUnique(new DerivedFontData(forCustomFont));
 }
 
 SimpleFontData::DerivedFontData::~DerivedFontData()
diff --git a/third_party/WebKit/Source/platform/fonts/SimpleFontData.h b/third_party/WebKit/Source/platform/fonts/SimpleFontData.h
index 1403a8e..9cbeb8b 100644
--- a/third_party/WebKit/Source/platform/fonts/SimpleFontData.h
+++ b/third_party/WebKit/Source/platform/fonts/SimpleFontData.h
@@ -35,9 +35,9 @@
 #include "platform/fonts/TypesettingFeatures.h"
 #include "platform/fonts/opentype/OpenTypeVerticalData.h"
 #include "platform/geometry/FloatRect.h"
-#include "wtf/OwnPtr.h"
-#include "wtf/PassOwnPtr.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/text/StringHash.h"
+#include <memory>
 
 namespace blink {
 
@@ -144,7 +144,7 @@
 
     FontPlatformData m_platformData;
 
-    mutable OwnPtr<GlyphMetricsMap<FloatRect>> m_glyphToBoundsMap;
+    mutable std::unique_ptr<GlyphMetricsMap<FloatRect>> m_glyphToBoundsMap;
     mutable GlyphMetricsMap<float> m_glyphToWidthMap;
 
     bool m_isTextOrientationFallback;
@@ -161,7 +161,7 @@
         USING_FAST_MALLOC(DerivedFontData);
         WTF_MAKE_NONCOPYABLE(DerivedFontData);
     public:
-        static PassOwnPtr<DerivedFontData> create(bool forCustomFont);
+        static std::unique_ptr<DerivedFontData> create(bool forCustomFont);
         ~DerivedFontData();
 
         bool forCustomFont;
@@ -177,7 +177,7 @@
         }
     };
 
-    mutable OwnPtr<DerivedFontData> m_derivedFontData;
+    mutable std::unique_ptr<DerivedFontData> m_derivedFontData;
 
     RefPtr<CustomFontData> m_customFontData;
 };
@@ -193,7 +193,7 @@
 
     bounds = platformBoundsForGlyph(glyph);
     if (!m_glyphToBoundsMap)
-        m_glyphToBoundsMap = adoptPtr(new GlyphMetricsMap<FloatRect>);
+        m_glyphToBoundsMap = wrapUnique(new GlyphMetricsMap<FloatRect>);
     m_glyphToBoundsMap->setMetricsForGlyph(glyph, bounds);
     return bounds;
 }
diff --git a/third_party/WebKit/Source/platform/fonts/SmallCapsIterator.cpp b/third_party/WebKit/Source/platform/fonts/SmallCapsIterator.cpp
index 2e13587..88fd1e5 100644
--- a/third_party/WebKit/Source/platform/fonts/SmallCapsIterator.cpp
+++ b/third_party/WebKit/Source/platform/fonts/SmallCapsIterator.cpp
@@ -4,12 +4,13 @@
 
 #include "SmallCapsIterator.h"
 
+#include "wtf/PtrUtil.h"
 #include <unicode/utypes.h>
 
 namespace blink {
 
 SmallCapsIterator::SmallCapsIterator(const UChar* buffer, unsigned bufferSize)
-    : m_utf16Iterator(adoptPtr(new UTF16TextIterator(buffer, bufferSize)))
+    : m_utf16Iterator(wrapUnique(new UTF16TextIterator(buffer, bufferSize)))
     , m_bufferSize(bufferSize)
     , m_nextUChar32(0)
     , m_atEnd(bufferSize == 0)
diff --git a/third_party/WebKit/Source/platform/fonts/SmallCapsIterator.h b/third_party/WebKit/Source/platform/fonts/SmallCapsIterator.h
index b689d3a..c262719 100644
--- a/third_party/WebKit/Source/platform/fonts/SmallCapsIterator.h
+++ b/third_party/WebKit/Source/platform/fonts/SmallCapsIterator.h
@@ -10,6 +10,7 @@
 #include "platform/fonts/UTF16TextIterator.h"
 #include "wtf/Allocator.h"
 #include "wtf/Noncopyable.h"
+#include <memory>
 
 namespace blink {
 
@@ -27,7 +28,7 @@
 
     bool consume(unsigned* capsLimit, SmallCapsBehavior*);
 private:
-    OwnPtr<UTF16TextIterator> m_utf16Iterator;
+    std::unique_ptr<UTF16TextIterator> m_utf16Iterator;
     unsigned m_bufferSize;
     UChar32 m_nextUChar32;
     bool m_atEnd;
diff --git a/third_party/WebKit/Source/platform/fonts/SymbolsIterator.cpp b/third_party/WebKit/Source/platform/fonts/SymbolsIterator.cpp
index 44dcceb..fa780125 100644
--- a/third_party/WebKit/Source/platform/fonts/SymbolsIterator.cpp
+++ b/third_party/WebKit/Source/platform/fonts/SymbolsIterator.cpp
@@ -4,6 +4,7 @@
 
 #include "SymbolsIterator.h"
 
+#include "wtf/PtrUtil.h"
 #include <unicode/uchar.h>
 #include <unicode/uniset.h>
 
@@ -12,7 +13,7 @@
 using namespace WTF::Unicode;
 
 SymbolsIterator::SymbolsIterator(const UChar* buffer, unsigned bufferSize)
-    : m_utf16Iterator(adoptPtr(new UTF16TextIterator(buffer, bufferSize)))
+    : m_utf16Iterator(wrapUnique(new UTF16TextIterator(buffer, bufferSize)))
     , m_bufferSize(bufferSize)
     , m_nextChar(0)
     , m_atEnd(bufferSize == 0)
diff --git a/third_party/WebKit/Source/platform/fonts/SymbolsIterator.h b/third_party/WebKit/Source/platform/fonts/SymbolsIterator.h
index db5ccc0..01dcdb5 100644
--- a/third_party/WebKit/Source/platform/fonts/SymbolsIterator.h
+++ b/third_party/WebKit/Source/platform/fonts/SymbolsIterator.h
@@ -11,6 +11,7 @@
 #include "platform/fonts/UTF16TextIterator.h"
 #include "wtf/Allocator.h"
 #include "wtf/Noncopyable.h"
+#include <memory>
 
 namespace blink {
 
@@ -25,7 +26,7 @@
 private:
     FontFallbackPriority fontFallbackPriorityForCharacter(UChar32);
 
-    OwnPtr<UTF16TextIterator> m_utf16Iterator;
+    std::unique_ptr<UTF16TextIterator> m_utf16Iterator;
     unsigned m_bufferSize;
     UChar32 m_nextChar;
     bool m_atEnd;
diff --git a/third_party/WebKit/Source/platform/fonts/WebFontDecoder.cpp b/third_party/WebKit/Source/platform/fonts/WebFontDecoder.cpp
index 06dc6cc..ff9ce7c2 100644
--- a/third_party/WebKit/Source/platform/fonts/WebFontDecoder.cpp
+++ b/third_party/WebKit/Source/platform/fonts/WebFontDecoder.cpp
@@ -34,6 +34,7 @@
 #include "platform/SharedBuffer.h"
 #include "platform/TraceEvent.h"
 #include "platform/fonts/FontCache.h"
+#include "platform/graphics/skia/SkiaUtils.h"
 #include "public/platform/Platform.h"
 #include "third_party/harfbuzz-ng/src/hb.h"
 #include "third_party/ots/include/ots-memory-stream.h"
@@ -191,7 +192,7 @@
 #if OS(WIN)
     RefPtr<SkTypeface> typeface = adoptRef(FontCache::fontCache()->fontManager()->createFromStream(stream));
 #else
-    RefPtr<SkTypeface> typeface = adoptRef(SkTypeface::CreateFromStream(stream));
+    RefPtr<SkTypeface> typeface = fromSkSp(SkTypeface::MakeFromStream(stream));
 #endif
     if (!typeface) {
         setErrorString("Not a valid font data");
diff --git a/third_party/WebKit/Source/platform/fonts/linux/FontPlatformDataLinux.cpp b/third_party/WebKit/Source/platform/fonts/linux/FontPlatformDataLinux.cpp
index ab507c9..1f43d31c 100644
--- a/third_party/WebKit/Source/platform/fonts/linux/FontPlatformDataLinux.cpp
+++ b/third_party/WebKit/Source/platform/fonts/linux/FontPlatformDataLinux.cpp
@@ -29,6 +29,7 @@
  */
 
 #include "platform/fonts/FontPlatformData.h"
+#include "platform/graphics/skia/SkiaUtils.h"
 
 #include "SkTypeface.h"
 
@@ -40,7 +41,7 @@
 
     const float ts = m_textSize >= 0 ? m_textSize : 12;
     paint->setTextSize(SkFloatToScalar(ts));
-    paint->setTypeface(m_typeface.get());
+    paint->setTypeface(toSkSp(m_typeface));
     paint->setFakeBoldText(m_syntheticBold);
     paint->setTextSkewX(m_syntheticItalic ? -SK_Scalar1 / 4 : 0);
 }
diff --git a/third_party/WebKit/Source/platform/fonts/mac/FontCacheMac.mm b/third_party/WebKit/Source/platform/fonts/mac/FontCacheMac.mm
index 26ff434..3f14d83 100644
--- a/third_party/WebKit/Source/platform/fonts/mac/FontCacheMac.mm
+++ b/third_party/WebKit/Source/platform/fonts/mac/FontCacheMac.mm
@@ -41,7 +41,9 @@
 #include "public/platform/WebTaskRunner.h"
 #include "public/platform/WebTraceLocation.h"
 #include "wtf/Functional.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/StdLibExtras.h"
+#include <memory>
 
 // Forward declare Mac SPIs.
 // Request for public API: rdar://13803570
@@ -202,7 +204,7 @@
     return getFontData(fontDescription, lucidaGrandeStr, false, shouldRetain);
 }
 
-PassOwnPtr<FontPlatformData> FontCache::createFontPlatformData(const FontDescription& fontDescription,
+std::unique_ptr<FontPlatformData> FontCache::createFontPlatformData(const FontDescription& fontDescription,
     const FontFaceCreationParams& creationParams, float fontSize)
 {
     NSFontTraitMask traits = fontDescription.style() ? NSFontItalicTrait : 0;
@@ -232,7 +234,7 @@
     // Out-of-process loading occurs for registered fonts stored in non-system locations.
     // When loading fails, we do not want to use the returned FontPlatformData since it will not have
     // a valid SkTypeface.
-    OwnPtr<FontPlatformData> platformData = adoptPtr(new FontPlatformData(platformFont, size, syntheticBold, syntheticItalic, fontDescription.orientation()));
+    std::unique_ptr<FontPlatformData> platformData = wrapUnique(new FontPlatformData(platformFont, size, syntheticBold, syntheticItalic, fontDescription.orientation()));
     if (!platformData->typeface()) {
         return nullptr;
     }
diff --git a/third_party/WebKit/Source/platform/fonts/mac/FontPlatformDataMac.mm b/third_party/WebKit/Source/platform/fonts/mac/FontPlatformDataMac.mm
index bf1be45..cb6f5e3 100644
--- a/third_party/WebKit/Source/platform/fonts/mac/FontPlatformDataMac.mm
+++ b/third_party/WebKit/Source/platform/fonts/mac/FontPlatformDataMac.mm
@@ -26,6 +26,7 @@
 #import "platform/LayoutTestSupport.h"
 #import "platform/fonts/Font.h"
 #import "platform/fonts/shaping/HarfBuzzFace.h"
+#import "platform/graphics/skia/SkiaUtils.h"
 #import "public/platform/Platform.h"
 #import "public/platform/mac/WebSandboxSupport.h"
 #import "third_party/skia/include/ports/SkTypeface_mac.h"
@@ -132,7 +133,7 @@
     paint->setEmbeddedBitmapText(false);
     const float ts = m_textSize >= 0 ? m_textSize : 12;
     paint->setTextSize(SkFloatToScalar(ts));
-    paint->setTypeface(typeface());
+    paint->setTypeface(toSkSp(m_typeface));
     paint->setFakeBoldText(m_syntheticBold);
     paint->setTextSkewX(m_syntheticItalic ? -SK_Scalar1 / 4 : 0);
     paint->setLCDRenderText(shouldSmoothFonts);
diff --git a/third_party/WebKit/Source/platform/fonts/shaping/CachingWordShaper.h b/third_party/WebKit/Source/platform/fonts/shaping/CachingWordShaper.h
index dcab4f03..51d75cc 100644
--- a/third_party/WebKit/Source/platform/fonts/shaping/CachingWordShaper.h
+++ b/third_party/WebKit/Source/platform/fonts/shaping/CachingWordShaper.h
@@ -30,7 +30,6 @@
 #include "platform/geometry/FloatRect.h"
 #include "platform/text/TextRun.h"
 #include "wtf/Allocator.h"
-#include "wtf/OwnPtr.h"
 #include "wtf/PassRefPtr.h"
 
 namespace blink {
diff --git a/third_party/WebKit/Source/platform/fonts/shaping/CachingWordShaperTest.cpp b/third_party/WebKit/Source/platform/fonts/shaping/CachingWordShaperTest.cpp
index de852dd..4475685 100644
--- a/third_party/WebKit/Source/platform/fonts/shaping/CachingWordShaperTest.cpp
+++ b/third_party/WebKit/Source/platform/fonts/shaping/CachingWordShaperTest.cpp
@@ -10,6 +10,8 @@
 #include "platform/fonts/shaping/CachingWordShapeIterator.h"
 #include "platform/fonts/shaping/ShapeResultTestInfo.h"
 #include "testing/gtest/include/gtest/gtest.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
@@ -26,13 +28,13 @@
         font.update(nullptr);
         ASSERT_TRUE(font.canShapeWordByWord());
         fallbackFonts = nullptr;
-        cache = adoptPtr(new ShapeCache());
+        cache = wrapUnique(new ShapeCache());
     }
 
     FontCachePurgePreventer fontCachePurgePreventer;
     FontDescription fontDescription;
     Font font;
-    OwnPtr<ShapeCache> cache;
+    std::unique_ptr<ShapeCache> cache;
     HashSet<const SimpleFontData*>* fallbackFonts;
     unsigned startIndex = 0;
     unsigned numGlyphs = 0;
@@ -117,7 +119,7 @@
     GlyphBuffer glyphBuffer;
     shaper.fillGlyphBuffer(&font, textRun, fallbackFonts, &glyphBuffer, 0, 3);
 
-    OwnPtr<ShapeCache> referenceCache = adoptPtr(new ShapeCache());
+    std::unique_ptr<ShapeCache> referenceCache = wrapUnique(new ShapeCache());
     CachingWordShaper referenceShaper(referenceCache.get());
     GlyphBuffer referenceGlyphBuffer;
     font.setCanShapeWordByWordForTesting(false);
@@ -142,7 +144,7 @@
     GlyphBuffer glyphBuffer;
     shaper.fillGlyphBuffer(&font, textRun, fallbackFonts, &glyphBuffer, 1, 6);
 
-    OwnPtr<ShapeCache> referenceCache = adoptPtr(new ShapeCache());
+    std::unique_ptr<ShapeCache> referenceCache = wrapUnique(new ShapeCache());
     CachingWordShaper referenceShaper(referenceCache.get());
     GlyphBuffer referenceGlyphBuffer;
     font.setCanShapeWordByWordForTesting(false);
diff --git a/third_party/WebKit/Source/platform/fonts/shaping/HarfBuzzFace.cpp b/third_party/WebKit/Source/platform/fonts/shaping/HarfBuzzFace.cpp
index 1115eff..3dffa865 100644
--- a/third_party/WebKit/Source/platform/fonts/shaping/HarfBuzzFace.cpp
+++ b/third_party/WebKit/Source/platform/fonts/shaping/HarfBuzzFace.cpp
@@ -37,6 +37,8 @@
 #include "platform/fonts/shaping/HarfBuzzShaper.h"
 #include "wtf/HashMap.h"
 #include "wtf/MathExtras.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 #include <hb-ot.h>
 #include <hb.h>
@@ -112,11 +114,11 @@
 private:
     explicit HbFontCacheEntry(hb_font_t* font)
         : m_hbFont(HbFontUniquePtr(font))
-        , m_hbFontData(adoptPtr(new HarfBuzzFontData()))
+        , m_hbFontData(wrapUnique(new HarfBuzzFontData()))
     { };
 
     HbFontUniquePtr m_hbFont;
-    OwnPtr<HarfBuzzFontData> m_hbFontData;
+    std::unique_ptr<HarfBuzzFontData> m_hbFontData;
 };
 
 typedef HashMap<uint64_t, RefPtr<HbFontCacheEntry>, WTF::IntHash<uint64_t>, WTF::UnsignedWithZeroKeyHashTraits<uint64_t>> HarfBuzzFontCache;
diff --git a/third_party/WebKit/Source/platform/fonts/shaping/HarfBuzzShaper.cpp b/third_party/WebKit/Source/platform/fonts/shaping/HarfBuzzShaper.cpp
index 0999e94..fe7bd7d 100644
--- a/third_party/WebKit/Source/platform/fonts/shaping/HarfBuzzShaper.cpp
+++ b/third_party/WebKit/Source/platform/fonts/shaping/HarfBuzzShaper.cpp
@@ -45,10 +45,11 @@
 #include "platform/text/TextBreakIterator.h"
 #include "wtf/Compiler.h"
 #include "wtf/MathExtras.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/text/Unicode.h"
-
 #include <algorithm>
 #include <hb.h>
+#include <memory>
 #include <unicode/uchar.h>
 #include <unicode/uscript.h>
 
@@ -114,7 +115,7 @@
     : Shaper(font, run)
     , m_normalizedBufferLength(0)
 {
-    m_normalizedBuffer = adoptArrayPtr(new UChar[m_textRun.length() + 1]);
+    m_normalizedBuffer = wrapArrayUnique(new UChar[m_textRun.length() + 1]);
     normalizeCharacters(m_textRun, m_textRun.length(), m_normalizedBuffer.get(), &m_normalizedBufferLength);
     setFontFeatures();
 }
@@ -467,7 +468,7 @@
             ShapeResult::RunInfo* run = new ShapeResult::RunInfo(currentFont,
                 direction, ICUScriptToHBScript(currentRunScript),
                 startIndex, numGlyphsToInsert, numCharacters);
-            shapeResult->insertRun(adoptPtr(run), lastChangePosition,
+            shapeResult->insertRun(wrapUnique(run), lastChangePosition,
                 numGlyphsToInsert,
                 harfBuzzBuffer);
         }
@@ -681,7 +682,7 @@
     const TextRun& textRun, float positionOffset, unsigned count)
 {
     const SimpleFontData* fontData = font->primaryFont();
-    OwnPtr<ShapeResult::RunInfo> run = adoptPtr(new ShapeResult::RunInfo(fontData,
+    std::unique_ptr<ShapeResult::RunInfo> run = wrapUnique(new ShapeResult::RunInfo(fontData,
         // Tab characters are always LTR or RTL, not TTB, even when isVerticalAnyUpright().
         textRun.rtl() ? HB_DIRECTION_RTL : HB_DIRECTION_LTR,
         HB_SCRIPT_COMMON, 0, count, count));
diff --git a/third_party/WebKit/Source/platform/fonts/shaping/HarfBuzzShaper.h b/third_party/WebKit/Source/platform/fonts/shaping/HarfBuzzShaper.h
index 2da39dc..40f2936 100644
--- a/third_party/WebKit/Source/platform/fonts/shaping/HarfBuzzShaper.h
+++ b/third_party/WebKit/Source/platform/fonts/shaping/HarfBuzzShaper.h
@@ -41,12 +41,10 @@
 #include "wtf/Allocator.h"
 #include "wtf/Deque.h"
 #include "wtf/HashSet.h"
-#include "wtf/OwnPtr.h"
-#include "wtf/PassOwnPtr.h"
 #include "wtf/Vector.h"
 #include "wtf/text/CharacterNames.h"
-
 #include <hb.h>
+#include <memory>
 #include <unicode/uscript.h>
 
 namespace blink {
@@ -204,9 +202,9 @@
         bool isLastResort);
     bool collectFallbackHintChars(Vector<UChar32>& hint, bool needsList);
 
-    void insertRunIntoShapeResult(ShapeResult*, PassOwnPtr<ShapeResult::RunInfo> runToInsert, unsigned startGlyph, unsigned numGlyphs, hb_buffer_t*);
+    void insertRunIntoShapeResult(ShapeResult*, std::unique_ptr<ShapeResult::RunInfo> runToInsert, unsigned startGlyph, unsigned numGlyphs, hb_buffer_t*);
 
-    OwnPtr<UChar[]> m_normalizedBuffer;
+    std::unique_ptr<UChar[]> m_normalizedBuffer;
     unsigned m_normalizedBufferLength;
 
     FeaturesVector m_features;
diff --git a/third_party/WebKit/Source/platform/fonts/shaping/RunSegmenter.cpp b/third_party/WebKit/Source/platform/fonts/shaping/RunSegmenter.cpp
index 08fd5c7d..fd63329 100644
--- a/third_party/WebKit/Source/platform/fonts/shaping/RunSegmenter.cpp
+++ b/third_party/WebKit/Source/platform/fonts/shaping/RunSegmenter.cpp
@@ -10,15 +10,16 @@
 #include "platform/fonts/UTF16TextIterator.h"
 #include "platform/text/Character.h"
 #include "wtf/Assertions.h"
+#include "wtf/PtrUtil.h"
 
 namespace blink {
 
 RunSegmenter::RunSegmenter(const UChar* buffer, unsigned bufferSize, FontOrientation runOrientation)
     : m_bufferSize(bufferSize)
     , m_candidateRange({ 0, 0, USCRIPT_INVALID_CODE, OrientationIterator::OrientationKeep, FontFallbackPriority::Text })
-    , m_scriptRunIterator(adoptPtr(new ScriptRunIterator(buffer, bufferSize)))
-    , m_orientationIterator(runOrientation == FontOrientation::VerticalMixed ? adoptPtr(new OrientationIterator(buffer, bufferSize, runOrientation)) : nullptr)
-    , m_symbolsIterator(adoptPtr(new SymbolsIterator(buffer, bufferSize)))
+    , m_scriptRunIterator(wrapUnique(new ScriptRunIterator(buffer, bufferSize)))
+    , m_orientationIterator(runOrientation == FontOrientation::VerticalMixed ? wrapUnique(new OrientationIterator(buffer, bufferSize, runOrientation)) : nullptr)
+    , m_symbolsIterator(wrapUnique(new SymbolsIterator(buffer, bufferSize)))
     , m_lastSplit(0)
     , m_scriptRunIteratorPosition(0)
     , m_orientationIteratorPosition(runOrientation == FontOrientation::VerticalMixed ? 0 : m_bufferSize)
diff --git a/third_party/WebKit/Source/platform/fonts/shaping/RunSegmenter.h b/third_party/WebKit/Source/platform/fonts/shaping/RunSegmenter.h
index 8a77f9f7..e347f295 100644
--- a/third_party/WebKit/Source/platform/fonts/shaping/RunSegmenter.h
+++ b/third_party/WebKit/Source/platform/fonts/shaping/RunSegmenter.h
@@ -14,7 +14,7 @@
 #include "platform/fonts/UTF16TextIterator.h"
 #include "wtf/Allocator.h"
 #include "wtf/Noncopyable.h"
-
+#include <memory>
 #include <unicode/uscript.h>
 
 namespace blink {
@@ -49,9 +49,9 @@
 
     unsigned m_bufferSize;
     RunSegmenterRange m_candidateRange;
-    OwnPtr<ScriptRunIterator> m_scriptRunIterator;
-    OwnPtr<OrientationIterator> m_orientationIterator;
-    OwnPtr<SymbolsIterator> m_symbolsIterator;
+    std::unique_ptr<ScriptRunIterator> m_scriptRunIterator;
+    std::unique_ptr<OrientationIterator> m_orientationIterator;
+    std::unique_ptr<SymbolsIterator> m_symbolsIterator;
     unsigned m_lastSplit;
     unsigned m_scriptRunIteratorPosition;
     unsigned m_orientationIteratorPosition;
diff --git a/third_party/WebKit/Source/platform/fonts/shaping/ShapeResult.cpp b/third_party/WebKit/Source/platform/fonts/shaping/ShapeResult.cpp
index 9367176..e05e7b1 100644
--- a/third_party/WebKit/Source/platform/fonts/shaping/ShapeResult.cpp
+++ b/third_party/WebKit/Source/platform/fonts/shaping/ShapeResult.cpp
@@ -34,7 +34,9 @@
 #include "platform/fonts/Font.h"
 #include "platform/fonts/shaping/ShapeResultInlineHeaders.h"
 #include "platform/fonts/shaping/ShapeResultSpacing.h"
+#include "wtf/PtrUtil.h"
 #include <hb.h>
+#include <memory>
 
 namespace blink {
 
@@ -154,7 +156,7 @@
 {
     m_runs.reserveCapacity(other.m_runs.size());
     for (const auto& run : other.m_runs)
-        m_runs.append(adoptPtr(new ShapeResult::RunInfo(*run)));
+        m_runs.append(wrapUnique(new ShapeResult::RunInfo(*run)));
 }
 
 ShapeResult::~ShapeResult()
@@ -278,11 +280,11 @@
     return static_cast<float>(value) / (1 << 16);
 }
 
-void ShapeResult::insertRun(PassOwnPtr<ShapeResult::RunInfo> runToInsert,
+void ShapeResult::insertRun(std::unique_ptr<ShapeResult::RunInfo> runToInsert,
     unsigned startGlyph, unsigned numGlyphs, hb_buffer_t* harfBuzzBuffer)
 {
     ASSERT(numGlyphs > 0);
-    OwnPtr<ShapeResult::RunInfo> run(std::move(runToInsert));
+    std::unique_ptr<ShapeResult::RunInfo> run(std::move(runToInsert));
     ASSERT(numGlyphs == run->m_glyphData.size());
 
     const SimpleFontData* currentFontData = run->m_fontData.get();
diff --git a/third_party/WebKit/Source/platform/fonts/shaping/ShapeResult.h b/third_party/WebKit/Source/platform/fonts/shaping/ShapeResult.h
index c83666d..ba2f52d8 100644
--- a/third_party/WebKit/Source/platform/fonts/shaping/ShapeResult.h
+++ b/third_party/WebKit/Source/platform/fonts/shaping/ShapeResult.h
@@ -36,9 +36,9 @@
 #include "platform/text/TextDirection.h"
 #include "wtf/HashSet.h"
 #include "wtf/Noncopyable.h"
-#include "wtf/OwnPtr.h"
 #include "wtf/RefCounted.h"
 #include "wtf/Vector.h"
+#include <memory>
 
 struct hb_buffer_t;
 
@@ -88,12 +88,12 @@
     }
 
     void applySpacing(ShapeResultSpacing&, const TextRun&);
-    void insertRun(PassOwnPtr<ShapeResult::RunInfo>, unsigned startGlyph,
+    void insertRun(std::unique_ptr<ShapeResult::RunInfo>, unsigned startGlyph,
         unsigned numGlyphs, hb_buffer_t*);
 
     float m_width;
     FloatRect m_glyphBoundingBox;
-    Vector<OwnPtr<RunInfo>> m_runs;
+    Vector<std::unique_ptr<RunInfo>> m_runs;
     RefPtr<SimpleFontData> m_primaryFont;
 
     unsigned m_numCharacters;
diff --git a/third_party/WebKit/Source/platform/fonts/skia/FontCacheSkia.cpp b/third_party/WebKit/Source/platform/fonts/skia/FontCacheSkia.cpp
index 9cd1424..3a3dcac 100644
--- a/third_party/WebKit/Source/platform/fonts/skia/FontCacheSkia.cpp
+++ b/third_party/WebKit/Source/platform/fonts/skia/FontCacheSkia.cpp
@@ -42,8 +42,10 @@
 #include "public/platform/Platform.h"
 #include "public/platform/linux/WebSandboxSupport.h"
 #include "wtf/Assertions.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/text/AtomicString.h"
 #include "wtf/text/CString.h"
+#include <memory>
 #include <unicode/locid.h>
 
 #if !OS(WIN) && !OS(ANDROID)
@@ -161,7 +163,7 @@
     if (creationParams.creationType() == CreateFontByFciIdAndTtcIndex) {
         if (Platform::current()->sandboxSupport())
             return typefaceForFontconfigInterfaceIdAndTtcIndex(creationParams.fontconfigInterfaceId(), creationParams.ttcIndex());
-        return adoptRef(SkTypeface::CreateFromFile(creationParams.filename().data(), creationParams.ttcIndex()));
+        return fromSkSp(SkTypeface::MakeFromFile(creationParams.filename().data(), creationParams.ttcIndex()));
     }
 #endif
 
@@ -201,7 +203,7 @@
 }
 
 #if !OS(WIN)
-PassOwnPtr<FontPlatformData> FontCache::createFontPlatformData(const FontDescription& fontDescription,
+std::unique_ptr<FontPlatformData> FontCache::createFontPlatformData(const FontDescription& fontDescription,
     const FontFaceCreationParams& creationParams, float fontSize)
 {
     CString name;
@@ -209,7 +211,7 @@
     if (!tf)
         return nullptr;
 
-    return adoptPtr(new FontPlatformData(tf,
+    return wrapUnique(new FontPlatformData(tf,
         name.data(),
         fontSize,
         (fontDescription.weight() > 200 + tf->fontStyle().weight()) || fontDescription.isSyntheticBold(),
diff --git a/third_party/WebKit/Source/platform/fonts/win/FontCacheSkiaWin.cpp b/third_party/WebKit/Source/platform/fonts/win/FontCacheSkiaWin.cpp
index d8a150d5..5d6a886 100644
--- a/third_party/WebKit/Source/platform/fonts/win/FontCacheSkiaWin.cpp
+++ b/third_party/WebKit/Source/platform/fonts/win/FontCacheSkiaWin.cpp
@@ -40,6 +40,8 @@
 #include "platform/fonts/FontPlatformData.h"
 #include "platform/fonts/SimpleFontData.h"
 #include "platform/fonts/win/FontFallbackWin.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
@@ -355,7 +357,7 @@
     return false;
 }
 
-PassOwnPtr<FontPlatformData> FontCache::createFontPlatformData(const FontDescription& fontDescription,
+std::unique_ptr<FontPlatformData> FontCache::createFontPlatformData(const FontDescription& fontDescription,
     const FontFaceCreationParams& creationParams, float fontSize)
 {
     ASSERT(creationParams.creationType() == CreateFontByFamily);
@@ -393,7 +395,7 @@
         }
     }
 
-    OwnPtr<FontPlatformData> result = adoptPtr(new FontPlatformData(tf,
+    std::unique_ptr<FontPlatformData> result = wrapUnique(new FontPlatformData(tf,
         name.data(),
         fontSize,
         (fontDescription.weight() >= FontWeight600 && !tf->isBold()) || fontDescription.isSyntheticBold(),
diff --git a/third_party/WebKit/Source/platform/fonts/win/FontPlatformDataWin.cpp b/third_party/WebKit/Source/platform/fonts/win/FontPlatformDataWin.cpp
index ef9b3f5..903060c 100644
--- a/third_party/WebKit/Source/platform/fonts/win/FontPlatformDataWin.cpp
+++ b/third_party/WebKit/Source/platform/fonts/win/FontPlatformDataWin.cpp
@@ -35,6 +35,7 @@
 #include "platform/LayoutTestSupport.h"
 #include "platform/fonts/FontCache.h"
 #include "platform/graphics/GraphicsContext.h"
+#include "platform/graphics/skia/SkiaUtils.h"
 #include <windows.h>
 
 namespace blink {
@@ -47,7 +48,7 @@
 {
     const float ts = m_textSize >= 0 ? m_textSize : 12;
     paint->setTextSize(SkFloatToScalar(m_textSize));
-    paint->setTypeface(typeface());
+    paint->setTypeface(toSkSp(m_typeface));
     paint->setFakeBoldText(m_syntheticBold);
     paint->setTextSkewX(m_syntheticItalic ? -SK_Scalar1 / 4 : 0);
 
diff --git a/third_party/WebKit/Source/platform/geometry/FloatPolygon.cpp b/third_party/WebKit/Source/platform/geometry/FloatPolygon.cpp
index 74cb1bf2..2ad06042 100644
--- a/third_party/WebKit/Source/platform/geometry/FloatPolygon.cpp
+++ b/third_party/WebKit/Source/platform/geometry/FloatPolygon.cpp
@@ -30,6 +30,7 @@
 #include "platform/geometry/FloatPolygon.h"
 
 #include "wtf/MathExtras.h"
+#include <memory>
 
 namespace blink {
 
@@ -78,7 +79,7 @@
     return vertexIndex2;
 }
 
-FloatPolygon::FloatPolygon(PassOwnPtr<Vector<FloatPoint>> vertices, WindRule fillRule)
+FloatPolygon::FloatPolygon(std::unique_ptr<Vector<FloatPoint>> vertices, WindRule fillRule)
     : m_vertices(std::move(vertices))
     , m_fillRule(fillRule)
 {
diff --git a/third_party/WebKit/Source/platform/geometry/FloatPolygon.h b/third_party/WebKit/Source/platform/geometry/FloatPolygon.h
index 0799fa6..26e891b5 100644
--- a/third_party/WebKit/Source/platform/geometry/FloatPolygon.h
+++ b/third_party/WebKit/Source/platform/geometry/FloatPolygon.h
@@ -35,9 +35,8 @@
 #include "platform/geometry/FloatRect.h"
 #include "platform/graphics/GraphicsTypes.h"
 #include "wtf/Allocator.h"
-#include "wtf/OwnPtr.h"
-#include "wtf/PassOwnPtr.h"
 #include "wtf/Vector.h"
+#include <memory>
 
 namespace blink {
 
@@ -52,7 +51,7 @@
     USING_FAST_MALLOC(FloatPolygon);
     WTF_MAKE_NONCOPYABLE(FloatPolygon);
 public:
-    FloatPolygon(PassOwnPtr<Vector<FloatPoint>> vertices, WindRule fillRule);
+    FloatPolygon(std::unique_ptr<Vector<FloatPoint>> vertices, WindRule fillRule);
 
     const FloatPoint& vertexAt(unsigned index) const { return (*m_vertices)[index]; }
     unsigned numberOfVertices() const { return m_vertices->size(); }
@@ -74,7 +73,7 @@
     bool containsNonZero(const FloatPoint&) const;
     bool containsEvenOdd(const FloatPoint&) const;
 
-    OwnPtr<Vector<FloatPoint>> m_vertices;
+    std::unique_ptr<Vector<FloatPoint>> m_vertices;
     WindRule m_fillRule;
     FloatRect m_boundingBox;
     bool m_empty;
diff --git a/third_party/WebKit/Source/platform/geometry/FloatPolygonTest.cpp b/third_party/WebKit/Source/platform/geometry/FloatPolygonTest.cpp
index a8a1ff91..e5cf1e5d 100644
--- a/third_party/WebKit/Source/platform/geometry/FloatPolygonTest.cpp
+++ b/third_party/WebKit/Source/platform/geometry/FloatPolygonTest.cpp
@@ -30,6 +30,8 @@
 #include "platform/geometry/FloatPolygon.h"
 
 #include "testing/gtest/include/gtest/gtest.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
@@ -38,16 +40,16 @@
     FloatPolygonTestValue(const float* coordinates, unsigned coordinatesLength, WindRule fillRule)
     {
         ASSERT(!(coordinatesLength % 2));
-        OwnPtr<Vector<FloatPoint>> vertices = adoptPtr(new Vector<FloatPoint>(coordinatesLength / 2));
+        std::unique_ptr<Vector<FloatPoint>> vertices = wrapUnique(new Vector<FloatPoint>(coordinatesLength / 2));
         for (unsigned i = 0; i < coordinatesLength; i += 2)
             (*vertices)[i / 2] = FloatPoint(coordinates[i], coordinates[i + 1]);
-        m_polygon = adoptPtr(new FloatPolygon(std::move(vertices), fillRule));
+        m_polygon = wrapUnique(new FloatPolygon(std::move(vertices), fillRule));
     }
 
     const FloatPolygon& polygon() const { return *m_polygon; }
 
 private:
-    OwnPtr<FloatPolygon> m_polygon;
+    std::unique_ptr<FloatPolygon> m_polygon;
 };
 
 namespace {
diff --git a/third_party/WebKit/Source/platform/geometry/TransformState.cpp b/third_party/WebKit/Source/platform/geometry/TransformState.cpp
index cdfc0120..86ceb92 100644
--- a/third_party/WebKit/Source/platform/geometry/TransformState.cpp
+++ b/third_party/WebKit/Source/platform/geometry/TransformState.cpp
@@ -25,7 +25,6 @@
 
 #include "platform/geometry/TransformState.h"
 
-#include "wtf/PassOwnPtr.h"
 
 namespace blink {
 
diff --git a/third_party/WebKit/Source/platform/geometry/TransformState.h b/third_party/WebKit/Source/platform/geometry/TransformState.h
index f3c4104..7ef3f6c 100644
--- a/third_party/WebKit/Source/platform/geometry/TransformState.h
+++ b/third_party/WebKit/Source/platform/geometry/TransformState.h
@@ -33,7 +33,7 @@
 #include "platform/transforms/AffineTransform.h"
 #include "platform/transforms/TransformationMatrix.h"
 #include "wtf/Allocator.h"
-#include "wtf/OwnPtr.h"
+#include <memory>
 
 namespace blink {
 
@@ -133,7 +133,7 @@
     FloatQuad m_lastPlanarQuad;
 
     // We only allocate the transform if we need to
-    OwnPtr<TransformationMatrix> m_accumulatedTransform;
+    std::unique_ptr<TransformationMatrix> m_accumulatedTransform;
     LayoutSize m_accumulatedOffset;
     bool m_accumulatingTransform;
     bool m_forceAccumulatingTransform;
diff --git a/third_party/WebKit/Source/platform/graphics/BitmapImage.cpp b/third_party/WebKit/Source/platform/graphics/BitmapImage.cpp
index b950446..17d815c5 100644
--- a/third_party/WebKit/Source/platform/graphics/BitmapImage.cpp
+++ b/third_party/WebKit/Source/platform/graphics/BitmapImage.cpp
@@ -37,6 +37,7 @@
 #include "platform/graphics/skia/SkiaUtils.h"
 #include "third_party/skia/include/core/SkCanvas.h"
 #include "wtf/PassRefPtr.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/text/WTFString.h"
 
 namespace blink {
@@ -479,7 +480,7 @@
 
     if (catchUpIfNecessary == DoNotCatchUp || time < m_desiredFrameStartTime) {
         // Haven't yet reached time for next frame to start; delay until then.
-        m_frameTimer = adoptPtr(new Timer<BitmapImage>(this, &BitmapImage::advanceAnimation));
+        m_frameTimer = wrapUnique(new Timer<BitmapImage>(this, &BitmapImage::advanceAnimation));
         m_frameTimer->startOneShot(std::max(m_desiredFrameStartTime - time, 0.), BLINK_FROM_HERE);
     } else {
         // We've already reached or passed the time for the next frame to start.
@@ -503,7 +504,7 @@
         // may be in the past, meaning the next time through this function we'll
         // kick off the next advancement sooner than this frame's duration would
         // suggest.
-        m_frameTimer = adoptPtr(new Timer<BitmapImage>(this, &BitmapImage::advanceAnimationWithoutCatchUp));
+        m_frameTimer = wrapUnique(new Timer<BitmapImage>(this, &BitmapImage::advanceAnimationWithoutCatchUp));
         m_frameTimer->startOneShot(0, BLINK_FROM_HERE);
     }
 }
diff --git a/third_party/WebKit/Source/platform/graphics/BitmapImage.h b/third_party/WebKit/Source/platform/graphics/BitmapImage.h
index a530097..98a16777 100644
--- a/third_party/WebKit/Source/platform/graphics/BitmapImage.h
+++ b/third_party/WebKit/Source/platform/graphics/BitmapImage.h
@@ -37,7 +37,7 @@
 #include "platform/graphics/ImageSource.h"
 #include "platform/image-decoders/ImageAnimation.h"
 #include "wtf/Forward.h"
-#include "wtf/OwnPtr.h"
+#include <memory>
 
 namespace blink {
 
@@ -164,7 +164,7 @@
     RefPtr<SkImage> m_cachedFrame; // A cached copy of the most recently-accessed frame.
     size_t m_cachedFrameIndex; // Index of the frame that is cached.
 
-    OwnPtr<Timer<BitmapImage>> m_frameTimer;
+    std::unique_ptr<Timer<BitmapImage>> m_frameTimer;
     int m_repetitionCount; // How many total animation loops we should do.  This will be cAnimationNone if this image type is incapable of animation.
     RepetitionCountStatus m_repetitionCountStatus;
     int m_repetitionsComplete;  // How many repetitions we've finished.
diff --git a/third_party/WebKit/Source/platform/graphics/Canvas2DLayerBridge.cpp b/third_party/WebKit/Source/platform/graphics/Canvas2DLayerBridge.cpp
index c782456b..8a5ca10 100644
--- a/third_party/WebKit/Source/platform/graphics/Canvas2DLayerBridge.cpp
+++ b/third_party/WebKit/Source/platform/graphics/Canvas2DLayerBridge.cpp
@@ -45,6 +45,8 @@
 #include "third_party/skia/include/core/SkSurface.h"
 #include "third_party/skia/include/gpu/GrContext.h"
 #include "third_party/skia/include/gpu/gl/GrGLTypes.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace {
 enum {
@@ -88,7 +90,7 @@
 PassRefPtr<Canvas2DLayerBridge> Canvas2DLayerBridge::create(const IntSize& size, int msaaSampleCount, OpacityMode opacityMode, AccelerationMode accelerationMode)
 {
     TRACE_EVENT_INSTANT0("test_gpu", "Canvas2DLayerBridgeCreation", TRACE_EVENT_SCOPE_GLOBAL);
-    OwnPtr<WebGraphicsContext3DProvider> contextProvider = adoptPtr(Platform::current()->createSharedOffscreenGraphicsContext3DProvider());
+    std::unique_ptr<WebGraphicsContext3DProvider> contextProvider = wrapUnique(Platform::current()->createSharedOffscreenGraphicsContext3DProvider());
     if (!contextProvider)
         return nullptr;
     RefPtr<Canvas2DLayerBridge> layerBridge;
@@ -96,9 +98,9 @@
     return layerBridge.release();
 }
 
-Canvas2DLayerBridge::Canvas2DLayerBridge(PassOwnPtr<WebGraphicsContext3DProvider> contextProvider, const IntSize& size, int msaaSampleCount, OpacityMode opacityMode, AccelerationMode accelerationMode)
+Canvas2DLayerBridge::Canvas2DLayerBridge(std::unique_ptr<WebGraphicsContext3DProvider> contextProvider, const IntSize& size, int msaaSampleCount, OpacityMode opacityMode, AccelerationMode accelerationMode)
     : m_contextProvider(std::move(contextProvider))
-    , m_logger(adoptPtr(new Logger))
+    , m_logger(wrapUnique(new Logger))
     , m_weakPtrFactory(this)
     , m_imageBuffer(0)
     , m_msaaSampleCount(msaaSampleCount)
@@ -137,7 +139,7 @@
 void Canvas2DLayerBridge::startRecording()
 {
     DCHECK(m_isDeferralEnabled);
-    m_recorder = adoptPtr(new SkPictureRecorder);
+    m_recorder = wrapUnique(new SkPictureRecorder);
     m_recorder->beginRecording(m_size.width(), m_size.height(), nullptr);
     if (m_imageBuffer) {
         m_imageBuffer->resetCanvas(m_recorder->getRecordingCanvas());
@@ -145,7 +147,7 @@
     m_recordingPixelCount = 0;
 }
 
-void Canvas2DLayerBridge::setLoggerForTesting(PassOwnPtr<Logger> logger)
+void Canvas2DLayerBridge::setLoggerForTesting(std::unique_ptr<Logger> logger)
 {
     m_logger = std::move(logger);
 }
@@ -484,7 +486,7 @@
         reportSurfaceCreationFailure();
 
     if (m_surface && surfaceIsAccelerated && !m_layer) {
-        m_layer = adoptPtr(Platform::current()->compositorSupport()->createExternalTextureLayer(this));
+        m_layer = wrapUnique(Platform::current()->compositorSupport()->createExternalTextureLayer(this));
         m_layer->setOpaque(m_opacityMode == Opaque);
         m_layer->setBlendBackgroundColor(m_opacityMode != Opaque);
         GraphicsLayer::registerContentsLayer(m_layer->layer());
@@ -748,7 +750,7 @@
 
     gpu::gles2::GLES2Interface* sharedGL = nullptr;
     m_layer->clearTexture();
-    m_contextProvider = adoptPtr(Platform::current()->createSharedOffscreenGraphicsContext3DProvider());
+    m_contextProvider = wrapUnique(Platform::current()->createSharedOffscreenGraphicsContext3DProvider());
     if (m_contextProvider)
         sharedGL = m_contextProvider->contextGL();
 
diff --git a/third_party/WebKit/Source/platform/graphics/Canvas2DLayerBridge.h b/third_party/WebKit/Source/platform/graphics/Canvas2DLayerBridge.h
index 2ffda5a..7c8ce5b9 100644
--- a/third_party/WebKit/Source/platform/graphics/Canvas2DLayerBridge.h
+++ b/third_party/WebKit/Source/platform/graphics/Canvas2DLayerBridge.h
@@ -37,11 +37,11 @@
 #include "third_party/skia/include/core/SkSurface.h"
 #include "wtf/Allocator.h"
 #include "wtf/Deque.h"
-#include "wtf/PassOwnPtr.h"
 #include "wtf/RefCounted.h"
 #include "wtf/RefPtr.h"
 #include "wtf/Vector.h"
 #include "wtf/WeakPtr.h"
+#include <memory>
 
 class SkImage;
 struct SkImageInfo;
@@ -146,7 +146,7 @@
         virtual ~Logger() { }
     };
 
-    void setLoggerForTesting(PassOwnPtr<Logger>);
+    void setLoggerForTesting(std::unique_ptr<Logger>);
 
 private:
 #if USE_IOSURFACE_FOR_2D_CANVAS
@@ -185,7 +185,7 @@
         MailboxInfo() {}
     };
 
-    Canvas2DLayerBridge(PassOwnPtr<WebGraphicsContext3DProvider>, const IntSize&, int msaaSampleCount, OpacityMode, AccelerationMode);
+    Canvas2DLayerBridge(std::unique_ptr<WebGraphicsContext3DProvider>, const IntSize&, int msaaSampleCount, OpacityMode, AccelerationMode);
     gpu::gles2::GLES2Interface* contextGL();
     void startRecording();
     void skipQueuedDrawCommands();
@@ -233,14 +233,14 @@
     // changing texture bindings.
     void resetSkiaTextureBinding();
 
-    OwnPtr<SkPictureRecorder> m_recorder;
+    std::unique_ptr<SkPictureRecorder> m_recorder;
     RefPtr<SkSurface> m_surface;
     RefPtr<SkImage> m_hibernationImage;
     int m_initialSurfaceSaveCount;
-    OwnPtr<WebExternalTextureLayer> m_layer;
-    OwnPtr<WebGraphicsContext3DProvider> m_contextProvider;
-    OwnPtr<SharedContextRateLimiter> m_rateLimiter;
-    OwnPtr<Logger> m_logger;
+    std::unique_ptr<WebExternalTextureLayer> m_layer;
+    std::unique_ptr<WebGraphicsContext3DProvider> m_contextProvider;
+    std::unique_ptr<SharedContextRateLimiter> m_rateLimiter;
+    std::unique_ptr<Logger> m_logger;
     WeakPtrFactory<Canvas2DLayerBridge> m_weakPtrFactory;
     ImageBuffer* m_imageBuffer;
     int m_msaaSampleCount;
diff --git a/third_party/WebKit/Source/platform/graphics/Canvas2DLayerBridgeTest.cpp b/third_party/WebKit/Source/platform/graphics/Canvas2DLayerBridgeTest.cpp
index 350b948..9ced0261 100644
--- a/third_party/WebKit/Source/platform/graphics/Canvas2DLayerBridgeTest.cpp
+++ b/third_party/WebKit/Source/platform/graphics/Canvas2DLayerBridgeTest.cpp
@@ -47,8 +47,8 @@
 #include "third_party/skia/include/gpu/GrContext.h"
 #include "third_party/skia/include/gpu/gl/GrGLInterface.h"
 #include "third_party/skia/include/gpu/gl/GrGLTypes.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/RefPtr.h"
-
 #include <memory>
 
 using testing::AnyNumber;
@@ -149,7 +149,7 @@
 
 class Canvas2DLayerBridgeTest : public Test {
 public:
-    PassRefPtr<Canvas2DLayerBridge> makeBridge(PassOwnPtr<FakeWebGraphicsContext3DProvider> provider, const IntSize& size, Canvas2DLayerBridge::AccelerationMode accelerationMode)
+    PassRefPtr<Canvas2DLayerBridge> makeBridge(std::unique_ptr<FakeWebGraphicsContext3DProvider> provider, const IntSize& size, Canvas2DLayerBridge::AccelerationMode accelerationMode)
     {
         return adoptRef(new Canvas2DLayerBridge(std::move(provider), size, 0, NonOpaque, accelerationMode));
     }
@@ -158,7 +158,7 @@
     void fullLifecycleTest()
     {
         FakeGLES2Interface gl;
-        OwnPtr<FakeWebGraphicsContext3DProvider> contextProvider = adoptPtr(new FakeWebGraphicsContext3DProvider(&gl));
+        std::unique_ptr<FakeWebGraphicsContext3DProvider> contextProvider = wrapUnique(new FakeWebGraphicsContext3DProvider(&gl));
 
         Canvas2DLayerBridgePtr bridge(adoptRef(new Canvas2DLayerBridge(std::move(contextProvider), IntSize(300, 150), 0, NonOpaque, Canvas2DLayerBridge::DisableAcceleration)));
 
@@ -170,7 +170,7 @@
     void fallbackToSoftwareIfContextLost()
     {
         FakeGLES2Interface gl;
-        OwnPtr<FakeWebGraphicsContext3DProvider> contextProvider = adoptPtr(new FakeWebGraphicsContext3DProvider(&gl));
+        std::unique_ptr<FakeWebGraphicsContext3DProvider> contextProvider = wrapUnique(new FakeWebGraphicsContext3DProvider(&gl));
 
         gl.setIsContextLost(true);
         Canvas2DLayerBridgePtr bridge(adoptRef(new Canvas2DLayerBridge(std::move(contextProvider), IntSize(300, 150), 0, NonOpaque, Canvas2DLayerBridge::EnableAcceleration)));
@@ -183,7 +183,7 @@
         {
             // No fallback case.
             FakeGLES2Interface gl;
-            OwnPtr<FakeWebGraphicsContext3DProvider> contextProvider = adoptPtr(new FakeWebGraphicsContext3DProvider(&gl));
+            std::unique_ptr<FakeWebGraphicsContext3DProvider> contextProvider = wrapUnique(new FakeWebGraphicsContext3DProvider(&gl));
             Canvas2DLayerBridgePtr bridge(adoptRef(new Canvas2DLayerBridge(std::move(contextProvider), IntSize(300, 150), 0, NonOpaque, Canvas2DLayerBridge::EnableAcceleration)));
             EXPECT_TRUE(bridge->checkSurfaceValid());
             EXPECT_TRUE(bridge->isAccelerated());
@@ -195,7 +195,7 @@
         {
             // Fallback case.
             FakeGLES2Interface gl;
-            OwnPtr<FakeWebGraphicsContext3DProvider> contextProvider = adoptPtr(new FakeWebGraphicsContext3DProvider(&gl));
+            std::unique_ptr<FakeWebGraphicsContext3DProvider> contextProvider = wrapUnique(new FakeWebGraphicsContext3DProvider(&gl));
             GrContext* gr = contextProvider->grContext();
             Canvas2DLayerBridgePtr bridge(adoptRef(new Canvas2DLayerBridge(std::move(contextProvider), IntSize(300, 150), 0, NonOpaque, Canvas2DLayerBridge::EnableAcceleration)));
             EXPECT_TRUE(bridge->checkSurfaceValid());
@@ -212,7 +212,7 @@
     void noDrawOnContextLostTest()
     {
         FakeGLES2Interface gl;
-        OwnPtr<FakeWebGraphicsContext3DProvider> contextProvider = adoptPtr(new FakeWebGraphicsContext3DProvider(&gl));
+        std::unique_ptr<FakeWebGraphicsContext3DProvider> contextProvider = wrapUnique(new FakeWebGraphicsContext3DProvider(&gl));
 
         Canvas2DLayerBridgePtr bridge(adoptRef(new Canvas2DLayerBridge(std::move(contextProvider), IntSize(300, 150), 0, NonOpaque, Canvas2DLayerBridge::ForceAccelerationForTesting)));
         EXPECT_TRUE(bridge->checkSurfaceValid());
@@ -235,7 +235,7 @@
     void prepareMailboxWithBitmapTest()
     {
         FakeGLES2Interface gl;
-        OwnPtr<FakeWebGraphicsContext3DProvider> contextProvider = adoptPtr(new FakeWebGraphicsContext3DProvider(&gl));
+        std::unique_ptr<FakeWebGraphicsContext3DProvider> contextProvider = wrapUnique(new FakeWebGraphicsContext3DProvider(&gl));
         Canvas2DLayerBridgePtr bridge(adoptRef(new Canvas2DLayerBridge(std::move(contextProvider), IntSize(300, 150), 0, NonOpaque, Canvas2DLayerBridge::ForceAccelerationForTesting)));
         bridge->m_lastImageId = 1;
 
@@ -252,7 +252,7 @@
         // This test passes by not crashing and not triggering assertions.
         {
             FakeGLES2Interface gl;
-            OwnPtr<FakeWebGraphicsContext3DProvider> contextProvider = adoptPtr(new FakeWebGraphicsContext3DProvider(&gl));
+            std::unique_ptr<FakeWebGraphicsContext3DProvider> contextProvider = wrapUnique(new FakeWebGraphicsContext3DProvider(&gl));
             Canvas2DLayerBridgePtr bridge(adoptRef(new Canvas2DLayerBridge(std::move(contextProvider), IntSize(300, 150), 0, NonOpaque, Canvas2DLayerBridge::ForceAccelerationForTesting)));
             WebExternalTextureMailbox mailbox;
             bridge->prepareMailbox(&mailbox, 0);
@@ -262,7 +262,7 @@
         // Retry with mailbox released while bridge destruction is in progress.
         {
             FakeGLES2Interface gl;
-            OwnPtr<FakeWebGraphicsContext3DProvider> contextProvider = adoptPtr(new FakeWebGraphicsContext3DProvider(&gl));
+            std::unique_ptr<FakeWebGraphicsContext3DProvider> contextProvider = wrapUnique(new FakeWebGraphicsContext3DProvider(&gl));
             WebExternalTextureMailbox mailbox;
             Canvas2DLayerBridge* rawBridge;
             {
@@ -280,7 +280,7 @@
     {
         {
             FakeGLES2Interface gl;
-            OwnPtr<FakeWebGraphicsContext3DProvider> contextProvider = adoptPtr(new FakeWebGraphicsContext3DProvider(&gl));
+            std::unique_ptr<FakeWebGraphicsContext3DProvider> contextProvider = wrapUnique(new FakeWebGraphicsContext3DProvider(&gl));
             Canvas2DLayerBridgePtr bridge(adoptRef(new Canvas2DLayerBridge(std::move(contextProvider), IntSize(300, 300), 0, NonOpaque, Canvas2DLayerBridge::EnableAcceleration)));
             SkPaint paint;
             bridge->canvas()->drawRect(SkRect::MakeXYWH(0, 0, 1, 1), paint);
@@ -291,7 +291,7 @@
 
         {
             FakeGLES2Interface gl;
-            OwnPtr<FakeWebGraphicsContext3DProvider> contextProvider = adoptPtr(new FakeWebGraphicsContext3DProvider(&gl));
+            std::unique_ptr<FakeWebGraphicsContext3DProvider> contextProvider = wrapUnique(new FakeWebGraphicsContext3DProvider(&gl));
             Canvas2DLayerBridgePtr bridge(adoptRef(new Canvas2DLayerBridge(std::move(contextProvider), IntSize(300, 300), 0, NonOpaque, Canvas2DLayerBridge::EnableAcceleration)));
             SkPaint paint;
             bridge->canvas()->drawRect(SkRect::MakeXYWH(0, 0, 1, 1), paint);
@@ -346,7 +346,7 @@
 
 void runCreateBridgeTask(Canvas2DLayerBridgePtr* bridgePtr, gpu::gles2::GLES2Interface* gl, Canvas2DLayerBridgeTest* testHost, WaitableEvent* doneEvent)
 {
-    OwnPtr<FakeWebGraphicsContext3DProvider> contextProvider = adoptPtr(new FakeWebGraphicsContext3DProvider(gl));
+    std::unique_ptr<FakeWebGraphicsContext3DProvider> contextProvider = wrapUnique(new FakeWebGraphicsContext3DProvider(gl));
     *bridgePtr = testHost->makeBridge(std::move(contextProvider), IntSize(300, 300), Canvas2DLayerBridge::EnableAcceleration);
     // draw+flush to trigger the creation of a GPU surface
     (*bridgePtr)->didDraw(FloatRect(0, 0, 1, 1));
@@ -357,7 +357,7 @@
 
 void postAndWaitCreateBridgeTask(const WebTraceLocation& location, WebThread* testThread, Canvas2DLayerBridgePtr* bridgePtr, gpu::gles2::GLES2Interface* gl, Canvas2DLayerBridgeTest* testHost)
 {
-    OwnPtr<WaitableEvent> bridgeCreatedEvent = adoptPtr(new WaitableEvent());
+    std::unique_ptr<WaitableEvent> bridgeCreatedEvent = wrapUnique(new WaitableEvent());
     testThread->getWebTaskRunner()->postTask(
         location,
         threadSafeBind(&runCreateBridgeTask,
@@ -386,7 +386,7 @@
 
 void postAndWaitDestroyBridgeTask(const WebTraceLocation& location, WebThread* testThread, Canvas2DLayerBridgePtr* bridgePtr)
 {
-    OwnPtr<WaitableEvent> bridgeDestroyedEvent = adoptPtr(new WaitableEvent());
+    std::unique_ptr<WaitableEvent> bridgeDestroyedEvent = wrapUnique(new WaitableEvent());
     testThread->getWebTaskRunner()->postTask(
         location,
         threadSafeBind(&runDestroyBridgeTask,
@@ -414,7 +414,7 @@
 
 void postAndWaitSetIsHiddenTask(const WebTraceLocation& location, WebThread* testThread, Canvas2DLayerBridge* bridge, bool value)
 {
-    OwnPtr<WaitableEvent> doneEvent = adoptPtr(new WaitableEvent());
+    std::unique_ptr<WaitableEvent> doneEvent = wrapUnique(new WaitableEvent());
     postSetIsHiddenTask(location, testThread, bridge, value, doneEvent.get());
     doneEvent->wait();
 }
@@ -422,7 +422,7 @@
 class MockImageBuffer : public ImageBuffer {
 public:
     MockImageBuffer()
-        : ImageBuffer(adoptPtr(new UnacceleratedImageBufferSurface(IntSize(1, 1)))) { }
+        : ImageBuffer(wrapUnique(new UnacceleratedImageBufferSurface(IntSize(1, 1)))) { }
 
     MOCK_CONST_METHOD1(resetCanvas, void(SkCanvas*));
 
@@ -436,7 +436,7 @@
 #endif
 {
     FakeGLES2Interface gl;
-    OwnPtr<WebThread> testThread = adoptPtr(Platform::current()->createThread("TestThread"));
+    std::unique_ptr<WebThread> testThread = wrapUnique(Platform::current()->createThread("TestThread"));
 
     // The Canvas2DLayerBridge has to be created on the thread that will use it
     // to avoid WeakPtr thread check issues.
@@ -444,12 +444,12 @@
     postAndWaitCreateBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge, &gl, this);
 
     // Register an alternate Logger for tracking hibernation events
-    OwnPtr<MockLogger> mockLogger = adoptPtr(new MockLogger);
+    std::unique_ptr<MockLogger> mockLogger = wrapUnique(new MockLogger);
     MockLogger* mockLoggerPtr = mockLogger.get();
     bridge->setLoggerForTesting(std::move(mockLogger));
 
     // Test entering hibernation
-    OwnPtr<WaitableEvent> hibernationStartedEvent = adoptPtr(new WaitableEvent());
+    std::unique_ptr<WaitableEvent> hibernationStartedEvent = wrapUnique(new WaitableEvent());
     EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent(Canvas2DLayerBridge::HibernationScheduled));
     EXPECT_CALL(*mockLoggerPtr, didStartHibernating())
         .WillOnce(testing::Invoke(hibernationStartedEvent.get(), &WaitableEvent::signal));
@@ -480,7 +480,7 @@
 #endif
 {
     FakeGLES2Interface gl;
-    OwnPtr<WebThread> testThread = adoptPtr(Platform::current()->createThread("TestThread"));
+    std::unique_ptr<WebThread> testThread = wrapUnique(Platform::current()->createThread("TestThread"));
 
     // The Canvas2DLayerBridge has to be created on the thread that will use it
     // to avoid WeakPtr thread check issues.
@@ -488,12 +488,12 @@
     postAndWaitCreateBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge, &gl, this);
 
     // Register an alternate Logger for tracking hibernation events
-    OwnPtr<MockLogger> mockLogger = adoptPtr(new MockLogger);
+    std::unique_ptr<MockLogger> mockLogger = wrapUnique(new MockLogger);
     MockLogger* mockLoggerPtr = mockLogger.get();
     bridge->setLoggerForTesting(std::move(mockLogger));
 
     // Test entering hibernation
-    OwnPtr<WaitableEvent> hibernationStartedEvent = adoptPtr(new WaitableEvent());
+    std::unique_ptr<WaitableEvent> hibernationStartedEvent = wrapUnique(new WaitableEvent());
     EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent(Canvas2DLayerBridge::HibernationScheduled));
     EXPECT_CALL(*mockLoggerPtr, didStartHibernating())
         .WillOnce(testing::Invoke(hibernationStartedEvent.get(), &WaitableEvent::signal));
@@ -529,7 +529,7 @@
 #endif
 {
     FakeGLES2Interface gl;
-    OwnPtr<WebThread> testThread = adoptPtr(Platform::current()->createThread("TestThread"));
+    std::unique_ptr<WebThread> testThread = wrapUnique(Platform::current()->createThread("TestThread"));
 
     // The Canvas2DLayerBridge has to be created on the thread that will use it
     // to avoid WeakPtr thread check issues.
@@ -541,12 +541,12 @@
     bridge->setImageBuffer(&mockImageBuffer);
 
     // Register an alternate Logger for tracking hibernation events
-    OwnPtr<MockLogger> mockLogger = adoptPtr(new MockLogger);
+    std::unique_ptr<MockLogger> mockLogger = wrapUnique(new MockLogger);
     MockLogger* mockLoggerPtr = mockLogger.get();
     bridge->setLoggerForTesting(std::move(mockLogger));
 
     // Test entering hibernation
-    OwnPtr<WaitableEvent> hibernationStartedEvent = adoptPtr(new WaitableEvent());
+    std::unique_ptr<WaitableEvent> hibernationStartedEvent = wrapUnique(new WaitableEvent());
     EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent(Canvas2DLayerBridge::HibernationScheduled));
     EXPECT_CALL(*mockLoggerPtr, didStartHibernating())
         .WillOnce(testing::Invoke(hibernationStartedEvent.get(), &WaitableEvent::signal));
@@ -583,7 +583,7 @@
 
 void postAndWaitRenderingTask(const WebTraceLocation& location, WebThread* testThread, Canvas2DLayerBridge* bridge)
 {
-    OwnPtr<WaitableEvent> doneEvent = adoptPtr(new WaitableEvent());
+    std::unique_ptr<WaitableEvent> doneEvent = wrapUnique(new WaitableEvent());
     testThread->getWebTaskRunner()->postTask(
         location,
         threadSafeBind(&runRenderingTask,
@@ -599,7 +599,7 @@
 #endif
 {
     FakeGLES2Interface gl;
-    OwnPtr<WebThread> testThread = adoptPtr(Platform::current()->createThread("TestThread"));
+    std::unique_ptr<WebThread> testThread = wrapUnique(Platform::current()->createThread("TestThread"));
 
     // The Canvas2DLayerBridge has to be created on the thread that will use it
     // to avoid WeakPtr thread check issues.
@@ -607,12 +607,12 @@
     postAndWaitCreateBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge, &gl, this);
 
     // Register an alternate Logger for tracking hibernation events
-    OwnPtr<MockLogger> mockLogger = adoptPtr(new MockLogger);
+    std::unique_ptr<MockLogger> mockLogger = wrapUnique(new MockLogger);
     MockLogger* mockLoggerPtr = mockLogger.get();
     bridge->setLoggerForTesting(std::move(mockLogger));
 
     // Test entering hibernation
-    OwnPtr<WaitableEvent> hibernationStartedEvent = adoptPtr(new WaitableEvent());
+    std::unique_ptr<WaitableEvent> hibernationStartedEvent = wrapUnique(new WaitableEvent());
     EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent(Canvas2DLayerBridge::HibernationScheduled));
     EXPECT_CALL(*mockLoggerPtr, didStartHibernating())
         .WillOnce(testing::Invoke(hibernationStartedEvent.get(), &WaitableEvent::signal));
@@ -650,7 +650,7 @@
 #endif
 {
     FakeGLES2Interface gl;
-    OwnPtr<WebThread> testThread = adoptPtr(Platform::current()->createThread("TestThread"));
+    std::unique_ptr<WebThread> testThread = wrapUnique(Platform::current()->createThread("TestThread"));
 
     // The Canvas2DLayerBridge has to be created on the thread that will use it
     // to avoid WeakPtr thread check issues.
@@ -662,12 +662,12 @@
     bridge->disableDeferral(DisableDeferralReasonUnknown);
 
     // Register an alternate Logger for tracking hibernation events
-    OwnPtr<MockLogger> mockLogger = adoptPtr(new MockLogger);
+    std::unique_ptr<MockLogger> mockLogger = wrapUnique(new MockLogger);
     MockLogger* mockLoggerPtr = mockLogger.get();
     bridge->setLoggerForTesting(std::move(mockLogger));
 
     // Test entering hibernation
-    OwnPtr<WaitableEvent> hibernationStartedEvent = adoptPtr(new WaitableEvent());
+    std::unique_ptr<WaitableEvent> hibernationStartedEvent = wrapUnique(new WaitableEvent());
     EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent(Canvas2DLayerBridge::HibernationScheduled));
     EXPECT_CALL(*mockLoggerPtr, didStartHibernating())
         .WillOnce(testing::Invoke(hibernationStartedEvent.get(), &WaitableEvent::signal));
@@ -711,7 +711,7 @@
 #endif
 {
     FakeGLES2Interface gl;
-    OwnPtr<WebThread> testThread = adoptPtr(Platform::current()->createThread("TestThread"));
+    std::unique_ptr<WebThread> testThread = wrapUnique(Platform::current()->createThread("TestThread"));
 
     // The Canvas2DLayerBridge has to be created on the thread that will use it
     // to avoid WeakPtr thread check issues.
@@ -722,12 +722,12 @@
     bridge->setImageBuffer(&mockImageBuffer);
 
     // Register an alternate Logger for tracking hibernation events
-    OwnPtr<MockLogger> mockLogger = adoptPtr(new MockLogger);
+    std::unique_ptr<MockLogger> mockLogger = wrapUnique(new MockLogger);
     MockLogger* mockLoggerPtr = mockLogger.get();
     bridge->setLoggerForTesting(std::move(mockLogger));
 
     // Test entering hibernation
-    OwnPtr<WaitableEvent> hibernationStartedEvent = adoptPtr(new WaitableEvent());
+    std::unique_ptr<WaitableEvent> hibernationStartedEvent = wrapUnique(new WaitableEvent());
     EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent(Canvas2DLayerBridge::HibernationScheduled));
     EXPECT_CALL(*mockLoggerPtr, didStartHibernating())
         .WillOnce(testing::Invoke(hibernationStartedEvent.get(), &WaitableEvent::signal));
@@ -771,7 +771,7 @@
 #endif
 {
     FakeGLES2Interface gl;
-    OwnPtr<WebThread> testThread = adoptPtr(Platform::current()->createThread("TestThread"));
+    std::unique_ptr<WebThread> testThread = wrapUnique(Platform::current()->createThread("TestThread"));
 
     // The Canvas2DLayerBridge has to be created on the thread that will use it
     // to avoid WeakPtr thread check issues.
@@ -779,12 +779,12 @@
     postAndWaitCreateBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge, &gl, this);
 
     // Register an alternate Logger for tracking hibernation events
-    OwnPtr<MockLogger> mockLogger = adoptPtr(new MockLogger);
+    std::unique_ptr<MockLogger> mockLogger = wrapUnique(new MockLogger);
     MockLogger* mockLoggerPtr = mockLogger.get();
     bridge->setLoggerForTesting(std::move(mockLogger));
 
     // Test entering hibernation
-    OwnPtr<WaitableEvent> hibernationStartedEvent = adoptPtr(new WaitableEvent());
+    std::unique_ptr<WaitableEvent> hibernationStartedEvent = wrapUnique(new WaitableEvent());
     EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent(Canvas2DLayerBridge::HibernationScheduled));
     EXPECT_CALL(*mockLoggerPtr, didStartHibernating())
         .WillOnce(testing::Invoke(hibernationStartedEvent.get(), &WaitableEvent::signal));
@@ -807,7 +807,7 @@
 #endif
 {
     FakeGLES2Interface gl;
-    OwnPtr<WebThread> testThread = adoptPtr(Platform::current()->createThread("TestThread"));
+    std::unique_ptr<WebThread> testThread = wrapUnique(Platform::current()->createThread("TestThread"));
 
     // The Canvas2DLayerBridge has to be created on the thread that will use it
     // to avoid WeakPtr thread check issues.
@@ -815,12 +815,12 @@
     postAndWaitCreateBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge, &gl, this);
 
     // Register an alternate Logger for tracking hibernation events
-    OwnPtr<MockLogger> mockLogger = adoptPtr(new MockLogger);
+    std::unique_ptr<MockLogger> mockLogger = wrapUnique(new MockLogger);
     MockLogger* mockLoggerPtr = mockLogger.get();
     bridge->setLoggerForTesting(std::move(mockLogger));
 
     // Test entering hibernation
-    OwnPtr<WaitableEvent> hibernationStartedEvent = adoptPtr(new WaitableEvent());
+    std::unique_ptr<WaitableEvent> hibernationStartedEvent = wrapUnique(new WaitableEvent());
     EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent(Canvas2DLayerBridge::HibernationScheduled));
     EXPECT_CALL(*mockLoggerPtr, didStartHibernating())
         .WillOnce(testing::Invoke(hibernationStartedEvent.get(), &WaitableEvent::signal));
@@ -842,7 +842,7 @@
     EXPECT_TRUE(bridge->checkSurfaceValid());
 
     // End hibernation normally
-    OwnPtr<WaitableEvent> hibernationEndedEvent = adoptPtr(new WaitableEvent());
+    std::unique_ptr<WaitableEvent> hibernationEndedEvent = wrapUnique(new WaitableEvent());
     EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent(Canvas2DLayerBridge::HibernationEndedNormally))
         .WillOnce(testing::InvokeWithoutArgs(hibernationEndedEvent.get(), &WaitableEvent::signal));
     postSetIsHiddenTask(BLINK_FROM_HERE, testThread.get(), bridge.get(), false);
@@ -876,7 +876,7 @@
 #endif
 {
     FakeGLES2Interface gl;
-    OwnPtr<WebThread> testThread = adoptPtr(Platform::current()->createThread("TestThread"));
+    std::unique_ptr<WebThread> testThread = wrapUnique(Platform::current()->createThread("TestThread"));
 
     // The Canvas2DLayerBridge has to be created on the thread that will use it
     // to avoid WeakPtr thread check issues.
@@ -884,12 +884,12 @@
     postAndWaitCreateBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge, &gl, this);
 
     // Register an alternate Logger for tracking hibernation events
-    OwnPtr<MockLogger> mockLogger = adoptPtr(new MockLogger);
+    std::unique_ptr<MockLogger> mockLogger = wrapUnique(new MockLogger);
     MockLogger* mockLoggerPtr = mockLogger.get();
     bridge->setLoggerForTesting(std::move(mockLogger));
 
     // Test entering hibernation
-    OwnPtr<WaitableEvent> hibernationScheduledEvent = adoptPtr(new WaitableEvent());
+    std::unique_ptr<WaitableEvent> hibernationScheduledEvent = wrapUnique(new WaitableEvent());
     EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent(Canvas2DLayerBridge::HibernationScheduled));
     postSetIsHiddenTask(BLINK_FROM_HERE, testThread.get(), bridge.get(), true, hibernationScheduledEvent.get());
     postDestroyBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge);
@@ -904,7 +904,7 @@
     // completion before the thread is destroyed.
     // This test passes by not crashing, which proves that the WeakPtr logic
     // is sound.
-    OwnPtr<WaitableEvent> fenceEvent = adoptPtr(new WaitableEvent());
+    std::unique_ptr<WaitableEvent> fenceEvent = wrapUnique(new WaitableEvent());
     testThread->scheduler()->postIdleTask(BLINK_FROM_HERE, new IdleFenceTask(fenceEvent.get()));
     fenceEvent->wait();
 }
@@ -916,7 +916,7 @@
 #endif
 {
     FakeGLES2Interface gl;
-    OwnPtr<WebThread> testThread = adoptPtr(Platform::current()->createThread("TestThread"));
+    std::unique_ptr<WebThread> testThread = wrapUnique(Platform::current()->createThread("TestThread"));
 
     // The Canvas2DLayerBridge has to be created on the thread that will use it
     // to avoid WeakPtr thread check issues.
@@ -924,12 +924,12 @@
     postAndWaitCreateBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge, &gl, this);
 
     // Register an alternate Logger for tracking hibernation events
-    OwnPtr<MockLogger> mockLogger = adoptPtr(new MockLogger);
+    std::unique_ptr<MockLogger> mockLogger = wrapUnique(new MockLogger);
     MockLogger* mockLoggerPtr = mockLogger.get();
     bridge->setLoggerForTesting(std::move(mockLogger));
 
     // Test entering hibernation
-    OwnPtr<WaitableEvent> hibernationAbortedEvent = adoptPtr(new WaitableEvent());
+    std::unique_ptr<WaitableEvent> hibernationAbortedEvent = wrapUnique(new WaitableEvent());
     EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent(Canvas2DLayerBridge::HibernationScheduled));
     EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent(Canvas2DLayerBridge::HibernationAbortedDueToPendingDestruction))
         .WillOnce(testing::InvokeWithoutArgs(hibernationAbortedEvent.get(), &WaitableEvent::signal));
@@ -950,7 +950,7 @@
 #endif
 {
     FakeGLES2Interface gl;
-    OwnPtr<WebThread> testThread = adoptPtr(Platform::current()->createThread("TestThread"));
+    std::unique_ptr<WebThread> testThread = wrapUnique(Platform::current()->createThread("TestThread"));
 
     // The Canvas2DLayerBridge has to be created on the thread that will use it
     // to avoid WeakPtr thread check issues.
@@ -958,12 +958,12 @@
     postAndWaitCreateBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge, &gl, this);
 
     // Register an alternate Logger for tracking hibernation events
-    OwnPtr<MockLogger> mockLogger = adoptPtr(new MockLogger);
+    std::unique_ptr<MockLogger> mockLogger = wrapUnique(new MockLogger);
     MockLogger* mockLoggerPtr = mockLogger.get();
     bridge->setLoggerForTesting(std::move(mockLogger));
 
     // Test entering hibernation
-    OwnPtr<WaitableEvent> hibernationAbortedEvent = adoptPtr(new WaitableEvent());
+    std::unique_ptr<WaitableEvent> hibernationAbortedEvent = wrapUnique(new WaitableEvent());
     EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent(Canvas2DLayerBridge::HibernationScheduled));
     EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent(Canvas2DLayerBridge::HibernationAbortedDueToVisibilityChange))
         .WillOnce(testing::InvokeWithoutArgs(hibernationAbortedEvent.get(), &WaitableEvent::signal));
@@ -987,7 +987,7 @@
 #endif
 {
     FakeGLES2Interface gl;
-    OwnPtr<WebThread> testThread = adoptPtr(Platform::current()->createThread("TestThread"));
+    std::unique_ptr<WebThread> testThread = wrapUnique(Platform::current()->createThread("TestThread"));
 
     // The Canvas2DLayerBridge has to be created on the thread that will use it
     // to avoid WeakPtr thread check issues.
@@ -995,13 +995,13 @@
     postAndWaitCreateBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge, &gl, this);
 
     // Register an alternate Logger for tracking hibernation events
-    OwnPtr<MockLogger> mockLogger = adoptPtr(new MockLogger);
+    std::unique_ptr<MockLogger> mockLogger = wrapUnique(new MockLogger);
     MockLogger* mockLoggerPtr = mockLogger.get();
     bridge->setLoggerForTesting(std::move(mockLogger));
 
     gl.setIsContextLost(true);
     // Test entering hibernation
-    OwnPtr<WaitableEvent> hibernationAbortedEvent = adoptPtr(new WaitableEvent());
+    std::unique_ptr<WaitableEvent> hibernationAbortedEvent = wrapUnique(new WaitableEvent());
     EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent(Canvas2DLayerBridge::HibernationScheduled));
     EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent(Canvas2DLayerBridge::HibernationAbortedDueGpuContextLoss))
         .WillOnce(testing::InvokeWithoutArgs(hibernationAbortedEvent.get(), &WaitableEvent::signal));
@@ -1022,7 +1022,7 @@
 #endif
 {
     FakeGLES2Interface gl;
-    OwnPtr<WebThread> testThread = adoptPtr(Platform::current()->createThread("TestThread"));
+    std::unique_ptr<WebThread> testThread = wrapUnique(Platform::current()->createThread("TestThread"));
 
     // The Canvas2DLayerBridge has to be created on the thread that will use it
     // to avoid WeakPtr thread check issues.
@@ -1030,12 +1030,12 @@
     postAndWaitCreateBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge, &gl, this);
 
     // Register an alternate Logger for tracking hibernation events
-    OwnPtr<MockLogger> mockLogger = adoptPtr(new MockLogger);
+    std::unique_ptr<MockLogger> mockLogger = wrapUnique(new MockLogger);
     MockLogger* mockLoggerPtr = mockLogger.get();
     bridge->setLoggerForTesting(std::move(mockLogger));
 
     // Test entering hibernation
-    OwnPtr<WaitableEvent> hibernationStartedEvent = adoptPtr(new WaitableEvent());
+    std::unique_ptr<WaitableEvent> hibernationStartedEvent = wrapUnique(new WaitableEvent());
     EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent(Canvas2DLayerBridge::HibernationScheduled));
     EXPECT_CALL(*mockLoggerPtr, didStartHibernating())
         .WillOnce(testing::Invoke(hibernationStartedEvent.get(), &WaitableEvent::signal));
@@ -1061,7 +1061,7 @@
 #endif
 {
     FakeGLES2Interface gl;
-    OwnPtr<WebThread> testThread = adoptPtr(Platform::current()->createThread("TestThread"));
+    std::unique_ptr<WebThread> testThread = wrapUnique(Platform::current()->createThread("TestThread"));
 
     // The Canvas2DLayerBridge has to be created on the thread that will use it
     // to avoid WeakPtr thread check issues.
@@ -1069,12 +1069,12 @@
     postAndWaitCreateBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge, &gl, this);
 
     // Register an alternate Logger for tracking hibernation events
-    OwnPtr<MockLogger> mockLogger = adoptPtr(new MockLogger);
+    std::unique_ptr<MockLogger> mockLogger = wrapUnique(new MockLogger);
     MockLogger* mockLoggerPtr = mockLogger.get();
     bridge->setLoggerForTesting(std::move(mockLogger));
 
     // Test entering hibernation
-    OwnPtr<WaitableEvent> hibernationStartedEvent = adoptPtr(new WaitableEvent());
+    std::unique_ptr<WaitableEvent> hibernationStartedEvent = wrapUnique(new WaitableEvent());
     EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent(Canvas2DLayerBridge::HibernationScheduled));
     EXPECT_CALL(*mockLoggerPtr, didStartHibernating())
         .WillOnce(testing::Invoke(hibernationStartedEvent.get(), &WaitableEvent::signal));
diff --git a/third_party/WebKit/Source/platform/graphics/CanvasSurfaceLayerBridge.cpp b/third_party/WebKit/Source/platform/graphics/CanvasSurfaceLayerBridge.cpp
index b13d9ad7..03926147 100644
--- a/third_party/WebKit/Source/platform/graphics/CanvasSurfaceLayerBridge.cpp
+++ b/third_party/WebKit/Source/platform/graphics/CanvasSurfaceLayerBridge.cpp
@@ -9,6 +9,7 @@
 #include "public/platform/Platform.h"
 #include "public/platform/WebCompositorSupport.h"
 #include "public/platform/WebLayer.h"
+#include "wtf/PtrUtil.h"
 
 namespace blink {
 
@@ -16,7 +17,7 @@
 {
     m_solidColorLayer = cc::SolidColorLayer::Create();
     m_solidColorLayer->SetBackgroundColor(SK_ColorBLUE);
-    m_webLayer = adoptPtr(Platform::current()->compositorSupport()->createLayerFromCCLayer(m_solidColorLayer.get()));
+    m_webLayer = wrapUnique(Platform::current()->compositorSupport()->createLayerFromCCLayer(m_solidColorLayer.get()));
     GraphicsLayer::registerContentsLayer(m_webLayer.get());
 }
 
diff --git a/third_party/WebKit/Source/platform/graphics/CanvasSurfaceLayerBridge.h b/third_party/WebKit/Source/platform/graphics/CanvasSurfaceLayerBridge.h
index 3e9f320..5f9adc9 100644
--- a/third_party/WebKit/Source/platform/graphics/CanvasSurfaceLayerBridge.h
+++ b/third_party/WebKit/Source/platform/graphics/CanvasSurfaceLayerBridge.h
@@ -7,7 +7,7 @@
 
 #include "base/memory/ref_counted.h"
 #include "platform/PlatformExport.h"
-#include "wtf/OwnPtr.h"
+#include <memory>
 
 namespace cc {
 // TODO(611796): replace SolidColorLayer with SurfaceLayer
@@ -26,7 +26,7 @@
 
 private:
     scoped_refptr<cc::SolidColorLayer> m_solidColorLayer;
-    OwnPtr<WebLayer> m_webLayer;
+    std::unique_ptr<WebLayer> m_webLayer;
 };
 
 }
diff --git a/third_party/WebKit/Source/platform/graphics/CompositorFilterOperations.h b/third_party/WebKit/Source/platform/graphics/CompositorFilterOperations.h
index 0b3a941..beb590f9 100644
--- a/third_party/WebKit/Source/platform/graphics/CompositorFilterOperations.h
+++ b/third_party/WebKit/Source/platform/graphics/CompositorFilterOperations.h
@@ -11,7 +11,8 @@
 #include "platform/graphics/Color.h"
 #include "third_party/skia/include/core/SkScalar.h"
 #include "wtf/Noncopyable.h"
-#include "wtf/PassOwnPtr.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 class SkImageFilter;
 
@@ -21,9 +22,9 @@
 class PLATFORM_EXPORT CompositorFilterOperations {
     WTF_MAKE_NONCOPYABLE(CompositorFilterOperations);
 public:
-    static PassOwnPtr<CompositorFilterOperations> create()
+    static std::unique_ptr<CompositorFilterOperations> create()
     {
-        return adoptPtr(new CompositorFilterOperations());
+        return wrapUnique(new CompositorFilterOperations());
     }
 
     const cc::FilterOperations& asFilterOperations() const;
diff --git a/third_party/WebKit/Source/platform/graphics/CompositorMutableStateProvider.cpp b/third_party/WebKit/Source/platform/graphics/CompositorMutableStateProvider.cpp
index 82886a1b..04f8c9c9 100644
--- a/third_party/WebKit/Source/platform/graphics/CompositorMutableStateProvider.cpp
+++ b/third_party/WebKit/Source/platform/graphics/CompositorMutableStateProvider.cpp
@@ -8,8 +8,8 @@
 #include "cc/trees/layer_tree_impl.h"
 #include "platform/graphics/CompositorMutableState.h"
 #include "platform/graphics/CompositorMutation.h"
-#include "wtf/PassOwnPtr.h"
 #include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
@@ -36,7 +36,7 @@
 
     // Only if this is a new entry do we want to allocate a new mutation.
     if (result.isNewEntry)
-        result.storedValue->value = adoptPtr(new CompositorMutation);
+        result.storedValue->value = wrapUnique(new CompositorMutation);
 
     return wrapUnique(new CompositorMutableState(result.storedValue->value.get(), layers.main, layers.scroll));
 }
diff --git a/third_party/WebKit/Source/platform/graphics/CompositorMutableStateProvider.h b/third_party/WebKit/Source/platform/graphics/CompositorMutableStateProvider.h
index 3f0bc4ea..91c6a531 100644
--- a/third_party/WebKit/Source/platform/graphics/CompositorMutableStateProvider.h
+++ b/third_party/WebKit/Source/platform/graphics/CompositorMutableStateProvider.h
@@ -6,7 +6,6 @@
 #define CompositorMutableStateProvider_h
 
 #include "platform/PlatformExport.h"
-
 #include <cstdint>
 #include <memory>
 
diff --git a/third_party/WebKit/Source/platform/graphics/CompositorMutableStateTest.cpp b/third_party/WebKit/Source/platform/graphics/CompositorMutableStateTest.cpp
index 0d0cb78d..994e8cf 100644
--- a/third_party/WebKit/Source/platform/graphics/CompositorMutableStateTest.cpp
+++ b/third_party/WebKit/Source/platform/graphics/CompositorMutableStateTest.cpp
@@ -16,7 +16,6 @@
 #include "platform/graphics/CompositorMutableStateProvider.h"
 #include "platform/graphics/CompositorMutation.h"
 #include "testing/gtest/include/gtest/gtest.h"
-
 #include <memory>
 
 namespace blink {
diff --git a/third_party/WebKit/Source/platform/graphics/CompositorMutation.h b/third_party/WebKit/Source/platform/graphics/CompositorMutation.h
index 971540af..b712cc8 100644
--- a/third_party/WebKit/Source/platform/graphics/CompositorMutation.h
+++ b/third_party/WebKit/Source/platform/graphics/CompositorMutation.h
@@ -8,6 +8,7 @@
 #include "platform/graphics/CompositorMutableProperties.h"
 #include "third_party/skia/include/core/SkMatrix44.h"
 #include "wtf/HashMap.h"
+#include <memory>
 
 namespace blink {
 
@@ -53,7 +54,7 @@
 };
 
 struct CompositorMutations {
-    HashMap<uint64_t, OwnPtr<CompositorMutation>> map;
+    HashMap<uint64_t, std::unique_ptr<CompositorMutation>> map;
 };
 
 } // namespace blink
diff --git a/third_party/WebKit/Source/platform/graphics/CompositorMutatorClient.cpp b/third_party/WebKit/Source/platform/graphics/CompositorMutatorClient.cpp
index b3d04d8..8c47f77 100644
--- a/third_party/WebKit/Source/platform/graphics/CompositorMutatorClient.cpp
+++ b/third_party/WebKit/Source/platform/graphics/CompositorMutatorClient.cpp
@@ -12,6 +12,8 @@
 #include "platform/graphics/CompositorMutation.h"
 #include "platform/graphics/CompositorMutationsTarget.h"
 #include "platform/graphics/CompositorMutator.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
@@ -36,7 +38,7 @@
     TRACE_EVENT0("compositor-worker", "CompositorMutatorClient::Mutate");
     double monotonicTimeNow = (monotonicTime - base::TimeTicks()).InSecondsF();
     if (!m_mutations)
-        m_mutations = adoptPtr(new CompositorMutations);
+        m_mutations = wrapUnique(new CompositorMutations);
     CompositorMutableStateProvider compositorState(treeImpl, m_mutations.get());
     bool shouldReinvoke = m_mutator->mutate(monotonicTimeNow, &compositorState);
     return shouldReinvoke;
@@ -57,7 +59,7 @@
 
     return base::Bind(&CompositorMutationsTarget::applyMutations,
         base::Unretained(m_mutationsTarget),
-        base::Owned(m_mutations.leakPtr()));
+        base::Owned(m_mutations.release()));
 }
 
 void CompositorMutatorClient::setNeedsMutate()
@@ -66,7 +68,7 @@
     m_client->SetNeedsMutate();
 }
 
-void CompositorMutatorClient::setMutationsForTesting(PassOwnPtr<CompositorMutations> mutations)
+void CompositorMutatorClient::setMutationsForTesting(std::unique_ptr<CompositorMutations> mutations)
 {
     m_mutations = std::move(mutations);
 }
diff --git a/third_party/WebKit/Source/platform/graphics/CompositorMutatorClient.h b/third_party/WebKit/Source/platform/graphics/CompositorMutatorClient.h
index 6adfb58..6fb3299 100644
--- a/third_party/WebKit/Source/platform/graphics/CompositorMutatorClient.h
+++ b/third_party/WebKit/Source/platform/graphics/CompositorMutatorClient.h
@@ -8,8 +8,7 @@
 #include "platform/PlatformExport.h"
 #include "platform/heap/Handle.h"
 #include "public/platform/WebCompositorMutatorClient.h"
-#include "wtf/OwnPtr.h"
-#include "wtf/PassOwnPtr.h"
+#include <memory>
 
 namespace blink {
 
@@ -31,12 +30,12 @@
 
     CompositorMutator* mutator() { return m_mutator.get(); }
 
-    void setMutationsForTesting(PassOwnPtr<CompositorMutations>);
+    void setMutationsForTesting(std::unique_ptr<CompositorMutations>);
 private:
     cc::LayerTreeMutatorClient* m_client;
     CompositorMutationsTarget* m_mutationsTarget;
     Persistent<CompositorMutator> m_mutator;
-    OwnPtr<CompositorMutations> m_mutations;
+    std::unique_ptr<CompositorMutations> m_mutations;
 };
 
 } // namespace blink
diff --git a/third_party/WebKit/Source/platform/graphics/CompositorMutatorClientTest.cpp b/third_party/WebKit/Source/platform/graphics/CompositorMutatorClientTest.cpp
index 26fade6..58c8e61 100644
--- a/third_party/WebKit/Source/platform/graphics/CompositorMutatorClientTest.cpp
+++ b/third_party/WebKit/Source/platform/graphics/CompositorMutatorClientTest.cpp
@@ -10,7 +10,8 @@
 #include "platform/graphics/CompositorMutator.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
-#include "wtf/OwnPtr.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 using ::testing::_;
 
@@ -38,7 +39,7 @@
     MockCompositoMutationsTarget target;
 
     CompositorMutatorClient client(new StubCompositorMutator, &target);
-    OwnPtr<CompositorMutations> mutations = adoptPtr(new CompositorMutations());
+    std::unique_ptr<CompositorMutations> mutations = wrapUnique(new CompositorMutations());
     client.setMutationsForTesting(std::move(mutations));
 
     EXPECT_CALL(target, applyMutations(_));
diff --git a/third_party/WebKit/Source/platform/graphics/ContentLayerDelegate.h b/third_party/WebKit/Source/platform/graphics/ContentLayerDelegate.h
index cfe4403..f84f27d 100644
--- a/third_party/WebKit/Source/platform/graphics/ContentLayerDelegate.h
+++ b/third_party/WebKit/Source/platform/graphics/ContentLayerDelegate.h
@@ -30,7 +30,6 @@
 #include "public/platform/WebContentLayerClient.h"
 #include "wtf/Allocator.h"
 #include "wtf/Noncopyable.h"
-#include "wtf/PassOwnPtr.h"
 
 class SkCanvas;
 
diff --git a/third_party/WebKit/Source/platform/graphics/ContiguousContainer.cpp b/third_party/WebKit/Source/platform/graphics/ContiguousContainer.cpp
index 7b8980d..cb42fef 100644
--- a/third_party/WebKit/Source/platform/graphics/ContiguousContainer.cpp
+++ b/third_party/WebKit/Source/platform/graphics/ContiguousContainer.cpp
@@ -6,10 +6,11 @@
 
 #include "wtf/Allocator.h"
 #include "wtf/ContainerAnnotations.h"
-#include "wtf/PassOwnPtr.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/allocator/PartitionAlloc.h"
 #include "wtf/allocator/Partitions.h"
 #include <algorithm>
+#include <memory>
 
 namespace blink {
 
@@ -174,7 +175,7 @@
 ContiguousContainerBase::allocateNewBufferForNextAllocation(size_t bufferSize, const char* typeName)
 {
     ASSERT(m_buffers.isEmpty() || m_endIndex == m_buffers.size() - 1);
-    OwnPtr<Buffer> newBuffer = adoptPtr(new Buffer(bufferSize, typeName));
+    std::unique_ptr<Buffer> newBuffer = wrapUnique(new Buffer(bufferSize, typeName));
     Buffer* bufferToReturn = newBuffer.get();
     m_buffers.append(std::move(newBuffer));
     m_endIndex = m_buffers.size() - 1;
diff --git a/third_party/WebKit/Source/platform/graphics/ContiguousContainer.h b/third_party/WebKit/Source/platform/graphics/ContiguousContainer.h
index a52ad85..a50431b 100644
--- a/third_party/WebKit/Source/platform/graphics/ContiguousContainer.h
+++ b/third_party/WebKit/Source/platform/graphics/ContiguousContainer.h
@@ -10,11 +10,11 @@
 #include "wtf/Allocator.h"
 #include "wtf/Compiler.h"
 #include "wtf/Noncopyable.h"
-#include "wtf/OwnPtr.h"
 #include "wtf/TypeTraits.h"
 #include "wtf/Vector.h"
 #include <cstddef>
 #include <iterator>
+#include <memory>
 #include <utility>
 
 namespace blink {
@@ -67,7 +67,7 @@
 
     Buffer* allocateNewBufferForNextAllocation(size_t, const char* typeName);
 
-    Vector<OwnPtr<Buffer>> m_buffers;
+    Vector<std::unique_ptr<Buffer>> m_buffers;
     unsigned m_endIndex;
     size_t m_maxObjectSize;
 };
diff --git a/third_party/WebKit/Source/platform/graphics/DecodingImageGenerator.cpp b/third_party/WebKit/Source/platform/graphics/DecodingImageGenerator.cpp
index b7f8c45..160ecd4 100644
--- a/third_party/WebKit/Source/platform/graphics/DecodingImageGenerator.cpp
+++ b/third_party/WebKit/Source/platform/graphics/DecodingImageGenerator.cpp
@@ -32,6 +32,7 @@
 #include "platform/image-decoders/ImageDecoder.h"
 #include "platform/image-decoders/SegmentReader.h"
 #include "third_party/skia/include/core/SkData.h"
+#include <memory>
 
 namespace blink {
 
@@ -109,7 +110,7 @@
 {
     // We just need the size of the image, so we have to temporarily create an ImageDecoder. Since
     // we only need the size, it doesn't really matter about premul or not, or gamma settings.
-    OwnPtr<ImageDecoder> decoder = ImageDecoder::create(static_cast<const char*>(data->data()), data->size(),
+    std::unique_ptr<ImageDecoder> decoder = ImageDecoder::create(static_cast<const char*>(data->data()), data->size(),
         ImageDecoder::AlphaPremultiplied, ImageDecoder::GammaAndColorProfileApplied);
     if (!decoder)
         return 0;
diff --git a/third_party/WebKit/Source/platform/graphics/DeferredImageDecoder.cpp b/third_party/WebKit/Source/platform/graphics/DeferredImageDecoder.cpp
index 09fa440..60d6544 100644
--- a/third_party/WebKit/Source/platform/graphics/DeferredImageDecoder.cpp
+++ b/third_party/WebKit/Source/platform/graphics/DeferredImageDecoder.cpp
@@ -33,7 +33,8 @@
 #include "platform/graphics/skia/SkiaUtils.h"
 #include "platform/image-decoders/SegmentReader.h"
 #include "third_party/skia/include/core/SkImage.h"
-#include "wtf/PassOwnPtr.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
@@ -56,22 +57,22 @@
     uint32_t m_uniqueID;
 };
 
-PassOwnPtr<DeferredImageDecoder> DeferredImageDecoder::create(const SharedBuffer& data, ImageDecoder::AlphaOption alphaOption, ImageDecoder::GammaAndColorProfileOption colorOptions)
+std::unique_ptr<DeferredImageDecoder> DeferredImageDecoder::create(const SharedBuffer& data, ImageDecoder::AlphaOption alphaOption, ImageDecoder::GammaAndColorProfileOption colorOptions)
 {
-    OwnPtr<ImageDecoder> actualDecoder = ImageDecoder::create(data, alphaOption, colorOptions);
+    std::unique_ptr<ImageDecoder> actualDecoder = ImageDecoder::create(data, alphaOption, colorOptions);
 
     if (!actualDecoder)
         return nullptr;
 
-    return adoptPtr(new DeferredImageDecoder(std::move(actualDecoder)));
+    return wrapUnique(new DeferredImageDecoder(std::move(actualDecoder)));
 }
 
-PassOwnPtr<DeferredImageDecoder> DeferredImageDecoder::createForTesting(PassOwnPtr<ImageDecoder> actualDecoder)
+std::unique_ptr<DeferredImageDecoder> DeferredImageDecoder::createForTesting(std::unique_ptr<ImageDecoder> actualDecoder)
 {
-    return adoptPtr(new DeferredImageDecoder(std::move(actualDecoder)));
+    return wrapUnique(new DeferredImageDecoder(std::move(actualDecoder)));
 }
 
-DeferredImageDecoder::DeferredImageDecoder(PassOwnPtr<ImageDecoder> actualDecoder)
+DeferredImageDecoder::DeferredImageDecoder(std::unique_ptr<ImageDecoder> actualDecoder)
     : m_allDataReceived(false)
     , m_actualDecoder(std::move(actualDecoder))
     , m_repetitionCount(cAnimationNone)
@@ -129,7 +130,7 @@
 
     if (m_frameGenerator) {
         if (!m_rwBuffer)
-            m_rwBuffer = adoptPtr(new SkRWBuffer(data.size()));
+            m_rwBuffer = wrapUnique(new SkRWBuffer(data.size()));
 
         const char* segment = 0;
         for (size_t length = data.getSomeData(segment, m_rwBuffer->size());
diff --git a/third_party/WebKit/Source/platform/graphics/DeferredImageDecoder.h b/third_party/WebKit/Source/platform/graphics/DeferredImageDecoder.h
index 4838182..3db9411 100644
--- a/third_party/WebKit/Source/platform/graphics/DeferredImageDecoder.h
+++ b/third_party/WebKit/Source/platform/graphics/DeferredImageDecoder.h
@@ -32,8 +32,8 @@
 #include "third_party/skia/include/core/SkRWBuffer.h"
 #include "wtf/Allocator.h"
 #include "wtf/Forward.h"
-#include "wtf/OwnPtr.h"
 #include "wtf/Vector.h"
+#include <memory>
 
 class SkImage;
 
@@ -47,9 +47,9 @@
     WTF_MAKE_NONCOPYABLE(DeferredImageDecoder);
     USING_FAST_MALLOC(DeferredImageDecoder);
 public:
-    static PassOwnPtr<DeferredImageDecoder> create(const SharedBuffer& data, ImageDecoder::AlphaOption, ImageDecoder::GammaAndColorProfileOption);
+    static std::unique_ptr<DeferredImageDecoder> create(const SharedBuffer& data, ImageDecoder::AlphaOption, ImageDecoder::GammaAndColorProfileOption);
 
-    static PassOwnPtr<DeferredImageDecoder> createForTesting(PassOwnPtr<ImageDecoder>);
+    static std::unique_ptr<DeferredImageDecoder> createForTesting(std::unique_ptr<ImageDecoder>);
 
     ~DeferredImageDecoder();
 
@@ -74,7 +74,7 @@
     bool hotSpot(IntPoint&) const;
 
 private:
-    explicit DeferredImageDecoder(PassOwnPtr<ImageDecoder> actualDecoder);
+    explicit DeferredImageDecoder(std::unique_ptr<ImageDecoder> actualDecoder);
 
     friend class DeferredImageDecoderTest;
     ImageFrameGenerator* frameGenerator() { return m_frameGenerator.get(); }
@@ -86,9 +86,9 @@
 
     // Copy of the data that is passed in, used by deferred decoding.
     // Allows creating readonly snapshots that may be read in another thread.
-    OwnPtr<SkRWBuffer> m_rwBuffer;
+    std::unique_ptr<SkRWBuffer> m_rwBuffer;
     bool m_allDataReceived;
-    OwnPtr<ImageDecoder> m_actualDecoder;
+    std::unique_ptr<ImageDecoder> m_actualDecoder;
 
     String m_filenameExtension;
     IntSize m_size;
diff --git a/third_party/WebKit/Source/platform/graphics/DeferredImageDecoderTest.cpp b/third_party/WebKit/Source/platform/graphics/DeferredImageDecoderTest.cpp
index 09d3da1..c0a04ccc 100644
--- a/third_party/WebKit/Source/platform/graphics/DeferredImageDecoderTest.cpp
+++ b/third_party/WebKit/Source/platform/graphics/DeferredImageDecoderTest.cpp
@@ -42,7 +42,9 @@
 #include "third_party/skia/include/core/SkPixmap.h"
 #include "third_party/skia/include/core/SkSurface.h"
 #include "wtf/PassRefPtr.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/RefPtr.h"
+#include <memory>
 
 namespace blink {
 
@@ -99,7 +101,7 @@
         ImageDecodingStore::instance().setCacheLimitInBytes(1024 * 1024);
         m_data = SharedBuffer::create(whitePNG, sizeof(whitePNG));
         m_frameCount = 1;
-        OwnPtr<MockImageDecoder> decoder = MockImageDecoder::create(this);
+        std::unique_ptr<MockImageDecoder> decoder = MockImageDecoder::create(this);
         m_actualDecoder = decoder.get();
         m_actualDecoder->setSize(1, 1);
         m_lazyDecoder = DeferredImageDecoder::createForTesting(std::move(decoder));
@@ -160,7 +162,7 @@
 
     // Don't own this but saves the pointer to query states.
     MockImageDecoder* m_actualDecoder;
-    OwnPtr<DeferredImageDecoder> m_lazyDecoder;
+    std::unique_ptr<DeferredImageDecoder> m_lazyDecoder;
     sk_sp<SkSurface> m_surface;
     int m_decodeRequestCount;
     RefPtr<SharedBuffer> m_data;
@@ -243,7 +245,7 @@
     EXPECT_EQ(0, m_decodeRequestCount);
 
     // Create a thread to rasterize SkPicture.
-    OwnPtr<WebThread> thread = adoptPtr(Platform::current()->createThread("RasterThread"));
+    std::unique_ptr<WebThread> thread = wrapUnique(Platform::current()->createThread("RasterThread"));
     thread->getWebTaskRunner()->postTask(BLINK_FROM_HERE, threadSafeBind(&rasterizeMain, AllowCrossThreadAccess(m_surface->getCanvas()), AllowCrossThreadAccess(picture.get())));
     thread.reset();
     EXPECT_EQ(0, m_decodeRequestCount);
@@ -358,9 +360,9 @@
 
 TEST_F(DeferredImageDecoderTest, frameOpacity)
 {
-    OwnPtr<ImageDecoder> actualDecoder = ImageDecoder::create(*m_data,
+    std::unique_ptr<ImageDecoder> actualDecoder = ImageDecoder::create(*m_data,
         ImageDecoder::AlphaPremultiplied, ImageDecoder::GammaAndColorProfileApplied);
-    OwnPtr<DeferredImageDecoder> decoder = DeferredImageDecoder::createForTesting(std::move(actualDecoder));
+    std::unique_ptr<DeferredImageDecoder> decoder = DeferredImageDecoder::createForTesting(std::move(actualDecoder));
     decoder->setData(*m_data, true);
 
     SkImageInfo pixInfo = SkImageInfo::MakeN32Premul(1, 1);
diff --git a/third_party/WebKit/Source/platform/graphics/DeferredImageDecoderTestWoPlatform.cpp b/third_party/WebKit/Source/platform/graphics/DeferredImageDecoderTestWoPlatform.cpp
index f9677b3..80bf250 100644
--- a/third_party/WebKit/Source/platform/graphics/DeferredImageDecoderTestWoPlatform.cpp
+++ b/third_party/WebKit/Source/platform/graphics/DeferredImageDecoderTestWoPlatform.cpp
@@ -9,6 +9,7 @@
 #include "testing/gtest/include/gtest/gtest.h"
 #include "third_party/skia/include/core/SkImage.h"
 #include "wtf/RefPtr.h"
+#include <memory>
 
 namespace blink {
 
@@ -34,7 +35,7 @@
     RefPtr<SharedBuffer> file = readFile(fileName);
     ASSERT_NE(file, nullptr);
 
-    OwnPtr<DeferredImageDecoder> decoder = DeferredImageDecoder::create(*file.get(), ImageDecoder::AlphaPremultiplied, ImageDecoder::GammaAndColorProfileIgnored);
+    std::unique_ptr<DeferredImageDecoder> decoder = DeferredImageDecoder::create(*file.get(), ImageDecoder::AlphaPremultiplied, ImageDecoder::GammaAndColorProfileIgnored);
     ASSERT_TRUE(decoder.get());
 
     RefPtr<SharedBuffer> partialFile = SharedBuffer::create(file->data(), bytesForFirstFrame);
diff --git a/third_party/WebKit/Source/platform/graphics/DrawLooperBuilder.cpp b/third_party/WebKit/Source/platform/graphics/DrawLooperBuilder.cpp
index 7b3e224..018d193 100644
--- a/third_party/WebKit/Source/platform/graphics/DrawLooperBuilder.cpp
+++ b/third_party/WebKit/Source/platform/graphics/DrawLooperBuilder.cpp
@@ -39,7 +39,9 @@
 #include "third_party/skia/include/core/SkPaint.h"
 #include "third_party/skia/include/core/SkXfermode.h"
 #include "third_party/skia/include/effects/SkBlurMaskFilter.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/RefPtr.h"
+#include <memory>
 
 namespace blink {
 
@@ -47,9 +49,9 @@
 
 DrawLooperBuilder::~DrawLooperBuilder() { }
 
-PassOwnPtr<DrawLooperBuilder> DrawLooperBuilder::create()
+std::unique_ptr<DrawLooperBuilder> DrawLooperBuilder::create()
 {
-    return adoptPtr(new DrawLooperBuilder);
+    return wrapUnique(new DrawLooperBuilder);
 }
 
 PassRefPtr<SkDrawLooper> DrawLooperBuilder::detachDrawLooper()
diff --git a/third_party/WebKit/Source/platform/graphics/DrawLooperBuilder.h b/third_party/WebKit/Source/platform/graphics/DrawLooperBuilder.h
index b94f5a7f..eeb03dfd 100644
--- a/third_party/WebKit/Source/platform/graphics/DrawLooperBuilder.h
+++ b/third_party/WebKit/Source/platform/graphics/DrawLooperBuilder.h
@@ -35,8 +35,8 @@
 #include "third_party/skia/include/effects/SkLayerDrawLooper.h"
 #include "wtf/Allocator.h"
 #include "wtf/Noncopyable.h"
-#include "wtf/PassOwnPtr.h"
 #include "wtf/PassRefPtr.h"
+#include <memory>
 
 class SkDrawLooper;
 
@@ -64,7 +64,7 @@
     DrawLooperBuilder();
     ~DrawLooperBuilder();
 
-    static PassOwnPtr<DrawLooperBuilder> create();
+    static std::unique_ptr<DrawLooperBuilder> create();
 
     // Creates the SkDrawLooper and passes ownership to the caller. The builder
     // should not be used any more after calling this method.
diff --git a/third_party/WebKit/Source/platform/graphics/GraphicsContext.cpp b/third_party/WebKit/Source/platform/graphics/GraphicsContext.cpp
index 0244a5ad..d0fbe4e 100644
--- a/third_party/WebKit/Source/platform/graphics/GraphicsContext.cpp
+++ b/third_party/WebKit/Source/platform/graphics/GraphicsContext.cpp
@@ -49,6 +49,7 @@
 #include "third_party/skia/include/utils/SkNullCanvas.h"
 #include "wtf/Assertions.h"
 #include "wtf/MathExtras.h"
+#include <memory>
 
 namespace blink {
 
@@ -175,7 +176,7 @@
     if (contextDisabled())
         return;
 
-    OwnPtr<DrawLooperBuilder> drawLooperBuilder = DrawLooperBuilder::create();
+    std::unique_ptr<DrawLooperBuilder> drawLooperBuilder = DrawLooperBuilder::create();
     if (!color.alpha()) {
         // When shadow-only but there is no shadow, we use an empty draw looper
         // to disable rendering of the source primitive.  When not shadow-only, we
@@ -194,7 +195,7 @@
     setDrawLooper(std::move(drawLooperBuilder));
 }
 
-void GraphicsContext::setDrawLooper(PassOwnPtr<DrawLooperBuilder> drawLooperBuilder)
+void GraphicsContext::setDrawLooper(std::unique_ptr<DrawLooperBuilder> drawLooperBuilder)
 {
     if (contextDisabled())
         return;
@@ -433,7 +434,7 @@
         clip(rect.rect());
     }
 
-    OwnPtr<DrawLooperBuilder> drawLooperBuilder = DrawLooperBuilder::create();
+    std::unique_ptr<DrawLooperBuilder> drawLooperBuilder = DrawLooperBuilder::create();
     drawLooperBuilder->addShadow(FloatSize(shadowOffset), shadowBlur, shadowColor,
         DrawLooperBuilder::ShadowRespectsTransforms, DrawLooperBuilder::ShadowIgnoresAlpha);
     setDrawLooper(std::move(drawLooperBuilder));
diff --git a/third_party/WebKit/Source/platform/graphics/GraphicsContext.h b/third_party/WebKit/Source/platform/graphics/GraphicsContext.h
index ff0ba7a..71fde7ed 100644
--- a/third_party/WebKit/Source/platform/graphics/GraphicsContext.h
+++ b/third_party/WebKit/Source/platform/graphics/GraphicsContext.h
@@ -41,7 +41,7 @@
 #include "wtf/Allocator.h"
 #include "wtf/Forward.h"
 #include "wtf/Noncopyable.h"
-#include "wtf/PassOwnPtr.h"
+#include <memory>
 
 class SkBitmap;
 class SkImage;
@@ -215,7 +215,7 @@
     // It is assumed that this draw looper is used only for shadows
     // (i.e. a draw looper is set if and only if there is a shadow).
     // The builder passed into this method will be destroyed.
-    void setDrawLooper(PassOwnPtr<DrawLooperBuilder>);
+    void setDrawLooper(std::unique_ptr<DrawLooperBuilder>);
 
     void drawFocusRing(const Vector<IntRect>&, int width, int offset, const Color&);
     void drawFocusRing(const Path&, int width, int offset, const Color&);
@@ -343,7 +343,7 @@
     // Paint states stack. Enables local drawing state change with save()/restore() calls.
     // This state controls the appearance of drawn content.
     // We do not delete from this stack to avoid memory churn.
-    Vector<OwnPtr<GraphicsContextState>> m_paintStateStack;
+    Vector<std::unique_ptr<GraphicsContextState>> m_paintStateStack;
     // Current index on the stack. May not be the last thing on the stack.
     unsigned m_paintStateIndex;
     // Raw pointer to the current state.
diff --git a/third_party/WebKit/Source/platform/graphics/GraphicsContextState.h b/third_party/WebKit/Source/platform/graphics/GraphicsContextState.h
index df82cfe..b8605c5b 100644
--- a/third_party/WebKit/Source/platform/graphics/GraphicsContextState.h
+++ b/third_party/WebKit/Source/platform/graphics/GraphicsContextState.h
@@ -36,8 +36,9 @@
 #include "third_party/skia/include/core/SkPaint.h"
 #include "wtf/Allocator.h"
 #include "wtf/Noncopyable.h"
-#include "wtf/PassOwnPtr.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/RefPtr.h"
+#include <memory>
 
 namespace blink {
 
@@ -46,14 +47,14 @@
 class PLATFORM_EXPORT GraphicsContextState final {
     USING_FAST_MALLOC(GraphicsContextState);
 public:
-    static PassOwnPtr<GraphicsContextState> create()
+    static std::unique_ptr<GraphicsContextState> create()
     {
-        return adoptPtr(new GraphicsContextState());
+        return wrapUnique(new GraphicsContextState());
     }
 
-    static PassOwnPtr<GraphicsContextState> createAndCopy(const GraphicsContextState& other)
+    static std::unique_ptr<GraphicsContextState> createAndCopy(const GraphicsContextState& other)
     {
-        return adoptPtr(new GraphicsContextState(other));
+        return wrapUnique(new GraphicsContextState(other));
     }
 
     void copy(const GraphicsContextState&);
diff --git a/third_party/WebKit/Source/platform/graphics/GraphicsContextTest.cpp b/third_party/WebKit/Source/platform/graphics/GraphicsContextTest.cpp
index 46da10f..5b5886e5 100644
--- a/third_party/WebKit/Source/platform/graphics/GraphicsContextTest.cpp
+++ b/third_party/WebKit/Source/platform/graphics/GraphicsContextTest.cpp
@@ -32,6 +32,7 @@
 #include "third_party/skia/include/core/SkCanvas.h"
 #include "third_party/skia/include/core/SkPicture.h"
 #include "third_party/skia/include/core/SkShader.h"
+#include <memory>
 
 namespace blink {
 
@@ -69,7 +70,7 @@
     bitmap.eraseColor(0);
     SkCanvas canvas(bitmap);
 
-    OwnPtr<PaintController> paintController = PaintController::create();
+    std::unique_ptr<PaintController> paintController = PaintController::create();
     GraphicsContext context(*paintController);
 
     Color opaque(1.0f, 0.0f, 0.0f, 1.0f);
@@ -102,7 +103,7 @@
     Color alpha(0.0f, 0.0f, 0.0f, 0.0f);
     FloatRect bounds(0, 0, 100, 100);
 
-    OwnPtr<PaintController> paintController = PaintController::create();
+    std::unique_ptr<PaintController> paintController = PaintController::create();
     GraphicsContext context(*paintController);
     context.beginRecording(bounds);
 
diff --git a/third_party/WebKit/Source/platform/graphics/GraphicsLayer.cpp b/third_party/WebKit/Source/platform/graphics/GraphicsLayer.cpp
index 7572bd3b..7a3cfb4 100644
--- a/third_party/WebKit/Source/platform/graphics/GraphicsLayer.cpp
+++ b/third_party/WebKit/Source/platform/graphics/GraphicsLayer.cpp
@@ -57,10 +57,12 @@
 #include "wtf/HashMap.h"
 #include "wtf/HashSet.h"
 #include "wtf/MathExtras.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/text/StringUTF8Adaptor.h"
 #include "wtf/text/WTFString.h"
 #include <algorithm>
 #include <cmath>
+#include <memory>
 #include <utility>
 
 #ifndef NDEBUG
@@ -107,9 +109,9 @@
     return map;
 }
 
-PassOwnPtr<GraphicsLayer> GraphicsLayer::create(GraphicsLayerClient* client)
+std::unique_ptr<GraphicsLayer> GraphicsLayer::create(GraphicsLayerClient* client)
 {
-    return adoptPtr(new GraphicsLayer(client));
+    return wrapUnique(new GraphicsLayer(client));
 }
 
 GraphicsLayer::GraphicsLayer(GraphicsLayerClient* client)
@@ -148,8 +150,8 @@
         m_client->verifyNotPainting();
 #endif
 
-    m_contentLayerDelegate = adoptPtr(new ContentLayerDelegate(this));
-    m_layer = adoptPtr(Platform::current()->compositorSupport()->createContentLayer(m_contentLayerDelegate.get()));
+    m_contentLayerDelegate = wrapUnique(new ContentLayerDelegate(this));
+    m_layer = wrapUnique(Platform::current()->compositorSupport()->createContentLayer(m_contentLayerDelegate.get()));
     m_layer->layer()->setDrawsContent(m_drawsContent && m_contentsVisible);
     m_layer->layer()->setLayerClient(this);
 }
@@ -1155,7 +1157,7 @@
 
     if (image && skImage) {
         if (!m_imageLayer) {
-            m_imageLayer = adoptPtr(Platform::current()->compositorSupport()->createImageLayer());
+            m_imageLayer = wrapUnique(Platform::current()->compositorSupport()->createImageLayer());
             registerContentsLayer(m_imageLayer->layer());
         }
         m_imageLayer->setImage(skImage.get());
@@ -1178,14 +1180,14 @@
 
 void GraphicsLayer::setFilters(const FilterOperations& filters)
 {
-    OwnPtr<CompositorFilterOperations> compositorFilters = CompositorFilterOperations::create();
+    std::unique_ptr<CompositorFilterOperations> compositorFilters = CompositorFilterOperations::create();
     SkiaImageFilterBuilder::buildFilterOperations(filters, compositorFilters.get());
     m_layer->layer()->setFilters(compositorFilters->asFilterOperations());
 }
 
 void GraphicsLayer::setBackdropFilters(const FilterOperations& filters)
 {
-    OwnPtr<CompositorFilterOperations> compositorFilters = CompositorFilterOperations::create();
+    std::unique_ptr<CompositorFilterOperations> compositorFilters = CompositorFilterOperations::create();
     SkiaImageFilterBuilder::buildFilterOperations(filters, compositorFilters.get());
     m_layer->layer()->setBackgroundFilters(compositorFilters->asFilterOperations());
 }
diff --git a/third_party/WebKit/Source/platform/graphics/GraphicsLayer.h b/third_party/WebKit/Source/platform/graphics/GraphicsLayer.h
index b6f7032..0b117dc 100644
--- a/third_party/WebKit/Source/platform/graphics/GraphicsLayer.h
+++ b/third_party/WebKit/Source/platform/graphics/GraphicsLayer.h
@@ -50,9 +50,8 @@
 #include "public/platform/WebImageLayer.h"
 #include "public/platform/WebLayerScrollClient.h"
 #include "third_party/skia/include/core/SkFilterQuality.h"
-#include "wtf/OwnPtr.h"
-#include "wtf/PassOwnPtr.h"
 #include "wtf/Vector.h"
+#include <memory>
 
 namespace blink {
 
@@ -72,7 +71,7 @@
 class PLATFORM_EXPORT GraphicsLayer : public WebLayerScrollClient, public cc::LayerClient, public DisplayItemClient {
     WTF_MAKE_NONCOPYABLE(GraphicsLayer); USING_FAST_MALLOC(GraphicsLayer);
 public:
-    static PassOwnPtr<GraphicsLayer> create(GraphicsLayerClient*);
+    static std::unique_ptr<GraphicsLayer> create(GraphicsLayerClient*);
 
     ~GraphicsLayer() override;
 
@@ -357,8 +356,8 @@
 
     int m_paintCount;
 
-    OwnPtr<WebContentLayer> m_layer;
-    OwnPtr<WebImageLayer> m_imageLayer;
+    std::unique_ptr<WebContentLayer> m_layer;
+    std::unique_ptr<WebImageLayer> m_imageLayer;
     WebLayer* m_contentsLayer;
     // We don't have ownership of m_contentsLayer, but we do want to know if a given layer is the
     // same as our current layer in setContentsTo(). Since m_contentsLayer may be deleted at this point,
@@ -368,13 +367,13 @@
 
     Vector<LinkHighlight*> m_linkHighlights;
 
-    OwnPtr<ContentLayerDelegate> m_contentLayerDelegate;
+    std::unique_ptr<ContentLayerDelegate> m_contentLayerDelegate;
 
     WeakPersistent<ScrollableArea> m_scrollableArea;
     GraphicsLayerDebugInfo m_debugInfo;
     int m_3dRenderingContext;
 
-    OwnPtr<PaintController> m_paintController;
+    std::unique_ptr<PaintController> m_paintController;
 
     IntRect m_previousInterestRect;
 
diff --git a/third_party/WebKit/Source/platform/graphics/GraphicsLayerTest.cpp b/third_party/WebKit/Source/platform/graphics/GraphicsLayerTest.cpp
index 1b2c3738..6464d428 100644
--- a/third_party/WebKit/Source/platform/graphics/GraphicsLayerTest.cpp
+++ b/third_party/WebKit/Source/platform/graphics/GraphicsLayerTest.cpp
@@ -43,7 +43,8 @@
 #include "public/platform/WebLayer.h"
 #include "public/platform/WebLayerTreeView.h"
 #include "testing/gtest/include/gtest/gtest.h"
-#include "wtf/PassOwnPtr.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
@@ -51,15 +52,15 @@
 public:
     GraphicsLayerTest()
     {
-        m_clipLayer = adoptPtr(new FakeGraphicsLayer(&m_client));
-        m_scrollElasticityLayer = adoptPtr(new FakeGraphicsLayer(&m_client));
-        m_graphicsLayer = adoptPtr(new FakeGraphicsLayer(&m_client));
+        m_clipLayer = wrapUnique(new FakeGraphicsLayer(&m_client));
+        m_scrollElasticityLayer = wrapUnique(new FakeGraphicsLayer(&m_client));
+        m_graphicsLayer = wrapUnique(new FakeGraphicsLayer(&m_client));
         m_clipLayer->addChild(m_scrollElasticityLayer.get());
         m_scrollElasticityLayer->addChild(m_graphicsLayer.get());
         m_graphicsLayer->platformLayer()->setScrollClipLayer(
             m_clipLayer->platformLayer());
         m_platformLayer = m_graphicsLayer->platformLayer();
-        m_layerTreeView = adoptPtr(new WebLayerTreeViewImplForTesting);
+        m_layerTreeView = wrapUnique(new WebLayerTreeViewImplForTesting);
         ASSERT(m_layerTreeView);
         m_layerTreeView->setRootLayer(*m_clipLayer->platformLayer());
         m_layerTreeView->registerViewportLayers(
@@ -77,12 +78,12 @@
 
 protected:
     WebLayer* m_platformLayer;
-    OwnPtr<FakeGraphicsLayer> m_graphicsLayer;
-    OwnPtr<FakeGraphicsLayer> m_scrollElasticityLayer;
-    OwnPtr<FakeGraphicsLayer> m_clipLayer;
+    std::unique_ptr<FakeGraphicsLayer> m_graphicsLayer;
+    std::unique_ptr<FakeGraphicsLayer> m_scrollElasticityLayer;
+    std::unique_ptr<FakeGraphicsLayer> m_clipLayer;
 
 private:
-    OwnPtr<WebLayerTreeView> m_layerTreeView;
+    std::unique_ptr<WebLayerTreeView> m_layerTreeView;
     FakeGraphicsLayerClient m_client;
 };
 
@@ -98,19 +99,19 @@
         return m_compositorPlayer.get();
     }
 
-    OwnPtr<CompositorAnimationPlayer> m_compositorPlayer;
+    std::unique_ptr<CompositorAnimationPlayer> m_compositorPlayer;
 };
 
 TEST_F(GraphicsLayerTest, updateLayerShouldFlattenTransformWithAnimations)
 {
     ASSERT_FALSE(m_platformLayer->hasActiveAnimationForTesting());
 
-    OwnPtr<CompositorFloatAnimationCurve> curve = CompositorFloatAnimationCurve::create();
+    std::unique_ptr<CompositorFloatAnimationCurve> curve = CompositorFloatAnimationCurve::create();
     curve->addCubicBezierKeyframe(CompositorFloatKeyframe(0.0, 0.0), CubicBezierTimingFunction::EaseType::EASE);
-    OwnPtr<CompositorAnimation> floatAnimation(CompositorAnimation::create(*curve, CompositorTargetProperty::OPACITY, 0, 0));
+    std::unique_ptr<CompositorAnimation> floatAnimation(CompositorAnimation::create(*curve, CompositorTargetProperty::OPACITY, 0, 0));
     int animationId = floatAnimation->id();
 
-    OwnPtr<CompositorAnimationTimeline> compositorTimeline = CompositorAnimationTimeline::create();
+    std::unique_ptr<CompositorAnimationTimeline> compositorTimeline = CompositorAnimationTimeline::create();
     AnimationPlayerForTesting player;
 
     layerTreeView()->attachCompositorAnimationTimeline(compositorTimeline->animationTimeline());
@@ -119,7 +120,7 @@
     player.compositorPlayer()->attachLayer(m_platformLayer);
     ASSERT_TRUE(player.compositorPlayer()->isLayerAttached());
 
-    player.compositorPlayer()->addAnimation(floatAnimation.leakPtr());
+    player.compositorPlayer()->addAnimation(floatAnimation.release());
 
     ASSERT_TRUE(m_platformLayer->hasActiveAnimationForTesting());
 
diff --git a/third_party/WebKit/Source/platform/graphics/ImageBuffer.cpp b/third_party/WebKit/Source/platform/graphics/ImageBuffer.cpp
index e545ca2..828ade9 100644
--- a/third_party/WebKit/Source/platform/graphics/ImageBuffer.cpp
+++ b/third_party/WebKit/Source/platform/graphics/ImageBuffer.cpp
@@ -54,29 +54,31 @@
 #include "third_party/skia/include/gpu/gl/GrGLTypes.h"
 #include "wtf/CheckedNumeric.h"
 #include "wtf/MathExtras.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/Vector.h"
 #include "wtf/text/Base64.h"
 #include "wtf/text/WTFString.h"
 #include "wtf/typed_arrays/ArrayBufferContents.h"
+#include <memory>
 
 namespace blink {
 
-PassOwnPtr<ImageBuffer> ImageBuffer::create(PassOwnPtr<ImageBufferSurface> surface)
+std::unique_ptr<ImageBuffer> ImageBuffer::create(std::unique_ptr<ImageBufferSurface> surface)
 {
     if (!surface->isValid())
         return nullptr;
-    return adoptPtr(new ImageBuffer(std::move(surface)));
+    return wrapUnique(new ImageBuffer(std::move(surface)));
 }
 
-PassOwnPtr<ImageBuffer> ImageBuffer::create(const IntSize& size, OpacityMode opacityMode, ImageInitializationMode initializationMode)
+std::unique_ptr<ImageBuffer> ImageBuffer::create(const IntSize& size, OpacityMode opacityMode, ImageInitializationMode initializationMode)
 {
-    OwnPtr<ImageBufferSurface> surface(adoptPtr(new UnacceleratedImageBufferSurface(size, opacityMode, initializationMode)));
+    std::unique_ptr<ImageBufferSurface> surface(wrapUnique(new UnacceleratedImageBufferSurface(size, opacityMode, initializationMode)));
     if (!surface->isValid())
         return nullptr;
-    return adoptPtr(new ImageBuffer(std::move(surface)));
+    return wrapUnique(new ImageBuffer(std::move(surface)));
 }
 
-ImageBuffer::ImageBuffer(PassOwnPtr<ImageBufferSurface> surface)
+ImageBuffer::ImageBuffer(std::unique_ptr<ImageBufferSurface> surface)
     : m_snapshotState(InitialSnapshotState)
     , m_surface(std::move(surface))
     , m_client(0)
@@ -204,12 +206,12 @@
     if (!textureInfo || !textureInfo->fID)
         return false;
 
-    OwnPtr<WebGraphicsContext3DProvider> provider = adoptPtr(Platform::current()->createSharedOffscreenGraphicsContext3DProvider());
+    std::unique_ptr<WebGraphicsContext3DProvider> provider = wrapUnique(Platform::current()->createSharedOffscreenGraphicsContext3DProvider());
     if (!provider)
         return false;
     gpu::gles2::GLES2Interface* sharedGL = provider->contextGL();
 
-    OwnPtr<WebExternalTextureMailbox> mailbox = adoptPtr(new WebExternalTextureMailbox);
+    std::unique_ptr<WebExternalTextureMailbox> mailbox = wrapUnique(new WebExternalTextureMailbox);
     mailbox->textureSize = WebSize(textureImage->width(), textureImage->height());
 
     // Contexts may be in a different share group. We must transfer the texture through a mailbox first
@@ -248,7 +250,7 @@
 {
     if (!drawingBuffer || !m_surface->isAccelerated())
         return false;
-    OwnPtr<WebGraphicsContext3DProvider> provider = adoptPtr(Platform::current()->createSharedOffscreenGraphicsContext3DProvider());
+    std::unique_ptr<WebGraphicsContext3DProvider> provider = wrapUnique(Platform::current()->createSharedOffscreenGraphicsContext3DProvider());
     if (!provider)
         return false;
     gpu::gles2::GLES2Interface* gl = provider->contextGL();
diff --git a/third_party/WebKit/Source/platform/graphics/ImageBuffer.h b/third_party/WebKit/Source/platform/graphics/ImageBuffer.h
index 20bcd76..56b9fd9 100644
--- a/third_party/WebKit/Source/platform/graphics/ImageBuffer.h
+++ b/third_party/WebKit/Source/platform/graphics/ImageBuffer.h
@@ -39,12 +39,11 @@
 #include "third_party/skia/include/core/SkPaint.h"
 #include "third_party/skia/include/core/SkPicture.h"
 #include "wtf/Forward.h"
-#include "wtf/OwnPtr.h"
-#include "wtf/PassOwnPtr.h"
 #include "wtf/PassRefPtr.h"
 #include "wtf/Vector.h"
 #include "wtf/text/WTFString.h"
 #include "wtf/typed_arrays/Uint8ClampedArray.h"
+#include <memory>
 
 namespace gpu {
 namespace gles2 {
@@ -76,8 +75,8 @@
     WTF_MAKE_NONCOPYABLE(ImageBuffer);
     USING_FAST_MALLOC(ImageBuffer);
 public:
-    static PassOwnPtr<ImageBuffer> create(const IntSize&, OpacityMode = NonOpaque, ImageInitializationMode = InitializeImagePixels);
-    static PassOwnPtr<ImageBuffer> create(PassOwnPtr<ImageBufferSurface>);
+    static std::unique_ptr<ImageBuffer> create(const IntSize&, OpacityMode = NonOpaque, ImageInitializationMode = InitializeImagePixels);
+    static std::unique_ptr<ImageBuffer> create(std::unique_ptr<ImageBufferSurface>);
 
     virtual ~ImageBuffer();
 
@@ -147,7 +146,7 @@
     intptr_t getGPUMemoryUsage() { return m_gpuMemoryUsage; }
 
 protected:
-    ImageBuffer(PassOwnPtr<ImageBufferSurface>);
+    ImageBuffer(std::unique_ptr<ImageBufferSurface>);
 
 private:
     enum SnapshotState {
@@ -156,7 +155,7 @@
         DrawnToAfterSnapshot,
     };
     mutable SnapshotState m_snapshotState;
-    OwnPtr<ImageBufferSurface> m_surface;
+    std::unique_ptr<ImageBufferSurface> m_surface;
     ImageBufferClient* m_client;
 
     mutable intptr_t m_gpuMemoryUsage;
diff --git a/third_party/WebKit/Source/platform/graphics/ImageDecodingStore.cpp b/third_party/WebKit/Source/platform/graphics/ImageDecodingStore.cpp
index 54ab435..a181e9e 100644
--- a/third_party/WebKit/Source/platform/graphics/ImageDecodingStore.cpp
+++ b/third_party/WebKit/Source/platform/graphics/ImageDecodingStore.cpp
@@ -28,6 +28,7 @@
 #include "platform/TraceEvent.h"
 #include "platform/graphics/ImageFrameGenerator.h"
 #include "wtf/Threading.h"
+#include <memory>
 
 namespace blink {
 
@@ -55,7 +56,7 @@
 
 ImageDecodingStore& ImageDecodingStore::instance()
 {
-    DEFINE_THREAD_SAFE_STATIC_LOCAL(ImageDecodingStore, store, ImageDecodingStore::create().leakPtr());
+    DEFINE_THREAD_SAFE_STATIC_LOCAL(ImageDecodingStore, store, ImageDecodingStore::create().release());
     return store;
 }
 
@@ -91,12 +92,12 @@
     m_orderedCacheList.append(cacheEntry);
 }
 
-void ImageDecodingStore::insertDecoder(const ImageFrameGenerator* generator, PassOwnPtr<ImageDecoder> decoder)
+void ImageDecodingStore::insertDecoder(const ImageFrameGenerator* generator, std::unique_ptr<ImageDecoder> decoder)
 {
     // Prune old cache entries to give space for the new one.
     prune();
 
-    OwnPtr<DecoderCacheEntry> newCacheEntry = DecoderCacheEntry::create(generator, std::move(decoder));
+    std::unique_ptr<DecoderCacheEntry> newCacheEntry = DecoderCacheEntry::create(generator, std::move(decoder));
 
     MutexLocker lock(m_mutex);
     ASSERT(!m_decoderCacheMap.contains(newCacheEntry->cacheKey()));
@@ -105,7 +106,7 @@
 
 void ImageDecodingStore::removeDecoder(const ImageFrameGenerator* generator, const ImageDecoder* decoder)
 {
-    Vector<OwnPtr<CacheEntry>> cacheEntriesToDelete;
+    Vector<std::unique_ptr<CacheEntry>> cacheEntriesToDelete;
     {
         MutexLocker lock(m_mutex);
         DecoderCacheMap::iterator iter = m_decoderCacheMap.find(DecoderCacheEntry::makeCacheKey(generator, decoder));
@@ -127,7 +128,7 @@
 
 void ImageDecodingStore::removeCacheIndexedByGenerator(const ImageFrameGenerator* generator)
 {
-    Vector<OwnPtr<CacheEntry>> cacheEntriesToDelete;
+    Vector<std::unique_ptr<CacheEntry>> cacheEntriesToDelete;
     {
         MutexLocker lock(m_mutex);
 
@@ -182,7 +183,7 @@
 {
     TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("blink.image_decoding"), "ImageDecodingStore::prune");
 
-    Vector<OwnPtr<CacheEntry>> cacheEntriesToDelete;
+    Vector<std::unique_ptr<CacheEntry>> cacheEntriesToDelete;
     {
         MutexLocker lock(m_mutex);
 
@@ -208,7 +209,7 @@
 }
 
 template<class T, class U, class V>
-void ImageDecodingStore::insertCacheInternal(PassOwnPtr<T> cacheEntry, U* cacheMap, V* identifierMap)
+void ImageDecodingStore::insertCacheInternal(std::unique_ptr<T> cacheEntry, U* cacheMap, V* identifierMap)
 {
     const size_t cacheEntryBytes = cacheEntry->memoryUsageInBytes();
     m_heapMemoryUsageInBytes += cacheEntryBytes;
@@ -227,7 +228,7 @@
 }
 
 template<class T, class U, class V>
-void ImageDecodingStore::removeFromCacheInternal(const T* cacheEntry, U* cacheMap, V* identifierMap, Vector<OwnPtr<CacheEntry>>* deletionList)
+void ImageDecodingStore::removeFromCacheInternal(const T* cacheEntry, U* cacheMap, V* identifierMap, Vector<std::unique_ptr<CacheEntry>>* deletionList)
 {
     const size_t cacheEntryBytes = cacheEntry->memoryUsageInBytes();
     ASSERT(m_heapMemoryUsageInBytes >= cacheEntryBytes);
@@ -247,7 +248,7 @@
     TRACE_COUNTER1(TRACE_DISABLED_BY_DEFAULT("blink.image_decoding"), "ImageDecodingStoreNumOfDecoders", m_decoderCacheMap.size());
 }
 
-void ImageDecodingStore::removeFromCacheInternal(const CacheEntry* cacheEntry, Vector<OwnPtr<CacheEntry>>* deletionList)
+void ImageDecodingStore::removeFromCacheInternal(const CacheEntry* cacheEntry, Vector<std::unique_ptr<CacheEntry>>* deletionList)
 {
     if (cacheEntry->type() == CacheEntry::TypeDecoder) {
         removeFromCacheInternal(static_cast<const DecoderCacheEntry*>(cacheEntry), &m_decoderCacheMap, &m_decoderCacheKeyMap, deletionList);
@@ -257,7 +258,7 @@
 }
 
 template<class U, class V>
-void ImageDecodingStore::removeCacheIndexedByGeneratorInternal(U* cacheMap, V* identifierMap, const ImageFrameGenerator* generator, Vector<OwnPtr<CacheEntry>>* deletionList)
+void ImageDecodingStore::removeCacheIndexedByGeneratorInternal(U* cacheMap, V* identifierMap, const ImageFrameGenerator* generator, Vector<std::unique_ptr<CacheEntry>>* deletionList)
 {
     typename V::iterator iter = identifierMap->find(generator);
     if (iter == identifierMap->end())
@@ -270,13 +271,13 @@
     // For each cache identifier find the corresponding CacheEntry and remove it.
     for (size_t i = 0; i < cacheIdentifierList.size(); ++i) {
         ASSERT(cacheMap->contains(cacheIdentifierList[i]));
-        const typename U::MappedType::PtrType cacheEntry = cacheMap->get(cacheIdentifierList[i]);
+        const auto& cacheEntry = cacheMap->get(cacheIdentifierList[i]);
         ASSERT(!cacheEntry->useCount());
         removeFromCacheInternal(cacheEntry, cacheMap, identifierMap, deletionList);
     }
 }
 
-void ImageDecodingStore::removeFromCacheListInternal(const Vector<OwnPtr<CacheEntry>>& deletionList)
+void ImageDecodingStore::removeFromCacheListInternal(const Vector<std::unique_ptr<CacheEntry>>& deletionList)
 {
     for (size_t i = 0; i < deletionList.size(); ++i)
         m_orderedCacheList.remove(deletionList[i].get());
diff --git a/third_party/WebKit/Source/platform/graphics/ImageDecodingStore.h b/third_party/WebKit/Source/platform/graphics/ImageDecodingStore.h
index 7117456..465963a 100644
--- a/third_party/WebKit/Source/platform/graphics/ImageDecodingStore.h
+++ b/third_party/WebKit/Source/platform/graphics/ImageDecodingStore.h
@@ -31,13 +31,12 @@
 #include "platform/PlatformExport.h"
 #include "platform/graphics/skia/SkSizeHash.h"
 #include "platform/image-decoders/ImageDecoder.h"
-
 #include "wtf/DoublyLinkedList.h"
 #include "wtf/HashSet.h"
-#include "wtf/OwnPtr.h"
-#include "wtf/PassOwnPtr.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/ThreadingPrimitives.h"
 #include "wtf/Vector.h"
+#include <memory>
 
 namespace blink {
 
@@ -65,7 +64,7 @@
     USING_FAST_MALLOC(ImageDecodingStore);
     WTF_MAKE_NONCOPYABLE(ImageDecodingStore);
 public:
-    static PassOwnPtr<ImageDecodingStore> create() { return adoptPtr(new ImageDecodingStore); }
+    static std::unique_ptr<ImageDecodingStore> create() { return wrapUnique(new ImageDecodingStore); }
     ~ImageDecodingStore();
 
     static ImageDecodingStore& instance();
@@ -74,7 +73,7 @@
     // and scaled size. Return true if the cached object is found.
     bool lockDecoder(const ImageFrameGenerator*, const SkISize& scaledSize, ImageDecoder**);
     void unlockDecoder(const ImageFrameGenerator*, const ImageDecoder*);
-    void insertDecoder(const ImageFrameGenerator*, PassOwnPtr<ImageDecoder>);
+    void insertDecoder(const ImageFrameGenerator*, std::unique_ptr<ImageDecoder>);
     void removeDecoder(const ImageFrameGenerator*, const ImageDecoder*);
 
     // Remove all cache entries indexed by ImageFrameGenerator.
@@ -136,12 +135,12 @@
 
     class DecoderCacheEntry final : public CacheEntry {
     public:
-        static PassOwnPtr<DecoderCacheEntry> create(const ImageFrameGenerator* generator, PassOwnPtr<ImageDecoder> decoder)
+        static std::unique_ptr<DecoderCacheEntry> create(const ImageFrameGenerator* generator, std::unique_ptr<ImageDecoder> decoder)
         {
-            return adoptPtr(new DecoderCacheEntry(generator, 0, std::move(decoder)));
+            return wrapUnique(new DecoderCacheEntry(generator, 0, std::move(decoder)));
         }
 
-        DecoderCacheEntry(const ImageFrameGenerator* generator, int count, PassOwnPtr<ImageDecoder> decoder)
+        DecoderCacheEntry(const ImageFrameGenerator* generator, int count, std::unique_ptr<ImageDecoder> decoder)
             : CacheEntry(generator, count)
             , m_cachedDecoder(std::move(decoder))
             , m_size(SkISize::Make(m_cachedDecoder->decodedSize().width(), m_cachedDecoder->decodedSize().height()))
@@ -163,7 +162,7 @@
         ImageDecoder* cachedDecoder() const { return m_cachedDecoder.get(); }
 
     private:
-        OwnPtr<ImageDecoder> m_cachedDecoder;
+        std::unique_ptr<ImageDecoder> m_cachedDecoder;
         SkISize m_size;
     };
 
@@ -172,22 +171,22 @@
     void prune();
 
     // These helper methods are called while m_mutex is locked.
-    template<class T, class U, class V> void insertCacheInternal(PassOwnPtr<T> cacheEntry, U* cacheMap, V* identifierMap);
+    template<class T, class U, class V> void insertCacheInternal(std::unique_ptr<T> cacheEntry, U* cacheMap, V* identifierMap);
 
     // Helper method to remove a cache entry. Ownership is transferred to
     // deletionList. Use of Vector<> is handy when removing multiple entries.
-    template<class T, class U, class V> void removeFromCacheInternal(const T* cacheEntry, U* cacheMap, V* identifierMap, Vector<OwnPtr<CacheEntry>>* deletionList);
+    template<class T, class U, class V> void removeFromCacheInternal(const T* cacheEntry, U* cacheMap, V* identifierMap, Vector<std::unique_ptr<CacheEntry>>* deletionList);
 
     // Helper method to remove a cache entry. Uses the templated version base on
     // the type of cache entry.
-    void removeFromCacheInternal(const CacheEntry*, Vector<OwnPtr<CacheEntry>>* deletionList);
+    void removeFromCacheInternal(const CacheEntry*, Vector<std::unique_ptr<CacheEntry>>* deletionList);
 
     // Helper method to remove all cache entries associated with a ImageFraneGenerator.
     // Ownership of cache entries is transferred to deletionList.
-    template<class U, class V> void removeCacheIndexedByGeneratorInternal(U* cacheMap, V* identifierMap, const ImageFrameGenerator*, Vector<OwnPtr<CacheEntry>>* deletionList);
+    template<class U, class V> void removeCacheIndexedByGeneratorInternal(U* cacheMap, V* identifierMap, const ImageFrameGenerator*, Vector<std::unique_ptr<CacheEntry>>* deletionList);
 
     // Helper method to remove cache entry pointers from the LRU list.
-    void removeFromCacheListInternal(const Vector<OwnPtr<CacheEntry>>& deletionList);
+    void removeFromCacheListInternal(const Vector<std::unique_ptr<CacheEntry>>& deletionList);
 
     // A doubly linked list that maintains usage history of cache entries.
     // This is used for eviction of old entries.
@@ -196,7 +195,7 @@
     DoublyLinkedList<CacheEntry> m_orderedCacheList;
 
     // A lookup table for all decoder cache objects. Owns all decoder cache objects.
-    typedef HashMap<DecoderCacheKey, OwnPtr<DecoderCacheEntry>> DecoderCacheMap;
+    typedef HashMap<DecoderCacheKey, std::unique_ptr<DecoderCacheEntry>> DecoderCacheMap;
     DecoderCacheMap m_decoderCacheMap;
 
     // A lookup table to map ImageFrameGenerator to all associated
diff --git a/third_party/WebKit/Source/platform/graphics/ImageDecodingStoreTest.cpp b/third_party/WebKit/Source/platform/graphics/ImageDecodingStoreTest.cpp
index 809174a..bbd4fbe 100644
--- a/third_party/WebKit/Source/platform/graphics/ImageDecodingStoreTest.cpp
+++ b/third_party/WebKit/Source/platform/graphics/ImageDecodingStoreTest.cpp
@@ -28,6 +28,7 @@
 #include "platform/graphics/ImageFrameGenerator.h"
 #include "platform/graphics/test/MockImageDecoder.h"
 #include "testing/gtest/include/gtest/gtest.h"
+#include <memory>
 
 namespace blink {
 
@@ -82,7 +83,7 @@
 TEST_F(ImageDecodingStoreTest, insertDecoder)
 {
     const SkISize size = SkISize::Make(1, 1);
-    OwnPtr<ImageDecoder> decoder = MockImageDecoder::create(this);
+    std::unique_ptr<ImageDecoder> decoder = MockImageDecoder::create(this);
     decoder->setSize(1, 1);
     const ImageDecoder* refDecoder = decoder.get();
     ImageDecodingStore::instance().insertDecoder(m_generator.get(), std::move(decoder));
@@ -99,9 +100,9 @@
 
 TEST_F(ImageDecodingStoreTest, evictDecoder)
 {
-    OwnPtr<ImageDecoder> decoder1 = MockImageDecoder::create(this);
-    OwnPtr<ImageDecoder> decoder2 = MockImageDecoder::create(this);
-    OwnPtr<ImageDecoder> decoder3 = MockImageDecoder::create(this);
+    std::unique_ptr<ImageDecoder> decoder1 = MockImageDecoder::create(this);
+    std::unique_ptr<ImageDecoder> decoder2 = MockImageDecoder::create(this);
+    std::unique_ptr<ImageDecoder> decoder3 = MockImageDecoder::create(this);
     decoder1->setSize(1, 1);
     decoder2->setSize(2, 2);
     decoder3->setSize(3, 3);
@@ -126,9 +127,9 @@
 
 TEST_F(ImageDecodingStoreTest, decoderInUseNotEvicted)
 {
-    OwnPtr<ImageDecoder> decoder1 = MockImageDecoder::create(this);
-    OwnPtr<ImageDecoder> decoder2 = MockImageDecoder::create(this);
-    OwnPtr<ImageDecoder> decoder3 = MockImageDecoder::create(this);
+    std::unique_ptr<ImageDecoder> decoder1 = MockImageDecoder::create(this);
+    std::unique_ptr<ImageDecoder> decoder2 = MockImageDecoder::create(this);
+    std::unique_ptr<ImageDecoder> decoder3 = MockImageDecoder::create(this);
     decoder1->setSize(1, 1);
     decoder2->setSize(2, 2);
     decoder3->setSize(3, 3);
@@ -155,7 +156,7 @@
 TEST_F(ImageDecodingStoreTest, removeDecoder)
 {
     const SkISize size = SkISize::Make(1, 1);
-    OwnPtr<ImageDecoder> decoder = MockImageDecoder::create(this);
+    std::unique_ptr<ImageDecoder> decoder = MockImageDecoder::create(this);
     decoder->setSize(1, 1);
     const ImageDecoder* refDecoder = decoder.get();
     ImageDecodingStore::instance().insertDecoder(m_generator.get(), std::move(decoder));
diff --git a/third_party/WebKit/Source/platform/graphics/ImageFrameGenerator.cpp b/third_party/WebKit/Source/platform/graphics/ImageFrameGenerator.cpp
index faf1444..cebc233 100644
--- a/third_party/WebKit/Source/platform/graphics/ImageFrameGenerator.cpp
+++ b/third_party/WebKit/Source/platform/graphics/ImageFrameGenerator.cpp
@@ -30,6 +30,8 @@
 #include "platform/graphics/ImageDecodingStore.h"
 #include "platform/image-decoders/ImageDecoder.h"
 #include "third_party/skia/include/core/SkYUVSizeInfo.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
@@ -158,13 +160,13 @@
         return false;
     }
 
-    OwnPtr<ImageDecoder> decoder = ImageDecoder::create(*data, ImageDecoder::AlphaPremultiplied, ImageDecoder::GammaAndColorProfileApplied);
+    std::unique_ptr<ImageDecoder> decoder = ImageDecoder::create(*data, ImageDecoder::AlphaPremultiplied, ImageDecoder::GammaAndColorProfileApplied);
     // getYUVComponentSizes was already called and was successful, so ImageDecoder::create must succeed.
     ASSERT(decoder);
 
     decoder->setData(data, true);
 
-    OwnPtr<ImagePlanes> imagePlanes = adoptPtr(new ImagePlanes(planes, rowBytes));
+    std::unique_ptr<ImagePlanes> imagePlanes = wrapUnique(new ImagePlanes(planes, rowBytes));
     decoder->setImagePlanes(std::move(imagePlanes));
 
     ASSERT(decoder->canDecodeToYUV());
@@ -199,9 +201,9 @@
     // If we are not resuming decoding that means the decoder is freshly
     // created and we have ownership. If we are resuming decoding then
     // the decoder is owned by ImageDecodingStore.
-    OwnPtr<ImageDecoder> decoderContainer;
+    std::unique_ptr<ImageDecoder> decoderContainer;
     if (!resumeDecoding)
-        decoderContainer = adoptPtr(decoder);
+        decoderContainer = wrapUnique(decoder);
 
     if (fullSizeImage.isNull()) {
         // If decoding has failed, we can save work in the future by
@@ -262,10 +264,10 @@
     if (!*decoder) {
         newDecoder = true;
         if (m_imageDecoderFactory)
-            *decoder = m_imageDecoderFactory->create().leakPtr();
+            *decoder = m_imageDecoderFactory->create().release();
 
         if (!*decoder)
-            *decoder = ImageDecoder::create(*data, ImageDecoder::AlphaPremultiplied, ImageDecoder::GammaAndColorProfileApplied).leakPtr();
+            *decoder = ImageDecoder::create(*data, ImageDecoder::AlphaPremultiplied, ImageDecoder::GammaAndColorProfileApplied).release();
 
         if (!*decoder)
             return false;
@@ -325,13 +327,13 @@
     if (m_yuvDecodingFailed)
         return false;
 
-    OwnPtr<ImageDecoder> decoder = ImageDecoder::create(*data, ImageDecoder::AlphaPremultiplied, ImageDecoder::GammaAndColorProfileApplied);
+    std::unique_ptr<ImageDecoder> decoder = ImageDecoder::create(*data, ImageDecoder::AlphaPremultiplied, ImageDecoder::GammaAndColorProfileApplied);
     if (!decoder)
         return false;
 
     // Setting a dummy ImagePlanes object signals to the decoder that we want to do YUV decoding.
     decoder->setData(data, true);
-    OwnPtr<ImagePlanes> dummyImagePlanes = adoptPtr(new ImagePlanes);
+    std::unique_ptr<ImagePlanes> dummyImagePlanes = wrapUnique(new ImagePlanes);
     decoder->setImagePlanes(std::move(dummyImagePlanes));
 
     return updateYUVComponentSizes(decoder.get(), sizeInfo->fSizes, sizeInfo->fWidthBytes);
diff --git a/third_party/WebKit/Source/platform/graphics/ImageFrameGenerator.h b/third_party/WebKit/Source/platform/graphics/ImageFrameGenerator.h
index b8053b9..37685411 100644
--- a/third_party/WebKit/Source/platform/graphics/ImageFrameGenerator.h
+++ b/third_party/WebKit/Source/platform/graphics/ImageFrameGenerator.h
@@ -33,13 +33,13 @@
 #include "third_party/skia/include/core/SkTypes.h"
 #include "wtf/Allocator.h"
 #include "wtf/Noncopyable.h"
-#include "wtf/PassOwnPtr.h"
 #include "wtf/PassRefPtr.h"
 #include "wtf/RefCounted.h"
 #include "wtf/RefPtr.h"
 #include "wtf/ThreadSafeRefCounted.h"
 #include "wtf/ThreadingPrimitives.h"
 #include "wtf/Vector.h"
+#include <memory>
 
 class SkData;
 struct SkYUVSizeInfo;
@@ -54,7 +54,7 @@
 public:
     ImageDecoderFactory() {}
     virtual ~ImageDecoderFactory() { }
-    virtual PassOwnPtr<ImageDecoder> create() = 0;
+    virtual std::unique_ptr<ImageDecoder> create() = 0;
 };
 
 class PLATFORM_EXPORT ImageFrameGenerator final : public ThreadSafeRefCounted<ImageFrameGenerator> {
@@ -95,7 +95,7 @@
     friend class ImageFrameGeneratorTest;
     friend class DeferredImageDecoderTest;
     // For testing. |factory| will overwrite the default ImageDecoder creation logic if |factory->create()| returns non-zero.
-    void setImageDecoderFactory(PassOwnPtr<ImageDecoderFactory> factory) { m_imageDecoderFactory = std::move(factory); }
+    void setImageDecoderFactory(std::unique_ptr<ImageDecoderFactory> factory) { m_imageDecoderFactory = std::move(factory); }
 
     void setHasAlpha(size_t index, bool hasAlpha);
 
@@ -111,7 +111,7 @@
     size_t m_frameCount;
     Vector<bool> m_hasAlpha;
 
-    OwnPtr<ImageDecoderFactory> m_imageDecoderFactory;
+    std::unique_ptr<ImageDecoderFactory> m_imageDecoderFactory;
 
     // Prevents multiple decode operations on the same data.
     Mutex m_decodeMutex;
diff --git a/third_party/WebKit/Source/platform/graphics/ImageFrameGeneratorTest.cpp b/third_party/WebKit/Source/platform/graphics/ImageFrameGeneratorTest.cpp
index 74e5a2b..63f41a4 100644
--- a/third_party/WebKit/Source/platform/graphics/ImageFrameGeneratorTest.cpp
+++ b/third_party/WebKit/Source/platform/graphics/ImageFrameGeneratorTest.cpp
@@ -35,6 +35,8 @@
 #include "public/platform/WebThread.h"
 #include "public/platform/WebTraceLocation.h"
 #include "testing/gtest/include/gtest/gtest.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
@@ -184,7 +186,7 @@
     // LocalFrame can now be decoded completely.
     setFrameStatus(ImageFrame::FrameComplete);
     addNewData();
-    OwnPtr<WebThread> thread = adoptPtr(Platform::current()->createThread("DecodeThread"));
+    std::unique_ptr<WebThread> thread = wrapUnique(Platform::current()->createThread("DecodeThread"));
     thread->getWebTaskRunner()->postTask(BLINK_FROM_HERE, threadSafeBind(&decodeThreadMain, m_generator, m_segmentReader));
     thread.reset();
     EXPECT_EQ(2, m_decodeRequestCount);
diff --git a/third_party/WebKit/Source/platform/graphics/ImageLayerChromiumTest.cpp b/third_party/WebKit/Source/platform/graphics/ImageLayerChromiumTest.cpp
index ada2c2d..ac6c74b 100644
--- a/third_party/WebKit/Source/platform/graphics/ImageLayerChromiumTest.cpp
+++ b/third_party/WebKit/Source/platform/graphics/ImageLayerChromiumTest.cpp
@@ -30,7 +30,8 @@
 #include "testing/gtest/include/gtest/gtest.h"
 #include "third_party/skia/include/core/SkImage.h"
 #include "third_party/skia/include/core/SkSurface.h"
-#include "wtf/PassOwnPtr.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
@@ -95,7 +96,7 @@
 TEST(ImageLayerChromiumTest, imageLayerContentReset)
 {
     FakeGraphicsLayerClient client;
-    OwnPtr<FakeGraphicsLayer> graphicsLayer = adoptPtr(new FakeGraphicsLayer(&client));
+    std::unique_ptr<FakeGraphicsLayer> graphicsLayer = wrapUnique(new FakeGraphicsLayer(&client));
     ASSERT_TRUE(graphicsLayer.get());
 
     ASSERT_FALSE(graphicsLayer->hasContentsLayer());
@@ -117,7 +118,7 @@
 TEST(ImageLayerChromiumTest, opaqueImages)
 {
     FakeGraphicsLayerClient client;
-    OwnPtr<FakeGraphicsLayer> graphicsLayer = adoptPtr(new FakeGraphicsLayer(&client));
+    std::unique_ptr<FakeGraphicsLayer> graphicsLayer = wrapUnique(new FakeGraphicsLayer(&client));
     ASSERT_TRUE(graphicsLayer.get());
 
     bool opaque = true;
diff --git a/third_party/WebKit/Source/platform/graphics/ImageSource.h b/third_party/WebKit/Source/platform/graphics/ImageSource.h
index 3e5d183..5e8ded4 100644
--- a/third_party/WebKit/Source/platform/graphics/ImageSource.h
+++ b/third_party/WebKit/Source/platform/graphics/ImageSource.h
@@ -30,7 +30,7 @@
 #include "platform/graphics/ImageOrientation.h"
 #include "wtf/Forward.h"
 #include "wtf/Noncopyable.h"
-#include "wtf/OwnPtr.h"
+#include <memory>
 
 class SkImage;
 
@@ -95,7 +95,7 @@
     size_t frameBytesAtIndex(size_t) const;
 
 private:
-    OwnPtr<DeferredImageDecoder> m_decoder;
+    std::unique_ptr<DeferredImageDecoder> m_decoder;
 };
 
 } // namespace blink
diff --git a/third_party/WebKit/Source/platform/graphics/PaintGeneratedImage.h b/third_party/WebKit/Source/platform/graphics/PaintGeneratedImage.h
index d78262ba..58f55fd 100644
--- a/third_party/WebKit/Source/platform/graphics/PaintGeneratedImage.h
+++ b/third_party/WebKit/Source/platform/graphics/PaintGeneratedImage.h
@@ -7,7 +7,6 @@
 
 #include "platform/geometry/IntSize.h"
 #include "platform/graphics/GeneratedImage.h"
-#include "wtf/OwnPtr.h"
 
 class SkPicture;
 
diff --git a/third_party/WebKit/Source/platform/graphics/PictureSnapshot.cpp b/third_party/WebKit/Source/platform/graphics/PictureSnapshot.cpp
index 5bc8eb1c..8cc9f53 100644
--- a/third_party/WebKit/Source/platform/graphics/PictureSnapshot.cpp
+++ b/third_party/WebKit/Source/platform/graphics/PictureSnapshot.cpp
@@ -46,8 +46,10 @@
 #include "third_party/skia/include/core/SkStream.h"
 #include "wtf/CurrentTime.h"
 #include "wtf/HexNumber.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/text/Base64.h"
 #include "wtf/text/TextEncoding.h"
+#include <memory>
 
 namespace blink {
 
@@ -58,7 +60,7 @@
 
 static bool decodeBitmap(const void* data, size_t length, SkBitmap* result)
 {
-    OwnPtr<ImageDecoder> imageDecoder = ImageDecoder::create(static_cast<const char*>(data), length,
+    std::unique_ptr<ImageDecoder> imageDecoder = ImageDecoder::create(static_cast<const char*>(data), length,
         ImageDecoder::AlphaPremultiplied, ImageDecoder::GammaAndColorProfileIgnored);
     if (!imageDecoder)
         return false;
@@ -107,7 +109,7 @@
     return m_picture->cullRect().isEmpty();
 }
 
-PassOwnPtr<Vector<char>> PictureSnapshot::replay(unsigned fromStep, unsigned toStep, double scale) const
+std::unique_ptr<Vector<char>> PictureSnapshot::replay(unsigned fromStep, unsigned toStep, double scale) const
 {
     const SkIRect bounds = m_picture->cullRect().roundOut();
 
@@ -127,7 +129,7 @@
         canvas.resetStepCount();
         m_picture->playback(&canvas, &canvas);
     }
-    OwnPtr<Vector<char>> base64Data = adoptPtr(new Vector<char>());
+    std::unique_ptr<Vector<char>> base64Data = wrapUnique(new Vector<char>());
     Vector<char> encodedImage;
 
     RefPtr<SkImage> image = fromSkSp(SkImage::MakeFromBitmap(bitmap));
@@ -144,9 +146,9 @@
     return base64Data;
 }
 
-PassOwnPtr<PictureSnapshot::Timings> PictureSnapshot::profile(unsigned minRepeatCount, double minDuration, const FloatRect* clipRect) const
+std::unique_ptr<PictureSnapshot::Timings> PictureSnapshot::profile(unsigned minRepeatCount, double minDuration, const FloatRect* clipRect) const
 {
-    OwnPtr<PictureSnapshot::Timings> timings = adoptPtr(new PictureSnapshot::Timings());
+    std::unique_ptr<PictureSnapshot::Timings> timings = wrapUnique(new PictureSnapshot::Timings());
     timings->reserveCapacity(minRepeatCount);
     const SkIRect bounds = m_picture->cullRect().roundOut();
     SkBitmap bitmap;
diff --git a/third_party/WebKit/Source/platform/graphics/PictureSnapshot.h b/third_party/WebKit/Source/platform/graphics/PictureSnapshot.h
index 34bac46..ffe561f 100644
--- a/third_party/WebKit/Source/platform/graphics/PictureSnapshot.h
+++ b/third_party/WebKit/Source/platform/graphics/PictureSnapshot.h
@@ -37,6 +37,7 @@
 #include "third_party/skia/include/core/SkPicture.h"
 #include "third_party/skia/include/core/SkPictureRecorder.h"
 #include "wtf/RefCounted.h"
+#include <memory>
 
 namespace blink {
 
@@ -56,13 +57,13 @@
 
     PictureSnapshot(PassRefPtr<const SkPicture>);
 
-    PassOwnPtr<Vector<char>> replay(unsigned fromStep = 0, unsigned toStep = 0, double scale = 1.0) const;
-    PassOwnPtr<Timings> profile(unsigned minIterations, double minDuration, const FloatRect* clipRect) const;
+    std::unique_ptr<Vector<char>> replay(unsigned fromStep = 0, unsigned toStep = 0, double scale = 1.0) const;
+    std::unique_ptr<Timings> profile(unsigned minIterations, double minDuration, const FloatRect* clipRect) const;
     PassRefPtr<JSONArray> snapshotCommandLog() const;
     bool isEmpty() const;
 
 private:
-    PassOwnPtr<SkBitmap> createBitmap() const;
+    std::unique_ptr<SkBitmap> createBitmap() const;
 
     RefPtr<const SkPicture> m_picture;
 };
diff --git a/third_party/WebKit/Source/platform/graphics/RecordingImageBufferSurface.cpp b/third_party/WebKit/Source/platform/graphics/RecordingImageBufferSurface.cpp
index c19292b..6784aee 100644
--- a/third_party/WebKit/Source/platform/graphics/RecordingImageBufferSurface.cpp
+++ b/third_party/WebKit/Source/platform/graphics/RecordingImageBufferSurface.cpp
@@ -11,12 +11,13 @@
 #include "platform/graphics/ImageBuffer.h"
 #include "third_party/skia/include/core/SkCanvas.h"
 #include "third_party/skia/include/core/SkPictureRecorder.h"
-#include "wtf/PassOwnPtr.h"
 #include "wtf/PassRefPtr.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
-RecordingImageBufferSurface::RecordingImageBufferSurface(const IntSize& size, PassOwnPtr<RecordingImageBufferFallbackSurfaceFactory> fallbackFactory, OpacityMode opacityMode)
+RecordingImageBufferSurface::RecordingImageBufferSurface(const IntSize& size, std::unique_ptr<RecordingImageBufferFallbackSurfaceFactory> fallbackFactory, OpacityMode opacityMode)
     : ImageBufferSurface(size, opacityMode)
     , m_imageBuffer(0)
     , m_currentFramePixelCount(0)
@@ -36,7 +37,7 @@
 void RecordingImageBufferSurface::initializeCurrentFrame()
 {
     static SkRTreeFactory rTreeFactory;
-    m_currentFrame = adoptPtr(new SkPictureRecorder);
+    m_currentFrame = wrapUnique(new SkPictureRecorder);
     m_currentFrame->beginRecording(size().width(), size().height(), &rTreeFactory);
     if (m_imageBuffer) {
         m_imageBuffer->resetCanvas(m_currentFrame->getRecordingCanvas());
diff --git a/third_party/WebKit/Source/platform/graphics/RecordingImageBufferSurface.h b/third_party/WebKit/Source/platform/graphics/RecordingImageBufferSurface.h
index 011073e..257a9316 100644
--- a/third_party/WebKit/Source/platform/graphics/RecordingImageBufferSurface.h
+++ b/third_party/WebKit/Source/platform/graphics/RecordingImageBufferSurface.h
@@ -10,8 +10,8 @@
 #include "public/platform/WebThread.h"
 #include "wtf/Allocator.h"
 #include "wtf/Noncopyable.h"
-#include "wtf/OwnPtr.h"
 #include "wtf/RefPtr.h"
+#include <memory>
 
 class SkCanvas;
 class SkPicture;
@@ -26,7 +26,7 @@
     USING_FAST_MALLOC(RecordingImageBufferFallbackSurfaceFactory);
     WTF_MAKE_NONCOPYABLE(RecordingImageBufferFallbackSurfaceFactory);
 public:
-    virtual PassOwnPtr<ImageBufferSurface> createSurface(const IntSize&, OpacityMode) = 0;
+    virtual std::unique_ptr<ImageBufferSurface> createSurface(const IntSize&, OpacityMode) = 0;
     virtual ~RecordingImageBufferFallbackSurfaceFactory() { }
 protected:
     RecordingImageBufferFallbackSurfaceFactory() { }
@@ -39,7 +39,7 @@
     // for one frame and should not be used for any operations which need a
     // raster surface, (i.e. writePixels).
     // Only #getPicture should be used to access the resulting frame.
-    RecordingImageBufferSurface(const IntSize&, PassOwnPtr<RecordingImageBufferFallbackSurfaceFactory> fallbackFactory = nullptr, OpacityMode = NonOpaque);
+    RecordingImageBufferSurface(const IntSize&, std::unique_ptr<RecordingImageBufferFallbackSurfaceFactory> fallbackFactory = nullptr, OpacityMode = NonOpaque);
     ~RecordingImageBufferSurface() override;
 
     // Implementation of ImageBufferSurface interfaces
@@ -94,9 +94,9 @@
     bool finalizeFrameInternal(FallbackReason*);
     int approximateOpCount();
 
-    OwnPtr<SkPictureRecorder> m_currentFrame;
+    std::unique_ptr<SkPictureRecorder> m_currentFrame;
     RefPtr<SkPicture> m_previousFrame;
-    OwnPtr<ImageBufferSurface> m_fallbackSurface;
+    std::unique_ptr<ImageBufferSurface> m_fallbackSurface;
     ImageBuffer* m_imageBuffer;
     int m_initialSaveCount;
     int m_currentFramePixelCount;
@@ -105,7 +105,7 @@
     bool m_didRecordDrawCommandsInCurrentFrame;
     bool m_currentFrameHasExpensiveOp;
     bool m_previousFrameHasExpensiveOp;
-    OwnPtr<RecordingImageBufferFallbackSurfaceFactory> m_fallbackFactory;
+    std::unique_ptr<RecordingImageBufferFallbackSurfaceFactory> m_fallbackFactory;
 };
 
 } // namespace blink
diff --git a/third_party/WebKit/Source/platform/graphics/RecordingImageBufferSurfaceTest.cpp b/third_party/WebKit/Source/platform/graphics/RecordingImageBufferSurfaceTest.cpp
index 7e9b5702..c5641e84 100644
--- a/third_party/WebKit/Source/platform/graphics/RecordingImageBufferSurfaceTest.cpp
+++ b/third_party/WebKit/Source/platform/graphics/RecordingImageBufferSurfaceTest.cpp
@@ -17,9 +17,9 @@
 #include "testing/gtest/include/gtest/gtest.h"
 #include "third_party/skia/include/core/SkCanvas.h"
 #include "third_party/skia/include/core/SkPictureRecorder.h"
-#include "wtf/OwnPtr.h"
-#include "wtf/PassOwnPtr.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/RefPtr.h"
+#include <memory>
 
 using testing::Test;
 
@@ -78,10 +78,10 @@
 public:
     MockSurfaceFactory() : m_createSurfaceCount(0) { }
 
-    virtual PassOwnPtr<ImageBufferSurface> createSurface(const IntSize& size, OpacityMode opacityMode)
+    virtual std::unique_ptr<ImageBufferSurface> createSurface(const IntSize& size, OpacityMode opacityMode)
     {
         m_createSurfaceCount++;
-        return adoptPtr(new UnacceleratedImageBufferSurface(size, opacityMode));
+        return wrapUnique(new UnacceleratedImageBufferSurface(size, opacityMode));
     }
 
     virtual ~MockSurfaceFactory() { }
@@ -96,15 +96,15 @@
 protected:
     RecordingImageBufferSurfaceTest()
     {
-        OwnPtr<MockSurfaceFactory> surfaceFactory = adoptPtr(new MockSurfaceFactory());
+        std::unique_ptr<MockSurfaceFactory> surfaceFactory = wrapUnique(new MockSurfaceFactory());
         m_surfaceFactory = surfaceFactory.get();
-        OwnPtr<RecordingImageBufferSurface> testSurface = adoptPtr(new RecordingImageBufferSurface(IntSize(10, 10), std::move(surfaceFactory)));
+        std::unique_ptr<RecordingImageBufferSurface> testSurface = wrapUnique(new RecordingImageBufferSurface(IntSize(10, 10), std::move(surfaceFactory)));
         m_testSurface = testSurface.get();
         // We create an ImageBuffer in order for the testSurface to be
         // properly initialized with a GraphicsContext
         m_imageBuffer = ImageBuffer::create(std::move(testSurface));
         EXPECT_FALSE(!m_imageBuffer);
-        m_fakeImageBufferClient = adoptPtr(new FakeImageBufferClient(m_imageBuffer.get()));
+        m_fakeImageBufferClient = wrapUnique(new FakeImageBufferClient(m_imageBuffer.get()));
         m_imageBuffer->setClient(m_fakeImageBufferClient.get());
     }
 
@@ -226,8 +226,8 @@
 private:
     MockSurfaceFactory* m_surfaceFactory;
     RecordingImageBufferSurface* m_testSurface;
-    OwnPtr<FakeImageBufferClient> m_fakeImageBufferClient;
-    OwnPtr<ImageBuffer> m_imageBuffer;
+    std::unique_ptr<FakeImageBufferClient> m_fakeImageBufferClient;
+    std::unique_ptr<ImageBuffer> m_imageBuffer;
 };
 
 namespace {
diff --git a/third_party/WebKit/Source/platform/graphics/StaticBitmapImage.cpp b/third_party/WebKit/Source/platform/graphics/StaticBitmapImage.cpp
index ac88b3d3..aa45be3a 100644
--- a/third_party/WebKit/Source/platform/graphics/StaticBitmapImage.cpp
+++ b/third_party/WebKit/Source/platform/graphics/StaticBitmapImage.cpp
@@ -14,6 +14,8 @@
 #include "third_party/skia/include/core/SkImage.h"
 #include "third_party/skia/include/core/SkPaint.h"
 #include "third_party/skia/include/core/SkShader.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
@@ -74,7 +76,7 @@
     // In the place when we consume an ImageBitmap that is gpu texture backed,
     // create a new SkImage from that texture.
     // TODO(xidachen): make this work on a worker thread.
-    OwnPtr<WebGraphicsContext3DProvider> provider = adoptPtr(Platform::current()->createSharedOffscreenGraphicsContext3DProvider());
+    std::unique_ptr<WebGraphicsContext3DProvider> provider = wrapUnique(Platform::current()->createSharedOffscreenGraphicsContext3DProvider());
     if (!provider)
         return nullptr;
     GrContext* grContext = provider->grContext();
diff --git a/third_party/WebKit/Source/platform/graphics/StrokeData.cpp b/third_party/WebKit/Source/platform/graphics/StrokeData.cpp
index d7b3b56..a82fe7e 100644
--- a/third_party/WebKit/Source/platform/graphics/StrokeData.cpp
+++ b/third_party/WebKit/Source/platform/graphics/StrokeData.cpp
@@ -28,8 +28,8 @@
 
 #include "platform/graphics/StrokeData.h"
 #include "third_party/skia/include/effects/SkDashPathEffect.h"
-#include "wtf/OwnPtr.h"
-#include "wtf/PassOwnPtr.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
@@ -49,7 +49,7 @@
     }
 
     size_t count = !(dashLength % 2) ? dashLength : dashLength * 2;
-    OwnPtr<SkScalar[]> intervals = adoptArrayPtr(new SkScalar[count]);
+    std::unique_ptr<SkScalar[]> intervals = wrapArrayUnique(new SkScalar[count]);
 
     for (unsigned i = 0; i < count; i++)
         intervals[i] = dashes[i % dashLength];
diff --git a/third_party/WebKit/Source/platform/graphics/compositing/PaintArtifactCompositor.cpp b/third_party/WebKit/Source/platform/graphics/compositing/PaintArtifactCompositor.cpp
index c88437b..090e79bfb 100644
--- a/third_party/WebKit/Source/platform/graphics/compositing/PaintArtifactCompositor.cpp
+++ b/third_party/WebKit/Source/platform/graphics/compositing/PaintArtifactCompositor.cpp
@@ -32,8 +32,9 @@
 #include "ui/gfx/skia_util.h"
 #include "wtf/Allocator.h"
 #include "wtf/Noncopyable.h"
-#include "wtf/PassOwnPtr.h"
+#include "wtf/PtrUtil.h"
 #include <algorithm>
+#include <memory>
 #include <utility>
 
 namespace blink {
@@ -68,7 +69,7 @@
     if (!RuntimeEnabledFeatures::slimmingPaintV2Enabled())
         return;
     m_rootLayer = cc::Layer::Create();
-    m_webLayer = adoptPtr(Platform::current()->compositorSupport()->createLayerFromCCLayer(m_rootLayer.get()));
+    m_webLayer = wrapUnique(Platform::current()->compositorSupport()->createLayerFromCCLayer(m_rootLayer.get()));
 }
 
 PaintArtifactCompositor::~PaintArtifactCompositor()
@@ -373,7 +374,7 @@
     // The common case: create a layer for painted content.
     gfx::Rect combinedBounds = enclosingIntRect(paintChunk.bounds);
     scoped_refptr<cc::DisplayItemList> displayList = recordPaintChunk(paintArtifact, paintChunk, combinedBounds);
-    OwnPtr<ContentLayerClientImpl> contentLayerClient = adoptPtr(
+    std::unique_ptr<ContentLayerClientImpl> contentLayerClient = wrapUnique(
         new ContentLayerClientImpl(std::move(displayList), gfx::Rect(combinedBounds.size())));
 
     layerOffset = combinedBounds.OffsetFromOrigin();
diff --git a/third_party/WebKit/Source/platform/graphics/compositing/PaintArtifactCompositor.h b/third_party/WebKit/Source/platform/graphics/compositing/PaintArtifactCompositor.h
index 1c2f526..ad732528d 100644
--- a/third_party/WebKit/Source/platform/graphics/compositing/PaintArtifactCompositor.h
+++ b/third_party/WebKit/Source/platform/graphics/compositing/PaintArtifactCompositor.h
@@ -8,8 +8,8 @@
 #include "base/memory/ref_counted.h"
 #include "platform/PlatformExport.h"
 #include "wtf/Noncopyable.h"
-#include "wtf/OwnPtr.h"
 #include "wtf/Vector.h"
+#include <memory>
 
 namespace cc {
 class Layer;
@@ -62,8 +62,8 @@
     scoped_refptr<cc::Layer> layerForPaintChunk(const PaintArtifact&, const PaintChunk&, gfx::Vector2dF& layerOffset);
 
     scoped_refptr<cc::Layer> m_rootLayer;
-    OwnPtr<WebLayer> m_webLayer;
-    Vector<OwnPtr<ContentLayerClientImpl>> m_contentLayerClients;
+    std::unique_ptr<WebLayer> m_webLayer;
+    Vector<std::unique_ptr<ContentLayerClientImpl>> m_contentLayerClients;
 };
 
 } // namespace blink
diff --git a/third_party/WebKit/Source/platform/graphics/compositing/PaintArtifactCompositorTest.cpp b/third_party/WebKit/Source/platform/graphics/compositing/PaintArtifactCompositorTest.cpp
index f21059a1..ef9edb4 100644
--- a/third_party/WebKit/Source/platform/graphics/compositing/PaintArtifactCompositorTest.cpp
+++ b/third_party/WebKit/Source/platform/graphics/compositing/PaintArtifactCompositorTest.cpp
@@ -17,6 +17,8 @@
 #include "platform/testing/WebLayerTreeViewImplForTesting.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 namespace {
@@ -37,7 +39,7 @@
         RuntimeEnabledFeatures::setSlimmingPaintV2Enabled(true);
 
         // Delay constructing the compositor until after the feature is set.
-        m_paintArtifactCompositor = adoptPtr(new PaintArtifactCompositor);
+        m_paintArtifactCompositor = wrapUnique(new PaintArtifactCompositor);
     }
 
     void TearDown() override
@@ -51,7 +53,7 @@
 
 private:
     RuntimeEnabledFeatures::Backup m_featuresBackup;
-    OwnPtr<PaintArtifactCompositor> m_paintArtifactCompositor;
+    std::unique_ptr<PaintArtifactCompositor> m_paintArtifactCompositor;
 };
 
 TEST_F(PaintArtifactCompositorTest, EmptyPaintArtifact)
@@ -385,7 +387,7 @@
         cc::LayerTreeSettings settings = WebLayerTreeViewImplForTesting::defaultLayerTreeSettings();
         settings.single_thread_proxy_scheduler = false;
         settings.use_layer_lists = true;
-        m_webLayerTreeView = adoptPtr(new WebLayerTreeViewWithOutputSurface(settings));
+        m_webLayerTreeView = wrapUnique(new WebLayerTreeViewWithOutputSurface(settings));
         m_webLayerTreeView->setRootLayer(*getPaintArtifactCompositor().getWebLayer());
     }
 
@@ -403,7 +405,7 @@
 private:
     scoped_refptr<base::TestSimpleTaskRunner> m_taskRunner;
     base::ThreadTaskRunnerHandle m_taskRunnerHandle;
-    OwnPtr<WebLayerTreeViewWithOutputSurface> m_webLayerTreeView;
+    std::unique_ptr<WebLayerTreeViewWithOutputSurface> m_webLayerTreeView;
 };
 
 TEST_F(PaintArtifactCompositorTestWithPropertyTrees, EmptyPaintArtifact)
diff --git a/third_party/WebKit/Source/platform/graphics/filters/FEConvolveMatrix.cpp b/third_party/WebKit/Source/platform/graphics/filters/FEConvolveMatrix.cpp
index 0101f44..ece3a8d 100644
--- a/third_party/WebKit/Source/platform/graphics/filters/FEConvolveMatrix.cpp
+++ b/third_party/WebKit/Source/platform/graphics/filters/FEConvolveMatrix.cpp
@@ -28,7 +28,8 @@
 #include "platform/graphics/filters/SkiaImageFilterBuilder.h"
 #include "platform/text/TextStream.h"
 #include "wtf/CheckedNumeric.h"
-#include "wtf/OwnPtr.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
@@ -150,7 +151,7 @@
     SkIPoint target = SkIPoint::Make(m_targetOffset.x(), m_targetOffset.y());
     SkMatrixConvolutionImageFilter::TileMode tileMode = toSkiaTileMode(m_edgeMode);
     bool convolveAlpha = !m_preserveAlpha;
-    OwnPtr<SkScalar[]> kernel = adoptArrayPtr(new SkScalar[numElements]);
+    std::unique_ptr<SkScalar[]> kernel = wrapArrayUnique(new SkScalar[numElements]);
     for (int i = 0; i < numElements; ++i)
         kernel[i] = SkFloatToScalar(m_kernelMatrix[numElements - 1 - i]);
     SkImageFilter::CropRect cropRect = getCropRect();
diff --git a/third_party/WebKit/Source/platform/graphics/filters/FEMerge.cpp b/third_party/WebKit/Source/platform/graphics/filters/FEMerge.cpp
index 3b1cccd..8c55d52 100644
--- a/third_party/WebKit/Source/platform/graphics/filters/FEMerge.cpp
+++ b/third_party/WebKit/Source/platform/graphics/filters/FEMerge.cpp
@@ -25,7 +25,8 @@
 #include "SkMergeImageFilter.h"
 #include "platform/graphics/filters/SkiaImageFilterBuilder.h"
 #include "platform/text/TextStream.h"
-#include "wtf/OwnPtr.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
@@ -43,7 +44,7 @@
 {
     unsigned size = numberOfEffectInputs();
 
-    OwnPtr<sk_sp<SkImageFilter>[]> inputRefs = adoptArrayPtr(new sk_sp<SkImageFilter>[size]);
+    std::unique_ptr<sk_sp<SkImageFilter>[]> inputRefs = wrapArrayUnique(new sk_sp<SkImageFilter>[size]);
     for (unsigned i = 0; i < size; ++i)
         inputRefs[i] = SkiaImageFilterBuilder::build(inputEffect(i), operatingColorSpace());
     SkImageFilter::CropRect rect = getCropRect();
diff --git a/third_party/WebKit/Source/platform/graphics/gpu/AcceleratedImageBufferSurface.cpp b/third_party/WebKit/Source/platform/graphics/gpu/AcceleratedImageBufferSurface.cpp
index 21edb3e..cc07c2345 100644
--- a/third_party/WebKit/Source/platform/graphics/gpu/AcceleratedImageBufferSurface.cpp
+++ b/third_party/WebKit/Source/platform/graphics/gpu/AcceleratedImageBufferSurface.cpp
@@ -35,7 +35,7 @@
 #include "public/platform/WebGraphicsContext3DProvider.h"
 #include "skia/ext/texture_handle.h"
 #include "third_party/skia/include/gpu/GrContext.h"
-#include "wtf/PassOwnPtr.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/RefPtr.h"
 
 namespace blink {
@@ -43,7 +43,7 @@
 AcceleratedImageBufferSurface::AcceleratedImageBufferSurface(const IntSize& size, OpacityMode opacityMode)
     : ImageBufferSurface(size, opacityMode)
 {
-    m_contextProvider = adoptPtr(Platform::current()->createSharedOffscreenGraphicsContext3DProvider());
+    m_contextProvider = wrapUnique(Platform::current()->createSharedOffscreenGraphicsContext3DProvider());
     if (!m_contextProvider)
         return;
     GrContext* grContext = m_contextProvider->grContext();
diff --git a/third_party/WebKit/Source/platform/graphics/gpu/AcceleratedImageBufferSurface.h b/third_party/WebKit/Source/platform/graphics/gpu/AcceleratedImageBufferSurface.h
index 5a2da49..021cb84 100644
--- a/third_party/WebKit/Source/platform/graphics/gpu/AcceleratedImageBufferSurface.h
+++ b/third_party/WebKit/Source/platform/graphics/gpu/AcceleratedImageBufferSurface.h
@@ -34,7 +34,7 @@
 #include "platform/graphics/ImageBufferSurface.h"
 #include "public/platform/WebGraphicsContext3DProvider.h"
 #include "third_party/skia/include/core/SkSurface.h"
-#include "wtf/OwnPtr.h"
+#include <memory>
 
 namespace blink {
 
@@ -51,7 +51,7 @@
     GLuint getBackingTextureHandleForOverwrite() override;
 
 private:
-    OwnPtr<WebGraphicsContext3DProvider> m_contextProvider;
+    std::unique_ptr<WebGraphicsContext3DProvider> m_contextProvider;
     sk_sp<SkSurface> m_surface; // Uses m_contextProvider.
 };
 
diff --git a/third_party/WebKit/Source/platform/graphics/gpu/DrawingBuffer.cpp b/third_party/WebKit/Source/platform/graphics/gpu/DrawingBuffer.cpp
index 3b72a2e..601e4dac 100644
--- a/third_party/WebKit/Source/platform/graphics/gpu/DrawingBuffer.cpp
+++ b/third_party/WebKit/Source/platform/graphics/gpu/DrawingBuffer.cpp
@@ -43,8 +43,10 @@
 #include "public/platform/WebExternalTextureLayer.h"
 #include "public/platform/WebGraphicsContext3DProvider.h"
 #include "wtf/CheckedNumeric.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/typed_arrays/ArrayBufferContents.h"
 #include <algorithm>
+#include <memory>
 
 namespace blink {
 
@@ -79,7 +81,7 @@
 
 } // namespace
 
-PassRefPtr<DrawingBuffer> DrawingBuffer::create(PassOwnPtr<WebGraphicsContext3DProvider> contextProvider, const IntSize& size, bool premultipliedAlpha, bool wantAlphaChannel, bool wantDepthBuffer, bool wantStencilBuffer, bool wantAntialiasing, PreserveDrawingBuffer preserve)
+PassRefPtr<DrawingBuffer> DrawingBuffer::create(std::unique_ptr<WebGraphicsContext3DProvider> contextProvider, const IntSize& size, bool premultipliedAlpha, bool wantAlphaChannel, bool wantDepthBuffer, bool wantStencilBuffer, bool wantAntialiasing, PreserveDrawingBuffer preserve)
 {
     ASSERT(contextProvider);
 
@@ -88,7 +90,7 @@
         return nullptr;
     }
 
-    OwnPtr<Extensions3DUtil> extensionsUtil = Extensions3DUtil::create(contextProvider->contextGL());
+    std::unique_ptr<Extensions3DUtil> extensionsUtil = Extensions3DUtil::create(contextProvider->contextGL());
     if (!extensionsUtil->isValid()) {
         // This might be the first time we notice that the GL context is lost.
         return nullptr;
@@ -124,8 +126,8 @@
 }
 
 DrawingBuffer::DrawingBuffer(
-    PassOwnPtr<WebGraphicsContext3DProvider> contextProvider,
-    PassOwnPtr<Extensions3DUtil> extensionsUtil,
+    std::unique_ptr<WebGraphicsContext3DProvider> contextProvider,
+    std::unique_ptr<Extensions3DUtil> extensionsUtil,
     bool discardFramebufferSupported,
     bool wantAlphaChannel,
     bool premultipliedAlpha,
@@ -558,7 +560,7 @@
 WebLayer* DrawingBuffer::platformLayer()
 {
     if (!m_layer) {
-        m_layer = adoptPtr(Platform::current()->compositorSupport()->createExternalTextureLayer(this));
+        m_layer = wrapUnique(Platform::current()->compositorSupport()->createExternalTextureLayer(this));
 
         m_layer->setOpaque(!m_wantAlphaChannel);
         m_layer->setBlendBackgroundColor(m_wantAlphaChannel);
diff --git a/third_party/WebKit/Source/platform/graphics/gpu/DrawingBuffer.h b/third_party/WebKit/Source/platform/graphics/gpu/DrawingBuffer.h
index b0a31df..da880647 100644
--- a/third_party/WebKit/Source/platform/graphics/gpu/DrawingBuffer.h
+++ b/third_party/WebKit/Source/platform/graphics/gpu/DrawingBuffer.h
@@ -41,9 +41,8 @@
 #include "third_party/skia/include/core/SkBitmap.h"
 #include "wtf/Deque.h"
 #include "wtf/Noncopyable.h"
-#include "wtf/OwnPtr.h"
-#include "wtf/PassOwnPtr.h"
 #include "wtf/RefCounted.h"
+#include <memory>
 
 namespace gpu {
 namespace gles2 {
@@ -75,7 +74,7 @@
     };
 
     static PassRefPtr<DrawingBuffer> create(
-        PassOwnPtr<WebGraphicsContext3DProvider>,
+        std::unique_ptr<WebGraphicsContext3DProvider>,
         const IntSize&,
         bool premultipliedAlpha,
         bool wantAlphaChannel,
@@ -222,8 +221,8 @@
 
 protected: // For unittests
     DrawingBuffer(
-        PassOwnPtr<WebGraphicsContext3DProvider>,
-        PassOwnPtr<Extensions3DUtil>,
+        std::unique_ptr<WebGraphicsContext3DProvider>,
+        std::unique_ptr<Extensions3DUtil>,
         bool discardFramebufferSupported,
         bool wantAlphaChannel,
         bool premultipliedAlpha,
@@ -368,10 +367,10 @@
     GLfloat m_clearColor[4];
     GLboolean m_colorMask[4];
 
-    OwnPtr<WebGraphicsContext3DProvider> m_contextProvider;
+    std::unique_ptr<WebGraphicsContext3DProvider> m_contextProvider;
     // Lifetime is tied to the m_contextProvider.
     gpu::gles2::GLES2Interface* m_gl;
-    OwnPtr<Extensions3DUtil> m_extensionsUtil;
+    std::unique_ptr<Extensions3DUtil> m_extensionsUtil;
     IntSize m_size = { -1, -1 };
     const bool m_discardFramebufferSupported;
     const bool m_wantAlphaChannel;
@@ -431,7 +430,7 @@
     bool m_isHidden = false;
     SkFilterQuality m_filterQuality = kLow_SkFilterQuality;
 
-    OwnPtr<WebExternalTextureLayer> m_layer;
+    std::unique_ptr<WebExternalTextureLayer> m_layer;
 
     // All of the mailboxes that this DrawingBuffer has ever created.
     Vector<RefPtr<MailboxInfo>> m_textureMailboxes;
diff --git a/third_party/WebKit/Source/platform/graphics/gpu/DrawingBufferTest.cpp b/third_party/WebKit/Source/platform/graphics/gpu/DrawingBufferTest.cpp
index 7e161b6f..e8ac977 100644
--- a/third_party/WebKit/Source/platform/graphics/gpu/DrawingBufferTest.cpp
+++ b/third_party/WebKit/Source/platform/graphics/gpu/DrawingBufferTest.cpp
@@ -42,7 +42,9 @@
 #include "public/platform/functional/WebFunction.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/RefPtr.h"
+#include <memory>
 
 using testing::Test;
 using testing::_;
@@ -215,9 +217,9 @@
 
 class DrawingBufferForTests : public DrawingBuffer {
 public:
-    static PassRefPtr<DrawingBufferForTests> create(PassOwnPtr<WebGraphicsContext3DProvider> contextProvider, const IntSize& size, PreserveDrawingBuffer preserve)
+    static PassRefPtr<DrawingBufferForTests> create(std::unique_ptr<WebGraphicsContext3DProvider> contextProvider, const IntSize& size, PreserveDrawingBuffer preserve)
     {
-        OwnPtr<Extensions3DUtil> extensionsUtil = Extensions3DUtil::create(contextProvider->contextGL());
+        std::unique_ptr<Extensions3DUtil> extensionsUtil = Extensions3DUtil::create(contextProvider->contextGL());
         RefPtr<DrawingBufferForTests> drawingBuffer = adoptRef(new DrawingBufferForTests(std::move(contextProvider), std::move(extensionsUtil), preserve));
         bool multisampleExtensionSupported = false;
         if (!drawingBuffer->initialize(size, multisampleExtensionSupported)) {
@@ -227,7 +229,7 @@
         return drawingBuffer.release();
     }
 
-    DrawingBufferForTests(PassOwnPtr<WebGraphicsContext3DProvider> contextProvider, PassOwnPtr<Extensions3DUtil> extensionsUtil, PreserveDrawingBuffer preserve)
+    DrawingBufferForTests(std::unique_ptr<WebGraphicsContext3DProvider> contextProvider, std::unique_ptr<Extensions3DUtil> extensionsUtil, PreserveDrawingBuffer preserve)
         : DrawingBuffer(std::move(contextProvider), std::move(extensionsUtil), false /* discardFramebufferSupported */, true /* wantAlphaChannel */, false /* premultipliedAlpha */, preserve, false /* wantDepth */, false /* wantStencil */)
         , m_live(0)
     { }
@@ -243,7 +245,7 @@
 
 class WebGraphicsContext3DProviderForTests : public WebGraphicsContext3DProvider {
 public:
-    WebGraphicsContext3DProviderForTests(PassOwnPtr<gpu::gles2::GLES2Interface> gl)
+    WebGraphicsContext3DProviderForTests(std::unique_ptr<gpu::gles2::GLES2Interface> gl)
         : m_gl(std::move(gl))
     {
     }
@@ -260,16 +262,16 @@
     void setErrorMessageCallback(WebFunction<void(const char*, int32_t id)>) {}
 
 private:
-    OwnPtr<gpu::gles2::GLES2Interface> m_gl;
+    std::unique_ptr<gpu::gles2::GLES2Interface> m_gl;
 };
 
 class DrawingBufferTest : public Test {
 protected:
     void SetUp() override
     {
-        OwnPtr<GLES2InterfaceForTests> gl = adoptPtr(new GLES2InterfaceForTests);
+        std::unique_ptr<GLES2InterfaceForTests> gl = wrapUnique(new GLES2InterfaceForTests);
         m_gl = gl.get();
-        OwnPtr<WebGraphicsContext3DProviderForTests> provider = adoptPtr(new WebGraphicsContext3DProviderForTests(std::move(gl)));
+        std::unique_ptr<WebGraphicsContext3DProviderForTests> provider = wrapUnique(new WebGraphicsContext3DProviderForTests(std::move(gl)));
         m_drawingBuffer = DrawingBufferForTests::create(std::move(provider), IntSize(initialWidth, initialHeight), DrawingBuffer::Preserve);
         CHECK(m_drawingBuffer);
     }
@@ -489,9 +491,9 @@
 protected:
     void SetUp() override
     {
-        OwnPtr<GLES2InterfaceForTests> gl = adoptPtr(new GLES2InterfaceForTests);
+        std::unique_ptr<GLES2InterfaceForTests> gl = wrapUnique(new GLES2InterfaceForTests);
         m_gl = gl.get();
-        OwnPtr<WebGraphicsContext3DProviderForTests> provider = adoptPtr(new WebGraphicsContext3DProviderForTests(std::move(gl)));
+        std::unique_ptr<WebGraphicsContext3DProviderForTests> provider = wrapUnique(new WebGraphicsContext3DProviderForTests(std::move(gl)));
         RuntimeEnabledFeatures::setWebGLImageChromiumEnabled(true);
         m_imageId0 = m_gl->nextImageIdToBeCreated();
         EXPECT_CALL(*m_gl, BindTexImage2DMock(m_imageId0)).Times(1);
@@ -707,9 +709,9 @@
 
     for (size_t i = 0; i < WTF_ARRAY_LENGTH(cases); i++) {
         SCOPED_TRACE(cases[i].testCaseName);
-        OwnPtr<DepthStencilTrackingGLES2Interface> gl = adoptPtr(new DepthStencilTrackingGLES2Interface);
+        std::unique_ptr<DepthStencilTrackingGLES2Interface> gl = wrapUnique(new DepthStencilTrackingGLES2Interface);
         DepthStencilTrackingGLES2Interface* trackingGL = gl.get();
-        OwnPtr<WebGraphicsContext3DProviderForTests> provider = adoptPtr(new WebGraphicsContext3DProviderForTests(std::move(gl)));
+        std::unique_ptr<WebGraphicsContext3DProviderForTests> provider = wrapUnique(new WebGraphicsContext3DProviderForTests(std::move(gl)));
         DrawingBuffer::PreserveDrawingBuffer preserve = DrawingBuffer::Preserve;
 
         bool premultipliedAlpha = false;
diff --git a/third_party/WebKit/Source/platform/graphics/gpu/Extensions3DUtil.cpp b/third_party/WebKit/Source/platform/graphics/gpu/Extensions3DUtil.cpp
index 58cd5d2..0f00d826 100644
--- a/third_party/WebKit/Source/platform/graphics/gpu/Extensions3DUtil.cpp
+++ b/third_party/WebKit/Source/platform/graphics/gpu/Extensions3DUtil.cpp
@@ -5,10 +5,10 @@
 #include "platform/graphics/gpu/Extensions3DUtil.h"
 
 #include "gpu/command_buffer/client/gles2_interface.h"
-#include "wtf/OwnPtr.h"
-#include "wtf/PassOwnPtr.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/text/CString.h"
 #include "wtf/text/StringHash.h"
+#include <memory>
 
 namespace blink {
 
@@ -24,9 +24,9 @@
 
 } // anonymous namespace
 
-PassOwnPtr<Extensions3DUtil> Extensions3DUtil::create(gpu::gles2::GLES2Interface* gl)
+std::unique_ptr<Extensions3DUtil> Extensions3DUtil::create(gpu::gles2::GLES2Interface* gl)
 {
-    OwnPtr<Extensions3DUtil> out = adoptPtr(new Extensions3DUtil(gl));
+    std::unique_ptr<Extensions3DUtil> out = wrapUnique(new Extensions3DUtil(gl));
     out->initializeExtensions();
     return out;
 }
diff --git a/third_party/WebKit/Source/platform/graphics/gpu/Extensions3DUtil.h b/third_party/WebKit/Source/platform/graphics/gpu/Extensions3DUtil.h
index 418daf3..155d21fd 100644
--- a/third_party/WebKit/Source/platform/graphics/gpu/Extensions3DUtil.h
+++ b/third_party/WebKit/Source/platform/graphics/gpu/Extensions3DUtil.h
@@ -12,6 +12,7 @@
 #include "wtf/Noncopyable.h"
 #include "wtf/text/StringHash.h"
 #include "wtf/text/WTFString.h"
+#include <memory>
 
 namespace gpu {
 namespace gles2 {
@@ -26,7 +27,7 @@
     WTF_MAKE_NONCOPYABLE(Extensions3DUtil);
 public:
     // Creates a new Extensions3DUtil. If the passed GLES2Interface has been spontaneously lost, returns null.
-    static PassOwnPtr<Extensions3DUtil> create(gpu::gles2::GLES2Interface*);
+    static std::unique_ptr<Extensions3DUtil> create(gpu::gles2::GLES2Interface*);
     ~Extensions3DUtil();
 
     bool isValid() { return m_isValid; }
diff --git a/third_party/WebKit/Source/platform/graphics/gpu/SharedContextRateLimiter.cpp b/third_party/WebKit/Source/platform/graphics/gpu/SharedContextRateLimiter.cpp
index c351f16..54152e96 100644
--- a/third_party/WebKit/Source/platform/graphics/gpu/SharedContextRateLimiter.cpp
+++ b/third_party/WebKit/Source/platform/graphics/gpu/SharedContextRateLimiter.cpp
@@ -9,25 +9,27 @@
 #include "public/platform/Platform.h"
 #include "public/platform/WebGraphicsContext3DProvider.h"
 #include "third_party/khronos/GLES2/gl2.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
-PassOwnPtr<SharedContextRateLimiter> SharedContextRateLimiter::create(unsigned maxPendingTicks)
+std::unique_ptr<SharedContextRateLimiter> SharedContextRateLimiter::create(unsigned maxPendingTicks)
 {
-    return adoptPtr(new SharedContextRateLimiter(maxPendingTicks));
+    return wrapUnique(new SharedContextRateLimiter(maxPendingTicks));
 }
 
 SharedContextRateLimiter::SharedContextRateLimiter(unsigned maxPendingTicks)
     : m_maxPendingTicks(maxPendingTicks)
     , m_canUseSyncQueries(false)
 {
-    m_contextProvider = adoptPtr(Platform::current()->createSharedOffscreenGraphicsContext3DProvider());
+    m_contextProvider = wrapUnique(Platform::current()->createSharedOffscreenGraphicsContext3DProvider());
     if (!m_contextProvider)
         return;
 
     gpu::gles2::GLES2Interface* gl = m_contextProvider->contextGL();
     if (gl && gl->GetGraphicsResetStatusKHR() == GL_NO_ERROR) {
-        OwnPtr<Extensions3DUtil> extensionsUtil = Extensions3DUtil::create(gl);
+        std::unique_ptr<Extensions3DUtil> extensionsUtil = Extensions3DUtil::create(gl);
         // TODO(junov): when the GLES 3.0 command buffer is ready, we could use fenceSync instead
         m_canUseSyncQueries = extensionsUtil->supportsExtension("GL_CHROMIUM_sync_query");
     }
diff --git a/third_party/WebKit/Source/platform/graphics/gpu/SharedContextRateLimiter.h b/third_party/WebKit/Source/platform/graphics/gpu/SharedContextRateLimiter.h
index 96805c1..4a276b7f 100644
--- a/third_party/WebKit/Source/platform/graphics/gpu/SharedContextRateLimiter.h
+++ b/third_party/WebKit/Source/platform/graphics/gpu/SharedContextRateLimiter.h
@@ -9,8 +9,7 @@
 #include "wtf/Allocator.h"
 #include "wtf/Deque.h"
 #include "wtf/Noncopyable.h"
-#include "wtf/OwnPtr.h"
-#include "wtf/PassOwnPtr.h"
+#include <memory>
 
 namespace blink {
 
@@ -40,13 +39,13 @@
     USING_FAST_MALLOC(SharedContextRateLimiter);
     WTF_MAKE_NONCOPYABLE(SharedContextRateLimiter);
 public:
-    static PassOwnPtr<SharedContextRateLimiter> create(unsigned maxPendingTicks);
+    static std::unique_ptr<SharedContextRateLimiter> create(unsigned maxPendingTicks);
     void tick();
     void reset();
 private:
     SharedContextRateLimiter(unsigned maxPendingTicks);
 
-    OwnPtr<WebGraphicsContext3DProvider> m_contextProvider;
+    std::unique_ptr<WebGraphicsContext3DProvider> m_contextProvider;
     Deque<GLuint> m_queries;
     unsigned m_maxPendingTicks;
     bool m_canUseSyncQueries;
diff --git a/third_party/WebKit/Source/platform/graphics/gpu/WebGLImageConversion.cpp b/third_party/WebKit/Source/platform/graphics/gpu/WebGLImageConversion.cpp
index 5e264f9..ea70f07 100644
--- a/third_party/WebKit/Source/platform/graphics/gpu/WebGLImageConversion.cpp
+++ b/third_party/WebKit/Source/platform/graphics/gpu/WebGLImageConversion.cpp
@@ -11,8 +11,8 @@
 #include "platform/graphics/skia/SkiaUtils.h"
 #include "platform/image-decoders/ImageDecoder.h"
 #include "third_party/skia/include/core/SkImage.h"
-#include "wtf/OwnPtr.h"
-#include "wtf/PassOwnPtr.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
@@ -1715,7 +1715,7 @@
     {
         const unsigned MaxNumberOfComponents = 4;
         const unsigned MaxBytesPerComponent  = 4;
-        m_unpackedIntermediateSrcData = adoptArrayPtr(new uint8_t[m_width * MaxNumberOfComponents *MaxBytesPerComponent]);
+        m_unpackedIntermediateSrcData = wrapArrayUnique(new uint8_t[m_width * MaxNumberOfComponents *MaxBytesPerComponent]);
         ASSERT(m_unpackedIntermediateSrcData.get());
     }
 
@@ -1737,7 +1737,7 @@
     void* const m_dstStart;
     const int m_srcStride, m_dstStride;
     bool m_success;
-    OwnPtr<uint8_t[]> m_unpackedIntermediateSrcData;
+    std::unique_ptr<uint8_t[]> m_unpackedIntermediateSrcData;
 };
 
 void FormatConverter::convert(WebGLImageConversion::DataFormat srcFormat, WebGLImageConversion::DataFormat dstFormat, WebGLImageConversion::AlphaOp alphaOp)
@@ -2141,7 +2141,7 @@
 
     if ((!skiaImage || ignoreGammaAndColorProfile || (hasAlpha && !premultiplyAlpha)) && m_image->data()) {
         // Attempt to get raw unpremultiplied image data.
-        OwnPtr<ImageDecoder> decoder(ImageDecoder::create(
+        std::unique_ptr<ImageDecoder> decoder(ImageDecoder::create(
             *(m_image->data()), ImageDecoder::AlphaNotPremultiplied,
             ignoreGammaAndColorProfile ? ImageDecoder::GammaAndColorProfileIgnored : ImageDecoder::GammaAndColorProfileApplied));
         if (!decoder)
diff --git a/third_party/WebKit/Source/platform/graphics/paint/ClipDisplayItem.h b/third_party/WebKit/Source/platform/graphics/paint/ClipDisplayItem.h
index eede2c21..de020e2 100644
--- a/third_party/WebKit/Source/platform/graphics/paint/ClipDisplayItem.h
+++ b/third_party/WebKit/Source/platform/graphics/paint/ClipDisplayItem.h
@@ -10,7 +10,6 @@
 #include "platform/geometry/FloatRoundedRect.h"
 #include "platform/geometry/IntRect.h"
 #include "platform/graphics/paint/DisplayItem.h"
-#include "wtf/PassOwnPtr.h"
 #include "wtf/Vector.h"
 
 namespace blink {
diff --git a/third_party/WebKit/Source/platform/graphics/paint/ClipPathDisplayItem.h b/third_party/WebKit/Source/platform/graphics/paint/ClipPathDisplayItem.h
index 47cbddff..721b1ee 100644
--- a/third_party/WebKit/Source/platform/graphics/paint/ClipPathDisplayItem.h
+++ b/third_party/WebKit/Source/platform/graphics/paint/ClipPathDisplayItem.h
@@ -9,7 +9,6 @@
 #include "platform/graphics/Path.h"
 #include "platform/graphics/paint/DisplayItem.h"
 #include "third_party/skia/include/core/SkPath.h"
-#include "wtf/PassOwnPtr.h"
 
 namespace blink {
 
diff --git a/third_party/WebKit/Source/platform/graphics/paint/CompositingDisplayItem.h b/third_party/WebKit/Source/platform/graphics/paint/CompositingDisplayItem.h
index 1e444fc..10dd663 100644
--- a/third_party/WebKit/Source/platform/graphics/paint/CompositingDisplayItem.h
+++ b/third_party/WebKit/Source/platform/graphics/paint/CompositingDisplayItem.h
@@ -9,7 +9,6 @@
 #include "platform/graphics/GraphicsTypes.h"
 #include "platform/graphics/paint/DisplayItem.h"
 #include "public/platform/WebBlendMode.h"
-#include "wtf/PassOwnPtr.h"
 #ifndef NDEBUG
 #include "wtf/text/WTFString.h"
 #endif
diff --git a/third_party/WebKit/Source/platform/graphics/paint/DisplayItem.h b/third_party/WebKit/Source/platform/graphics/paint/DisplayItem.h
index 78a2c09..94f60a1 100644
--- a/third_party/WebKit/Source/platform/graphics/paint/DisplayItem.h
+++ b/third_party/WebKit/Source/platform/graphics/paint/DisplayItem.h
@@ -11,7 +11,6 @@
 #include "wtf/Allocator.h"
 #include "wtf/Assertions.h"
 #include "wtf/Noncopyable.h"
-#include "wtf/PassOwnPtr.h"
 
 #ifndef NDEBUG
 #include "wtf/text/StringBuilder.h"
diff --git a/third_party/WebKit/Source/platform/graphics/paint/DrawingDisplayItem.h b/third_party/WebKit/Source/platform/graphics/paint/DrawingDisplayItem.h
index 1892622e..b2aed26 100644
--- a/third_party/WebKit/Source/platform/graphics/paint/DrawingDisplayItem.h
+++ b/third_party/WebKit/Source/platform/graphics/paint/DrawingDisplayItem.h
@@ -10,7 +10,6 @@
 #include "platform/geometry/FloatPoint.h"
 #include "platform/graphics/paint/DisplayItem.h"
 #include "third_party/skia/include/core/SkPicture.h"
-#include "wtf/PassOwnPtr.h"
 
 namespace blink {
 
diff --git a/third_party/WebKit/Source/platform/graphics/paint/FilterDisplayItem.h b/third_party/WebKit/Source/platform/graphics/paint/FilterDisplayItem.h
index 0c67a4a..8eee7b6 100644
--- a/third_party/WebKit/Source/platform/graphics/paint/FilterDisplayItem.h
+++ b/third_party/WebKit/Source/platform/graphics/paint/FilterDisplayItem.h
@@ -8,17 +8,17 @@
 #include "platform/geometry/FloatRect.h"
 #include "platform/graphics/CompositorFilterOperations.h"
 #include "platform/graphics/paint/DisplayItem.h"
-#include "wtf/PassOwnPtr.h"
 #include "wtf/PassRefPtr.h"
 #ifndef NDEBUG
 #include "wtf/text/WTFString.h"
 #endif
+#include <memory>
 
 namespace blink {
 
 class PLATFORM_EXPORT BeginFilterDisplayItem final : public PairedBeginDisplayItem {
 public:
-    BeginFilterDisplayItem(const DisplayItemClient& client, sk_sp<SkImageFilter> imageFilter, const FloatRect& bounds, PassOwnPtr<CompositorFilterOperations> filterOperations = nullptr)
+    BeginFilterDisplayItem(const DisplayItemClient& client, sk_sp<SkImageFilter> imageFilter, const FloatRect& bounds, std::unique_ptr<CompositorFilterOperations> filterOperations = nullptr)
         : PairedBeginDisplayItem(client, BeginFilter, sizeof(*this))
         , m_imageFilter(std::move(imageFilter))
         , m_webFilterOperations(std::move(filterOperations))
@@ -43,7 +43,7 @@
 
     // FIXME: m_imageFilter should be replaced with m_webFilterOperations when copying data to the compositor.
     sk_sp<SkImageFilter> m_imageFilter;
-    OwnPtr<CompositorFilterOperations> m_webFilterOperations;
+    std::unique_ptr<CompositorFilterOperations> m_webFilterOperations;
     const FloatRect m_bounds;
 };
 
diff --git a/third_party/WebKit/Source/platform/graphics/paint/FloatClipDisplayItem.h b/third_party/WebKit/Source/platform/graphics/paint/FloatClipDisplayItem.h
index e9cac36..b6275a1 100644
--- a/third_party/WebKit/Source/platform/graphics/paint/FloatClipDisplayItem.h
+++ b/third_party/WebKit/Source/platform/graphics/paint/FloatClipDisplayItem.h
@@ -8,7 +8,6 @@
 #include "platform/PlatformExport.h"
 #include "platform/geometry/FloatRect.h"
 #include "platform/graphics/paint/DisplayItem.h"
-#include "wtf/PassOwnPtr.h"
 
 namespace blink {
 
diff --git a/third_party/WebKit/Source/platform/graphics/paint/PaintController.h b/third_party/WebKit/Source/platform/graphics/paint/PaintController.h
index 0087fa0..279e94f 100644
--- a/third_party/WebKit/Source/platform/graphics/paint/PaintController.h
+++ b/third_party/WebKit/Source/platform/graphics/paint/PaintController.h
@@ -20,8 +20,9 @@
 #include "wtf/Assertions.h"
 #include "wtf/HashMap.h"
 #include "wtf/HashSet.h"
-#include "wtf/PassOwnPtr.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/Vector.h"
+#include <memory>
 #include <utility>
 
 class SkPicture;
@@ -39,9 +40,9 @@
     WTF_MAKE_NONCOPYABLE(PaintController);
     USING_FAST_MALLOC(PaintController);
 public:
-    static PassOwnPtr<PaintController> create()
+    static std::unique_ptr<PaintController> create()
     {
-        return adoptPtr(new PaintController());
+        return wrapUnique(new PaintController());
     }
 
     ~PaintController()
diff --git a/third_party/WebKit/Source/platform/graphics/paint/PaintControllerTest.cpp b/third_party/WebKit/Source/platform/graphics/paint/PaintControllerTest.cpp
index bd302cd..826c05d 100644
--- a/third_party/WebKit/Source/platform/graphics/paint/PaintControllerTest.cpp
+++ b/third_party/WebKit/Source/platform/graphics/paint/PaintControllerTest.cpp
@@ -15,6 +15,7 @@
 #include "platform/graphics/paint/SubsequenceRecorder.h"
 #include "platform/testing/FakeDisplayItemClient.h"
 #include "testing/gtest/include/gtest/gtest.h"
+#include <memory>
 
 namespace blink {
 
@@ -38,7 +39,7 @@
         RuntimeEnabledFeatures::setSlimmingPaintV2Enabled(m_originalSlimmingPaintV2Enabled);
     }
 
-    OwnPtr<PaintController> m_paintController;
+    std::unique_ptr<PaintController> m_paintController;
     bool m_originalSlimmingPaintV2Enabled;
 };
 
diff --git a/third_party/WebKit/Source/platform/graphics/paint/ScrollDisplayItem.h b/third_party/WebKit/Source/platform/graphics/paint/ScrollDisplayItem.h
index 73ca8c1..f8b0e54 100644
--- a/third_party/WebKit/Source/platform/graphics/paint/ScrollDisplayItem.h
+++ b/third_party/WebKit/Source/platform/graphics/paint/ScrollDisplayItem.h
@@ -8,7 +8,6 @@
 #include "platform/geometry/IntSize.h"
 #include "platform/graphics/paint/DisplayItem.h"
 #include "wtf/Allocator.h"
-#include "wtf/PassOwnPtr.h"
 
 namespace blink {
 
diff --git a/third_party/WebKit/Source/platform/graphics/paint/SkPictureBuilder.cpp b/third_party/WebKit/Source/platform/graphics/paint/SkPictureBuilder.cpp
index 6c5a50d4..2d8215d5 100644
--- a/third_party/WebKit/Source/platform/graphics/paint/SkPictureBuilder.cpp
+++ b/third_party/WebKit/Source/platform/graphics/paint/SkPictureBuilder.cpp
@@ -7,6 +7,7 @@
 #include "platform/geometry/FloatRect.h"
 #include "platform/graphics/GraphicsContext.h"
 #include "platform/graphics/paint/PaintController.h"
+#include "wtf/PtrUtil.h"
 
 namespace blink {
 
@@ -19,7 +20,7 @@
 
     m_paintController = PaintController::create();
     m_paintController->beginSkippingCache();
-    m_context = adoptPtr(new GraphicsContext(*m_paintController, disabledMode, metaData));
+    m_context = wrapUnique(new GraphicsContext(*m_paintController, disabledMode, metaData));
 
     if (containingContext) {
         m_context->setDeviceScaleFactor(containingContext->deviceScaleFactor());
diff --git a/third_party/WebKit/Source/platform/graphics/paint/SkPictureBuilder.h b/third_party/WebKit/Source/platform/graphics/paint/SkPictureBuilder.h
index 1bb4839..edf2b25c8 100644
--- a/third_party/WebKit/Source/platform/graphics/paint/SkPictureBuilder.h
+++ b/third_party/WebKit/Source/platform/graphics/paint/SkPictureBuilder.h
@@ -9,8 +9,8 @@
 #include "platform/geometry/FloatRect.h"
 #include "platform/graphics/paint/DisplayItemClient.h"
 #include "wtf/Noncopyable.h"
-#include "wtf/OwnPtr.h"
 #include "wtf/PassRefPtr.h"
+#include <memory>
 
 class SkMetaData;
 class SkPicture;
@@ -45,8 +45,8 @@
 private:
     DISPLAY_ITEM_CACHE_STATUS_UNCACHEABLE_IMPLEMENTATION
 
-    OwnPtr<PaintController> m_paintController;
-    OwnPtr<GraphicsContext> m_context;
+    std::unique_ptr<PaintController> m_paintController;
+    std::unique_ptr<GraphicsContext> m_context;
     FloatRect m_bounds;
 };
 
diff --git a/third_party/WebKit/Source/platform/graphics/paint/Transform3DDisplayItem.h b/third_party/WebKit/Source/platform/graphics/paint/Transform3DDisplayItem.h
index cb028bcb..b25dcd5 100644
--- a/third_party/WebKit/Source/platform/graphics/paint/Transform3DDisplayItem.h
+++ b/third_party/WebKit/Source/platform/graphics/paint/Transform3DDisplayItem.h
@@ -9,7 +9,6 @@
 #include "platform/graphics/paint/DisplayItem.h"
 #include "platform/transforms/TransformationMatrix.h"
 #include "wtf/Assertions.h"
-#include "wtf/PassOwnPtr.h"
 
 namespace blink {
 
diff --git a/third_party/WebKit/Source/platform/graphics/paint/TransformDisplayItem.h b/third_party/WebKit/Source/platform/graphics/paint/TransformDisplayItem.h
index e05a1b8..1852458 100644
--- a/third_party/WebKit/Source/platform/graphics/paint/TransformDisplayItem.h
+++ b/third_party/WebKit/Source/platform/graphics/paint/TransformDisplayItem.h
@@ -7,7 +7,6 @@
 
 #include "platform/graphics/paint/DisplayItem.h"
 #include "platform/transforms/AffineTransform.h"
-#include "wtf/PassOwnPtr.h"
 
 namespace blink {
 
diff --git a/third_party/WebKit/Source/platform/graphics/test/MockImageDecoder.h b/third_party/WebKit/Source/platform/graphics/test/MockImageDecoder.h
index a109d96..f40291e9 100644
--- a/third_party/WebKit/Source/platform/graphics/test/MockImageDecoder.h
+++ b/third_party/WebKit/Source/platform/graphics/test/MockImageDecoder.h
@@ -26,7 +26,8 @@
 #ifndef MockImageDecoder_h
 
 #include "platform/image-decoders/ImageDecoder.h"
-#include "wtf/PassOwnPtr.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
@@ -65,7 +66,7 @@
 
 class MockImageDecoder : public ImageDecoder {
 public:
-    static PassOwnPtr<MockImageDecoder> create(MockImageDecoderClient* client) { return adoptPtr(new MockImageDecoder(client)); }
+    static std::unique_ptr<MockImageDecoder> create(MockImageDecoderClient* client) { return wrapUnique(new MockImageDecoder(client)); }
 
     MockImageDecoder(MockImageDecoderClient* client)
         : ImageDecoder(AlphaPremultiplied, GammaAndColorProfileApplied, noDecodedImageByteLimit)
@@ -137,19 +138,19 @@
 
 class MockImageDecoderFactory : public ImageDecoderFactory {
 public:
-    static PassOwnPtr<MockImageDecoderFactory> create(MockImageDecoderClient* client, const SkISize& decodedSize)
+    static std::unique_ptr<MockImageDecoderFactory> create(MockImageDecoderClient* client, const SkISize& decodedSize)
     {
-        return adoptPtr(new MockImageDecoderFactory(client, IntSize(decodedSize.width(), decodedSize.height())));
+        return wrapUnique(new MockImageDecoderFactory(client, IntSize(decodedSize.width(), decodedSize.height())));
     }
 
-    static PassOwnPtr<MockImageDecoderFactory> create(MockImageDecoderClient* client, const IntSize& decodedSize)
+    static std::unique_ptr<MockImageDecoderFactory> create(MockImageDecoderClient* client, const IntSize& decodedSize)
     {
-        return adoptPtr(new MockImageDecoderFactory(client, decodedSize));
+        return wrapUnique(new MockImageDecoderFactory(client, decodedSize));
     }
 
-    PassOwnPtr<ImageDecoder> create() override
+    std::unique_ptr<ImageDecoder> create() override
     {
-        OwnPtr<MockImageDecoder> decoder = MockImageDecoder::create(m_client);
+        std::unique_ptr<MockImageDecoder> decoder = MockImageDecoder::create(m_client);
         decoder->setSize(m_decodedSize.width(), m_decodedSize.height());
         return std::move(decoder);
     }
diff --git a/third_party/WebKit/Source/platform/heap/GCTaskRunner.h b/third_party/WebKit/Source/platform/heap/GCTaskRunner.h
index d2a37098..8ef05d6 100644
--- a/third_party/WebKit/Source/platform/heap/GCTaskRunner.h
+++ b/third_party/WebKit/Source/platform/heap/GCTaskRunner.h
@@ -36,6 +36,8 @@
 #include "public/platform/WebTaskRunner.h"
 #include "public/platform/WebThread.h"
 #include "public/platform/WebTraceLocation.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
@@ -100,11 +102,11 @@
     USING_FAST_MALLOC(GCTaskRunner);
 public:
     explicit GCTaskRunner(WebThread* thread)
-        : m_gcTaskObserver(adoptPtr(new GCTaskObserver))
+        : m_gcTaskObserver(wrapUnique(new GCTaskObserver))
         , m_thread(thread)
     {
         m_thread->addTaskObserver(m_gcTaskObserver.get());
-        ThreadState::current()->addInterruptor(adoptPtr(new MessageLoopInterruptor(thread->getWebTaskRunner())));
+        ThreadState::current()->addInterruptor(wrapUnique(new MessageLoopInterruptor(thread->getWebTaskRunner())));
     }
 
     ~GCTaskRunner()
@@ -113,7 +115,7 @@
     }
 
 private:
-    OwnPtr<GCTaskObserver> m_gcTaskObserver;
+    std::unique_ptr<GCTaskObserver> m_gcTaskObserver;
     WebThread* m_thread;
 };
 
diff --git a/third_party/WebKit/Source/platform/heap/Heap.cpp b/third_party/WebKit/Source/platform/heap/Heap.cpp
index 527b04a1..6156652 100644
--- a/third_party/WebKit/Source/platform/heap/Heap.cpp
+++ b/third_party/WebKit/Source/platform/heap/Heap.cpp
@@ -48,7 +48,9 @@
 #include "wtf/CurrentTime.h"
 #include "wtf/DataLog.h"
 #include "wtf/LeakAnnotations.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/allocator/Partitions.h"
+#include <memory>
 
 namespace blink {
 
@@ -217,15 +219,15 @@
 }
 
 ThreadHeap::ThreadHeap()
-    : m_regionTree(adoptPtr(new RegionTree()))
-    , m_heapDoesNotContainCache(adoptPtr(new HeapDoesNotContainCache))
-    , m_safePointBarrier(adoptPtr(new SafePointBarrier()))
-    , m_freePagePool(adoptPtr(new FreePagePool))
-    , m_orphanedPagePool(adoptPtr(new OrphanedPagePool))
-    , m_markingStack(adoptPtr(new CallbackStack()))
-    , m_postMarkingCallbackStack(adoptPtr(new CallbackStack()))
-    , m_globalWeakCallbackStack(adoptPtr(new CallbackStack()))
-    , m_ephemeronStack(adoptPtr(new CallbackStack(CallbackStack::kMinimalBlockSize)))
+    : m_regionTree(wrapUnique(new RegionTree()))
+    , m_heapDoesNotContainCache(wrapUnique(new HeapDoesNotContainCache))
+    , m_safePointBarrier(wrapUnique(new SafePointBarrier()))
+    , m_freePagePool(wrapUnique(new FreePagePool))
+    , m_orphanedPagePool(wrapUnique(new OrphanedPagePool))
+    , m_markingStack(wrapUnique(new CallbackStack()))
+    , m_postMarkingCallbackStack(wrapUnique(new CallbackStack()))
+    , m_globalWeakCallbackStack(wrapUnique(new CallbackStack()))
+    , m_ephemeronStack(wrapUnique(new CallbackStack(CallbackStack::kMinimalBlockSize)))
 {
     if (ThreadState::current()->isMainThread())
         s_mainThreadHeap = this;
@@ -486,7 +488,7 @@
     RELEASE_ASSERT(!state->isGCForbidden());
     state->completeSweep();
 
-    OwnPtr<Visitor> visitor = Visitor::create(state, gcType);
+    std::unique_ptr<Visitor> visitor = Visitor::create(state, gcType);
 
     SafePointScope safePointScope(stackState, state);
 
@@ -579,7 +581,7 @@
         // ahead while it is running, hence the termination GC does not enter a
         // safepoint. VisitorScope will not enter also a safepoint scope for
         // ThreadTerminationGC.
-        OwnPtr<Visitor> visitor = Visitor::create(state, BlinkGC::ThreadTerminationGC);
+        std::unique_ptr<Visitor> visitor = Visitor::create(state, BlinkGC::ThreadTerminationGC);
 
         ThreadState::NoAllocationScope noAllocationScope(state);
 
diff --git a/third_party/WebKit/Source/platform/heap/Heap.h b/third_party/WebKit/Source/platform/heap/Heap.h
index e6dd3ffd..9330378 100644
--- a/third_party/WebKit/Source/platform/heap/Heap.h
+++ b/third_party/WebKit/Source/platform/heap/Heap.h
@@ -42,6 +42,7 @@
 #include "wtf/Assertions.h"
 #include "wtf/Atomics.h"
 #include "wtf/Forward.h"
+#include <memory>
 
 namespace blink {
 
@@ -403,15 +404,15 @@
     RecursiveMutex m_threadAttachMutex;
     ThreadStateSet m_threads;
     ThreadHeapStats m_stats;
-    OwnPtr<RegionTree> m_regionTree;
-    OwnPtr<HeapDoesNotContainCache> m_heapDoesNotContainCache;
-    OwnPtr<SafePointBarrier> m_safePointBarrier;
-    OwnPtr<FreePagePool> m_freePagePool;
-    OwnPtr<OrphanedPagePool> m_orphanedPagePool;
-    OwnPtr<CallbackStack> m_markingStack;
-    OwnPtr<CallbackStack> m_postMarkingCallbackStack;
-    OwnPtr<CallbackStack> m_globalWeakCallbackStack;
-    OwnPtr<CallbackStack> m_ephemeronStack;
+    std::unique_ptr<RegionTree> m_regionTree;
+    std::unique_ptr<HeapDoesNotContainCache> m_heapDoesNotContainCache;
+    std::unique_ptr<SafePointBarrier> m_safePointBarrier;
+    std::unique_ptr<FreePagePool> m_freePagePool;
+    std::unique_ptr<OrphanedPagePool> m_orphanedPagePool;
+    std::unique_ptr<CallbackStack> m_markingStack;
+    std::unique_ptr<CallbackStack> m_postMarkingCallbackStack;
+    std::unique_ptr<CallbackStack> m_globalWeakCallbackStack;
+    std::unique_ptr<CallbackStack> m_ephemeronStack;
     BlinkGC::GCReason m_lastGCReason;
 
     static ThreadHeap* s_mainThreadHeap;
diff --git a/third_party/WebKit/Source/platform/heap/HeapPage.cpp b/third_party/WebKit/Source/platform/heap/HeapPage.cpp
index d9b9c60..b7da90a 100644
--- a/third_party/WebKit/Source/platform/heap/HeapPage.cpp
+++ b/third_party/WebKit/Source/platform/heap/HeapPage.cpp
@@ -48,7 +48,6 @@
 #include "wtf/ContainerAnnotations.h"
 #include "wtf/CurrentTime.h"
 #include "wtf/LeakAnnotations.h"
-#include "wtf/PassOwnPtr.h"
 #include "wtf/TemporaryChange.h"
 #include "wtf/allocator/PageAllocator.h"
 #include "wtf/allocator/Partitions.h"
diff --git a/third_party/WebKit/Source/platform/heap/HeapTest.cpp b/third_party/WebKit/Source/platform/heap/HeapTest.cpp
index 2c2dcf1..5f7d8fd1 100644
--- a/third_party/WebKit/Source/platform/heap/HeapTest.cpp
+++ b/third_party/WebKit/Source/platform/heap/HeapTest.cpp
@@ -44,6 +44,8 @@
 #include "testing/gtest/include/gtest/gtest.h"
 #include "wtf/HashTraits.h"
 #include "wtf/LinkedHashSet.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
@@ -465,9 +467,9 @@
 protected:
     static void test(ThreadedTesterBase* tester)
     {
-        Vector<OwnPtr<WebThread>, numberOfThreads> m_threads;
+        Vector<std::unique_ptr<WebThread>, numberOfThreads> m_threads;
         for (int i = 0; i < numberOfThreads; i++) {
-            m_threads.append(adoptPtr(Platform::current()->createThread("blink gc testing thread")));
+            m_threads.append(wrapUnique(Platform::current()->createThread("blink gc testing thread")));
             m_threads.last()->getWebTaskRunner()->postTask(BLINK_FROM_HERE, threadSafeBind(threadFunc, AllowCrossThreadAccess(tester)));
         }
         while (tester->m_threadsToFinish) {
@@ -529,11 +531,11 @@
     using GlobalIntWrapperPersistent = CrossThreadPersistent<IntWrapper>;
 
     Mutex m_mutex;
-    Vector<OwnPtr<GlobalIntWrapperPersistent>> m_crossPersistents;
+    Vector<std::unique_ptr<GlobalIntWrapperPersistent>> m_crossPersistents;
 
-    PassOwnPtr<GlobalIntWrapperPersistent> createGlobalPersistent(int value)
+    std::unique_ptr<GlobalIntWrapperPersistent> createGlobalPersistent(int value)
     {
-        return adoptPtr(new GlobalIntWrapperPersistent(IntWrapper::create(value)));
+        return wrapUnique(new GlobalIntWrapperPersistent(IntWrapper::create(value)));
     }
 
     void addGlobalPersistent()
@@ -557,7 +559,7 @@
             {
                 Persistent<IntWrapper> wrapper;
 
-                OwnPtr<GlobalIntWrapperPersistent> globalPersistent = createGlobalPersistent(0x0ed0cabb);
+                std::unique_ptr<GlobalIntWrapperPersistent> globalPersistent = createGlobalPersistent(0x0ed0cabb);
 
                 for (int i = 0; i < numberOfAllocations; i++) {
                     wrapper = IntWrapper::create(0x0bbac0de);
@@ -1388,7 +1390,7 @@
 
 class FinalizationObserverWithHashMap {
 public:
-    typedef HeapHashMap<WeakMember<Observable>, OwnPtr<FinalizationObserverWithHashMap>> ObserverMap;
+    typedef HeapHashMap<WeakMember<Observable>, std::unique_ptr<FinalizationObserverWithHashMap>> ObserverMap;
 
     explicit FinalizationObserverWithHashMap(Observable& target) : m_target(target) { }
     ~FinalizationObserverWithHashMap()
@@ -1402,7 +1404,7 @@
         ObserverMap& map = observers();
         ObserverMap::AddResult result = map.add(&target, nullptr);
         if (result.isNewEntry)
-            result.storedValue->value = adoptPtr(new FinalizationObserverWithHashMap(target));
+            result.storedValue->value = wrapUnique(new FinalizationObserverWithHashMap(target));
         else
             ASSERT(result.storedValue->value);
         return map;
@@ -4794,9 +4796,9 @@
 
 TEST(HeapTest, DestructorsCalled)
 {
-    HeapHashMap<Member<IntWrapper>, OwnPtr<SimpleClassWithDestructor>> map;
+    HeapHashMap<Member<IntWrapper>, std::unique_ptr<SimpleClassWithDestructor>> map;
     SimpleClassWithDestructor* hasDestructor = new SimpleClassWithDestructor();
-    map.add(IntWrapper::create(1), adoptPtr(hasDestructor));
+    map.add(IntWrapper::create(1), wrapUnique(hasDestructor));
     SimpleClassWithDestructor::s_wasDestructed = false;
     map.clear();
     EXPECT_TRUE(SimpleClassWithDestructor::s_wasDestructed);
@@ -4941,7 +4943,7 @@
 public:
     static void test()
     {
-        OwnPtr<WebThread> sleepingThread = adoptPtr(Platform::current()->createThread("SleepingThread"));
+        std::unique_ptr<WebThread> sleepingThread = wrapUnique(Platform::current()->createThread("SleepingThread"));
         sleepingThread->getWebTaskRunner()->postTask(BLINK_FROM_HERE, threadSafeBind(sleeperMainFunc));
 
         // Wait for the sleeper to run.
@@ -5606,7 +5608,7 @@
         IntWrapper::s_destructorCalls = 0;
 
         MutexLocker locker(mainThreadMutex());
-        OwnPtr<WebThread> workerThread = adoptPtr(Platform::current()->createThread("Test Worker Thread"));
+        std::unique_ptr<WebThread> workerThread = wrapUnique(Platform::current()->createThread("Test Worker Thread"));
         workerThread->getWebTaskRunner()->postTask(BLINK_FROM_HERE, threadSafeBind(workerThreadMain));
 
         // Wait for the worker thread to have done its initialization,
@@ -5709,7 +5711,7 @@
         IntWrapper::s_destructorCalls = 0;
 
         MutexLocker locker(mainThreadMutex());
-        OwnPtr<WebThread> workerThread = adoptPtr(Platform::current()->createThread("Test Worker Thread"));
+        std::unique_ptr<WebThread> workerThread = wrapUnique(Platform::current()->createThread("Test Worker Thread"));
         workerThread->getWebTaskRunner()->postTask(BLINK_FROM_HERE, threadSafeBind(workerThreadMain));
 
         // Wait for the worker thread initialization. The worker
@@ -5912,7 +5914,7 @@
         DestructorLockingObject::s_destructorCalls = 0;
 
         MutexLocker locker(mainThreadMutex());
-        OwnPtr<WebThread> workerThread = adoptPtr(Platform::current()->createThread("Test Worker Thread"));
+        std::unique_ptr<WebThread> workerThread = wrapUnique(Platform::current()->createThread("Test Worker Thread"));
         workerThread->getWebTaskRunner()->postTask(BLINK_FROM_HERE, threadSafeBind(workerThreadMain));
 
         // Park the main thread until the worker thread has initialized.
@@ -6617,7 +6619,7 @@
 TEST(HeapTest, WeakPersistent)
 {
     Persistent<IntWrapper> object = new IntWrapper(20);
-    OwnPtr<WeakPersistentHolder> holder = adoptPtr(new WeakPersistentHolder(object));
+    std::unique_ptr<WeakPersistentHolder> holder = wrapUnique(new WeakPersistentHolder(object));
     preciselyCollectGarbage();
     EXPECT_TRUE(holder->object());
     object = nullptr;
@@ -6658,7 +6660,7 @@
 
     // Step 1: Initiate a worker thread, and wait for |object| to get allocated on the worker thread.
     MutexLocker mainThreadMutexLocker(mainThreadMutex());
-    OwnPtr<WebThread> workerThread = adoptPtr(Platform::current()->createThread("Test Worker Thread"));
+    std::unique_ptr<WebThread> workerThread = wrapUnique(Platform::current()->createThread("Test Worker Thread"));
     DestructorLockingObject* object = nullptr;
     workerThread->getWebTaskRunner()->postTask(BLINK_FROM_HERE, threadSafeBind(workerThreadMainForCrossThreadWeakPersistentTest, AllowCrossThreadAccess(&object)));
     parkMainThread();
diff --git a/third_party/WebKit/Source/platform/heap/PersistentNode.h b/third_party/WebKit/Source/platform/heap/PersistentNode.h
index a685840..c9bebe3 100644
--- a/third_party/WebKit/Source/platform/heap/PersistentNode.h
+++ b/third_party/WebKit/Source/platform/heap/PersistentNode.h
@@ -9,7 +9,9 @@
 #include "platform/heap/ThreadState.h"
 #include "wtf/Allocator.h"
 #include "wtf/Assertions.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/ThreadingPrimitives.h"
+#include <memory>
 
 namespace blink {
 
@@ -172,7 +174,7 @@
 class CrossThreadPersistentRegion final {
     USING_FAST_MALLOC(CrossThreadPersistentRegion);
 public:
-    CrossThreadPersistentRegion() : m_persistentRegion(adoptPtr(new PersistentRegion)) { }
+    CrossThreadPersistentRegion() : m_persistentRegion(wrapUnique(new PersistentRegion)) { }
 
     void allocatePersistentNode(PersistentNode*& persistentNode, void* self, TraceCallback trace)
     {
@@ -242,7 +244,7 @@
     // We don't make CrossThreadPersistentRegion inherit from PersistentRegion
     // because we don't want to virtualize performance-sensitive methods
     // such as PersistentRegion::allocate/freePersistentNode.
-    OwnPtr<PersistentRegion> m_persistentRegion;
+    std::unique_ptr<PersistentRegion> m_persistentRegion;
 
     // Recursive as prepareForThreadStateTermination() clears a PersistentNode's
     // associated Persistent<> -- it in turn freeing the PersistentNode. And both
diff --git a/third_party/WebKit/Source/platform/heap/ThreadState.cpp b/third_party/WebKit/Source/platform/heap/ThreadState.cpp
index 8d0320d..63e607a7 100644
--- a/third_party/WebKit/Source/platform/heap/ThreadState.cpp
+++ b/third_party/WebKit/Source/platform/heap/ThreadState.cpp
@@ -49,8 +49,11 @@
 #include "public/platform/WebTraceLocation.h"
 #include "wtf/CurrentTime.h"
 #include "wtf/DataLog.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/ThreadingPrimitives.h"
 #include "wtf/allocator/Partitions.h"
+#include <memory>
+#include <v8.h>
 
 #if OS(WIN)
 #include <stddef.h>
@@ -66,8 +69,6 @@
 #include <pthread_np.h>
 #endif
 
-#include <v8.h>
-
 namespace blink {
 
 WTF::ThreadSpecific<ThreadState*>* ThreadState::s_threadSpecific = nullptr;
@@ -77,7 +78,7 @@
 
 ThreadState::ThreadState(bool perThreadHeapEnabled)
     : m_thread(currentThread())
-    , m_persistentRegion(adoptPtr(new PersistentRegion()))
+    , m_persistentRegion(wrapUnique(new PersistentRegion()))
 #if OS(WIN) && COMPILER(MSVC)
     , m_threadStackSize(0)
 #endif
@@ -132,7 +133,7 @@
         m_arenas[arenaIndex] = new NormalPageArena(this, arenaIndex);
     m_arenas[BlinkGC::LargeObjectArenaIndex] = new LargeObjectArena(this, BlinkGC::LargeObjectArenaIndex);
 
-    m_likelyToBePromptlyFreed = adoptArrayPtr(new int[likelyToBePromptlyFreedArraySize]);
+    m_likelyToBePromptlyFreed = wrapArrayUnique(new int[likelyToBePromptlyFreedArraySize]);
     clearArenaAges();
 
     // There is little use of weak references and collections off the main thread;
@@ -447,7 +448,7 @@
     // Due to the complexity, we just forbid allocations.
     NoAllocationScope noAllocationScope(this);
 
-    OwnPtr<Visitor> visitor = Visitor::create(this, BlinkGC::ThreadLocalWeakProcessing);
+    std::unique_ptr<Visitor> visitor = Visitor::create(this, BlinkGC::ThreadLocalWeakProcessing);
 
     // Perform thread-specific weak processing.
     while (popAndInvokeThreadLocalWeakCallback(visitor.get())) { }
@@ -1320,7 +1321,7 @@
     }
 }
 
-void ThreadState::addInterruptor(PassOwnPtr<BlinkGCInterruptor> interruptor)
+void ThreadState::addInterruptor(std::unique_ptr<BlinkGCInterruptor> interruptor)
 {
     ASSERT(checkThread());
     SafePointScope scope(BlinkGC::HeapPointersOnStack);
diff --git a/third_party/WebKit/Source/platform/heap/ThreadState.h b/third_party/WebKit/Source/platform/heap/ThreadState.h
index 234e07f..16825dc 100644
--- a/third_party/WebKit/Source/platform/heap/ThreadState.h
+++ b/third_party/WebKit/Source/platform/heap/ThreadState.h
@@ -45,6 +45,7 @@
 #include "wtf/ThreadSpecific.h"
 #include "wtf/Threading.h"
 #include "wtf/ThreadingPrimitives.h"
+#include <memory>
 
 namespace v8 {
 class Isolate;
@@ -78,12 +79,12 @@
 // Since a pre-finalizer adds pressure on GC performance, you should use it
 // only if necessary.
 //
-// A pre-finalizer is similar to the HeapHashMap<WeakMember<Foo>, OwnPtr<Disposer>>
+// A pre-finalizer is similar to the HeapHashMap<WeakMember<Foo>, std::unique_ptr<Disposer>>
 // idiom.  The difference between this and the idiom is that pre-finalizer
 // function is called whenever an object is destructed with this feature.  The
-// HeapHashMap<WeakMember<Foo>, OwnPtr<Disposer>> idiom requires an assumption
+// HeapHashMap<WeakMember<Foo>, std::unique_ptr<Disposer>> idiom requires an assumption
 // that the HeapHashMap outlives objects pointed by WeakMembers.
-// FIXME: Replace all of the HeapHashMap<WeakMember<Foo>, OwnPtr<Disposer>>
+// FIXME: Replace all of the HeapHashMap<WeakMember<Foo>, std::unique_ptr<Disposer>>
 // idiom usages with the pre-finalizer if the replacement won't cause
 // performance regressions.
 //
@@ -334,7 +335,7 @@
     void leaveSafePoint(SafePointAwareMutexLocker* = nullptr);
     bool isAtSafePoint() const { return m_atSafePoint; }
 
-    void addInterruptor(PassOwnPtr<BlinkGCInterruptor>);
+    void addInterruptor(std::unique_ptr<BlinkGCInterruptor>);
 
     void recordStackEnd(intptr_t* endOfStack)
     {
@@ -600,7 +601,7 @@
     void reportMemoryToV8();
 
     // Should only be called under protection of threadAttachMutex().
-    const Vector<OwnPtr<BlinkGCInterruptor>>& interruptors() const { return m_interruptors; }
+    const Vector<std::unique_ptr<BlinkGCInterruptor>>& interruptors() const { return m_interruptors; }
 
     friend class SafePointAwareMutexLocker;
     friend class SafePointBarrier;
@@ -621,7 +622,7 @@
 
     ThreadHeap* m_heap;
     ThreadIdentifier m_thread;
-    OwnPtr<PersistentRegion> m_persistentRegion;
+    std::unique_ptr<PersistentRegion> m_persistentRegion;
     BlinkGC::StackState m_stackState;
 #if OS(WIN) && COMPILER(MSVC)
     size_t m_threadStackSize;
@@ -632,7 +633,7 @@
     void* m_safePointScopeMarker;
     Vector<Address> m_safePointStackCopy;
     bool m_atSafePoint;
-    Vector<OwnPtr<BlinkGCInterruptor>> m_interruptors;
+    Vector<std::unique_ptr<BlinkGCInterruptor>> m_interruptors;
     bool m_sweepForbidden;
     size_t m_noAllocationCount;
     size_t m_gcForbiddenCount;
@@ -682,7 +683,7 @@
     // since there will be less than 2^8 types of objects in common cases.
     static const int likelyToBePromptlyFreedArraySize = (1 << 8);
     static const int likelyToBePromptlyFreedArrayMask = likelyToBePromptlyFreedArraySize - 1;
-    OwnPtr<int[]> m_likelyToBePromptlyFreed;
+    std::unique_ptr<int[]> m_likelyToBePromptlyFreed;
 
     // Stats for heap memory of this thread.
     size_t m_allocatedObjectSize;
diff --git a/third_party/WebKit/Source/platform/heap/Visitor.cpp b/third_party/WebKit/Source/platform/heap/Visitor.cpp
index 3649860..e69f336b 100644
--- a/third_party/WebKit/Source/platform/heap/Visitor.cpp
+++ b/third_party/WebKit/Source/platform/heap/Visitor.cpp
@@ -7,21 +7,23 @@
 #include "platform/heap/BlinkGC.h"
 #include "platform/heap/MarkingVisitor.h"
 #include "platform/heap/ThreadState.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
-PassOwnPtr<Visitor> Visitor::create(ThreadState* state, BlinkGC::GCType gcType)
+std::unique_ptr<Visitor> Visitor::create(ThreadState* state, BlinkGC::GCType gcType)
 {
     switch (gcType) {
     case BlinkGC::GCWithSweep:
     case BlinkGC::GCWithoutSweep:
-        return adoptPtr(new MarkingVisitor<Visitor::GlobalMarking>(state));
+        return wrapUnique(new MarkingVisitor<Visitor::GlobalMarking>(state));
     case BlinkGC::TakeSnapshot:
-        return adoptPtr(new MarkingVisitor<Visitor::SnapshotMarking>(state));
+        return wrapUnique(new MarkingVisitor<Visitor::SnapshotMarking>(state));
     case BlinkGC::ThreadTerminationGC:
-        return adoptPtr(new MarkingVisitor<Visitor::ThreadLocalMarking>(state));
+        return wrapUnique(new MarkingVisitor<Visitor::ThreadLocalMarking>(state));
     case BlinkGC::ThreadLocalWeakProcessing:
-        return adoptPtr(new MarkingVisitor<Visitor::WeakProcessing>(state));
+        return wrapUnique(new MarkingVisitor<Visitor::WeakProcessing>(state));
     default:
         ASSERT_NOT_REACHED();
     }
diff --git a/third_party/WebKit/Source/platform/heap/Visitor.h b/third_party/WebKit/Source/platform/heap/Visitor.h
index 9ddefb9..97a660d3b 100644
--- a/third_party/WebKit/Source/platform/heap/Visitor.h
+++ b/third_party/WebKit/Source/platform/heap/Visitor.h
@@ -38,6 +38,7 @@
 #include "wtf/Forward.h"
 #include "wtf/HashTraits.h"
 #include "wtf/TypeTraits.h"
+#include <memory>
 
 namespace blink {
 
@@ -261,7 +262,7 @@
         WeakProcessing,
     };
 
-    static PassOwnPtr<Visitor> create(ThreadState*, BlinkGC::GCType);
+    static std::unique_ptr<Visitor> create(ThreadState*, BlinkGC::GCType);
 
     virtual ~Visitor();
 
diff --git a/third_party/WebKit/Source/platform/image-decoders/ImageDecoder.cpp b/third_party/WebKit/Source/platform/image-decoders/ImageDecoder.cpp
index 6a887969..8a09dec8 100644
--- a/third_party/WebKit/Source/platform/image-decoders/ImageDecoder.cpp
+++ b/third_party/WebKit/Source/platform/image-decoders/ImageDecoder.cpp
@@ -27,7 +27,8 @@
 #include "platform/image-decoders/jpeg/JPEGImageDecoder.h"
 #include "platform/image-decoders/png/PNGImageDecoder.h"
 #include "platform/image-decoders/webp/WEBPImageDecoder.h"
-#include "wtf/PassOwnPtr.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
@@ -79,7 +80,7 @@
     return !memcmp(contents, "BM", 2);
 }
 
-PassOwnPtr<ImageDecoder> ImageDecoder::create(const char* contents, size_t length, AlphaOption alphaOption, GammaAndColorProfileOption colorOptions)
+std::unique_ptr<ImageDecoder> ImageDecoder::create(const char* contents, size_t length, AlphaOption alphaOption, GammaAndColorProfileOption colorOptions)
 {
     const size_t longestSignatureLength = sizeof("RIFF????WEBPVP") - 1;
     ASSERT(longestSignatureLength == 14);
@@ -90,34 +91,34 @@
     size_t maxDecodedBytes = Platform::current() ? Platform::current()->maxDecodedImageBytes() : noDecodedImageByteLimit;
 
     if (matchesJPEGSignature(contents))
-        return adoptPtr(new JPEGImageDecoder(alphaOption, colorOptions, maxDecodedBytes));
+        return wrapUnique(new JPEGImageDecoder(alphaOption, colorOptions, maxDecodedBytes));
 
     if (matchesPNGSignature(contents))
-        return adoptPtr(new PNGImageDecoder(alphaOption, colorOptions, maxDecodedBytes));
+        return wrapUnique(new PNGImageDecoder(alphaOption, colorOptions, maxDecodedBytes));
 
     if (matchesGIFSignature(contents))
-        return adoptPtr(new GIFImageDecoder(alphaOption, colorOptions, maxDecodedBytes));
+        return wrapUnique(new GIFImageDecoder(alphaOption, colorOptions, maxDecodedBytes));
 
     if (matchesWebPSignature(contents))
-        return adoptPtr(new WEBPImageDecoder(alphaOption, colorOptions, maxDecodedBytes));
+        return wrapUnique(new WEBPImageDecoder(alphaOption, colorOptions, maxDecodedBytes));
 
     if (matchesICOSignature(contents) || matchesCURSignature(contents))
-        return adoptPtr(new ICOImageDecoder(alphaOption, colorOptions, maxDecodedBytes));
+        return wrapUnique(new ICOImageDecoder(alphaOption, colorOptions, maxDecodedBytes));
 
     if (matchesBMPSignature(contents))
-        return adoptPtr(new BMPImageDecoder(alphaOption, colorOptions, maxDecodedBytes));
+        return wrapUnique(new BMPImageDecoder(alphaOption, colorOptions, maxDecodedBytes));
 
     return nullptr;
 }
 
-PassOwnPtr<ImageDecoder> ImageDecoder::create(const SharedBuffer& data, AlphaOption alphaOption, GammaAndColorProfileOption colorOptions)
+std::unique_ptr<ImageDecoder> ImageDecoder::create(const SharedBuffer& data, AlphaOption alphaOption, GammaAndColorProfileOption colorOptions)
 {
     const char* contents;
     const size_t length = data.getSomeData<size_t>(contents);
     return create(contents, length, alphaOption, colorOptions);
 }
 
-PassOwnPtr<ImageDecoder> ImageDecoder::create(const SegmentReader& data, AlphaOption alphaOption, GammaAndColorProfileOption colorOptions)
+std::unique_ptr<ImageDecoder> ImageDecoder::create(const SegmentReader& data, AlphaOption alphaOption, GammaAndColorProfileOption colorOptions)
 {
     const char* contents;
     const size_t length = data.getSomeData(contents, 0);
diff --git a/third_party/WebKit/Source/platform/image-decoders/ImageDecoder.h b/third_party/WebKit/Source/platform/image-decoders/ImageDecoder.h
index 70198f1f..c444907 100644
--- a/third_party/WebKit/Source/platform/image-decoders/ImageDecoder.h
+++ b/third_party/WebKit/Source/platform/image-decoders/ImageDecoder.h
@@ -36,7 +36,6 @@
 #include "platform/image-decoders/SegmentReader.h"
 #include "public/platform/Platform.h"
 #include "wtf/Assertions.h"
-#include "wtf/PassOwnPtr.h"
 #include "wtf/RefPtr.h"
 #include "wtf/Threading.h"
 #include "wtf/Vector.h"
@@ -109,9 +108,9 @@
     // we can't sniff a supported type from the provided data (possibly
     // because there isn't enough data yet).
     // Sets m_maxDecodedBytes to Platform::maxImageDecodedBytes().
-    static PassOwnPtr<ImageDecoder> create(const char* data, size_t length, AlphaOption, GammaAndColorProfileOption);
-    static PassOwnPtr<ImageDecoder> create(const SharedBuffer&, AlphaOption, GammaAndColorProfileOption);
-    static PassOwnPtr<ImageDecoder> create(const SegmentReader&, AlphaOption, GammaAndColorProfileOption);
+    static std::unique_ptr<ImageDecoder> create(const char* data, size_t length, AlphaOption, GammaAndColorProfileOption);
+    static std::unique_ptr<ImageDecoder> create(const SharedBuffer&, AlphaOption, GammaAndColorProfileOption);
+    static std::unique_ptr<ImageDecoder> create(const SegmentReader&, AlphaOption, GammaAndColorProfileOption);
 
     virtual String filenameExtension() const = 0;
 
@@ -264,7 +263,7 @@
 
     virtual bool canDecodeToYUV() { return false; }
     virtual bool decodeToYUV() { return false; }
-    virtual void setImagePlanes(PassOwnPtr<ImagePlanes>) { }
+    virtual void setImagePlanes(std::unique_ptr<ImagePlanes>) { }
 
 protected:
     // Calculates the most recent frame whose image data may be needed in
diff --git a/third_party/WebKit/Source/platform/image-decoders/ImageDecoderTest.cpp b/third_party/WebKit/Source/platform/image-decoders/ImageDecoderTest.cpp
index c21e161..e66fc61 100644
--- a/third_party/WebKit/Source/platform/image-decoders/ImageDecoderTest.cpp
+++ b/third_party/WebKit/Source/platform/image-decoders/ImageDecoderTest.cpp
@@ -32,9 +32,9 @@
 
 #include "platform/image-decoders/ImageFrame.h"
 #include "testing/gtest/include/gtest/gtest.h"
-#include "wtf/OwnPtr.h"
-#include "wtf/PassOwnPtr.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/Vector.h"
+#include <memory>
 
 namespace blink {
 
@@ -73,7 +73,7 @@
 
 TEST(ImageDecoderTest, sizeCalculationMayOverflow)
 {
-    OwnPtr<TestImageDecoder> decoder(adoptPtr(new TestImageDecoder()));
+    std::unique_ptr<TestImageDecoder> decoder(wrapUnique(new TestImageDecoder()));
     EXPECT_FALSE(decoder->setSize(1 << 29, 1));
     EXPECT_FALSE(decoder->setSize(1, 1 << 29));
     EXPECT_FALSE(decoder->setSize(1 << 15, 1 << 15));
@@ -84,7 +84,7 @@
 
 TEST(ImageDecoderTest, requiredPreviousFrameIndex)
 {
-    OwnPtr<TestImageDecoder> decoder(adoptPtr(new TestImageDecoder()));
+    std::unique_ptr<TestImageDecoder> decoder(wrapUnique(new TestImageDecoder()));
     decoder->initFrames(6);
     Vector<ImageFrame, 1>& frameBuffers = decoder->frameBufferCache();
 
@@ -109,7 +109,7 @@
 
 TEST(ImageDecoderTest, requiredPreviousFrameIndexDisposeOverwriteBgcolor)
 {
-    OwnPtr<TestImageDecoder> decoder(adoptPtr(new TestImageDecoder()));
+    std::unique_ptr<TestImageDecoder> decoder(wrapUnique(new TestImageDecoder()));
     decoder->initFrames(3);
     Vector<ImageFrame, 1>& frameBuffers = decoder->frameBufferCache();
 
@@ -126,7 +126,7 @@
 
 TEST(ImageDecoderTest, requiredPreviousFrameIndexForFrame1)
 {
-    OwnPtr<TestImageDecoder> decoder(adoptPtr(new TestImageDecoder()));
+    std::unique_ptr<TestImageDecoder> decoder(wrapUnique(new TestImageDecoder()));
     decoder->initFrames(2);
     Vector<ImageFrame, 1>& frameBuffers = decoder->frameBufferCache();
 
@@ -155,7 +155,7 @@
 
 TEST(ImageDecoderTest, requiredPreviousFrameIndexBlendAtopBgcolor)
 {
-    OwnPtr<TestImageDecoder> decoder(adoptPtr(new TestImageDecoder()));
+    std::unique_ptr<TestImageDecoder> decoder(wrapUnique(new TestImageDecoder()));
     decoder->initFrames(3);
     Vector<ImageFrame, 1>& frameBuffers = decoder->frameBufferCache();
 
@@ -180,7 +180,7 @@
 
 TEST(ImageDecoderTest, requiredPreviousFrameIndexKnownOpaque)
 {
-    OwnPtr<TestImageDecoder> decoder(adoptPtr(new TestImageDecoder()));
+    std::unique_ptr<TestImageDecoder> decoder(wrapUnique(new TestImageDecoder()));
     decoder->initFrames(3);
     Vector<ImageFrame, 1>& frameBuffers = decoder->frameBufferCache();
 
@@ -204,7 +204,7 @@
 
 TEST(ImageDecoderTest, clearCacheExceptFrameDoNothing)
 {
-    OwnPtr<TestImageDecoder> decoder(adoptPtr(new TestImageDecoder()));
+    std::unique_ptr<TestImageDecoder> decoder(wrapUnique(new TestImageDecoder()));
     decoder->clearCacheExceptFrame(0);
 
     // This should not crash.
@@ -215,7 +215,7 @@
 TEST(ImageDecoderTest, clearCacheExceptFrameAll)
 {
     const size_t numFrames = 10;
-    OwnPtr<TestImageDecoder> decoder(adoptPtr(new TestImageDecoder()));
+    std::unique_ptr<TestImageDecoder> decoder(wrapUnique(new TestImageDecoder()));
     decoder->initFrames(numFrames);
     Vector<ImageFrame, 1>& frameBuffers = decoder->frameBufferCache();
     for (size_t i = 0; i < numFrames; ++i)
@@ -232,7 +232,7 @@
 TEST(ImageDecoderTest, clearCacheExceptFramePreverveClearExceptFrame)
 {
     const size_t numFrames = 10;
-    OwnPtr<TestImageDecoder> decoder(adoptPtr(new TestImageDecoder()));
+    std::unique_ptr<TestImageDecoder> decoder(wrapUnique(new TestImageDecoder()));
     decoder->initFrames(numFrames);
     Vector<ImageFrame, 1>& frameBuffers = decoder->frameBufferCache();
     for (size_t i = 0; i < numFrames; ++i)
diff --git a/third_party/WebKit/Source/platform/image-decoders/ImageDecoderTestHelpers.cpp b/third_party/WebKit/Source/platform/image-decoders/ImageDecoderTestHelpers.cpp
index 574ea355..6e11a895 100644
--- a/third_party/WebKit/Source/platform/image-decoders/ImageDecoderTestHelpers.cpp
+++ b/third_party/WebKit/Source/platform/image-decoders/ImageDecoderTestHelpers.cpp
@@ -9,8 +9,8 @@
 #include "platform/image-decoders/ImageFrame.h"
 #include "platform/testing/UnitTestHelpers.h"
 #include "testing/gtest/include/gtest/gtest.h"
-#include "wtf/OwnPtr.h"
 #include "wtf/StringHasher.h"
+#include <memory>
 
 namespace blink {
 
@@ -39,7 +39,7 @@
 
 static unsigned createDecodingBaseline(DecoderCreator createDecoder, SharedBuffer* data)
 {
-    OwnPtr<ImageDecoder> decoder = createDecoder();
+    std::unique_ptr<ImageDecoder> decoder = createDecoder();
     decoder->setData(data, true);
     ImageFrame* frame = decoder->frameBufferAtIndex(0);
     return hashBitmap(frame->bitmap());
@@ -47,7 +47,7 @@
 
 void createDecodingBaseline(DecoderCreator createDecoder, SharedBuffer* data, Vector<unsigned>* baselineHashes)
 {
-    OwnPtr<ImageDecoder> decoder = createDecoder();
+    std::unique_ptr<ImageDecoder> decoder = createDecoder();
     decoder->setData(data, true);
     size_t frameCount = decoder->frameCount();
     for (size_t i = 0; i < frameCount; ++i) {
@@ -65,7 +65,7 @@
     Vector<unsigned> baselineHashes;
     createDecodingBaseline(createDecoder, data.get(), &baselineHashes);
 
-    OwnPtr<ImageDecoder> decoder = createDecoder();
+    std::unique_ptr<ImageDecoder> decoder = createDecoder();
 
     size_t frameCount = 0;
     size_t framesDecoded = 0;
@@ -129,7 +129,7 @@
     RefPtr<SharedBuffer> segmentedData = SharedBuffer::create();
     segmentedData->append(data->data(), data->size());
 
-    OwnPtr<ImageDecoder> decoder = createDecoder();
+    std::unique_ptr<ImageDecoder> decoder = createDecoder();
     decoder->setData(segmentedData.get(), true);
 
     ASSERT_TRUE(decoder->isSizeAvailable());
diff --git a/third_party/WebKit/Source/platform/image-decoders/ImageDecoderTestHelpers.h b/third_party/WebKit/Source/platform/image-decoders/ImageDecoderTestHelpers.h
index 88683855b..837b5306 100644
--- a/third_party/WebKit/Source/platform/image-decoders/ImageDecoderTestHelpers.h
+++ b/third_party/WebKit/Source/platform/image-decoders/ImageDecoderTestHelpers.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.
 
-#include "wtf/PassOwnPtr.h"
 #include "wtf/Vector.h"
+#include <memory>
 
 class SkBitmap;
 
@@ -11,7 +11,7 @@
 class ImageDecoder;
 class SharedBuffer;
 
-using DecoderCreator = PassOwnPtr<ImageDecoder>(*)();
+using DecoderCreator = std::unique_ptr<ImageDecoder>(*)();
 PassRefPtr<SharedBuffer> readFile(const char* fileName);
 PassRefPtr<SharedBuffer> readFile(const char* dir, const char* fileName);
 unsigned hashBitmap(const SkBitmap&);
diff --git a/third_party/WebKit/Source/platform/image-decoders/bmp/BMPImageDecoder.cpp b/third_party/WebKit/Source/platform/image-decoders/bmp/BMPImageDecoder.cpp
index 87a80281..0cf541a 100644
--- a/third_party/WebKit/Source/platform/image-decoders/bmp/BMPImageDecoder.cpp
+++ b/third_party/WebKit/Source/platform/image-decoders/bmp/BMPImageDecoder.cpp
@@ -31,7 +31,7 @@
 #include "platform/image-decoders/bmp/BMPImageDecoder.h"
 
 #include "platform/image-decoders/FastSharedBufferReader.h"
-#include "wtf/PassOwnPtr.h"
+#include "wtf/PtrUtil.h"
 
 namespace blink {
 
@@ -80,7 +80,7 @@
         return false;
 
     if (!m_reader) {
-        m_reader = adoptPtr(new BMPImageReader(this, m_decodedOffset, imgDataOffset, false));
+        m_reader = wrapUnique(new BMPImageReader(this, m_decodedOffset, imgDataOffset, false));
         m_reader->setData(m_data.get());
     }
 
diff --git a/third_party/WebKit/Source/platform/image-decoders/bmp/BMPImageDecoder.h b/third_party/WebKit/Source/platform/image-decoders/bmp/BMPImageDecoder.h
index e4a6bd1..a912246d 100644
--- a/third_party/WebKit/Source/platform/image-decoders/bmp/BMPImageDecoder.h
+++ b/third_party/WebKit/Source/platform/image-decoders/bmp/BMPImageDecoder.h
@@ -32,7 +32,7 @@
 #define BMPImageDecoder_h
 
 #include "platform/image-decoders/bmp/BMPImageReader.h"
-#include "wtf/OwnPtr.h"
+#include <memory>
 
 namespace blink {
 
@@ -74,7 +74,7 @@
     size_t m_decodedOffset;
 
     // The reader used to do most of the BMP decoding.
-    OwnPtr<BMPImageReader> m_reader;
+    std::unique_ptr<BMPImageReader> m_reader;
 };
 
 } // namespace blink
diff --git a/third_party/WebKit/Source/platform/image-decoders/bmp/BMPImageDecoderTest.cpp b/third_party/WebKit/Source/platform/image-decoders/bmp/BMPImageDecoderTest.cpp
index 1e2bc10..14b399a 100644
--- a/third_party/WebKit/Source/platform/image-decoders/bmp/BMPImageDecoderTest.cpp
+++ b/third_party/WebKit/Source/platform/image-decoders/bmp/BMPImageDecoderTest.cpp
@@ -7,14 +7,16 @@
 #include "platform/SharedBuffer.h"
 #include "platform/image-decoders/ImageDecoderTestHelpers.h"
 #include "testing/gtest/include/gtest/gtest.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
 namespace {
 
-PassOwnPtr<ImageDecoder> createDecoder()
+std::unique_ptr<ImageDecoder> createDecoder()
 {
-    return adoptPtr(new BMPImageDecoder(ImageDecoder::AlphaNotPremultiplied, ImageDecoder::GammaAndColorProfileApplied, ImageDecoder::noDecodedImageByteLimit));
+    return wrapUnique(new BMPImageDecoder(ImageDecoder::AlphaNotPremultiplied, ImageDecoder::GammaAndColorProfileApplied, ImageDecoder::noDecodedImageByteLimit));
 }
 
 } // anonymous namespace
@@ -25,7 +27,7 @@
     RefPtr<SharedBuffer> data = readFile(bmpFile);
     ASSERT_TRUE(data.get());
 
-    OwnPtr<ImageDecoder> decoder = createDecoder();
+    std::unique_ptr<ImageDecoder> decoder = createDecoder();
     decoder->setData(data.get(), true);
     EXPECT_TRUE(decoder->isSizeAvailable());
     EXPECT_EQ(256, decoder->size().width());
@@ -38,7 +40,7 @@
     RefPtr<SharedBuffer> data = readFile(bmpFile);
     ASSERT_TRUE(data.get());
 
-    OwnPtr<ImageDecoder> decoder = createDecoder();
+    std::unique_ptr<ImageDecoder> decoder = createDecoder();
     decoder->setData(data.get(), true);
 
     ImageFrame* frame = decoder->frameBufferAtIndex(0);
@@ -56,7 +58,7 @@
     RefPtr<SharedBuffer> data = readFile(bmpFile);
     ASSERT_TRUE(data.get());
 
-    OwnPtr<ImageDecoder> decoder = createDecoder();
+    std::unique_ptr<ImageDecoder> decoder = createDecoder();
     decoder->setData(data.get(), true);
 
     ImageFrame* frame = decoder->frameBufferAtIndex(0);
diff --git a/third_party/WebKit/Source/platform/image-decoders/gif/GIFImageDecoder.cpp b/third_party/WebKit/Source/platform/image-decoders/gif/GIFImageDecoder.cpp
index 2cae67e0a..68e9334 100644
--- a/third_party/WebKit/Source/platform/image-decoders/gif/GIFImageDecoder.cpp
+++ b/third_party/WebKit/Source/platform/image-decoders/gif/GIFImageDecoder.cpp
@@ -25,10 +25,10 @@
 
 #include "platform/image-decoders/gif/GIFImageDecoder.h"
 
-#include <limits>
 #include "platform/image-decoders/gif/GIFImageReader.h"
 #include "wtf/NotFound.h"
-#include "wtf/PassOwnPtr.h"
+#include "wtf/PtrUtil.h"
+#include <limits>
 
 namespace blink {
 
@@ -331,7 +331,7 @@
         return;
 
     if (!m_reader) {
-        m_reader = adoptPtr(new GIFImageReader(this));
+        m_reader = wrapUnique(new GIFImageReader(this));
         m_reader->setData(m_data);
     }
 
diff --git a/third_party/WebKit/Source/platform/image-decoders/gif/GIFImageDecoder.h b/third_party/WebKit/Source/platform/image-decoders/gif/GIFImageDecoder.h
index 98941e68..a2c6ce1 100644
--- a/third_party/WebKit/Source/platform/image-decoders/gif/GIFImageDecoder.h
+++ b/third_party/WebKit/Source/platform/image-decoders/gif/GIFImageDecoder.h
@@ -28,7 +28,7 @@
 
 #include "platform/image-decoders/ImageDecoder.h"
 #include "wtf/Noncopyable.h"
-#include "wtf/OwnPtr.h"
+#include <memory>
 
 class GIFImageReader;
 
@@ -86,7 +86,7 @@
 
     bool m_currentBufferSawAlpha;
     mutable int m_repetitionCount;
-    OwnPtr<GIFImageReader> m_reader;
+    std::unique_ptr<GIFImageReader> m_reader;
 };
 
 } // namespace blink
diff --git a/third_party/WebKit/Source/platform/image-decoders/gif/GIFImageDecoderTest.cpp b/third_party/WebKit/Source/platform/image-decoders/gif/GIFImageDecoderTest.cpp
index 756eb33..25f7ad5 100644
--- a/third_party/WebKit/Source/platform/image-decoders/gif/GIFImageDecoderTest.cpp
+++ b/third_party/WebKit/Source/platform/image-decoders/gif/GIFImageDecoderTest.cpp
@@ -35,9 +35,9 @@
 #include "public/platform/WebData.h"
 #include "public/platform/WebSize.h"
 #include "testing/gtest/include/gtest/gtest.h"
-#include "wtf/OwnPtr.h"
-#include "wtf/PassOwnPtr.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/Vector.h"
+#include <memory>
 
 namespace blink {
 
@@ -46,9 +46,9 @@
 const char decodersTestingDir[] = "Source/platform/image-decoders/testing";
 const char layoutTestResourcesDir[] = "LayoutTests/fast/images/resources";
 
-PassOwnPtr<ImageDecoder> createDecoder()
+std::unique_ptr<ImageDecoder> createDecoder()
 {
-    return adoptPtr(new GIFImageDecoder(ImageDecoder::AlphaNotPremultiplied, ImageDecoder::GammaAndColorProfileApplied, ImageDecoder::noDecodedImageByteLimit));
+    return wrapUnique(new GIFImageDecoder(ImageDecoder::AlphaNotPremultiplied, ImageDecoder::GammaAndColorProfileApplied, ImageDecoder::noDecodedImageByteLimit));
 }
 
 void testRandomFrameDecode(const char* dir, const char* gifFile)
@@ -62,7 +62,7 @@
     size_t frameCount = baselineHashes.size();
 
     // Random decoding should get the same results as sequential decoding.
-    OwnPtr<ImageDecoder> decoder = createDecoder();
+    std::unique_ptr<ImageDecoder> decoder = createDecoder();
     decoder->setData(fullData.get(), true);
     const size_t skippingStep = 5;
     for (size_t i = 0; i < skippingStep; ++i) {
@@ -93,7 +93,7 @@
     createDecodingBaseline(&createDecoder, data.get(), &baselineHashes);
     size_t frameCount = baselineHashes.size();
 
-    OwnPtr<ImageDecoder> decoder = createDecoder();
+    std::unique_ptr<ImageDecoder> decoder = createDecoder();
     decoder->setData(data.get(), true);
     for (size_t clearExceptFrame = 0; clearExceptFrame < frameCount; ++clearExceptFrame) {
         decoder->clearCacheExceptFrame(clearExceptFrame);
@@ -112,7 +112,7 @@
 
 TEST(GIFImageDecoderTest, decodeTwoFrames)
 {
-    OwnPtr<ImageDecoder> decoder = createDecoder();
+    std::unique_ptr<ImageDecoder> decoder = createDecoder();
 
     RefPtr<SharedBuffer> data = readFile(layoutTestResourcesDir, "animated.gif");
     ASSERT_TRUE(data.get());
@@ -138,7 +138,7 @@
 
 TEST(GIFImageDecoderTest, parseAndDecode)
 {
-    OwnPtr<ImageDecoder> decoder = createDecoder();
+    std::unique_ptr<ImageDecoder> decoder = createDecoder();
 
     RefPtr<SharedBuffer> data = readFile(layoutTestResourcesDir, "animated.gif");
     ASSERT_TRUE(data.get());
@@ -162,7 +162,7 @@
 
 TEST(GIFImageDecoderTest, parseByteByByte)
 {
-    OwnPtr<ImageDecoder> decoder = createDecoder();
+    std::unique_ptr<ImageDecoder> decoder = createDecoder();
 
     RefPtr<SharedBuffer> data = readFile(layoutTestResourcesDir, "animated.gif");
     ASSERT_TRUE(data.get());
@@ -187,7 +187,7 @@
 
 TEST(GIFImageDecoderTest, parseAndDecodeByteByByte)
 {
-    OwnPtr<ImageDecoder> decoder = createDecoder();
+    std::unique_ptr<ImageDecoder> decoder = createDecoder();
 
     RefPtr<SharedBuffer> data = readFile(layoutTestResourcesDir, "animated-gif-with-offsets.gif");
     ASSERT_TRUE(data.get());
@@ -215,7 +215,7 @@
 
 TEST(GIFImageDecoderTest, brokenSecondFrame)
 {
-    OwnPtr<ImageDecoder> decoder = createDecoder();
+    std::unique_ptr<ImageDecoder> decoder = createDecoder();
 
     RefPtr<SharedBuffer> data = readFile(decodersTestingDir, "broken.gif");
     ASSERT_TRUE(data.get());
@@ -233,7 +233,7 @@
     ASSERT_TRUE(fullData.get());
     const size_t fullLength = fullData->size();
 
-    OwnPtr<ImageDecoder> decoder;
+    std::unique_ptr<ImageDecoder> decoder;
     ImageFrame* frame;
 
     Vector<unsigned> truncatedHashes;
@@ -280,7 +280,7 @@
 
 TEST(GIFImageDecoderTest, allDataReceivedTruncation)
 {
-    OwnPtr<ImageDecoder> decoder = createDecoder();
+    std::unique_ptr<ImageDecoder> decoder = createDecoder();
 
     RefPtr<SharedBuffer> data = readFile(layoutTestResourcesDir, "animated.gif");
     ASSERT_TRUE(data.get());
@@ -300,7 +300,7 @@
 
 TEST(GIFImageDecoderTest, frameIsComplete)
 {
-    OwnPtr<ImageDecoder> decoder = createDecoder();
+    std::unique_ptr<ImageDecoder> decoder = createDecoder();
 
     RefPtr<SharedBuffer> data = readFile(layoutTestResourcesDir, "animated.gif");
     ASSERT_TRUE(data.get());
@@ -315,7 +315,7 @@
 
 TEST(GIFImageDecoderTest, frameIsCompleteLoading)
 {
-    OwnPtr<ImageDecoder> decoder = createDecoder();
+    std::unique_ptr<ImageDecoder> decoder = createDecoder();
 
     RefPtr<SharedBuffer> data = readFile(layoutTestResourcesDir, "animated.gif");
     ASSERT_TRUE(data.get());
@@ -342,13 +342,13 @@
     ASSERT_TRUE(referenceData.get());
     ASSERT_TRUE(testData.get());
 
-    OwnPtr<ImageDecoder> referenceDecoder = createDecoder();
+    std::unique_ptr<ImageDecoder> referenceDecoder = createDecoder();
     referenceDecoder->setData(referenceData.get(), true);
     EXPECT_EQ(1u, referenceDecoder->frameCount());
     ImageFrame* referenceFrame = referenceDecoder->frameBufferAtIndex(0);
     ASSERT(referenceFrame);
 
-    OwnPtr<ImageDecoder> testDecoder = createDecoder();
+    std::unique_ptr<ImageDecoder> testDecoder = createDecoder();
     testDecoder->setData(testData.get(), true);
     EXPECT_EQ(1u, testDecoder->frameCount());
     ImageFrame* testFrame = testDecoder->frameBufferAtIndex(0);
@@ -359,7 +359,7 @@
 
 TEST(GIFImageDecoderTest, updateRequiredPreviousFrameAfterFirstDecode)
 {
-    OwnPtr<ImageDecoder> decoder = createDecoder();
+    std::unique_ptr<ImageDecoder> decoder = createDecoder();
 
     RefPtr<SharedBuffer> fullData = readFile(layoutTestResourcesDir, "animated-10color.gif");
     ASSERT_TRUE(fullData.get());
@@ -409,7 +409,7 @@
     createDecodingBaseline(&createDecoder, fullData.get(), &baselineHashes);
     size_t frameCount = baselineHashes.size();
 
-    OwnPtr<ImageDecoder> decoder = createDecoder();
+    std::unique_ptr<ImageDecoder> decoder = createDecoder();
 
     // Let frame 0 be partially decoded.
     size_t partialSize = 1;
@@ -439,7 +439,7 @@
     RefPtr<SharedBuffer> testData = readFile(decodersTestingDir, "bad-initial-code.gif");
     ASSERT_TRUE(testData.get());
 
-    OwnPtr<ImageDecoder> testDecoder = createDecoder();
+    std::unique_ptr<ImageDecoder> testDecoder = createDecoder();
     testDecoder->setData(testData.get(), true);
     EXPECT_EQ(1u, testDecoder->frameCount());
     ASSERT_TRUE(testDecoder->frameBufferAtIndex(0));
@@ -452,7 +452,7 @@
     RefPtr<SharedBuffer> testData = readFile(decodersTestingDir, "bad-code.gif");
     ASSERT_TRUE(testData.get());
 
-    OwnPtr<ImageDecoder> testDecoder = createDecoder();
+    std::unique_ptr<ImageDecoder> testDecoder = createDecoder();
     testDecoder->setData(testData.get(), true);
     EXPECT_EQ(1u, testDecoder->frameCount());
     ASSERT_TRUE(testDecoder->frameBufferAtIndex(0));
@@ -461,7 +461,7 @@
 
 TEST(GIFImageDecoderTest, invalidDisposalMethod)
 {
-    OwnPtr<ImageDecoder> decoder = createDecoder();
+    std::unique_ptr<ImageDecoder> decoder = createDecoder();
 
     // The image has 2 frames, with disposal method 4 and 5, respectively.
     RefPtr<SharedBuffer> data = readFile(decodersTestingDir, "invalid-disposal-method.gif");
@@ -480,7 +480,7 @@
     RefPtr<SharedBuffer> fullData = readFile(decodersTestingDir, "first-frame-has-greater-size-than-screen-size.gif");
     ASSERT_TRUE(fullData.get());
 
-    OwnPtr<ImageDecoder> decoder;
+    std::unique_ptr<ImageDecoder> decoder;
     IntSize frameSize;
 
     // Compute hashes when the file is truncated.
@@ -502,7 +502,7 @@
 TEST(GIFImageDecoderTest, verifyRepetitionCount)
 {
     const int expectedRepetitionCount = 2;
-    OwnPtr<ImageDecoder> decoder = createDecoder();
+    std::unique_ptr<ImageDecoder> decoder = createDecoder();
     RefPtr<SharedBuffer> data = readFile(layoutTestResourcesDir, "full2loop.gif");
     ASSERT_TRUE(data.get());
     decoder->setData(data.get(), true);
@@ -528,11 +528,11 @@
     ASSERT_TRUE(kTruncateSize < fullData->size());
     RefPtr<SharedBuffer> partialData = SharedBuffer::create(fullData->data(), kTruncateSize);
 
-    OwnPtr<ImageDecoder> premulDecoder = adoptPtr(new GIFImageDecoder(
+    std::unique_ptr<ImageDecoder> premulDecoder = wrapUnique(new GIFImageDecoder(
         ImageDecoder::AlphaPremultiplied,
         ImageDecoder::GammaAndColorProfileApplied,
         ImageDecoder::noDecodedImageByteLimit));
-    OwnPtr<ImageDecoder> unpremulDecoder = adoptPtr(new GIFImageDecoder(
+    std::unique_ptr<ImageDecoder> unpremulDecoder = wrapUnique(new GIFImageDecoder(
         ImageDecoder::AlphaNotPremultiplied,
         ImageDecoder::GammaAndColorProfileApplied,
         ImageDecoder::noDecodedImageByteLimit));
diff --git a/third_party/WebKit/Source/platform/image-decoders/gif/GIFImageReader.cpp b/third_party/WebKit/Source/platform/image-decoders/gif/GIFImageReader.cpp
index 34679f5..3ed6e66 100644
--- a/third_party/WebKit/Source/platform/image-decoders/gif/GIFImageReader.cpp
+++ b/third_party/WebKit/Source/platform/image-decoders/gif/GIFImageReader.cpp
@@ -75,8 +75,8 @@
 #include "platform/image-decoders/gif/GIFImageReader.h"
 
 #include "platform/Histogram.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/Threading.h"
-
 #include <string.h>
 
 using blink::GIFImageDecoder;
@@ -336,7 +336,7 @@
         if (!isDataSizeDefined() || !isHeaderDefined())
             return true;
 
-        m_lzwContext = adoptPtr(new GIFLZWContext(client, this));
+        m_lzwContext = wrapUnique(new GIFLZWContext(client, this));
         if (!m_lzwContext->prepareToDecode()) {
             m_lzwContext.reset();
             return false;
@@ -827,7 +827,7 @@
 void GIFImageReader::addFrameIfNecessary()
 {
     if (m_frames.isEmpty() || m_frames.last()->isComplete())
-        m_frames.append(adoptPtr(new GIFFrameContext(m_frames.size())));
+        m_frames.append(wrapUnique(new GIFFrameContext(m_frames.size())));
 }
 
 // FIXME: Move this method to close to doLZW().
diff --git a/third_party/WebKit/Source/platform/image-decoders/gif/GIFImageReader.h b/third_party/WebKit/Source/platform/image-decoders/gif/GIFImageReader.h
index 1ec9d384..068b921 100644
--- a/third_party/WebKit/Source/platform/image-decoders/gif/GIFImageReader.h
+++ b/third_party/WebKit/Source/platform/image-decoders/gif/GIFImageReader.h
@@ -44,9 +44,8 @@
 #include "platform/image-decoders/gif/GIFImageDecoder.h"
 #include "wtf/Allocator.h"
 #include "wtf/Noncopyable.h"
-#include "wtf/OwnPtr.h"
-#include "wtf/PassOwnPtr.h"
 #include "wtf/Vector.h"
+#include <memory>
 
 #define MAX_DICTIONARY_ENTRY_BITS 12
 #define MAX_DICTIONARY_ENTRIES    4096 // 2^MAX_DICTIONARY_ENTRY_BITS
@@ -267,7 +266,7 @@
 
     unsigned m_delayTime; // Display time, in milliseconds, for this image in a multi-image GIF.
 
-    OwnPtr<GIFLZWContext> m_lzwContext;
+    std::unique_ptr<GIFLZWContext> m_lzwContext;
     Vector<GIFLZWBlock> m_lzwBlocks; // LZW blocks for this frame.
     GIFColorMap m_localColorMap;
 
@@ -353,7 +352,7 @@
     GIFColorMap m_globalColorMap;
     int m_loopCount; // Netscape specific extension block to control the number of animation loops a GIF renders.
 
-    Vector<OwnPtr<GIFFrameContext>> m_frames;
+    Vector<std::unique_ptr<GIFFrameContext>> m_frames;
 
     RefPtr<blink::SegmentReader> m_data;
     bool m_parseCompleted;
diff --git a/third_party/WebKit/Source/platform/image-decoders/ico/ICOImageDecoder.cpp b/third_party/WebKit/Source/platform/image-decoders/ico/ICOImageDecoder.cpp
index 00d19d7e..f8d39b9 100644
--- a/third_party/WebKit/Source/platform/image-decoders/ico/ICOImageDecoder.cpp
+++ b/third_party/WebKit/Source/platform/image-decoders/ico/ICOImageDecoder.cpp
@@ -32,9 +32,8 @@
 
 #include "platform/Histogram.h"
 #include "platform/image-decoders/png/PNGImageDecoder.h"
-#include "wtf/PassOwnPtr.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/Threading.h"
-
 #include <algorithm>
 
 namespace blink {
@@ -196,7 +195,7 @@
 
     if (imageType == BMP) {
         if (!m_bmpReaders[index]) {
-            m_bmpReaders[index] = adoptPtr(new BMPImageReader(this, dirEntry.m_imageOffset, 0, true));
+            m_bmpReaders[index] = wrapUnique(new BMPImageReader(this, dirEntry.m_imageOffset, 0, true));
             m_bmpReaders[index]->setData(m_data.get());
         }
         // Update the pointer to the buffer as it could change after
@@ -211,7 +210,7 @@
     if (!m_pngDecoders[index]) {
         AlphaOption alphaOption = m_premultiplyAlpha ? AlphaPremultiplied : AlphaNotPremultiplied;
         GammaAndColorProfileOption colorOptions = m_ignoreGammaAndColorProfile ? GammaAndColorProfileIgnored : GammaAndColorProfileApplied;
-        m_pngDecoders[index] = adoptPtr(new PNGImageDecoder(alphaOption, colorOptions, m_maxDecodedBytes, dirEntry.m_imageOffset));
+        m_pngDecoders[index] = wrapUnique(new PNGImageDecoder(alphaOption, colorOptions, m_maxDecodedBytes, dirEntry.m_imageOffset));
         setDataForPNGDecoderAtIndex(index);
     }
     // Fail if the size the PNGImageDecoder calculated does not match the size
diff --git a/third_party/WebKit/Source/platform/image-decoders/ico/ICOImageDecoder.h b/third_party/WebKit/Source/platform/image-decoders/ico/ICOImageDecoder.h
index 7bfe240a..0f875ffe 100644
--- a/third_party/WebKit/Source/platform/image-decoders/ico/ICOImageDecoder.h
+++ b/third_party/WebKit/Source/platform/image-decoders/ico/ICOImageDecoder.h
@@ -33,6 +33,7 @@
 
 #include "platform/image-decoders/FastSharedBufferReader.h"
 #include "platform/image-decoders/bmp/BMPImageReader.h"
+#include <memory>
 
 namespace blink {
 
@@ -159,9 +160,9 @@
     IconDirectoryEntries m_dirEntries;
 
     // The image decoders for the various frames.
-    typedef Vector<OwnPtr<BMPImageReader>> BMPReaders;
+    typedef Vector<std::unique_ptr<BMPImageReader>> BMPReaders;
     BMPReaders m_bmpReaders;
-    typedef Vector<OwnPtr<PNGImageDecoder>> PNGDecoders;
+    typedef Vector<std::unique_ptr<PNGImageDecoder>> PNGDecoders;
     PNGDecoders m_pngDecoders;
 
     // Valid only while a BMPImageReader is decoding, this holds the size
diff --git a/third_party/WebKit/Source/platform/image-decoders/ico/ICOImageDecoderTest.cpp b/third_party/WebKit/Source/platform/image-decoders/ico/ICOImageDecoderTest.cpp
index 9e061ec..31b0a3f 100644
--- a/third_party/WebKit/Source/platform/image-decoders/ico/ICOImageDecoderTest.cpp
+++ b/third_party/WebKit/Source/platform/image-decoders/ico/ICOImageDecoderTest.cpp
@@ -6,14 +6,16 @@
 
 #include "platform/image-decoders/ImageDecoderTestHelpers.h"
 #include "testing/gtest/include/gtest/gtest.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
 namespace {
 
-PassOwnPtr<ImageDecoder> createDecoder()
+std::unique_ptr<ImageDecoder> createDecoder()
 {
-    return adoptPtr(new ICOImageDecoder(ImageDecoder::AlphaNotPremultiplied, ImageDecoder::GammaAndColorProfileApplied, ImageDecoder::noDecodedImageByteLimit));
+    return wrapUnique(new ICOImageDecoder(ImageDecoder::AlphaNotPremultiplied, ImageDecoder::GammaAndColorProfileApplied, ImageDecoder::noDecodedImageByteLimit));
 }
 
 }
diff --git a/third_party/WebKit/Source/platform/image-decoders/jpeg/JPEGImageDecoder.cpp b/third_party/WebKit/Source/platform/image-decoders/jpeg/JPEGImageDecoder.cpp
index 95bb9acd..63827d4 100644
--- a/third_party/WebKit/Source/platform/image-decoders/jpeg/JPEGImageDecoder.cpp
+++ b/third_party/WebKit/Source/platform/image-decoders/jpeg/JPEGImageDecoder.cpp
@@ -39,7 +39,9 @@
 
 #include "platform/Histogram.h"
 #include "platform/PlatformInstrumentation.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/Threading.h"
+#include <memory>
 
 extern "C" {
 #include <stdio.h> // jpeglib.h needs stdio FILE.
@@ -793,7 +795,7 @@
     return !failed();
 }
 
-void JPEGImageDecoder::setImagePlanes(PassOwnPtr<ImagePlanes> imagePlanes)
+void JPEGImageDecoder::setImagePlanes(std::unique_ptr<ImagePlanes> imagePlanes)
 {
     m_imagePlanes = std::move(imagePlanes);
 }
@@ -988,7 +990,7 @@
         return;
 
     if (!m_reader) {
-        m_reader = adoptPtr(new JPEGImageReader(this));
+        m_reader = wrapUnique(new JPEGImageReader(this));
         m_reader->setData(m_data.get());
     }
 
diff --git a/third_party/WebKit/Source/platform/image-decoders/jpeg/JPEGImageDecoder.h b/third_party/WebKit/Source/platform/image-decoders/jpeg/JPEGImageDecoder.h
index 0dc93f1..845bfcb 100644
--- a/third_party/WebKit/Source/platform/image-decoders/jpeg/JPEGImageDecoder.h
+++ b/third_party/WebKit/Source/platform/image-decoders/jpeg/JPEGImageDecoder.h
@@ -27,6 +27,7 @@
 #define JPEGImageDecoder_h
 
 #include "platform/image-decoders/ImageDecoder.h"
+#include <memory>
 
 namespace blink {
 
@@ -47,7 +48,7 @@
     size_t decodedYUVWidthBytes(int component) const override;
     bool canDecodeToYUV() override;
     bool decodeToYUV() override;
-    void setImagePlanes(PassOwnPtr<ImagePlanes>) override;
+    void setImagePlanes(std::unique_ptr<ImagePlanes>) override;
     bool hasImagePlanes() const { return m_imagePlanes.get(); }
 
     bool outputScanlines();
@@ -67,8 +68,8 @@
     // data coming, sets the "decode failure" flag.
     void decode(bool onlySize);
 
-    OwnPtr<JPEGImageReader> m_reader;
-    OwnPtr<ImagePlanes> m_imagePlanes;
+    std::unique_ptr<JPEGImageReader> m_reader;
+    std::unique_ptr<ImagePlanes> m_imagePlanes;
     IntSize m_decodedSize;
 };
 
diff --git a/third_party/WebKit/Source/platform/image-decoders/jpeg/JPEGImageDecoderTest.cpp b/third_party/WebKit/Source/platform/image-decoders/jpeg/JPEGImageDecoderTest.cpp
index 4de383f..6295e54 100644
--- a/third_party/WebKit/Source/platform/image-decoders/jpeg/JPEGImageDecoderTest.cpp
+++ b/third_party/WebKit/Source/platform/image-decoders/jpeg/JPEGImageDecoderTest.cpp
@@ -36,9 +36,9 @@
 #include "public/platform/WebData.h"
 #include "public/platform/WebSize.h"
 #include "testing/gtest/include/gtest/gtest.h"
-#include "wtf/OwnPtr.h"
-#include "wtf/PassOwnPtr.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/typed_arrays/ArrayBuffer.h"
+#include <memory>
 
 namespace blink {
 
@@ -46,12 +46,12 @@
 
 namespace {
 
-PassOwnPtr<ImageDecoder> createDecoder(size_t maxDecodedBytes)
+std::unique_ptr<ImageDecoder> createDecoder(size_t maxDecodedBytes)
 {
-    return adoptPtr(new JPEGImageDecoder(ImageDecoder::AlphaNotPremultiplied, ImageDecoder::GammaAndColorProfileApplied, maxDecodedBytes));
+    return wrapUnique(new JPEGImageDecoder(ImageDecoder::AlphaNotPremultiplied, ImageDecoder::GammaAndColorProfileApplied, maxDecodedBytes));
 }
 
-PassOwnPtr<ImageDecoder> createDecoder()
+std::unique_ptr<ImageDecoder> createDecoder()
 {
     return createDecoder(ImageDecoder::noDecodedImageByteLimit);
 }
@@ -63,7 +63,7 @@
     RefPtr<SharedBuffer> data = readFile(imageFilePath);
     ASSERT_TRUE(data);
 
-    OwnPtr<ImageDecoder> decoder = createDecoder(maxDecodedBytes);
+    std::unique_ptr<ImageDecoder> decoder = createDecoder(maxDecodedBytes);
     decoder->setData(data.get(), true);
 
     ImageFrame* frame = decoder->frameBufferAtIndex(0);
@@ -78,11 +78,11 @@
     RefPtr<SharedBuffer> data = readFile(imageFilePath);
     ASSERT_TRUE(data);
 
-    OwnPtr<ImageDecoder> decoder = createDecoder(maxDecodedBytes);
+    std::unique_ptr<ImageDecoder> decoder = createDecoder(maxDecodedBytes);
     decoder->setData(data.get(), true);
 
     // Setting a dummy ImagePlanes object signals to the decoder that we want to do YUV decoding.
-    OwnPtr<ImagePlanes> dummyImagePlanes = adoptPtr(new ImagePlanes());
+    std::unique_ptr<ImagePlanes> dummyImagePlanes = wrapUnique(new ImagePlanes());
     decoder->setImagePlanes(std::move(dummyImagePlanes));
 
     bool sizeIsAvailable = decoder->isSizeAvailable();
@@ -114,7 +114,7 @@
     planes[1] = ((char*) planes[0]) + rowBytes[0] * ySize.height();
     planes[2] = ((char*) planes[1]) + rowBytes[1] * uSize.height();
 
-    OwnPtr<ImagePlanes> imagePlanes = adoptPtr(new ImagePlanes(planes, rowBytes));
+    std::unique_ptr<ImagePlanes> imagePlanes = wrapUnique(new ImagePlanes(planes, rowBytes));
     decoder->setImagePlanes(std::move(imagePlanes));
 
     ASSERT_TRUE(decoder->decodeToYUV());
@@ -123,7 +123,7 @@
 // Tests failure on a too big image.
 TEST(JPEGImageDecoderTest, tooBig)
 {
-    OwnPtr<ImageDecoder> decoder = createDecoder(100);
+    std::unique_ptr<ImageDecoder> decoder = createDecoder(100);
     EXPECT_FALSE(decoder->setSize(10000, 10000));
     EXPECT_TRUE(decoder->failed());
 }
@@ -247,10 +247,10 @@
     RefPtr<SharedBuffer> data = readFile(jpegFile);
     ASSERT_TRUE(data);
 
-    OwnPtr<ImageDecoder> decoder = createDecoder(230 * 230 * 4);
+    std::unique_ptr<ImageDecoder> decoder = createDecoder(230 * 230 * 4);
     decoder->setData(data.get(), true);
 
-    OwnPtr<ImagePlanes> imagePlanes = adoptPtr(new ImagePlanes());
+    std::unique_ptr<ImagePlanes> imagePlanes = wrapUnique(new ImagePlanes());
     decoder->setImagePlanes(std::move(imagePlanes));
     ASSERT_TRUE(decoder->isSizeAvailable());
     ASSERT_FALSE(decoder->canDecodeToYUV());
diff --git a/third_party/WebKit/Source/platform/image-decoders/png/PNGImageDecoder.cpp b/third_party/WebKit/Source/platform/image-decoders/png/PNGImageDecoder.cpp
index 23715e3..c0b8473a 100644
--- a/third_party/WebKit/Source/platform/image-decoders/png/PNGImageDecoder.cpp
+++ b/third_party/WebKit/Source/platform/image-decoders/png/PNGImageDecoder.cpp
@@ -39,6 +39,8 @@
 #include "platform/image-decoders/png/PNGImageDecoder.h"
 
 #include "png.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 #if !defined(PNG_LIBPNG_VER_MAJOR) || !defined(PNG_LIBPNG_VER_MINOR)
 #error version error: compile against a versioned libpng.
@@ -142,10 +144,10 @@
     bool hasAlpha() const { return m_hasAlpha; }
 
     png_bytep interlaceBuffer() const { return m_interlaceBuffer.get(); }
-    void createInterlaceBuffer(int size) { m_interlaceBuffer = adoptArrayPtr(new png_byte[size]); }
+    void createInterlaceBuffer(int size) { m_interlaceBuffer = wrapArrayUnique(new png_byte[size]); }
 #if USE(QCMSLIB)
     png_bytep rowBuffer() const { return m_rowBuffer.get(); }
-    void createRowBuffer(int size) { m_rowBuffer = adoptArrayPtr(new png_byte[size]); }
+    void createRowBuffer(int size) { m_rowBuffer = wrapArrayUnique(new png_byte[size]); }
 #endif
 
 private:
@@ -156,9 +158,9 @@
     size_t m_currentBufferSize;
     bool m_decodingSizeOnly;
     bool m_hasAlpha;
-    OwnPtr<png_byte[]> m_interlaceBuffer;
+    std::unique_ptr<png_byte[]> m_interlaceBuffer;
 #if USE(QCMSLIB)
-    OwnPtr<png_byte[]> m_rowBuffer;
+    std::unique_ptr<png_byte[]> m_rowBuffer;
 #endif
 };
 
@@ -428,7 +430,7 @@
         return;
 
     if (!m_reader)
-        m_reader = adoptPtr(new PNGImageReader(this, m_offset));
+        m_reader = wrapUnique(new PNGImageReader(this, m_offset));
 
     // If we couldn't decode the image but have received all the data, decoding
     // has failed.
diff --git a/third_party/WebKit/Source/platform/image-decoders/png/PNGImageDecoder.h b/third_party/WebKit/Source/platform/image-decoders/png/PNGImageDecoder.h
index f41b543..c0c9ca8 100644
--- a/third_party/WebKit/Source/platform/image-decoders/png/PNGImageDecoder.h
+++ b/third_party/WebKit/Source/platform/image-decoders/png/PNGImageDecoder.h
@@ -27,6 +27,7 @@
 #define PNGImageDecoder_h
 
 #include "platform/image-decoders/ImageDecoder.h"
+#include <memory>
 
 namespace blink {
 
@@ -56,7 +57,7 @@
     // data coming, sets the "decode failure" flag.
     void decode(bool onlySize);
 
-    OwnPtr<PNGImageReader> m_reader;
+    std::unique_ptr<PNGImageReader> m_reader;
     const unsigned m_offset;
 };
 
diff --git a/third_party/WebKit/Source/platform/image-decoders/webp/WEBPImageDecoderTest.cpp b/third_party/WebKit/Source/platform/image-decoders/webp/WEBPImageDecoderTest.cpp
index b3474e3..a941551 100644
--- a/third_party/WebKit/Source/platform/image-decoders/webp/WEBPImageDecoderTest.cpp
+++ b/third_party/WebKit/Source/platform/image-decoders/webp/WEBPImageDecoderTest.cpp
@@ -36,21 +36,21 @@
 #include "public/platform/WebData.h"
 #include "public/platform/WebSize.h"
 #include "testing/gtest/include/gtest/gtest.h"
-#include "wtf/OwnPtr.h"
-#include "wtf/PassOwnPtr.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/Vector.h"
 #include "wtf/dtoa/utils.h"
+#include <memory>
 
 namespace blink {
 
 namespace {
 
-PassOwnPtr<ImageDecoder> createDecoder(ImageDecoder::AlphaOption alphaOption)
+std::unique_ptr<ImageDecoder> createDecoder(ImageDecoder::AlphaOption alphaOption)
 {
-    return adoptPtr(new WEBPImageDecoder(alphaOption, ImageDecoder::GammaAndColorProfileApplied, ImageDecoder::noDecodedImageByteLimit));
+    return wrapUnique(new WEBPImageDecoder(alphaOption, ImageDecoder::GammaAndColorProfileApplied, ImageDecoder::noDecodedImageByteLimit));
 }
 
-PassOwnPtr<ImageDecoder> createDecoder()
+std::unique_ptr<ImageDecoder> createDecoder()
 {
     return createDecoder(ImageDecoder::AlphaNotPremultiplied);
 }
@@ -66,7 +66,7 @@
     size_t frameCount = baselineHashes.size();
 
     // Random decoding should get the same results as sequential decoding.
-    OwnPtr<ImageDecoder> decoder = createDecoder();
+    std::unique_ptr<ImageDecoder> decoder = createDecoder();
     decoder->setData(fullData.get(), true);
     const size_t skippingStep = 5;
     for (size_t i = 0; i < skippingStep; ++i) {
@@ -97,7 +97,7 @@
     createDecodingBaseline(&createDecoder, data.get(), &baselineHashes);
     size_t frameCount = baselineHashes.size();
 
-    OwnPtr<ImageDecoder> decoder = createDecoder();
+    std::unique_ptr<ImageDecoder> decoder = createDecoder();
     decoder->setData(data.get(), true);
     for (size_t clearExceptFrame = 0; clearExceptFrame < frameCount; ++clearExceptFrame) {
         decoder->clearCacheExceptFrame(clearExceptFrame);
@@ -114,7 +114,7 @@
 
 void testDecodeAfterReallocatingData(const char* webpFile)
 {
-    OwnPtr<ImageDecoder> decoder = createDecoder();
+    std::unique_ptr<ImageDecoder> decoder = createDecoder();
     RefPtr<SharedBuffer> data = readFile(webpFile);
     ASSERT_TRUE(data.get());
 
@@ -136,7 +136,7 @@
 
 void testByteByByteSizeAvailable(const char* webpFile, size_t frameOffset, bool hasColorProfile, int expectedRepetitionCount)
 {
-    OwnPtr<ImageDecoder> decoder = createDecoder();
+    std::unique_ptr<ImageDecoder> decoder = createDecoder();
     RefPtr<SharedBuffer> data = readFile(webpFile);
     ASSERT_TRUE(data.get());
     EXPECT_LT(frameOffset, data->size());
@@ -181,7 +181,7 @@
 // call); else error is expected during decode (frameBufferAtIndex() call).
 void testInvalidImage(const char* webpFile, bool parseErrorExpected)
 {
-    OwnPtr<ImageDecoder> decoder = createDecoder();
+    std::unique_ptr<ImageDecoder> decoder = createDecoder();
 
     RefPtr<SharedBuffer> data = readFile(webpFile);
     ASSERT_TRUE(data.get());
@@ -242,10 +242,10 @@
     RefPtr<SharedBuffer> data = readFile(webpFile);
     ASSERT_TRUE(data.get());
 
-    OwnPtr<ImageDecoder> decoderA = createDecoder(ImageDecoder::AlphaPremultiplied);
+    std::unique_ptr<ImageDecoder> decoderA = createDecoder(ImageDecoder::AlphaPremultiplied);
     decoderA->setData(data.get(), true);
 
-    OwnPtr<ImageDecoder> decoderB = createDecoder(ImageDecoder::AlphaNotPremultiplied);
+    std::unique_ptr<ImageDecoder> decoderB = createDecoder(ImageDecoder::AlphaNotPremultiplied);
     decoderB->setData(data.get(), true);
 
     size_t frameCount = decoderA->frameCount();
@@ -259,7 +259,7 @@
 
 TEST(AnimatedWebPTests, uniqueGenerationIDs)
 {
-    OwnPtr<ImageDecoder> decoder = createDecoder();
+    std::unique_ptr<ImageDecoder> decoder = createDecoder();
 
     RefPtr<SharedBuffer> data = readFile("/LayoutTests/fast/images/resources/webp-animated.webp");
     ASSERT_TRUE(data.get());
@@ -275,7 +275,7 @@
 
 TEST(AnimatedWebPTests, verifyAnimationParametersTransparentImage)
 {
-    OwnPtr<ImageDecoder> decoder = createDecoder();
+    std::unique_ptr<ImageDecoder> decoder = createDecoder();
     EXPECT_EQ(cAnimationLoopOnce, decoder->repetitionCount());
 
     RefPtr<SharedBuffer> data = readFile("/LayoutTests/fast/images/resources/webp-animated.webp");
@@ -317,7 +317,7 @@
 
 TEST(AnimatedWebPTests, verifyAnimationParametersOpaqueFramesTransparentBackground)
 {
-    OwnPtr<ImageDecoder> decoder = createDecoder();
+    std::unique_ptr<ImageDecoder> decoder = createDecoder();
     EXPECT_EQ(cAnimationLoopOnce, decoder->repetitionCount());
 
     RefPtr<SharedBuffer> data = readFile("/LayoutTests/fast/images/resources/webp-animated-opaque.webp");
@@ -360,7 +360,7 @@
 
 TEST(AnimatedWebPTests, verifyAnimationParametersBlendOverwrite)
 {
-    OwnPtr<ImageDecoder> decoder = createDecoder();
+    std::unique_ptr<ImageDecoder> decoder = createDecoder();
     EXPECT_EQ(cAnimationLoopOnce, decoder->repetitionCount());
 
     RefPtr<SharedBuffer> data = readFile("/LayoutTests/fast/images/resources/webp-animated-no-blend.webp");
@@ -417,7 +417,7 @@
 
 TEST(AnimatedWebPTests, truncatedLastFrame)
 {
-    OwnPtr<ImageDecoder> decoder = createDecoder();
+    std::unique_ptr<ImageDecoder> decoder = createDecoder();
 
     RefPtr<SharedBuffer> data = readFile("/LayoutTests/fast/images/resources/invalid-animated-webp2.webp");
     ASSERT_TRUE(data.get());
@@ -440,7 +440,7 @@
 
 TEST(AnimatedWebPTests, truncatedInBetweenFrame)
 {
-    OwnPtr<ImageDecoder> decoder = createDecoder();
+    std::unique_ptr<ImageDecoder> decoder = createDecoder();
 
     RefPtr<SharedBuffer> fullData = readFile("/LayoutTests/fast/images/resources/invalid-animated-webp4.webp");
     ASSERT_TRUE(fullData.get());
@@ -459,7 +459,7 @@
 // Reproduce a crash that used to happen for a specific file with specific sequence of method calls.
 TEST(AnimatedWebPTests, reproCrash)
 {
-    OwnPtr<ImageDecoder> decoder = createDecoder();
+    std::unique_ptr<ImageDecoder> decoder = createDecoder();
 
     RefPtr<SharedBuffer> fullData = readFile("/LayoutTests/fast/images/resources/invalid_vp8_vp8x.webp");
     ASSERT_TRUE(fullData.get());
@@ -491,7 +491,7 @@
     ASSERT_TRUE(fullData.get());
     const size_t fullLength = fullData->size();
 
-    OwnPtr<ImageDecoder>  decoder;
+    std::unique_ptr<ImageDecoder>  decoder;
     ImageFrame* frame;
 
     Vector<unsigned> truncatedHashes;
@@ -536,7 +536,7 @@
 
 TEST(AnimatedWebPTests, frameIsCompleteAndDuration)
 {
-    OwnPtr<ImageDecoder> decoder = createDecoder();
+    std::unique_ptr<ImageDecoder> decoder = createDecoder();
 
     RefPtr<SharedBuffer> data = readFile("/LayoutTests/fast/images/resources/webp-animated.webp");
     ASSERT_TRUE(data.get());
@@ -564,7 +564,7 @@
 
 TEST(AnimatedWebPTests, updateRequiredPreviousFrameAfterFirstDecode)
 {
-    OwnPtr<ImageDecoder> decoder = createDecoder();
+    std::unique_ptr<ImageDecoder> decoder = createDecoder();
 
     RefPtr<SharedBuffer> fullData = readFile("/LayoutTests/fast/images/resources/webp-animated.webp");
     ASSERT_TRUE(fullData.get());
@@ -612,7 +612,7 @@
     createDecodingBaseline(&createDecoder, fullData.get(), &baselineHashes);
     size_t frameCount = baselineHashes.size();
 
-    OwnPtr<ImageDecoder> decoder = createDecoder();
+    std::unique_ptr<ImageDecoder> decoder = createDecoder();
 
     // Let frame 0 be partially decoded.
     size_t partialSize = 1;
@@ -679,7 +679,7 @@
 
 TEST(StaticWebPTests, notAnimated)
 {
-    OwnPtr<ImageDecoder> decoder = createDecoder();
+    std::unique_ptr<ImageDecoder> decoder = createDecoder();
     RefPtr<SharedBuffer> data = readFile("/LayoutTests/fast/images/resources/webp-color-profile-lossy.webp");
     ASSERT_TRUE(data.get());
     decoder->setData(data.get(), true);
diff --git a/third_party/WebKit/Source/platform/image-encoders/JPEGImageEncoder.cpp b/third_party/WebKit/Source/platform/image-encoders/JPEGImageEncoder.cpp
index 93353ff..c4c2b09 100644
--- a/third_party/WebKit/Source/platform/image-encoders/JPEGImageEncoder.cpp
+++ b/third_party/WebKit/Source/platform/image-encoders/JPEGImageEncoder.cpp
@@ -34,6 +34,8 @@
 #include "platform/geometry/IntSize.h"
 #include "platform/graphics/ImageBuffer.h"
 #include "wtf/CurrentTime.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 extern "C" {
 #include <setjmp.h>
@@ -134,12 +136,12 @@
         return what_to_return;                                    \
     }
 
-PassOwnPtr<JPEGImageEncoderState> JPEGImageEncoderState::create(const IntSize& imageSize, const double& quality, Vector<unsigned char>* output)
+std::unique_ptr<JPEGImageEncoderState> JPEGImageEncoderState::create(const IntSize& imageSize, const double& quality, Vector<unsigned char>* output)
 {
     if (imageSize.width() <= 0 || imageSize.height() <= 0)
         return nullptr;
 
-    OwnPtr<JPEGImageEncoderStateImpl> encoderState = adoptPtr(new JPEGImageEncoderStateImpl());
+    std::unique_ptr<JPEGImageEncoderStateImpl> encoderState = wrapUnique(new JPEGImageEncoderStateImpl());
 
     jpeg_compress_struct* cinfo = encoderState->cinfo();
     jpeg_error_mgr* error = encoderState->error();
@@ -205,7 +207,7 @@
     return currentRowsCompleted;
 }
 
-bool JPEGImageEncoder::encodeWithPreInitializedState(PassOwnPtr<JPEGImageEncoderState> encoderState, const unsigned char* inputPixels, int numRowsCompleted)
+bool JPEGImageEncoder::encodeWithPreInitializedState(std::unique_ptr<JPEGImageEncoderState> encoderState, const unsigned char* inputPixels, int numRowsCompleted)
 {
     JPEGImageEncoderStateImpl* encoderStateImpl = static_cast<JPEGImageEncoderStateImpl*>(encoderState.get());
 
@@ -232,7 +234,7 @@
     if (!imageData.pixels())
         return false;
 
-    OwnPtr<JPEGImageEncoderState> encoderState = JPEGImageEncoderState::create(imageData.size(), quality, output);
+    std::unique_ptr<JPEGImageEncoderState> encoderState = JPEGImageEncoderState::create(imageData.size(), quality, output);
     if (!encoderState)
         return false;
 
diff --git a/third_party/WebKit/Source/platform/image-encoders/JPEGImageEncoder.h b/third_party/WebKit/Source/platform/image-encoders/JPEGImageEncoder.h
index 7ed6d30..afc0c9f 100644
--- a/third_party/WebKit/Source/platform/image-encoders/JPEGImageEncoder.h
+++ b/third_party/WebKit/Source/platform/image-encoders/JPEGImageEncoder.h
@@ -33,8 +33,8 @@
 
 #include "platform/geometry/IntSize.h"
 #include "wtf/Allocator.h"
-#include "wtf/PassOwnPtr.h"
 #include "wtf/Vector.h"
+#include <memory>
 
 namespace blink {
 
@@ -44,7 +44,7 @@
     USING_FAST_MALLOC(JPEGImageEncoderState);
     WTF_MAKE_NONCOPYABLE(JPEGImageEncoderState);
 public:
-    static PassOwnPtr<JPEGImageEncoderState> create(const IntSize& imageSize, const double& quality, Vector<unsigned char>* output);
+    static std::unique_ptr<JPEGImageEncoderState> create(const IntSize& imageSize, const double& quality, Vector<unsigned char>* output);
     JPEGImageEncoderState() {}
     virtual ~JPEGImageEncoderState() {}
 };
@@ -63,7 +63,7 @@
     // be safer.
     static bool encode(const ImageDataBuffer&, const double& quality, Vector<unsigned char>*);
 
-    static bool encodeWithPreInitializedState(PassOwnPtr<JPEGImageEncoderState>, const unsigned char*, int numRowsCompleted = 0);
+    static bool encodeWithPreInitializedState(std::unique_ptr<JPEGImageEncoderState>, const unsigned char*, int numRowsCompleted = 0);
     static int progressiveEncodeRowsJpegHelper(JPEGImageEncoderState*, unsigned char*, int, const double, double);
     static int computeCompressionQuality(const double& quality);
 
diff --git a/third_party/WebKit/Source/platform/image-encoders/PNGImageEncoder.cpp b/third_party/WebKit/Source/platform/image-encoders/PNGImageEncoder.cpp
index cfaae3f1..77ccf5e 100644
--- a/third_party/WebKit/Source/platform/image-encoders/PNGImageEncoder.cpp
+++ b/third_party/WebKit/Source/platform/image-encoders/PNGImageEncoder.cpp
@@ -31,7 +31,8 @@
 #include "platform/image-encoders/PNGImageEncoder.h"
 
 #include "platform/graphics/ImageBuffer.h"
-#include "wtf/OwnPtr.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
@@ -45,7 +46,7 @@
     static_cast<Vector<unsigned char>*>(png_get_io_ptr(png))->append(data, size);
 }
 
-PassOwnPtr<PNGImageEncoderState> PNGImageEncoderState::create(const IntSize& imageSize, Vector<unsigned char>* output)
+std::unique_ptr<PNGImageEncoderState> PNGImageEncoderState::create(const IntSize& imageSize, Vector<unsigned char>* output)
 {
     if (imageSize.width() <= 0 || imageSize.height() <= 0)
         return nullptr;
@@ -73,7 +74,7 @@
     png_set_IHDR(png, info, imageSize.width(), imageSize.height(), 8, PNG_COLOR_TYPE_RGB_ALPHA, 0, 0, 0);
     png_write_info(png, info);
 
-    return adoptPtr(new PNGImageEncoderState(png, info));
+    return wrapUnique(new PNGImageEncoderState(png, info));
 }
 
 void PNGImageEncoder::writeOneRowToPng(unsigned char* pixels, PNGImageEncoderState* encoderState)
@@ -88,7 +89,7 @@
 
 static bool encodePixels(const IntSize& imageSize, const unsigned char* inputPixels, Vector<unsigned char>* output)
 {
-    OwnPtr<PNGImageEncoderState> encoderState = PNGImageEncoderState::create(imageSize, output);
+    std::unique_ptr<PNGImageEncoderState> encoderState = PNGImageEncoderState::create(imageSize, output);
     if (!encoderState.get())
         return false;
 
diff --git a/third_party/WebKit/Source/platform/image-encoders/PNGImageEncoder.h b/third_party/WebKit/Source/platform/image-encoders/PNGImageEncoder.h
index 79f7960..a825c66 100644
--- a/third_party/WebKit/Source/platform/image-encoders/PNGImageEncoder.h
+++ b/third_party/WebKit/Source/platform/image-encoders/PNGImageEncoder.h
@@ -36,8 +36,8 @@
 #include "png.h"
 }
 #include "wtf/Allocator.h"
-#include "wtf/PassOwnPtr.h"
 #include "wtf/Vector.h"
+#include <memory>
 
 namespace blink {
 
@@ -47,7 +47,7 @@
     USING_FAST_MALLOC(PNGImageEncoderState);
     WTF_MAKE_NONCOPYABLE(PNGImageEncoderState);
 public:
-    static PassOwnPtr<PNGImageEncoderState> create(const IntSize& imageSize, Vector<unsigned char>* output);
+    static std::unique_ptr<PNGImageEncoderState> create(const IntSize& imageSize, Vector<unsigned char>* output);
     ~PNGImageEncoderState();
     png_struct* png() { ASSERT(m_png); return m_png; }
     png_info* info() { ASSERT(m_info); return m_info; }
diff --git a/third_party/WebKit/Source/platform/mac/ScrollAnimatorMac.h b/third_party/WebKit/Source/platform/mac/ScrollAnimatorMac.h
index cdc362b6..d07fd37 100644
--- a/third_party/WebKit/Source/platform/mac/ScrollAnimatorMac.h
+++ b/third_party/WebKit/Source/platform/mac/ScrollAnimatorMac.h
@@ -35,6 +35,7 @@
 #include "platform/scroll/ScrollAnimatorBase.h"
 #include "public/platform/WebTaskRunner.h"
 #include "wtf/RetainPtr.h"
+#include <memory>
 
 OBJC_CLASS BlinkScrollAnimationHelperDelegate;
 OBJC_CLASS BlinkScrollbarPainterControllerDelegate;
@@ -82,11 +83,11 @@
     RetainPtr<BlinkScrollbarPainterDelegate> m_verticalScrollbarPainterDelegate;
 
     void initialScrollbarPaintTask();
-    OwnPtr<CancellableTaskFactory> m_initialScrollbarPaintTaskFactory;
+    std::unique_ptr<CancellableTaskFactory> m_initialScrollbarPaintTaskFactory;
 
     void sendContentAreaScrolledTask();
-    OwnPtr<CancellableTaskFactory> m_sendContentAreaScrolledTaskFactory;
-    OwnPtr<WebTaskRunner> m_taskRunner;
+    std::unique_ptr<CancellableTaskFactory> m_sendContentAreaScrolledTaskFactory;
+    std::unique_ptr<WebTaskRunner> m_taskRunner;
     FloatSize m_contentAreaScrolledTimerScrollDelta;
 
     ScrollResult userScroll(ScrollGranularity, const FloatSize& delta) override;
diff --git a/third_party/WebKit/Source/platform/mac/ScrollAnimatorMac.mm b/third_party/WebKit/Source/platform/mac/ScrollAnimatorMac.mm
index 85c5c6d..e148eca 100644
--- a/third_party/WebKit/Source/platform/mac/ScrollAnimatorMac.mm
+++ b/third_party/WebKit/Source/platform/mac/ScrollAnimatorMac.mm
@@ -39,7 +39,8 @@
 #include "public/platform/Platform.h"
 #include "public/platform/WebScheduler.h"
 #include "wtf/MathExtras.h"
-#include "wtf/PassOwnPtr.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 using namespace blink;
 
@@ -354,7 +355,7 @@
 
 @interface BlinkScrollbarPartAnimation : NSObject {
     Scrollbar* _scrollbar;
-    OwnPtr<BlinkScrollbarPartAnimationTimer> _timer;
+    std::unique_ptr<BlinkScrollbarPartAnimationTimer> _timer;
     RetainPtr<ScrollbarPainter> _scrollbarPainter;
     FeatureToAnimate _featureToAnimate;
     CGFloat _startValue;
@@ -371,7 +372,7 @@
     if (!self)
         return nil;
 
-    _timer = adoptPtr(new BlinkScrollbarPartAnimationTimer(self, duration));
+    _timer = wrapUnique(new BlinkScrollbarPartAnimationTimer(self, duration));
     _scrollbar = scrollbar;
     _featureToAnimate = featureToAnimate;
     _startValue = startValue;
@@ -682,7 +683,7 @@
     : ScrollAnimatorBase(scrollableArea)
     , m_initialScrollbarPaintTaskFactory(CancellableTaskFactory::create(this, &ScrollAnimatorMac::initialScrollbarPaintTask))
     , m_sendContentAreaScrolledTaskFactory(CancellableTaskFactory::create(this, &ScrollAnimatorMac::sendContentAreaScrolledTask))
-    , m_taskRunner(adoptPtr(Platform::current()->currentThread()->scheduler()->timerTaskRunner()->clone()))
+    , m_taskRunner(wrapUnique(Platform::current()->currentThread()->scheduler()->timerTaskRunner()->clone()))
     , m_haveScrolledSincePageLoad(false)
     , m_needsScrollerStyleUpdate(false)
 {
diff --git a/third_party/WebKit/Source/platform/mediastream/MediaStreamCenter.cpp b/third_party/WebKit/Source/platform/mediastream/MediaStreamCenter.cpp
index 32943ee..f883c81 100644
--- a/third_party/WebKit/Source/platform/mediastream/MediaStreamCenter.cpp
+++ b/third_party/WebKit/Source/platform/mediastream/MediaStreamCenter.cpp
@@ -40,7 +40,8 @@
 #include "public/platform/WebMediaStreamCenter.h"
 #include "public/platform/WebMediaStreamTrack.h"
 #include "wtf/Assertions.h"
-#include "wtf/PassOwnPtr.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
@@ -52,7 +53,7 @@
 }
 
 MediaStreamCenter::MediaStreamCenter()
-    : m_private(adoptPtr(Platform::current()->createMediaStreamCenter(this)))
+    : m_private(wrapUnique(Platform::current()->createMediaStreamCenter(this)))
 {
 }
 
@@ -121,11 +122,11 @@
         m_private->didCreateMediaStreamTrack(track);
 }
 
-PassOwnPtr<AudioSourceProvider> MediaStreamCenter::createWebAudioSourceFromMediaStreamTrack(MediaStreamComponent* track)
+std::unique_ptr<AudioSourceProvider> MediaStreamCenter::createWebAudioSourceFromMediaStreamTrack(MediaStreamComponent* track)
 {
     ASSERT_UNUSED(track, track);
     if (m_private)
-        return MediaStreamWebAudioSource::create(adoptPtr(m_private->createWebAudioSourceFromMediaStreamTrack(track)));
+        return MediaStreamWebAudioSource::create(wrapUnique(m_private->createWebAudioSourceFromMediaStreamTrack(track)));
 
     return nullptr;
 }
diff --git a/third_party/WebKit/Source/platform/mediastream/MediaStreamCenter.h b/third_party/WebKit/Source/platform/mediastream/MediaStreamCenter.h
index c666955..a3b047e 100644
--- a/third_party/WebKit/Source/platform/mediastream/MediaStreamCenter.h
+++ b/third_party/WebKit/Source/platform/mediastream/MediaStreamCenter.h
@@ -35,9 +35,9 @@
 #include "platform/heap/Handle.h"
 #include "public/platform/WebMediaStreamCenterClient.h"
 #include "wtf/Allocator.h"
-#include "wtf/OwnPtr.h"
 #include "wtf/PassRefPtr.h"
 #include "wtf/text/WTFString.h"
+#include <memory>
 
 namespace blink {
 
@@ -59,7 +59,7 @@
     void didCreateMediaStreamTrack(MediaStreamComponent*);
     void didSetMediaStreamTrackEnabled(MediaStreamComponent*);
     bool didStopMediaStreamTrack(MediaStreamComponent*);
-    PassOwnPtr<AudioSourceProvider> createWebAudioSourceFromMediaStreamTrack(MediaStreamComponent*);
+    std::unique_ptr<AudioSourceProvider> createWebAudioSourceFromMediaStreamTrack(MediaStreamComponent*);
 
     void didCreateMediaStream(MediaStreamDescriptor*);
     void didCreateMediaStreamAndTracks(MediaStreamDescriptor*);
@@ -73,7 +73,7 @@
 private:
     MediaStreamCenter();
 
-    OwnPtr<WebMediaStreamCenter> m_private;
+    std::unique_ptr<WebMediaStreamCenter> m_private;
 };
 
 } // namespace blink
diff --git a/third_party/WebKit/Source/platform/mediastream/MediaStreamComponent.h b/third_party/WebKit/Source/platform/mediastream/MediaStreamComponent.h
index 7c5f406..87d2167 100644
--- a/third_party/WebKit/Source/platform/mediastream/MediaStreamComponent.h
+++ b/third_party/WebKit/Source/platform/mediastream/MediaStreamComponent.h
@@ -38,6 +38,7 @@
 #include "wtf/Forward.h"
 #include "wtf/ThreadingPrimitives.h"
 #include "wtf/text/WTFString.h"
+#include <memory>
 
 namespace blink {
 
@@ -78,7 +79,7 @@
     void setSourceProvider(WebAudioSourceProvider* provider) { m_sourceProvider.wrap(provider); }
 
     TrackData* getTrackData() const { return m_trackData.get(); }
-    void setTrackData(PassOwnPtr<TrackData> trackData) { m_trackData = std::move(trackData); }
+    void setTrackData(std::unique_ptr<TrackData> trackData) { m_trackData = std::move(trackData); }
     void getSettings(WebMediaStreamTrack::Settings&);
 
     DECLARE_TRACE();
@@ -114,7 +115,7 @@
     String m_id;
     bool m_enabled;
     bool m_muted;
-    OwnPtr<TrackData> m_trackData;
+    std::unique_ptr<TrackData> m_trackData;
 };
 
 typedef HeapVector<Member<MediaStreamComponent>> MediaStreamComponentVector;
diff --git a/third_party/WebKit/Source/platform/mediastream/MediaStreamDescriptor.h b/third_party/WebKit/Source/platform/mediastream/MediaStreamDescriptor.h
index db4dd8d..fbbc846 100644
--- a/third_party/WebKit/Source/platform/mediastream/MediaStreamDescriptor.h
+++ b/third_party/WebKit/Source/platform/mediastream/MediaStreamDescriptor.h
@@ -37,6 +37,7 @@
 #include "wtf/Allocator.h"
 #include "wtf/Forward.h"
 #include "wtf/Vector.h"
+#include <memory>
 
 namespace blink {
 
@@ -89,7 +90,7 @@
     void setEnded() { m_ended = true; }
 
     ExtraData* getExtraData() const { return m_extraData.get(); }
-    void setExtraData(PassOwnPtr<ExtraData> extraData) { m_extraData = std::move(extraData); }
+    void setExtraData(std::unique_ptr<ExtraData> extraData) { m_extraData = std::move(extraData); }
 
     // |m_extraData| may hold pointers to GC objects, and it may touch them in destruction.
     // So this class is eagerly finalized to finalize |m_extraData| promptly.
@@ -107,7 +108,7 @@
     bool m_active;
     bool m_ended;
 
-    OwnPtr<ExtraData> m_extraData;
+    std::unique_ptr<ExtraData> m_extraData;
 };
 
 typedef HeapVector<Member<MediaStreamDescriptor>> MediaStreamDescriptorVector;
diff --git a/third_party/WebKit/Source/platform/mediastream/MediaStreamSource.h b/third_party/WebKit/Source/platform/mediastream/MediaStreamSource.h
index ebc1852c..38d68f668 100644
--- a/third_party/WebKit/Source/platform/mediastream/MediaStreamSource.h
+++ b/third_party/WebKit/Source/platform/mediastream/MediaStreamSource.h
@@ -36,11 +36,10 @@
 #include "platform/audio/AudioDestinationConsumer.h"
 #include "public/platform/WebMediaConstraints.h"
 #include "wtf/Allocator.h"
-#include "wtf/OwnPtr.h"
-#include "wtf/PassOwnPtr.h"
 #include "wtf/ThreadingPrimitives.h"
 #include "wtf/Vector.h"
 #include "wtf/text/WTFString.h"
+#include <memory>
 
 namespace blink {
 
@@ -82,7 +81,7 @@
     void addObserver(Observer*);
 
     ExtraData* getExtraData() const { return m_extraData.get(); }
-    void setExtraData(PassOwnPtr<ExtraData> extraData) { m_extraData = std::move(extraData); }
+    void setExtraData(std::unique_ptr<ExtraData> extraData) { m_extraData = std::move(extraData); }
 
     void setConstraints(WebMediaConstraints constraints) { m_constraints = constraints; }
     WebMediaConstraints constraints() { return m_constraints; }
@@ -112,7 +111,7 @@
     HeapHashSet<WeakMember<Observer>> m_observers;
     Mutex m_audioConsumersLock;
     HeapHashSet<Member<AudioDestinationConsumer>> m_audioConsumers;
-    OwnPtr<ExtraData> m_extraData;
+    std::unique_ptr<ExtraData> m_extraData;
     WebMediaConstraints m_constraints;
 };
 
diff --git a/third_party/WebKit/Source/platform/mediastream/MediaStreamWebAudioSource.cpp b/third_party/WebKit/Source/platform/mediastream/MediaStreamWebAudioSource.cpp
index 47bd137..870d030 100644
--- a/third_party/WebKit/Source/platform/mediastream/MediaStreamWebAudioSource.cpp
+++ b/third_party/WebKit/Source/platform/mediastream/MediaStreamWebAudioSource.cpp
@@ -28,13 +28,14 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-#include "platform/mediastream/MediaStreamWebAudioSource.h"
 #include "platform/audio/AudioBus.h"
+#include "platform/mediastream/MediaStreamWebAudioSource.h"
 #include "public/platform/WebAudioSourceProvider.h"
+#include <memory>
 
 namespace blink {
 
-MediaStreamWebAudioSource::MediaStreamWebAudioSource(PassOwnPtr<WebAudioSourceProvider> provider)
+MediaStreamWebAudioSource::MediaStreamWebAudioSource(std::unique_ptr<WebAudioSourceProvider> provider)
     : m_webAudioSourceProvider(std::move(provider))
 {
 }
diff --git a/third_party/WebKit/Source/platform/mediastream/MediaStreamWebAudioSource.h b/third_party/WebKit/Source/platform/mediastream/MediaStreamWebAudioSource.h
index a2d42605..2fca5f3 100644
--- a/third_party/WebKit/Source/platform/mediastream/MediaStreamWebAudioSource.h
+++ b/third_party/WebKit/Source/platform/mediastream/MediaStreamWebAudioSource.h
@@ -33,10 +33,10 @@
 
 #include "platform/audio/AudioSourceProvider.h"
 #include "wtf/Noncopyable.h"
-#include "wtf/OwnPtr.h"
-#include "wtf/PassOwnPtr.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/ThreadingPrimitives.h"
 #include "wtf/build_config.h"
+#include <memory>
 
 namespace blink {
 
@@ -45,17 +45,17 @@
 class MediaStreamWebAudioSource : public AudioSourceProvider {
     WTF_MAKE_NONCOPYABLE(MediaStreamWebAudioSource);
 public:
-    static PassOwnPtr<MediaStreamWebAudioSource> create(PassOwnPtr<WebAudioSourceProvider> provider) { return adoptPtr(new MediaStreamWebAudioSource(std::move(provider))); }
+    static std::unique_ptr<MediaStreamWebAudioSource> create(std::unique_ptr<WebAudioSourceProvider> provider) { return wrapUnique(new MediaStreamWebAudioSource(std::move(provider))); }
 
     ~MediaStreamWebAudioSource() override;
 
 private:
-    explicit MediaStreamWebAudioSource(PassOwnPtr<WebAudioSourceProvider>);
+    explicit MediaStreamWebAudioSource(std::unique_ptr<WebAudioSourceProvider>);
 
     // blink::AudioSourceProvider implementation.
     void provideInput(AudioBus*, size_t framesToProcess) override;
 
-    OwnPtr<WebAudioSourceProvider> m_webAudioSourceProvider;
+    std::unique_ptr<WebAudioSourceProvider> m_webAudioSourceProvider;
 };
 
 } // namespace blink
diff --git a/third_party/WebKit/Source/platform/mediastream/RTCConfiguration.h b/third_party/WebKit/Source/platform/mediastream/RTCConfiguration.h
index 8e83245..3b036ca 100644
--- a/third_party/WebKit/Source/platform/mediastream/RTCConfiguration.h
+++ b/third_party/WebKit/Source/platform/mediastream/RTCConfiguration.h
@@ -35,8 +35,10 @@
 #include "platform/weborigin/KURL.h"
 #include "public/platform/WebRTCCertificate.h"
 #include "wtf/PassRefPtr.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/Vector.h"
 #include "wtf/text/WTFString.h"
+#include <memory>
 
 namespace blink {
 
@@ -97,7 +99,7 @@
     void setRtcpMuxPolicy(RTCRtcpMuxPolicy rtcpMuxPolicy) { m_rtcpMuxPolicy = rtcpMuxPolicy; }
     RTCRtcpMuxPolicy rtcpMuxPolicy() { return m_rtcpMuxPolicy; }
 
-    void appendCertificate(std::unique_ptr<WebRTCCertificate> certificate) { m_certificates.append(adoptPtr(certificate.release())); }
+    void appendCertificate(std::unique_ptr<WebRTCCertificate> certificate) { m_certificates.append(wrapUnique(certificate.release())); }
     size_t numberOfCertificates() const { return m_certificates.size(); }
     WebRTCCertificate* certificate(size_t index) const { return m_certificates[index].get(); }
 
@@ -113,7 +115,7 @@
     RTCIceTransports m_iceTransports;
     RTCBundlePolicy m_bundlePolicy;
     RTCRtcpMuxPolicy m_rtcpMuxPolicy;
-    Vector<OwnPtr<WebRTCCertificate>> m_certificates;
+    Vector<std::unique_ptr<WebRTCCertificate>> m_certificates;
 };
 
 } // namespace blink
diff --git a/third_party/WebKit/Source/platform/mojo/MojoHelper.h b/third_party/WebKit/Source/platform/mojo/MojoHelper.h
index b278e75..cb37878 100644
--- a/third_party/WebKit/Source/platform/mojo/MojoHelper.h
+++ b/third_party/WebKit/Source/platform/mojo/MojoHelper.h
@@ -23,12 +23,6 @@
 }
 
 template <typename R, typename... Args>
-base::Callback<R(Args...)> createBaseCallback(PassOwnPtr<Function<R(Args...)>> functor)
-{
-    return base::Bind(&internal::CallWTFFunction<R, Args...>, base::Owned(functor.leakPtr()));
-}
-
-template <typename R, typename... Args>
 base::Callback<R(Args...)> createBaseCallback(std::unique_ptr<Function<R(Args...)>> functor)
 {
     return base::Bind(&internal::CallWTFFunction<R, Args...>, base::Owned(functor.release()));
diff --git a/third_party/WebKit/Source/platform/network/HTTPHeaderMap.cpp b/third_party/WebKit/Source/platform/network/HTTPHeaderMap.cpp
index c1c37dc..2581d2f 100644
--- a/third_party/WebKit/Source/platform/network/HTTPHeaderMap.cpp
+++ b/third_party/WebKit/Source/platform/network/HTTPHeaderMap.cpp
@@ -30,6 +30,9 @@
 
 #include "platform/network/HTTPHeaderMap.h"
 
+#include "wtf/PtrUtil.h"
+#include <memory>
+
 namespace blink {
 
 HTTPHeaderMap::HTTPHeaderMap()
@@ -40,9 +43,9 @@
 {
 }
 
-PassOwnPtr<CrossThreadHTTPHeaderMapData> HTTPHeaderMap::copyData() const
+std::unique_ptr<CrossThreadHTTPHeaderMapData> HTTPHeaderMap::copyData() const
 {
-    OwnPtr<CrossThreadHTTPHeaderMapData> data = adoptPtr(new CrossThreadHTTPHeaderMapData());
+    std::unique_ptr<CrossThreadHTTPHeaderMapData> data = wrapUnique(new CrossThreadHTTPHeaderMapData());
     data->reserveInitialCapacity(size());
 
     HTTPHeaderMap::const_iterator endIt = end();
@@ -52,7 +55,7 @@
     return data;
 }
 
-void HTTPHeaderMap::adopt(PassOwnPtr<CrossThreadHTTPHeaderMapData> data)
+void HTTPHeaderMap::adopt(std::unique_ptr<CrossThreadHTTPHeaderMapData> data)
 {
     clear();
     size_t dataSize = data->size();
diff --git a/third_party/WebKit/Source/platform/network/HTTPHeaderMap.h b/third_party/WebKit/Source/platform/network/HTTPHeaderMap.h
index 3207583..f87f2554 100644
--- a/third_party/WebKit/Source/platform/network/HTTPHeaderMap.h
+++ b/third_party/WebKit/Source/platform/network/HTTPHeaderMap.h
@@ -30,11 +30,11 @@
 #include "platform/PlatformExport.h"
 #include "wtf/Allocator.h"
 #include "wtf/HashMap.h"
-#include "wtf/PassOwnPtr.h"
 #include "wtf/Vector.h"
 #include "wtf/text/AtomicString.h"
 #include "wtf/text/AtomicStringHash.h"
 #include "wtf/text/StringHash.h"
+#include <memory>
 #include <utility>
 
 namespace blink {
@@ -49,9 +49,9 @@
     ~HTTPHeaderMap();
 
     // Gets a copy of the data suitable for passing to another thread.
-    PassOwnPtr<CrossThreadHTTPHeaderMapData> copyData() const;
+    std::unique_ptr<CrossThreadHTTPHeaderMapData> copyData() const;
 
-    void adopt(PassOwnPtr<CrossThreadHTTPHeaderMapData>);
+    void adopt(std::unique_ptr<CrossThreadHTTPHeaderMapData>);
 
     typedef HashMap<AtomicString, AtomicString, CaseFoldingHash> MapType;
     typedef MapType::AddResult AddResult;
diff --git a/third_party/WebKit/Source/platform/network/ResourceRequest.cpp b/third_party/WebKit/Source/platform/network/ResourceRequest.cpp
index f24a2b5..e9f1960 100644
--- a/third_party/WebKit/Source/platform/network/ResourceRequest.cpp
+++ b/third_party/WebKit/Source/platform/network/ResourceRequest.cpp
@@ -33,6 +33,8 @@
 #include "public/platform/WebAddressSpace.h"
 #include "public/platform/WebCachePolicy.h"
 #include "public/platform/WebURLRequest.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
@@ -78,9 +80,9 @@
     m_redirectStatus = data->m_redirectStatus;
 }
 
-PassOwnPtr<CrossThreadResourceRequestData> ResourceRequest::copyData() const
+std::unique_ptr<CrossThreadResourceRequestData> ResourceRequest::copyData() const
 {
-    OwnPtr<CrossThreadResourceRequestData> data = adoptPtr(new CrossThreadResourceRequestData());
+    std::unique_ptr<CrossThreadResourceRequestData> data = wrapUnique(new CrossThreadResourceRequestData());
     data->m_url = url().copy();
     data->m_cachePolicy = getCachePolicy();
     data->m_timeoutInterval = timeoutInterval();
diff --git a/third_party/WebKit/Source/platform/network/ResourceRequest.h b/third_party/WebKit/Source/platform/network/ResourceRequest.h
index b8a9508eb..2a6feae6 100644
--- a/third_party/WebKit/Source/platform/network/ResourceRequest.h
+++ b/third_party/WebKit/Source/platform/network/ResourceRequest.h
@@ -38,8 +38,8 @@
 #include "platform/weborigin/SecurityOrigin.h"
 #include "public/platform/WebAddressSpace.h"
 #include "public/platform/WebURLRequest.h"
-#include "wtf/OwnPtr.h"
 #include "wtf/RefCounted.h"
+#include <memory>
 
 namespace blink {
 
@@ -91,7 +91,7 @@
     explicit ResourceRequest(CrossThreadResourceRequestData*);
 
     // Gets a copy of the data suitable for passing to another thread.
-    PassOwnPtr<CrossThreadResourceRequestData> copyData() const;
+    std::unique_ptr<CrossThreadResourceRequestData> copyData() const;
 
     bool isNull() const;
     bool isEmpty() const;
@@ -307,7 +307,7 @@
     RefPtr<SecurityOrigin> m_requestorOrigin;
 
     String m_httpMethod;
-    OwnPtr<CrossThreadHTTPHeaderMapData> m_httpHeaders;
+    std::unique_ptr<CrossThreadHTTPHeaderMapData> m_httpHeaders;
     RefPtr<EncodedFormData> m_httpBody;
     RefPtr<EncodedFormData> m_attachedCredential;
     bool m_allowStoredCredentials;
diff --git a/third_party/WebKit/Source/platform/network/ResourceRequestTest.cpp b/third_party/WebKit/Source/platform/network/ResourceRequestTest.cpp
index 0979dff..94ba87f7 100644
--- a/third_party/WebKit/Source/platform/network/ResourceRequestTest.cpp
+++ b/third_party/WebKit/Source/platform/network/ResourceRequestTest.cpp
@@ -11,6 +11,7 @@
 #include "public/platform/WebURLRequest.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "wtf/text/AtomicString.h"
+#include <memory>
 
 namespace blink {
 
@@ -75,7 +76,7 @@
     EXPECT_STREQ("http://www.example.com/referrer.htm", original.httpReferrer().utf8().data());
     EXPECT_EQ(ReferrerPolicyDefault, original.getReferrerPolicy());
 
-    OwnPtr<CrossThreadResourceRequestData> data1(original.copyData());
+    std::unique_ptr<CrossThreadResourceRequestData> data1(original.copyData());
     ResourceRequest copy1(data1.get());
 
     EXPECT_STREQ("http://www.example.com/test.htm", copy1.url().getString().utf8().data());
@@ -110,7 +111,7 @@
     copy1.setFetchRequestMode(WebURLRequest::FetchRequestModeNoCORS);
     copy1.setFetchCredentialsMode(WebURLRequest::FetchCredentialsModeInclude);
 
-    OwnPtr<CrossThreadResourceRequestData> data2(copy1.copyData());
+    std::unique_ptr<CrossThreadResourceRequestData> data2(copy1.copyData());
     ResourceRequest copy2(data2.get());
     EXPECT_TRUE(copy2.allowStoredCredentials());
     EXPECT_TRUE(copy2.reportUploadProgress());
diff --git a/third_party/WebKit/Source/platform/network/ResourceResponse.cpp b/third_party/WebKit/Source/platform/network/ResourceResponse.cpp
index 06fa838..d513f5b 100644
--- a/third_party/WebKit/Source/platform/network/ResourceResponse.cpp
+++ b/third_party/WebKit/Source/platform/network/ResourceResponse.cpp
@@ -27,7 +27,9 @@
 #include "platform/network/ResourceResponse.h"
 
 #include "wtf/CurrentTime.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/StdLibExtras.h"
+#include <memory>
 
 namespace blink {
 
@@ -148,9 +150,9 @@
     // whatever values may be present in the opaque m_extraData structure.
 }
 
-PassOwnPtr<CrossThreadResourceResponseData> ResourceResponse::copyData() const
+std::unique_ptr<CrossThreadResourceResponseData> ResourceResponse::copyData() const
 {
-    OwnPtr<CrossThreadResourceResponseData> data = adoptPtr(new CrossThreadResourceResponseData);
+    std::unique_ptr<CrossThreadResourceResponseData> data = wrapUnique(new CrossThreadResourceResponseData);
     data->m_url = url().copy();
     data->m_mimeType = mimeType().getString().isolatedCopy();
     data->m_expectedContentLength = expectedContentLength();
@@ -542,7 +544,7 @@
         m_downloadedFileHandle.clear();
         return;
     }
-    OwnPtr<BlobData> blobData = BlobData::create();
+    std::unique_ptr<BlobData> blobData = BlobData::create();
     blobData->appendFile(m_downloadedFilePath);
     blobData->detachFromCurrentThread();
     m_downloadedFileHandle = BlobDataHandle::create(std::move(blobData), -1);
diff --git a/third_party/WebKit/Source/platform/network/ResourceResponse.h b/third_party/WebKit/Source/platform/network/ResourceResponse.h
index 89d64806..d19e852 100644
--- a/third_party/WebKit/Source/platform/network/ResourceResponse.h
+++ b/third_party/WebKit/Source/platform/network/ResourceResponse.h
@@ -35,10 +35,10 @@
 #include "platform/network/ResourceLoadTiming.h"
 #include "platform/weborigin/KURL.h"
 #include "public/platform/modules/serviceworker/WebServiceWorkerResponseType.h"
-#include "wtf/PassOwnPtr.h"
 #include "wtf/RefCounted.h"
 #include "wtf/RefPtr.h"
 #include "wtf/text/CString.h"
+#include <memory>
 
 namespace blink {
 
@@ -90,7 +90,7 @@
     explicit ResourceResponse(CrossThreadResourceResponseData*);
 
     // Gets a copy of the data suitable for passing to another thread.
-    PassOwnPtr<CrossThreadResourceResponseData> copyData() const;
+    std::unique_ptr<CrossThreadResourceResponseData> copyData() const;
 
     ResourceResponse();
     ResourceResponse(const KURL&, const AtomicString& mimeType, long long expectedLength, const AtomicString& textEncodingName, const String& filename);
@@ -391,7 +391,7 @@
     String m_suggestedFilename;
     int m_httpStatusCode;
     String m_httpStatusText;
-    OwnPtr<CrossThreadHTTPHeaderMapData> m_httpHeaders;
+    std::unique_ptr<CrossThreadHTTPHeaderMapData> m_httpHeaders;
     time_t m_lastModifiedDate;
     RefPtr<ResourceLoadTiming> m_resourceLoadTiming;
     CString m_securityInfo;
diff --git a/third_party/WebKit/Source/platform/network/ResourceTimingInfo.cpp b/third_party/WebKit/Source/platform/network/ResourceTimingInfo.cpp
index 03d0297..064cc45 100644
--- a/third_party/WebKit/Source/platform/network/ResourceTimingInfo.cpp
+++ b/third_party/WebKit/Source/platform/network/ResourceTimingInfo.cpp
@@ -5,12 +5,14 @@
 #include "platform/network/ResourceTimingInfo.h"
 
 #include "platform/CrossThreadCopier.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
-PassOwnPtr<ResourceTimingInfo> ResourceTimingInfo::adopt(PassOwnPtr<CrossThreadResourceTimingInfoData> data)
+std::unique_ptr<ResourceTimingInfo> ResourceTimingInfo::adopt(std::unique_ptr<CrossThreadResourceTimingInfoData> data)
 {
-    OwnPtr<ResourceTimingInfo> info = ResourceTimingInfo::create(AtomicString(data->m_type), data->m_initialTime, data->m_isMainResource);
+    std::unique_ptr<ResourceTimingInfo> info = ResourceTimingInfo::create(AtomicString(data->m_type), data->m_initialTime, data->m_isMainResource);
     info->m_originalTimingAllowOrigin = AtomicString(data->m_originalTimingAllowOrigin);
     info->m_loadFinishTime = data->m_loadFinishTime;
     info->m_initialRequest = ResourceRequest(data->m_initialRequest.get());
@@ -20,9 +22,9 @@
     return info;
 }
 
-PassOwnPtr<CrossThreadResourceTimingInfoData> ResourceTimingInfo::copyData() const
+std::unique_ptr<CrossThreadResourceTimingInfoData> ResourceTimingInfo::copyData() const
 {
-    OwnPtr<CrossThreadResourceTimingInfoData> data = adoptPtr(new CrossThreadResourceTimingInfoData);
+    std::unique_ptr<CrossThreadResourceTimingInfoData> data = wrapUnique(new CrossThreadResourceTimingInfoData);
     data->m_type = m_type.getString().isolatedCopy();
     data->m_originalTimingAllowOrigin = m_originalTimingAllowOrigin.getString().isolatedCopy();
     data->m_initialTime = m_initialTime;
diff --git a/third_party/WebKit/Source/platform/network/ResourceTimingInfo.h b/third_party/WebKit/Source/platform/network/ResourceTimingInfo.h
index da3c5b51..f7ff7c1 100644
--- a/third_party/WebKit/Source/platform/network/ResourceTimingInfo.h
+++ b/third_party/WebKit/Source/platform/network/ResourceTimingInfo.h
@@ -37,7 +37,9 @@
 #include "wtf/Allocator.h"
 #include "wtf/Functional.h"
 #include "wtf/Noncopyable.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/text/AtomicString.h"
+#include <memory>
 
 namespace blink {
 
@@ -47,14 +49,14 @@
     USING_FAST_MALLOC(ResourceTimingInfo);
     WTF_MAKE_NONCOPYABLE(ResourceTimingInfo);
 public:
-    static PassOwnPtr<ResourceTimingInfo> create(const AtomicString& type, const double time, bool isMainResource)
+    static std::unique_ptr<ResourceTimingInfo> create(const AtomicString& type, const double time, bool isMainResource)
     {
-        return adoptPtr(new ResourceTimingInfo(type, time, isMainResource));
+        return wrapUnique(new ResourceTimingInfo(type, time, isMainResource));
     }
-    static PassOwnPtr<ResourceTimingInfo> adopt(PassOwnPtr<CrossThreadResourceTimingInfoData>);
+    static std::unique_ptr<ResourceTimingInfo> adopt(std::unique_ptr<CrossThreadResourceTimingInfoData>);
 
     // Gets a copy of the data suitable for passing to another thread.
-    PassOwnPtr<CrossThreadResourceTimingInfoData> copyData() const;
+    std::unique_ptr<CrossThreadResourceTimingInfoData> copyData() const;
 
     double initialTime() const { return m_initialTime; }
     bool isMainResource() const { return m_isMainResource; }
@@ -112,15 +114,15 @@
     String m_originalTimingAllowOrigin;
     double m_initialTime;
     double m_loadFinishTime;
-    OwnPtr<CrossThreadResourceRequestData> m_initialRequest;
-    OwnPtr<CrossThreadResourceResponseData> m_finalResponse;
-    Vector<OwnPtr<CrossThreadResourceResponseData>> m_redirectChain;
+    std::unique_ptr<CrossThreadResourceRequestData> m_initialRequest;
+    std::unique_ptr<CrossThreadResourceResponseData> m_finalResponse;
+    Vector<std::unique_ptr<CrossThreadResourceResponseData>> m_redirectChain;
     bool m_isMainResource;
 };
 
 template <>
 struct CrossThreadCopier<ResourceTimingInfo> {
-    typedef WTF::PassedWrapper<PassOwnPtr<CrossThreadResourceTimingInfoData>> Type;
+    typedef WTF::PassedWrapper<std::unique_ptr<CrossThreadResourceTimingInfoData>> Type;
     static Type copy(const ResourceTimingInfo& info) { return passed(info.copyData()); }
 };
 
diff --git a/third_party/WebKit/Source/platform/scheduler/CancellableTaskFactory.h b/third_party/WebKit/Source/platform/scheduler/CancellableTaskFactory.h
index 18741b1f..c6684da 100644
--- a/third_party/WebKit/Source/platform/scheduler/CancellableTaskFactory.h
+++ b/third_party/WebKit/Source/platform/scheduler/CancellableTaskFactory.h
@@ -11,9 +11,9 @@
 #include "wtf/Allocator.h"
 #include "wtf/Functional.h"
 #include "wtf/Noncopyable.h"
-#include "wtf/OwnPtr.h"
-#include "wtf/PassOwnPtr.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/WeakPtr.h"
+#include <memory>
 #include <type_traits>
 
 namespace blink {
@@ -37,15 +37,15 @@
     // variety, which will refer back to the owner heap object safely (but weakly.)
     //
     template<typename T>
-    static PassOwnPtr<CancellableTaskFactory> create(T* thisObject, void (T::*method)(), typename std::enable_if<IsGarbageCollectedType<T>::value>::type* = nullptr)
+    static std::unique_ptr<CancellableTaskFactory> create(T* thisObject, void (T::*method)(), typename std::enable_if<IsGarbageCollectedType<T>::value>::type* = nullptr)
     {
-        return adoptPtr(new CancellableTaskFactory(WTF::bind(method, CrossThreadWeakPersistentThisPointer<T>(thisObject))));
+        return wrapUnique(new CancellableTaskFactory(WTF::bind(method, CrossThreadWeakPersistentThisPointer<T>(thisObject))));
     }
 
     template<typename T>
-    static PassOwnPtr<CancellableTaskFactory> create(T* thisObject, void (T::*method)(), typename std::enable_if<!IsGarbageCollectedType<T>::value>::type* = nullptr)
+    static std::unique_ptr<CancellableTaskFactory> create(T* thisObject, void (T::*method)(), typename std::enable_if<!IsGarbageCollectedType<T>::value>::type* = nullptr)
     {
-        return adoptPtr(new CancellableTaskFactory(WTF::bind(method, thisObject)));
+        return wrapUnique(new CancellableTaskFactory(WTF::bind(method, thisObject)));
     }
 
     bool isPending() const
diff --git a/third_party/WebKit/Source/platform/scheduler/CancellableTaskFactoryTest.cpp b/third_party/WebKit/Source/platform/scheduler/CancellableTaskFactoryTest.cpp
index 579f4e1..fcb6d78c 100644
--- a/third_party/WebKit/Source/platform/scheduler/CancellableTaskFactoryTest.cpp
+++ b/third_party/WebKit/Source/platform/scheduler/CancellableTaskFactoryTest.cpp
@@ -6,6 +6,8 @@
 
 #include "platform/heap/Handle.h"
 #include "testing/gtest/include/gtest/gtest.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
@@ -33,7 +35,7 @@
 TEST_F(CancellableTaskFactoryTest, IsPending_TaskCreated)
 {
     TestCancellableTaskFactory factory(nullptr);
-    OwnPtr<WebTaskRunner::Task> task = adoptPtr(factory.cancelAndCreate());
+    std::unique_ptr<WebTaskRunner::Task> task = wrapUnique(factory.cancelAndCreate());
 
     EXPECT_TRUE(factory.isPending());
 }
@@ -46,7 +48,7 @@
 {
     TestCancellableTaskFactory factory(WTF::bind(&EmptyFn));
     {
-        OwnPtr<WebTaskRunner::Task> task = adoptPtr(factory.cancelAndCreate());
+        std::unique_ptr<WebTaskRunner::Task> task = wrapUnique(factory.cancelAndCreate());
         task->run();
     }
 
@@ -64,7 +66,7 @@
 TEST_F(CancellableTaskFactoryTest, IsPending_TaskCreatedAndCancelled)
 {
     TestCancellableTaskFactory factory(nullptr);
-    OwnPtr<WebTaskRunner::Task> task = adoptPtr(factory.cancelAndCreate());
+    std::unique_ptr<WebTaskRunner::Task> task = wrapUnique(factory.cancelAndCreate());
     factory.cancel();
 
     EXPECT_FALSE(factory.isPending());
@@ -72,7 +74,7 @@
 
 class TestClass {
 public:
-    OwnPtr<CancellableTaskFactory> m_factory;
+    std::unique_ptr<CancellableTaskFactory> m_factory;
 
     TestClass()
         : m_factory(CancellableTaskFactory::create(this, &TestClass::TestFn))
@@ -88,7 +90,7 @@
 TEST_F(CancellableTaskFactoryTest, IsPending_InCallback)
 {
     TestClass testClass;
-    OwnPtr<WebTaskRunner::Task> task = adoptPtr(testClass.m_factory->cancelAndCreate());
+    std::unique_ptr<WebTaskRunner::Task> task = wrapUnique(testClass.m_factory->cancelAndCreate());
     task->run();
 }
 
@@ -101,7 +103,7 @@
 {
     int executionCount = 0;
     TestCancellableTaskFactory factory(WTF::bind(&AddOne, &executionCount));
-    OwnPtr<WebTaskRunner::Task> task = adoptPtr(factory.cancelAndCreate());
+    std::unique_ptr<WebTaskRunner::Task> task = wrapUnique(factory.cancelAndCreate());
     task->run();
 
     EXPECT_EQ(1, executionCount);
@@ -111,7 +113,7 @@
 {
     int executionCount = 0;
     TestCancellableTaskFactory factory(WTF::bind(&AddOne, &executionCount));
-    OwnPtr<WebTaskRunner::Task> task = adoptPtr(factory.cancelAndCreate());
+    std::unique_ptr<WebTaskRunner::Task> task = wrapUnique(factory.cancelAndCreate());
     task->run();
     task->run();
     task->run();
@@ -123,10 +125,10 @@
 TEST_F(CancellableTaskFactoryTest, Run_FactoryDestructionPreventsExecution)
 {
     int executionCount = 0;
-    OwnPtr<WebTaskRunner::Task> task;
+    std::unique_ptr<WebTaskRunner::Task> task;
     {
         TestCancellableTaskFactory factory(WTF::bind(&AddOne, &executionCount));
-        task = adoptPtr(factory.cancelAndCreate());
+        task = wrapUnique(factory.cancelAndCreate());
     }
     task->run();
 
@@ -138,15 +140,15 @@
     int executionCount = 0;
     TestCancellableTaskFactory factory(WTF::bind(&AddOne, &executionCount));
 
-    OwnPtr<WebTaskRunner::Task> taskA = adoptPtr(factory.cancelAndCreate());
+    std::unique_ptr<WebTaskRunner::Task> taskA = wrapUnique(factory.cancelAndCreate());
     taskA->run();
     EXPECT_EQ(1, executionCount);
 
-    OwnPtr<WebTaskRunner::Task> taskB = adoptPtr(factory.cancelAndCreate());
+    std::unique_ptr<WebTaskRunner::Task> taskB = wrapUnique(factory.cancelAndCreate());
     taskB->run();
     EXPECT_EQ(2, executionCount);
 
-    OwnPtr<WebTaskRunner::Task> taskC = adoptPtr(factory.cancelAndCreate());
+    std::unique_ptr<WebTaskRunner::Task> taskC = wrapUnique(factory.cancelAndCreate());
     taskC->run();
     EXPECT_EQ(3, executionCount);
 }
@@ -155,7 +157,7 @@
 {
     int executionCount = 0;
     TestCancellableTaskFactory factory(WTF::bind(&AddOne, &executionCount));
-    OwnPtr<WebTaskRunner::Task> task = adoptPtr(factory.cancelAndCreate());
+    std::unique_ptr<WebTaskRunner::Task> task = wrapUnique(factory.cancelAndCreate());
     factory.cancel();
     task->run();
 
@@ -167,8 +169,8 @@
     int executionCount = 0;
     TestCancellableTaskFactory factory(WTF::bind(&AddOne, &executionCount));
 
-    OwnPtr<WebTaskRunner::Task> taskA = adoptPtr(factory.cancelAndCreate());
-    OwnPtr<WebTaskRunner::Task> taskB = adoptPtr(factory.cancelAndCreate());
+    std::unique_ptr<WebTaskRunner::Task> taskA = wrapUnique(factory.cancelAndCreate());
+    std::unique_ptr<WebTaskRunner::Task> taskB = wrapUnique(factory.cancelAndCreate());
 
     taskA->run();
     EXPECT_EQ(0, executionCount);
@@ -201,7 +203,7 @@
     static int s_destructed;
     static int s_invoked;
 
-    OwnPtr<CancellableTaskFactory> m_factory;
+    std::unique_ptr<CancellableTaskFactory> m_factory;
 };
 
 int GCObject::s_destructed = 0;
@@ -212,7 +214,7 @@
 TEST(CancellableTaskFactoryTest, GarbageCollectedWeak)
 {
     GCObject* object = new GCObject();
-    OwnPtr<WebTaskRunner::Task> task = adoptPtr(object->m_factory->cancelAndCreate());
+    std::unique_ptr<WebTaskRunner::Task> task = wrapUnique(object->m_factory->cancelAndCreate());
     object = nullptr;
     ThreadHeap::collectAllGarbage();
     task->run();
diff --git a/third_party/WebKit/Source/platform/scroll/ProgrammaticScrollAnimator.cpp b/third_party/WebKit/Source/platform/scroll/ProgrammaticScrollAnimator.cpp
index 582d7a9..b53fdae 100644
--- a/third_party/WebKit/Source/platform/scroll/ProgrammaticScrollAnimator.cpp
+++ b/third_party/WebKit/Source/platform/scroll/ProgrammaticScrollAnimator.cpp
@@ -11,6 +11,8 @@
 #include "platform/scroll/ScrollableArea.h"
 #include "public/platform/Platform.h"
 #include "public/platform/WebCompositorSupport.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
@@ -120,7 +122,7 @@
         bool sentToCompositor = false;
 
         if (!m_scrollableArea->shouldScrollOnMainThread()) {
-            OwnPtr<CompositorAnimation> animation = CompositorAnimation::create(*m_animationCurve, CompositorTargetProperty::SCROLL_OFFSET, 0, 0);
+            std::unique_ptr<CompositorAnimation> animation = CompositorAnimation::create(*m_animationCurve, CompositorTargetProperty::SCROLL_OFFSET, 0, 0);
 
             int animationId = animation->id();
             int animationGroupId = animation->group();
diff --git a/third_party/WebKit/Source/platform/scroll/ProgrammaticScrollAnimator.h b/third_party/WebKit/Source/platform/scroll/ProgrammaticScrollAnimator.h
index 2aa64ef..f0bd65a 100644
--- a/third_party/WebKit/Source/platform/scroll/ProgrammaticScrollAnimator.h
+++ b/third_party/WebKit/Source/platform/scroll/ProgrammaticScrollAnimator.h
@@ -10,8 +10,7 @@
 #include "platform/scroll/ScrollAnimatorCompositorCoordinator.h"
 #include "wtf/Allocator.h"
 #include "wtf/Noncopyable.h"
-#include "wtf/OwnPtr.h"
-#include "wtf/PassOwnPtr.h"
+#include <memory>
 
 namespace blink {
 
@@ -53,7 +52,7 @@
     void notifyPositionChanged(const DoublePoint&);
 
     Member<ScrollableArea> m_scrollableArea;
-    OwnPtr<CompositorScrollOffsetAnimationCurve> m_animationCurve;
+    std::unique_ptr<CompositorScrollOffsetAnimationCurve> m_animationCurve;
     FloatPoint m_targetOffset;
     double m_startTime;
 };
diff --git a/third_party/WebKit/Source/platform/scroll/ScrollAnimator.cpp b/third_party/WebKit/Source/platform/scroll/ScrollAnimator.cpp
index 6fce2694..6b219ce45 100644
--- a/third_party/WebKit/Source/platform/scroll/ScrollAnimator.cpp
+++ b/third_party/WebKit/Source/platform/scroll/ScrollAnimator.cpp
@@ -40,6 +40,8 @@
 #include "public/platform/WebCompositorSupport.h"
 #include "wtf/CurrentTime.h"
 #include "wtf/PassRefPtr.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
@@ -267,7 +269,7 @@
     if (m_scrollableArea->shouldScrollOnMainThread())
         return false;
 
-    OwnPtr<CompositorAnimation> animation = CompositorAnimation::create(*m_animationCurve, CompositorTargetProperty::SCROLL_OFFSET, 0, 0);
+    std::unique_ptr<CompositorAnimation> animation = CompositorAnimation::create(*m_animationCurve, CompositorTargetProperty::SCROLL_OFFSET, 0, 0);
     // Being here means that either there is an animation that needs
     // to be sent to the compositor, or an animation that needs to
     // be updated (a new scroll event before the previous animation
diff --git a/third_party/WebKit/Source/platform/scroll/ScrollAnimator.h b/third_party/WebKit/Source/platform/scroll/ScrollAnimator.h
index da76f2f..bf9f80f 100644
--- a/third_party/WebKit/Source/platform/scroll/ScrollAnimator.h
+++ b/third_party/WebKit/Source/platform/scroll/ScrollAnimator.h
@@ -37,6 +37,7 @@
 #include "platform/animation/CompositorScrollOffsetAnimationCurve.h"
 #include "platform/geometry/FloatPoint.h"
 #include "platform/scroll/ScrollAnimatorBase.h"
+#include <memory>
 
 namespace blink {
 
@@ -77,7 +78,7 @@
         double animationStartTime,
         std::unique_ptr<cc::AnimationCurve>) override;
 
-    OwnPtr<CompositorScrollOffsetAnimationCurve> m_animationCurve;
+    std::unique_ptr<CompositorScrollOffsetAnimationCurve> m_animationCurve;
     double m_startTime;
     WTF::TimeFunction m_timeFunction;
 
diff --git a/third_party/WebKit/Source/platform/scroll/ScrollAnimatorBase.cpp b/third_party/WebKit/Source/platform/scroll/ScrollAnimatorBase.cpp
index 6e3757e..1ed8f2c 100644
--- a/third_party/WebKit/Source/platform/scroll/ScrollAnimatorBase.cpp
+++ b/third_party/WebKit/Source/platform/scroll/ScrollAnimatorBase.cpp
@@ -34,7 +34,6 @@
 #include "platform/geometry/FloatPoint.h"
 #include "platform/scroll/ScrollableArea.h"
 #include "wtf/MathExtras.h"
-#include "wtf/PassOwnPtr.h"
 
 namespace blink {
 
diff --git a/third_party/WebKit/Source/platform/scroll/ScrollAnimatorCompositorCoordinator.cpp b/third_party/WebKit/Source/platform/scroll/ScrollAnimatorCompositorCoordinator.cpp
index 7ebd18c1..85623d4 100644
--- a/third_party/WebKit/Source/platform/scroll/ScrollAnimatorCompositorCoordinator.cpp
+++ b/third_party/WebKit/Source/platform/scroll/ScrollAnimatorCompositorCoordinator.cpp
@@ -14,6 +14,8 @@
 #include "platform/scroll/ScrollableArea.h"
 #include "public/platform/Platform.h"
 #include "public/platform/WebCompositorSupport.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
@@ -76,10 +78,10 @@
 }
 
 bool ScrollAnimatorCompositorCoordinator::addAnimation(
-    PassOwnPtr<CompositorAnimation> animation)
+    std::unique_ptr<CompositorAnimation> animation)
 {
     if (m_compositorPlayer->isLayerAttached()) {
-        m_compositorPlayer->addAnimation(animation.leakPtr());
+        m_compositorPlayer->addAnimation(animation.release());
         return true;
     }
     return false;
diff --git a/third_party/WebKit/Source/platform/scroll/ScrollAnimatorCompositorCoordinator.h b/third_party/WebKit/Source/platform/scroll/ScrollAnimatorCompositorCoordinator.h
index bf111dd..d0cecc2 100644
--- a/third_party/WebKit/Source/platform/scroll/ScrollAnimatorCompositorCoordinator.h
+++ b/third_party/WebKit/Source/platform/scroll/ScrollAnimatorCompositorCoordinator.h
@@ -16,7 +16,7 @@
 #include "platform/scroll/ScrollTypes.h"
 #include "wtf/Allocator.h"
 #include "wtf/Noncopyable.h"
-#include "wtf/OwnPtr.h"
+#include <memory>
 
 namespace blink {
 
@@ -63,7 +63,7 @@
     IntSize implOnlyAnimationAdjustmentForTesting() { return m_implOnlyAnimationAdjustment; }
 
     void resetAnimationIds();
-    bool addAnimation(PassOwnPtr<CompositorAnimation>);
+    bool addAnimation(std::unique_ptr<CompositorAnimation>);
     void removeAnimation();
     virtual void abortAnimation();
 
@@ -139,7 +139,7 @@
         RunningOnCompositorButNeedsAdjustment,
     };
 
-    OwnPtr<CompositorAnimationPlayer> m_compositorPlayer;
+    std::unique_ptr<CompositorAnimationPlayer> m_compositorPlayer;
     int m_compositorAnimationAttachedToLayerId;
     RunState m_runState;
     int m_compositorAnimationId;
diff --git a/third_party/WebKit/Source/platform/scroll/ScrollbarTestSuite.h b/third_party/WebKit/Source/platform/scroll/ScrollbarTestSuite.h
index a0551da..0bd8755 100644
--- a/third_party/WebKit/Source/platform/scroll/ScrollbarTestSuite.h
+++ b/third_party/WebKit/Source/platform/scroll/ScrollbarTestSuite.h
@@ -11,6 +11,8 @@
 #include "platform/scroll/ScrollbarThemeMock.h"
 #include "platform/testing/TestingPlatformSupport.h"
 #include "testing/gmock/include/gmock/gmock.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
@@ -89,7 +91,7 @@
     {
         TestingPlatformSupport::Config config;
         config.compositorSupport = Platform::current()->compositorSupport();
-        m_fakePlatform = adoptPtr(new TestingPlatformSupportWithMockScheduler(config));
+        m_fakePlatform = wrapUnique(new TestingPlatformSupportWithMockScheduler(config));
     }
 
     void TearDown() override
@@ -98,7 +100,7 @@
     }
 
 private:
-    OwnPtr<TestingPlatformSupportWithMockScheduler> m_fakePlatform;
+    std::unique_ptr<TestingPlatformSupportWithMockScheduler> m_fakePlatform;
 };
 
 } // namespace blink
diff --git a/third_party/WebKit/Source/platform/scroll/ScrollbarThemeClient.h b/third_party/WebKit/Source/platform/scroll/ScrollbarThemeClient.h
index e0325fd..006c26f 100644
--- a/third_party/WebKit/Source/platform/scroll/ScrollbarThemeClient.h
+++ b/third_party/WebKit/Source/platform/scroll/ScrollbarThemeClient.h
@@ -31,7 +31,6 @@
 #include "platform/geometry/IntRect.h"
 #include "platform/geometry/IntSize.h"
 #include "platform/scroll/ScrollTypes.h"
-#include "wtf/PassOwnPtr.h"
 #include "wtf/Vector.h"
 
 namespace blink {
diff --git a/third_party/WebKit/Source/platform/speech/PlatformSpeechSynthesizer.cpp b/third_party/WebKit/Source/platform/speech/PlatformSpeechSynthesizer.cpp
index 9cc5c8f..ac10dfd 100644
--- a/third_party/WebKit/Source/platform/speech/PlatformSpeechSynthesizer.cpp
+++ b/third_party/WebKit/Source/platform/speech/PlatformSpeechSynthesizer.cpp
@@ -31,6 +31,7 @@
 #include "public/platform/WebSpeechSynthesisUtterance.h"
 #include "public/platform/WebSpeechSynthesizer.h"
 #include "public/platform/WebSpeechSynthesizerClient.h"
+#include "wtf/PtrUtil.h"
 
 namespace blink {
 
@@ -45,7 +46,7 @@
     : m_speechSynthesizerClient(client)
 {
     m_webSpeechSynthesizerClient = new WebSpeechSynthesizerClientImpl(this, client);
-    m_webSpeechSynthesizer = adoptPtr(Platform::current()->createSpeechSynthesizer(m_webSpeechSynthesizerClient));
+    m_webSpeechSynthesizer = wrapUnique(Platform::current()->createSpeechSynthesizer(m_webSpeechSynthesizerClient));
 }
 
 PlatformSpeechSynthesizer::~PlatformSpeechSynthesizer()
diff --git a/third_party/WebKit/Source/platform/speech/PlatformSpeechSynthesizer.h b/third_party/WebKit/Source/platform/speech/PlatformSpeechSynthesizer.h
index 3fd6ff12..70237e0 100644
--- a/third_party/WebKit/Source/platform/speech/PlatformSpeechSynthesizer.h
+++ b/third_party/WebKit/Source/platform/speech/PlatformSpeechSynthesizer.h
@@ -30,6 +30,7 @@
 #include "platform/heap/Handle.h"
 #include "platform/speech/PlatformSpeechSynthesisVoice.h"
 #include "wtf/Vector.h"
+#include <memory>
 
 namespace blink {
 
@@ -94,7 +95,7 @@
 private:
     Member<PlatformSpeechSynthesizerClient> m_speechSynthesizerClient;
 
-    OwnPtr<WebSpeechSynthesizer> m_webSpeechSynthesizer;
+    std::unique_ptr<WebSpeechSynthesizer> m_webSpeechSynthesizer;
     Member<WebSpeechSynthesizerClientImpl> m_webSpeechSynthesizerClient;
 };
 
diff --git a/third_party/WebKit/Source/platform/testing/FontTestHelpers.cpp b/third_party/WebKit/Source/platform/testing/FontTestHelpers.cpp
index 8b94a36..91be6dd 100644
--- a/third_party/WebKit/Source/platform/testing/FontTestHelpers.cpp
+++ b/third_party/WebKit/Source/platform/testing/FontTestHelpers.cpp
@@ -9,9 +9,9 @@
 #include "platform/fonts/FontDescription.h"
 #include "platform/fonts/FontSelector.h"
 #include "platform/testing/UnitTestHelpers.h"
-#include "wtf/OwnPtr.h"
 #include "wtf/PassRefPtr.h"
 #include "wtf/RefPtr.h"
+#include <memory>
 
 namespace blink {
 namespace testing {
@@ -50,12 +50,12 @@
     void fontCacheInvalidated() override { }
 
 private:
-    TestFontSelector(PassOwnPtr<FontCustomPlatformData> customPlatformData)
+    TestFontSelector(std::unique_ptr<FontCustomPlatformData> customPlatformData)
         : m_customPlatformData(std::move(customPlatformData))
     {
     }
 
-    OwnPtr<FontCustomPlatformData> m_customPlatformData;
+    std::unique_ptr<FontCustomPlatformData> m_customPlatformData;
 };
 
 } // namespace
diff --git a/third_party/WebKit/Source/platform/testing/HistogramTester.cpp b/third_party/WebKit/Source/platform/testing/HistogramTester.cpp
index 0e0fbb6..043ca952 100644
--- a/third_party/WebKit/Source/platform/testing/HistogramTester.cpp
+++ b/third_party/WebKit/Source/platform/testing/HistogramTester.cpp
@@ -5,11 +5,11 @@
 #include "platform/testing/HistogramTester.h"
 
 #include "base/test/histogram_tester.h"
-#include "wtf/PassOwnPtr.h"
+#include "wtf/PtrUtil.h"
 
 namespace blink {
 
-HistogramTester::HistogramTester() : m_histogramTester(adoptPtr(new base::HistogramTester)) { }
+HistogramTester::HistogramTester() : m_histogramTester(wrapUnique(new base::HistogramTester)) { }
 
 HistogramTester::~HistogramTester() { }
 
diff --git a/third_party/WebKit/Source/platform/testing/HistogramTester.h b/third_party/WebKit/Source/platform/testing/HistogramTester.h
index 5d2a54a..16ccc152 100644
--- a/third_party/WebKit/Source/platform/testing/HistogramTester.h
+++ b/third_party/WebKit/Source/platform/testing/HistogramTester.h
@@ -6,7 +6,7 @@
 #define HistogramTester_h
 
 #include "platform/Histogram.h"
-#include "wtf/OwnPtr.h"
+#include <memory>
 
 namespace base {
 class HistogramTester;
@@ -24,7 +24,7 @@
     void expectTotalCount(const std::string& name, base::HistogramBase::Count) const;
 
 private:
-    OwnPtr<base::HistogramTester> m_histogramTester;
+    std::unique_ptr<base::HistogramTester> m_histogramTester;
 };
 
 } // namespace blink
diff --git a/third_party/WebKit/Source/platform/testing/ImageDecodeBench.cpp b/third_party/WebKit/Source/platform/testing/ImageDecodeBench.cpp
index a14525d..83259b1 100644
--- a/third_party/WebKit/Source/platform/testing/ImageDecodeBench.cpp
+++ b/third_party/WebKit/Source/platform/testing/ImageDecodeBench.cpp
@@ -21,8 +21,9 @@
 #include "platform/SharedBuffer.h"
 #include "platform/image-decoders/ImageDecoder.h"
 #include "public/platform/Platform.h"
-#include "wtf/OwnPtr.h"
 #include "wtf/PassRefPtr.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 #if defined(_WIN32)
 #include <mmsystem.h>
@@ -246,7 +247,7 @@
     if (s.st_size <= 0)
         return SharedBuffer::create();
 
-    OwnPtr<unsigned char[]> buffer = adoptArrayPtr(new unsigned char[fileSize]);
+    std::unique_ptr<unsigned char[]> buffer = wrapArrayUnique(new unsigned char[fileSize]);
     if (fileSize != fread(buffer.get(), 1, fileSize, fp)) {
         fprintf(stderr, "Error reading file %s\n", fileName);
         exit(2);
@@ -258,7 +259,7 @@
 
 bool decodeImageData(SharedBuffer* data, bool colorCorrection, size_t packetSize)
 {
-    OwnPtr<ImageDecoder> decoder = ImageDecoder::create(*data,
+    std::unique_ptr<ImageDecoder> decoder = ImageDecoder::create(*data,
         ImageDecoder::AlphaPremultiplied, colorCorrection ?
             ImageDecoder::GammaAndColorProfileApplied : ImageDecoder::GammaAndColorProfileIgnored);
 
diff --git a/third_party/WebKit/Source/platform/testing/RunAllTests.cpp b/third_party/WebKit/Source/platform/testing/RunAllTests.cpp
index 2cd4f24..b84caf21 100644
--- a/third_party/WebKit/Source/platform/testing/RunAllTests.cpp
+++ b/third_party/WebKit/Source/platform/testing/RunAllTests.cpp
@@ -40,6 +40,7 @@
 #include "public/platform/Platform.h"
 #include "wtf/CryptographicallyRandomNumber.h"
 #include "wtf/CurrentTime.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/WTF.h"
 #include "wtf/allocator/Partitions.h"
 #include <base/bind.h>
@@ -49,6 +50,7 @@
 #include <base/test/launcher/unit_test_launcher.h>
 #include <base/test/test_suite.h>
 #include <cc/blink/web_compositor_support_impl.h>
+#include <memory>
 
 namespace {
 
@@ -80,7 +82,7 @@
 
     base::StatisticsRecorder::Initialize();
 
-    OwnPtr<DummyPlatform> platform = adoptPtr(new DummyPlatform);
+    std::unique_ptr<DummyPlatform> platform = wrapUnique(new DummyPlatform);
     blink::Platform::setCurrentPlatformForTesting(platform.get());
 
     WTF::Partitions::initialize(nullptr);
@@ -103,7 +105,7 @@
 
         mojo::edk::Init();
         base::TestIOThread testIoThread(base::TestIOThread::kAutoStart);
-        WTF::OwnPtr<mojo::edk::test::ScopedIPCSupport> ipcSupport(adoptPtr(new mojo::edk::test::ScopedIPCSupport(testIoThread.task_runner())));
+        std::unique_ptr<mojo::edk::test::ScopedIPCSupport> ipcSupport(wrapUnique(new mojo::edk::test::ScopedIPCSupport(testIoThread.task_runner())));
         result = base::LaunchUnitTests(argc, argv, base::Bind(runTestSuite, base::Unretained(&testSuite)));
 
         blink::ThreadState::detachMainThread();
diff --git a/third_party/WebKit/Source/platform/testing/TestPaintArtifact.cpp b/third_party/WebKit/Source/platform/testing/TestPaintArtifact.cpp
index a805e019..07878a9 100644
--- a/third_party/WebKit/Source/platform/testing/TestPaintArtifact.cpp
+++ b/third_party/WebKit/Source/platform/testing/TestPaintArtifact.cpp
@@ -14,6 +14,8 @@
 #include "third_party/skia/include/core/SkPicture.h"
 #include "third_party/skia/include/core/SkPictureRecorder.h"
 #include "wtf/Assertions.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
@@ -74,7 +76,7 @@
 
 TestPaintArtifact& TestPaintArtifact::rectDrawing(const FloatRect& bounds, Color color)
 {
-    OwnPtr<DummyRectClient> client = adoptPtr(new DummyRectClient(bounds, color));
+    std::unique_ptr<DummyRectClient> client = wrapUnique(new DummyRectClient(bounds, color));
     m_displayItemList.allocateAndConstruct<DrawingDisplayItem>(
         *client, DisplayItem::DrawingFirst, client->makePicture());
     m_dummyClients.append(std::move(client));
@@ -84,7 +86,7 @@
 TestPaintArtifact& TestPaintArtifact::foreignLayer(const FloatPoint& location, const IntSize& size, scoped_refptr<cc::Layer> layer)
 {
     FloatRect floatBounds(location, FloatSize(size));
-    OwnPtr<DummyRectClient> client = adoptPtr(new DummyRectClient(floatBounds, Color::transparent));
+    std::unique_ptr<DummyRectClient> client = wrapUnique(new DummyRectClient(floatBounds, Color::transparent));
     m_displayItemList.allocateAndConstruct<ForeignLayerDisplayItem>(
         *client, DisplayItem::ForeignLayerFirst, std::move(layer), location, size);
     m_dummyClients.append(std::move(client));
diff --git a/third_party/WebKit/Source/platform/testing/TestPaintArtifact.h b/third_party/WebKit/Source/platform/testing/TestPaintArtifact.h
index c8ff8a3..5392ee2 100644
--- a/third_party/WebKit/Source/platform/testing/TestPaintArtifact.h
+++ b/third_party/WebKit/Source/platform/testing/TestPaintArtifact.h
@@ -10,9 +10,9 @@
 #include "platform/graphics/paint/DisplayItemList.h"
 #include "platform/graphics/paint/PaintArtifact.h"
 #include "wtf/Allocator.h"
-#include "wtf/OwnPtr.h"
 #include "wtf/PassRefPtr.h"
 #include "wtf/Vector.h"
+#include <memory>
 
 namespace cc {
 class Layer;
@@ -55,7 +55,7 @@
 
 private:
     class DummyRectClient;
-    Vector<OwnPtr<DummyRectClient>> m_dummyClients;
+    Vector<std::unique_ptr<DummyRectClient>> m_dummyClients;
 
     // Exists if m_built is false.
     DisplayItemList m_displayItemList;
diff --git a/third_party/WebKit/Source/platform/testing/TestingPlatformSupport.cpp b/third_party/WebKit/Source/platform/testing/TestingPlatformSupport.cpp
index e8c7fbcf8..971224d 100644
--- a/third_party/WebKit/Source/platform/testing/TestingPlatformSupport.cpp
+++ b/third_party/WebKit/Source/platform/testing/TestingPlatformSupport.cpp
@@ -30,6 +30,9 @@
 
 #include "platform/testing/TestingPlatformSupport.h"
 
+#include "wtf/PtrUtil.h"
+#include <memory>
+
 namespace blink {
 
 TestingPlatformSupport::TestingPlatformSupport()
@@ -68,12 +71,12 @@
 class TestingPlatformMockWebTaskRunner : public WebTaskRunner {
     WTF_MAKE_NONCOPYABLE(TestingPlatformMockWebTaskRunner);
 public:
-    explicit TestingPlatformMockWebTaskRunner(Deque<OwnPtr<WebTaskRunner::Task>>* tasks) : m_tasks(tasks) { }
+    explicit TestingPlatformMockWebTaskRunner(Deque<std::unique_ptr<WebTaskRunner::Task>>* tasks) : m_tasks(tasks) { }
     ~TestingPlatformMockWebTaskRunner() override { }
 
     void postTask(const WebTraceLocation&, Task* task) override
     {
-        m_tasks->append(adoptPtr(task));
+        m_tasks->append(wrapUnique(task));
     }
 
     void postDelayedTask(const WebTraceLocation&, Task*, double delayMs) override
@@ -99,13 +102,13 @@
     }
 
 private:
-    Deque<OwnPtr<WebTaskRunner::Task>>* m_tasks; // NOT OWNED
+    Deque<std::unique_ptr<WebTaskRunner::Task>>* m_tasks; // NOT OWNED
 };
 
 // TestingPlatformMockScheduler definition:
 
 TestingPlatformMockScheduler::TestingPlatformMockScheduler()
-    : m_mockWebTaskRunner(adoptPtr(new TestingPlatformMockWebTaskRunner(&m_tasks))) { }
+    : m_mockWebTaskRunner(wrapUnique(new TestingPlatformMockWebTaskRunner(&m_tasks))) { }
 
 TestingPlatformMockScheduler::~TestingPlatformMockScheduler() { }
 
@@ -135,7 +138,7 @@
 class TestingPlatformMockWebThread : public WebThread {
     WTF_MAKE_NONCOPYABLE(TestingPlatformMockWebThread);
 public:
-    TestingPlatformMockWebThread() : m_mockWebScheduler(adoptPtr(new TestingPlatformMockScheduler)) { }
+    TestingPlatformMockWebThread() : m_mockWebScheduler(wrapUnique(new TestingPlatformMockScheduler)) { }
     ~TestingPlatformMockWebThread() override { }
 
     WebTaskRunner* getWebTaskRunner() override
@@ -160,17 +163,17 @@
     }
 
 private:
-    OwnPtr<TestingPlatformMockScheduler> m_mockWebScheduler;
+    std::unique_ptr<TestingPlatformMockScheduler> m_mockWebScheduler;
 };
 
 // TestingPlatformSupportWithMockScheduler definition:
 
 TestingPlatformSupportWithMockScheduler::TestingPlatformSupportWithMockScheduler()
-    : m_mockWebThread(adoptPtr(new TestingPlatformMockWebThread())) { }
+    : m_mockWebThread(wrapUnique(new TestingPlatformMockWebThread())) { }
 
 TestingPlatformSupportWithMockScheduler::TestingPlatformSupportWithMockScheduler(const Config& config)
     : TestingPlatformSupport(config)
-    , m_mockWebThread(adoptPtr(new TestingPlatformMockWebThread())) { }
+    , m_mockWebThread(wrapUnique(new TestingPlatformMockWebThread())) { }
 
 TestingPlatformSupportWithMockScheduler::~TestingPlatformSupportWithMockScheduler() { }
 
diff --git a/third_party/WebKit/Source/platform/testing/TestingPlatformSupport.h b/third_party/WebKit/Source/platform/testing/TestingPlatformSupport.h
index 9cc309c..bc5b15b 100644
--- a/third_party/WebKit/Source/platform/testing/TestingPlatformSupport.h
+++ b/third_party/WebKit/Source/platform/testing/TestingPlatformSupport.h
@@ -37,6 +37,7 @@
 #include "public/platform/WebScheduler.h"
 #include "public/platform/WebThread.h"
 #include "wtf/Vector.h"
+#include <memory>
 
 namespace blink {
 
@@ -74,8 +75,8 @@
     void onNavigationStarted() override { }
 
 private:
-    WTF::Deque<OwnPtr<WebTaskRunner::Task>> m_tasks;
-    OwnPtr<TestingPlatformMockWebTaskRunner> m_mockWebTaskRunner;
+    WTF::Deque<std::unique_ptr<WebTaskRunner::Task>> m_tasks;
+    std::unique_ptr<TestingPlatformMockWebTaskRunner> m_mockWebTaskRunner;
 };
 
 class TestingPlatformSupport : public Platform {
@@ -112,7 +113,7 @@
     TestingPlatformMockScheduler* mockWebScheduler();
 
 protected:
-    OwnPtr<TestingPlatformMockWebThread> m_mockWebThread;
+    std::unique_ptr<TestingPlatformMockWebThread> m_mockWebThread;
 };
 
 } // namespace blink
diff --git a/third_party/WebKit/Source/platform/testing/WebLayerTreeViewImplForTesting.h b/third_party/WebKit/Source/platform/testing/WebLayerTreeViewImplForTesting.h
index 39f943af..5cd041c 100644
--- a/third_party/WebKit/Source/platform/testing/WebLayerTreeViewImplForTesting.h
+++ b/third_party/WebKit/Source/platform/testing/WebLayerTreeViewImplForTesting.h
@@ -9,8 +9,6 @@
 #include "cc/trees/layer_tree_host_client.h"
 #include "cc/trees/layer_tree_host_single_thread_client.h"
 #include "public/platform/WebLayerTreeView.h"
-#include "wtf/PassOwnPtr.h"
-
 #include <memory>
 
 namespace cc {
diff --git a/third_party/WebKit/Source/platform/testing/weburl_loader_mock.cc b/third_party/WebKit/Source/platform/testing/weburl_loader_mock.cc
index 35ff1445..3984742 100644
--- a/third_party/WebKit/Source/platform/testing/weburl_loader_mock.cc
+++ b/third_party/WebKit/Source/platform/testing/weburl_loader_mock.cc
@@ -9,14 +9,13 @@
 #include "public/platform/WebData.h"
 #include "public/platform/WebURLError.h"
 #include "public/platform/WebURLLoaderClient.h"
-#include "wtf/PassOwnPtr.h"
 
 namespace blink {
 
 WebURLLoaderMock::WebURLLoaderMock(WebURLLoaderMockFactoryImpl* factory,
                                    WebURLLoader* default_loader)
     : factory_(factory),
-      default_loader_(adoptPtr(default_loader)),
+      default_loader_(wrapUnique(default_loader)),
       weak_factory_(this) {
 }
 
@@ -35,9 +34,9 @@
 
   // If no delegate is provided then create an empty one. The default behavior
   // will just proxy to the client.
-  OwnPtr<WebURLLoaderTestDelegate> default_delegate;
+  std::unique_ptr<WebURLLoaderTestDelegate> default_delegate;
   if (!delegate) {
-    default_delegate = adoptPtr(new WebURLLoaderTestDelegate());
+    default_delegate = wrapUnique(new WebURLLoaderTestDelegate());
     delegate = default_delegate.get();
   }
 
diff --git a/third_party/WebKit/Source/platform/testing/weburl_loader_mock.h b/third_party/WebKit/Source/platform/testing/weburl_loader_mock.h
index b796266..8978b77 100644
--- a/third_party/WebKit/Source/platform/testing/weburl_loader_mock.h
+++ b/third_party/WebKit/Source/platform/testing/weburl_loader_mock.h
@@ -7,8 +7,8 @@
 
 #include "base/macros.h"
 #include "public/platform/WebURLLoader.h"
-#include "wtf/OwnPtr.h"
 #include "wtf/WeakPtr.h"
+#include <memory>
 
 namespace blink {
 
@@ -61,7 +61,7 @@
  private:
   WebURLLoaderMockFactoryImpl* factory_ = nullptr;
   WebURLLoaderClient* client_ = nullptr;
-  OwnPtr<WebURLLoader> default_loader_;
+  std::unique_ptr<WebURLLoader> default_loader_;
   bool using_default_loader_ = false;
   bool is_deferred_ = false;
 
diff --git a/third_party/WebKit/Source/platform/text/BidiResolverTest.cpp b/third_party/WebKit/Source/platform/text/BidiResolverTest.cpp
index e531959..993ad67 100644
--- a/third_party/WebKit/Source/platform/text/BidiResolverTest.cpp
+++ b/third_party/WebKit/Source/platform/text/BidiResolverTest.cpp
@@ -33,7 +33,6 @@
 #include "platform/text/BidiTestHarness.h"
 #include "platform/text/TextRunIterator.h"
 #include "testing/gtest/include/gtest/gtest.h"
-#include "wtf/OwnPtr.h"
 #include <fstream>
 
 namespace blink {
diff --git a/third_party/WebKit/Source/platform/text/LocaleICU.cpp b/third_party/WebKit/Source/platform/text/LocaleICU.cpp
index 7bed850a..300416e 100644
--- a/third_party/WebKit/Source/platform/text/LocaleICU.cpp
+++ b/third_party/WebKit/Source/platform/text/LocaleICU.cpp
@@ -30,20 +30,21 @@
 
 #include "platform/text/LocaleICU.h"
 
+#include "wtf/DateMath.h"
+#include "wtf/PtrUtil.h"
+#include "wtf/text/StringBuffer.h"
+#include "wtf/text/StringBuilder.h"
+#include <limits>
+#include <memory>
 #include <unicode/udatpg.h>
 #include <unicode/udisplaycontext.h>
 #include <unicode/uloc.h>
-#include <limits>
-#include "wtf/DateMath.h"
-#include "wtf/PassOwnPtr.h"
-#include "wtf/text/StringBuffer.h"
-#include "wtf/text/StringBuilder.h"
 
 using namespace icu;
 
 namespace blink {
 
-PassOwnPtr<Locale> Locale::create(const String& locale)
+std::unique_ptr<Locale> Locale::create(const String& locale)
 {
     return LocaleICU::create(locale.utf8().data());
 }
@@ -69,9 +70,9 @@
     udat_close(m_shortTimeFormat);
 }
 
-PassOwnPtr<LocaleICU> LocaleICU::create(const char* localeString)
+std::unique_ptr<LocaleICU> LocaleICU::create(const char* localeString)
 {
-    return adoptPtr(new LocaleICU(localeString));
+    return wrapUnique(new LocaleICU(localeString));
 }
 
 String LocaleICU::decimalSymbol(UNumberFormatSymbol symbol)
@@ -180,14 +181,14 @@
     return String::adopt(buffer);
 }
 
-PassOwnPtr<Vector<String>> LocaleICU::createLabelVector(const UDateFormat* dateFormat, UDateFormatSymbolType type, int32_t startIndex, int32_t size)
+std::unique_ptr<Vector<String>> LocaleICU::createLabelVector(const UDateFormat* dateFormat, UDateFormatSymbolType type, int32_t startIndex, int32_t size)
 {
     if (!dateFormat)
-        return PassOwnPtr<Vector<String>>();
+        return std::unique_ptr<Vector<String>>();
     if (udat_countSymbols(dateFormat, type) != startIndex + size)
-        return PassOwnPtr<Vector<String>>();
+        return std::unique_ptr<Vector<String>>();
 
-    OwnPtr<Vector<String>> labels = adoptPtr(new Vector<String>());
+    std::unique_ptr<Vector<String>> labels = wrapUnique(new Vector<String>());
     labels->reserveCapacity(size);
     bool isStandAloneMonth = (type == UDAT_STANDALONE_MONTHS) || (type == UDAT_STANDALONE_SHORT_MONTHS);
     for (int32_t i = 0; i < size; ++i) {
@@ -201,7 +202,7 @@
             length = udat_getSymbols(dateFormat, type, startIndex + i, 0, 0, &status);
         }
         if (status != U_BUFFER_OVERFLOW_ERROR)
-            return PassOwnPtr<Vector<String>>();
+            return std::unique_ptr<Vector<String>>();
         StringBuffer<UChar> buffer(length);
         status = U_ZERO_ERROR;
         if (isStandAloneMonth) {
@@ -210,15 +211,15 @@
             udat_getSymbols(dateFormat, type, startIndex + i, buffer.characters(), length, &status);
         }
         if (U_FAILURE(status))
-            return PassOwnPtr<Vector<String>>();
+            return std::unique_ptr<Vector<String>>();
         labels->append(String::adopt(buffer));
     }
     return labels;
 }
 
-static PassOwnPtr<Vector<String>> createFallbackWeekDayShortLabels()
+static std::unique_ptr<Vector<String>> createFallbackWeekDayShortLabels()
 {
-    OwnPtr<Vector<String>> labels = adoptPtr(new Vector<String>());
+    std::unique_ptr<Vector<String>> labels = wrapUnique(new Vector<String>());
     labels->reserveCapacity(7);
     labels->append("Sun");
     labels->append("Mon");
@@ -247,9 +248,9 @@
         m_weekDayShortLabels = createFallbackWeekDayShortLabels();
 }
 
-static PassOwnPtr<Vector<String>> createFallbackMonthLabels()
+static std::unique_ptr<Vector<String>> createFallbackMonthLabels()
 {
-    OwnPtr<Vector<String>> labels = adoptPtr(new Vector<String>());
+    std::unique_ptr<Vector<String>> labels = wrapUnique(new Vector<String>());
     labels->reserveCapacity(WTF_ARRAY_LENGTH(WTF::monthFullName));
     for (unsigned i = 0; i < WTF_ARRAY_LENGTH(WTF::monthFullName); ++i)
         labels->append(WTF::monthFullName[i]);
@@ -287,9 +288,9 @@
     return uloc_getCharacterOrientation(m_locale.data(), &status) == ULOC_LAYOUT_RTL;
 }
 
-static PassOwnPtr<Vector<String>> createFallbackAMPMLabels()
+static std::unique_ptr<Vector<String>> createFallbackAMPMLabels()
 {
-    OwnPtr<Vector<String>> labels = adoptPtr(new Vector<String>());
+    std::unique_ptr<Vector<String>> labels = wrapUnique(new Vector<String>());
     labels->reserveCapacity(2);
     labels->append("AM");
     labels->append("PM");
@@ -318,7 +319,7 @@
     m_dateTimeFormatWithoutSeconds = getDateFormatPattern(dateTimeFormatWithoutSeconds);
     udat_close(dateTimeFormatWithoutSeconds);
 
-    OwnPtr<Vector<String>> timeAMPMLabels = createLabelVector(m_mediumTimeFormat, UDAT_AM_PMS, UCAL_AM, 2);
+    std::unique_ptr<Vector<String>> timeAMPMLabels = createLabelVector(m_mediumTimeFormat, UDAT_AM_PMS, UCAL_AM, 2);
     if (!timeAMPMLabels)
         timeAMPMLabels = createFallbackAMPMLabels();
     m_timeAMPMLabels = *timeAMPMLabels;
@@ -405,7 +406,7 @@
     if (!m_shortMonthLabels.isEmpty())
         return m_shortMonthLabels;
     if (initializeShortDateFormat()) {
-        if (OwnPtr<Vector<String>> labels = createLabelVector(m_shortDateFormat, UDAT_SHORT_MONTHS, UCAL_JANUARY, 12)) {
+        if (std::unique_ptr<Vector<String>> labels = createLabelVector(m_shortDateFormat, UDAT_SHORT_MONTHS, UCAL_JANUARY, 12)) {
             m_shortMonthLabels = *labels;
             return m_shortMonthLabels;
         }
@@ -422,7 +423,7 @@
         return m_standAloneMonthLabels;
     UDateFormat* monthFormatter = openDateFormatForStandAloneMonthLabels(false);
     if (monthFormatter) {
-        if (OwnPtr<Vector<String>> labels = createLabelVector(monthFormatter, UDAT_STANDALONE_MONTHS, UCAL_JANUARY, 12)) {
+        if (std::unique_ptr<Vector<String>> labels = createLabelVector(monthFormatter, UDAT_STANDALONE_MONTHS, UCAL_JANUARY, 12)) {
             m_standAloneMonthLabels = *labels;
             udat_close(monthFormatter);
             return m_standAloneMonthLabels;
@@ -439,7 +440,7 @@
         return m_shortStandAloneMonthLabels;
     UDateFormat* monthFormatter = openDateFormatForStandAloneMonthLabels(true);
     if (monthFormatter) {
-        if (OwnPtr<Vector<String>> labels = createLabelVector(monthFormatter, UDAT_STANDALONE_SHORT_MONTHS, UCAL_JANUARY, 12)) {
+        if (std::unique_ptr<Vector<String>> labels = createLabelVector(monthFormatter, UDAT_STANDALONE_SHORT_MONTHS, UCAL_JANUARY, 12)) {
             m_shortStandAloneMonthLabels = *labels;
             udat_close(monthFormatter);
             return m_shortStandAloneMonthLabels;
diff --git a/third_party/WebKit/Source/platform/text/LocaleICU.h b/third_party/WebKit/Source/platform/text/LocaleICU.h
index 9cc7574..5c7c2c6 100644
--- a/third_party/WebKit/Source/platform/text/LocaleICU.h
+++ b/third_party/WebKit/Source/platform/text/LocaleICU.h
@@ -31,14 +31,14 @@
 #ifndef LocaleICU_h
 #define LocaleICU_h
 
-#include <unicode/udat.h>
-#include <unicode/unum.h>
 #include "platform/DateComponents.h"
 #include "platform/text/PlatformLocale.h"
 #include "wtf/Forward.h"
-#include "wtf/OwnPtr.h"
 #include "wtf/text/CString.h"
 #include "wtf/text/WTFString.h"
+#include <memory>
+#include <unicode/udat.h>
+#include <unicode/unum.h>
 
 namespace blink {
 
@@ -46,7 +46,7 @@
 // and LocalizedNumberICUTest.cpp.
 class PLATFORM_EXPORT LocaleICU : public Locale {
 public:
-    static PassOwnPtr<LocaleICU> create(const char* localeString);
+    static std::unique_ptr<LocaleICU> create(const char* localeString);
     ~LocaleICU() override;
 
     const Vector<String>& weekDayShortLabels() override;
@@ -80,7 +80,7 @@
 
     void initializeCalendar();
 
-    PassOwnPtr<Vector<String>> createLabelVector(const UDateFormat*, UDateFormatSymbolType, int32_t startIndex, int32_t size);
+    std::unique_ptr<Vector<String>> createLabelVector(const UDateFormat*, UDateFormatSymbolType, int32_t startIndex, int32_t size);
     void initializeDateTimeFormat();
 
     CString m_locale;
@@ -89,9 +89,9 @@
     bool m_didCreateDecimalFormat;
     bool m_didCreateShortDateFormat;
 
-    OwnPtr<Vector<String>> m_weekDayShortLabels;
+    std::unique_ptr<Vector<String>> m_weekDayShortLabels;
     unsigned m_firstDayOfWeek;
-    OwnPtr<Vector<String>> m_monthLabels;
+    std::unique_ptr<Vector<String>> m_monthLabels;
     String m_dateFormat;
     String m_monthFormat;
     String m_shortMonthFormat;
diff --git a/third_party/WebKit/Source/platform/text/LocaleICUTest.cpp b/third_party/WebKit/Source/platform/text/LocaleICUTest.cpp
index 256467bc..ff5e2b5 100644
--- a/third_party/WebKit/Source/platform/text/LocaleICUTest.cpp
+++ b/third_party/WebKit/Source/platform/text/LocaleICUTest.cpp
@@ -31,8 +31,8 @@
 #include "platform/text/LocaleICU.h"
 
 #include "testing/gtest/include/gtest/gtest.h"
-#include "wtf/PassOwnPtr.h"
 #include "wtf/text/StringBuilder.h"
+#include <memory>
 #include <unicode/uvernum.h>
 
 namespace blink {
@@ -89,49 +89,49 @@
 
     String monthFormat(const char* localeString)
     {
-        OwnPtr<LocaleICU> locale = LocaleICU::create(localeString);
+        std::unique_ptr<LocaleICU> locale = LocaleICU::create(localeString);
         return locale->monthFormat();
     }
 
     String localizedDateFormatText(const char* localeString)
     {
-        OwnPtr<LocaleICU> locale = LocaleICU::create(localeString);
+        std::unique_ptr<LocaleICU> locale = LocaleICU::create(localeString);
         return locale->timeFormat();
     }
 
     String localizedShortDateFormatText(const char* localeString)
     {
-        OwnPtr<LocaleICU> locale = LocaleICU::create(localeString);
+        std::unique_ptr<LocaleICU> locale = LocaleICU::create(localeString);
         return locale->shortTimeFormat();
     }
 
     String shortMonthLabel(const char* localeString, unsigned index)
     {
-        OwnPtr<LocaleICU> locale = LocaleICU::create(localeString);
+        std::unique_ptr<LocaleICU> locale = LocaleICU::create(localeString);
         return locale->shortMonthLabels()[index];
     }
 
     String shortStandAloneMonthLabel(const char* localeString, unsigned index)
     {
-        OwnPtr<LocaleICU> locale = LocaleICU::create(localeString);
+        std::unique_ptr<LocaleICU> locale = LocaleICU::create(localeString);
         return locale->shortStandAloneMonthLabels()[index];
     }
 
     String standAloneMonthLabel(const char* localeString, unsigned index)
     {
-        OwnPtr<LocaleICU> locale = LocaleICU::create(localeString);
+        std::unique_ptr<LocaleICU> locale = LocaleICU::create(localeString);
         return locale->standAloneMonthLabels()[index];
     }
 
     Labels timeAMPMLabels(const char* localeString)
     {
-        OwnPtr<LocaleICU> locale = LocaleICU::create(localeString);
+        std::unique_ptr<LocaleICU> locale = LocaleICU::create(localeString);
         return Labels(locale->timeAMPMLabels());
     }
 
     bool isRTL(const char* localeString)
     {
-        OwnPtr<LocaleICU> locale = LocaleICU::create(localeString);
+        std::unique_ptr<LocaleICU> locale = LocaleICU::create(localeString);
         return locale->isRTL();
     }
 };
@@ -237,7 +237,7 @@
 
 static String testDecimalSeparator(const AtomicString& localeIdentifier)
 {
-    OwnPtr<Locale> locale = Locale::create(localeIdentifier);
+    std::unique_ptr<Locale> locale = Locale::create(localeIdentifier);
     return locale->localizedDecimalSeparator();
 }
 
@@ -249,7 +249,7 @@
 
 void testNumberIsReversible(const AtomicString& localeIdentifier, const char* original, const char* shouldHave = 0)
 {
-    OwnPtr<Locale> locale = Locale::create(localeIdentifier);
+    std::unique_ptr<Locale> locale = Locale::create(localeIdentifier);
     String localized = locale->convertToLocalizedNumber(original);
     if (shouldHave)
         EXPECT_TRUE(localized.contains(shouldHave));
diff --git a/third_party/WebKit/Source/platform/text/LocaleMac.h b/third_party/WebKit/Source/platform/text/LocaleMac.h
index 8a8a563..ec3a367 100644
--- a/third_party/WebKit/Source/platform/text/LocaleMac.h
+++ b/third_party/WebKit/Source/platform/text/LocaleMac.h
@@ -36,6 +36,7 @@
 #include "wtf/RetainPtr.h"
 #include "wtf/Vector.h"
 #include "wtf/text/WTFString.h"
+#include <memory>
 
 OBJC_CLASS NSCalendar;
 OBJC_CLASS NSDateFormatter;
@@ -45,8 +46,8 @@
 
 class PLATFORM_EXPORT LocaleMac : public Locale {
 public:
-    static PassOwnPtr<LocaleMac> create(const String&);
-    static PassOwnPtr<LocaleMac> create(NSLocale*);
+    static std::unique_ptr<LocaleMac> create(const String&);
+    static std::unique_ptr<LocaleMac> create(NSLocale*);
     ~LocaleMac();
 
     const Vector<String>& weekDayShortLabels() override;
diff --git a/third_party/WebKit/Source/platform/text/LocaleMac.mm b/third_party/WebKit/Source/platform/text/LocaleMac.mm
index 39c762f..9a225b91 100644
--- a/third_party/WebKit/Source/platform/text/LocaleMac.mm
+++ b/third_party/WebKit/Source/platform/text/LocaleMac.mm
@@ -35,9 +35,10 @@
 #include "platform/Language.h"
 #include "platform/LayoutTestSupport.h"
 #include "wtf/DateMath.h"
-#include "wtf/PassOwnPtr.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/RetainPtr.h"
 #include "wtf/text/StringBuilder.h"
+#include <memory>
 
 namespace blink {
 
@@ -64,7 +65,7 @@
     return RetainPtr<NSLocale>(AdoptNS, [[NSLocale alloc] initWithLocaleIdentifier:locale]);
 }
 
-PassOwnPtr<Locale> Locale::create(const String& locale)
+std::unique_ptr<Locale> Locale::create(const String& locale)
 {
     return LocaleMac::create(determineLocale(locale).get());
 }
@@ -97,15 +98,15 @@
 {
 }
 
-PassOwnPtr<LocaleMac> LocaleMac::create(const String& localeIdentifier)
+std::unique_ptr<LocaleMac> LocaleMac::create(const String& localeIdentifier)
 {
     RetainPtr<NSLocale> locale = [[NSLocale alloc] initWithLocaleIdentifier:localeIdentifier];
-    return adoptPtr(new LocaleMac(locale.get()));
+    return wrapUnique(new LocaleMac(locale.get()));
 }
 
-PassOwnPtr<LocaleMac> LocaleMac::create(NSLocale* locale)
+std::unique_ptr<LocaleMac> LocaleMac::create(NSLocale* locale)
 {
-    return adoptPtr(new LocaleMac(locale));
+    return wrapUnique(new LocaleMac(locale));
 }
 
 RetainPtr<NSDateFormatter> LocaleMac::shortDateFormatter()
diff --git a/third_party/WebKit/Source/platform/text/LocaleMacTest.cpp b/third_party/WebKit/Source/platform/text/LocaleMacTest.cpp
index 06fc799d..60c9f7e 100644
--- a/third_party/WebKit/Source/platform/text/LocaleMacTest.cpp
+++ b/third_party/WebKit/Source/platform/text/LocaleMacTest.cpp
@@ -31,8 +31,8 @@
 #include "testing/gtest/include/gtest/gtest.h"
 #include "wtf/DateMath.h"
 #include "wtf/MathExtras.h"
-#include "wtf/PassOwnPtr.h"
 #include "wtf/text/CString.h"
+#include <memory>
 
 namespace blink {
 
@@ -80,7 +80,7 @@
 
     String formatWeek(const String& localeString, const String& isoString)
     {
-        OwnPtr<LocaleMac> locale = LocaleMac::create(localeString);
+        std::unique_ptr<LocaleMac> locale = LocaleMac::create(localeString);
         DateComponents date;
         unsigned end;
         date.parseWeek(isoString, 0, end);
@@ -89,7 +89,7 @@
 
     String formatMonth(const String& localeString, const String& isoString, bool useShortFormat)
     {
-        OwnPtr<LocaleMac> locale = LocaleMac::create(localeString);
+        std::unique_ptr<LocaleMac> locale = LocaleMac::create(localeString);
         DateComponents date;
         unsigned end;
         date.parseMonth(isoString, 0, end);
@@ -98,85 +98,85 @@
 
     String formatDate(const String& localeString, int year, int month, int day)
     {
-        OwnPtr<LocaleMac> locale = LocaleMac::create(localeString);
+        std::unique_ptr<LocaleMac> locale = LocaleMac::create(localeString);
         return locale->formatDateTime(getDateComponents(year, month, day));
     }
 
     String formatTime(const String& localeString, int hour, int minute, int second, int millisecond, bool useShortFormat)
     {
-        OwnPtr<LocaleMac> locale = LocaleMac::create(localeString);
+        std::unique_ptr<LocaleMac> locale = LocaleMac::create(localeString);
         return locale->formatDateTime(getTimeComponents(hour, minute, second, millisecond), (useShortFormat ? Locale::FormatTypeShort : Locale::FormatTypeMedium));
     }
 
     unsigned firstDayOfWeek(const String& localeString)
     {
-        OwnPtr<LocaleMac> locale = LocaleMac::create(localeString);
+        std::unique_ptr<LocaleMac> locale = LocaleMac::create(localeString);
         return locale->firstDayOfWeek();
     }
 
     String monthLabel(const String& localeString, unsigned index)
     {
-        OwnPtr<LocaleMac> locale = LocaleMac::create(localeString);
+        std::unique_ptr<LocaleMac> locale = LocaleMac::create(localeString);
         return locale->monthLabels()[index];
     }
 
     String weekDayShortLabel(const String& localeString, unsigned index)
     {
-        OwnPtr<LocaleMac> locale = LocaleMac::create(localeString);
+        std::unique_ptr<LocaleMac> locale = LocaleMac::create(localeString);
         return locale->weekDayShortLabels()[index];
     }
 
     bool isRTL(const String& localeString)
     {
-        OwnPtr<LocaleMac> locale = LocaleMac::create(localeString);
+        std::unique_ptr<LocaleMac> locale = LocaleMac::create(localeString);
         return locale->isRTL();
     }
 
     String monthFormat(const String& localeString)
     {
-        OwnPtr<LocaleMac> locale = LocaleMac::create(localeString);
+        std::unique_ptr<LocaleMac> locale = LocaleMac::create(localeString);
         return locale->monthFormat();
     }
 
     String timeFormat(const String& localeString)
     {
-        OwnPtr<LocaleMac> locale = LocaleMac::create(localeString);
+        std::unique_ptr<LocaleMac> locale = LocaleMac::create(localeString);
         return locale->timeFormat();
     }
 
     String shortTimeFormat(const String& localeString)
     {
-        OwnPtr<LocaleMac> locale = LocaleMac::create(localeString);
+        std::unique_ptr<LocaleMac> locale = LocaleMac::create(localeString);
         return locale->shortTimeFormat();
     }
 
     String shortMonthLabel(const String& localeString, unsigned index)
     {
-        OwnPtr<LocaleMac> locale = LocaleMac::create(localeString);
+        std::unique_ptr<LocaleMac> locale = LocaleMac::create(localeString);
         return locale->shortMonthLabels()[index];
     }
 
     String standAloneMonthLabel(const String& localeString, unsigned index)
     {
-        OwnPtr<LocaleMac> locale = LocaleMac::create(localeString);
+        std::unique_ptr<LocaleMac> locale = LocaleMac::create(localeString);
         return locale->standAloneMonthLabels()[index];
     }
 
     String shortStandAloneMonthLabel(const String& localeString, unsigned index)
     {
-        OwnPtr<LocaleMac> locale = LocaleMac::create(localeString);
+        std::unique_ptr<LocaleMac> locale = LocaleMac::create(localeString);
         return locale->shortStandAloneMonthLabels()[index];
     }
 
     String timeAMPMLabel(const String& localeString, unsigned index)
     {
-        OwnPtr<LocaleMac> locale = LocaleMac::create(localeString);
+        std::unique_ptr<LocaleMac> locale = LocaleMac::create(localeString);
         return locale->timeAMPMLabels()[index];
     }
 
     String decimalSeparator(const String& localeString)
     {
-        OwnPtr<LocaleMac> locale = LocaleMac::create(localeString);
+        std::unique_ptr<LocaleMac> locale = LocaleMac::create(localeString);
         return locale->localizedDecimalSeparator();
     }
 };
@@ -361,7 +361,7 @@
 
 static void testNumberIsReversible(const AtomicString& localeString, const char* original, const char* shouldHave = 0)
 {
-    OwnPtr<LocaleMac> locale = LocaleMac::create(localeString);
+    std::unique_ptr<LocaleMac> locale = LocaleMac::create(localeString);
     String localized = locale->convertToLocalizedNumber(original);
     if (shouldHave)
         EXPECT_TRUE(localized.contains(shouldHave));
diff --git a/third_party/WebKit/Source/platform/text/LocaleWin.cpp b/third_party/WebKit/Source/platform/text/LocaleWin.cpp
index 35a6ec7e..cdbd1b7 100644
--- a/third_party/WebKit/Source/platform/text/LocaleWin.cpp
+++ b/third_party/WebKit/Source/platform/text/LocaleWin.cpp
@@ -30,7 +30,6 @@
 
 #include "platform/text/LocaleWin.h"
 
-#include <limits>
 #include "platform/DateComponents.h"
 #include "platform/Language.h"
 #include "platform/LayoutTestSupport.h"
@@ -38,11 +37,12 @@
 #include "wtf/CurrentTime.h"
 #include "wtf/DateMath.h"
 #include "wtf/HashMap.h"
-#include "wtf/OwnPtr.h"
-#include "wtf/PassOwnPtr.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/text/StringBuffer.h"
 #include "wtf/text/StringBuilder.h"
 #include "wtf/text/StringHash.h"
+#include <limits>
+#include <memory>
 
 namespace blink {
 
@@ -76,7 +76,7 @@
     return lcid;
 }
 
-PassOwnPtr<Locale> Locale::create(const String& locale)
+std::unique_ptr<Locale> Locale::create(const String& locale)
 {
     // Whether the default settings for the locale should be used, ignoring user overrides.
     bool defaultsForLocale = LayoutTestSupport::isRunningLayoutTest();
@@ -95,9 +95,9 @@
     m_firstDayOfWeek = (value + 1) % 7;
 }
 
-PassOwnPtr<LocaleWin> LocaleWin::create(LCID lcid, bool defaultsForLocale)
+std::unique_ptr<LocaleWin> LocaleWin::create(LCID lcid, bool defaultsForLocale)
 {
-    return adoptPtr(new LocaleWin(lcid, defaultsForLocale));
+    return wrapUnique(new LocaleWin(lcid, defaultsForLocale));
 }
 
 LocaleWin::~LocaleWin()
diff --git a/third_party/WebKit/Source/platform/text/LocaleWin.h b/third_party/WebKit/Source/platform/text/LocaleWin.h
index 373a1fb..485e34bf 100644
--- a/third_party/WebKit/Source/platform/text/LocaleWin.h
+++ b/third_party/WebKit/Source/platform/text/LocaleWin.h
@@ -31,17 +31,18 @@
 #ifndef LocaleWin_h
 #define LocaleWin_h
 
-#include <windows.h>
 #include "platform/text/PlatformLocale.h"
 #include "wtf/Forward.h"
 #include "wtf/Vector.h"
 #include "wtf/text/WTFString.h"
+#include <memory>
+#include <windows.h>
 
 namespace blink {
 
 class PLATFORM_EXPORT LocaleWin : public Locale {
 public:
-    static PassOwnPtr<LocaleWin> create(LCID, bool defaultsForLocale);
+    static std::unique_ptr<LocaleWin> create(LCID, bool defaultsForLocale);
     ~LocaleWin();
     const Vector<String>& weekDayShortLabels() override;
     unsigned firstDayOfWeek() override;
diff --git a/third_party/WebKit/Source/platform/text/LocaleWinTest.cpp b/third_party/WebKit/Source/platform/text/LocaleWinTest.cpp
index 898fe5b..70930c0 100644
--- a/third_party/WebKit/Source/platform/text/LocaleWinTest.cpp
+++ b/third_party/WebKit/Source/platform/text/LocaleWinTest.cpp
@@ -34,8 +34,8 @@
 #include "testing/gtest/include/gtest/gtest.h"
 #include "wtf/DateMath.h"
 #include "wtf/MathExtras.h"
-#include "wtf/PassOwnPtr.h"
 #include "wtf/text/CString.h"
+#include <memory>
 
 namespace blink {
 
@@ -84,67 +84,67 @@
 
     String formatDate(LCID lcid, int year, int month, int day)
     {
-        OwnPtr<LocaleWin> locale = LocaleWin::create(lcid, true /* defaultsForLocale */);
+        std::unique_ptr<LocaleWin> locale = LocaleWin::create(lcid, true /* defaultsForLocale */);
         return locale->formatDateTime(getDateComponents(year, month, day));
     }
 
     unsigned firstDayOfWeek(LCID lcid)
     {
-        OwnPtr<LocaleWin> locale = LocaleWin::create(lcid, true /* defaultsForLocale */);
+        std::unique_ptr<LocaleWin> locale = LocaleWin::create(lcid, true /* defaultsForLocale */);
         return locale->firstDayOfWeek();
     }
 
     String monthLabel(LCID lcid, unsigned index)
     {
-        OwnPtr<LocaleWin> locale = LocaleWin::create(lcid, true /* defaultsForLocale */);
+        std::unique_ptr<LocaleWin> locale = LocaleWin::create(lcid, true /* defaultsForLocale */);
         return locale->monthLabels()[index];
     }
 
     String weekDayShortLabel(LCID lcid, unsigned index)
     {
-        OwnPtr<LocaleWin> locale = LocaleWin::create(lcid, true /* defaultsForLocale */);
+        std::unique_ptr<LocaleWin> locale = LocaleWin::create(lcid, true /* defaultsForLocale */);
         return locale->weekDayShortLabels()[index];
     }
 
     bool isRTL(LCID lcid)
     {
-        OwnPtr<LocaleWin> locale = LocaleWin::create(lcid, true /* defaultsForLocale */);
+        std::unique_ptr<LocaleWin> locale = LocaleWin::create(lcid, true /* defaultsForLocale */);
         return locale->isRTL();
     }
 
     String monthFormat(LCID lcid)
     {
-        OwnPtr<LocaleWin> locale = LocaleWin::create(lcid, true /* defaultsForLocale */);
+        std::unique_ptr<LocaleWin> locale = LocaleWin::create(lcid, true /* defaultsForLocale */);
         return locale->monthFormat();
     }
 
     String timeFormat(LCID lcid)
     {
-        OwnPtr<LocaleWin> locale = LocaleWin::create(lcid, true /* defaultsForLocale */);
+        std::unique_ptr<LocaleWin> locale = LocaleWin::create(lcid, true /* defaultsForLocale */);
         return locale->timeFormat();
     }
 
     String shortTimeFormat(LCID lcid)
     {
-        OwnPtr<LocaleWin> locale = LocaleWin::create(lcid, true /* defaultsForLocale */);
+        std::unique_ptr<LocaleWin> locale = LocaleWin::create(lcid, true /* defaultsForLocale */);
         return locale->shortTimeFormat();
     }
 
     String shortMonthLabel(LCID lcid, unsigned index)
     {
-        OwnPtr<LocaleWin> locale = LocaleWin::create(lcid, true /* defaultsForLocale */);
+        std::unique_ptr<LocaleWin> locale = LocaleWin::create(lcid, true /* defaultsForLocale */);
         return locale->shortMonthLabels()[index];
     }
 
     String timeAMPMLabel(LCID lcid, unsigned index)
     {
-        OwnPtr<LocaleWin> locale = LocaleWin::create(lcid, true /* defaultsForLocale */);
+        std::unique_ptr<LocaleWin> locale = LocaleWin::create(lcid, true /* defaultsForLocale */);
         return locale->timeAMPMLabels()[index];
     }
 
     String decimalSeparator(LCID lcid)
     {
-        OwnPtr<LocaleWin> locale = LocaleWin::create(lcid, true /* defaultsForLocale */);
+        std::unique_ptr<LocaleWin> locale = LocaleWin::create(lcid, true /* defaultsForLocale */);
         return locale->localizedDecimalSeparator();
     }
 };
@@ -261,7 +261,7 @@
 
 static void testNumberIsReversible(LCID lcid, const char* original, const char* shouldHave = 0)
 {
-    OwnPtr<LocaleWin> locale = LocaleWin::create(lcid, true /* defaultsForLocale */);
+    std::unique_ptr<LocaleWin> locale = LocaleWin::create(lcid, true /* defaultsForLocale */);
     String localized = locale->convertToLocalizedNumber(original);
     if (shouldHave)
         EXPECT_TRUE(localized.contains(shouldHave));
diff --git a/third_party/WebKit/Source/platform/text/PlatformLocale.cpp b/third_party/WebKit/Source/platform/text/PlatformLocale.cpp
index 3641a7c7..d4a0f56 100644
--- a/third_party/WebKit/Source/platform/text/PlatformLocale.cpp
+++ b/third_party/WebKit/Source/platform/text/PlatformLocale.cpp
@@ -33,6 +33,7 @@
 #include "platform/text/DateTimeFormat.h"
 #include "public/platform/Platform.h"
 #include "wtf/text/StringBuilder.h"
+#include <memory>
 
 namespace blink {
 
@@ -176,7 +177,7 @@
 
 Locale& Locale::defaultLocale()
 {
-    static Locale* locale = Locale::create(defaultLanguage()).leakPtr();
+    static Locale* locale = Locale::create(defaultLanguage()).release();
     ASSERT(isMainThread());
     return *locale;
 }
diff --git a/third_party/WebKit/Source/platform/text/PlatformLocale.h b/third_party/WebKit/Source/platform/text/PlatformLocale.h
index d9189bb8f..ed248b3 100644
--- a/third_party/WebKit/Source/platform/text/PlatformLocale.h
+++ b/third_party/WebKit/Source/platform/text/PlatformLocale.h
@@ -30,8 +30,8 @@
 #include "platform/Language.h"
 #include "public/platform/WebLocalizedString.h"
 #include "wtf/Allocator.h"
-#include "wtf/PassOwnPtr.h"
 #include "wtf/text/WTFString.h"
+#include <memory>
 
 namespace blink {
 
@@ -39,7 +39,7 @@
     WTF_MAKE_NONCOPYABLE(Locale);
     USING_FAST_MALLOC(Locale);
 public:
-    static PassOwnPtr<Locale> create(const String& localeIdentifier);
+    static std::unique_ptr<Locale> create(const String& localeIdentifier);
     static Locale& defaultLocale();
 
     String queryString(WebLocalizedString::Name);
diff --git a/third_party/WebKit/Source/platform/text/TextBreakIteratorICU.cpp b/third_party/WebKit/Source/platform/text/TextBreakIteratorICU.cpp
index 9691763..eae10b8 100644
--- a/third_party/WebKit/Source/platform/text/TextBreakIteratorICU.cpp
+++ b/third_party/WebKit/Source/platform/text/TextBreakIteratorICU.cpp
@@ -24,10 +24,11 @@
 #include "platform/text/TextBreakIteratorInternalICU.h"
 #include "wtf/Assertions.h"
 #include "wtf/HashMap.h"
-#include "wtf/PassOwnPtr.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/ThreadSpecific.h"
 #include "wtf/ThreadingPrimitives.h"
 #include "wtf/text/WTFString.h"
+#include <memory>
 #include <unicode/rbbi.h>
 #include <unicode/ubrk.h>
 
@@ -45,7 +46,7 @@
         return **pool;
     }
 
-    static PassOwnPtr<LineBreakIteratorPool> create() { return adoptPtr(new LineBreakIteratorPool); }
+    static std::unique_ptr<LineBreakIteratorPool> create() { return wrapUnique(new LineBreakIteratorPool); }
 
     icu::BreakIterator* take(const AtomicString& locale)
     {
diff --git a/third_party/WebKit/Source/platform/threading/BackgroundTaskRunner.h b/third_party/WebKit/Source/platform/threading/BackgroundTaskRunner.h
index f403459..63dc410 100644
--- a/third_party/WebKit/Source/platform/threading/BackgroundTaskRunner.h
+++ b/third_party/WebKit/Source/platform/threading/BackgroundTaskRunner.h
@@ -7,7 +7,6 @@
 
 #include "platform/PlatformExport.h"
 #include "wtf/Functional.h"
-#include "wtf/PassOwnPtr.h"
 
 namespace blink {
 
diff --git a/third_party/WebKit/Source/platform/threading/BackgroundTaskRunnerTest.cpp b/third_party/WebKit/Source/platform/threading/BackgroundTaskRunnerTest.cpp
index ec1e624..25f85362 100644
--- a/third_party/WebKit/Source/platform/threading/BackgroundTaskRunnerTest.cpp
+++ b/third_party/WebKit/Source/platform/threading/BackgroundTaskRunnerTest.cpp
@@ -8,6 +8,8 @@
 #include "platform/WaitableEvent.h"
 #include "public/platform/WebTraceLocation.h"
 #include "testing/gtest/include/gtest/gtest.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 
 namespace {
@@ -24,7 +26,7 @@
 
 TEST_F(BackgroundTaskRunnerTest, RunShortTaskOnBackgroundThread)
 {
-    OwnPtr<WaitableEvent> doneEvent = adoptPtr(new WaitableEvent());
+    std::unique_ptr<WaitableEvent> doneEvent = wrapUnique(new WaitableEvent());
     BackgroundTaskRunner::postOnBackgroundThread(BLINK_FROM_HERE, threadSafeBind(&PingPongTask, AllowCrossThreadAccess(doneEvent.get())), BackgroundTaskRunner::TaskSizeShortRunningTask);
     // Test passes by not hanging on the following wait().
     doneEvent->wait();
@@ -32,7 +34,7 @@
 
 TEST_F(BackgroundTaskRunnerTest, RunLongTaskOnBackgroundThread)
 {
-    OwnPtr<WaitableEvent> doneEvent = adoptPtr(new WaitableEvent());
+    std::unique_ptr<WaitableEvent> doneEvent = wrapUnique(new WaitableEvent());
     BackgroundTaskRunner::postOnBackgroundThread(BLINK_FROM_HERE, threadSafeBind(&PingPongTask, AllowCrossThreadAccess(doneEvent.get())), BackgroundTaskRunner::TaskSizeLongRunningTask);
     // Test passes by not hanging on the following wait().
     doneEvent->wait();
diff --git a/third_party/WebKit/Source/platform/transforms/TransformationMatrix.h b/third_party/WebKit/Source/platform/transforms/TransformationMatrix.h
index 64f47ad..14fdd36 100644
--- a/third_party/WebKit/Source/platform/transforms/TransformationMatrix.h
+++ b/third_party/WebKit/Source/platform/transforms/TransformationMatrix.h
@@ -32,7 +32,8 @@
 #include "wtf/Alignment.h"
 #include "wtf/Allocator.h"
 #include "wtf/CPU.h"
-#include "wtf/PassOwnPtr.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 #include <string.h> // for memcpy
 
 namespace blink {
@@ -61,24 +62,24 @@
     typedef double Matrix4[4][4];
 #endif
 
-    static PassOwnPtr<TransformationMatrix> create()
+    static std::unique_ptr<TransformationMatrix> create()
     {
-        return adoptPtr(new TransformationMatrix());
+        return wrapUnique(new TransformationMatrix());
     }
-    static PassOwnPtr<TransformationMatrix> create(const TransformationMatrix& t)
+    static std::unique_ptr<TransformationMatrix> create(const TransformationMatrix& t)
     {
-        return adoptPtr(new TransformationMatrix(t));
+        return wrapUnique(new TransformationMatrix(t));
     }
-    static PassOwnPtr<TransformationMatrix> create(double a, double b, double c, double d, double e, double f)
+    static std::unique_ptr<TransformationMatrix> create(double a, double b, double c, double d, double e, double f)
     {
-        return adoptPtr(new TransformationMatrix(a, b, c, d, e, f));
+        return wrapUnique(new TransformationMatrix(a, b, c, d, e, f));
     }
-    static PassOwnPtr<TransformationMatrix> create(double m11, double m12, double m13, double m14,
+    static std::unique_ptr<TransformationMatrix> create(double m11, double m12, double m13, double m14,
         double m21, double m22, double m23, double m24,
         double m31, double m32, double m33, double m34,
         double m41, double m42, double m43, double m44)
     {
-        return adoptPtr(new TransformationMatrix(m11, m12, m13, m14, m21, m22, m23, m24, m31, m32, m33, m34, m41, m42, m43, m44));
+        return wrapUnique(new TransformationMatrix(m11, m12, m13, m14, m21, m22, m23, m24, m31, m32, m33, m34, m41, m42, m43, m44));
     }
 
     TransformationMatrix()
diff --git a/third_party/WebKit/Source/platform/web_process_memory_dump.cc b/third_party/WebKit/Source/platform/web_process_memory_dump.cc
index 46f768a..5da3aef 100644
--- a/third_party/WebKit/Source/platform/web_process_memory_dump.cc
+++ b/third_party/WebKit/Source/platform/web_process_memory_dump.cc
@@ -74,7 +74,7 @@
   // memory_allocator_dumps_ will take ownership of
   // |web_memory_allocator_dump|.
   memory_allocator_dumps_.set(
-      memory_allocator_dump, adoptPtr(web_memory_allocator_dump));
+      memory_allocator_dump, wrapUnique(web_memory_allocator_dump));
   return web_memory_allocator_dump;
 }
 
diff --git a/third_party/WebKit/Source/platform/web_process_memory_dump.h b/third_party/WebKit/Source/platform/web_process_memory_dump.h
index 5fb92cda..ed7310f 100644
--- a/third_party/WebKit/Source/platform/web_process_memory_dump.h
+++ b/third_party/WebKit/Source/platform/web_process_memory_dump.h
@@ -12,9 +12,7 @@
 #include "platform/PlatformExport.h"
 #include "platform/web_memory_allocator_dump.h"
 #include "wtf/HashMap.h"
-#include "wtf/OwnPtr.h"
 #include "wtf/text/WTFString.h"
-
 #include <map>
 #include <memory>
 #include <vector>
@@ -158,7 +156,7 @@
   // Those pointers are valid only within the scope of the call and can be
   // safely torn down once the WebProcessMemoryDump itself is destroyed.
   HashMap<base::trace_event::MemoryAllocatorDump*,
-          OwnPtr<WebMemoryAllocatorDump>> memory_allocator_dumps_;
+          std::unique_ptr<WebMemoryAllocatorDump>> memory_allocator_dumps_;
 
   // Stores SkTraceMemoryDump for the current ProcessMemoryDump.
   std::vector<std::unique_ptr<skia::SkiaTraceMemoryDumpImpl>> sk_trace_dump_list_;
diff --git a/third_party/WebKit/Source/platform/web_process_memory_dump_test.cc b/third_party/WebKit/Source/platform/web_process_memory_dump_test.cc
index aafa2d6..09875fb 100644
--- a/third_party/WebKit/Source/platform/web_process_memory_dump_test.cc
+++ b/third_party/WebKit/Source/platform/web_process_memory_dump_test.cc
@@ -12,7 +12,6 @@
 #include "base/values.h"
 #include "platform/web_memory_allocator_dump.h"
 #include "testing/gtest/include/gtest/gtest.h"
-#include "wtf/OwnPtr.h"
 
 namespace blink {
 
diff --git a/third_party/WebKit/Source/platform/weborigin/KURL.cpp b/third_party/WebKit/Source/platform/weborigin/KURL.cpp
index d8b32348..b191958 100644
--- a/third_party/WebKit/Source/platform/weborigin/KURL.cpp
+++ b/third_party/WebKit/Source/platform/weborigin/KURL.cpp
@@ -29,6 +29,7 @@
 
 #include "platform/weborigin/KnownPorts.h"
 #include "url/url_util.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/StdLibExtras.h"
 #include "wtf/text/CString.h"
 #include "wtf/text/StringHash.h"
@@ -274,7 +275,7 @@
     , m_string(other.m_string)
 {
     if (other.m_innerURL.get())
-        m_innerURL = adoptPtr(new KURL(other.m_innerURL->copy()));
+        m_innerURL = wrapUnique(new KURL(other.m_innerURL->copy()));
 }
 
 KURL::~KURL()
@@ -288,7 +289,7 @@
     m_parsed = other.m_parsed;
     m_string = other.m_string;
     if (other.m_innerURL)
-        m_innerURL = adoptPtr(new KURL(other.m_innerURL->copy()));
+        m_innerURL = wrapUnique(new KURL(other.m_innerURL->copy()));
     else
         m_innerURL.reset();
     return *this;
@@ -302,7 +303,7 @@
     result.m_parsed = m_parsed;
     result.m_string = m_string.isolatedCopy();
     if (m_innerURL)
-        result.m_innerURL = adoptPtr(new KURL(m_innerURL->copy()));
+        result.m_innerURL = wrapUnique(new KURL(m_innerURL->copy()));
     return result;
 }
 
@@ -818,7 +819,7 @@
         return;
     }
     if (url::Parsed* innerParsed = m_parsed.inner_parsed())
-        m_innerURL = adoptPtr(new KURL(ParsedURLString, m_string.substring(innerParsed->scheme.begin, innerParsed->Length() - innerParsed->scheme.begin)));
+        m_innerURL = wrapUnique(new KURL(ParsedURLString, m_string.substring(innerParsed->scheme.begin, innerParsed->Length() - innerParsed->scheme.begin)));
     else
         m_innerURL.reset();
 }
diff --git a/third_party/WebKit/Source/platform/weborigin/KURL.h b/third_party/WebKit/Source/platform/weborigin/KURL.h
index ce7c730..abb207f 100644
--- a/third_party/WebKit/Source/platform/weborigin/KURL.h
+++ b/third_party/WebKit/Source/platform/weborigin/KURL.h
@@ -32,8 +32,8 @@
 #include "wtf/Allocator.h"
 #include "wtf/Forward.h"
 #include "wtf/HashTableDeletedValueType.h"
-#include "wtf/OwnPtr.h"
 #include "wtf/text/WTFString.h"
+#include <memory>
 
 namespace WTF {
 class TextEncoding;
@@ -202,7 +202,7 @@
     bool m_protocolIsInHTTPFamily;
     url::Parsed m_parsed;
     String m_string;
-    OwnPtr<KURL> m_innerURL;
+    std::unique_ptr<KURL> m_innerURL;
 };
 
 PLATFORM_EXPORT bool operator==(const KURL&, const KURL&);
diff --git a/third_party/WebKit/Source/platform/weborigin/SecurityOrigin.cpp b/third_party/WebKit/Source/platform/weborigin/SecurityOrigin.cpp
index 395869e..4560bab 100644
--- a/third_party/WebKit/Source/platform/weborigin/SecurityOrigin.cpp
+++ b/third_party/WebKit/Source/platform/weborigin/SecurityOrigin.cpp
@@ -37,10 +37,10 @@
 #include "url/url_canon_ip.h"
 #include "wtf/HexNumber.h"
 #include "wtf/NotFound.h"
-#include "wtf/OwnPtr.h"
-#include "wtf/PassOwnPtr.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/StdLibExtras.h"
 #include "wtf/text/StringBuilder.h"
+#include <memory>
 
 namespace blink {
 
@@ -565,16 +565,16 @@
     return uniqueSecurityOriginURL;
 }
 
-PassOwnPtr<SecurityOrigin::PrivilegeData> SecurityOrigin::createPrivilegeData() const
+std::unique_ptr<SecurityOrigin::PrivilegeData> SecurityOrigin::createPrivilegeData() const
 {
-    OwnPtr<PrivilegeData> privilegeData = adoptPtr(new PrivilegeData);
+    std::unique_ptr<PrivilegeData> privilegeData = wrapUnique(new PrivilegeData);
     privilegeData->m_universalAccess = m_universalAccess;
     privilegeData->m_canLoadLocalResources = m_canLoadLocalResources;
     privilegeData->m_blockLocalAccessFromLocalOrigin = m_blockLocalAccessFromLocalOrigin;
     return privilegeData;
 }
 
-void SecurityOrigin::transferPrivilegesFrom(PassOwnPtr<PrivilegeData> privilegeData)
+void SecurityOrigin::transferPrivilegesFrom(std::unique_ptr<PrivilegeData> privilegeData)
 {
     m_universalAccess = privilegeData->m_universalAccess;
     m_canLoadLocalResources = privilegeData->m_canLoadLocalResources;
diff --git a/third_party/WebKit/Source/platform/weborigin/SecurityOrigin.h b/third_party/WebKit/Source/platform/weborigin/SecurityOrigin.h
index 6b06883..bfc37ff 100644
--- a/third_party/WebKit/Source/platform/weborigin/SecurityOrigin.h
+++ b/third_party/WebKit/Source/platform/weborigin/SecurityOrigin.h
@@ -35,6 +35,7 @@
 #include "wtf/Noncopyable.h"
 #include "wtf/ThreadSafeRefCounted.h"
 #include "wtf/text/WTFString.h"
+#include <memory>
 
 namespace blink {
 
@@ -251,8 +252,8 @@
         bool m_canLoadLocalResources;
         bool m_blockLocalAccessFromLocalOrigin;
     };
-    PassOwnPtr<PrivilegeData> createPrivilegeData() const;
-    void transferPrivilegesFrom(PassOwnPtr<PrivilegeData>);
+    std::unique_ptr<PrivilegeData> createPrivilegeData() const;
+    void transferPrivilegesFrom(std::unique_ptr<PrivilegeData>);
 
     void setUniqueOriginIsPotentiallyTrustworthy(bool isUniqueOriginPotentiallyTrustworthy);
 
diff --git a/third_party/WebKit/Source/platform/weborigin/SecurityPolicy.cpp b/third_party/WebKit/Source/platform/weborigin/SecurityPolicy.cpp
index 14cde14..e915a51 100644
--- a/third_party/WebKit/Source/platform/weborigin/SecurityPolicy.cpp
+++ b/third_party/WebKit/Source/platform/weborigin/SecurityPolicy.cpp
@@ -35,15 +35,15 @@
 #include "platform/weborigin/SecurityOrigin.h"
 #include "wtf/HashMap.h"
 #include "wtf/HashSet.h"
-#include "wtf/OwnPtr.h"
-#include "wtf/PassOwnPtr.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/Threading.h"
 #include "wtf/text/StringHash.h"
+#include <memory>
 
 namespace blink {
 
 using OriginAccessWhiteList = Vector<OriginAccessEntry>;
-using OriginAccessMap = HashMap<String, OwnPtr<OriginAccessWhiteList>>;
+using OriginAccessMap = HashMap<String, std::unique_ptr<OriginAccessWhiteList>>;
 using OriginSet = HashSet<String>;
 
 static OriginAccessMap& originAccessMap()
@@ -186,7 +186,7 @@
     String sourceString = sourceOrigin.toString();
     OriginAccessMap::AddResult result = originAccessMap().add(sourceString, nullptr);
     if (result.isNewEntry)
-        result.storedValue->value = adoptPtr(new OriginAccessWhiteList);
+        result.storedValue->value = wrapUnique(new OriginAccessWhiteList);
 
     OriginAccessWhiteList* list = result.storedValue->value.get();
     list->append(OriginAccessEntry(destinationProtocol, destinationDomain, allowDestinationSubdomains ? OriginAccessEntry::AllowSubdomains : OriginAccessEntry::DisallowSubdomains));
diff --git a/third_party/WebKit/Source/web/AssociatedURLLoader.cpp b/third_party/WebKit/Source/web/AssociatedURLLoader.cpp
index 008e332..a740f02 100644
--- a/third_party/WebKit/Source/web/AssociatedURLLoader.cpp
+++ b/third_party/WebKit/Source/web/AssociatedURLLoader.cpp
@@ -48,8 +48,10 @@
 #include "public/web/WebDataSource.h"
 #include "web/WebLocalFrameImpl.h"
 #include "wtf/HashSet.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/text/WTFString.h"
 #include <limits.h>
+#include <memory>
 
 namespace blink {
 
@@ -79,11 +81,11 @@
 class AssociatedURLLoader::ClientAdapter final : public DocumentThreadableLoaderClient {
     WTF_MAKE_NONCOPYABLE(ClientAdapter);
 public:
-    static PassOwnPtr<ClientAdapter> create(AssociatedURLLoader*, WebURLLoaderClient*, const WebURLLoaderOptions&);
+    static std::unique_ptr<ClientAdapter> create(AssociatedURLLoader*, WebURLLoaderClient*, const WebURLLoaderOptions&);
 
     // ThreadableLoaderClient
     void didSendData(unsigned long long /*bytesSent*/, unsigned long long /*totalBytesToBeSent*/) override;
-    void didReceiveResponse(unsigned long, const ResourceResponse&, PassOwnPtr<WebDataConsumerHandle>) override;
+    void didReceiveResponse(unsigned long, const ResourceResponse&, std::unique_ptr<WebDataConsumerHandle>) override;
     void didDownloadData(int /*dataLength*/) override;
     void didReceiveData(const char*, unsigned /*dataLength*/) override;
     void didReceiveCachedMetadata(const char*, int /*dataLength*/) override;
@@ -123,9 +125,9 @@
     bool m_didFail;
 };
 
-PassOwnPtr<AssociatedURLLoader::ClientAdapter> AssociatedURLLoader::ClientAdapter::create(AssociatedURLLoader* loader, WebURLLoaderClient* client, const WebURLLoaderOptions& options)
+std::unique_ptr<AssociatedURLLoader::ClientAdapter> AssociatedURLLoader::ClientAdapter::create(AssociatedURLLoader* loader, WebURLLoaderClient* client, const WebURLLoaderOptions& options)
 {
-    return adoptPtr(new ClientAdapter(loader, client, options));
+    return wrapUnique(new ClientAdapter(loader, client, options));
 }
 
 AssociatedURLLoader::ClientAdapter::ClientAdapter(AssociatedURLLoader* loader, WebURLLoaderClient* client, const WebURLLoaderOptions& options)
@@ -158,7 +160,7 @@
     m_client->didSendData(m_loader, bytesSent, totalBytesToBeSent);
 }
 
-void AssociatedURLLoader::ClientAdapter::didReceiveResponse(unsigned long, const ResourceResponse& response, PassOwnPtr<WebDataConsumerHandle> handle)
+void AssociatedURLLoader::ClientAdapter::didReceiveResponse(unsigned long, const ResourceResponse& response, std::unique_ptr<WebDataConsumerHandle> handle)
 {
     ASSERT_UNUSED(handle, !handle);
     if (!m_client)
diff --git a/third_party/WebKit/Source/web/AssociatedURLLoader.h b/third_party/WebKit/Source/web/AssociatedURLLoader.h
index 234b8b6..990d43c 100644
--- a/third_party/WebKit/Source/web/AssociatedURLLoader.h
+++ b/third_party/WebKit/Source/web/AssociatedURLLoader.h
@@ -35,8 +35,8 @@
 #include "public/platform/WebURLLoader.h"
 #include "public/web/WebURLLoaderOptions.h"
 #include "wtf/Noncopyable.h"
-#include "wtf/OwnPtr.h"
 #include "wtf/RefPtr.h"
+#include <memory>
 
 namespace blink {
 
@@ -83,8 +83,8 @@
 
     // An adapter which converts the DocumentThreadableLoaderClient method
     // calls into the WebURLLoaderClient method calls.
-    OwnPtr<ClientAdapter> m_clientAdapter;
-    OwnPtr<DocumentThreadableLoader> m_loader;
+    std::unique_ptr<ClientAdapter> m_clientAdapter;
+    std::unique_ptr<DocumentThreadableLoader> m_loader;
 
     // A ContextLifecycleObserver for cancelling |m_loader| when the Document
     // is detached.
diff --git a/third_party/WebKit/Source/web/AssociatedURLLoaderTest.cpp b/third_party/WebKit/Source/web/AssociatedURLLoaderTest.cpp
index ff6deb36..e29d874 100644
--- a/third_party/WebKit/Source/web/AssociatedURLLoaderTest.cpp
+++ b/third_party/WebKit/Source/web/AssociatedURLLoaderTest.cpp
@@ -45,8 +45,10 @@
 #include "public/web/WebView.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "web/tests/FrameTestHelpers.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/text/CString.h"
 #include "wtf/text/WTFString.h"
+#include <memory>
 
 using blink::URLTestHelpers::toKURL;
 using blink::testing::runPendingTasks;
@@ -115,16 +117,16 @@
         Platform::current()->getURLLoaderMockFactory()->serveAsynchronousRequests();
     }
 
-    PassOwnPtr<WebURLLoader> createAssociatedURLLoader(const WebURLLoaderOptions options = WebURLLoaderOptions())
+    std::unique_ptr<WebURLLoader> createAssociatedURLLoader(const WebURLLoaderOptions options = WebURLLoaderOptions())
     {
-        return adoptPtr(mainFrame()->createAssociatedURLLoader(options));
+        return wrapUnique(mainFrame()->createAssociatedURLLoader(options));
     }
 
     // WebURLLoaderClient implementation.
     void willFollowRedirect(WebURLLoader* loader, WebURLRequest& newRequest, const WebURLResponse& redirectResponse) override
     {
         m_willFollowRedirect = true;
-        EXPECT_EQ(m_expectedLoader, loader);
+        EXPECT_EQ(m_expectedLoader.get(), loader);
         EXPECT_EQ(m_expectedNewRequest.url(), newRequest.url());
         // Check that CORS simple headers are transferred to the new request.
         EXPECT_EQ(m_expectedNewRequest.httpHeaderField("accept"), newRequest.httpHeaderField("accept"));
@@ -136,14 +138,14 @@
     void didSendData(WebURLLoader* loader, unsigned long long bytesSent, unsigned long long totalBytesToBeSent) override
     {
         m_didSendData = true;
-        EXPECT_EQ(m_expectedLoader, loader);
+        EXPECT_EQ(m_expectedLoader.get(), loader);
     }
 
     void didReceiveResponse(WebURLLoader* loader, const WebURLResponse& response) override
     {
         m_didReceiveResponse = true;
         m_actualResponse = WebURLResponse(response);
-        EXPECT_EQ(m_expectedLoader, loader);
+        EXPECT_EQ(m_expectedLoader.get(), loader);
         EXPECT_EQ(m_expectedResponse.url(), response.url());
         EXPECT_EQ(m_expectedResponse.httpStatusCode(), response.httpStatusCode());
     }
@@ -151,13 +153,13 @@
     void didDownloadData(WebURLLoader* loader, int dataLength, int encodedDataLength) override
     {
         m_didDownloadData = true;
-        EXPECT_EQ(m_expectedLoader, loader);
+        EXPECT_EQ(m_expectedLoader.get(), loader);
     }
 
     void didReceiveData(WebURLLoader* loader, const char* data, int dataLength, int encodedDataLength) override
     {
         m_didReceiveData = true;
-        EXPECT_EQ(m_expectedLoader, loader);
+        EXPECT_EQ(m_expectedLoader.get(), loader);
         EXPECT_TRUE(data);
         EXPECT_GT(dataLength, 0);
     }
@@ -165,19 +167,19 @@
     void didReceiveCachedMetadata(WebURLLoader* loader, const char* data, int dataLength) override
     {
         m_didReceiveCachedMetadata = true;
-        EXPECT_EQ(m_expectedLoader, loader);
+        EXPECT_EQ(m_expectedLoader.get(), loader);
     }
 
     void didFinishLoading(WebURLLoader* loader, double finishTime, int64_t encodedDataLength) override
     {
         m_didFinishLoading = true;
-        EXPECT_EQ(m_expectedLoader, loader);
+        EXPECT_EQ(m_expectedLoader.get(), loader);
     }
 
     void didFail(WebURLLoader* loader, const WebURLError& error) override
     {
         m_didFail = true;
-        EXPECT_EQ(m_expectedLoader, loader);
+        EXPECT_EQ(m_expectedLoader.get(), loader);
     }
 
     void CheckMethodFails(const char* unsafeMethod)
@@ -268,7 +270,7 @@
     String m_frameFilePath;
     FrameTestHelpers::WebViewHelper m_helper;
 
-    OwnPtr<WebURLLoader> m_expectedLoader;
+    std::unique_ptr<WebURLLoader> m_expectedLoader;
     WebURLResponse m_actualResponse;
     WebURLResponse m_expectedResponse;
     WebURLRequest m_expectedNewRequest;
diff --git a/third_party/WebKit/Source/web/AudioOutputDeviceClientImpl.cpp b/third_party/WebKit/Source/web/AudioOutputDeviceClientImpl.cpp
index 4607fba..f1d32424 100644
--- a/third_party/WebKit/Source/web/AudioOutputDeviceClientImpl.cpp
+++ b/third_party/WebKit/Source/web/AudioOutputDeviceClientImpl.cpp
@@ -8,6 +8,7 @@
 #include "core/dom/ExecutionContext.h"
 #include "public/web/WebFrameClient.h"
 #include "web/WebLocalFrameImpl.h"
+#include <memory>
 
 namespace blink {
 
@@ -24,13 +25,13 @@
 {
 }
 
-void AudioOutputDeviceClientImpl::checkIfAudioSinkExistsAndIsAuthorized(ExecutionContext* context, const WebString& sinkId, PassOwnPtr<WebSetSinkIdCallbacks> callbacks)
+void AudioOutputDeviceClientImpl::checkIfAudioSinkExistsAndIsAuthorized(ExecutionContext* context, const WebString& sinkId, std::unique_ptr<WebSetSinkIdCallbacks> callbacks)
 {
     DCHECK(context);
     DCHECK(context->isDocument());
     Document* document = toDocument(context);
     WebLocalFrameImpl* webFrame = WebLocalFrameImpl::fromFrame(document->frame());
-    webFrame->client()->checkIfAudioSinkExistsAndIsAuthorized(sinkId, WebSecurityOrigin(context->getSecurityOrigin()), callbacks.leakPtr());
+    webFrame->client()->checkIfAudioSinkExistsAndIsAuthorized(sinkId, WebSecurityOrigin(context->getSecurityOrigin()), callbacks.release());
 }
 
 } // namespace blink
diff --git a/third_party/WebKit/Source/web/AudioOutputDeviceClientImpl.h b/third_party/WebKit/Source/web/AudioOutputDeviceClientImpl.h
index 62e6da5..b8bd34c 100644
--- a/third_party/WebKit/Source/web/AudioOutputDeviceClientImpl.h
+++ b/third_party/WebKit/Source/web/AudioOutputDeviceClientImpl.h
@@ -7,6 +7,7 @@
 
 #include "modules/audio_output_devices/AudioOutputDeviceClient.h"
 #include "platform/heap/Handle.h"
+#include <memory>
 
 namespace blink {
 
@@ -19,7 +20,7 @@
     ~AudioOutputDeviceClientImpl() override;
 
     // AudioOutputDeviceClient implementation.
-    void checkIfAudioSinkExistsAndIsAuthorized(ExecutionContext*, const WebString& sinkId, PassOwnPtr<WebSetSinkIdCallbacks>) override;
+    void checkIfAudioSinkExistsAndIsAuthorized(ExecutionContext*, const WebString& sinkId, std::unique_ptr<WebSetSinkIdCallbacks>) override;
 
     // GarbageCollectedFinalized implementation.
     DEFINE_INLINE_VIRTUAL_TRACE() { AudioOutputDeviceClient::trace(visitor); }
diff --git a/third_party/WebKit/Source/web/ChromeClientImpl.cpp b/third_party/WebKit/Source/web/ChromeClientImpl.cpp
index f3d796c7..6b3b603 100644
--- a/third_party/WebKit/Source/web/ChromeClientImpl.cpp
+++ b/third_party/WebKit/Source/web/ChromeClientImpl.cpp
@@ -103,10 +103,12 @@
 #include "web/WebPluginContainerImpl.h"
 #include "web/WebSettingsImpl.h"
 #include "web/WebViewImpl.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/text/CString.h"
 #include "wtf/text/CharacterNames.h"
 #include "wtf/text/StringBuilder.h"
 #include "wtf/text/StringConcatenate.h"
+#include <memory>
 
 namespace blink {
 
@@ -1113,9 +1115,9 @@
         m_webView->pageImportanceSignals()->setIssuedNonGetFetchFromScript();
 }
 
-PassOwnPtr<WebFrameScheduler> ChromeClientImpl::createFrameScheduler(BlameContext* blameContext)
+std::unique_ptr<WebFrameScheduler> ChromeClientImpl::createFrameScheduler(BlameContext* blameContext)
 {
-    return adoptPtr(m_webView->scheduler()->createFrameScheduler(blameContext).release());
+    return wrapUnique(m_webView->scheduler()->createFrameScheduler(blameContext).release());
 }
 
 double ChromeClientImpl::lastFrameTimeMonotonic() const
diff --git a/third_party/WebKit/Source/web/ChromeClientImpl.h b/third_party/WebKit/Source/web/ChromeClientImpl.h
index 183ca260..72f56e20 100644
--- a/third_party/WebKit/Source/web/ChromeClientImpl.h
+++ b/third_party/WebKit/Source/web/ChromeClientImpl.h
@@ -36,7 +36,7 @@
 #include "core/page/WindowFeatures.h"
 #include "public/web/WebNavigationPolicy.h"
 #include "web/WebExport.h"
-#include "wtf/PassOwnPtr.h"
+#include <memory>
 
 namespace blink {
 
@@ -184,7 +184,7 @@
 
     void didObserveNonGetFetchFromScript() const override;
 
-    PassOwnPtr<WebFrameScheduler> createFrameScheduler(BlameContext*) override;
+    std::unique_ptr<WebFrameScheduler> createFrameScheduler(BlameContext*) override;
 
     double lastFrameTimeMonotonic() const override;
 
diff --git a/third_party/WebKit/Source/web/ColorChooserPopupUIController.h b/third_party/WebKit/Source/web/ColorChooserPopupUIController.h
index 933ab26c..a0d7aa8 100644
--- a/third_party/WebKit/Source/web/ColorChooserPopupUIController.h
+++ b/third_party/WebKit/Source/web/ColorChooserPopupUIController.h
@@ -28,7 +28,6 @@
 
 #include "core/page/PagePopupClient.h"
 #include "web/ColorChooserUIController.h"
-#include "wtf/OwnPtr.h"
 
 namespace blink {
 
diff --git a/third_party/WebKit/Source/web/ColorChooserUIController.cpp b/third_party/WebKit/Source/web/ColorChooserUIController.cpp
index 93ebd3c..8e5dccd 100644
--- a/third_party/WebKit/Source/web/ColorChooserUIController.cpp
+++ b/third_party/WebKit/Source/web/ColorChooserUIController.cpp
@@ -32,6 +32,7 @@
 #include "public/web/WebColorSuggestion.h"
 #include "public/web/WebFrameClient.h"
 #include "web/WebLocalFrameImpl.h"
+#include "wtf/PtrUtil.h"
 
 namespace blink {
 
@@ -98,7 +99,7 @@
     WebFrameClient* webFrameClient = frame->client();
     if (!webFrameClient)
         return;
-    m_chooser = adoptPtr(webFrameClient->createColorChooser(
+    m_chooser = wrapUnique(webFrameClient->createColorChooser(
         this, static_cast<WebColor>(m_client->currentColor().rgb()), m_client->suggestions()));
 }
 
diff --git a/third_party/WebKit/Source/web/ColorChooserUIController.h b/third_party/WebKit/Source/web/ColorChooserUIController.h
index 123b86d3..e83acd7e 100644
--- a/third_party/WebKit/Source/web/ColorChooserUIController.h
+++ b/third_party/WebKit/Source/web/ColorChooserUIController.h
@@ -30,7 +30,7 @@
 #include "platform/heap/Handle.h"
 #include "platform/text/PlatformLocale.h"
 #include "public/web/WebColorChooserClient.h"
-#include "wtf/OwnPtr.h"
+#include <memory>
 
 namespace blink {
 
@@ -64,7 +64,7 @@
     ColorChooserUIController(LocalFrame*, ColorChooserClient*);
 
     void openColorChooser();
-    OwnPtr<WebColorChooser> m_chooser;
+    std::unique_ptr<WebColorChooser> m_chooser;
     Member<ColorChooserClient> m_client;
 
     Member<LocalFrame> m_frame;
diff --git a/third_party/WebKit/Source/web/CompositorMutatorImpl.cpp b/third_party/WebKit/Source/web/CompositorMutatorImpl.cpp
index 211ea54..79709e1 100644
--- a/third_party/WebKit/Source/web/CompositorMutatorImpl.cpp
+++ b/third_party/WebKit/Source/web/CompositorMutatorImpl.cpp
@@ -14,6 +14,7 @@
 #include "platform/heap/Handle.h"
 #include "public/platform/Platform.h"
 #include "web/CompositorProxyClientImpl.h"
+#include "wtf/PtrUtil.h"
 
 namespace blink {
 
@@ -30,7 +31,7 @@
 } // namespace
 
 CompositorMutatorImpl::CompositorMutatorImpl()
-    : m_animationManager(adoptPtr(new CustomCompositorAnimationManager))
+    : m_animationManager(wrapUnique(new CustomCompositorAnimationManager))
     , m_client(nullptr)
 {
 }
diff --git a/third_party/WebKit/Source/web/CompositorMutatorImpl.h b/third_party/WebKit/Source/web/CompositorMutatorImpl.h
index 7fa50747..a5281b6 100644
--- a/third_party/WebKit/Source/web/CompositorMutatorImpl.h
+++ b/third_party/WebKit/Source/web/CompositorMutatorImpl.h
@@ -10,8 +10,7 @@
 #include "platform/heap/Handle.h"
 #include "platform/heap/HeapAllocator.h"
 #include "wtf/Noncopyable.h"
-#include "wtf/OwnPtr.h"
-#include "wtf/PassOwnPtr.h"
+#include <memory>
 
 namespace blink {
 
@@ -54,7 +53,7 @@
     using ProxyClients = HeapHashSet<WeakMember<CompositorProxyClientImpl>>;
     ProxyClients m_proxyClients;
 
-    OwnPtr<CustomCompositorAnimationManager> m_animationManager;
+    std::unique_ptr<CustomCompositorAnimationManager> m_animationManager;
     CompositorMutatorClient* m_client;
 };
 
diff --git a/third_party/WebKit/Source/web/ContextFeaturesClientImpl.h b/third_party/WebKit/Source/web/ContextFeaturesClientImpl.h
index 64b5b07..3e1b9e3 100644
--- a/third_party/WebKit/Source/web/ContextFeaturesClientImpl.h
+++ b/third_party/WebKit/Source/web/ContextFeaturesClientImpl.h
@@ -32,14 +32,16 @@
 #define ContextFeaturesClientImpl_h
 
 #include "core/dom/ContextFeatures.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
 class ContextFeaturesClientImpl final : public ContextFeaturesClient {
 public:
-    static PassOwnPtr<ContextFeaturesClientImpl> create()
+    static std::unique_ptr<ContextFeaturesClientImpl> create()
     {
-        return adoptPtr(new ContextFeaturesClientImpl());
+        return wrapUnique(new ContextFeaturesClientImpl());
     }
 
     bool isEnabled(Document*, ContextFeatures::FeatureType, bool defaultValue) override;
diff --git a/third_party/WebKit/Source/web/DateTimeChooserImpl.h b/third_party/WebKit/Source/web/DateTimeChooserImpl.h
index 1949bf2..419cbd7 100644
--- a/third_party/WebKit/Source/web/DateTimeChooserImpl.h
+++ b/third_party/WebKit/Source/web/DateTimeChooserImpl.h
@@ -33,6 +33,7 @@
 
 #include "core/html/forms/DateTimeChooser.h"
 #include "core/page/PagePopupClient.h"
+#include <memory>
 
 namespace blink {
 
@@ -67,7 +68,7 @@
     Member<DateTimeChooserClient> m_client;
     PagePopup* m_popup;
     DateTimeChooserParameters m_parameters;
-    OwnPtr<Locale> m_locale;
+    std::unique_ptr<Locale> m_locale;
 };
 
 } // namespace blink
diff --git a/third_party/WebKit/Source/web/DedicatedWorkerGlobalScopeProxyProviderImpl.cpp b/third_party/WebKit/Source/web/DedicatedWorkerGlobalScopeProxyProviderImpl.cpp
index c9a6881..bb651146 100644
--- a/third_party/WebKit/Source/web/DedicatedWorkerGlobalScopeProxyProviderImpl.cpp
+++ b/third_party/WebKit/Source/web/DedicatedWorkerGlobalScopeProxyProviderImpl.cpp
@@ -43,6 +43,7 @@
 #include "web/WebLocalFrameImpl.h"
 #include "web/WebViewImpl.h"
 #include "web/WorkerContentSettingsClient.h"
+#include "wtf/PtrUtil.h"
 
 namespace blink {
 
@@ -54,7 +55,7 @@
         WorkerClients* workerClients = WorkerClients::create();
         provideIndexedDBClientToWorker(workerClients, IndexedDBClientImpl::create());
         provideLocalFileSystemToWorker(workerClients, LocalFileSystemClient::create());
-        provideContentSettingsClientToWorker(workerClients, adoptPtr(webFrame->client()->createWorkerContentSettingsClientProxy()));
+        provideContentSettingsClientToWorker(workerClients, wrapUnique(webFrame->client()->createWorkerContentSettingsClientProxy()));
         // FIXME: call provideServiceWorkerContainerClientToWorker here when we
         // support ServiceWorker in dedicated workers (http://crbug.com/371690)
         return new DedicatedWorkerMessagingProxy(worker, workerClients);
diff --git a/third_party/WebKit/Source/web/DedicatedWorkerGlobalScopeProxyProviderImpl.h b/third_party/WebKit/Source/web/DedicatedWorkerGlobalScopeProxyProviderImpl.h
index 8ed01a7..1f99166e 100644
--- a/third_party/WebKit/Source/web/DedicatedWorkerGlobalScopeProxyProviderImpl.h
+++ b/third_party/WebKit/Source/web/DedicatedWorkerGlobalScopeProxyProviderImpl.h
@@ -33,7 +33,6 @@
 
 #include "core/workers/DedicatedWorkerGlobalScopeProxyProvider.h"
 #include "wtf/Noncopyable.h"
-#include "wtf/PassOwnPtr.h"
 
 namespace blink {
 
diff --git a/third_party/WebKit/Source/web/DevToolsEmulator.cpp b/third_party/WebKit/Source/web/DevToolsEmulator.cpp
index 3b8be5b..848f4e1 100644
--- a/third_party/WebKit/Source/web/DevToolsEmulator.cpp
+++ b/third_party/WebKit/Source/web/DevToolsEmulator.cpp
@@ -16,6 +16,7 @@
 #include "web/WebLocalFrameImpl.h"
 #include "web/WebSettingsImpl.h"
 #include "web/WebViewImpl.h"
+#include "wtf/PtrUtil.h"
 
 namespace {
 
@@ -366,8 +367,8 @@
         PlatformGestureEventBuilder gestureEvent(frameView, static_cast<const WebGestureEvent&>(inputEvent));
         float pageScaleFactor = page->pageScaleFactor();
         if (gestureEvent.type() == PlatformEvent::GesturePinchBegin) {
-            m_lastPinchAnchorCss = adoptPtr(new IntPoint(frameView->scrollPosition() + gestureEvent.position()));
-            m_lastPinchAnchorDip = adoptPtr(new IntPoint(gestureEvent.position()));
+            m_lastPinchAnchorCss = wrapUnique(new IntPoint(frameView->scrollPosition() + gestureEvent.position()));
+            m_lastPinchAnchorDip = wrapUnique(new IntPoint(gestureEvent.position()));
             m_lastPinchAnchorDip->scale(pageScaleFactor, pageScaleFactor);
         }
         if (gestureEvent.type() == PlatformEvent::GesturePinchUpdate && m_lastPinchAnchorCss) {
diff --git a/third_party/WebKit/Source/web/DevToolsEmulator.h b/third_party/WebKit/Source/web/DevToolsEmulator.h
index 73c35b4..07836526 100644
--- a/third_party/WebKit/Source/web/DevToolsEmulator.h
+++ b/third_party/WebKit/Source/web/DevToolsEmulator.h
@@ -10,7 +10,7 @@
 #include "public/platform/WebViewportStyle.h"
 #include "public/web/WebDeviceEmulationParams.h"
 #include "wtf/Forward.h"
-#include "wtf/OwnPtr.h"
+#include <memory>
 
 namespace blink {
 
@@ -83,8 +83,8 @@
     bool m_originalDeviceSupportsMouse;
     bool m_originalDeviceSupportsTouch;
     int m_originalMaxTouchPoints;
-    OwnPtr<IntPoint> m_lastPinchAnchorCss;
-    OwnPtr<IntPoint> m_lastPinchAnchorDip;
+    std::unique_ptr<IntPoint> m_lastPinchAnchorCss;
+    std::unique_ptr<IntPoint> m_lastPinchAnchorDip;
 
     bool m_embedderScriptEnabled;
     bool m_scriptExecutionDisabled;
diff --git a/third_party/WebKit/Source/web/ExternalPopupMenu.cpp b/third_party/WebKit/Source/web/ExternalPopupMenu.cpp
index b9c93176a..b3e73d3 100644
--- a/third_party/WebKit/Source/web/ExternalPopupMenu.cpp
+++ b/third_party/WebKit/Source/web/ExternalPopupMenu.cpp
@@ -50,6 +50,7 @@
 #include "public/web/WebPopupMenuInfo.h"
 #include "web/WebLocalFrameImpl.h"
 #include "web/WebViewImpl.h"
+#include "wtf/PtrUtil.h"
 
 namespace blink {
 
@@ -111,7 +112,7 @@
 #if OS(MACOSX)
     const WebInputEvent* currentEvent = WebViewImpl::currentInputEvent();
     if (currentEvent && currentEvent->type == WebInputEvent::MouseDown) {
-        m_syntheticEvent = adoptPtr(new WebMouseEvent);
+        m_syntheticEvent = wrapUnique(new WebMouseEvent);
         *m_syntheticEvent = *static_cast<const WebMouseEvent*>(currentEvent);
         m_syntheticEvent->type = WebInputEvent::MouseUp;
         m_dispatchEventTimer.startOneShot(0, BLINK_FROM_HERE);
diff --git a/third_party/WebKit/Source/web/ExternalPopupMenu.h b/third_party/WebKit/Source/web/ExternalPopupMenu.h
index e11ef4b..497343c2 100644
--- a/third_party/WebKit/Source/web/ExternalPopupMenu.h
+++ b/third_party/WebKit/Source/web/ExternalPopupMenu.h
@@ -38,6 +38,7 @@
 #include "public/web/WebExternalPopupMenuClient.h"
 #include "web/WebExport.h"
 #include "wtf/Compiler.h"
+#include <memory>
 
 namespace blink {
 
@@ -85,7 +86,7 @@
     Member<HTMLSelectElement> m_ownerElement;
     Member<LocalFrame> m_localFrame;
     WebViewImpl& m_webView;
-    OwnPtr<WebMouseEvent> m_syntheticEvent;
+    std::unique_ptr<WebMouseEvent> m_syntheticEvent;
     Timer<ExternalPopupMenu> m_dispatchEventTimer;
     // The actual implementor of the show menu.
     WebExternalPopupMenu* m_webExternalPopupMenu;
diff --git a/third_party/WebKit/Source/web/ExternalPopupMenuTest.cpp b/third_party/WebKit/Source/web/ExternalPopupMenuTest.cpp
index b4bd8b0..a48b89b2 100644
--- a/third_party/WebKit/Source/web/ExternalPopupMenuTest.cpp
+++ b/third_party/WebKit/Source/web/ExternalPopupMenuTest.cpp
@@ -23,6 +23,7 @@
 #include "testing/gtest/include/gtest/gtest.h"
 #include "web/WebLocalFrameImpl.h"
 #include "web/tests/FrameTestHelpers.h"
+#include <memory>
 
 namespace blink {
 
@@ -42,7 +43,7 @@
         m_dummyPageHolder->document().updateStyleAndLayoutIgnorePendingStylesheets();
     }
 
-    OwnPtr<DummyPageHolder> m_dummyPageHolder;
+    std::unique_ptr<DummyPageHolder> m_dummyPageHolder;
     Persistent<HTMLSelectElement> m_ownerElement;
 };
 
diff --git a/third_party/WebKit/Source/web/FrameLoaderClientImpl.cpp b/third_party/WebKit/Source/web/FrameLoaderClientImpl.cpp
index 108b2af..0f4a87b 100644
--- a/third_party/WebKit/Source/web/FrameLoaderClientImpl.cpp
+++ b/third_party/WebKit/Source/web/FrameLoaderClientImpl.cpp
@@ -103,9 +103,11 @@
 #include "web/WebLocalFrameImpl.h"
 #include "web/WebPluginContainerImpl.h"
 #include "web/WebViewImpl.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/StringExtras.h"
 #include "wtf/text/CString.h"
 #include "wtf/text/WTFString.h"
+#include <memory>
 #include <v8.h>
 
 namespace blink {
@@ -803,7 +805,7 @@
     return container;
 }
 
-PassOwnPtr<WebMediaPlayer> FrameLoaderClientImpl::createWebMediaPlayer(
+std::unique_ptr<WebMediaPlayer> FrameLoaderClientImpl::createWebMediaPlayer(
     HTMLMediaElement& htmlMediaElement,
     const WebMediaPlayerSource& source,
     WebMediaPlayerClient* client)
@@ -820,17 +822,17 @@
 
     HTMLMediaElementEncryptedMedia& encryptedMedia = HTMLMediaElementEncryptedMedia::from(htmlMediaElement);
     WebString sinkId(HTMLMediaElementAudioOutputDevice::sinkId(htmlMediaElement));
-    return adoptPtr(webFrame->client()->createMediaPlayer(source,
+    return wrapUnique(webFrame->client()->createMediaPlayer(source,
         client, &encryptedMedia,
         encryptedMedia.contentDecryptionModule(), sinkId, webMediaSession));
 }
 
-PassOwnPtr<WebMediaSession> FrameLoaderClientImpl::createWebMediaSession()
+std::unique_ptr<WebMediaSession> FrameLoaderClientImpl::createWebMediaSession()
 {
     if (!m_webFrame->client())
         return nullptr;
 
-    return adoptPtr(m_webFrame->client()->createMediaSession());
+    return wrapUnique(m_webFrame->client()->createMediaSession());
 }
 
 ObjectContentType FrameLoaderClientImpl::getObjectContentType(
@@ -963,11 +965,11 @@
         m_webFrame->client()->willInsertBody(m_webFrame);
 }
 
-PassOwnPtr<WebServiceWorkerProvider> FrameLoaderClientImpl::createServiceWorkerProvider()
+std::unique_ptr<WebServiceWorkerProvider> FrameLoaderClientImpl::createServiceWorkerProvider()
 {
     if (!m_webFrame->client())
         return nullptr;
-    return adoptPtr(m_webFrame->client()->createServiceWorkerProvider());
+    return wrapUnique(m_webFrame->client()->createServiceWorkerProvider());
 }
 
 bool FrameLoaderClientImpl::isControlledByServiceWorker(DocumentLoader& loader)
@@ -987,11 +989,11 @@
     return m_webFrame->sharedWorkerRepositoryClient();
 }
 
-PassOwnPtr<WebApplicationCacheHost> FrameLoaderClientImpl::createApplicationCacheHost(WebApplicationCacheHostClient* client)
+std::unique_ptr<WebApplicationCacheHost> FrameLoaderClientImpl::createApplicationCacheHost(WebApplicationCacheHostClient* client)
 {
     if (!m_webFrame->client())
         return nullptr;
-    return adoptPtr(m_webFrame->client()->createApplicationCacheHost(client));
+    return wrapUnique(m_webFrame->client()->createApplicationCacheHost(client));
 }
 
 void FrameLoaderClientImpl::dispatchDidChangeManifest()
diff --git a/third_party/WebKit/Source/web/FrameLoaderClientImpl.h b/third_party/WebKit/Source/web/FrameLoaderClientImpl.h
index 46f1519..a8035c5 100644
--- a/third_party/WebKit/Source/web/FrameLoaderClientImpl.h
+++ b/third_party/WebKit/Source/web/FrameLoaderClientImpl.h
@@ -36,8 +36,8 @@
 #include "platform/heap/Handle.h"
 #include "platform/weborigin/KURL.h"
 #include "public/platform/WebInsecureRequestPolicy.h"
-#include "wtf/PassOwnPtr.h"
 #include "wtf/RefPtr.h"
+#include <memory>
 
 namespace blink {
 
@@ -131,8 +131,8 @@
         HTMLPlugInElement*, const KURL&,
         const Vector<WTF::String>&, const Vector<WTF::String>&,
         const WTF::String&, bool loadManually, DetachedPluginPolicy) override;
-    PassOwnPtr<WebMediaPlayer> createWebMediaPlayer(HTMLMediaElement&, const WebMediaPlayerSource&, WebMediaPlayerClient*) override;
-    PassOwnPtr<WebMediaSession> createWebMediaSession() override;
+    std::unique_ptr<WebMediaPlayer> createWebMediaPlayer(HTMLMediaElement&, const WebMediaPlayerSource&, WebMediaPlayerClient*) override;
+    std::unique_ptr<WebMediaSession> createWebMediaSession() override;
     ObjectContentType getObjectContentType(
         const KURL&, const WTF::String& mimeType, bool shouldPreferPlugInsForImages) override;
     void didChangeScrollOffset() override;
@@ -165,12 +165,12 @@
 
     void dispatchWillInsertBody() override;
 
-    PassOwnPtr<WebServiceWorkerProvider> createServiceWorkerProvider() override;
+    std::unique_ptr<WebServiceWorkerProvider> createServiceWorkerProvider() override;
     bool isControlledByServiceWorker(DocumentLoader&) override;
     int64_t serviceWorkerID(DocumentLoader&) override;
     SharedWorkerRepositoryClient* sharedWorkerRepositoryClient() override;
 
-    PassOwnPtr<WebApplicationCacheHost> createApplicationCacheHost(WebApplicationCacheHostClient*) override;
+    std::unique_ptr<WebApplicationCacheHost> createApplicationCacheHost(WebApplicationCacheHostClient*) override;
 
     void dispatchDidChangeManifest() override;
 
diff --git a/third_party/WebKit/Source/web/FullscreenController.h b/third_party/WebKit/Source/web/FullscreenController.h
index 2655d15d..039535c 100644
--- a/third_party/WebKit/Source/web/FullscreenController.h
+++ b/third_party/WebKit/Source/web/FullscreenController.h
@@ -34,7 +34,6 @@
 #include "platform/geometry/FloatPoint.h"
 #include "platform/geometry/IntSize.h"
 #include "platform/heap/Handle.h"
-#include "wtf/PassOwnPtr.h"
 #include "wtf/RefPtr.h"
 
 namespace blink {
diff --git a/third_party/WebKit/Source/web/InspectorOverlay.cpp b/third_party/WebKit/Source/web/InspectorOverlay.cpp
index f88ab50d..80d894cc 100644
--- a/third_party/WebKit/Source/web/InspectorOverlay.cpp
+++ b/third_party/WebKit/Source/web/InspectorOverlay.cpp
@@ -58,6 +58,7 @@
 #include "web/WebInputEventConversion.h"
 #include "web/WebLocalFrameImpl.h"
 #include "web/WebViewImpl.h"
+#include <memory>
 #include <v8.h>
 
 namespace blink {
@@ -320,7 +321,7 @@
     scheduleUpdate();
 }
 
-void InspectorOverlay::setInspectMode(InspectorDOMAgent::SearchMode searchMode, PassOwnPtr<InspectorHighlightConfig> highlightConfig)
+void InspectorOverlay::setInspectMode(InspectorDOMAgent::SearchMode searchMode, std::unique_ptr<InspectorHighlightConfig> highlightConfig)
 {
     if (m_layoutEditor)
         overlayClearSelection(true);
@@ -348,7 +349,7 @@
     initializeLayoutEditorIfNeeded(node);
 }
 
-void InspectorOverlay::highlightQuad(PassOwnPtr<FloatQuad> quad, const InspectorHighlightConfig& highlightConfig)
+void InspectorOverlay::highlightQuad(std::unique_ptr<FloatQuad> quad, const InspectorHighlightConfig& highlightConfig)
 {
     m_quadHighlightConfig = highlightConfig;
     m_highlightQuad = std::move(quad);
diff --git a/third_party/WebKit/Source/web/InspectorOverlay.h b/third_party/WebKit/Source/web/InspectorOverlay.h
index 3975ed1..c9daa2b 100644
--- a/third_party/WebKit/Source/web/InspectorOverlay.h
+++ b/third_party/WebKit/Source/web/InspectorOverlay.h
@@ -38,10 +38,9 @@
 #include "platform/heap/Handle.h"
 #include "platform/inspector_protocol/Values.h"
 #include "public/web/WebInputEvent.h"
-#include "wtf/OwnPtr.h"
-#include "wtf/PassOwnPtr.h"
 #include "wtf/RefPtr.h"
 #include "wtf/text/WTFString.h"
+#include <memory>
 
 namespace blink {
 
@@ -110,8 +109,8 @@
     // InspectorDOMAgent::Client implementation.
     void hideHighlight() override;
     void highlightNode(Node*, const InspectorHighlightConfig&, bool omitTooltip) override;
-    void highlightQuad(PassOwnPtr<FloatQuad>, const InspectorHighlightConfig&) override;
-    void setInspectMode(InspectorDOMAgent::SearchMode, PassOwnPtr<InspectorHighlightConfig>) override;
+    void highlightQuad(std::unique_ptr<FloatQuad>, const InspectorHighlightConfig&) override;
+    void setInspectMode(InspectorDOMAgent::SearchMode, std::unique_ptr<InspectorHighlightConfig>) override;
     void setInspectedNode(Node*) override;
 
     void highlightNode(Node*, Node* eventTarget, const InspectorHighlightConfig&, bool omitTooltip);
@@ -145,7 +144,7 @@
     Member<Node> m_highlightNode;
     Member<Node> m_eventTargetNode;
     InspectorHighlightConfig m_nodeHighlightConfig;
-    OwnPtr<FloatQuad> m_highlightQuad;
+    std::unique_ptr<FloatQuad> m_highlightQuad;
     Member<Page> m_overlayPage;
     Member<InspectorOverlayChromeClient> m_overlayChromeClient;
     Member<InspectorOverlayHost> m_overlayHost;
@@ -161,10 +160,10 @@
     Member<InspectorDOMAgent> m_domAgent;
     Member<InspectorCSSAgent> m_cssAgent;
     Member<LayoutEditor> m_layoutEditor;
-    OwnPtr<PageOverlay> m_pageOverlay;
+    std::unique_ptr<PageOverlay> m_pageOverlay;
     Member<Node> m_hoveredNodeForInspectMode;
     InspectorDOMAgent::SearchMode m_inspectMode;
-    OwnPtr<InspectorHighlightConfig> m_inspectModeHighlightConfig;
+    std::unique_ptr<InspectorHighlightConfig> m_inspectModeHighlightConfig;
 };
 
 } // namespace blink
diff --git a/third_party/WebKit/Source/web/LinkHighlightImpl.cpp b/third_party/WebKit/Source/web/LinkHighlightImpl.cpp
index 9df40f3..81153985a 100644
--- a/third_party/WebKit/Source/web/LinkHighlightImpl.cpp
+++ b/third_party/WebKit/Source/web/LinkHighlightImpl.cpp
@@ -59,13 +59,15 @@
 #include "web/WebSettingsImpl.h"
 #include "web/WebViewImpl.h"
 #include "wtf/CurrentTime.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/Vector.h"
+#include <memory>
 
 namespace blink {
 
-PassOwnPtr<LinkHighlightImpl> LinkHighlightImpl::create(Node* node, WebViewImpl* owningWebViewImpl)
+std::unique_ptr<LinkHighlightImpl> LinkHighlightImpl::create(Node* node, WebViewImpl* owningWebViewImpl)
 {
-    return adoptPtr(new LinkHighlightImpl(node, owningWebViewImpl));
+    return wrapUnique(new LinkHighlightImpl(node, owningWebViewImpl));
 }
 
 LinkHighlightImpl::LinkHighlightImpl(Node* node, WebViewImpl* owningWebViewImpl)
@@ -81,8 +83,8 @@
     DCHECK(owningWebViewImpl);
     WebCompositorSupport* compositorSupport = Platform::current()->compositorSupport();
     DCHECK(compositorSupport);
-    m_contentLayer = adoptPtr(compositorSupport->createContentLayer(this));
-    m_clipLayer = adoptPtr(compositorSupport->createLayer());
+    m_contentLayer = wrapUnique(compositorSupport->createContentLayer(this));
+    m_clipLayer = wrapUnique(compositorSupport->createLayer());
     m_clipLayer->setTransformOrigin(WebFloatPoint3D());
     m_clipLayer->addChild(m_contentLayer->layer());
 
@@ -302,7 +304,7 @@
 
     m_contentLayer->layer()->setOpacity(startOpacity);
 
-    OwnPtr<CompositorFloatAnimationCurve> curve = CompositorFloatAnimationCurve::create();
+    std::unique_ptr<CompositorFloatAnimationCurve> curve = CompositorFloatAnimationCurve::create();
 
     const auto easeType = CubicBezierTimingFunction::EaseType::EASE;
 
@@ -314,10 +316,10 @@
     // For layout tests we don't fade out.
     curve->addCubicBezierKeyframe(CompositorFloatKeyframe(fadeDuration + extraDurationRequired, layoutTestMode() ? startOpacity : 0), easeType);
 
-    OwnPtr<CompositorAnimation> animation = CompositorAnimation::create(*curve, CompositorTargetProperty::OPACITY, 0, 0);
+    std::unique_ptr<CompositorAnimation> animation = CompositorAnimation::create(*curve, CompositorTargetProperty::OPACITY, 0, 0);
 
     m_contentLayer->layer()->setDrawsContent(true);
-    m_compositorPlayer->addAnimation(animation.leakPtr());
+    m_compositorPlayer->addAnimation(animation.release());
 
     invalidate();
     m_owningWebViewImpl->scheduleAnimation();
diff --git a/third_party/WebKit/Source/web/LinkHighlightImpl.h b/third_party/WebKit/Source/web/LinkHighlightImpl.h
index d92a28a..86c28fc 100644
--- a/third_party/WebKit/Source/web/LinkHighlightImpl.h
+++ b/third_party/WebKit/Source/web/LinkHighlightImpl.h
@@ -36,7 +36,7 @@
 #include "public/platform/WebContentLayerClient.h"
 #include "web/WebExport.h"
 #include "wtf/Forward.h"
-#include "wtf/OwnPtr.h"
+#include <memory>
 
 namespace blink {
 
@@ -52,7 +52,7 @@
     , public CompositorAnimationDelegate
     , public CompositorAnimationPlayerClient {
 public:
-    static PassOwnPtr<LinkHighlightImpl> create(Node*, WebViewImpl*);
+    static std::unique_ptr<LinkHighlightImpl> create(Node*, WebViewImpl*);
     ~LinkHighlightImpl() override;
 
     WebContentLayer* contentLayer();
@@ -91,15 +91,15 @@
     // size since the last call to this function.
     bool computeHighlightLayerPathAndPosition(const LayoutBoxModelObject&);
 
-    OwnPtr<WebContentLayer> m_contentLayer;
-    OwnPtr<WebLayer> m_clipLayer;
+    std::unique_ptr<WebContentLayer> m_contentLayer;
+    std::unique_ptr<WebLayer> m_clipLayer;
     Path m_path;
 
     Persistent<Node> m_node;
     WebViewImpl* m_owningWebViewImpl;
     GraphicsLayer* m_currentGraphicsLayer;
     bool m_isScrollingGraphicsLayer;
-    OwnPtr<CompositorAnimationPlayer> m_compositorPlayer;
+    std::unique_ptr<CompositorAnimationPlayer> m_compositorPlayer;
 
     bool m_geometryNeedsUpdate;
     bool m_isAnimating;
diff --git a/third_party/WebKit/Source/web/LinkHighlightImplTest.cpp b/third_party/WebKit/Source/web/LinkHighlightImplTest.cpp
index 4a7f761a..c4551696 100644
--- a/third_party/WebKit/Source/web/LinkHighlightImplTest.cpp
+++ b/third_party/WebKit/Source/web/LinkHighlightImplTest.cpp
@@ -47,7 +47,8 @@
 #include "web/WebLocalFrameImpl.h"
 #include "web/WebViewImpl.h"
 #include "web/tests/FrameTestHelpers.h"
-#include "wtf/PassOwnPtr.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
@@ -166,7 +167,7 @@
 // A lifetime test: delete LayerTreeView while running LinkHighlights.
 TEST(LinkHighlightImplTest, resetLayerTreeView)
 {
-    OwnPtr<FakeCompositingWebViewClient> webViewClient = adoptPtr(new FakeCompositingWebViewClient());
+    std::unique_ptr<FakeCompositingWebViewClient> webViewClient = wrapUnique(new FakeCompositingWebViewClient());
 
     const std::string baseURL("http://www.test.com/");
     const std::string fileName("test_touch_link_highlight.html");
diff --git a/third_party/WebKit/Source/web/LocalFileSystemClient.cpp b/third_party/WebKit/Source/web/LocalFileSystemClient.cpp
index ad431ca..76e1690 100644
--- a/third_party/WebKit/Source/web/LocalFileSystemClient.cpp
+++ b/third_party/WebKit/Source/web/LocalFileSystemClient.cpp
@@ -38,13 +38,15 @@
 #include "public/web/WebContentSettingsClient.h"
 #include "web/WebLocalFrameImpl.h"
 #include "web/WorkerContentSettingsClient.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/text/WTFString.h"
+#include <memory>
 
 namespace blink {
 
-PassOwnPtr<FileSystemClient> LocalFileSystemClient::create()
+std::unique_ptr<FileSystemClient> LocalFileSystemClient::create()
 {
-    return adoptPtr(static_cast<FileSystemClient*>(new LocalFileSystemClient()));
+    return wrapUnique(static_cast<FileSystemClient*>(new LocalFileSystemClient()));
 }
 
 LocalFileSystemClient::~LocalFileSystemClient()
@@ -63,7 +65,7 @@
     return WorkerContentSettingsClient::from(*toWorkerGlobalScope(context))->requestFileSystemAccessSync();
 }
 
-void LocalFileSystemClient::requestFileSystemAccessAsync(ExecutionContext* context, PassOwnPtr<ContentSettingCallbacks> callbacks)
+void LocalFileSystemClient::requestFileSystemAccessAsync(ExecutionContext* context, std::unique_ptr<ContentSettingCallbacks> callbacks)
 {
     DCHECK(context);
     if (!context->isDocument()) {
diff --git a/third_party/WebKit/Source/web/LocalFileSystemClient.h b/third_party/WebKit/Source/web/LocalFileSystemClient.h
index 597d55f..4326d2b 100644
--- a/third_party/WebKit/Source/web/LocalFileSystemClient.h
+++ b/third_party/WebKit/Source/web/LocalFileSystemClient.h
@@ -33,17 +33,18 @@
 
 #include "modules/filesystem/FileSystemClient.h"
 #include "wtf/Forward.h"
+#include <memory>
 
 namespace blink {
 
 class LocalFileSystemClient final : public FileSystemClient {
 public:
-    static PassOwnPtr<FileSystemClient> create();
+    static std::unique_ptr<FileSystemClient> create();
 
     ~LocalFileSystemClient() override;
 
     bool requestFileSystemAccessSync(ExecutionContext*) override;
-    void requestFileSystemAccessAsync(ExecutionContext*, PassOwnPtr<ContentSettingCallbacks>) override;
+    void requestFileSystemAccessAsync(ExecutionContext*, std::unique_ptr<ContentSettingCallbacks>) override;
 
 private:
     LocalFileSystemClient();
diff --git a/third_party/WebKit/Source/web/MIDIClientProxy.h b/third_party/WebKit/Source/web/MIDIClientProxy.h
index 05395e8d..9f8cefaf 100644
--- a/third_party/WebKit/Source/web/MIDIClientProxy.h
+++ b/third_party/WebKit/Source/web/MIDIClientProxy.h
@@ -33,6 +33,8 @@
 
 #include "modules/webmidi/MIDIClient.h"
 #include "platform/heap/Handle.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
@@ -42,9 +44,9 @@
 
 class MIDIClientProxy final : public MIDIClient {
 public:
-    static PassOwnPtr<MIDIClientProxy> create(WebMIDIClient* client)
+    static std::unique_ptr<MIDIClientProxy> create(WebMIDIClient* client)
     {
-        return adoptPtr(new MIDIClientProxy(client));
+        return wrapUnique(new MIDIClientProxy(client));
     }
 
     // MIDIClient
diff --git a/third_party/WebKit/Source/web/PageOverlay.cpp b/third_party/WebKit/Source/web/PageOverlay.cpp
index cfb2d80e..e113b7f 100644
--- a/third_party/WebKit/Source/web/PageOverlay.cpp
+++ b/third_party/WebKit/Source/web/PageOverlay.cpp
@@ -40,12 +40,14 @@
 #include "public/web/WebViewClient.h"
 #include "web/WebDevToolsAgentImpl.h"
 #include "web/WebViewImpl.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
-PassOwnPtr<PageOverlay> PageOverlay::create(WebViewImpl* viewImpl, PageOverlay::Delegate* delegate)
+std::unique_ptr<PageOverlay> PageOverlay::create(WebViewImpl* viewImpl, PageOverlay::Delegate* delegate)
 {
-    return adoptPtr(new PageOverlay(viewImpl, delegate));
+    return wrapUnique(new PageOverlay(viewImpl, delegate));
 }
 
 PageOverlay::PageOverlay(WebViewImpl* viewImpl, PageOverlay::Delegate* delegate)
diff --git a/third_party/WebKit/Source/web/PageOverlay.h b/third_party/WebKit/Source/web/PageOverlay.h
index c027ea2..e261c4f2 100644
--- a/third_party/WebKit/Source/web/PageOverlay.h
+++ b/third_party/WebKit/Source/web/PageOverlay.h
@@ -33,9 +33,8 @@
 #include "platform/graphics/GraphicsLayerClient.h"
 #include "platform/graphics/paint/DisplayItemClient.h"
 #include "web/WebExport.h"
-#include "wtf/OwnPtr.h"
-#include "wtf/PassOwnPtr.h"
 #include "wtf/text/WTFString.h"
+#include <memory>
 
 namespace blink {
 
@@ -59,7 +58,7 @@
         virtual ~Delegate() { }
     };
 
-    static PassOwnPtr<PageOverlay> create(WebViewImpl*, PageOverlay::Delegate*);
+    static std::unique_ptr<PageOverlay> create(WebViewImpl*, PageOverlay::Delegate*);
 
     ~PageOverlay();
 
@@ -83,7 +82,7 @@
 
     WebViewImpl* m_viewImpl;
     Persistent<PageOverlay::Delegate> m_delegate;
-    OwnPtr<GraphicsLayer> m_layer;
+    std::unique_ptr<GraphicsLayer> m_layer;
 };
 
 } // namespace blink
diff --git a/third_party/WebKit/Source/web/PageOverlayTest.cpp b/third_party/WebKit/Source/web/PageOverlayTest.cpp
index 5eddde85..5ada6d1 100644
--- a/third_party/WebKit/Source/web/PageOverlayTest.cpp
+++ b/third_party/WebKit/Source/web/PageOverlayTest.cpp
@@ -22,6 +22,7 @@
 #include "web/WebLocalFrameImpl.h"
 #include "web/WebViewImpl.h"
 #include "web/tests/FrameTestHelpers.h"
+#include <memory>
 
 using testing::_;
 using testing::AtLeast;
@@ -79,7 +80,7 @@
 
     WebViewImpl* webViewImpl() const { return m_helper.webViewImpl(); }
 
-    PassOwnPtr<PageOverlay> createSolidYellowOverlay()
+    std::unique_ptr<PageOverlay> createSolidYellowOverlay()
     {
         return PageOverlay::create(webViewImpl(), new SolidColorOverlay(SK_ColorYELLOW));
     }
@@ -111,7 +112,7 @@
     initialize(AcceleratedCompositing);
     webViewImpl()->layerTreeView()->setViewportSize(WebSize(viewportWidth, viewportHeight));
 
-    OwnPtr<PageOverlay> pageOverlay = createSolidYellowOverlay();
+    std::unique_ptr<PageOverlay> pageOverlay = createSolidYellowOverlay();
     pageOverlay->update();
     webViewImpl()->updateAllLifecyclePhases();
 
@@ -141,7 +142,7 @@
 TEST_F(PageOverlayTest, PageOverlay_VisualRect)
 {
     initialize(AcceleratedCompositing);
-    OwnPtr<PageOverlay> pageOverlay = createSolidYellowOverlay();
+    std::unique_ptr<PageOverlay> pageOverlay = createSolidYellowOverlay();
     pageOverlay->update();
     webViewImpl()->updateAllLifecyclePhases();
     EXPECT_EQ(LayoutRect(0, 0, viewportWidth, viewportHeight), pageOverlay->visualRect());
diff --git a/third_party/WebKit/Source/web/PageWidgetDelegate.h b/third_party/WebKit/Source/web/PageWidgetDelegate.h
index ef12d7a..95f9b1ef 100644
--- a/third_party/WebKit/Source/web/PageWidgetDelegate.h
+++ b/third_party/WebKit/Source/web/PageWidgetDelegate.h
@@ -35,7 +35,6 @@
 #include "public/web/WebInputEvent.h"
 #include "public/web/WebWidget.h"
 #include "web/WebExport.h"
-#include "wtf/OwnPtr.h"
 
 namespace blink {
 
diff --git a/third_party/WebKit/Source/web/RemoteFrameClientImpl.cpp b/third_party/WebKit/Source/web/RemoteFrameClientImpl.cpp
index e3b220f..b22754b 100644
--- a/third_party/WebKit/Source/web/RemoteFrameClientImpl.cpp
+++ b/third_party/WebKit/Source/web/RemoteFrameClientImpl.cpp
@@ -18,6 +18,8 @@
 #include "web/WebInputEventConversion.h"
 #include "web/WebLocalFrameImpl.h"
 #include "web/WebRemoteFrameImpl.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
@@ -172,11 +174,11 @@
     // This is only called when we have out-of-process iframes, which
     // need to forward input events across processes.
     // FIXME: Add a check for out-of-process iframes enabled.
-    OwnPtr<WebInputEvent> webEvent;
+    std::unique_ptr<WebInputEvent> webEvent;
     if (event->isKeyboardEvent())
-        webEvent = adoptPtr(new WebKeyboardEventBuilder(*static_cast<KeyboardEvent*>(event)));
+        webEvent = wrapUnique(new WebKeyboardEventBuilder(*static_cast<KeyboardEvent*>(event)));
     else if (event->isMouseEvent())
-        webEvent = adoptPtr(new WebMouseEventBuilder(m_webFrame->frame()->view(), LayoutItem(m_webFrame->toImplBase()->frame()->ownerLayoutObject()), *static_cast<MouseEvent*>(event)));
+        webEvent = wrapUnique(new WebMouseEventBuilder(m_webFrame->frame()->view(), LayoutItem(m_webFrame->toImplBase()->frame()->ownerLayoutObject()), *static_cast<MouseEvent*>(event)));
 
     // Other or internal Blink events should not be forwarded.
     if (!webEvent || webEvent->type == WebInputEvent::Undefined)
diff --git a/third_party/WebKit/Source/web/ServiceWorkerGlobalScopeClientImpl.cpp b/third_party/WebKit/Source/web/ServiceWorkerGlobalScopeClientImpl.cpp
index b3cfe304..2983d67 100644
--- a/third_party/WebKit/Source/web/ServiceWorkerGlobalScopeClientImpl.cpp
+++ b/third_party/WebKit/Source/web/ServiceWorkerGlobalScopeClientImpl.cpp
@@ -34,7 +34,7 @@
 #include "public/platform/WebURL.h"
 #include "public/platform/modules/serviceworker/WebServiceWorkerResponse.h"
 #include "public/web/modules/serviceworker/WebServiceWorkerContextClient.h"
-#include "wtf/PassOwnPtr.h"
+#include <memory>
 
 namespace blink {
 
@@ -122,14 +122,14 @@
     m_client.didHandleSyncEvent(syncEventID, result);
 }
 
-void ServiceWorkerGlobalScopeClientImpl::postMessageToClient(const WebString& clientUUID, const WebString& message, PassOwnPtr<WebMessagePortChannelArray> webChannels)
+void ServiceWorkerGlobalScopeClientImpl::postMessageToClient(const WebString& clientUUID, const WebString& message, std::unique_ptr<WebMessagePortChannelArray> webChannels)
 {
-    m_client.postMessageToClient(clientUUID, message, webChannels.leakPtr());
+    m_client.postMessageToClient(clientUUID, message, webChannels.release());
 }
 
-void ServiceWorkerGlobalScopeClientImpl::postMessageToCrossOriginClient(const WebCrossOriginServiceWorkerClient& client, const WebString& message, PassOwnPtr<WebMessagePortChannelArray> webChannels)
+void ServiceWorkerGlobalScopeClientImpl::postMessageToCrossOriginClient(const WebCrossOriginServiceWorkerClient& client, const WebString& message, std::unique_ptr<WebMessagePortChannelArray> webChannels)
 {
-    m_client.postMessageToCrossOriginClient(client, message, webChannels.leakPtr());
+    m_client.postMessageToCrossOriginClient(client, message, webChannels.release());
 }
 
 void ServiceWorkerGlobalScopeClientImpl::skipWaiting(WebServiceWorkerSkipWaitingCallbacks* callbacks)
diff --git a/third_party/WebKit/Source/web/ServiceWorkerGlobalScopeClientImpl.h b/third_party/WebKit/Source/web/ServiceWorkerGlobalScopeClientImpl.h
index 52d6d4a..e9ca382 100644
--- a/third_party/WebKit/Source/web/ServiceWorkerGlobalScopeClientImpl.h
+++ b/third_party/WebKit/Source/web/ServiceWorkerGlobalScopeClientImpl.h
@@ -34,7 +34,7 @@
 #include "modules/serviceworkers/ServiceWorkerGlobalScopeClient.h"
 #include "public/platform/modules/serviceworker/WebServiceWorkerClientsInfo.h"
 #include "public/platform/modules/serviceworker/WebServiceWorkerSkipWaitingCallbacks.h"
-#include "wtf/OwnPtr.h"
+#include <memory>
 
 namespace blink {
 
@@ -65,8 +65,8 @@
     void didHandleNotificationCloseEvent(int eventID, WebServiceWorkerEventResult) override;
     void didHandlePushEvent(int pushEventID, WebServiceWorkerEventResult) override;
     void didHandleSyncEvent(int syncEventID, WebServiceWorkerEventResult) override;
-    void postMessageToClient(const WebString& clientUUID, const WebString& message, PassOwnPtr<WebMessagePortChannelArray>) override;
-    void postMessageToCrossOriginClient(const WebCrossOriginServiceWorkerClient&, const WebString& message, PassOwnPtr<WebMessagePortChannelArray>) override;
+    void postMessageToClient(const WebString& clientUUID, const WebString& message, std::unique_ptr<WebMessagePortChannelArray>) override;
+    void postMessageToCrossOriginClient(const WebCrossOriginServiceWorkerClient&, const WebString& message, std::unique_ptr<WebMessagePortChannelArray>) override;
     void skipWaiting(WebServiceWorkerSkipWaitingCallbacks*) override;
     void claim(WebServiceWorkerClientsClaimCallbacks*) override;
     void focus(const WebString& clientUUID, WebServiceWorkerClientCallbacks*) override;
diff --git a/third_party/WebKit/Source/web/ServiceWorkerGlobalScopeProxy.cpp b/third_party/WebKit/Source/web/ServiceWorkerGlobalScopeProxy.cpp
index e998bb0..80b9d7d 100644
--- a/third_party/WebKit/Source/web/ServiceWorkerGlobalScopeProxy.cpp
+++ b/third_party/WebKit/Source/web/ServiceWorkerGlobalScopeProxy.cpp
@@ -64,8 +64,8 @@
 #include "web/WebEmbeddedWorkerImpl.h"
 #include "wtf/Assertions.h"
 #include "wtf/Functional.h"
-#include "wtf/PassOwnPtr.h"
-
+#include "wtf/PtrUtil.h"
+#include <memory>
 #include <utility>
 
 namespace blink {
@@ -124,7 +124,7 @@
     String origin;
     if (!sourceOrigin.isUnique())
         origin = sourceOrigin.toString();
-    ServiceWorker* source = ServiceWorker::from(m_workerGlobalScope->getExecutionContext(), adoptPtr(handle.release()));
+    ServiceWorker* source = ServiceWorker::from(m_workerGlobalScope->getExecutionContext(), wrapUnique(handle.release()));
     WaitUntilObserver* observer = WaitUntilObserver::create(workerGlobalScope(), WaitUntilObserver::Message, eventID);
 
     Event* event = ExtendableMessageEvent::create(value, origin, ports, source, observer);
@@ -217,7 +217,7 @@
     return m_workerGlobalScope->hasEventListeners(EventTypeNames::fetch);
 }
 
-void ServiceWorkerGlobalScopeProxy::reportException(const String& errorMessage, PassOwnPtr<SourceLocation> location)
+void ServiceWorkerGlobalScopeProxy::reportException(const String& errorMessage, std::unique_ptr<SourceLocation> location)
 {
     client().reportException(errorMessage, location->lineNumber(), location->columnNumber(), location->url());
 }
diff --git a/third_party/WebKit/Source/web/ServiceWorkerGlobalScopeProxy.h b/third_party/WebKit/Source/web/ServiceWorkerGlobalScopeProxy.h
index bddf8ab9..70c9a54 100644
--- a/third_party/WebKit/Source/web/ServiceWorkerGlobalScopeProxy.h
+++ b/third_party/WebKit/Source/web/ServiceWorkerGlobalScopeProxy.h
@@ -37,7 +37,7 @@
 #include "public/platform/WebString.h"
 #include "public/web/modules/serviceworker/WebServiceWorkerContextProxy.h"
 #include "wtf/Forward.h"
-#include "wtf/OwnPtr.h"
+#include <memory>
 
 namespace blink {
 
@@ -84,7 +84,7 @@
     bool hasFetchEventHandler() override;
 
     // WorkerReportingProxy overrides:
-    void reportException(const String& errorMessage, PassOwnPtr<SourceLocation>) override;
+    void reportException(const String& errorMessage, std::unique_ptr<SourceLocation>) override;
     void reportConsoleMessage(ConsoleMessage*) override;
     void postMessageToPageInspector(const String&) override;
     void postWorkerConsoleAgentEnabled() override { }
diff --git a/third_party/WebKit/Source/web/SharedWorkerRepositoryClientImpl.cpp b/third_party/WebKit/Source/web/SharedWorkerRepositoryClientImpl.cpp
index 9971e968..d70c05e 100644
--- a/third_party/WebKit/Source/web/SharedWorkerRepositoryClientImpl.cpp
+++ b/third_party/WebKit/Source/web/SharedWorkerRepositoryClientImpl.cpp
@@ -50,13 +50,15 @@
 #include "public/web/WebSharedWorkerCreationErrors.h"
 #include "public/web/WebSharedWorkerRepositoryClient.h"
 #include "web/WebLocalFrameImpl.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
 // Callback class that keeps the SharedWorker and WebSharedWorker objects alive while connecting.
 class SharedWorkerConnector : private WebSharedWorkerConnector::ConnectListener {
 public:
-    SharedWorkerConnector(SharedWorker* worker, const KURL& url, const String& name, WebMessagePortChannelUniquePtr channel, PassOwnPtr<WebSharedWorkerConnector> webWorkerConnector)
+    SharedWorkerConnector(SharedWorker* worker, const KURL& url, const String& name, WebMessagePortChannelUniquePtr channel, std::unique_ptr<WebSharedWorkerConnector> webWorkerConnector)
         : m_worker(worker)
         , m_url(url)
         , m_name(name)
@@ -74,7 +76,7 @@
     Persistent<SharedWorker> m_worker;
     KURL m_url;
     String m_name;
-    OwnPtr<WebSharedWorkerConnector> m_webWorkerConnector;
+    std::unique_ptr<WebSharedWorkerConnector> m_webWorkerConnector;
     WebMessagePortChannelUniquePtr m_channel;
 };
 
@@ -120,7 +122,7 @@
     // when multiple might have been sent. Fix by making the
     // SharedWorkerConnector interface take a map that can contain
     // multiple headers.
-    OwnPtr<Vector<CSPHeaderAndType>> headers = worker->getExecutionContext()->contentSecurityPolicy()->headers();
+    std::unique_ptr<Vector<CSPHeaderAndType>> headers = worker->getExecutionContext()->contentSecurityPolicy()->headers();
     WebString header;
     WebContentSecurityPolicyType headerType = WebContentSecurityPolicyTypeReport;
 
@@ -132,7 +134,7 @@
     WebWorkerCreationError creationError;
     String unusedSecureContextError;
     bool isSecureContext = worker->getExecutionContext()->isSecureContext(unusedSecureContextError);
-    OwnPtr<WebSharedWorkerConnector> webWorkerConnector = adoptPtr(m_client->createSharedWorkerConnector(url, name, getId(document), header, headerType, worker->getExecutionContext()->securityContext().addressSpace(), isSecureContext ? WebSharedWorkerCreationContextTypeSecure : WebSharedWorkerCreationContextTypeNonsecure, &creationError));
+    std::unique_ptr<WebSharedWorkerConnector> webWorkerConnector = wrapUnique(m_client->createSharedWorkerConnector(url, name, getId(document), header, headerType, worker->getExecutionContext()->securityContext().addressSpace(), isSecureContext ? WebSharedWorkerCreationContextTypeSecure : WebSharedWorkerCreationContextTypeNonsecure, &creationError));
     if (creationError != WebWorkerCreationErrorNone) {
         if (creationError == WebWorkerCreationErrorURLMismatch) {
             // Existing worker does not match this url, so return an error back to the caller.
diff --git a/third_party/WebKit/Source/web/SharedWorkerRepositoryClientImpl.h b/third_party/WebKit/Source/web/SharedWorkerRepositoryClientImpl.h
index ce91215..fbc621d 100644
--- a/third_party/WebKit/Source/web/SharedWorkerRepositoryClientImpl.h
+++ b/third_party/WebKit/Source/web/SharedWorkerRepositoryClientImpl.h
@@ -33,8 +33,9 @@
 
 #include "core/workers/SharedWorkerRepositoryClient.h"
 #include "wtf/Noncopyable.h"
-#include "wtf/PassOwnPtr.h"
 #include "wtf/PassRefPtr.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
@@ -44,9 +45,9 @@
     WTF_MAKE_NONCOPYABLE(SharedWorkerRepositoryClientImpl);
     USING_FAST_MALLOC(SharedWorkerRepositoryClientImpl);
 public:
-    static PassOwnPtr<SharedWorkerRepositoryClientImpl> create(WebSharedWorkerRepositoryClient* client)
+    static std::unique_ptr<SharedWorkerRepositoryClientImpl> create(WebSharedWorkerRepositoryClient* client)
     {
-        return adoptPtr(new SharedWorkerRepositoryClientImpl(client));
+        return wrapUnique(new SharedWorkerRepositoryClientImpl(client));
     }
 
     ~SharedWorkerRepositoryClientImpl() override { }
diff --git a/third_party/WebKit/Source/web/SpeechRecognitionClientProxy.cpp b/third_party/WebKit/Source/web/SpeechRecognitionClientProxy.cpp
index 798091f..62f929c3 100644
--- a/third_party/WebKit/Source/web/SpeechRecognitionClientProxy.cpp
+++ b/third_party/WebKit/Source/web/SpeechRecognitionClientProxy.cpp
@@ -42,6 +42,8 @@
 #include "public/web/WebSpeechRecognitionResult.h"
 #include "public/web/WebSpeechRecognizer.h"
 #include "wtf/PassRefPtr.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
@@ -49,9 +51,9 @@
 {
 }
 
-PassOwnPtr<SpeechRecognitionClientProxy> SpeechRecognitionClientProxy::create(WebSpeechRecognizer* recognizer)
+std::unique_ptr<SpeechRecognitionClientProxy> SpeechRecognitionClientProxy::create(WebSpeechRecognizer* recognizer)
 {
-    return adoptPtr(new SpeechRecognitionClientProxy(recognizer));
+    return wrapUnique(new SpeechRecognitionClientProxy(recognizer));
 }
 
 void SpeechRecognitionClientProxy::start(SpeechRecognition* recognition, const SpeechGrammarList* grammarList, const String& lang, bool continuous, bool interimResults, unsigned long maxAlternatives, MediaStreamTrack* audioTrack)
diff --git a/third_party/WebKit/Source/web/SpeechRecognitionClientProxy.h b/third_party/WebKit/Source/web/SpeechRecognitionClientProxy.h
index 0ff2721d..c23ac5fd 100644
--- a/third_party/WebKit/Source/web/SpeechRecognitionClientProxy.h
+++ b/third_party/WebKit/Source/web/SpeechRecognitionClientProxy.h
@@ -29,8 +29,8 @@
 #include "modules/speech/SpeechRecognitionClient.h"
 #include "public/web/WebSpeechRecognizerClient.h"
 #include "wtf/Compiler.h"
-#include "wtf/PassOwnPtr.h"
 #include "wtf/text/WTFString.h"
+#include <memory>
 
 namespace blink {
 
@@ -44,7 +44,7 @@
 
     // Constructing a proxy object with a 0 WebSpeechRecognizer is safe in
     // itself, but attempting to call start/stop/abort on it will crash.
-    static PassOwnPtr<SpeechRecognitionClientProxy> create(WebSpeechRecognizer*);
+    static std::unique_ptr<SpeechRecognitionClientProxy> create(WebSpeechRecognizer*);
 
     // SpeechRecognitionClient:
     void start(SpeechRecognition*, const SpeechGrammarList*, const String& lang, bool continuous, bool interimResults, unsigned long maxAlternatives, MediaStreamTrack*) override;
diff --git a/third_party/WebKit/Source/web/StorageClientImpl.cpp b/third_party/WebKit/Source/web/StorageClientImpl.cpp
index 9db053e..6c651c2b6 100644
--- a/third_party/WebKit/Source/web/StorageClientImpl.cpp
+++ b/third_party/WebKit/Source/web/StorageClientImpl.cpp
@@ -31,6 +31,8 @@
 #include "public/web/WebViewClient.h"
 #include "web/WebLocalFrameImpl.h"
 #include "web/WebViewImpl.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
@@ -39,11 +41,11 @@
 {
 }
 
-PassOwnPtr<StorageNamespace> StorageClientImpl::createSessionStorageNamespace()
+std::unique_ptr<StorageNamespace> StorageClientImpl::createSessionStorageNamespace()
 {
     if (!m_webView->client())
         return nullptr;
-    return adoptPtr(new StorageNamespace(adoptPtr(m_webView->client()->createSessionStorageNamespace())));
+    return wrapUnique(new StorageNamespace(wrapUnique(m_webView->client()->createSessionStorageNamespace())));
 }
 
 bool StorageClientImpl::canAccessStorage(LocalFrame* frame, StorageType type) const
diff --git a/third_party/WebKit/Source/web/StorageClientImpl.h b/third_party/WebKit/Source/web/StorageClientImpl.h
index 019b1d3..d8de138 100644
--- a/third_party/WebKit/Source/web/StorageClientImpl.h
+++ b/third_party/WebKit/Source/web/StorageClientImpl.h
@@ -6,6 +6,7 @@
 #define StorageClientImpl_h
 
 #include "modules/storage/StorageClient.h"
+#include <memory>
 
 namespace blink {
 
@@ -15,7 +16,7 @@
 public:
     explicit StorageClientImpl(WebViewImpl*);
 
-    PassOwnPtr<StorageNamespace> createSessionStorageNamespace() override;
+    std::unique_ptr<StorageNamespace> createSessionStorageNamespace() override;
     bool canAccessStorage(LocalFrame*, StorageType) const override;
 
 private:
diff --git a/third_party/WebKit/Source/web/SuspendableScriptExecutor.cpp b/third_party/WebKit/Source/web/SuspendableScriptExecutor.cpp
index 3a0a955..9a3dabc 100644
--- a/third_party/WebKit/Source/web/SuspendableScriptExecutor.cpp
+++ b/third_party/WebKit/Source/web/SuspendableScriptExecutor.cpp
@@ -11,6 +11,8 @@
 #include "platform/UserGestureIndicator.h"
 #include "public/platform/WebVector.h"
 #include "public/web/WebScriptExecutionCallback.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
@@ -65,9 +67,9 @@
 {
     // after calling the destructor of object - object will be unsubscribed from
     // resumed and contextDestroyed LifecycleObserver methods
-    OwnPtr<UserGestureIndicator> indicator;
+    std::unique_ptr<UserGestureIndicator> indicator;
     if (m_userGesture)
-        indicator = adoptPtr(new UserGestureIndicator(DefinitelyProcessingNewUserGesture));
+        indicator = wrapUnique(new UserGestureIndicator(DefinitelyProcessingNewUserGesture));
 
     v8::HandleScope scope(v8::Isolate::GetCurrent());
     Vector<v8::Local<v8::Value>> results;
diff --git a/third_party/WebKit/Source/web/TextFinder.h b/third_party/WebKit/Source/web/TextFinder.h
index 267f2335..7466c43c11 100644
--- a/third_party/WebKit/Source/web/TextFinder.h
+++ b/third_party/WebKit/Source/web/TextFinder.h
@@ -40,7 +40,6 @@
 #include "public/web/WebFindOptions.h"
 #include "web/WebExport.h"
 #include "wtf/Noncopyable.h"
-#include "wtf/PassOwnPtr.h"
 #include "wtf/PassRefPtr.h"
 #include "wtf/Vector.h"
 #include "wtf/text/WTFString.h"
diff --git a/third_party/WebKit/Source/web/WebBlob.cpp b/third_party/WebKit/Source/web/WebBlob.cpp
index 370a6b10..977cc96 100644
--- a/third_party/WebKit/Source/web/WebBlob.cpp
+++ b/third_party/WebKit/Source/web/WebBlob.cpp
@@ -35,7 +35,7 @@
 #include "core/fileapi/Blob.h"
 #include "platform/FileMetadata.h"
 #include "platform/blob/BlobData.h"
-#include "wtf/PassOwnPtr.h"
+#include <memory>
 
 namespace blink {
 
@@ -46,7 +46,7 @@
 
 WebBlob WebBlob::createFromFile(const WebString& path, long long size)
 {
-    OwnPtr<BlobData> blobData = BlobData::create();
+    std::unique_ptr<BlobData> blobData = BlobData::create();
     blobData->appendFile(path, 0, size, invalidFileTime());
     return Blob::create(BlobDataHandle::create(std::move(blobData), size));
 }
diff --git a/third_party/WebKit/Source/web/WebDOMActivityLogger.cpp b/third_party/WebKit/Source/web/WebDOMActivityLogger.cpp
index 71236d1..ff332a0 100644
--- a/third_party/WebKit/Source/web/WebDOMActivityLogger.cpp
+++ b/third_party/WebKit/Source/web/WebDOMActivityLogger.cpp
@@ -35,13 +35,15 @@
 #include "core/dom/Document.h"
 #include "core/frame/LocalDOMWindow.h"
 #include "wtf/PassRefPtr.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/text/WTFString.h"
+#include <memory>
 
 namespace blink {
 
 class DOMActivityLoggerContainer : public V8DOMActivityLogger {
 public:
-    explicit DOMActivityLoggerContainer(PassOwnPtr<WebDOMActivityLogger> logger)
+    explicit DOMActivityLoggerContainer(std::unique_ptr<WebDOMActivityLogger> logger)
         : m_domActivityLogger(std::move(logger))
     {
     }
@@ -84,7 +86,7 @@
         return WebString();
     }
 
-    OwnPtr<WebDOMActivityLogger> m_domActivityLogger;
+    std::unique_ptr<WebDOMActivityLogger> m_domActivityLogger;
 };
 
 bool hasDOMActivityLogger(int worldId, const WebString& extensionId)
@@ -95,7 +97,7 @@
 void setDOMActivityLogger(int worldId, const WebString& extensionId, WebDOMActivityLogger* logger)
 {
     DCHECK(logger);
-    V8DOMActivityLogger::setActivityLogger(worldId, extensionId, adoptPtr(new DOMActivityLoggerContainer(adoptPtr(logger))));
+    V8DOMActivityLogger::setActivityLogger(worldId, extensionId, wrapUnique(new DOMActivityLoggerContainer(wrapUnique(logger))));
 }
 
 } // namespace blink
diff --git a/third_party/WebKit/Source/web/WebDataSourceImpl.cpp b/third_party/WebKit/Source/web/WebDataSourceImpl.cpp
index 4be3221..1cf7e7b4 100644
--- a/third_party/WebKit/Source/web/WebDataSourceImpl.cpp
+++ b/third_party/WebKit/Source/web/WebDataSourceImpl.cpp
@@ -35,7 +35,8 @@
 #include "public/platform/WebURL.h"
 #include "public/platform/WebURLError.h"
 #include "public/platform/WebVector.h"
-#include "wtf/PassOwnPtr.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
@@ -104,8 +105,8 @@
 
 void WebDataSourceImpl::setExtraData(ExtraData* extraData)
 {
-    // extraData can't be a PassOwnPtr because setExtraData is a WebKit API function.
-    m_extraData = adoptPtr(extraData);
+    // extraData can't be a std::unique_ptr because setExtraData is a WebKit API function.
+    m_extraData = wrapUnique(extraData);
 }
 
 void WebDataSourceImpl::setNavigationStartTime(double navigationStart)
@@ -151,7 +152,7 @@
 
 void WebDataSourceImpl::setSubresourceFilter(WebDocumentSubresourceFilter* subresourceFilter)
 {
-    DocumentLoader::setSubresourceFilter(WTF::adoptPtr(subresourceFilter));
+    DocumentLoader::setSubresourceFilter(WTF::wrapUnique(subresourceFilter));
 }
 
 DEFINE_TRACE(WebDataSourceImpl)
diff --git a/third_party/WebKit/Source/web/WebDataSourceImpl.h b/third_party/WebKit/Source/web/WebDataSourceImpl.h
index 5bb0cecf..717c9c6a 100644
--- a/third_party/WebKit/Source/web/WebDataSourceImpl.h
+++ b/third_party/WebKit/Source/web/WebDataSourceImpl.h
@@ -37,9 +37,8 @@
 #include "platform/heap/Handle.h"
 #include "platform/weborigin/KURL.h"
 #include "public/web/WebDataSource.h"
-#include "wtf/OwnPtr.h"
-#include "wtf/PassOwnPtr.h"
 #include "wtf/Vector.h"
+#include <memory>
 
 namespace blink {
 
@@ -84,7 +83,7 @@
     mutable WrappedResourceRequest m_requestWrapper;
     mutable WrappedResourceResponse m_responseWrapper;
 
-    OwnPtr<ExtraData> m_extraData;
+    std::unique_ptr<ExtraData> m_extraData;
 };
 
 } // namespace blink
diff --git a/third_party/WebKit/Source/web/WebDevToolsAgentImpl.cpp b/third_party/WebKit/Source/web/WebDevToolsAgentImpl.cpp
index 0e5a4f94..7b5a6e3 100644
--- a/third_party/WebKit/Source/web/WebDevToolsAgentImpl.cpp
+++ b/third_party/WebKit/Source/web/WebDevToolsAgentImpl.cpp
@@ -90,7 +90,9 @@
 #include "web/WebViewImpl.h"
 #include "wtf/MathExtras.h"
 #include "wtf/Noncopyable.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/text/WTFString.h"
+#include <memory>
 
 namespace blink {
 
@@ -116,7 +118,7 @@
     {
         if (s_instance)
             return;
-        OwnPtr<ClientMessageLoopAdapter> instance = adoptPtr(new ClientMessageLoopAdapter(adoptPtr(client->createClientMessageLoop())));
+        std::unique_ptr<ClientMessageLoopAdapter> instance = wrapUnique(new ClientMessageLoopAdapter(wrapUnique(client->createClientMessageLoop())));
         s_instance = instance.get();
         MainThreadDebugger::instance()->setClientMessageLoop(std::move(instance));
     }
@@ -152,7 +154,7 @@
     }
 
 private:
-    ClientMessageLoopAdapter(PassOwnPtr<WebDevToolsAgentClient::WebKitClientMessageLoop> messageLoop)
+    ClientMessageLoopAdapter(std::unique_ptr<WebDevToolsAgentClient::WebKitClientMessageLoop> messageLoop)
         : m_runningForDebugBreak(false)
         , m_runningForCreateWindow(false)
         , m_messageLoop(std::move(messageLoop))
@@ -267,7 +269,7 @@
 
     bool m_runningForDebugBreak;
     bool m_runningForCreateWindow;
-    OwnPtr<WebDevToolsAgentClient::WebKitClientMessageLoop> m_messageLoop;
+    std::unique_ptr<WebDevToolsAgentClient::WebKitClientMessageLoop> m_messageLoop;
     typedef HashSet<WebViewImpl*> FrozenViewsSet;
     FrozenViewsSet m_frozenViews;
     WebFrameWidgetsSet m_frozenWidgets;
@@ -646,7 +648,7 @@
     flushProtocolNotifications();
 }
 
-void WebDevToolsAgentImpl::runDebuggerTask(int sessionId, PassOwnPtr<WebDevToolsAgent::MessageDescriptor> descriptor)
+void WebDevToolsAgentImpl::runDebuggerTask(int sessionId, std::unique_ptr<WebDevToolsAgent::MessageDescriptor> descriptor)
 {
     WebDevToolsAgent* webagent = descriptor->agent();
     if (!webagent)
@@ -659,8 +661,8 @@
 
 void WebDevToolsAgent::interruptAndDispatch(int sessionId, MessageDescriptor* rawDescriptor)
 {
-    // rawDescriptor can't be a PassOwnPtr because interruptAndDispatch is a WebKit API function.
-    MainThreadDebugger::interruptMainThreadAndRun(threadSafeBind(WebDevToolsAgentImpl::runDebuggerTask, sessionId, passed(adoptPtr(rawDescriptor))));
+    // rawDescriptor can't be a std::unique_ptr because interruptAndDispatch is a WebKit API function.
+    MainThreadDebugger::interruptMainThreadAndRun(threadSafeBind(WebDevToolsAgentImpl::runDebuggerTask, sessionId, passed(wrapUnique(rawDescriptor))));
 }
 
 bool WebDevToolsAgent::shouldInterruptForMethod(const WebString& method)
diff --git a/third_party/WebKit/Source/web/WebDevToolsAgentImpl.h b/third_party/WebKit/Source/web/WebDevToolsAgentImpl.h
index 222a0d2..a25d5a1 100644
--- a/third_party/WebKit/Source/web/WebDevToolsAgentImpl.h
+++ b/third_party/WebKit/Source/web/WebDevToolsAgentImpl.h
@@ -40,8 +40,8 @@
 #include "public/web/WebDevToolsAgent.h"
 #include "web/InspectorEmulationAgent.h"
 #include "wtf/Forward.h"
-#include "wtf/OwnPtr.h"
 #include "wtf/Vector.h"
+#include <memory>
 
 namespace blink {
 
@@ -135,7 +135,7 @@
     void dispatchMessageFromFrontend(int sessionId, const String& method, const String& message);
 
     friend class WebDevToolsAgent;
-    static void runDebuggerTask(int sessionId, PassOwnPtr<WebDevToolsAgent::MessageDescriptor>);
+    static void runDebuggerTask(int sessionId, std::unique_ptr<WebDevToolsAgent::MessageDescriptor>);
 
     bool attached() const { return m_session.get(); }
 
diff --git a/third_party/WebKit/Source/web/WebElementTest.cpp b/third_party/WebKit/Source/web/WebElementTest.cpp
index 3395001..58cecc69 100644
--- a/third_party/WebKit/Source/web/WebElementTest.cpp
+++ b/third_party/WebKit/Source/web/WebElementTest.cpp
@@ -9,6 +9,7 @@
 #include "core/dom/shadow/ShadowRoot.h"
 #include "core/testing/DummyPageHolder.h"
 #include "testing/gtest/include/gtest/gtest.h"
+#include <memory>
 
 namespace blink {
 
@@ -68,7 +69,7 @@
 private:
     void SetUp() override;
 
-    OwnPtr<DummyPageHolder> m_pageHolder;
+    std::unique_ptr<DummyPageHolder> m_pageHolder;
 };
 
 void WebElementTest::insertHTML(String html)
diff --git a/third_party/WebKit/Source/web/WebEmbeddedWorkerImpl.cpp b/third_party/WebKit/Source/web/WebEmbeddedWorkerImpl.cpp
index d6d3b30..e995bff4 100644
--- a/third_party/WebKit/Source/web/WebEmbeddedWorkerImpl.cpp
+++ b/third_party/WebKit/Source/web/WebEmbeddedWorkerImpl.cpp
@@ -71,12 +71,14 @@
 #include "web/WebLocalFrameImpl.h"
 #include "web/WorkerContentSettingsClient.h"
 #include "wtf/Functional.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
 WebEmbeddedWorker* WebEmbeddedWorker::create(WebServiceWorkerContextClient* client, WebWorkerContentSettingsClientProxy* contentSettingsClient)
 {
-    return new WebEmbeddedWorkerImpl(adoptPtr(client), adoptPtr(contentSettingsClient));
+    return new WebEmbeddedWorkerImpl(wrapUnique(client), wrapUnique(contentSettingsClient));
 }
 
 static HashSet<WebEmbeddedWorkerImpl*>& runningWorkerInstances()
@@ -85,7 +87,7 @@
     return set;
 }
 
-WebEmbeddedWorkerImpl::WebEmbeddedWorkerImpl(PassOwnPtr<WebServiceWorkerContextClient> client, PassOwnPtr<WebWorkerContentSettingsClientProxy> contentSettingsClient)
+WebEmbeddedWorkerImpl::WebEmbeddedWorkerImpl(std::unique_ptr<WebServiceWorkerContextClient> client, std::unique_ptr<WebWorkerContentSettingsClientProxy> contentSettingsClient)
     : m_workerContextClient(std::move(client))
     , m_contentSettingsClient(std::move(contentSettingsClient))
     , m_workerInspectorProxy(WorkerInspectorProxy::create())
@@ -327,7 +329,7 @@
     DCHECK(m_loadingShadowPage);
     DCHECK(!m_askedToTerminate);
     m_loadingShadowPage = false;
-    m_networkProvider = adoptPtr(m_workerContextClient->createServiceWorkerNetworkProvider(frame->dataSource()));
+    m_networkProvider = wrapUnique(m_workerContextClient->createServiceWorkerNetworkProvider(frame->dataSource()));
     m_mainScriptLoader = WorkerScriptLoader::create();
     m_mainScriptLoader->setRequestContext(WebURLRequest::RequestContextServiceWorker);
     m_mainScriptLoader->loadAsynchronously(
@@ -406,7 +408,7 @@
     provideContentSettingsClientToWorker(workerClients, std::move(m_contentSettingsClient));
     provideIndexedDBClientToWorker(workerClients, IndexedDBClientImpl::create());
     provideServiceWorkerGlobalScopeClientToWorker(workerClients, ServiceWorkerGlobalScopeClientImpl::create(*m_workerContextClient));
-    provideServiceWorkerContainerClientToWorker(workerClients, adoptPtr(m_workerContextClient->createServiceWorkerProvider()));
+    provideServiceWorkerContainerClientToWorker(workerClients, wrapUnique(m_workerContextClient->createServiceWorkerProvider()));
 
     // We need to set the CSP to both the shadow page's document and the ServiceWorkerGlobalScope.
     document->initContentSecurityPolicy(m_mainScriptLoader->releaseContentSecurityPolicy());
@@ -414,7 +416,7 @@
     KURL scriptURL = m_mainScriptLoader->url();
     WorkerThreadStartMode startMode = m_workerInspectorProxy->workerStartMode(document);
 
-    OwnPtr<WorkerThreadStartupData> startupData = WorkerThreadStartupData::create(
+    std::unique_ptr<WorkerThreadStartupData> startupData = WorkerThreadStartupData::create(
         scriptURL,
         m_workerStartData.userAgent,
         m_mainScriptLoader->script(),
diff --git a/third_party/WebKit/Source/web/WebEmbeddedWorkerImpl.h b/third_party/WebKit/Source/web/WebEmbeddedWorkerImpl.h
index 1997bc8..614f4e19 100644
--- a/third_party/WebKit/Source/web/WebEmbeddedWorkerImpl.h
+++ b/third_party/WebKit/Source/web/WebEmbeddedWorkerImpl.h
@@ -38,6 +38,7 @@
 #include "public/web/WebEmbeddedWorker.h"
 #include "public/web/WebEmbeddedWorkerStartData.h"
 #include "public/web/WebFrameClient.h"
+#include <memory>
 
 namespace blink {
 
@@ -56,7 +57,7 @@
     , private WorkerLoaderProxyProvider {
     WTF_MAKE_NONCOPYABLE(WebEmbeddedWorkerImpl);
 public:
-    WebEmbeddedWorkerImpl(PassOwnPtr<WebServiceWorkerContextClient>, PassOwnPtr<WebWorkerContentSettingsClientProxy>);
+    WebEmbeddedWorkerImpl(std::unique_ptr<WebServiceWorkerContextClient>, std::unique_ptr<WebWorkerContentSettingsClientProxy>);
     ~WebEmbeddedWorkerImpl() override;
 
     // WebEmbeddedWorker overrides.
@@ -95,20 +96,20 @@
 
     WebEmbeddedWorkerStartData m_workerStartData;
 
-    OwnPtr<WebServiceWorkerContextClient> m_workerContextClient;
+    std::unique_ptr<WebServiceWorkerContextClient> m_workerContextClient;
 
     // This is kept until startWorkerContext is called, and then passed on
     // to WorkerContext.
-    OwnPtr<WebWorkerContentSettingsClientProxy> m_contentSettingsClient;
+    std::unique_ptr<WebWorkerContentSettingsClientProxy> m_contentSettingsClient;
 
     // We retain ownership of this one which is for use on the
     // main thread only.
-    OwnPtr<WebServiceWorkerNetworkProvider> m_networkProvider;
+    std::unique_ptr<WebServiceWorkerNetworkProvider> m_networkProvider;
 
     // Kept around only while main script loading is ongoing.
     RefPtr<WorkerScriptLoader> m_mainScriptLoader;
 
-    OwnPtr<WorkerThread> m_workerThread;
+    std::unique_ptr<WorkerThread> m_workerThread;
     RefPtr<WorkerLoaderProxy> m_loaderProxy;
     Persistent<ServiceWorkerGlobalScopeProxy> m_workerGlobalScopeProxy;
     Persistent<WorkerInspectorProxy> m_workerInspectorProxy;
diff --git a/third_party/WebKit/Source/web/WebEmbeddedWorkerImplTest.cpp b/third_party/WebKit/Source/web/WebEmbeddedWorkerImplTest.cpp
index 8b2cea6f..bb6f205f 100644
--- a/third_party/WebKit/Source/web/WebEmbeddedWorkerImplTest.cpp
+++ b/third_party/WebKit/Source/web/WebEmbeddedWorkerImplTest.cpp
@@ -16,6 +16,8 @@
 #include "public/web/modules/serviceworker/WebServiceWorkerContextClient.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 namespace {
@@ -61,7 +63,7 @@
     void SetUp() override
     {
         m_mockClient = new MockServiceWorkerContextClient();
-        m_worker = adoptPtr(WebEmbeddedWorker::create(m_mockClient, nullptr));
+        m_worker = wrapUnique(WebEmbeddedWorker::create(m_mockClient, nullptr));
 
         WebURL scriptURL = URLTestHelpers::toKURL("https://www.example.com/sw.js");
         WebURLResponse response;
@@ -85,7 +87,7 @@
 
     WebEmbeddedWorkerStartData m_startData;
     MockServiceWorkerContextClient* m_mockClient;
-    OwnPtr<WebEmbeddedWorker> m_worker;
+    std::unique_ptr<WebEmbeddedWorker> m_worker;
 };
 
 } // namespace
diff --git a/third_party/WebKit/Source/web/WebFrameWidgetImpl.cpp b/third_party/WebKit/Source/web/WebFrameWidgetImpl.cpp
index f4c83cd..5b8b065 100644
--- a/third_party/WebKit/Source/web/WebFrameWidgetImpl.cpp
+++ b/third_party/WebKit/Source/web/WebFrameWidgetImpl.cpp
@@ -61,6 +61,8 @@
 #include "web/WebPluginContainerImpl.h"
 #include "web/WebRemoteFrameImpl.h"
 #include "web/WebViewFrameWidget.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
@@ -344,7 +346,7 @@
         if (inputEvent.type == WebInputEvent::MouseUp)
             mouseCaptureLost();
 
-        OwnPtr<UserGestureIndicator> gestureIndicator;
+        std::unique_ptr<UserGestureIndicator> gestureIndicator;
 
         AtomicString eventType;
         switch (inputEvent.type) {
@@ -356,12 +358,12 @@
             break;
         case WebInputEvent::MouseDown:
             eventType = EventTypeNames::mousedown;
-            gestureIndicator = adoptPtr(new UserGestureIndicator(DefinitelyProcessingNewUserGesture));
+            gestureIndicator = wrapUnique(new UserGestureIndicator(DefinitelyProcessingNewUserGesture));
             m_mouseCaptureGestureToken = gestureIndicator->currentToken();
             break;
         case WebInputEvent::MouseUp:
             eventType = EventTypeNames::mouseup;
-            gestureIndicator = adoptPtr(new UserGestureIndicator(m_mouseCaptureGestureToken.release()));
+            gestureIndicator = wrapUnique(new UserGestureIndicator(m_mouseCaptureGestureToken.release()));
             break;
         default:
             NOTREACHED();
diff --git a/third_party/WebKit/Source/web/WebFrameWidgetImpl.h b/third_party/WebKit/Source/web/WebFrameWidgetImpl.h
index d94ae869..a2e21f96 100644
--- a/third_party/WebKit/Source/web/WebFrameWidgetImpl.h
+++ b/third_party/WebKit/Source/web/WebFrameWidgetImpl.h
@@ -43,7 +43,6 @@
 #include "web/WebViewImpl.h"
 #include "wtf/Assertions.h"
 #include "wtf/HashSet.h"
-#include "wtf/OwnPtr.h"
 
 namespace blink {
 class Frame;
diff --git a/third_party/WebKit/Source/web/WebHelperPluginImpl.h b/third_party/WebKit/Source/web/WebHelperPluginImpl.h
index 89a09a2..d632b380 100644
--- a/third_party/WebKit/Source/web/WebHelperPluginImpl.h
+++ b/third_party/WebKit/Source/web/WebHelperPluginImpl.h
@@ -35,7 +35,6 @@
 #include "public/web/WebHelperPlugin.h"
 #include "wtf/Allocator.h"
 #include "wtf/Noncopyable.h"
-#include "wtf/PassOwnPtr.h"
 #include "wtf/RefPtr.h"
 #include "wtf/text/WTFString.h"
 
diff --git a/third_party/WebKit/Source/web/WebImageDecoder.cpp b/third_party/WebKit/Source/web/WebImageDecoder.cpp
index 1750509..d4ffb79 100644
--- a/third_party/WebKit/Source/web/WebImageDecoder.cpp
+++ b/third_party/WebKit/Source/web/WebImageDecoder.cpp
@@ -37,8 +37,6 @@
 #include "public/platform/WebData.h"
 #include "public/platform/WebImage.h"
 #include "public/platform/WebSize.h"
-#include "wtf/OwnPtr.h"
-#include "wtf/PassOwnPtr.h"
 #include "wtf/PassRefPtr.h"
 
 namespace blink {
diff --git a/third_party/WebKit/Source/web/WebKit.cpp b/third_party/WebKit/Source/web/WebKit.cpp
index 37681a9..a7dc8e7 100644
--- a/third_party/WebKit/Source/web/WebKit.cpp
+++ b/third_party/WebKit/Source/web/WebKit.cpp
@@ -45,10 +45,12 @@
 #include "public/platform/Platform.h"
 #include "public/platform/WebThread.h"
 #include "wtf/Assertions.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/WTF.h"
 #include "wtf/allocator/Partitions.h"
 #include "wtf/text/AtomicString.h"
 #include "wtf/text/TextEncoding.h"
+#include <memory>
 #include <v8.h>
 
 namespace blink {
@@ -74,7 +76,7 @@
 
 static ModulesInitializer& modulesInitializer()
 {
-    DEFINE_STATIC_LOCAL(OwnPtr<ModulesInitializer>, initializer, (adoptPtr(new ModulesInitializer)));
+    DEFINE_STATIC_LOCAL(std::unique_ptr<ModulesInitializer>, initializer, (wrapUnique(new ModulesInitializer)));
     return *initializer;
 }
 
diff --git a/third_party/WebKit/Source/web/WebLocalFrameImpl.cpp b/third_party/WebKit/Source/web/WebLocalFrameImpl.cpp
index 0893b67..0192b11 100644
--- a/third_party/WebKit/Source/web/WebLocalFrameImpl.cpp
+++ b/third_party/WebKit/Source/web/WebLocalFrameImpl.cpp
@@ -114,9 +114,9 @@
 #include "core/editing/spellcheck/SpellChecker.h"
 #include "core/fetch/ResourceFetcher.h"
 #include "core/fetch/SubstituteData.h"
-#include "core/frame/LocalDOMWindow.h"
 #include "core/frame/FrameHost.h"
 #include "core/frame/FrameView.h"
+#include "core/frame/LocalDOMWindow.h"
 #include "core/frame/RemoteFrame.h"
 #include "core/frame/Settings.h"
 #include "core/frame/UseCounter.h"
@@ -136,7 +136,6 @@
 #include "core/layout/LayoutObject.h"
 #include "core/layout/LayoutPart.h"
 #include "core/layout/api/LayoutViewItem.h"
-#include "core/style/StyleInheritedData.h"
 #include "core/loader/DocumentLoader.h"
 #include "core/loader/FrameLoadRequest.h"
 #include "core/loader/FrameLoader.h"
@@ -149,6 +148,7 @@
 #include "core/page/PrintContext.h"
 #include "core/paint/PaintLayer.h"
 #include "core/paint/TransformRecorder.h"
+#include "core/style/StyleInheritedData.h"
 #include "core/timing/DOMWindowPerformance.h"
 #include "core/timing/Performance.h"
 #include "modules/app_banner/AppBannerController.h"
@@ -235,7 +235,9 @@
 #include "web/WebViewImpl.h"
 #include "wtf/CurrentTime.h"
 #include "wtf/HashMap.h"
+#include "wtf/PtrUtil.h"
 #include <algorithm>
+#include <memory>
 
 namespace blink {
 
@@ -496,9 +498,9 @@
 
 class WebSuspendableTaskWrapper: public SuspendableTask {
 public:
-    static PassOwnPtr<WebSuspendableTaskWrapper> create(PassOwnPtr<WebSuspendableTask> task)
+    static std::unique_ptr<WebSuspendableTaskWrapper> create(std::unique_ptr<WebSuspendableTask> task)
     {
-        return adoptPtr(new WebSuspendableTaskWrapper(std::move(task)));
+        return wrapUnique(new WebSuspendableTaskWrapper(std::move(task)));
     }
 
     void run() override
@@ -512,12 +514,12 @@
     }
 
 private:
-    explicit WebSuspendableTaskWrapper(PassOwnPtr<WebSuspendableTask> task)
+    explicit WebSuspendableTaskWrapper(std::unique_ptr<WebSuspendableTask> task)
         : m_task(std::move(task))
     {
     }
 
-    OwnPtr<WebSuspendableTask> m_task;
+    std::unique_ptr<WebSuspendableTask> m_task;
 };
 
 // WebFrame -------------------------------------------------------------------
@@ -1947,7 +1949,7 @@
 {
     DCHECK(frame());
     DCHECK(frame()->document());
-    frame()->document()->postSuspendableTask(WebSuspendableTaskWrapper::create(adoptPtr(task)));
+    frame()->document()->postSuspendableTask(WebSuspendableTaskWrapper::create(wrapUnique(task)));
 }
 
 void WebLocalFrameImpl::didCallAddSearchProvider()
diff --git a/third_party/WebKit/Source/web/WebLocalFrameImpl.h b/third_party/WebKit/Source/web/WebLocalFrameImpl.h
index a05039bd..8e98f5a 100644
--- a/third_party/WebKit/Source/web/WebLocalFrameImpl.h
+++ b/third_party/WebKit/Source/web/WebLocalFrameImpl.h
@@ -43,8 +43,8 @@
 #include "web/WebExport.h"
 #include "web/WebFrameImplBase.h"
 #include "wtf/Compiler.h"
-#include "wtf/OwnPtr.h"
 #include "wtf/text/WTFString.h"
+#include <memory>
 
 namespace blink {
 
@@ -371,7 +371,7 @@
     WebFrameClient* m_client;
     WebAutofillClient* m_autofillClient;
     WebContentSettingsClient* m_contentSettingsClient;
-    OwnPtr<SharedWorkerRepositoryClientImpl> m_sharedWorkerRepositoryClient;
+    std::unique_ptr<SharedWorkerRepositoryClientImpl> m_sharedWorkerRepositoryClient;
 
     // Will be initialized after first call to find() or scopeStringMatches().
     Member<TextFinder> m_textFinder;
diff --git a/third_party/WebKit/Source/web/WebNode.cpp b/third_party/WebKit/Source/web/WebNode.cpp
index d133bbc8..60933df 100644
--- a/third_party/WebKit/Source/web/WebNode.cpp
+++ b/third_party/WebKit/Source/web/WebNode.cpp
@@ -57,6 +57,7 @@
 #include "web/FrameLoaderClientImpl.h"
 #include "web/WebLocalFrameImpl.h"
 #include "web/WebPluginContainerImpl.h"
+#include "wtf/PtrUtil.h"
 
 namespace blink {
 
@@ -195,7 +196,7 @@
 
 void WebNode::simulateClick()
 {
-    m_private->getExecutionContext()->postSuspendableTask(adoptPtr(new NodeDispatchSimulatedClickTask(m_private)));
+    m_private->getExecutionContext()->postSuspendableTask(wrapUnique(new NodeDispatchSimulatedClickTask(m_private)));
 }
 
 WebElementCollection WebNode::getElementsByHTMLTagName(const WebString& tag) const
diff --git a/third_party/WebKit/Source/web/WebNodeTest.cpp b/third_party/WebKit/Source/web/WebNodeTest.cpp
index 171dcc82..aa2fffd 100644
--- a/third_party/WebKit/Source/web/WebNodeTest.cpp
+++ b/third_party/WebKit/Source/web/WebNodeTest.cpp
@@ -10,6 +10,7 @@
 #include "public/web/WebElement.h"
 #include "public/web/WebElementCollection.h"
 #include "testing/gtest/include/gtest/gtest.h"
+#include <memory>
 
 namespace blink {
 
@@ -33,7 +34,7 @@
 private:
     void SetUp() override;
 
-    OwnPtr<DummyPageHolder> m_pageHolder;
+    std::unique_ptr<DummyPageHolder> m_pageHolder;
 };
 
 void WebNodeTest::SetUp()
diff --git a/third_party/WebKit/Source/web/WebPagePopupImpl.cpp b/third_party/WebKit/Source/web/WebPagePopupImpl.cpp
index 6add730..5b8f766 100644
--- a/third_party/WebKit/Source/web/WebPagePopupImpl.cpp
+++ b/third_party/WebKit/Source/web/WebPagePopupImpl.cpp
@@ -63,6 +63,7 @@
 #include "web/WebLocalFrameImpl.h"
 #include "web/WebSettingsImpl.h"
 #include "web/WebViewImpl.h"
+#include "wtf/PtrUtil.h"
 
 namespace blink {
 
@@ -284,7 +285,7 @@
     m_page->settings().setAccessibilityEnabled(m_webView->page()->settings().accessibilityEnabled());
     m_page->settings().setScrollAnimatorEnabled(m_webView->page()->settings().scrollAnimatorEnabled());
 
-    provideContextFeaturesTo(*m_page, adoptPtr(new PagePopupFeaturesClient()));
+    provideContextFeaturesTo(*m_page, wrapUnique(new PagePopupFeaturesClient()));
     DEFINE_STATIC_LOCAL(FrameLoaderClient, emptyFrameLoaderClient, (EmptyFrameLoaderClient::create()));
     LocalFrame* frame = LocalFrame::create(&emptyFrameLoaderClient, &m_page->frameHost(), 0);
     frame->setPagePopupOwner(m_popupClient->ownerElement());
diff --git a/third_party/WebKit/Source/web/WebPagePopupImpl.h b/third_party/WebKit/Source/web/WebPagePopupImpl.h
index 5f9c599..8f953e4 100644
--- a/third_party/WebKit/Source/web/WebPagePopupImpl.h
+++ b/third_party/WebKit/Source/web/WebPagePopupImpl.h
@@ -34,7 +34,6 @@
 #include "core/page/PagePopup.h"
 #include "public/web/WebPagePopup.h"
 #include "web/PageWidgetDelegate.h"
-#include "wtf/OwnPtr.h"
 #include "wtf/RefCounted.h"
 
 namespace blink {
diff --git a/third_party/WebKit/Source/web/WebPepperSocket.cpp b/third_party/WebKit/Source/web/WebPepperSocket.cpp
index fccbba0..65ce079 100644
--- a/third_party/WebKit/Source/web/WebPepperSocket.cpp
+++ b/third_party/WebKit/Source/web/WebPepperSocket.cpp
@@ -31,6 +31,8 @@
 #include "public/web/WebPepperSocket.h"
 
 #include "web/WebPepperSocketImpl.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
@@ -39,10 +41,10 @@
     if (!client)
         return 0;
 
-    OwnPtr<WebPepperSocketImpl> websocket = adoptPtr(new WebPepperSocketImpl(document, client));
+    std::unique_ptr<WebPepperSocketImpl> websocket = wrapUnique(new WebPepperSocketImpl(document, client));
     if (websocket && websocket->isNull())
         return 0;
-    return websocket.leakPtr();
+    return websocket.release();
 }
 
 } // namespace blink
diff --git a/third_party/WebKit/Source/web/WebPepperSocketChannelClientProxy.h b/third_party/WebKit/Source/web/WebPepperSocketChannelClientProxy.h
index 0c35cbe..fc714ba5 100644
--- a/third_party/WebKit/Source/web/WebPepperSocketChannelClientProxy.h
+++ b/third_party/WebKit/Source/web/WebPepperSocketChannelClientProxy.h
@@ -8,9 +8,9 @@
 #include "modules/websockets/WebSocketChannelClient.h"
 #include "platform/heap/Handle.h"
 #include "web/WebPepperSocketImpl.h"
-#include "wtf/PassOwnPtr.h"
 #include "wtf/Vector.h"
 #include "wtf/text/WTFString.h"
+#include <memory>
 #include <stdint.h>
 
 namespace blink {
@@ -36,7 +36,7 @@
     {
         m_impl->didReceiveTextMessage(payload);
     }
-    void didReceiveBinaryMessage(PassOwnPtr<Vector<char>> payload) override
+    void didReceiveBinaryMessage(std::unique_ptr<Vector<char>> payload) override
     {
         m_impl->didReceiveBinaryMessage(std::move(payload));
     }
diff --git a/third_party/WebKit/Source/web/WebPepperSocketImpl.cpp b/third_party/WebKit/Source/web/WebPepperSocketImpl.cpp
index 2a65d50..d225683 100644
--- a/third_party/WebKit/Source/web/WebPepperSocketImpl.cpp
+++ b/third_party/WebKit/Source/web/WebPepperSocketImpl.cpp
@@ -42,6 +42,7 @@
 #include "web/WebPepperSocketChannelClientProxy.h"
 #include "wtf/text/CString.h"
 #include "wtf/text/WTFString.h"
+#include <memory>
 
 namespace blink {
 
@@ -164,7 +165,7 @@
     m_client->didReceiveMessage(WebString(payload));
 }
 
-void WebPepperSocketImpl::didReceiveBinaryMessage(PassOwnPtr<Vector<char>> payload)
+void WebPepperSocketImpl::didReceiveBinaryMessage(std::unique_ptr<Vector<char>> payload)
 {
     switch (m_binaryType) {
     case BinaryTypeBlob:
diff --git a/third_party/WebKit/Source/web/WebPepperSocketImpl.h b/third_party/WebKit/Source/web/WebPepperSocketImpl.h
index 62c67261..cc5dea86 100644
--- a/third_party/WebKit/Source/web/WebPepperSocketImpl.h
+++ b/third_party/WebKit/Source/web/WebPepperSocketImpl.h
@@ -37,8 +37,8 @@
 #include "public/platform/WebString.h"
 #include "public/web/WebPepperSocket.h"
 #include "public/web/WebPepperSocketClient.h"
-#include "wtf/OwnPtr.h"
 #include "wtf/RefPtr.h"
+#include <memory>
 
 namespace blink {
 
@@ -69,7 +69,7 @@
     // WebSocketChannelClient methods proxied by WebPepperSocketChannelClientProxy.
     void didConnect(const String& subprotocol, const String& extensions);
     void didReceiveTextMessage(const String& payload);
-    void didReceiveBinaryMessage(PassOwnPtr<Vector<char>> payload);
+    void didReceiveBinaryMessage(std::unique_ptr<Vector<char>> payload);
     void didError();
     void didConsumeBufferedAmount(unsigned long consumed);
     void didStartClosingHandshake();
diff --git a/third_party/WebKit/Source/web/WebPluginContainerImpl.h b/third_party/WebKit/Source/web/WebPluginContainerImpl.h
index ff84d43..213c45ba 100644
--- a/third_party/WebKit/Source/web/WebPluginContainerImpl.h
+++ b/third_party/WebKit/Source/web/WebPluginContainerImpl.h
@@ -38,7 +38,6 @@
 #include "public/web/WebPluginContainer.h"
 #include "web/WebExport.h"
 #include "wtf/Compiler.h"
-#include "wtf/OwnPtr.h"
 #include "wtf/PassRefPtr.h"
 #include "wtf/Vector.h"
 #include "wtf/text/WTFString.h"
diff --git a/third_party/WebKit/Source/web/WebRemoteFrameImpl.h b/third_party/WebKit/Source/web/WebRemoteFrameImpl.h
index c0bbe2a..d50a7d3 100644
--- a/third_party/WebKit/Source/web/WebRemoteFrameImpl.h
+++ b/third_party/WebKit/Source/web/WebRemoteFrameImpl.h
@@ -14,7 +14,6 @@
 #include "web/WebExport.h"
 #include "web/WebFrameImplBase.h"
 #include "wtf/Compiler.h"
-#include "wtf/OwnPtr.h"
 
 namespace blink {
 
diff --git a/third_party/WebKit/Source/web/WebSharedWorkerImpl.cpp b/third_party/WebKit/Source/web/WebSharedWorkerImpl.cpp
index 5060946..51b411c 100644
--- a/third_party/WebKit/Source/web/WebSharedWorkerImpl.cpp
+++ b/third_party/WebKit/Source/web/WebSharedWorkerImpl.cpp
@@ -72,6 +72,8 @@
 #include "web/WebLocalFrameImpl.h"
 #include "web/WorkerContentSettingsClient.h"
 #include "wtf/Functional.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
@@ -170,7 +172,7 @@
 {
     DCHECK(!m_loadingDocument);
     DCHECK(!m_mainScriptLoader);
-    m_networkProvider = adoptPtr(m_client->createServiceWorkerNetworkProvider(frame->dataSource()));
+    m_networkProvider = wrapUnique(m_client->createServiceWorkerNetworkProvider(frame->dataSource()));
     m_mainScriptLoader = WorkerScriptLoader::create();
     m_mainScriptLoader->setRequestContext(WebURLRequest::RequestContextSharedWorker);
     m_loadingDocument = toWebLocalFrameImpl(frame)->frame()->document();
@@ -217,7 +219,7 @@
 
 // WorkerReportingProxy --------------------------------------------------------
 
-void WebSharedWorkerImpl::reportException(const String& errorMessage, PassOwnPtr<SourceLocation>)
+void WebSharedWorkerImpl::reportException(const String& errorMessage, std::unique_ptr<SourceLocation>)
 {
     // Not suppported in SharedWorker.
 }
@@ -331,11 +333,11 @@
     WorkerClients* workerClients = WorkerClients::create();
     provideLocalFileSystemToWorker(workerClients, LocalFileSystemClient::create());
     WebSecurityOrigin webSecurityOrigin(m_loadingDocument->getSecurityOrigin());
-    provideContentSettingsClientToWorker(workerClients, adoptPtr(m_client->createWorkerContentSettingsClientProxy(webSecurityOrigin)));
+    provideContentSettingsClientToWorker(workerClients, wrapUnique(m_client->createWorkerContentSettingsClientProxy(webSecurityOrigin)));
     provideIndexedDBClientToWorker(workerClients, IndexedDBClientImpl::create());
     ContentSecurityPolicy* contentSecurityPolicy = m_mainScriptLoader->releaseContentSecurityPolicy();
     WorkerThreadStartMode startMode = m_workerInspectorProxy->workerStartMode(document);
-    OwnPtr<WorkerThreadStartupData> startupData = WorkerThreadStartupData::create(
+    std::unique_ptr<WorkerThreadStartupData> startupData = WorkerThreadStartupData::create(
         m_url,
         m_loadingDocument->userAgent(),
         m_mainScriptLoader->script(),
diff --git a/third_party/WebKit/Source/web/WebSharedWorkerImpl.h b/third_party/WebKit/Source/web/WebSharedWorkerImpl.h
index 9a00362..3c675336 100644
--- a/third_party/WebKit/Source/web/WebSharedWorkerImpl.h
+++ b/third_party/WebKit/Source/web/WebSharedWorkerImpl.h
@@ -42,8 +42,8 @@
 #include "public/web/WebDevToolsAgentClient.h"
 #include "public/web/WebFrameClient.h"
 #include "public/web/WebSharedWorkerClient.h"
-#include "wtf/PassOwnPtr.h"
 #include "wtf/RefPtr.h"
+#include <memory>
 
 namespace blink {
 
@@ -75,7 +75,7 @@
     explicit WebSharedWorkerImpl(WebSharedWorkerClient*);
 
     // WorkerReportingProxy methods:
-    void reportException(const WTF::String&, PassOwnPtr<SourceLocation>) override;
+    void reportException(const WTF::String&, std::unique_ptr<SourceLocation>) override;
     void reportConsoleMessage(ConsoleMessage*) override;
     void postMessageToPageInspector(const WTF::String&) override;
     void postWorkerConsoleAgentEnabled() override { }
@@ -141,11 +141,11 @@
     bool m_askedToTerminate;
 
     // This one is bound to and used only on the main thread.
-    OwnPtr<WebServiceWorkerNetworkProvider> m_networkProvider;
+    std::unique_ptr<WebServiceWorkerNetworkProvider> m_networkProvider;
 
     Persistent<WorkerInspectorProxy> m_workerInspectorProxy;
 
-    OwnPtr<WorkerThread> m_workerThread;
+    std::unique_ptr<WorkerThread> m_workerThread;
 
     WebSharedWorkerClient* m_client;
 
diff --git a/third_party/WebKit/Source/web/WebStorageEventDispatcherImpl.cpp b/third_party/WebKit/Source/web/WebStorageEventDispatcherImpl.cpp
index c0a333f..228b8bae 100644
--- a/third_party/WebKit/Source/web/WebStorageEventDispatcherImpl.cpp
+++ b/third_party/WebKit/Source/web/WebStorageEventDispatcherImpl.cpp
@@ -35,7 +35,6 @@
 #include "platform/weborigin/SecurityOrigin.h"
 #include "public/platform/WebURL.h"
 #include "web/WebViewImpl.h"
-#include "wtf/PassOwnPtr.h"
 
 namespace blink {
 
diff --git a/third_party/WebKit/Source/web/WebViewImpl.cpp b/third_party/WebKit/Source/web/WebViewImpl.cpp
index 3df57d6..af351b3 100644
--- a/third_party/WebKit/Source/web/WebViewImpl.cpp
+++ b/third_party/WebKit/Source/web/WebViewImpl.cpp
@@ -180,8 +180,10 @@
 #include "web/WebRemoteFrameImpl.h"
 #include "web/WebSettingsImpl.h"
 #include "wtf/CurrentTime.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/RefPtr.h"
 #include "wtf/TemporaryChange.h"
+#include <memory>
 
 #if USE(DEFAULT_RENDER_THEME)
 #include "core/layout/LayoutThemeDefault.h"
@@ -229,9 +231,9 @@
 
 // Used to defer all page activity in cases where the embedder wishes to run
 // a nested event loop. Using a stack enables nesting of message loop invocations.
-static Vector<OwnPtr<ScopedPageLoadDeferrer>>& pageLoadDeferrerStack()
+static Vector<std::unique_ptr<ScopedPageLoadDeferrer>>& pageLoadDeferrerStack()
 {
-    DEFINE_STATIC_LOCAL(Vector<OwnPtr<ScopedPageLoadDeferrer>>, deferrerStack, ());
+    DEFINE_STATIC_LOCAL(Vector<std::unique_ptr<ScopedPageLoadDeferrer>>, deferrerStack, ());
     return deferrerStack;
 }
 
@@ -362,7 +364,7 @@
 
 void WebView::willEnterModalLoop()
 {
-    pageLoadDeferrerStack().append(adoptPtr(new ScopedPageLoadDeferrer()));
+    pageLoadDeferrerStack().append(wrapUnique(new ScopedPageLoadDeferrer()));
 }
 
 void WebView::didExitModalLoop()
@@ -448,7 +450,7 @@
     , m_displayMode(WebDisplayModeBrowser)
     , m_elasticOverscroll(FloatSize())
     , m_mutator(nullptr)
-    , m_scheduler(adoptPtr(Platform::current()->currentThread()->scheduler()->createWebViewScheduler(this).release()))
+    , m_scheduler(wrapUnique(Platform::current()->currentThread()->scheduler()->createWebViewScheduler(this).release()))
     , m_lastFrameTimeMonotonic(0)
 {
     Page::PageClients pageClients;
@@ -738,7 +740,7 @@
         m_flingModifier = event.modifiers;
         m_flingSourceDevice = event.sourceDevice;
         DCHECK_NE(m_flingSourceDevice, WebGestureDeviceUninitialized);
-        OwnPtr<WebGestureCurve> flingCurve = adoptPtr(Platform::current()->createFlingAnimationCurve(event.sourceDevice, WebFloatPoint(event.data.flingStart.velocityX, event.data.flingStart.velocityY), WebSize()));
+        std::unique_ptr<WebGestureCurve> flingCurve = wrapUnique(Platform::current()->createFlingAnimationCurve(event.sourceDevice, WebFloatPoint(event.data.flingStart.velocityX, event.data.flingStart.velocityY), WebSize()));
         DCHECK(flingCurve);
         m_gestureAnimation = WebActiveGestureAnimation::createAtAnimationStart(std::move(flingCurve), this);
         scheduleAnimation();
@@ -959,7 +961,7 @@
     m_positionOnFlingStart = parameters.point;
     m_globalPositionOnFlingStart = parameters.globalPoint;
     m_flingModifier = parameters.modifiers;
-    OwnPtr<WebGestureCurve> curve = adoptPtr(Platform::current()->createFlingAnimationCurve(parameters.sourceDevice, WebFloatPoint(parameters.delta), parameters.cumulativeScroll));
+    std::unique_ptr<WebGestureCurve> curve = wrapUnique(Platform::current()->createFlingAnimationCurve(parameters.sourceDevice, WebFloatPoint(parameters.delta), parameters.cumulativeScroll));
     DCHECK(curve);
     m_gestureAnimation = WebActiveGestureAnimation::createWithTimeOffset(std::move(curve), this, parameters.startTime);
     DCHECK_NE(parameters.sourceDevice, WebGestureDeviceUninitialized);
@@ -2190,7 +2192,7 @@
         if (inputEvent.type == WebInputEvent::MouseUp)
             mouseCaptureLost();
 
-        OwnPtr<UserGestureIndicator> gestureIndicator;
+        std::unique_ptr<UserGestureIndicator> gestureIndicator;
 
         AtomicString eventType;
         switch (inputEvent.type) {
@@ -2202,12 +2204,12 @@
             break;
         case WebInputEvent::MouseDown:
             eventType = EventTypeNames::mousedown;
-            gestureIndicator = adoptPtr(new UserGestureIndicator(DefinitelyProcessingNewUserGesture));
+            gestureIndicator = wrapUnique(new UserGestureIndicator(DefinitelyProcessingNewUserGesture));
             m_mouseCaptureGestureToken = gestureIndicator->currentToken();
             break;
         case WebInputEvent::MouseUp:
             eventType = EventTypeNames::mouseup;
-            gestureIndicator = adoptPtr(new UserGestureIndicator(m_mouseCaptureGestureToken.release()));
+            gestureIndicator = wrapUnique(new UserGestureIndicator(m_mouseCaptureGestureToken.release()));
             break;
         default:
             NOTREACHED();
@@ -2837,7 +2839,7 @@
 WebSettingsImpl* WebViewImpl::settingsImpl()
 {
     if (!m_webSettings)
-        m_webSettings = adoptPtr(new WebSettingsImpl(&m_page->settings(), m_devToolsEmulator.get()));
+        m_webSettings = wrapUnique(new WebSettingsImpl(&m_page->settings(), m_devToolsEmulator.get()));
     DCHECK(m_webSettings);
     return m_webSettings.get();
 }
@@ -4474,17 +4476,17 @@
 
 void WebViewImpl::pointerLockMouseEvent(const WebInputEvent& event)
 {
-    OwnPtr<UserGestureIndicator> gestureIndicator;
+    std::unique_ptr<UserGestureIndicator> gestureIndicator;
     AtomicString eventType;
     switch (event.type) {
     case WebInputEvent::MouseDown:
         eventType = EventTypeNames::mousedown;
-        gestureIndicator = adoptPtr(new UserGestureIndicator(DefinitelyProcessingNewUserGesture));
+        gestureIndicator = wrapUnique(new UserGestureIndicator(DefinitelyProcessingNewUserGesture));
         m_pointerLockGestureToken = gestureIndicator->currentToken();
         break;
     case WebInputEvent::MouseUp:
         eventType = EventTypeNames::mouseup;
-        gestureIndicator = adoptPtr(new UserGestureIndicator(m_pointerLockGestureToken.release()));
+        gestureIndicator = wrapUnique(new UserGestureIndicator(m_pointerLockGestureToken.release()));
         break;
     case WebInputEvent::MouseMove:
         eventType = EventTypeNames::mousemove;
diff --git a/third_party/WebKit/Source/web/WebViewImpl.h b/third_party/WebKit/Source/web/WebViewImpl.h
index 716e264..d327836b 100644
--- a/third_party/WebKit/Source/web/WebViewImpl.h
+++ b/third_party/WebKit/Source/web/WebViewImpl.h
@@ -63,9 +63,9 @@
 #include "web/WebExport.h"
 #include "wtf/Compiler.h"
 #include "wtf/HashSet.h"
-#include "wtf/OwnPtr.h"
 #include "wtf/RefCounted.h"
 #include "wtf/Vector.h"
+#include <memory>
 
 namespace blink {
 
@@ -642,7 +642,7 @@
     // An object that can be used to manipulate m_page->settings() without linking
     // against WebCore. This is lazily allocated the first time GetWebSettings()
     // is called.
-    OwnPtr<WebSettingsImpl> m_webSettings;
+    std::unique_ptr<WebSettingsImpl> m_webSettings;
 
     // A copy of the web drop data object we received from the browser.
     Persistent<DataObject> m_currentDragData;
@@ -702,7 +702,7 @@
     RefPtr<WebPagePopupImpl> m_pagePopup;
 
     Persistent<DevToolsEmulator> m_devToolsEmulator;
-    OwnPtr<PageOverlay> m_pageColorOverlay;
+    std::unique_ptr<PageOverlay> m_pageColorOverlay;
 
     // Whether the webview is rendering transparently.
     bool m_isTransparent;
@@ -724,13 +724,13 @@
     static const WebInputEvent* m_currentInputEvent;
 
     MediaKeysClientImpl m_mediaKeysClientImpl;
-    OwnPtr<WebActiveGestureAnimation> m_gestureAnimation;
+    std::unique_ptr<WebActiveGestureAnimation> m_gestureAnimation;
     WebPoint m_positionOnFlingStart;
     WebPoint m_globalPositionOnFlingStart;
     int m_flingModifier;
     WebGestureDevice m_flingSourceDevice;
-    Vector<OwnPtr<LinkHighlightImpl>> m_linkHighlights;
-    OwnPtr<CompositorAnimationTimeline> m_linkHighlightsTimeline;
+    Vector<std::unique_ptr<LinkHighlightImpl>> m_linkHighlights;
+    std::unique_ptr<CompositorAnimationTimeline> m_linkHighlightsTimeline;
     Persistent<FullscreenController> m_fullscreenController;
 
     WebColor m_baseBackgroundColor;
@@ -754,7 +754,7 @@
 
     WebPageImportanceSignals m_pageImportanceSignals;
 
-    const OwnPtr<WebViewScheduler> m_scheduler;
+    const std::unique_ptr<WebViewScheduler> m_scheduler;
 
     // Manages the layer tree created for this page in Slimming Paint v2.
     PaintArtifactCompositor m_paintArtifactCompositor;
diff --git a/third_party/WebKit/Source/web/WorkerContentSettingsClient.cpp b/third_party/WebKit/Source/web/WorkerContentSettingsClient.cpp
index e396aa7..889f979 100644
--- a/third_party/WebKit/Source/web/WorkerContentSettingsClient.cpp
+++ b/third_party/WebKit/Source/web/WorkerContentSettingsClient.cpp
@@ -33,11 +33,11 @@
 #include "core/workers/WorkerGlobalScope.h"
 #include "public/platform/WebString.h"
 #include "public/web/WebWorkerContentSettingsClientProxy.h"
-#include "wtf/PassOwnPtr.h"
+#include <memory>
 
 namespace blink {
 
-WorkerContentSettingsClient* WorkerContentSettingsClient::create(PassOwnPtr<WebWorkerContentSettingsClientProxy> proxy)
+WorkerContentSettingsClient* WorkerContentSettingsClient::create(std::unique_ptr<WebWorkerContentSettingsClientProxy> proxy)
 {
     return new WorkerContentSettingsClient(std::move(proxy));
 }
@@ -72,12 +72,12 @@
     return static_cast<WorkerContentSettingsClient*>(Supplement<WorkerClients>::from(*clients, supplementName()));
 }
 
-WorkerContentSettingsClient::WorkerContentSettingsClient(PassOwnPtr<WebWorkerContentSettingsClientProxy> proxy)
+WorkerContentSettingsClient::WorkerContentSettingsClient(std::unique_ptr<WebWorkerContentSettingsClientProxy> proxy)
     : m_proxy(std::move(proxy))
 {
 }
 
-void provideContentSettingsClientToWorker(WorkerClients* clients, PassOwnPtr<WebWorkerContentSettingsClientProxy> proxy)
+void provideContentSettingsClientToWorker(WorkerClients* clients, std::unique_ptr<WebWorkerContentSettingsClientProxy> proxy)
 {
     DCHECK(clients);
     WorkerContentSettingsClient::provideTo(*clients, WorkerContentSettingsClient::supplementName(), WorkerContentSettingsClient::create(std::move(proxy)));
diff --git a/third_party/WebKit/Source/web/WorkerContentSettingsClient.h b/third_party/WebKit/Source/web/WorkerContentSettingsClient.h
index d2b92723..ed02e11 100644
--- a/third_party/WebKit/Source/web/WorkerContentSettingsClient.h
+++ b/third_party/WebKit/Source/web/WorkerContentSettingsClient.h
@@ -33,6 +33,7 @@
 
 #include "core/workers/WorkerClients.h"
 #include "wtf/Forward.h"
+#include <memory>
 
 namespace blink {
 
@@ -43,7 +44,7 @@
 class WorkerContentSettingsClient final : public GarbageCollectedFinalized<WorkerContentSettingsClient>, public Supplement<WorkerClients> {
     USING_GARBAGE_COLLECTED_MIXIN(WorkerContentSettingsClient);
 public:
-    static WorkerContentSettingsClient* create(PassOwnPtr<WebWorkerContentSettingsClientProxy>);
+    static WorkerContentSettingsClient* create(std::unique_ptr<WebWorkerContentSettingsClientProxy>);
     virtual ~WorkerContentSettingsClient();
 
     bool requestFileSystemAccessSync();
@@ -55,12 +56,12 @@
     DEFINE_INLINE_VIRTUAL_TRACE() { Supplement<WorkerClients>::trace(visitor); }
 
 private:
-    explicit WorkerContentSettingsClient(PassOwnPtr<WebWorkerContentSettingsClientProxy>);
+    explicit WorkerContentSettingsClient(std::unique_ptr<WebWorkerContentSettingsClientProxy>);
 
-    OwnPtr<WebWorkerContentSettingsClientProxy> m_proxy;
+    std::unique_ptr<WebWorkerContentSettingsClientProxy> m_proxy;
 };
 
-void provideContentSettingsClientToWorker(WorkerClients*, PassOwnPtr<WebWorkerContentSettingsClientProxy>);
+void provideContentSettingsClientToWorker(WorkerClients*, std::unique_ptr<WebWorkerContentSettingsClientProxy>);
 
 } // namespace blink
 
diff --git a/third_party/WebKit/Source/web/tests/ActivityLoggerTest.cpp b/third_party/WebKit/Source/web/tests/ActivityLoggerTest.cpp
index 5f313ac..a999ac8 100644
--- a/third_party/WebKit/Source/web/tests/ActivityLoggerTest.cpp
+++ b/third_party/WebKit/Source/web/tests/ActivityLoggerTest.cpp
@@ -11,6 +11,7 @@
 #include "web/WebLocalFrameImpl.h"
 #include "web/tests/FrameTestHelpers.h"
 #include "wtf/Forward.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/text/Base64.h"
 #include <v8.h>
 
@@ -69,7 +70,7 @@
     ActivityLoggerTest()
     {
         m_activityLogger = new TestActivityLogger();
-        V8DOMActivityLogger::setActivityLogger(isolatedWorldId, String(), adoptPtr(m_activityLogger));
+        V8DOMActivityLogger::setActivityLogger(isolatedWorldId, String(), wrapUnique(m_activityLogger));
         m_webViewHelper.initialize(true);
         m_scriptController = &m_webViewHelper.webViewImpl()->mainFrameImpl()->frame()->script();
         FrameTestHelpers::loadFrame(m_webViewHelper.webViewImpl()->mainFrame(), "about:blank");
diff --git a/third_party/WebKit/Source/web/tests/CompositorWorkerTest.cpp b/third_party/WebKit/Source/web/tests/CompositorWorkerTest.cpp
index c405ad1..eb6d633 100644
--- a/third_party/WebKit/Source/web/tests/CompositorWorkerTest.cpp
+++ b/third_party/WebKit/Source/web/tests/CompositorWorkerTest.cpp
@@ -21,7 +21,9 @@
 #include "web/WebLocalFrameImpl.h"
 #include "web/WebViewImpl.h"
 #include "web/tests/FrameTestHelpers.h"
+#include "wtf/PtrUtil.h"
 #include <gtest/gtest.h>
+#include <memory>
 
 namespace blink {
 
@@ -277,7 +279,7 @@
     EXPECT_NE(0UL, elementId);
 
     TransformationMatrix transformMatrix(11, 12, 13, 14, 21, 22, 23, 24, 31, 32, 33, 34, 41, 42, 43, 44);
-    OwnPtr<CompositorMutation> mutation = adoptPtr(new CompositorMutation);
+    std::unique_ptr<CompositorMutation> mutation = wrapUnique(new CompositorMutation);
     mutation->setTransform(TransformationMatrix::toSkMatrix44(transformMatrix));
     mutation->setOpacity(0.5);
 
@@ -291,7 +293,7 @@
     }
 
     // Verify that updating one property does not impact others
-    mutation = adoptPtr(new CompositorMutation);
+    mutation = wrapUnique(new CompositorMutation);
     mutation->setOpacity(0.8);
 
     proxiedElement->updateFromCompositorMutation(*mutation);
diff --git a/third_party/WebKit/Source/web/tests/FrameTestHelpers.cpp b/third_party/WebKit/Source/web/tests/FrameTestHelpers.cpp
index 438ebbf..12bc6d2 100644
--- a/third_party/WebKit/Source/web/tests/FrameTestHelpers.cpp
+++ b/third_party/WebKit/Source/web/tests/FrameTestHelpers.cpp
@@ -48,6 +48,7 @@
 #include "web/WebLocalFrameImpl.h"
 #include "web/WebRemoteFrameImpl.h"
 #include "wtf/Functional.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/StdLibExtras.h"
 #include "wtf/text/StringBuilder.h"
 
@@ -306,7 +307,7 @@
 
 void TestWebViewClient::initializeLayerTreeView()
 {
-    m_layerTreeView = adoptPtr(new WebLayerTreeViewImplForTesting);
+    m_layerTreeView = wrapUnique(new WebLayerTreeViewImplForTesting);
 }
 
 } // namespace FrameTestHelpers
diff --git a/third_party/WebKit/Source/web/tests/FrameTestHelpers.h b/third_party/WebKit/Source/web/tests/FrameTestHelpers.h
index eaadcac..067e7fa 100644
--- a/third_party/WebKit/Source/web/tests/FrameTestHelpers.h
+++ b/third_party/WebKit/Source/web/tests/FrameTestHelpers.h
@@ -42,9 +42,9 @@
 #include "public/web/WebRemoteFrameClient.h"
 #include "public/web/WebViewClient.h"
 #include "web/WebViewImpl.h"
-#include "wtf/PassOwnPtr.h"
 #include <gmock/gmock.h>
 #include <gtest/gtest.h>
+#include <memory>
 #include <string>
 
 namespace blink {
@@ -134,7 +134,7 @@
     WebWidgetClient* widgetClient() { return this; }
 
 private:
-    OwnPtr<WebLayerTreeView> m_layerTreeView;
+    std::unique_ptr<WebLayerTreeView> m_layerTreeView;
     bool m_animationScheduled;
 };
 
diff --git a/third_party/WebKit/Source/web/tests/KeyboardTest.cpp b/third_party/WebKit/Source/web/tests/KeyboardTest.cpp
index d5275e0c..bf1877e0 100644
--- a/third_party/WebKit/Source/web/tests/KeyboardTest.cpp
+++ b/third_party/WebKit/Source/web/tests/KeyboardTest.cpp
@@ -37,6 +37,7 @@
 #include "public/web/WebInputEvent.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "web/WebInputEventConversion.h"
+#include <memory>
 
 namespace blink {
 
@@ -53,7 +54,7 @@
         PlatformKeyboardEventBuilder evt(webKeyboardEvent);
         evt.setKeyType(keyType);
         KeyboardEvent* keyboardEvent = KeyboardEvent::create(evt, 0);
-        OwnPtr<Settings> settings = Settings::create();
+        std::unique_ptr<Settings> settings = Settings::create();
         EditingBehavior behavior(settings->editingBehaviorType());
         return behavior.interpretKeyEvent(*keyboardEvent);
     }
diff --git a/third_party/WebKit/Source/web/tests/PrerenderingTest.cpp b/third_party/WebKit/Source/web/tests/PrerenderingTest.cpp
index 67f8091..ca5ca224 100644
--- a/third_party/WebKit/Source/web/tests/PrerenderingTest.cpp
+++ b/third_party/WebKit/Source/web/tests/PrerenderingTest.cpp
@@ -44,9 +44,10 @@
 #include "testing/gtest/include/gtest/gtest.h"
 #include "web/WebLocalFrameImpl.h"
 #include "web/tests/FrameTestHelpers.h"
-#include "wtf/OwnPtr.h"
+#include "wtf/PtrUtil.h"
 #include <functional>
 #include <list>
+#include <memory>
 
 using namespace blink;
 using blink::URLTestHelpers::toKURL;
@@ -66,7 +67,7 @@
     void setExtraDataForNextPrerender(WebPrerender::ExtraData* extraData)
     {
         DCHECK(!m_extraData);
-        m_extraData = adoptPtr(extraData);
+        m_extraData = wrapUnique(extraData);
     }
 
     WebPrerender releaseWebPrerender()
@@ -91,13 +92,13 @@
     // From WebPrerendererClient:
     void willAddPrerender(WebPrerender* prerender) override
     {
-        prerender->setExtraData(m_extraData.leakPtr());
+        prerender->setExtraData(m_extraData.release());
 
         DCHECK(!prerender->isNull());
         m_webPrerenders.push_back(*prerender);
     }
 
-    OwnPtr<WebPrerender::ExtraData> m_extraData;
+    std::unique_ptr<WebPrerender::ExtraData> m_extraData;
     std::list<WebPrerender> m_webPrerenders;
 };
 
diff --git a/third_party/WebKit/Source/web/tests/SpinLockTest.cpp b/third_party/WebKit/Source/web/tests/SpinLockTest.cpp
index 80531c59..769d349 100644
--- a/third_party/WebKit/Source/web/tests/SpinLockTest.cpp
+++ b/third_party/WebKit/Source/web/tests/SpinLockTest.cpp
@@ -36,8 +36,8 @@
 #include "public/platform/WebThread.h"
 #include "public/platform/WebTraceLocation.h"
 #include "testing/gtest/include/gtest/gtest.h"
-#include "wtf/OwnPtr.h"
-#include "wtf/PassOwnPtr.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace blink {
 
@@ -77,8 +77,8 @@
 {
     char sharedBuffer[bufferSize];
 
-    OwnPtr<WebThread> thread1 = adoptPtr(Platform::current()->createThread("thread1"));
-    OwnPtr<WebThread> thread2 = adoptPtr(Platform::current()->createThread("thread2"));
+    std::unique_ptr<WebThread> thread1 = wrapUnique(Platform::current()->createThread("thread1"));
+    std::unique_ptr<WebThread> thread2 = wrapUnique(Platform::current()->createThread("thread2"));
 
     thread1->getWebTaskRunner()->postTask(BLINK_FROM_HERE, threadSafeBind(&threadMain, AllowCrossThreadAccess(static_cast<char*>(sharedBuffer))));
     thread2->getWebTaskRunner()->postTask(BLINK_FROM_HERE, threadSafeBind(&threadMain, AllowCrossThreadAccess(static_cast<char*>(sharedBuffer))));
diff --git a/third_party/WebKit/Source/web/tests/TextFinderTest.cpp b/third_party/WebKit/Source/web/tests/TextFinderTest.cpp
index bfa8a86f..9ee5ae5 100644
--- a/third_party/WebKit/Source/web/tests/TextFinderTest.cpp
+++ b/third_party/WebKit/Source/web/tests/TextFinderTest.cpp
@@ -22,7 +22,6 @@
 #include "web/FindInPageCoordinates.h"
 #include "web/WebLocalFrameImpl.h"
 #include "web/tests/FrameTestHelpers.h"
-#include "wtf/OwnPtr.h"
 
 using blink::testing::runPendingTasks;
 
diff --git a/third_party/WebKit/Source/web/tests/WebFrameTest.cpp b/third_party/WebKit/Source/web/tests/WebFrameTest.cpp
index cc7b83617..7bcfe35 100644
--- a/third_party/WebKit/Source/web/tests/WebFrameTest.cpp
+++ b/third_party/WebKit/Source/web/tests/WebFrameTest.cpp
@@ -128,8 +128,10 @@
 #include "web/WebViewImpl.h"
 #include "web/tests/FrameTestHelpers.h"
 #include "wtf/Forward.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/dtoa/utils.h"
 #include <map>
+#include <memory>
 #include <stdarg.h>
 #include <v8.h>
 
@@ -254,7 +256,7 @@
         webViewHelper->resize(WebSize(640, 480));
     }
 
-    PassOwnPtr<DragImage> nodeImageTestSetup(FrameTestHelpers::WebViewHelper* webViewHelper, const std::string& testcase)
+    std::unique_ptr<DragImage> nodeImageTestSetup(FrameTestHelpers::WebViewHelper* webViewHelper, const std::string& testcase)
     {
         registerMockedHttpURLLoad("nodeimage.html");
         webViewHelper->initializeAndLoad(m_baseURL + "nodeimage.html");
@@ -2447,7 +2449,7 @@
     int viewWidth = 500;
     int viewHeight = 500;
 
-    OwnPtr<FakeCompositingWebViewClient> fakeCompositingWebViewClient = adoptPtr(new FakeCompositingWebViewClient());
+    std::unique_ptr<FakeCompositingWebViewClient> fakeCompositingWebViewClient = wrapUnique(new FakeCompositingWebViewClient());
     FrameTestHelpers::WebViewHelper webViewHelper;
     webViewHelper.initialize(true, nullptr, fakeCompositingWebViewClient.get(), nullptr, &configueCompositingWebView);
 
@@ -3422,18 +3424,18 @@
         releaseNotifications.clear();
     }
 
-    Vector<OwnPtr<Notification>> createNotifications;
-    Vector<OwnPtr<Notification>> releaseNotifications;
+    Vector<std::unique_ptr<Notification>> createNotifications;
+    Vector<std::unique_ptr<Notification>> releaseNotifications;
 
  private:
     void didCreateScriptContext(WebLocalFrame* frame, v8::Local<v8::Context> context, int extensionGroup, int worldId) override
     {
-        createNotifications.append(adoptPtr(new Notification(frame, context, worldId)));
+        createNotifications.append(wrapUnique(new Notification(frame, context, worldId)));
     }
 
     void willReleaseScriptContext(WebLocalFrame* frame, v8::Local<v8::Context> context, int worldId) override
     {
-        releaseNotifications.append(adoptPtr(new Notification(frame, context, worldId)));
+        releaseNotifications.append(wrapUnique(new Notification(frame, context, worldId)));
     }
 };
 
@@ -4541,7 +4543,7 @@
 
     void registerSelection(const WebSelection& selection) override
     {
-        m_selection = adoptPtr(new WebSelection(selection));
+        m_selection = wrapUnique(new WebSelection(selection));
     }
 
     void clearSelection() override
@@ -4563,7 +4565,7 @@
 
 private:
     bool m_selectionCleared;
-    OwnPtr<WebSelection> m_selection;
+    std::unique_ptr<WebSelection> m_selection;
 };
 
 class CompositedSelectionBoundsTestWebViewClient : public FrameTestHelpers::TestWebViewClient {
@@ -6252,7 +6254,7 @@
 TEST_F(WebFrameTest, overflowHiddenRewrite)
 {
     registerMockedHttpURLLoad("non-scrollable.html");
-    OwnPtr<FakeCompositingWebViewClient> fakeCompositingWebViewClient = adoptPtr(new FakeCompositingWebViewClient());
+    std::unique_ptr<FakeCompositingWebViewClient> fakeCompositingWebViewClient = wrapUnique(new FakeCompositingWebViewClient());
     FrameTestHelpers::WebViewHelper webViewHelper;
     webViewHelper.initialize(true, nullptr, fakeCompositingWebViewClient.get(), nullptr, &configueCompositingWebView);
 
@@ -6968,7 +6970,7 @@
 TEST_P(ParameterizedWebFrameTest, NodeImageTestCSSTransformDescendant)
 {
     FrameTestHelpers::WebViewHelper webViewHelper(this);
-    OwnPtr<DragImage> dragImage = nodeImageTestSetup(&webViewHelper, std::string("case-css-3dtransform-descendant"));
+    std::unique_ptr<DragImage> dragImage = nodeImageTestSetup(&webViewHelper, std::string("case-css-3dtransform-descendant"));
     EXPECT_TRUE(dragImage);
 
     nodeImageTestValidation(IntSize(40, 40), dragImage.get());
@@ -6977,7 +6979,7 @@
 TEST_P(ParameterizedWebFrameTest, NodeImageTestCSSTransform)
 {
     FrameTestHelpers::WebViewHelper webViewHelper(this);
-    OwnPtr<DragImage> dragImage = nodeImageTestSetup(&webViewHelper, std::string("case-css-transform"));
+    std::unique_ptr<DragImage> dragImage = nodeImageTestSetup(&webViewHelper, std::string("case-css-transform"));
     EXPECT_TRUE(dragImage);
 
     nodeImageTestValidation(IntSize(40, 40), dragImage.get());
@@ -6986,7 +6988,7 @@
 TEST_P(ParameterizedWebFrameTest, NodeImageTestCSS3DTransform)
 {
     FrameTestHelpers::WebViewHelper webViewHelper(this);
-    OwnPtr<DragImage> dragImage = nodeImageTestSetup(&webViewHelper, std::string("case-css-3dtransform"));
+    std::unique_ptr<DragImage> dragImage = nodeImageTestSetup(&webViewHelper, std::string("case-css-3dtransform"));
     EXPECT_TRUE(dragImage);
 
     nodeImageTestValidation(IntSize(40, 40), dragImage.get());
@@ -6995,7 +6997,7 @@
 TEST_P(ParameterizedWebFrameTest, NodeImageTestInlineBlock)
 {
     FrameTestHelpers::WebViewHelper webViewHelper(this);
-    OwnPtr<DragImage> dragImage = nodeImageTestSetup(&webViewHelper, std::string("case-inlineblock"));
+    std::unique_ptr<DragImage> dragImage = nodeImageTestSetup(&webViewHelper, std::string("case-inlineblock"));
     EXPECT_TRUE(dragImage);
 
     nodeImageTestValidation(IntSize(40, 40), dragImage.get());
@@ -7004,7 +7006,7 @@
 TEST_P(ParameterizedWebFrameTest, NodeImageTestFloatLeft)
 {
     FrameTestHelpers::WebViewHelper webViewHelper(this);
-    OwnPtr<DragImage> dragImage = nodeImageTestSetup(&webViewHelper, std::string("case-float-left-overflow-hidden"));
+    std::unique_ptr<DragImage> dragImage = nodeImageTestSetup(&webViewHelper, std::string("case-float-left-overflow-hidden"));
     EXPECT_TRUE(dragImage);
 
     nodeImageTestValidation(IntSize(40, 40), dragImage.get());
diff --git a/third_party/WebKit/Source/web/tests/WebPluginContainerTest.cpp b/third_party/WebKit/Source/web/tests/WebPluginContainerTest.cpp
index b69327a..f6084a73 100644
--- a/third_party/WebKit/Source/web/tests/WebPluginContainerTest.cpp
+++ b/third_party/WebKit/Source/web/tests/WebPluginContainerTest.cpp
@@ -66,6 +66,8 @@
 #include "web/WebViewImpl.h"
 #include "web/tests/FakeWebPlugin.h"
 #include "web/tests/FrameTestHelpers.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 using blink::testing::runPendingTasks;
 
@@ -602,7 +604,7 @@
 public:
     CompositedPlugin(WebLocalFrame* frame, const WebPluginParams& params)
         : FakeWebPlugin(frame, params)
-        , m_layer(adoptPtr(Platform::current()->compositorSupport()->createLayer()))
+        , m_layer(wrapUnique(Platform::current()->compositorSupport()->createLayer()))
     {
     }
 
@@ -625,7 +627,7 @@
     }
 
 private:
-    OwnPtr<WebLayer> m_layer;
+    std::unique_ptr<WebLayer> m_layer;
 };
 
 class ScopedSPv2 {
@@ -656,7 +658,7 @@
     Element* element = static_cast<Element*>(container->element());
     const auto* plugin = static_cast<const CompositedPlugin*>(container->plugin());
 
-    OwnPtr<PaintController> paintController = PaintController::create();
+    std::unique_ptr<PaintController> paintController = PaintController::create();
     GraphicsContext graphicsContext(*paintController);
     container->paint(graphicsContext, CullRect(IntRect(10, 10, 400, 300)));
     paintController->commitNewDisplayItems();
diff --git a/third_party/WebKit/Source/web/tests/WebViewTest.cpp b/third_party/WebKit/Source/web/tests/WebViewTest.cpp
index b99c5ba0..237a8c6 100644
--- a/third_party/WebKit/Source/web/tests/WebViewTest.cpp
+++ b/third_party/WebKit/Source/web/tests/WebViewTest.cpp
@@ -96,6 +96,8 @@
 #include "web/WebSettingsImpl.h"
 #include "web/WebViewImpl.h"
 #include "web/tests/FrameTestHelpers.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 #if OS(MACOSX)
 #include "public/web/mac/WebSubstringUtil.h"
@@ -1864,7 +1866,7 @@
 
 TEST_F(WebViewTest, ShowPressOnTransformedLink)
 {
-    OwnPtr<FrameTestHelpers::TestWebViewClient> fakeCompositingWebViewClient = adoptPtr(new FrameTestHelpers::TestWebViewClient());
+    std::unique_ptr<FrameTestHelpers::TestWebViewClient> fakeCompositingWebViewClient = wrapUnique(new FrameTestHelpers::TestWebViewClient());
     FrameTestHelpers::WebViewHelper webViewHelper;
     WebViewImpl* webViewImpl = webViewHelper.initialize(true, nullptr, fakeCompositingWebViewClient.get(), nullptr, &configueCompositingWebView);
 
diff --git a/third_party/WebKit/Source/wtf/Assertions.cpp b/third_party/WebKit/Source/wtf/Assertions.cpp
index ec94840..ed523882 100644
--- a/third_party/WebKit/Source/wtf/Assertions.cpp
+++ b/third_party/WebKit/Source/wtf/Assertions.cpp
@@ -34,10 +34,10 @@
 #include "wtf/Assertions.h"
 
 #include "wtf/Compiler.h"
-#include "wtf/OwnPtr.h"
-#include "wtf/PassOwnPtr.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/ThreadSpecific.h"
 #include "wtf/Threading.h"
+#include <memory>
 #include <stdarg.h>
 #include <stdio.h>
 #include <stdlib.h>
@@ -115,7 +115,7 @@
         return;
     }
 
-    OwnPtr<char[]> formatWithNewline = adoptArrayPtr(new char[formatLength + 2]);
+    std::unique_ptr<char[]> formatWithNewline = wrapArrayUnique(new char[formatLength + 2]);
     memcpy(formatWithNewline.get(), format, formatLength);
     formatWithNewline[formatLength] = '\n';
     formatWithNewline[formatLength + 1] = 0;
diff --git a/third_party/WebKit/Source/wtf/DataLog.cpp b/third_party/WebKit/Source/wtf/DataLog.cpp
index 5d8d981..61076f4 100644
--- a/third_party/WebKit/Source/wtf/DataLog.cpp
+++ b/third_party/WebKit/Source/wtf/DataLog.cpp
@@ -59,7 +59,7 @@
     snprintf(actualFilename, sizeof(actualFilename), "%s.%d.txt", filename, getpid());
 
     if (filename) {
-        file = FilePrintStream::open(actualFilename, "w").leakPtr();
+        file = FilePrintStream::open(actualFilename, "w").release();
         if (!file)
             fprintf(stderr, "Warning: Could not open log file %s for writing.\n", actualFilename);
     }
diff --git a/third_party/WebKit/Source/wtf/DequeTest.cpp b/third_party/WebKit/Source/wtf/DequeTest.cpp
index 114afbb9..8c6e360b 100644
--- a/third_party/WebKit/Source/wtf/DequeTest.cpp
+++ b/third_party/WebKit/Source/wtf/DequeTest.cpp
@@ -27,8 +27,7 @@
 
 #include "testing/gtest/include/gtest/gtest.h"
 #include "wtf/HashSet.h"
-#include "wtf/OwnPtr.h"
-#include "wtf/PassOwnPtr.h"
+#include "wtf/PtrUtil.h"
 #include <memory>
 
 namespace WTF {
@@ -178,11 +177,11 @@
 {
     int destructNumber = 0;
     OwnPtrDeque deque;
-    deque.append(adoptPtr(new DestructCounter(0, &destructNumber)));
-    deque.append(adoptPtr(new DestructCounter(1, &destructNumber)));
+    deque.append(wrapUnique(new DestructCounter(0, &destructNumber)));
+    deque.append(wrapUnique(new DestructCounter(1, &destructNumber)));
     EXPECT_EQ(2u, deque.size());
 
-    OwnPtr<DestructCounter>& counter0 = deque.first();
+    std::unique_ptr<DestructCounter>& counter0 = deque.first();
     EXPECT_EQ(0, counter0->get());
     int counter1 = deque.last()->get();
     EXPECT_EQ(1, counter1);
@@ -190,7 +189,7 @@
 
     size_t index = 0;
     for (auto iter = deque.begin(); iter != deque.end(); ++iter) {
-        OwnPtr<DestructCounter>& refCounter = *iter;
+        std::unique_ptr<DestructCounter>& refCounter = *iter;
         EXPECT_EQ(index, static_cast<size_t>(refCounter->get()));
         EXPECT_EQ(index, static_cast<size_t>((*refCounter).get()));
         index++;
@@ -199,7 +198,7 @@
 
     auto it = deque.begin();
     for (index = 0; index < deque.size(); ++index) {
-        OwnPtr<DestructCounter>& refCounter = *it;
+        std::unique_ptr<DestructCounter>& refCounter = *it;
         EXPECT_EQ(index, static_cast<size_t>(refCounter->get()));
         index++;
         ++it;
@@ -212,7 +211,7 @@
     EXPECT_EQ(1u, deque.size());
     EXPECT_EQ(1, destructNumber);
 
-    OwnPtr<DestructCounter> ownCounter1 = std::move(deque.first());
+    std::unique_ptr<DestructCounter> ownCounter1 = std::move(deque.first());
     deque.removeFirst();
     EXPECT_EQ(counter1, ownCounter1->get());
     EXPECT_EQ(0u, deque.size());
@@ -224,9 +223,9 @@
     size_t count = 1025;
     destructNumber = 0;
     for (size_t i = 0; i < count; ++i)
-        deque.prepend(adoptPtr(new DestructCounter(i, &destructNumber)));
+        deque.prepend(wrapUnique(new DestructCounter(i, &destructNumber)));
 
-    // Deque relocation must not destruct OwnPtr element.
+    // Deque relocation must not destruct std::unique_ptr element.
     EXPECT_EQ(0, destructNumber);
     EXPECT_EQ(count, deque.size());
 
@@ -242,8 +241,8 @@
 
 TEST(DequeTest, OwnPtr)
 {
-    ownPtrTest<Deque<OwnPtr<DestructCounter>>>();
-    ownPtrTest<Deque<OwnPtr<DestructCounter>, 2>>();
+    ownPtrTest<Deque<std::unique_ptr<DestructCounter>>>();
+    ownPtrTest<Deque<std::unique_ptr<DestructCounter>, 2>>();
 }
 
 class MoveOnly {
diff --git a/third_party/WebKit/Source/wtf/FilePrintStream.cpp b/third_party/WebKit/Source/wtf/FilePrintStream.cpp
index d248c8c..c967e8a 100644
--- a/third_party/WebKit/Source/wtf/FilePrintStream.cpp
+++ b/third_party/WebKit/Source/wtf/FilePrintStream.cpp
@@ -25,6 +25,9 @@
 
 #include "wtf/FilePrintStream.h"
 
+#include "wtf/PtrUtil.h"
+#include <memory>
+
 namespace WTF {
 
 FilePrintStream::FilePrintStream(FILE* file, AdoptionMode adoptionMode)
@@ -40,13 +43,13 @@
     fclose(m_file);
 }
 
-PassOwnPtr<FilePrintStream> FilePrintStream::open(const char* filename, const char* mode)
+std::unique_ptr<FilePrintStream> FilePrintStream::open(const char* filename, const char* mode)
 {
     FILE* file = fopen(filename, mode);
     if (!file)
-        return PassOwnPtr<FilePrintStream>();
+        return std::unique_ptr<FilePrintStream>();
 
-    return adoptPtr(new FilePrintStream(file));
+    return wrapUnique(new FilePrintStream(file));
 }
 
 void FilePrintStream::vprintf(const char* format, va_list argList)
diff --git a/third_party/WebKit/Source/wtf/FilePrintStream.h b/third_party/WebKit/Source/wtf/FilePrintStream.h
index 6f4eccdf6..8756472 100644
--- a/third_party/WebKit/Source/wtf/FilePrintStream.h
+++ b/third_party/WebKit/Source/wtf/FilePrintStream.h
@@ -26,8 +26,8 @@
 #ifndef FilePrintStream_h
 #define FilePrintStream_h
 
-#include "wtf/PassOwnPtr.h"
 #include "wtf/PrintStream.h"
+#include <memory>
 #include <stdio.h>
 
 namespace WTF {
@@ -42,7 +42,7 @@
     FilePrintStream(FILE*, AdoptionMode = Adopt);
     ~FilePrintStream() override;
 
-    static PassOwnPtr<FilePrintStream> open(const char* filename, const char* mode);
+    static std::unique_ptr<FilePrintStream> open(const char* filename, const char* mode);
 
     FILE* file() { return m_file; }
 
diff --git a/third_party/WebKit/Source/wtf/Forward.h b/third_party/WebKit/Source/wtf/Forward.h
index 03f1333..521fffe8 100644
--- a/third_party/WebKit/Source/wtf/Forward.h
+++ b/third_party/WebKit/Source/wtf/Forward.h
@@ -26,15 +26,6 @@
 
 namespace WTF {
 
-template <typename T> class OwnPtr;
-#if COMPILER(MSVC)
-#ifndef PassOwnPtr
-#define PassOwnPtr OwnPtr
-#endif
-#else
-template <typename T>
-using PassOwnPtr = OwnPtr<T>;
-#endif
 template <typename T> class PassRefPtr;
 template <typename T> class RefPtr;
 template <size_t size> class SizeSpecificPartitionAllocator;
@@ -63,8 +54,6 @@
 
 } // namespace WTF
 
-using WTF::OwnPtr;
-using WTF::PassOwnPtr;
 using WTF::PassRefPtr;
 using WTF::RefPtr;
 using WTF::Vector;
diff --git a/third_party/WebKit/Source/wtf/Functional.h b/third_party/WebKit/Source/wtf/Functional.h
index 694963a..dd3b7a2 100644
--- a/third_party/WebKit/Source/wtf/Functional.h
+++ b/third_party/WebKit/Source/wtf/Functional.h
@@ -29,7 +29,6 @@
 #include "base/tuple.h"
 #include "wtf/Allocator.h"
 #include "wtf/Assertions.h"
-#include "wtf/PassOwnPtr.h"
 #include "wtf/PassRefPtr.h"
 #include "wtf/PtrUtil.h"
 #include "wtf/RefPtr.h"
@@ -168,12 +167,6 @@
     }
 
     template <typename... IncomingParameters>
-    R operator()(const PassOwnPtr<C>& c, IncomingParameters&&... parameters)
-    {
-        return (c.get()->*m_function)(std::forward<IncomingParameters>(parameters)...);
-    }
-
-    template <typename... IncomingParameters>
     R operator()(const std::unique_ptr<C>& c, IncomingParameters&&... parameters)
     {
         return (c.get()->*m_function)(std::forward<IncomingParameters>(parameters)...);
diff --git a/third_party/WebKit/Source/wtf/HashFunctions.h b/third_party/WebKit/Source/wtf/HashFunctions.h
index 31fc76a..569282b 100644
--- a/third_party/WebKit/Source/wtf/HashFunctions.h
+++ b/third_party/WebKit/Source/wtf/HashFunctions.h
@@ -21,7 +21,6 @@
 #ifndef WTF_HashFunctions_h
 #define WTF_HashFunctions_h
 
-#include "wtf/OwnPtr.h"
 #include "wtf/RefPtr.h"
 #include "wtf/StdLibExtras.h"
 #include <memory>
@@ -155,18 +154,6 @@
 };
 
 template <typename T>
-struct OwnPtrHash : PtrHash<T> {
-    using PtrHash<T>::hash;
-    static unsigned hash(const OwnPtr<T>& key) { return hash(key.get()); }
-
-    static bool equal(const OwnPtr<T>& a, const OwnPtr<T>& b)
-    {
-        return a.get() == b.get();
-    }
-    static bool equal(const OwnPtr<T>& a, T* b) { return a == b; }
-};
-
-template <typename T>
 struct UniquePtrHash : PtrHash<T> {
     using PtrHash<T>::hash;
     static unsigned hash(const std::unique_ptr<T>& key) { return hash(key.get()); }
@@ -215,10 +202,6 @@
     using Hash = RefPtrHash<T>;
 };
 template <typename T>
-struct DefaultHash<OwnPtr<T>> {
-    using Hash = OwnPtrHash<T>;
-};
-template <typename T>
 struct DefaultHash<std::unique_ptr<T>> {
     using Hash = UniquePtrHash<T>;
 };
diff --git a/third_party/WebKit/Source/wtf/HashMapTest.cpp b/third_party/WebKit/Source/wtf/HashMapTest.cpp
index f8b97ed0..17583d95 100644
--- a/third_party/WebKit/Source/wtf/HashMapTest.cpp
+++ b/third_party/WebKit/Source/wtf/HashMapTest.cpp
@@ -26,9 +26,8 @@
 #include "wtf/HashMap.h"
 
 #include "testing/gtest/include/gtest/gtest.h"
-#include "wtf/OwnPtr.h"
-#include "wtf/PassOwnPtr.h"
 #include "wtf/PassRefPtr.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/RefCounted.h"
 #include "wtf/Vector.h"
 #include <memory>
@@ -104,14 +103,14 @@
     int* m_destructNumber;
 };
 
-using OwnPtrHashMap = HashMap<int, OwnPtr<DestructCounter>>;
+using OwnPtrHashMap = HashMap<int, std::unique_ptr<DestructCounter>>;
 
 TEST(HashMapTest, OwnPtrAsValue)
 {
     int destructNumber = 0;
     OwnPtrHashMap map;
-    map.add(1, adoptPtr(new DestructCounter(1, &destructNumber)));
-    map.add(2, adoptPtr(new DestructCounter(2, &destructNumber)));
+    map.add(1, wrapUnique(new DestructCounter(1, &destructNumber)));
+    map.add(2, wrapUnique(new DestructCounter(2, &destructNumber)));
 
     DestructCounter* counter1 = map.get(1);
     EXPECT_EQ(1, counter1->get());
@@ -120,12 +119,12 @@
     EXPECT_EQ(0, destructNumber);
 
     for (OwnPtrHashMap::iterator iter = map.begin(); iter != map.end(); ++iter) {
-        OwnPtr<DestructCounter>& ownCounter = iter->value;
+        std::unique_ptr<DestructCounter>& ownCounter = iter->value;
         EXPECT_EQ(iter->key, ownCounter->get());
     }
     ASSERT_EQ(0, destructNumber);
 
-    OwnPtr<DestructCounter> ownCounter1 = map.take(1);
+    std::unique_ptr<DestructCounter> ownCounter1 = map.take(1);
     EXPECT_EQ(ownCounter1.get(), counter1);
     EXPECT_FALSE(map.contains(1));
     EXPECT_EQ(0, destructNumber);
@@ -243,7 +242,7 @@
 private:
     int m_v;
 };
-using IntSimpleMap = HashMap<int, OwnPtr<SimpleClass>>;
+using IntSimpleMap = HashMap<int, std::unique_ptr<SimpleClass>>;
 
 TEST(HashMapTest, AddResult)
 {
@@ -254,10 +253,10 @@
     EXPECT_EQ(0, result.storedValue->value.get());
 
     SimpleClass* simple1 = new SimpleClass(1);
-    result.storedValue->value = adoptPtr(simple1);
+    result.storedValue->value = wrapUnique(simple1);
     EXPECT_EQ(simple1, map.get(1));
 
-    IntSimpleMap::AddResult result2 = map.add(1, adoptPtr(new SimpleClass(2)));
+    IntSimpleMap::AddResult result2 = map.add(1, wrapUnique(new SimpleClass(2)));
     EXPECT_FALSE(result2.isNewEntry);
     EXPECT_EQ(1, result.storedValue->key);
     EXPECT_EQ(1, result.storedValue->value->v());
diff --git a/third_party/WebKit/Source/wtf/HashSetTest.cpp b/third_party/WebKit/Source/wtf/HashSetTest.cpp
index d9497665..2313b7c 100644
--- a/third_party/WebKit/Source/wtf/HashSetTest.cpp
+++ b/third_party/WebKit/Source/wtf/HashSetTest.cpp
@@ -26,9 +26,9 @@
 #include "wtf/HashSet.h"
 
 #include "testing/gtest/include/gtest/gtest.h"
-#include "wtf/OwnPtr.h"
-#include "wtf/PassOwnPtr.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/RefCounted.h"
+#include <memory>
 
 namespace WTF {
 
@@ -90,14 +90,14 @@
 {
     bool deleted1 = false, deleted2 = false;
 
-    typedef HashSet<OwnPtr<Dummy>> OwnPtrSet;
+    typedef HashSet<std::unique_ptr<Dummy>> OwnPtrSet;
     OwnPtrSet set;
 
     Dummy* ptr1 = new Dummy(deleted1);
     {
         // AddResult in a separate scope to avoid assertion hit,
         // since we modify the container further.
-        HashSet<OwnPtr<Dummy>>::AddResult res1 = set.add(adoptPtr(ptr1));
+        HashSet<std::unique_ptr<Dummy>>::AddResult res1 = set.add(wrapUnique(ptr1));
         EXPECT_EQ(ptr1, res1.storedValue->get());
     }
 
@@ -105,11 +105,11 @@
     EXPECT_EQ(1UL, set.size());
     OwnPtrSet::iterator it1 = set.find(ptr1);
     EXPECT_NE(set.end(), it1);
-    EXPECT_EQ(ptr1, (*it1));
+    EXPECT_EQ(ptr1, (*it1).get());
 
     Dummy* ptr2 = new Dummy(deleted2);
     {
-        HashSet<OwnPtr<Dummy>>::AddResult res2 = set.add(adoptPtr(ptr2));
+        HashSet<std::unique_ptr<Dummy>>::AddResult res2 = set.add(wrapUnique(ptr2));
         EXPECT_EQ(res2.storedValue->get(), ptr2);
     }
 
@@ -117,7 +117,7 @@
     EXPECT_EQ(2UL, set.size());
     OwnPtrSet::iterator it2 = set.find(ptr2);
     EXPECT_NE(set.end(), it2);
-    EXPECT_EQ(ptr2, (*it2));
+    EXPECT_EQ(ptr2, (*it2).get());
 
     set.remove(ptr1);
     EXPECT_TRUE(deleted1);
@@ -130,22 +130,22 @@
     deleted2 = false;
     {
         OwnPtrSet set;
-        set.add(adoptPtr(new Dummy(deleted1)));
-        set.add(adoptPtr(new Dummy(deleted2)));
+        set.add(wrapUnique(new Dummy(deleted1)));
+        set.add(wrapUnique(new Dummy(deleted2)));
     }
     EXPECT_TRUE(deleted1);
     EXPECT_TRUE(deleted2);
 
     deleted1 = false;
     deleted2 = false;
-    OwnPtr<Dummy> ownPtr1;
-    OwnPtr<Dummy> ownPtr2;
+    std::unique_ptr<Dummy> ownPtr1;
+    std::unique_ptr<Dummy> ownPtr2;
     ptr1 = new Dummy(deleted1);
     ptr2 = new Dummy(deleted2);
     {
         OwnPtrSet set;
-        set.add(adoptPtr(ptr1));
-        set.add(adoptPtr(ptr2));
+        set.add(wrapUnique(ptr1));
+        set.add(wrapUnique(ptr2));
         ownPtr1 = set.take(ptr1);
         EXPECT_EQ(1UL, set.size());
         ownPtr2 = set.takeAny();
@@ -154,8 +154,8 @@
     EXPECT_FALSE(deleted1);
     EXPECT_FALSE(deleted2);
 
-    EXPECT_EQ(ptr1, ownPtr1);
-    EXPECT_EQ(ptr2, ownPtr2);
+    EXPECT_EQ(ptr1, ownPtr1.get());
+    EXPECT_EQ(ptr2, ownPtr2.get());
 }
 
 class DummyRefCounted : public RefCounted<DummyRefCounted> {
diff --git a/third_party/WebKit/Source/wtf/HashTable.h b/third_party/WebKit/Source/wtf/HashTable.h
index 64c7018..f6720ab 100644
--- a/third_party/WebKit/Source/wtf/HashTable.h
+++ b/third_party/WebKit/Source/wtf/HashTable.h
@@ -25,7 +25,9 @@
 #include "wtf/Assertions.h"
 #include "wtf/ConditionalDestructor.h"
 #include "wtf/HashTraits.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/allocator/PartitionAllocator.h"
+#include <memory>
 
 #define DUMP_HASHTABLE_STATS 0
 #define DUMP_HASHTABLE_STATS_PER_TABLE 0
@@ -579,7 +581,7 @@
 
 #if DUMP_HASHTABLE_STATS_PER_TABLE
 public:
-    mutable OwnPtr<Stats> m_stats;
+    mutable std::unique_ptr<Stats> m_stats;
 #endif
 
     template <WeakHandlingFlag x, typename T, typename U, typename V, typename W, typename X, typename Y, typename Z> friend struct WeakProcessingHashTableHelper;
@@ -598,7 +600,7 @@
     , m_modifications(0)
 #endif
 #if DUMP_HASHTABLE_STATS_PER_TABLE
-    , m_stats(adoptPtr(new Stats))
+    , m_stats(wrapUnique(new Stats))
 #endif
 {
     static_assert(Allocator::isGarbageCollected || (!IsPointerToGarbageCollectedType<Key>::value && !IsPointerToGarbageCollectedType<Value>::value), "Cannot put raw pointers to garbage-collected classes into an off-heap collection.");
@@ -1235,7 +1237,7 @@
     , m_modifications(0)
 #endif
 #if DUMP_HASHTABLE_STATS_PER_TABLE
-    , m_stats(adoptPtr(new Stats(*other.m_stats)))
+    , m_stats(wrapUnique(new Stats(*other.m_stats)))
 #endif
 {
     // Copy the hash table the dumb way, by adding each element to the new
@@ -1258,7 +1260,7 @@
     , m_modifications(0)
 #endif
 #if DUMP_HASHTABLE_STATS_PER_TABLE
-    , m_stats(adoptPtr(new Stats(*other.m_stats)))
+    , m_stats(wrapUnique(new Stats(*other.m_stats)))
 #endif
 {
     swap(other);
diff --git a/third_party/WebKit/Source/wtf/HashTraits.h b/third_party/WebKit/Source/wtf/HashTraits.h
index bd8f8c9..3ddd834 100644
--- a/third_party/WebKit/Source/wtf/HashTraits.h
+++ b/third_party/WebKit/Source/wtf/HashTraits.h
@@ -155,23 +155,6 @@
     static bool isDeletedValue(const T& value) { return value.isHashTableDeletedValue(); }
 };
 
-template <typename P> struct HashTraits<OwnPtr<P>> : SimpleClassHashTraits<OwnPtr<P>> {
-    typedef std::nullptr_t EmptyValueType;
-
-    static EmptyValueType emptyValue() { return nullptr; }
-
-    static const bool hasIsEmptyValueFunction = true;
-    static bool isEmptyValue(const OwnPtr<P>& value) { return !value; }
-
-    typedef typename OwnPtr<P>::PtrType PeekInType;
-
-    static void store(PassOwnPtr<P> value, OwnPtr<P>& storage) { storage = std::move(value); }
-
-    typedef typename OwnPtr<P>::PtrType PeekOutType;
-    static PeekOutType peek(const OwnPtr<P>& value) { return value.get(); }
-    static PeekOutType peek(std::nullptr_t) { return 0; }
-};
-
 template <typename P> struct HashTraits<RefPtr<P>> : SimpleClassHashTraits<RefPtr<P>> {
     typedef std::nullptr_t EmptyValueType;
     static EmptyValueType emptyValue() { return nullptr; }
diff --git a/third_party/WebKit/Source/wtf/LinkedHashSet.h b/third_party/WebKit/Source/wtf/LinkedHashSet.h
index 894138bf..e85c72fd 100644
--- a/third_party/WebKit/Source/wtf/LinkedHashSet.h
+++ b/third_party/WebKit/Source/wtf/LinkedHashSet.h
@@ -24,8 +24,6 @@
 
 #include "wtf/AddressSanitizer.h"
 #include "wtf/HashSet.h"
-#include "wtf/OwnPtr.h"
-#include "wtf/PassOwnPtr.h"
 #include "wtf/allocator/PartitionAllocator.h"
 
 namespace WTF {
diff --git a/third_party/WebKit/Source/wtf/LinkedStack.h b/third_party/WebKit/Source/wtf/LinkedStack.h
index 63bbbde7..3350c217 100644
--- a/third_party/WebKit/Source/wtf/LinkedStack.h
+++ b/third_party/WebKit/Source/wtf/LinkedStack.h
@@ -32,7 +32,8 @@
 #define LinkedStack_h
 
 #include "wtf/Allocator.h"
-#include "wtf/OwnPtr.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 
 namespace WTF {
 
@@ -45,7 +46,7 @@
     // Iterative cleanup to prevent stack overflow problems.
     ~LinkedStack()
     {
-        OwnPtr<Node> ptr = m_head.release();
+        std::unique_ptr<Node> ptr = m_head.release();
         while (ptr)
             ptr = ptr->m_next.release();
     }
@@ -62,18 +63,18 @@
     class Node {
         USING_FAST_MALLOC(LinkedStack::Node);
     public:
-        Node(const T&, PassOwnPtr<Node> next);
+        Node(const T&, std::unique_ptr<Node> next);
 
         T m_data;
-        OwnPtr<Node> m_next;
+        std::unique_ptr<Node> m_next;
     };
 
-    OwnPtr<Node> m_head;
+    std::unique_ptr<Node> m_head;
     size_t m_size;
 };
 
 template <typename T>
-LinkedStack<T>::Node::Node(const T& data, PassOwnPtr<Node> next)
+LinkedStack<T>::Node::Node(const T& data, std::unique_ptr<Node> next)
     : m_data(data)
     , m_next(next)
 {
@@ -88,7 +89,7 @@
 template <typename T>
 inline void LinkedStack<T>::push(const T& data)
 {
-    m_head = adoptPtr(new Node(data, m_head.release()));
+    m_head = wrapUnique(new Node(data, m_head.release()));
     ++m_size;
 }
 
diff --git a/third_party/WebKit/Source/wtf/ListHashSet.h b/third_party/WebKit/Source/wtf/ListHashSet.h
index 54aded52..ebc2220 100644
--- a/third_party/WebKit/Source/wtf/ListHashSet.h
+++ b/third_party/WebKit/Source/wtf/ListHashSet.h
@@ -23,9 +23,8 @@
 #define WTF_ListHashSet_h
 
 #include "wtf/HashSet.h"
-#include "wtf/OwnPtr.h"
-#include "wtf/PassOwnPtr.h"
 #include "wtf/allocator/PartitionAllocator.h"
+#include <memory>
 
 namespace WTF {
 
@@ -268,7 +267,7 @@
         }
 
     private:
-        // Not using OwnPtr as this pointer should be deleted at
+        // Not using std::unique_ptr as this pointer should be deleted at
         // releaseAllocator() method rather than at destructor.
         ListHashSetAllocator* m_allocator;
     };
diff --git a/third_party/WebKit/Source/wtf/ListHashSetTest.cpp b/third_party/WebKit/Source/wtf/ListHashSetTest.cpp
index 1c5a3545..97a1443 100644
--- a/third_party/WebKit/Source/wtf/ListHashSetTest.cpp
+++ b/third_party/WebKit/Source/wtf/ListHashSetTest.cpp
@@ -28,8 +28,10 @@
 #include "testing/gtest/include/gtest/gtest.h"
 #include "wtf/LinkedHashSet.h"
 #include "wtf/PassRefPtr.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/RefCounted.h"
 #include "wtf/RefPtr.h"
+#include <memory>
 #include <type_traits>
 
 namespace WTF {
@@ -552,14 +554,14 @@
 {
     bool deleted1 = false, deleted2 = false;
 
-    typedef ListHashSet<OwnPtr<Dummy>> OwnPtrSet;
+    typedef ListHashSet<std::unique_ptr<Dummy>> OwnPtrSet;
     OwnPtrSet set;
 
     Dummy* ptr1 = new Dummy(deleted1);
     {
         // AddResult in a separate scope to avoid assertion hit,
         // since we modify the container further.
-        OwnPtrSet::AddResult res1 = set.add(adoptPtr(ptr1));
+        OwnPtrSet::AddResult res1 = set.add(wrapUnique(ptr1));
         EXPECT_EQ(res1.storedValue->get(), ptr1);
     }
 
@@ -567,11 +569,11 @@
     EXPECT_EQ(1UL, set.size());
     OwnPtrSet::iterator it1 = set.find(ptr1);
     EXPECT_NE(set.end(), it1);
-    EXPECT_EQ(ptr1, (*it1));
+    EXPECT_EQ(ptr1, (*it1).get());
 
     Dummy* ptr2 = new Dummy(deleted2);
     {
-        OwnPtrSet::AddResult res2 = set.add(adoptPtr(ptr2));
+        OwnPtrSet::AddResult res2 = set.add(wrapUnique(ptr2));
         EXPECT_EQ(res2.storedValue->get(), ptr2);
     }
 
@@ -579,7 +581,7 @@
     EXPECT_EQ(2UL, set.size());
     OwnPtrSet::iterator it2 = set.find(ptr2);
     EXPECT_NE(set.end(), it2);
-    EXPECT_EQ(ptr2, (*it2));
+    EXPECT_EQ(ptr2, (*it2).get());
 
     set.remove(ptr1);
     EXPECT_TRUE(deleted1);
@@ -592,8 +594,8 @@
     deleted2 = false;
     {
         OwnPtrSet set;
-        set.add(adoptPtr(new Dummy(deleted1)));
-        set.add(adoptPtr(new Dummy(deleted2)));
+        set.add(wrapUnique(new Dummy(deleted1)));
+        set.add(wrapUnique(new Dummy(deleted2)));
     }
     EXPECT_TRUE(deleted1);
     EXPECT_TRUE(deleted2);
@@ -601,14 +603,14 @@
 
     deleted1 = false;
     deleted2 = false;
-    OwnPtr<Dummy> ownPtr1;
-    OwnPtr<Dummy> ownPtr2;
+    std::unique_ptr<Dummy> ownPtr1;
+    std::unique_ptr<Dummy> ownPtr2;
     ptr1 = new Dummy(deleted1);
     ptr2 = new Dummy(deleted2);
     {
         OwnPtrSet set;
-        set.add(adoptPtr(ptr1));
-        set.add(adoptPtr(ptr2));
+        set.add(wrapUnique(ptr1));
+        set.add(wrapUnique(ptr2));
         ownPtr1 = set.takeFirst();
         EXPECT_EQ(1UL, set.size());
         ownPtr2 = set.take(ptr2);
@@ -617,8 +619,8 @@
     EXPECT_FALSE(deleted1);
     EXPECT_FALSE(deleted2);
 
-    EXPECT_EQ(ptr1, ownPtr1);
-    EXPECT_EQ(ptr2, ownPtr2);
+    EXPECT_EQ(ptr1, ownPtr1.get());
+    EXPECT_EQ(ptr2, ownPtr2.get());
 }
 
 class CountCopy final {
diff --git a/third_party/WebKit/Source/wtf/OwnPtr.h b/third_party/WebKit/Source/wtf/OwnPtr.h
deleted file mode 100644
index 6725c07..0000000
--- a/third_party/WebKit/Source/wtf/OwnPtr.h
+++ /dev/null
@@ -1,196 +0,0 @@
-/*
- *  Copyright (C) 2006, 2007, 2008, 2009, 2010 Apple Inc. All rights reserved.
- *  Copyright (C) 2013 Intel Corporation. All rights reserved.
- *
- *  This library is free software; you can redistribute it and/or
- *  modify it under the terms of the GNU Library General Public
- *  License as published by the Free Software Foundation; either
- *  version 2 of the License, or (at your option) any later version.
- *
- *  This library is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- *  Library General Public License for more details.
- *
- *  You should have received a copy of the GNU Library General Public License
- *  along with this library; see the file COPYING.LIB.  If not, write to
- *  the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- *  Boston, MA 02110-1301, USA.
- *
- */
-
-#ifndef WTF_OwnPtr_h
-#define WTF_OwnPtr_h
-
-#include "wtf/Allocator.h"
-#include "wtf/Compiler.h"
-#include "wtf/Forward.h"
-#include "wtf/HashTableDeletedValueType.h"
-#include "wtf/Noncopyable.h"
-#include "wtf/OwnPtrCommon.h"
-#include <algorithm>
-#include <utility>
-
-namespace WTF {
-
-template <typename T> class OwnPtr {
-    USING_FAST_MALLOC(OwnPtr);
-    WTF_MAKE_NONCOPYABLE(OwnPtr);
-public:
-    template <typename U> friend PassOwnPtr<U> adoptPtr(U* ptr);
-    template <typename U> friend PassOwnPtr<U[]> adoptArrayPtr(U* ptr);
-
-    typedef typename std::remove_extent<T>::type ValueType;
-    typedef ValueType* PtrType;
-
-    OwnPtr() : m_ptr(nullptr) {}
-    OwnPtr(std::nullptr_t) : m_ptr(nullptr) {}
-
-    // Hash table deleted values, which are only constructed and never copied or
-    // destroyed.
-    OwnPtr(HashTableDeletedValueType) : m_ptr(hashTableDeletedValue()) {}
-    bool isHashTableDeletedValue() const { return m_ptr == hashTableDeletedValue(); }
-
-    ~OwnPtr()
-    {
-        OwnedPtrDeleter<T>::deletePtr(m_ptr);
-        m_ptr = nullptr;
-    }
-
-    PtrType get() const { return m_ptr; }
-
-    void reset();
-
-    PtrType leakPtr() WARN_UNUSED_RETURN;
-
-    ValueType& operator*() const { ASSERT(m_ptr); return *m_ptr; }
-    PtrType operator->() const { ASSERT(m_ptr); return m_ptr; }
-
-    ValueType& operator[](std::ptrdiff_t i) const;
-
-    bool operator!() const { return !m_ptr; }
-    explicit operator bool() const { return m_ptr; }
-
-    OwnPtr& operator=(std::nullptr_t) { reset(); return *this; }
-
-    OwnPtr(OwnPtr&&);
-    template <typename U, typename = typename std::enable_if<std::is_convertible<U*, T*>::value>::type> OwnPtr(OwnPtr<U>&&);
-
-    OwnPtr& operator=(OwnPtr&&);
-    template <typename U> OwnPtr& operator=(OwnPtr<U>&&);
-
-    void swap(OwnPtr& o) { std::swap(m_ptr, o.m_ptr); }
-
-    static T* hashTableDeletedValue() { return reinterpret_cast<T*>(-1); }
-
-private:
-    explicit OwnPtr(PtrType ptr) : m_ptr(ptr) {}
-
-    // We should never have two OwnPtrs for the same underlying object
-    // (otherwise we'll get double-destruction), so these equality operators
-    // should never be needed.
-    template <typename U> bool operator==(const OwnPtr<U>&) const
-    {
-        static_assert(!sizeof(U*), "OwnPtrs should never be equal");
-        return false;
-    }
-    template <typename U> bool operator!=(const OwnPtr<U>&) const
-    {
-        static_assert(!sizeof(U*), "OwnPtrs should never be equal");
-        return false;
-    }
-
-    PtrType m_ptr;
-};
-
-template <typename T> inline void OwnPtr<T>::reset()
-{
-    PtrType ptr = m_ptr;
-    m_ptr = nullptr;
-    OwnedPtrDeleter<T>::deletePtr(ptr);
-}
-
-template <typename T> inline typename OwnPtr<T>::PtrType OwnPtr<T>::leakPtr()
-{
-    PtrType ptr = m_ptr;
-    m_ptr = nullptr;
-    return ptr;
-}
-
-template <typename T> inline typename OwnPtr<T>::ValueType& OwnPtr<T>::operator[](std::ptrdiff_t i) const
-{
-    static_assert(std::is_array<T>::value, "elements access is possible for arrays only");
-    ASSERT(m_ptr);
-    ASSERT(i >= 0);
-    return m_ptr[i];
-}
-
-template <typename T> inline OwnPtr<T>::OwnPtr(OwnPtr<T>&& o)
-    : m_ptr(o.leakPtr())
-{
-}
-
-template <typename T>
-template <typename U, typename> inline OwnPtr<T>::OwnPtr(OwnPtr<U>&& o)
-    : m_ptr(o.leakPtr())
-{
-    static_assert(!std::is_array<T>::value, "pointers to array must never be converted");
-}
-
-template <typename T> inline OwnPtr<T>& OwnPtr<T>::operator=(OwnPtr<T>&& o)
-{
-    PtrType ptr = m_ptr;
-    m_ptr = o.leakPtr();
-    ASSERT(!ptr || m_ptr != ptr);
-    OwnedPtrDeleter<T>::deletePtr(ptr);
-
-    return *this;
-}
-
-template <typename T>
-template <typename U> inline OwnPtr<T>& OwnPtr<T>::operator=(OwnPtr<U>&& o)
-{
-    static_assert(!std::is_array<T>::value, "pointers to array must never be converted");
-    PtrType ptr = m_ptr;
-    m_ptr = o.leakPtr();
-    ASSERT(!ptr || m_ptr != ptr);
-    OwnedPtrDeleter<T>::deletePtr(ptr);
-
-    return *this;
-}
-
-template <typename T> inline void swap(OwnPtr<T>& a, OwnPtr<T>& b)
-{
-    a.swap(b);
-}
-
-template <typename T, typename U> inline bool operator==(const OwnPtr<T>& a, U* b)
-{
-    return a.get() == b;
-}
-
-template <typename T, typename U> inline bool operator==(T* a, const OwnPtr<U>& b)
-{
-    return a == b.get();
-}
-
-template <typename T, typename U> inline bool operator!=(const OwnPtr<T>& a, U* b)
-{
-    return a.get() != b;
-}
-
-template <typename T, typename U> inline bool operator!=(T* a, const OwnPtr<U>& b)
-{
-    return a != b.get();
-}
-
-template <typename T> inline typename OwnPtr<T>::PtrType getPtr(const OwnPtr<T>& p)
-{
-    return p.get();
-}
-
-} // namespace WTF
-
-using WTF::OwnPtr;
-
-#endif // WTF_OwnPtr_h
diff --git a/third_party/WebKit/Source/wtf/OwnPtrCommon.h b/third_party/WebKit/Source/wtf/OwnPtrCommon.h
deleted file mode 100644
index 89e24895..0000000
--- a/third_party/WebKit/Source/wtf/OwnPtrCommon.h
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
- * Copyright (C) 2009 Apple Inc. All rights reserved.
- * Copyright (C) 2009 Torch Mobile, Inc.
- * Copyright (C) 2010 Company 100 Inc.
- * Copyright (C) 2013 Intel Corporation. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef WTF_OwnPtrCommon_h
-#define WTF_OwnPtrCommon_h
-
-#include "wtf/Assertions.h"
-#include "wtf/TypeTraits.h"
-
-namespace WTF {
-
-class RefCountedBase;
-class ThreadSafeRefCountedBase;
-
-template<typename T>
-struct IsRefCounted {
-    STATIC_ONLY(IsRefCounted);
-    static const bool value = IsSubclass<T, RefCountedBase>::value
-        || IsSubclass<T, ThreadSafeRefCountedBase>::value;
-};
-
-template <typename T>
-struct OwnedPtrDeleter {
-    STATIC_ONLY(OwnedPtrDeleter);
-    static void deletePtr(T* ptr)
-    {
-        static_assert(!IsRefCounted<T>::value, "use RefPtr for RefCounted objects");
-        static_assert(sizeof(T) > 0, "type must be complete");
-        delete ptr;
-    }
-};
-
-template <typename T>
-struct OwnedPtrDeleter<T[]> {
-    STATIC_ONLY(OwnedPtrDeleter);
-    static void deletePtr(T* ptr)
-    {
-        static_assert(!IsRefCounted<T>::value, "use RefPtr for RefCounted objects");
-        static_assert(sizeof(T) > 0, "type must be complete");
-        delete[] ptr;
-    }
-};
-
-template <class T, int n>
-struct OwnedPtrDeleter<T[n]> {
-    STATIC_ONLY(OwnedPtrDeleter);
-    static_assert(sizeof(T) < 0, "do not use array with size as type");
-};
-
-} // namespace WTF
-
-#endif // WTF_OwnPtrCommon_h
diff --git a/third_party/WebKit/Source/wtf/PassOwnPtr.h b/third_party/WebKit/Source/wtf/PassOwnPtr.h
deleted file mode 100644
index 37b1b37..0000000
--- a/third_party/WebKit/Source/wtf/PassOwnPtr.h
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * Copyright (C) 2009, 2010 Apple Inc. All rights reserved.
- * Copyright (C) 2013 Intel Corporation. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef WTF_PassOwnPtr_h
-#define WTF_PassOwnPtr_h
-
-#include "wtf/Allocator.h"
-#include "wtf/Forward.h"
-#include "wtf/Noncopyable.h"
-#include "wtf/OwnPtr.h"
-
-namespace WTF {
-
-// PassOwnPtr is now an alias of OwnPtr, as defined in Forward.h.
-
-template <typename T> PassOwnPtr<T> adoptPtr(T*);
-template <typename T> PassOwnPtr<T[]> adoptArrayPtr(T*);
-
-template <typename T> inline PassOwnPtr<T> adoptPtr(T* ptr)
-{
-    return PassOwnPtr<T>(ptr);
-}
-
-template <typename T> inline PassOwnPtr<T[]> adoptArrayPtr(T* ptr)
-{
-    return PassOwnPtr<T[]>(ptr);
-}
-
-template <typename T, typename U> inline PassOwnPtr<T> static_pointer_cast(PassOwnPtr<U>&& p)
-{
-    static_assert(!std::is_array<T>::value, "pointers to array must never be converted");
-    return adoptPtr(static_cast<T*>(p.leakPtr()));
-}
-
-} // namespace WTF
-
-using WTF::adoptPtr;
-using WTF::adoptArrayPtr;
-using WTF::static_pointer_cast;
-
-#endif // WTF_PassOwnPtr_h
diff --git a/third_party/WebKit/Source/wtf/SizeLimits.cpp b/third_party/WebKit/Source/wtf/SizeLimits.cpp
index 9049b47..a0c9b03 100644
--- a/third_party/WebKit/Source/wtf/SizeLimits.cpp
+++ b/third_party/WebKit/Source/wtf/SizeLimits.cpp
@@ -30,7 +30,6 @@
 
 #include "wtf/Assertions.h"
 #include "wtf/ContainerAnnotations.h"
-#include "wtf/OwnPtr.h"
 #include "wtf/PassRefPtr.h"
 #include "wtf/RefCounted.h"
 #include "wtf/RefPtr.h"
@@ -38,6 +37,7 @@
 #include "wtf/Vector.h"
 #include "wtf/text/AtomicString.h"
 #include "wtf/text/WTFString.h"
+#include <memory>
 
 namespace WTF {
 
@@ -77,7 +77,7 @@
 #endif
 };
 
-static_assert(sizeof(OwnPtr<int>) == sizeof(int*), "OwnPtr should stay small");
+static_assert(sizeof(std::unique_ptr<int>) == sizeof(int*), "std::unique_ptr should stay small");
 static_assert(sizeof(PassRefPtr<RefCounted<int>>) == sizeof(int*), "PassRefPtr should stay small");
 static_assert(sizeof(RefCounted<int>) == sizeof(SameSizeAsRefCounted), "RefCounted should stay small");
 static_assert(sizeof(RefPtr<RefCounted<int>>) == sizeof(int*), "RefPtr should stay small");
diff --git a/third_party/WebKit/Source/wtf/TerminatedArray.h b/third_party/WebKit/Source/wtf/TerminatedArray.h
index 24c0ac4..43f3f09 100644
--- a/third_party/WebKit/Source/wtf/TerminatedArray.h
+++ b/third_party/WebKit/Source/wtf/TerminatedArray.h
@@ -5,8 +5,9 @@
 #define TerminatedArray_h
 
 #include "wtf/Allocator.h"
-#include "wtf/OwnPtr.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/allocator/Partitions.h"
+#include <memory>
 
 namespace WTF {
 
@@ -66,7 +67,7 @@
         return count;
     }
 
-    // Match Allocator semantics to be able to use OwnPtr<TerminatedArray>.
+    // Match Allocator semantics to be able to use std::unique_ptr<TerminatedArray>.
     void operator delete(void* p) { ::WTF::Partitions::fastFree(p); }
 
 private:
@@ -74,8 +75,8 @@
     // of TerminateArray and manage their lifetimes.
     struct Allocator {
         STATIC_ONLY(Allocator);
-        using PassPtr = PassOwnPtr<TerminatedArray>;
-        using Ptr = OwnPtr<TerminatedArray>;
+        using PassPtr = std::unique_ptr<TerminatedArray>;
+        using Ptr = std::unique_ptr<TerminatedArray>;
 
         static PassPtr release(Ptr& ptr)
         {
@@ -84,12 +85,12 @@
 
         static PassPtr create(size_t capacity)
         {
-            return adoptPtr(static_cast<TerminatedArray*>(WTF::Partitions::fastMalloc(capacity * sizeof(T), WTF_HEAP_PROFILER_TYPE_NAME(T))));
+            return wrapUnique(static_cast<TerminatedArray*>(WTF::Partitions::fastMalloc(capacity * sizeof(T), WTF_HEAP_PROFILER_TYPE_NAME(T))));
         }
 
         static PassPtr resize(Ptr ptr, size_t capacity)
         {
-            return adoptPtr(static_cast<TerminatedArray*>(WTF::Partitions::fastRealloc(ptr.leakPtr(), capacity * sizeof(T), WTF_HEAP_PROFILER_TYPE_NAME(T))));
+            return wrapUnique(static_cast<TerminatedArray*>(WTF::Partitions::fastRealloc(ptr.release(), capacity * sizeof(T), WTF_HEAP_PROFILER_TYPE_NAME(T))));
         }
     };
 
diff --git a/third_party/WebKit/Source/wtf/ThreadingPthreads.cpp b/third_party/WebKit/Source/wtf/ThreadingPthreads.cpp
index b270215..2a7cdd1 100644
--- a/third_party/WebKit/Source/wtf/ThreadingPthreads.cpp
+++ b/third_party/WebKit/Source/wtf/ThreadingPthreads.cpp
@@ -35,8 +35,6 @@
 #include "wtf/CurrentTime.h"
 #include "wtf/DateMath.h"
 #include "wtf/HashMap.h"
-#include "wtf/OwnPtr.h"
-#include "wtf/PassOwnPtr.h"
 #include "wtf/StdLibExtras.h"
 #include "wtf/ThreadSpecific.h"
 #include "wtf/ThreadingPrimitives.h"
diff --git a/third_party/WebKit/Source/wtf/ThreadingWin.cpp b/third_party/WebKit/Source/wtf/ThreadingWin.cpp
index 83805e58..86c610c1 100644
--- a/third_party/WebKit/Source/wtf/ThreadingWin.cpp
+++ b/third_party/WebKit/Source/wtf/ThreadingWin.cpp
@@ -91,8 +91,6 @@
 #include "wtf/DateMath.h"
 #include "wtf/HashMap.h"
 #include "wtf/MathExtras.h"
-#include "wtf/OwnPtr.h"
-#include "wtf/PassOwnPtr.h"
 #include "wtf/ThreadSpecific.h"
 #include "wtf/ThreadingPrimitives.h"
 #include "wtf/WTFThreadData.h"
diff --git a/third_party/WebKit/Source/wtf/Vector.h b/third_party/WebKit/Source/wtf/Vector.h
index 9722d7e..5b50284 100644
--- a/third_party/WebKit/Source/wtf/Vector.h
+++ b/third_party/WebKit/Source/wtf/Vector.h
@@ -271,6 +271,26 @@
 };
 
 template <typename T>
+struct VectorElementComparer {
+    STATIC_ONLY(VectorElementComparer);
+    template <typename U>
+    static bool compareElement(const T& left, const U& right)
+    {
+        return left == right;
+    }
+};
+
+template <typename T>
+struct VectorElementComparer<std::unique_ptr<T>> {
+    STATIC_ONLY(VectorElementComparer);
+    template <typename U>
+    static bool compareElement(const std::unique_ptr<T>& left, const U& right)
+    {
+        return left.get() == right;
+    }
+};
+
+template <typename T>
 struct VectorTypeOperations {
     STATIC_ONLY(VectorTypeOperations);
     static void destruct(T* begin, T* end)
@@ -312,6 +332,12 @@
     {
         return VectorComparer<VectorTraits<T>::canCompareWithMemcmp, T>::compare(a, b, size);
     }
+
+    template <typename U>
+    static bool compareElement(const T& left, U&& right)
+    {
+        return VectorElementComparer<T>::compareElement(left, std::forward<U>(right));
+    }
 };
 
 template <typename T, bool hasInlineCapacity, typename Allocator>
@@ -1095,7 +1121,7 @@
     const T* b = begin();
     const T* e = end();
     for (const T* iter = b; iter < e; ++iter) {
-        if (*iter == value)
+        if (TypeOperations::compareElement(*iter, value))
             return iter - b;
     }
     return kNotFound;
@@ -1109,7 +1135,7 @@
     const T* iter = end();
     while (iter > b) {
         --iter;
-        if (*iter == value)
+        if (TypeOperations::compareElement(*iter, value))
             return iter - b;
     }
     return kNotFound;
diff --git a/third_party/WebKit/Source/wtf/VectorTest.cpp b/third_party/WebKit/Source/wtf/VectorTest.cpp
index 11e508c0..f0d164d3 100644
--- a/third_party/WebKit/Source/wtf/VectorTest.cpp
+++ b/third_party/WebKit/Source/wtf/VectorTest.cpp
@@ -27,8 +27,7 @@
 
 #include "testing/gtest/include/gtest/gtest.h"
 #include "wtf/HashSet.h"
-#include "wtf/OwnPtr.h"
-#include "wtf/PassOwnPtr.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/text/WTFString.h"
 #include <memory>
 
@@ -162,17 +161,17 @@
     int* m_destructNumber;
 };
 
-typedef WTF::Vector<OwnPtr<DestructCounter>> OwnPtrVector;
+typedef WTF::Vector<std::unique_ptr<DestructCounter>> OwnPtrVector;
 
 TEST(VectorTest, OwnPtr)
 {
     int destructNumber = 0;
     OwnPtrVector vector;
-    vector.append(adoptPtr(new DestructCounter(0, &destructNumber)));
-    vector.append(adoptPtr(new DestructCounter(1, &destructNumber)));
+    vector.append(wrapUnique(new DestructCounter(0, &destructNumber)));
+    vector.append(wrapUnique(new DestructCounter(1, &destructNumber)));
     EXPECT_EQ(2u, vector.size());
 
-    OwnPtr<DestructCounter>& counter0 = vector.first();
+    std::unique_ptr<DestructCounter>& counter0 = vector.first();
     ASSERT_EQ(0, counter0->get());
     int counter1 = vector.last()->get();
     ASSERT_EQ(1, counter1);
@@ -180,7 +179,7 @@
 
     size_t index = 0;
     for (OwnPtrVector::iterator iter = vector.begin(); iter != vector.end(); ++iter) {
-        OwnPtr<DestructCounter>* refCounter = iter;
+        std::unique_ptr<DestructCounter>* refCounter = iter;
         EXPECT_EQ(index, static_cast<size_t>(refCounter->get()->get()));
         EXPECT_EQ(index, static_cast<size_t>((*refCounter)->get()));
         index++;
@@ -188,7 +187,7 @@
     EXPECT_EQ(0, destructNumber);
 
     for (index = 0; index < vector.size(); index++) {
-        OwnPtr<DestructCounter>& refCounter = vector[index];
+        std::unique_ptr<DestructCounter>& refCounter = vector[index];
         EXPECT_EQ(index, static_cast<size_t>(refCounter->get()));
     }
     EXPECT_EQ(0, destructNumber);
@@ -200,7 +199,7 @@
     EXPECT_EQ(1u, vector.size());
     EXPECT_EQ(1, destructNumber);
 
-    OwnPtr<DestructCounter> ownCounter1 = std::move(vector[0]);
+    std::unique_ptr<DestructCounter> ownCounter1 = std::move(vector[0]);
     vector.remove(0);
     ASSERT_EQ(counter1, ownCounter1->get());
     ASSERT_EQ(0u, vector.size());
@@ -212,9 +211,9 @@
     size_t count = 1025;
     destructNumber = 0;
     for (size_t i = 0; i < count; i++)
-        vector.prepend(adoptPtr(new DestructCounter(i, &destructNumber)));
+        vector.prepend(wrapUnique(new DestructCounter(i, &destructNumber)));
 
-    // Vector relocation must not destruct OwnPtr element.
+    // Vector relocation must not destruct std::unique_ptr element.
     EXPECT_EQ(0, destructNumber);
     EXPECT_EQ(count, vector.size());
 
diff --git a/third_party/WebKit/Source/wtf/VectorTraits.h b/third_party/WebKit/Source/wtf/VectorTraits.h
index 04e0e68e..e085ec4 100644
--- a/third_party/WebKit/Source/wtf/VectorTraits.h
+++ b/third_party/WebKit/Source/wtf/VectorTraits.h
@@ -21,9 +21,9 @@
 #ifndef WTF_VectorTraits_h
 #define WTF_VectorTraits_h
 
-#include "wtf/OwnPtr.h"
 #include "wtf/RefPtr.h"
 #include "wtf/TypeTraits.h"
+#include <memory>
 #include <type_traits>
 #include <utility>
 
@@ -68,23 +68,23 @@
     static const bool canCompareWithMemcmp = true;
 };
 
-// We know OwnPtr and RefPtr are simple enough that initializing to 0 and moving
+// We know std::unique_ptr and RefPtr are simple enough that initializing to 0 and moving
 // with memcpy (and then not destructing the original) will totally work.
 template <typename P>
 struct VectorTraits<RefPtr<P>> : SimpleClassVectorTraits<RefPtr<P>> {};
 
 template <typename P>
-struct VectorTraits<OwnPtr<P>> : SimpleClassVectorTraits<OwnPtr<P>> {
-    // OwnPtr -> PassOwnPtr has a very particular structure that tricks the
+struct VectorTraits<std::unique_ptr<P>> : SimpleClassVectorTraits<std::unique_ptr<P>> {
+    // std::unique_ptr -> std::unique_ptr has a very particular structure that tricks the
     // normal type traits into thinking that the class is "trivially copyable".
     static const bool canCopyWithMemcpy = false;
 };
 static_assert(VectorTraits<RefPtr<int>>::canInitializeWithMemset, "inefficient RefPtr Vector");
 static_assert(VectorTraits<RefPtr<int>>::canMoveWithMemcpy, "inefficient RefPtr Vector");
 static_assert(VectorTraits<RefPtr<int>>::canCompareWithMemcmp, "inefficient RefPtr Vector");
-static_assert(VectorTraits<OwnPtr<int>>::canInitializeWithMemset, "inefficient OwnPtr Vector");
-static_assert(VectorTraits<OwnPtr<int>>::canMoveWithMemcpy, "inefficient OwnPtr Vector");
-static_assert(VectorTraits<OwnPtr<int>>::canCompareWithMemcmp, "inefficient OwnPtr Vector");
+static_assert(VectorTraits<std::unique_ptr<int>>::canInitializeWithMemset, "inefficient std::unique_ptr Vector");
+static_assert(VectorTraits<std::unique_ptr<int>>::canMoveWithMemcpy, "inefficient std::unique_ptr Vector");
+static_assert(VectorTraits<std::unique_ptr<int>>::canCompareWithMemcmp, "inefficient std::unique_ptr Vector");
 
 template <typename First, typename Second>
 struct VectorTraits<std::pair<First, Second>> {
diff --git a/third_party/WebKit/Source/wtf/WTFThreadData.cpp b/third_party/WebKit/Source/wtf/WTFThreadData.cpp
index 286c1182..4fe60343 100644
--- a/third_party/WebKit/Source/wtf/WTFThreadData.cpp
+++ b/third_party/WebKit/Source/wtf/WTFThreadData.cpp
@@ -26,6 +26,7 @@
 
 #include "wtf/WTFThreadData.h"
 
+#include "wtf/PtrUtil.h"
 #include "wtf/text/TextCodecICU.h"
 
 namespace WTF {
@@ -37,7 +38,7 @@
     , m_atomicStringTableDestructor(nullptr)
     , m_compressibleStringTable(nullptr)
     , m_compressibleStringTableDestructor(nullptr)
-    , m_cachedConverterICU(adoptPtr(new ICUConverterWrapper))
+    , m_cachedConverterICU(wrapUnique(new ICUConverterWrapper))
 {
 }
 
diff --git a/third_party/WebKit/Source/wtf/WTFThreadData.h b/third_party/WebKit/Source/wtf/WTFThreadData.h
index b07fd5d..3460e93 100644
--- a/third_party/WebKit/Source/wtf/WTFThreadData.h
+++ b/third_party/WebKit/Source/wtf/WTFThreadData.h
@@ -34,6 +34,7 @@
 #include "wtf/Threading.h"
 #include "wtf/WTFExport.h"
 #include "wtf/text/StringHash.h"
+#include <memory>
 
 namespace blink {
 
@@ -76,7 +77,7 @@
     AtomicStringTableDestructor m_atomicStringTableDestructor;
     blink::CompressibleStringTable* m_compressibleStringTable;
     blink::CompressibleStringTableDestructor m_compressibleStringTableDestructor;
-    OwnPtr<ICUConverterWrapper> m_cachedConverterICU;
+    std::unique_ptr<ICUConverterWrapper> m_cachedConverterICU;
 
     static ThreadSpecific<WTFThreadData>* staticData;
     friend WTFThreadData& wtfThreadData();
diff --git a/third_party/WebKit/Source/wtf/allocator/PartitionAllocTest.cpp b/third_party/WebKit/Source/wtf/allocator/PartitionAllocTest.cpp
index cdc4302..213ba334 100644
--- a/third_party/WebKit/Source/wtf/allocator/PartitionAllocTest.cpp
+++ b/third_party/WebKit/Source/wtf/allocator/PartitionAllocTest.cpp
@@ -33,9 +33,9 @@
 #include "testing/gtest/include/gtest/gtest.h"
 #include "wtf/BitwiseOperations.h"
 #include "wtf/CPU.h"
-#include "wtf/OwnPtr.h"
-#include "wtf/PassOwnPtr.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/Vector.h"
+#include <memory>
 #include <stdlib.h>
 #include <string.h>
 
@@ -447,7 +447,7 @@
     // The +1 is because we need to account for the fact that the current page
     // never gets thrown on the freelist.
     ++numToFillFreeListPage;
-    OwnPtr<PartitionPage*[]> pages = adoptArrayPtr(new PartitionPage*[numToFillFreeListPage]);
+    std::unique_ptr<PartitionPage*[]> pages = wrapArrayUnique(new PartitionPage*[numToFillFreeListPage]);
 
     size_t i;
     for (i = 0; i < numToFillFreeListPage; ++i) {
@@ -493,8 +493,8 @@
     --numPagesNeeded;
 
     EXPECT_GT(numPagesNeeded, 1u);
-    OwnPtr<PartitionPage*[]> pages;
-    pages = adoptArrayPtr(new PartitionPage*[numPagesNeeded]);
+    std::unique_ptr<PartitionPage*[]> pages;
+    pages = wrapArrayUnique(new PartitionPage*[numPagesNeeded]);
     uintptr_t firstSuperPageBase = 0;
     size_t i;
     for (i = 0; i < numPagesNeeded; ++i) {
@@ -1026,8 +1026,8 @@
     // The -2 is because the first and last partition pages in a super page are
     // guard pages.
     size_t numPartitionPagesNeeded = kNumPartitionPagesPerSuperPage - 2;
-    OwnPtr<PartitionPage*[]> firstSuperPagePages = adoptArrayPtr(new PartitionPage*[numPartitionPagesNeeded]);
-    OwnPtr<PartitionPage*[]> secondSuperPagePages = adoptArrayPtr(new PartitionPage*[numPartitionPagesNeeded]);
+    std::unique_ptr<PartitionPage*[]> firstSuperPagePages = wrapArrayUnique(new PartitionPage*[numPartitionPagesNeeded]);
+    std::unique_ptr<PartitionPage*[]> secondSuperPagePages = wrapArrayUnique(new PartitionPage*[numPartitionPagesNeeded]);
 
     size_t i;
     for (i = 0; i < numPartitionPagesNeeded; ++i)
diff --git a/third_party/WebKit/Source/wtf/text/Collator.h b/third_party/WebKit/Source/wtf/text/Collator.h
index 247d65d8..18b1efe 100644
--- a/third_party/WebKit/Source/wtf/text/Collator.h
+++ b/third_party/WebKit/Source/wtf/text/Collator.h
@@ -31,9 +31,9 @@
 
 #include "wtf/Allocator.h"
 #include "wtf/Noncopyable.h"
-#include "wtf/PassOwnPtr.h"
 #include "wtf/WTFExport.h"
 #include "wtf/text/Unicode.h"
+#include <memory>
 
 struct UCollator;
 
@@ -52,7 +52,7 @@
     ~Collator();
     void setOrderLowerFirst(bool);
 
-    static PassOwnPtr<Collator> userDefault();
+    static std::unique_ptr<Collator> userDefault();
 
     Result collate(const ::UChar*, size_t, const ::UChar*, size_t) const;
 
diff --git a/third_party/WebKit/Source/wtf/text/StringImpl.cpp b/third_party/WebKit/Source/wtf/text/StringImpl.cpp
index c9c1a14b..77ddb65 100644
--- a/third_party/WebKit/Source/wtf/text/StringImpl.cpp
+++ b/third_party/WebKit/Source/wtf/text/StringImpl.cpp
@@ -26,8 +26,7 @@
 
 #include "wtf/DynamicAnnotations.h"
 #include "wtf/LeakAnnotations.h"
-#include "wtf/OwnPtr.h"
-#include "wtf/PassOwnPtr.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/StdLibExtras.h"
 #include "wtf/allocator/PartitionAlloc.h"
 #include "wtf/allocator/Partitions.h"
@@ -37,6 +36,7 @@
 #include "wtf/text/StringHash.h"
 #include "wtf/text/StringToNumber.h"
 #include <algorithm>
+#include <memory>
 #include <unicode/translit.h>
 #include <unicode/unistr.h>
 
@@ -793,8 +793,8 @@
 
     // TODO(jungshik): Cache transliterator if perf penaly warrants it for Greek.
     UErrorCode status = U_ZERO_ERROR;
-    OwnPtr<icu::Transliterator> translit =
-        adoptPtr(icu::Transliterator::createInstance(transliteratorId, UTRANS_FORWARD, status));
+    std::unique_ptr<icu::Transliterator> translit =
+        wrapUnique(icu::Transliterator::createInstance(transliteratorId, UTRANS_FORWARD, status));
     if (U_FAILURE(status))
         return upper();
 
diff --git a/third_party/WebKit/Source/wtf/text/TextCodec.h b/third_party/WebKit/Source/wtf/text/TextCodec.h
index 28f547c..aae9438f 100644
--- a/third_party/WebKit/Source/wtf/text/TextCodec.h
+++ b/third_party/WebKit/Source/wtf/text/TextCodec.h
@@ -29,9 +29,9 @@
 
 #include "wtf/Forward.h"
 #include "wtf/Noncopyable.h"
-#include "wtf/PassOwnPtr.h"
 #include "wtf/text/Unicode.h"
 #include "wtf/text/WTFString.h"
+#include <memory>
 
 namespace WTF {
 
@@ -98,7 +98,7 @@
 
 typedef void (*EncodingNameRegistrar)(const char* alias, const char* name);
 
-typedef PassOwnPtr<TextCodec> (*NewTextCodecFunction)(const TextEncoding&, const void* additionalData);
+typedef std::unique_ptr<TextCodec> (*NewTextCodecFunction)(const TextEncoding&, const void* additionalData);
 typedef void (*TextCodecRegistrar)(const char* name, NewTextCodecFunction, const void* additionalData);
 
 } // namespace WTF
diff --git a/third_party/WebKit/Source/wtf/text/TextCodecICU.cpp b/third_party/WebKit/Source/wtf/text/TextCodecICU.cpp
index b157bf9..b2c4d3f 100644
--- a/third_party/WebKit/Source/wtf/text/TextCodecICU.cpp
+++ b/third_party/WebKit/Source/wtf/text/TextCodecICU.cpp
@@ -27,12 +27,14 @@
 #include "wtf/text/TextCodecICU.h"
 
 #include "wtf/Assertions.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/StringExtras.h"
 #include "wtf/Threading.h"
 #include "wtf/WTFThreadData.h"
 #include "wtf/text/CString.h"
 #include "wtf/text/CharacterNames.h"
 #include "wtf/text/StringBuilder.h"
+#include <memory>
 #include <unicode/ucnv.h>
 #include <unicode/ucnv_cb.h>
 
@@ -51,9 +53,9 @@
     return wtfThreadData().cachedConverterICU().converter;
 }
 
-PassOwnPtr<TextCodec> TextCodecICU::create(const TextEncoding& encoding, const void*)
+std::unique_ptr<TextCodec> TextCodecICU::create(const TextEncoding& encoding, const void*)
 {
-    return adoptPtr(new TextCodecICU(encoding));
+    return wrapUnique(new TextCodecICU(encoding));
 }
 
 void TextCodecICU::registerEncodingNames(EncodingNameRegistrar registrar)
diff --git a/third_party/WebKit/Source/wtf/text/TextCodecICU.h b/third_party/WebKit/Source/wtf/text/TextCodecICU.h
index 9b11005..9b34d64 100644
--- a/third_party/WebKit/Source/wtf/text/TextCodecICU.h
+++ b/third_party/WebKit/Source/wtf/text/TextCodecICU.h
@@ -29,6 +29,7 @@
 
 #include "wtf/text/TextCodec.h"
 #include "wtf/text/TextEncoding.h"
+#include <memory>
 #include <unicode/utypes.h>
 
 typedef struct UConverter UConverter;
@@ -46,7 +47,7 @@
 
 private:
     TextCodecICU(const TextEncoding&);
-    static PassOwnPtr<TextCodec> create(const TextEncoding&, const void*);
+    static std::unique_ptr<TextCodec> create(const TextEncoding&, const void*);
 
     String decode(const char*, size_t length, FlushBehavior, bool stopOnError, bool& sawError) override;
     CString encode(const UChar*, size_t length, UnencodableHandling) override;
diff --git a/third_party/WebKit/Source/wtf/text/TextCodecLatin1.cpp b/third_party/WebKit/Source/wtf/text/TextCodecLatin1.cpp
index ebe9d020..94f89b2 100644
--- a/third_party/WebKit/Source/wtf/text/TextCodecLatin1.cpp
+++ b/third_party/WebKit/Source/wtf/text/TextCodecLatin1.cpp
@@ -25,11 +25,12 @@
 
 #include "wtf/text/TextCodecLatin1.h"
 
-#include "wtf/PassOwnPtr.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/text/CString.h"
 #include "wtf/text/StringBuffer.h"
 #include "wtf/text/TextCodecASCIIFastPath.h"
 #include "wtf/text/WTFString.h"
+#include <memory>
 
 namespace WTF {
 
@@ -90,9 +91,9 @@
     registrar("x-cp1252", "windows-1252");
 }
 
-static PassOwnPtr<TextCodec> newStreamingTextDecoderWindowsLatin1(const TextEncoding&, const void*)
+static std::unique_ptr<TextCodec> newStreamingTextDecoderWindowsLatin1(const TextEncoding&, const void*)
 {
-    return adoptPtr(new TextCodecLatin1);
+    return wrapUnique(new TextCodecLatin1);
 }
 
 void TextCodecLatin1::registerCodecs(TextCodecRegistrar registrar)
diff --git a/third_party/WebKit/Source/wtf/text/TextCodecReplacement.cpp b/third_party/WebKit/Source/wtf/text/TextCodecReplacement.cpp
index 274bae84f..47dc54a 100644
--- a/third_party/WebKit/Source/wtf/text/TextCodecReplacement.cpp
+++ b/third_party/WebKit/Source/wtf/text/TextCodecReplacement.cpp
@@ -4,9 +4,10 @@
 
 #include "wtf/text/TextCodecReplacement.h"
 
-#include "wtf/PassOwnPtr.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/text/CharacterNames.h"
 #include "wtf/text/WTFString.h"
+#include <memory>
 
 namespace WTF {
 
@@ -30,9 +31,9 @@
     registrar("iso-2022-kr", "replacement");
 }
 
-static PassOwnPtr<TextCodec> newStreamingTextDecoderReplacement(const TextEncoding&, const void*)
+static std::unique_ptr<TextCodec> newStreamingTextDecoderReplacement(const TextEncoding&, const void*)
 {
-    return adoptPtr(new TextCodecReplacement);
+    return wrapUnique(new TextCodecReplacement);
 }
 
 void TextCodecReplacement::registerCodecs(TextCodecRegistrar registrar)
diff --git a/third_party/WebKit/Source/wtf/text/TextCodecReplacementTest.cpp b/third_party/WebKit/Source/wtf/text/TextCodecReplacementTest.cpp
index 835b69c..9533604 100644
--- a/third_party/WebKit/Source/wtf/text/TextCodecReplacementTest.cpp
+++ b/third_party/WebKit/Source/wtf/text/TextCodecReplacementTest.cpp
@@ -5,12 +5,12 @@
 #include "wtf/text/TextCodecReplacement.h"
 
 #include "testing/gtest/include/gtest/gtest.h"
-#include "wtf/OwnPtr.h"
 #include "wtf/text/CString.h"
 #include "wtf/text/TextCodec.h"
 #include "wtf/text/TextEncoding.h"
 #include "wtf/text/TextEncodingRegistry.h"
 #include "wtf/text/WTFString.h"
+#include <memory>
 
 namespace WTF {
 
@@ -32,7 +32,7 @@
 TEST(TextCodecReplacement, DecodesToFFFD)
 {
     TextEncoding encoding(replacementAlias);
-    OwnPtr<TextCodec> codec(newTextCodec(encoding));
+    std::unique_ptr<TextCodec> codec(newTextCodec(encoding));
 
     bool sawError = false;
     const char testCase[] = "hello world";
@@ -47,7 +47,7 @@
 TEST(TextCodecReplacement, EncodesToUTF8)
 {
     TextEncoding encoding(replacementAlias);
-    OwnPtr<TextCodec> codec(newTextCodec(encoding));
+    std::unique_ptr<TextCodec> codec(newTextCodec(encoding));
 
     // "Kanji" in Chinese characters.
     const UChar testCase[] = { 0x6F22, 0x5B57 };
diff --git a/third_party/WebKit/Source/wtf/text/TextCodecUTF16.cpp b/third_party/WebKit/Source/wtf/text/TextCodecUTF16.cpp
index 6fc1f15a..f3e2c12 100644
--- a/third_party/WebKit/Source/wtf/text/TextCodecUTF16.cpp
+++ b/third_party/WebKit/Source/wtf/text/TextCodecUTF16.cpp
@@ -25,11 +25,12 @@
 
 #include "wtf/text/TextCodecUTF16.h"
 
-#include "wtf/PassOwnPtr.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/text/CString.h"
 #include "wtf/text/CharacterNames.h"
 #include "wtf/text/StringBuffer.h"
 #include "wtf/text/WTFString.h"
+#include <memory>
 
 using namespace std;
 
@@ -50,14 +51,14 @@
     registrar("unicodeFFFE", "UTF-16BE");
 }
 
-static PassOwnPtr<TextCodec> newStreamingTextDecoderUTF16LE(const TextEncoding&, const void*)
+static std::unique_ptr<TextCodec> newStreamingTextDecoderUTF16LE(const TextEncoding&, const void*)
 {
-    return adoptPtr(new TextCodecUTF16(true));
+    return wrapUnique(new TextCodecUTF16(true));
 }
 
-static PassOwnPtr<TextCodec> newStreamingTextDecoderUTF16BE(const TextEncoding&, const void*)
+static std::unique_ptr<TextCodec> newStreamingTextDecoderUTF16BE(const TextEncoding&, const void*)
 {
-    return adoptPtr(new TextCodecUTF16(false));
+    return wrapUnique(new TextCodecUTF16(false));
 }
 
 void TextCodecUTF16::registerCodecs(TextCodecRegistrar registrar)
diff --git a/third_party/WebKit/Source/wtf/text/TextCodecUTF8.cpp b/third_party/WebKit/Source/wtf/text/TextCodecUTF8.cpp
index bc4f0ed..865d67cc 100644
--- a/third_party/WebKit/Source/wtf/text/TextCodecUTF8.cpp
+++ b/third_party/WebKit/Source/wtf/text/TextCodecUTF8.cpp
@@ -25,10 +25,12 @@
 
 #include "wtf/text/TextCodecUTF8.h"
 
+#include "wtf/PtrUtil.h"
 #include "wtf/text/CString.h"
 #include "wtf/text/CharacterNames.h"
 #include "wtf/text/StringBuffer.h"
 #include "wtf/text/TextCodecASCIIFastPath.h"
+#include <memory>
 
 namespace WTF {
 
@@ -36,9 +38,9 @@
 
 const int nonCharacter = -1;
 
-PassOwnPtr<TextCodec> TextCodecUTF8::create(const TextEncoding&, const void*)
+std::unique_ptr<TextCodec> TextCodecUTF8::create(const TextEncoding&, const void*)
 {
-    return adoptPtr(new TextCodecUTF8);
+    return wrapUnique(new TextCodecUTF8);
 }
 
 void TextCodecUTF8::registerEncodingNames(EncodingNameRegistrar registrar)
diff --git a/third_party/WebKit/Source/wtf/text/TextCodecUTF8.h b/third_party/WebKit/Source/wtf/text/TextCodecUTF8.h
index feb5682..5f943dd 100644
--- a/third_party/WebKit/Source/wtf/text/TextCodecUTF8.h
+++ b/third_party/WebKit/Source/wtf/text/TextCodecUTF8.h
@@ -27,6 +27,7 @@
 #define TextCodecUTF8_h
 
 #include "wtf/text/TextCodec.h"
+#include <memory>
 
 namespace WTF {
 
@@ -39,7 +40,7 @@
     TextCodecUTF8() : m_partialSequenceSize(0) { }
 
 private:
-    static PassOwnPtr<TextCodec> create(const TextEncoding&, const void*);
+    static std::unique_ptr<TextCodec> create(const TextEncoding&, const void*);
 
     String decode(const char*, size_t length, FlushBehavior, bool stopOnError, bool& sawError) override;
     CString encode(const UChar*, size_t length, UnencodableHandling) override;
diff --git a/third_party/WebKit/Source/wtf/text/TextCodecUTF8Test.cpp b/third_party/WebKit/Source/wtf/text/TextCodecUTF8Test.cpp
index 66fe49f..c2b1814c 100644
--- a/third_party/WebKit/Source/wtf/text/TextCodecUTF8Test.cpp
+++ b/third_party/WebKit/Source/wtf/text/TextCodecUTF8Test.cpp
@@ -31,11 +31,11 @@
 #include "wtf/text/TextCodecUTF8.h"
 
 #include "testing/gtest/include/gtest/gtest.h"
-#include "wtf/OwnPtr.h"
 #include "wtf/text/TextCodec.h"
 #include "wtf/text/TextEncoding.h"
 #include "wtf/text/TextEncodingRegistry.h"
 #include "wtf/text/WTFString.h"
+#include <memory>
 
 namespace WTF {
 
@@ -44,7 +44,7 @@
 TEST(TextCodecUTF8, DecodeAscii)
 {
     TextEncoding encoding("UTF-8");
-    OwnPtr<TextCodec> codec(newTextCodec(encoding));
+    std::unique_ptr<TextCodec> codec(newTextCodec(encoding));
 
     const char testCase[] = "HelloWorld";
     size_t testCaseSize = sizeof(testCase) - 1;
@@ -61,7 +61,7 @@
 TEST(TextCodecUTF8, DecodeChineseCharacters)
 {
     TextEncoding encoding("UTF-8");
-    OwnPtr<TextCodec> codec(newTextCodec(encoding));
+    std::unique_ptr<TextCodec> codec(newTextCodec(encoding));
 
     // "Kanji" in Chinese characters.
     const char testCase[] = "\xe6\xbc\xa2\xe5\xad\x97";
@@ -78,7 +78,7 @@
 TEST(TextCodecUTF8, Decode0xFF)
 {
     TextEncoding encoding("UTF-8");
-    OwnPtr<TextCodec> codec(newTextCodec(encoding));
+    std::unique_ptr<TextCodec> codec(newTextCodec(encoding));
 
     bool sawError = false;
     const String& result = codec->decode("\xff", 1, DataEOF, false, sawError);
diff --git a/third_party/WebKit/Source/wtf/text/TextCodecUserDefined.cpp b/third_party/WebKit/Source/wtf/text/TextCodecUserDefined.cpp
index 8438bf2..164befc 100644
--- a/third_party/WebKit/Source/wtf/text/TextCodecUserDefined.cpp
+++ b/third_party/WebKit/Source/wtf/text/TextCodecUserDefined.cpp
@@ -25,11 +25,12 @@
 
 #include "wtf/text/TextCodecUserDefined.h"
 
-#include "wtf/PassOwnPtr.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/text/CString.h"
 #include "wtf/text/StringBuffer.h"
 #include "wtf/text/StringBuilder.h"
 #include "wtf/text/WTFString.h"
+#include <memory>
 
 namespace WTF {
 
@@ -38,9 +39,9 @@
     registrar("x-user-defined", "x-user-defined");
 }
 
-static PassOwnPtr<TextCodec> newStreamingTextDecoderUserDefined(const TextEncoding&, const void*)
+static std::unique_ptr<TextCodec> newStreamingTextDecoderUserDefined(const TextEncoding&, const void*)
 {
-    return adoptPtr(new TextCodecUserDefined);
+    return wrapUnique(new TextCodecUserDefined);
 }
 
 void TextCodecUserDefined::registerCodecs(TextCodecRegistrar registrar)
diff --git a/third_party/WebKit/Source/wtf/text/TextEncoding.cpp b/third_party/WebKit/Source/wtf/text/TextEncoding.cpp
index f3f231d..31cdfb8 100644
--- a/third_party/WebKit/Source/wtf/text/TextEncoding.cpp
+++ b/third_party/WebKit/Source/wtf/text/TextEncoding.cpp
@@ -27,12 +27,12 @@
 
 #include "wtf/text/TextEncoding.h"
 
-#include "wtf/OwnPtr.h"
 #include "wtf/StdLibExtras.h"
 #include "wtf/Threading.h"
 #include "wtf/text/CString.h"
 #include "wtf/text/TextEncodingRegistry.h"
 #include "wtf/text/WTFString.h"
+#include <memory>
 
 namespace WTF {
 
@@ -74,7 +74,7 @@
     if (string.isEmpty())
         return "";
 
-    OwnPtr<TextCodec> textCodec = newTextCodec(*this);
+    std::unique_ptr<TextCodec> textCodec = newTextCodec(*this);
     CString encodedString;
     if (string.is8Bit())
         encodedString = textCodec->encode(string.characters8(), string.length(), handling);
diff --git a/third_party/WebKit/Source/wtf/text/TextEncodingRegistry.cpp b/third_party/WebKit/Source/wtf/text/TextEncodingRegistry.cpp
index 9f64aee..129722e 100644
--- a/third_party/WebKit/Source/wtf/text/TextEncodingRegistry.cpp
+++ b/third_party/WebKit/Source/wtf/text/TextEncodingRegistry.cpp
@@ -42,6 +42,7 @@
 #include "wtf/text/TextCodecUTF8.h"
 #include "wtf/text/TextCodecUserDefined.h"
 #include "wtf/text/TextEncoding.h"
+#include <memory>
 
 namespace WTF {
 
@@ -243,7 +244,7 @@
     pruneBlacklistedCodecs();
 }
 
-PassOwnPtr<TextCodec> newTextCodec(const TextEncoding& encoding)
+std::unique_ptr<TextCodec> newTextCodec(const TextEncoding& encoding)
 {
     MutexLocker lock(encodingRegistryMutex());
 
diff --git a/third_party/WebKit/Source/wtf/text/TextEncodingRegistry.h b/third_party/WebKit/Source/wtf/text/TextEncodingRegistry.h
index 6b8a2f197..c6d0efd4 100644
--- a/third_party/WebKit/Source/wtf/text/TextEncodingRegistry.h
+++ b/third_party/WebKit/Source/wtf/text/TextEncodingRegistry.h
@@ -26,10 +26,10 @@
 #ifndef TextEncodingRegistry_h
 #define TextEncodingRegistry_h
 
-#include "wtf/PassOwnPtr.h"
 #include "wtf/WTFExport.h"
 #include "wtf/text/Unicode.h"
 #include "wtf/text/WTFString.h"
+#include <memory>
 
 namespace WTF {
 
@@ -38,7 +38,7 @@
 
 // Use TextResourceDecoder::decode to decode resources, since it handles BOMs.
 // Use TextEncoding::encode to encode, since it takes care of normalization.
-WTF_EXPORT PassOwnPtr<TextCodec> newTextCodec(const TextEncoding&);
+WTF_EXPORT std::unique_ptr<TextCodec> newTextCodec(const TextEncoding&);
 
 // Only TextEncoding should use the following functions directly.
 const char* atomicCanonicalTextEncodingName(const char* alias);
diff --git a/third_party/WebKit/Source/wtf/text/TextPosition.cpp b/third_party/WebKit/Source/wtf/text/TextPosition.cpp
index 32a0314f..2fc0207 100644
--- a/third_party/WebKit/Source/wtf/text/TextPosition.cpp
+++ b/third_party/WebKit/Source/wtf/text/TextPosition.cpp
@@ -24,15 +24,16 @@
 
 #include "wtf/text/TextPosition.h"
 
-#include "wtf/PassOwnPtr.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/StdLibExtras.h"
 #include <algorithm>
+#include <memory>
 
 namespace WTF {
 
-PassOwnPtr<Vector<unsigned>> lineEndings(const String& text)
+std::unique_ptr<Vector<unsigned>> lineEndings(const String& text)
 {
-    OwnPtr<Vector<unsigned>> result(adoptPtr(new Vector<unsigned>()));
+    std::unique_ptr<Vector<unsigned>> result(wrapUnique(new Vector<unsigned>()));
 
     unsigned start = 0;
     while (start < text.length()) {
diff --git a/third_party/WebKit/Source/wtf/text/TextPosition.h b/third_party/WebKit/Source/wtf/text/TextPosition.h
index 17140c3..f4c62eb 100644
--- a/third_party/WebKit/Source/wtf/text/TextPosition.h
+++ b/third_party/WebKit/Source/wtf/text/TextPosition.h
@@ -30,6 +30,7 @@
 #include "wtf/Vector.h"
 #include "wtf/WTFExport.h"
 #include "wtf/text/WTFString.h"
+#include <memory>
 
 namespace WTF {
 
@@ -86,7 +87,7 @@
     OrdinalNumber m_column;
 };
 
-WTF_EXPORT PassOwnPtr<Vector<unsigned>> lineEndings(const String&);
+WTF_EXPORT std::unique_ptr<Vector<unsigned>> lineEndings(const String&);
 
 } // namespace WTF
 
diff --git a/third_party/WebKit/Source/wtf/text/icu/CollatorICU.cpp b/third_party/WebKit/Source/wtf/text/icu/CollatorICU.cpp
index f5efcee..0bfe2b60 100644
--- a/third_party/WebKit/Source/wtf/text/icu/CollatorICU.cpp
+++ b/third_party/WebKit/Source/wtf/text/icu/CollatorICU.cpp
@@ -29,9 +29,11 @@
 #include "wtf/text/Collator.h"
 
 #include "wtf/Assertions.h"
+#include "wtf/PtrUtil.h"
 #include "wtf/StringExtras.h"
 #include "wtf/Threading.h"
 #include "wtf/ThreadingPrimitives.h"
+#include <memory>
 #include <stdlib.h>
 #include <string.h>
 #include <unicode/ucol.h>
@@ -54,9 +56,9 @@
     setEquivalentLocale(m_locale, m_equivalentLocale);
 }
 
-PassOwnPtr<Collator> Collator::userDefault()
+std::unique_ptr<Collator> Collator::userDefault()
 {
-    return adoptPtr(new Collator(0));
+    return wrapUnique(new Collator(0));
 }
 
 Collator::~Collator()
diff --git a/third_party/WebKit/Source/wtf/wtf.gypi b/third_party/WebKit/Source/wtf/wtf.gypi
index 3a7362ee..639c912 100644
--- a/third_party/WebKit/Source/wtf/wtf.gypi
+++ b/third_party/WebKit/Source/wtf/wtf.gypi
@@ -59,9 +59,6 @@
             'Noncopyable.h',
             'NotFound.h',
             'Optional.h',
-            'OwnPtr.h',
-            'OwnPtrCommon.h',
-            'PassOwnPtr.h',
             'PassRefPtr.h',
             'PrintStream.cpp',
             'PrintStream.h',
diff --git a/third_party/WebKit/public/platform/WebBlobData.h b/third_party/WebKit/public/platform/WebBlobData.h
index 2674210..6c028ae 100644
--- a/third_party/WebKit/public/platform/WebBlobData.h
+++ b/third_party/WebKit/public/platform/WebBlobData.h
@@ -38,8 +38,7 @@
 #include "WebURL.h"
 
 #if INSIDE_BLINK
-#include "wtf/OwnPtr.h"
-#include "wtf/PassOwnPtr.h"
+#include <memory>
 #endif
 
 namespace blink {
@@ -78,9 +77,9 @@
     BLINK_PLATFORM_EXPORT WebString contentType() const;
 
 #if INSIDE_BLINK
-    BLINK_PLATFORM_EXPORT WebBlobData(WTF::PassOwnPtr<BlobData>);
-    BLINK_PLATFORM_EXPORT WebBlobData& operator=(WTF::PassOwnPtr<BlobData>);
-    BLINK_PLATFORM_EXPORT operator WTF::PassOwnPtr<BlobData>();
+    BLINK_PLATFORM_EXPORT WebBlobData(std::unique_ptr<BlobData>);
+    BLINK_PLATFORM_EXPORT WebBlobData& operator=(std::unique_ptr<BlobData>);
+    BLINK_PLATFORM_EXPORT operator std::unique_ptr<BlobData>();
 #endif
 
 private:
diff --git a/third_party/WebKit/public/platform/WebContentSettingCallbacks.h b/third_party/WebKit/public/platform/WebContentSettingCallbacks.h
index 7d4f0d3..7bd13b8 100644
--- a/third_party/WebKit/public/platform/WebContentSettingCallbacks.h
+++ b/third_party/WebKit/public/platform/WebContentSettingCallbacks.h
@@ -8,8 +8,7 @@
 #include "WebPrivatePtr.h"
 
 #if INSIDE_BLINK
-#include "wtf/OwnPtr.h"
-#include "wtf/PassOwnPtr.h"
+#include <memory>
 #endif
 
 namespace blink {
@@ -32,7 +31,7 @@
     BLINK_PLATFORM_EXPORT void assign(const WebContentSettingCallbacks&);
 
 #if INSIDE_BLINK
-    BLINK_PLATFORM_EXPORT WebContentSettingCallbacks(WTF::PassOwnPtr<ContentSettingCallbacks>&&);
+    BLINK_PLATFORM_EXPORT WebContentSettingCallbacks(std::unique_ptr<ContentSettingCallbacks>&&);
 #endif
 
     BLINK_PLATFORM_EXPORT void doAllow();
diff --git a/third_party/WebKit/public/platform/WebCryptoAlgorithm.h b/third_party/WebKit/public/platform/WebCryptoAlgorithm.h
index 7df6f3ae..408cb7c0e 100644
--- a/third_party/WebKit/public/platform/WebCryptoAlgorithm.h
+++ b/third_party/WebKit/public/platform/WebCryptoAlgorithm.h
@@ -35,7 +35,7 @@
 #include "WebPrivatePtr.h"
 
 #if INSIDE_BLINK
-#include "wtf/PassOwnPtr.h"
+#include <memory>
 #endif
 
 namespace blink {
@@ -153,7 +153,7 @@
 public:
 #if INSIDE_BLINK
     WebCryptoAlgorithm() { }
-    BLINK_PLATFORM_EXPORT WebCryptoAlgorithm(WebCryptoAlgorithmId, PassOwnPtr<WebCryptoAlgorithmParams>);
+    BLINK_PLATFORM_EXPORT WebCryptoAlgorithm(WebCryptoAlgorithmId, std::unique_ptr<WebCryptoAlgorithmParams>);
 #endif
 
     BLINK_PLATFORM_EXPORT static WebCryptoAlgorithm createNull();
diff --git a/third_party/WebKit/public/platform/WebCryptoKeyAlgorithm.h b/third_party/WebKit/public/platform/WebCryptoKeyAlgorithm.h
index df96d30..113670d 100644
--- a/third_party/WebKit/public/platform/WebCryptoKeyAlgorithm.h
+++ b/third_party/WebKit/public/platform/WebCryptoKeyAlgorithm.h
@@ -37,7 +37,7 @@
 #include "WebPrivatePtr.h"
 
 #if INSIDE_BLINK
-#include "wtf/PassOwnPtr.h"
+#include <memory>
 #endif
 
 namespace blink {
@@ -53,7 +53,7 @@
     WebCryptoKeyAlgorithm() { }
 
 #if INSIDE_BLINK
-    BLINK_PLATFORM_EXPORT WebCryptoKeyAlgorithm(WebCryptoAlgorithmId, PassOwnPtr<WebCryptoKeyAlgorithmParams>);
+    BLINK_PLATFORM_EXPORT WebCryptoKeyAlgorithm(WebCryptoAlgorithmId, std::unique_ptr<WebCryptoKeyAlgorithmParams>);
 #endif
 
     // FIXME: Delete this in favor of the create*() functions.
diff --git a/third_party/WebKit/public/platform/WebDataConsumerHandle.h b/third_party/WebKit/public/platform/WebDataConsumerHandle.h
index 4a36d05..4632ff9 100644
--- a/third_party/WebKit/public/platform/WebDataConsumerHandle.h
+++ b/third_party/WebKit/public/platform/WebDataConsumerHandle.h
@@ -8,7 +8,7 @@
 #include <stddef.h>
 
 #if INSIDE_BLINK
-#include "wtf/PassOwnPtr.h"
+#include <memory>
 #endif
 
 #include "public/platform/WebCommon.h"
@@ -104,7 +104,7 @@
     // If |client| is not null and the handle is not waiting, client
     // notification is called asynchronously.
 #if INSIDE_BLINK
-    PassOwnPtr<Reader> obtainReader(Client*);
+    std::unique_ptr<Reader> obtainReader(Client*);
 #endif
 
     // Returns a string literal (e.g. class name) for debugging only.
diff --git a/third_party/WebKit/public/platform/WebFileSystemCallbacks.h b/third_party/WebKit/public/platform/WebFileSystemCallbacks.h
index 39189a67..13b50014 100644
--- a/third_party/WebKit/public/platform/WebFileSystemCallbacks.h
+++ b/third_party/WebKit/public/platform/WebFileSystemCallbacks.h
@@ -39,8 +39,7 @@
 #include "WebVector.h"
 
 #if INSIDE_BLINK
-#include "wtf/OwnPtr.h"
-#include "wtf/PassOwnPtr.h"
+#include <memory>
 #endif
 
 namespace blink {
@@ -67,7 +66,7 @@
     BLINK_PLATFORM_EXPORT void assign(const WebFileSystemCallbacks&);
 
 #if INSIDE_BLINK
-    BLINK_PLATFORM_EXPORT WebFileSystemCallbacks(WTF::PassOwnPtr<AsyncFileSystemCallbacks>&&);
+    BLINK_PLATFORM_EXPORT WebFileSystemCallbacks(std::unique_ptr<AsyncFileSystemCallbacks>&&);
 #endif
 
     // Callback for WebFileSystem's various operations that don't require
diff --git a/third_party/WebKit/public/platform/WebPrivateOwnPtr.h b/third_party/WebKit/public/platform/WebPrivateOwnPtr.h
index 64d0451..9f29792 100644
--- a/third_party/WebKit/public/platform/WebPrivateOwnPtr.h
+++ b/third_party/WebKit/public/platform/WebPrivateOwnPtr.h
@@ -33,7 +33,8 @@
 #include <cstddef>
 
 #if INSIDE_BLINK
-#include "wtf/PassOwnPtr.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 #endif
 
 namespace blink {
@@ -60,7 +61,7 @@
 
 #if INSIDE_BLINK
     template <typename U>
-    WebPrivateOwnPtr(PassOwnPtr<U>, EnsurePtrConvertibleArgDecl(U, T));
+    WebPrivateOwnPtr(std::unique_ptr<U>, EnsurePtrConvertibleArgDecl(U, T));
 
     void reset(T* ptr)
     {
@@ -68,16 +69,16 @@
         m_ptr = ptr;
     }
 
-    void reset(PassOwnPtr<T> o)
+    void reset(std::unique_ptr<T> o)
     {
-        reset(o.leakPtr());
+        reset(o.release());
     }
 
-    PassOwnPtr<T> release()
+    std::unique_ptr<T> release()
     {
         T* ptr = m_ptr;
         m_ptr = nullptr;
-        return adoptPtr(ptr);
+        return wrapUnique(ptr);
     }
 
     T& operator*() const
@@ -100,8 +101,8 @@
 #if INSIDE_BLINK
 template <typename T>
 template <typename U>
-inline WebPrivateOwnPtr<T>::WebPrivateOwnPtr(PassOwnPtr<U> o, EnsurePtrConvertibleArgDefn(U, T))
-    : m_ptr(o.leakPtr())
+inline WebPrivateOwnPtr<T>::WebPrivateOwnPtr(std::unique_ptr<U> o, EnsurePtrConvertibleArgDefn(U, T))
+    : m_ptr(o.release())
 {
     static_assert(!std::is_array<T>::value, "Pointers to array must never be converted");
 }
diff --git a/third_party/WebKit/public/platform/WebScrollbar.h b/third_party/WebKit/public/platform/WebScrollbar.h
index 16b9964..a57cff19 100644
--- a/third_party/WebKit/public/platform/WebScrollbar.h
+++ b/third_party/WebKit/public/platform/WebScrollbar.h
@@ -29,9 +29,6 @@
 #include "WebRect.h"
 #include "WebSize.h"
 #include "WebVector.h"
-#if INSIDE_BLINK
-#include "wtf/PassOwnPtr.h"
-#endif
 
 namespace blink {
 
diff --git a/third_party/WebKit/public/platform/WebTaskRunner.h b/third_party/WebKit/public/platform/WebTaskRunner.h
index 81ac626..2fee34c2 100644
--- a/third_party/WebKit/public/platform/WebTaskRunner.h
+++ b/third_party/WebKit/public/platform/WebTaskRunner.h
@@ -9,6 +9,8 @@
 
 #ifdef INSIDE_BLINK
 #include "wtf/Functional.h"
+#include "wtf/PtrUtil.h"
+#include <memory>
 #endif
 
 namespace blink {
@@ -66,9 +68,9 @@
     void postTask(const WebTraceLocation&, std::unique_ptr<SameThreadClosure>);
     void postDelayedTask(const WebTraceLocation&, std::unique_ptr<SameThreadClosure>, long long delayMs);
 
-    PassOwnPtr<WebTaskRunner> adoptClone()
+    std::unique_ptr<WebTaskRunner> adoptClone()
     {
-        return adoptPtr(clone());
+        return wrapUnique(clone());
     }
 #endif
 };
diff --git a/third_party/libpng/BUILD.gn b/third_party/libpng/BUILD.gn
index 5c61dca..d12c616 100644
--- a/third_party/libpng/BUILD.gn
+++ b/third_party/libpng/BUILD.gn
@@ -3,6 +3,7 @@
 # found in the LICENSE file.
 
 import("//build/config/chromecast_build.gni")
+import("//build/config/arm.gni")
 
 config("libpng_config") {
   include_dirs = [ "." ]
@@ -67,7 +68,7 @@
       "contrib/intel/intel_init.c",
     ]
     defines += [ "PNG_INTEL_SSE_OPT=1" ]
-  } else if (current_cpu == "arm" || current_cpu == "arm64") {
+  } else if ((current_cpu == "arm" || current_cpu == "arm64") && arm_use_neon) {
     sources += [
       "arm/arm_init.c",
       "arm/filter_neon_intrinsics.c",
diff --git a/third_party/libpng/libpng.gyp b/third_party/libpng/libpng.gyp
index 7ce9b5e..7869992 100644
--- a/third_party/libpng/libpng.gyp
+++ b/third_party/libpng/libpng.gyp
@@ -70,7 +70,7 @@
         }],
 
         # ARM optimizations
-        [ '(target_arch=="arm" or target_arch=="arm64") and OS!="ios"', {
+        [ '(target_arch=="arm" or target_arch=="arm64") and OS!="ios" and arm_neon==1', {
           'defines': [
             'PNG_ARM_NEON_OPT=2',
             'PNG_ARM_NEON_IMPLEMENTATION=1',
diff --git a/tools/clang/blink_gc_plugin/BlinkGCPluginConsumer.cpp b/tools/clang/blink_gc_plugin/BlinkGCPluginConsumer.cpp
index 1a32def..ca6bb18a 100644
--- a/tools/clang/blink_gc_plugin/BlinkGCPluginConsumer.cpp
+++ b/tools/clang/blink_gc_plugin/BlinkGCPluginConsumer.cpp
@@ -68,6 +68,7 @@
     : instance_(instance),
       reporter_(instance),
       options_(options),
+      cache_(instance),
       json_(0) {
   // Only check structures in the blink and WebKit namespaces.
   options_.checked_namespaces.insert("blink");
@@ -552,9 +553,10 @@
       reporter_.BaseRequiresTracing(parent, trace, base.first);
 
   for (auto& field : parent->GetFields()) {
-    if (!field.second.IsProperlyTraced()) {
-      // Discontinue once an untraced-field error is found.
-      reporter_.FieldsRequireTracing(parent, trace);
+    if (!field.second.IsProperlyTraced() ||
+        field.second.IsInproperlyTraced()) {
+      // Report one or more tracing-related field errors.
+      reporter_.FieldsImproperlyTraced(parent, trace);
       break;
     }
   }
@@ -590,6 +592,7 @@
                         "reference" : "raw") :
                    Parent()->IsRefPtr() ? "ref" :
                    Parent()->IsOwnPtr() ? "own" :
+                   Parent()->IsUniquePtr() ? "unique" :
                    (Parent()->IsMember() || Parent()->IsWeakMember()) ? "mem" :
                    "val");
       json_->CloseObject();
diff --git a/tools/clang/blink_gc_plugin/CheckFieldsVisitor.cpp b/tools/clang/blink_gc_plugin/CheckFieldsVisitor.cpp
index e5d69f0..396ed95 100644
--- a/tools/clang/blink_gc_plugin/CheckFieldsVisitor.cpp
+++ b/tools/clang/blink_gc_plugin/CheckFieldsVisitor.cpp
@@ -86,6 +86,7 @@
 
   // Disallow  OwnPtr<T>, RefPtr<T> and T* to stack-allocated types.
   if (Parent()->IsOwnPtr() ||
+      Parent()->IsUniquePtr() ||
       Parent()->IsRefPtr() ||
       (stack_allocated_host_ && Parent()->IsRawPtr())) {
     invalid_fields_.push_back(std::make_pair(
@@ -103,6 +104,8 @@
 void CheckFieldsVisitor::AtCollection(Collection* edge) {
   if (edge->on_heap() && Parent() && Parent()->IsOwnPtr())
     invalid_fields_.push_back(std::make_pair(current_, kOwnPtrToGCManaged));
+  if (edge->on_heap() && Parent() && Parent()->IsUniquePtr())
+    invalid_fields_.push_back(std::make_pair(current_, kUniquePtrToGCManaged));
 }
 
 CheckFieldsVisitor::Error CheckFieldsVisitor::InvalidSmartPtr(Edge* ptr) {
@@ -116,5 +119,7 @@
     return kRefPtrToGCManaged;
   if (ptr->IsOwnPtr())
     return kOwnPtrToGCManaged;
+  if (ptr->IsUniquePtr())
+    return kUniquePtrToGCManaged;
   assert(false && "Unknown smart pointer kind");
 }
diff --git a/tools/clang/blink_gc_plugin/CheckFieldsVisitor.h b/tools/clang/blink_gc_plugin/CheckFieldsVisitor.h
index 4fddede3..ef806f2 100644
--- a/tools/clang/blink_gc_plugin/CheckFieldsVisitor.h
+++ b/tools/clang/blink_gc_plugin/CheckFieldsVisitor.h
@@ -25,6 +25,7 @@
     kRefPtrToGCManaged,
     kReferencePtrToGCManaged,
     kOwnPtrToGCManaged,
+    kUniquePtrToGCManaged,
     kMemberToGCUnmanaged,
     kMemberInUnmanaged,
     kPtrFromHeapToStack,
diff --git a/tools/clang/blink_gc_plugin/Config.h b/tools/clang/blink_gc_plugin/Config.h
index 53e5221..8f494bb 100644
--- a/tools/clang/blink_gc_plugin/Config.h
+++ b/tools/clang/blink_gc_plugin/Config.h
@@ -49,12 +49,13 @@
   }
 
   static bool IsPersistent(const std::string& name) {
-    return name == "Persistent";
+    return name == "Persistent" ||
+           name == "WeakPersistent" ;
   }
 
-  static bool IsPersistentHandle(const std::string& name) {
-    return IsPersistent(name) ||
-           IsPersistentGCCollection(name);
+  static bool IsCrossThreadPersistent(const std::string& name) {
+    return name == "CrossThreadPersistent" ||
+           name == "CrossThreadWeakPersistent" ;
   }
 
   static bool IsRefPtr(const std::string& name) {
@@ -65,6 +66,10 @@
     return name == "OwnPtr";
   }
 
+  static bool IsUniquePtr(const std::string& name) {
+    return name == "unique_ptr";
+  }
+
   static bool IsWTFCollection(const std::string& name) {
     return name == "Vector" ||
            name == "Deque" ||
diff --git a/tools/clang/blink_gc_plugin/DiagnosticsReporter.cpp b/tools/clang/blink_gc_plugin/DiagnosticsReporter.cpp
index 0057d80d..ef3a37d 100644
--- a/tools/clang/blink_gc_plugin/DiagnosticsReporter.cpp
+++ b/tools/clang/blink_gc_plugin/DiagnosticsReporter.cpp
@@ -23,9 +23,15 @@
 const char kFieldsRequireTracing[] =
     "[blink-gc] Class %0 has untraced fields that require tracing.";
 
+const char kFieldsImproperlyTraced[] =
+    "[blink-gc] Class %0 has untraced or not traceable fields.";
+
 const char kFieldRequiresTracingNote[] =
     "[blink-gc] Untraced field %0 declared here:";
 
+const char kFieldShouldNotBeTracedNote[] =
+    "[blink-gc] Untraceable field %0 declared here:";
+
 const char kClassContainsInvalidFields[] =
     "[blink-gc] Class %0 contains invalid fields.";
 
@@ -57,6 +63,9 @@
 const char kOwnPtrToGCManagedClassNote[] =
     "[blink-gc] OwnPtr field %0 to a GC managed class declared here:";
 
+const char kUniquePtrToGCManagedClassNote[] =
+    "[blink-gc] std::unique_ptr field %0 to a GC managed class declared here:";
+
 const char kMemberToGCUnmanagedClassNote[] =
     "[blink-gc] Member field %0 to non-GC managed class declared here:";
 
@@ -162,6 +171,8 @@
       diagnostic_.getCustomDiagID(getErrorLevel(), kBaseRequiresTracing);
   diag_fields_require_tracing_ =
       diagnostic_.getCustomDiagID(getErrorLevel(), kFieldsRequireTracing);
+  diag_fields_improperly_traced_ =
+      diagnostic_.getCustomDiagID(getErrorLevel(), kFieldsImproperlyTraced);
   diag_class_contains_invalid_fields_ = diagnostic_.getCustomDiagID(
       getErrorLevel(), kClassContainsInvalidFields);
   diag_class_contains_gc_root_ =
@@ -202,6 +213,8 @@
       DiagnosticsEngine::Note, kBaseRequiresTracingNote);
   diag_field_requires_tracing_note_ = diagnostic_.getCustomDiagID(
       DiagnosticsEngine::Note, kFieldRequiresTracingNote);
+  diag_field_should_not_be_traced_note_ = diagnostic_.getCustomDiagID(
+      DiagnosticsEngine::Note, kFieldShouldNotBeTracedNote);
   diag_raw_ptr_to_gc_managed_class_note_ = diagnostic_.getCustomDiagID(
       DiagnosticsEngine::Note, kRawPtrToGCManagedClassNote);
   diag_ref_ptr_to_gc_managed_class_note_ = diagnostic_.getCustomDiagID(
@@ -210,6 +223,8 @@
       DiagnosticsEngine::Note, kReferencePtrToGCManagedClassNote);
   diag_own_ptr_to_gc_managed_class_note_ = diagnostic_.getCustomDiagID(
       DiagnosticsEngine::Note, kOwnPtrToGCManagedClassNote);
+  diag_unique_ptr_to_gc_managed_class_note_ = diagnostic_.getCustomDiagID(
+      DiagnosticsEngine::Note, kUniquePtrToGCManagedClassNote);
   diag_member_to_gc_unmanaged_class_note_ = diagnostic_.getCustomDiagID(
       DiagnosticsEngine::Note, kMemberToGCUnmanagedClassNote);
   diag_stack_allocated_field_note_ = diagnostic_.getCustomDiagID(
@@ -279,14 +294,25 @@
       << base << derived->record();
 }
 
-void DiagnosticsReporter::FieldsRequireTracing(
+void DiagnosticsReporter::FieldsImproperlyTraced(
     RecordInfo* info,
     CXXMethodDecl* trace) {
-  ReportDiagnostic(trace->getLocStart(), diag_fields_require_tracing_)
+  // Only mention untraceable in header diagnostic if they appear.
+  unsigned diag = diag_fields_require_tracing_;
+  for (auto& field : info->GetFields()) {
+    if (field.second.IsInproperlyTraced()) {
+      diag = diag_fields_improperly_traced_;
+      break;
+    }
+  }
+  ReportDiagnostic(trace->getLocStart(), diag)
       << info->record();
-  for (auto& field : info->GetFields())
+  for (auto& field : info->GetFields()) {
     if (!field.second.IsProperlyTraced())
       NoteFieldRequiresTracing(info, field.first);
+    if (field.second.IsInproperlyTraced())
+      NoteFieldShouldNotBeTraced(info, field.first);
+  }
 }
 
 void DiagnosticsReporter::ClassContainsInvalidFields(
@@ -307,6 +333,8 @@
       note = diag_reference_ptr_to_gc_managed_class_note_;
     } else if (error.second == CheckFieldsVisitor::kOwnPtrToGCManaged) {
       note = diag_own_ptr_to_gc_managed_class_note_;
+    } else if (error.second == CheckFieldsVisitor::kUniquePtrToGCManaged) {
+      note = diag_unique_ptr_to_gc_managed_class_note_;
     } else if (error.second == CheckFieldsVisitor::kMemberToGCUnmanaged) {
       note = diag_member_to_gc_unmanaged_class_note_;
     } else if (error.second == CheckFieldsVisitor::kMemberInUnmanaged) {
@@ -482,6 +510,12 @@
   NoteField(field, diag_field_requires_tracing_note_);
 }
 
+void DiagnosticsReporter::NoteFieldShouldNotBeTraced(
+    RecordInfo* holder,
+    FieldDecl* field) {
+  NoteField(field, diag_field_should_not_be_traced_note_);
+}
+
 void DiagnosticsReporter::NotePartObjectContainsGCRoot(FieldPoint* point) {
   FieldDecl* field = point->field();
   ReportDiagnostic(field->getLocStart(),
diff --git a/tools/clang/blink_gc_plugin/DiagnosticsReporter.h b/tools/clang/blink_gc_plugin/DiagnosticsReporter.h
index 2f9076ec..5bb94d7 100644
--- a/tools/clang/blink_gc_plugin/DiagnosticsReporter.h
+++ b/tools/clang/blink_gc_plugin/DiagnosticsReporter.h
@@ -30,8 +30,8 @@
   void BaseRequiresTracing(RecordInfo* derived,
                            clang::CXXMethodDecl* trace,
                            clang::CXXRecordDecl* base);
-  void FieldsRequireTracing(RecordInfo* info,
-                            clang::CXXMethodDecl* trace);
+  void FieldsImproperlyTraced(RecordInfo* info,
+                              clang::CXXMethodDecl* trace);
   void ClassContainsInvalidFields(
       RecordInfo* info,
       const CheckFieldsVisitor::Errors& errors);
@@ -66,6 +66,7 @@
   void NoteManualDispatchMethod(clang::CXXMethodDecl* dispatch);
   void NoteBaseRequiresTracing(BasePoint* base);
   void NoteFieldRequiresTracing(RecordInfo* holder, clang::FieldDecl* field);
+  void NoteFieldShouldNotBeTraced(RecordInfo* holder, clang::FieldDecl* field);
   void NotePartObjectContainsGCRoot(FieldPoint* point);
   void NoteFieldContainsGCRoot(FieldPoint* point);
   void NoteUserDeclaredDestructor(clang::CXXMethodDecl* dtor);
@@ -93,6 +94,7 @@
   unsigned diag_class_requires_trace_method_;
   unsigned diag_base_requires_tracing_;
   unsigned diag_fields_require_tracing_;
+  unsigned diag_fields_improperly_traced_;
   unsigned diag_class_contains_invalid_fields_;
   unsigned diag_class_contains_gc_root_;
   unsigned diag_class_requires_finalization_;
@@ -113,10 +115,12 @@
 
   unsigned diag_base_requires_tracing_note_;
   unsigned diag_field_requires_tracing_note_;
+  unsigned diag_field_should_not_be_traced_note_;
   unsigned diag_raw_ptr_to_gc_managed_class_note_;
   unsigned diag_ref_ptr_to_gc_managed_class_note_;
   unsigned diag_reference_ptr_to_gc_managed_class_note_;
   unsigned diag_own_ptr_to_gc_managed_class_note_;
+  unsigned diag_unique_ptr_to_gc_managed_class_note_;
   unsigned diag_member_to_gc_unmanaged_class_note_;
   unsigned diag_stack_allocated_field_note_;
   unsigned diag_member_in_unmanaged_class_note_;
diff --git a/tools/clang/blink_gc_plugin/Edge.cpp b/tools/clang/blink_gc_plugin/Edge.cpp
index c56a576..77c6cfe 100644
--- a/tools/clang/blink_gc_plugin/Edge.cpp
+++ b/tools/clang/blink_gc_plugin/Edge.cpp
@@ -17,9 +17,11 @@
 void RecursiveEdgeVisitor::AtRawPtr(RawPtr*) {}
 void RecursiveEdgeVisitor::AtRefPtr(RefPtr*) {}
 void RecursiveEdgeVisitor::AtOwnPtr(OwnPtr*) {}
+void RecursiveEdgeVisitor::AtUniquePtr(UniquePtr*) {}
 void RecursiveEdgeVisitor::AtMember(Member*) {}
 void RecursiveEdgeVisitor::AtWeakMember(WeakMember*) {}
 void RecursiveEdgeVisitor::AtPersistent(Persistent*) {}
+void RecursiveEdgeVisitor::AtCrossThreadPersistent(CrossThreadPersistent*) {}
 void RecursiveEdgeVisitor::AtCollection(Collection*) {}
 
 void RecursiveEdgeVisitor::VisitValue(Value* e) {
@@ -46,6 +48,13 @@
   Leave();
 }
 
+void RecursiveEdgeVisitor::VisitUniquePtr(UniquePtr* e) {
+  AtUniquePtr(e);
+  Enter(e);
+  e->ptr()->Accept(this);
+  Leave();
+}
+
 void RecursiveEdgeVisitor::VisitMember(Member* e) {
   AtMember(e);
   Enter(e);
@@ -67,6 +76,14 @@
   Leave();
 }
 
+void RecursiveEdgeVisitor::VisitCrossThreadPersistent(
+    CrossThreadPersistent* e) {
+  AtCrossThreadPersistent(e);
+  Enter(e);
+  e->ptr()->Accept(this);
+  Leave();
+}
+
 void RecursiveEdgeVisitor::VisitCollection(Collection* e) {
   AtCollection(e);
   Enter(e);
diff --git a/tools/clang/blink_gc_plugin/Edge.h b/tools/clang/blink_gc_plugin/Edge.h
index 91e5698..79aa409 100644
--- a/tools/clang/blink_gc_plugin/Edge.h
+++ b/tools/clang/blink_gc_plugin/Edge.h
@@ -14,14 +14,16 @@
 class RecordInfo;
 
 class Edge;
-class Value;
+class Collection;
+class CrossThreadPersistent;
+class Member;
+class OwnPtr;
+class Persistent;
 class RawPtr;
 class RefPtr;
-class OwnPtr;
-class Member;
+class UniquePtr;
+class Value;
 class WeakMember;
-class Persistent;
-class Collection;
 
 // Bare-bones visitor.
 class EdgeVisitor {
@@ -31,9 +33,11 @@
   virtual void VisitRawPtr(RawPtr*) {}
   virtual void VisitRefPtr(RefPtr*) {}
   virtual void VisitOwnPtr(OwnPtr*) {}
+  virtual void VisitUniquePtr(UniquePtr*) {}
   virtual void VisitMember(Member*) {}
   virtual void VisitWeakMember(WeakMember*) {}
   virtual void VisitPersistent(Persistent*) {}
+  virtual void VisitCrossThreadPersistent(CrossThreadPersistent*) {}
   virtual void VisitCollection(Collection*) {}
 };
 
@@ -45,9 +49,11 @@
   void VisitRawPtr(RawPtr*) override;
   void VisitRefPtr(RefPtr*) override;
   void VisitOwnPtr(OwnPtr*) override;
+  void VisitUniquePtr(UniquePtr*) override;
   void VisitMember(Member*) override;
   void VisitWeakMember(WeakMember*) override;
   void VisitPersistent(Persistent*) override;
+  void VisitCrossThreadPersistent(CrossThreadPersistent*) override;
   void VisitCollection(Collection*) override;
 
  protected:
@@ -62,9 +68,11 @@
   virtual void AtRawPtr(RawPtr*);
   virtual void AtRefPtr(RefPtr*);
   virtual void AtOwnPtr(OwnPtr*);
+  virtual void AtUniquePtr(UniquePtr*);
   virtual void AtMember(Member*);
   virtual void AtWeakMember(WeakMember*);
   virtual void AtPersistent(Persistent*);
+  virtual void AtCrossThreadPersistent(CrossThreadPersistent*);
   virtual void AtCollection(Collection*);
 
  private:
@@ -89,9 +97,9 @@
   virtual bool IsRawPtr() { return false; }
   virtual bool IsRefPtr() { return false; }
   virtual bool IsOwnPtr() { return false; }
+  virtual bool IsUniquePtr() { return false; }
   virtual bool IsMember() { return false; }
   virtual bool IsWeakMember() { return false; }
-  virtual bool IsPersistent() { return false; }
   virtual bool IsCollection() { return false; }
 };
 
@@ -135,7 +143,7 @@
   LivenessKind Kind() { return kWeak; }
   bool NeedsFinalization() { return false; }
   TracingStatus NeedsTracing(NeedsTracingOption) {
-    return TracingStatus::Unneeded();
+    return TracingStatus::Illegal();
   }
   void Accept(EdgeVisitor* visitor) { visitor->VisitRawPtr(this); }
 
@@ -151,7 +159,7 @@
   LivenessKind Kind() { return kStrong; }
   bool NeedsFinalization() { return true; }
   TracingStatus NeedsTracing(NeedsTracingOption) {
-    return TracingStatus::Unneeded();
+    return TracingStatus::Illegal();
   }
   void Accept(EdgeVisitor* visitor) { visitor->VisitRefPtr(this); }
 };
@@ -163,11 +171,23 @@
   LivenessKind Kind() { return kStrong; }
   bool NeedsFinalization() { return true; }
   TracingStatus NeedsTracing(NeedsTracingOption) {
-    return TracingStatus::Unneeded();
+    return TracingStatus::Illegal();
   }
   void Accept(EdgeVisitor* visitor) { visitor->VisitOwnPtr(this); }
 };
 
+class UniquePtr : public PtrEdge {
+ public:
+  explicit UniquePtr(Edge* ptr) : PtrEdge(ptr) { }
+  bool IsUniquePtr() { return true; }
+  LivenessKind Kind() { return kStrong; }
+  bool NeedsFinalization() { return true; }
+  TracingStatus NeedsTracing(NeedsTracingOption) {
+    return TracingStatus::Illegal();
+  }
+  void Accept(EdgeVisitor* visitor) { visitor->VisitUniquePtr(this); }
+};
+
 class Member : public PtrEdge {
  public:
   explicit Member(Edge* ptr) : PtrEdge(ptr) { }
@@ -195,7 +215,6 @@
 class Persistent : public PtrEdge {
  public:
   explicit Persistent(Edge* ptr) : PtrEdge(ptr) { }
-  bool IsPersistent() { return true; }
   LivenessKind Kind() { return kRoot; }
   bool NeedsFinalization() { return true; }
   TracingStatus NeedsTracing(NeedsTracingOption) {
@@ -204,6 +223,19 @@
   void Accept(EdgeVisitor* visitor) { visitor->VisitPersistent(this); }
 };
 
+class CrossThreadPersistent : public PtrEdge {
+ public:
+  explicit CrossThreadPersistent(Edge* ptr) : PtrEdge(ptr) { }
+  LivenessKind Kind() { return kRoot; }
+  bool NeedsFinalization() { return true; }
+  TracingStatus NeedsTracing(NeedsTracingOption) {
+    return TracingStatus::Illegal();
+  }
+  void Accept(EdgeVisitor* visitor) {
+    visitor->VisitCrossThreadPersistent(this);
+  }
+};
+
 class Collection : public Edge {
  public:
   typedef std::vector<Edge*> Members;
diff --git a/tools/clang/blink_gc_plugin/RecordInfo.cpp b/tools/clang/blink_gc_plugin/RecordInfo.cpp
index 1eef514f..46b8606a 100644
--- a/tools/clang/blink_gc_plugin/RecordInfo.cpp
+++ b/tools/clang/blink_gc_plugin/RecordInfo.cpp
@@ -4,6 +4,7 @@
 
 #include "Config.h"
 #include "RecordInfo.h"
+#include "clang/Sema/Sema.h"
 
 using namespace clang;
 using std::string;
@@ -556,6 +557,16 @@
   return fields_need_tracing_;
 }
 
+static bool isInStdNamespace(clang::Sema& sema, NamespaceDecl* ns)
+{
+  while (ns) {
+    if (sema.getStdNamespace()->InEnclosingNamespaceSetOf(ns))
+      return true;
+    ns = dyn_cast<NamespaceDecl>(ns->getParent());
+  }
+  return false;
+}
+
 Edge* RecordInfo::CreateEdge(const Type* type) {
   if (!type) {
     return 0;
@@ -588,6 +599,18 @@
     return 0;
   }
 
+  if (Config::IsUniquePtr(info->name()) && info->GetTemplateArgs(1, &args)) {
+    // Check that this is std::unique_ptr
+    NamespaceDecl* ns =
+        dyn_cast<NamespaceDecl>(info->record()->getDeclContext());
+    clang::Sema& sema = cache_->instance().getSema();
+    if (!isInStdNamespace(sema, ns))
+      return 0;
+    if (Edge* ptr = CreateEdge(args[0]))
+      return new UniquePtr(ptr);
+    return 0;
+  }
+
   if (Config::IsMember(info->name()) && info->GetTemplateArgs(1, &args)) {
     if (Edge* ptr = CreateEdge(args[0]))
       return new Member(ptr);
@@ -600,7 +623,8 @@
     return 0;
   }
 
-  if (Config::IsPersistent(info->name())) {
+  bool is_persistent = Config::IsPersistent(info->name());
+  if (is_persistent || Config::IsCrossThreadPersistent(info->name())) {
     // Persistent might refer to v8::Persistent, so check the name space.
     // TODO: Consider using a more canonical identification than names.
     NamespaceDecl* ns =
@@ -609,8 +633,12 @@
       return 0;
     if (!info->GetTemplateArgs(1, &args))
       return 0;
-    if (Edge* ptr = CreateEdge(args[0]))
-      return new Persistent(ptr);
+    if (Edge* ptr = CreateEdge(args[0])) {
+      if (is_persistent)
+        return new Persistent(ptr);
+      else
+        return new CrossThreadPersistent(ptr);
+    }
     return 0;
   }
 
diff --git a/tools/clang/blink_gc_plugin/RecordInfo.h b/tools/clang/blink_gc_plugin/RecordInfo.h
index 39c13f0..e672282f 100644
--- a/tools/clang/blink_gc_plugin/RecordInfo.h
+++ b/tools/clang/blink_gc_plugin/RecordInfo.h
@@ -16,6 +16,7 @@
 
 #include "clang/AST/AST.h"
 #include "clang/AST/CXXInheritance.h"
+#include "clang/Frontend/CompilerInstance.h"
 
 class RecordCache;
 
@@ -26,6 +27,7 @@
   virtual ~GraphPoint() {}
   void MarkTraced() { traced_ = true; }
   bool IsProperlyTraced() { return traced_ || !NeedsTracing().IsNeeded(); }
+  bool IsInproperlyTraced() { return traced_ && NeedsTracing().IsIllegal(); }
   virtual const TracingStatus NeedsTracing() = 0;
 
  private:
@@ -158,6 +160,11 @@
 
 class RecordCache {
  public:
+  RecordCache(clang::CompilerInstance& instance)
+    : instance_(instance)
+  {
+  }
+
   RecordInfo* Lookup(clang::CXXRecordDecl* record);
 
   RecordInfo* Lookup(const clang::CXXRecordDecl* record) {
@@ -188,7 +195,11 @@
     }
   }
 
+  clang::CompilerInstance& instance() const { return instance_; }
+
  private:
+  clang::CompilerInstance& instance_;
+
   typedef std::map<clang::CXXRecordDecl*, RecordInfo> Cache;
   Cache cache_;
 };
diff --git a/tools/clang/blink_gc_plugin/TracingStatus.h b/tools/clang/blink_gc_plugin/TracingStatus.h
index 9eb1080..46e96547 100644
--- a/tools/clang/blink_gc_plugin/TracingStatus.h
+++ b/tools/clang/blink_gc_plugin/TracingStatus.h
@@ -5,12 +5,33 @@
 #ifndef TOOLS_BLINK_GC_PLUGIN_TRACING_STATUS_H_
 #define TOOLS_BLINK_GC_PLUGIN_TRACING_STATUS_H_
 
-// TracingStatus is a three-point value ordered by unneeded < unknown < needed.
+// TracingStatus is a four-point value ordered by
+//       illegal < unneeded < unknown < needed
+//
+// It is used to categorize tracing of fields:
+//
+//  * illegal  field is invalid/illegal to trace.
+//  * unneeded field has type with no traceable fields of its own;
+//             it may have an empty trace() method. Not harmful
+//             to trace, but not needed.
+//  * unknown  initial TracingStatus value.
+//  * needed   field is a heap reference or an object containing
+//             traceable fields.
+//
+// Tracing status |illegal| is considered an error; treating |unneeded| also
+// as an error would detect and report unnecessary tracing of objects that
+// probably don't need to be on the Blink GC heap. However, template use
+// and instantiation can leave us with classes that do have empty trace
+// methods and no traceable fields -- reporting these as errors/warnings
+// wouldn't work. Hence, only consider |illegal| as an error TracingStatus
+// state.
 class TracingStatus {
  public:
+  static TracingStatus Illegal() { return kIllegal; }
   static TracingStatus Unneeded() { return kUnneeded; }
   static TracingStatus Unknown() { return kUnknown; }
   static TracingStatus Needed() { return kNeeded; }
+  bool IsIllegal() const { return status_ == kIllegal; }
   bool IsUnneeded() const { return status_ == kUnneeded; }
   bool IsUnknown() const { return status_ == kUnknown; }
   bool IsNeeded() const { return status_ == kNeeded; }
@@ -21,7 +42,7 @@
     return status_ == other.status_;
   }
  private:
-  enum Status { kUnneeded, kUnknown, kNeeded };
+  enum Status { kIllegal, kUnneeded, kUnknown, kNeeded };
   TracingStatus(Status status) : status_(status) {}
   Status status_;
 };
diff --git a/tools/clang/blink_gc_plugin/tests/fields_illegal_tracing.cpp b/tools/clang/blink_gc_plugin/tests/fields_illegal_tracing.cpp
new file mode 100644
index 0000000..b831077
--- /dev/null
+++ b/tools/clang/blink_gc_plugin/tests/fields_illegal_tracing.cpp
@@ -0,0 +1,23 @@
+// 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 "fields_illegal_tracing.h"
+
+namespace blink {
+
+void PartObject::trace(Visitor* visitor) {
+    visitor->trace(m_obj1);
+    visitor->trace(m_obj2);
+    visitor->trace(m_obj3);
+    visitor->trace(m_obj4);
+}
+
+void HeapObject::trace(Visitor* visitor) {
+    visitor->trace(m_obj1);
+    visitor->trace(m_obj2);
+    visitor->trace(m_obj3);
+    visitor->trace(m_obj4);
+}
+
+}
diff --git a/tools/clang/blink_gc_plugin/tests/fields_illegal_tracing.h b/tools/clang/blink_gc_plugin/tests/fields_illegal_tracing.h
new file mode 100644
index 0000000..4d9e692a
--- /dev/null
+++ b/tools/clang/blink_gc_plugin/tests/fields_illegal_tracing.h
@@ -0,0 +1,56 @@
+// 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 FIELDS_ILLEGAL_TRACING_H_
+#define FIELDS_ILLEGAL_TRACING_H_
+
+#include "heap/stubs.h"
+
+namespace blink {
+
+namespace bar {
+
+// check that (only) std::unique_ptr<> is reported
+// as an illegal smart pointer type.
+template<typename T> class unique_ptr {
+public:
+    ~unique_ptr() { }
+    operator T*() const { return 0; }
+    T* operator->() { return 0; }
+
+    void trace(Visitor* visitor)
+    {
+    }
+};
+
+}
+
+class HeapObject;
+class PartObject;
+
+class PartObject {
+    DISALLOW_ALLOCATION();
+public:
+    void trace(Visitor*);
+private:
+    OwnPtr<HeapObject> m_obj1;
+    RefPtr<HeapObject> m_obj2;
+    bar::unique_ptr<HeapObject> m_obj3;
+    std::unique_ptr<HeapObject> m_obj4;
+};
+
+class HeapObject : public GarbageCollectedFinalized<HeapObject> {
+public:
+    void trace(Visitor*);
+private:
+    PartObject m_part;
+    OwnPtr<HeapObject> m_obj1;
+    RefPtr<HeapObject> m_obj2;
+    bar::unique_ptr<HeapObject> m_obj3;
+    std::unique_ptr<HeapObject> m_obj4;
+};
+
+}
+
+#endif
diff --git a/tools/clang/blink_gc_plugin/tests/fields_illegal_tracing.txt b/tools/clang/blink_gc_plugin/tests/fields_illegal_tracing.txt
new file mode 100644
index 0000000..5e428dc
--- /dev/null
+++ b/tools/clang/blink_gc_plugin/tests/fields_illegal_tracing.txt
@@ -0,0 +1,50 @@
+In file included from fields_illegal_tracing.cpp:5:
+./fields_illegal_tracing.h:32:1: warning: [blink-gc] Class 'PartObject' contains invalid fields.
+class PartObject {
+^
+./fields_illegal_tracing.h:37:5: note: [blink-gc] OwnPtr field 'm_obj1' to a GC managed class declared here:
+    OwnPtr<HeapObject> m_obj1;
+    ^
+./fields_illegal_tracing.h:38:5: note: [blink-gc] RefPtr field 'm_obj2' to a GC managed class declared here:
+    RefPtr<HeapObject> m_obj2;
+    ^
+./fields_illegal_tracing.h:40:5: note: [blink-gc] std::unique_ptr field 'm_obj4' to a GC managed class declared here:
+    std::unique_ptr<HeapObject> m_obj4;
+    ^
+./fields_illegal_tracing.h:43:1: warning: [blink-gc] Class 'HeapObject' contains invalid fields.
+class HeapObject : public GarbageCollectedFinalized<HeapObject> {
+^
+./fields_illegal_tracing.h:48:5: note: [blink-gc] OwnPtr field 'm_obj1' to a GC managed class declared here:
+    OwnPtr<HeapObject> m_obj1;
+    ^
+./fields_illegal_tracing.h:49:5: note: [blink-gc] RefPtr field 'm_obj2' to a GC managed class declared here:
+    RefPtr<HeapObject> m_obj2;
+    ^
+./fields_illegal_tracing.h:51:5: note: [blink-gc] std::unique_ptr field 'm_obj4' to a GC managed class declared here:
+    std::unique_ptr<HeapObject> m_obj4;
+    ^
+fields_illegal_tracing.cpp:9:1: warning: [blink-gc] Class 'PartObject' has untraced or not traceable fields.
+void PartObject::trace(Visitor* visitor) {
+^
+./fields_illegal_tracing.h:37:5: note: [blink-gc] Untraceable field 'm_obj1' declared here:
+    OwnPtr<HeapObject> m_obj1;
+    ^
+./fields_illegal_tracing.h:38:5: note: [blink-gc] Untraceable field 'm_obj2' declared here:
+    RefPtr<HeapObject> m_obj2;
+    ^
+./fields_illegal_tracing.h:40:5: note: [blink-gc] Untraceable field 'm_obj4' declared here:
+    std::unique_ptr<HeapObject> m_obj4;
+    ^
+fields_illegal_tracing.cpp:16:1: warning: [blink-gc] Class 'HeapObject' has untraced or not traceable fields.
+void HeapObject::trace(Visitor* visitor) {
+^
+./fields_illegal_tracing.h:48:5: note: [blink-gc] Untraceable field 'm_obj1' declared here:
+    OwnPtr<HeapObject> m_obj1;
+    ^
+./fields_illegal_tracing.h:49:5: note: [blink-gc] Untraceable field 'm_obj2' declared here:
+    RefPtr<HeapObject> m_obj2;
+    ^
+./fields_illegal_tracing.h:51:5: note: [blink-gc] Untraceable field 'm_obj4' declared here:
+    std::unique_ptr<HeapObject> m_obj4;
+    ^
+4 warnings generated.
diff --git a/tools/clang/blink_gc_plugin/tests/heap/stubs.h b/tools/clang/blink_gc_plugin/tests/heap/stubs.h
index 8f7feccc..fff4a78 100644
--- a/tools/clang/blink_gc_plugin/tests/heap/stubs.h
+++ b/tools/clang/blink_gc_plugin/tests/heap/stubs.h
@@ -118,6 +118,23 @@
 
 }
 
+// Empty namespace declaration to exercise internal
+// handling of namespace equality.
+namespace std {
+  /* empty */
+}
+
+namespace std {
+
+template<typename T> class unique_ptr {
+public:
+    ~unique_ptr() { }
+    operator T*() const { return 0; }
+    T* operator->() { return 0; }
+};
+
+}
+
 namespace blink {
 
 using namespace WTF;
@@ -178,6 +195,27 @@
     bool operator!() const { return false; }
 };
 
+template<typename T> class WeakPersistent {
+public:
+    operator T*() const { return 0; }
+    T* operator->() { return 0; }
+    bool operator!() const { return false; }
+};
+
+template<typename T> class CrossThreadPersistent {
+public:
+    operator T*() const { return 0; }
+    T* operator->() { return 0; }
+    bool operator!() const { return false; }
+};
+
+template<typename T> class CrossThreadWeakPersistent {
+public:
+    operator T*() const { return 0; }
+    T* operator->() { return 0; }
+    bool operator!() const { return false; }
+};
+
 class HeapAllocator {
 public:
     static const bool isGarbageCollected = true;
diff --git a/tools/clang/blink_gc_plugin/tests/persistent_field_in_gc_managed_class.h b/tools/clang/blink_gc_plugin/tests/persistent_field_in_gc_managed_class.h
index 4cfcfce..0ae2b27 100644
--- a/tools/clang/blink_gc_plugin/tests/persistent_field_in_gc_managed_class.h
+++ b/tools/clang/blink_gc_plugin/tests/persistent_field_in_gc_managed_class.h
@@ -24,6 +24,7 @@
     PartObject m_part;
     HeapVector<PartObject> m_parts;
     PersistentHeapVector<Member<HeapObject> > m_objs;
+    WeakPersistent<HeapObject> m_weakPersistent;
 };
 
 }
diff --git a/tools/clang/blink_gc_plugin/tests/persistent_field_in_gc_managed_class.txt b/tools/clang/blink_gc_plugin/tests/persistent_field_in_gc_managed_class.txt
index d69c0c5..dd5bc74 100644
--- a/tools/clang/blink_gc_plugin/tests/persistent_field_in_gc_managed_class.txt
+++ b/tools/clang/blink_gc_plugin/tests/persistent_field_in_gc_managed_class.txt
@@ -23,4 +23,10 @@
 ./persistent_field_in_gc_managed_class.h:26:5: note: [blink-gc] Field 'm_objs' defining a GC root declared here:
     PersistentHeapVector<Member<HeapObject> > m_objs;
     ^
-3 warnings generated.
+./persistent_field_in_gc_managed_class.h:20:1: warning: [blink-gc] Class 'HeapObject' contains GC root in field 'm_weakPersistent'.
+class HeapObject : public GarbageCollected<HeapObject> {
+^
+./persistent_field_in_gc_managed_class.h:27:5: note: [blink-gc] Field 'm_weakPersistent' defining a GC root declared here:
+    WeakPersistent<HeapObject> m_weakPersistent;
+    ^
+4 warnings generated.
diff --git a/tools/clang/blink_gc_plugin/tests/persistent_no_trace.cpp b/tools/clang/blink_gc_plugin/tests/persistent_no_trace.cpp
new file mode 100644
index 0000000..637b46f
--- /dev/null
+++ b/tools/clang/blink_gc_plugin/tests/persistent_no_trace.cpp
@@ -0,0 +1,14 @@
+// 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 "persistent_no_trace.h"
+
+namespace blink {
+
+void HeapObject::trace(Visitor* visitor) {
+    visitor->trace(m_crossThreadPersistent);
+    visitor->trace(m_crossThreadWeakPersistent);
+}
+
+}
diff --git a/tools/clang/blink_gc_plugin/tests/persistent_no_trace.h b/tools/clang/blink_gc_plugin/tests/persistent_no_trace.h
new file mode 100644
index 0000000..c8beb996
--- /dev/null
+++ b/tools/clang/blink_gc_plugin/tests/persistent_no_trace.h
@@ -0,0 +1,22 @@
+// 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 PERSISTENT_NO_TRACE_H_
+#define PERSISTENT_NO_TRACE_H_
+
+#include "heap/stubs.h"
+
+namespace blink {
+
+class HeapObject : public GarbageCollected<HeapObject> {
+public:
+    void trace(Visitor*);
+private:
+    CrossThreadPersistent<HeapObject> m_crossThreadPersistent;
+    CrossThreadWeakPersistent<HeapObject> m_crossThreadWeakPersistent;
+};
+
+}
+
+#endif
diff --git a/tools/clang/blink_gc_plugin/tests/persistent_no_trace.txt b/tools/clang/blink_gc_plugin/tests/persistent_no_trace.txt
new file mode 100644
index 0000000..dcfe76d
--- /dev/null
+++ b/tools/clang/blink_gc_plugin/tests/persistent_no_trace.txt
@@ -0,0 +1,10 @@
+persistent_no_trace.cpp:9:1: warning: [blink-gc] Class 'HeapObject' has untraced or not traceable fields.
+void HeapObject::trace(Visitor* visitor) {
+^
+./persistent_no_trace.h:16:5: note: [blink-gc] Untraceable field 'm_crossThreadPersistent' declared here:
+    CrossThreadPersistent<HeapObject> m_crossThreadPersistent;
+    ^
+./persistent_no_trace.h:17:5: note: [blink-gc] Untraceable field 'm_crossThreadWeakPersistent' declared here:
+    CrossThreadWeakPersistent<HeapObject> m_crossThreadWeakPersistent;
+    ^
+1 warning generated.
diff --git a/tools/clang/blink_gc_plugin/tests/templated_class_with_local_class_requires_trace.txt b/tools/clang/blink_gc_plugin/tests/templated_class_with_local_class_requires_trace.txt
index ed0dbcae..fa6b9f5 100644
--- a/tools/clang/blink_gc_plugin/tests/templated_class_with_local_class_requires_trace.txt
+++ b/tools/clang/blink_gc_plugin/tests/templated_class_with_local_class_requires_trace.txt
@@ -17,4 +17,10 @@
 ./templated_class_with_local_class_requires_trace.h:41:9: note: [blink-gc] Field 'm_object' requiring finalization declared here:
         OwnPtr<HeapObject> m_object;
         ^
-3 warnings generated.
+./templated_class_with_local_class_requires_trace.h:34:9: warning: [blink-gc] Class 'Local' has untraced or not traceable fields.
+        void trace(Visitor* visitor)
+        ^
+./templated_class_with_local_class_requires_trace.h:41:9: note: [blink-gc] Untraceable field 'm_object' declared here:
+        OwnPtr<HeapObject> m_object;
+        ^
+4 warnings generated.
diff --git a/tools/mb/mb_config.pyl b/tools/mb/mb_config.pyl
index b970be1..d7fb6abe 100644
--- a/tools/mb/mb_config.pyl
+++ b/tools/mb/mb_config.pyl
@@ -315,8 +315,6 @@
 
     'chromium.lkgr': {
       'ASAN Debug': 'gn_asan_lsan_edge_debug_bot',
-      'ASAN Release (symbolized)':
-        'gn_asan_lsan_edge_fuzzer_v8_heap_symbolized_release_bot',
       'ASAN Release Media':
         'gn_asan_lsan_edge_fuzzer_v8_heap_chromeos_codecs_release_bot',
       'ASAN Release': 'gn_asan_lsan_edge_fuzzer_v8_heap_release_bot',
@@ -324,8 +322,6 @@
         'gn_asan_edge_v8_heap_debug_bot_hybrid',
       'ASan Release (32-bit x86 with V8-ARM)':
         'gn_asan_edge_fuzzer_v8_heap_release_bot_hybrid',
-      'ASan Release (32-bit x86 with V8-ARM, symbolized)':
-        'gn_asan_edge_fuzzer_v8_heap_symbolized_release_bot_hybrid',
       'ASan Release Media (32-bit x86 with V8-ARM)':
         'gn_asan_edge_fuzzer_v8_heap_chromeos_codecs_release_bot_hybrid',
       'ChromiumOS ASAN Release':
@@ -367,7 +363,7 @@
     'chromium.memory': {
       'Linux ASan LSan Builder': 'swarming_asan_lsan_gn_release_bot',
       'Linux ASan LSan Tests (1)': 'none',
-      'Linux ASan LSan Tests (sandboxed)': 'none',
+      'Linux ASan Tests (sandboxed)': 'none',
       'Mac ASan 64 Builder': 'swarming_asan_lsan_full_symbols_gyp_release_bot',
       'Mac ASan 64 Tests (1)': 'none',
       'Linux Chromium OS ASan LSan Builder':
@@ -700,6 +696,8 @@
     },
 
     'tryserver.chromium.angle': {
+      'android_angle_rel_ng':
+        'swarming_gpu_fyi_tests_android_gn_release_trybot',
       'linux_angle_chromeos_rel_ng':
         'swarming_gpu_fyi_tests_chromeos_gyp_release_trybot',
       'linux_angle_dbg_ng': 'swarming_gpu_fyi_tests_gn_debug_trybot',
@@ -732,6 +730,7 @@
       'linux_chromium_archive_rel_ng': 'noswarming_gn_release_bot',
       'linux_chromium_asan_rel_ng': 'swarming_asan_lsan_gn_release_trybot',
       'linux_chromium_asan_variable': 'findit',
+      'linux_chromium_blimp_variable': 'findit',
       'linux_chromium_browser_side_navigation_rel': 'gn_release_trybot',
       'linux_chromium_cast_variable': 'findit',
       'linux_chromium_cfi_rel_ng': 'gn_cfi_release_static_dcheck_always_on',
@@ -808,7 +807,6 @@
       'mac_chromium_rel_ng': 'swarming_gpu_tests_gyp_release_trybot',
       'mac_chromium_variable': 'findit',
       'mac_chromium_variable_10.10': 'findit',
-      'mac_chromium_variable_10.10_macviews': 'findit',
       'mac_chromium_variable_10.10_layout': 'findit',
       'mac_chromium_variable_10.11': 'findit',
       'mac_chromium_variable_10.11_layout': 'findit',
@@ -857,11 +855,9 @@
       'win_perf_bisect': 'gn_official_goma_minimal_symbols_x86',
       'win_perf_bisect_builder': 'gn_official_goma_minimal_symbols_x86',
       'win_x64_perf_bisect': 'gn_official_goma_minimal_symbols_x64',
-      'winx64_8_perf_bisect': 'gn_official_goma_minimal_symbols_x64',
       'winx64_10_perf_bisect': 'gn_official_goma_minimal_symbols_x64',
       'winx64_10_perf_cq': 'gn_official_goma_minimal_symbols_x64',
       'winx64_bisect_builder': 'gn_official_goma_minimal_symbols_x64',
-      'winx64_fyi_perf_bisect': 'gn_official_goma_minimal_symbols_x64',
       'winx64_zen_perf_bisect': 'gn_official_goma_minimal_symbols_x64',
       'winx64ati_perf_bisect': 'gn_official_goma_minimal_symbols_x64',
       'winx64intel_perf_bisect': 'gn_official_goma_minimal_symbols_x64',
@@ -1239,11 +1235,6 @@
       'gyp', 'asan', 'edge', 'fuzzer', 'v8_heap', 'release_bot', 'x86',
     ],
 
-    'gn_asan_edge_fuzzer_v8_heap_symbolized_release_bot_hybrid': [
-      'gn', 'asan', 'edge', 'fuzzer', 'v8_heap', 'symbolized',
-      'release_bot', 'hybrid',
-    ],
-
     'gyp_asan_fuzzer_v8_heap_chrome_with_codecs_release_bot': [
       'gyp', 'asan', 'fuzzer', 'v8_heap', 'chrome_with_codecs', 'release_bot',
     ],
@@ -1617,6 +1608,11 @@
       'swarming', 'gn', 'release_trybot', 'x64',
     ],
 
+    'swarming_gpu_fyi_tests_android_gn_release_trybot': [
+      'swarming', 'gpu_tests', 'internal_gles2_conform_tests', 'gn',
+      'android', 'release_trybot', 'angle_deqp_tests',
+    ],
+
     'swarming_gpu_fyi_tests_chromeos_gyp_release_trybot': [
       'swarming', 'gpu_tests', 'internal_gles2_conform_tests', 'gyp',
       'release_trybot', 'angle_deqp_tests', 'chromeos',
diff --git a/tools/metrics/histograms/histograms.xml b/tools/metrics/histograms/histograms.xml
index f105b89c..3cb5dad 100644
--- a/tools/metrics/histograms/histograms.xml
+++ b/tools/metrics/histograms/histograms.xml
@@ -585,6 +585,12 @@
   </summary>
 </histogram>
 
+<histogram name="Android.TabPersistentStore.MetadataFileSize">
+  <owner>wnwen@chromium.org</owner>
+  <owner>dfalcantara@chromium.org</owner>
+  <summary>The number of bytes written for the tab metadata file.</summary>
+</histogram>
+
 <histogram name="AndroidTabCloseUndo.Toast"
     enum="AndroidTabCloseUndoToastEvent">
   <owner>dtrainor@chromium.org</owner>
@@ -92809,7 +92815,9 @@
   <suffix name="ReadSavedStateTime"/>
   <suffix name="RestoreTabPrefetchTime"/>
   <suffix name="RestoreTabTime"/>
+  <suffix name="SaveListTime"/>
   <suffix name="SaveStateTime"/>
+  <suffix name="SaveTabsTime"/>
   <affected-histogram name="Android.StrictMode.TabPersistentStore"/>
 </histogram_suffixes>
 
@@ -96730,6 +96738,12 @@
 
 <histogram_suffixes name="PageLoadBackgrounded2" separator=".">
   <affected-histogram
+      name="PageLoad.Clients.DocWrite.Block.ParseTiming.ParseBlockedOnScriptLoad"/>
+  <affected-histogram
+      name="PageLoad.Clients.DocWrite.Block.ParseTiming.ParseBlockedOnScriptLoadFromDocumentWrite"/>
+  <affected-histogram
+      name="PageLoad.Clients.DocWrite.Block.ParseTiming.ParseDuration"/>
+  <affected-histogram
       name="PageLoad.Clients.DocWrite.Block.Timing2.ParseBlockedOnScriptLoad"/>
   <affected-histogram
       name="PageLoad.Clients.DocWrite.Block.Timing2.ParseBlockedOnScriptLoad.ParseComplete"/>
@@ -96740,6 +96754,15 @@
   <affected-histogram
       name="PageLoad.Clients.DocWrite.Block.Timing2.ParseDuration"/>
   <affected-histogram
+      name="PageLoad.Clients.DocWrite.Evaluator.PaintTiming.NavigationToFirstContentfulPaint"/>
+  ;
+  <affected-histogram
+      name="PageLoad.Clients.DocWrite.Evaluator.ParseTiming.ParseBlockedOnScriptLoad"/>
+  <affected-histogram
+      name="PageLoad.Clients.DocWrite.Evaluator.ParseTiming.ParseBlockedOnScriptLoadFromDocumentWrite"/>
+  <affected-histogram
+      name="PageLoad.Clients.DocWrite.Evaluator.ParseTiming.ParseDuration"/>
+  <affected-histogram
       name="PageLoad.Clients.DocWrite.Evaluator.Timing2.NavigationToFirstContentfulPaint"/>
   <affected-histogram
       name="PageLoad.Clients.DocWrite.Evaluator.Timing2.ParseBlockedOnScriptLoad"/>
@@ -96865,6 +96888,9 @@
   <affected-histogram
       name="PageLoad.PaintTiming.ParseStartToFirstContentfulPaint"/>
   <affected-histogram name="PageLoad.ParseTiming.NavigationToParseStart"/>
+  <affected-histogram name="PageLoad.ParseTiming.ParseBlockedOnScriptLoad"/>
+  <affected-histogram
+      name="PageLoad.ParseTiming.ParseBlockedOnScriptLoadFromDocumentWrite"/>
   <affected-histogram name="PageLoad.ParseTiming.ParseDuration"/>
   <suffix name="Clients.FromGWS"
       label="PageLoadMetrics that are a result of a navigation from a Google
diff --git a/tools/perf/page_sets/dual_browser_story.py b/tools/perf/page_sets/dual_browser_story.py
index e511044..94ae6d8 100644
--- a/tools/perf/page_sets/dual_browser_story.py
+++ b/tools/perf/page_sets/dual_browser_story.py
@@ -101,6 +101,11 @@
     self.platform.network_controller.Open(wpr_mode,
                                           browser_options.extra_wpr_args)
 
+    # Make sure all browsers are open before starting.
+    for story in story_set:
+      if story.browser_type not in self._browsers:
+        self._SetCurrentBrowser(story.browser_type)
+
   @property
   def current_tab(self):
     return self._current_tab
@@ -190,6 +195,14 @@
         logging.exception('Error while closing browser: %s', browser_type)
     self._browsers = None  # Not usable after tearing down.
 
+  def DumpStateUponFailure(self, unused_story, unused_results):
+    if self._browsers:
+      for browser_type, browser in self._browsers.iteritems():
+        logging.info('vvvvv BROWSER STATE BELOW FOR \'%s\' vvvvv', browser_type)
+        browser.DumpStateUponFailure()
+    else:
+      logging.warning('Cannot dump browser states: No browsers.')
+
 
 class SinglePage(story_module.Story):
   def __init__(self, name, url, browser_type, phase):
diff --git a/tools/valgrind/gtest_exclude/blink_platform_unittests.gtest_win32.txt b/tools/valgrind/gtest_exclude/blink_platform_unittests.gtest_win32.txt
index 8a9c918..32b9ede4 100644
--- a/tools/valgrind/gtest_exclude/blink_platform_unittests.gtest_win32.txt
+++ b/tools/valgrind/gtest_exclude/blink_platform_unittests.gtest_win32.txt
@@ -2,3 +2,6 @@
 HarfBuzzShaperTest.ResolveCandidateRunsLatin
 HarfBuzzShaperTest.ResolveCandidateRunsLeadingCommon
 HarfBuzzShaperTest.ResolveCandidateRunsUnicodeVariants
+
+# https://crbug.com/621488
+ICOImageDecoderTests.parseAndDecodeByteByByte
diff --git a/tools/valgrind/gtest_exclude/chrome_elf_unittests.gtest-drmemory_win32.txt b/tools/valgrind/gtest_exclude/chrome_elf_unittests.gtest-drmemory_win32.txt
new file mode 100644
index 0000000..cfa0790
--- /dev/null
+++ b/tools/valgrind/gtest_exclude/chrome_elf_unittests.gtest-drmemory_win32.txt
@@ -0,0 +1,2 @@
+# https://crbug.com/621460
+ELFImportsTest.ChromeElfSanityCheck
diff --git a/tools/valgrind/gtest_exclude/content_browsertests.gtest-drmemory_win32.txt b/tools/valgrind/gtest_exclude/content_browsertests.gtest-drmemory_win32.txt
index a4eb170..0e5bbf2 100644
--- a/tools/valgrind/gtest_exclude/content_browsertests.gtest-drmemory_win32.txt
+++ b/tools/valgrind/gtest_exclude/content_browsertests.gtest-drmemory_win32.txt
@@ -67,3 +67,6 @@
 
 # https://crbug.com/589174
 WebContentsImplBrowserTest.SetTitleOnUnload
+
+$ https://crbug.com/621466
+CrossSiteTransferTest.PostWithFileData
diff --git a/ui/events/event.h b/ui/events/event.h
index a617760..84f11439 100644
--- a/ui/events/event.h
+++ b/ui/events/event.h
@@ -318,6 +318,12 @@
 
 class EVENTS_EXPORT LocatedEvent : public Event {
  public:
+  // Convenience function that casts |event| to a LocatedEvent if it is one,
+  // otherwise returns null.
+  static const ui::LocatedEvent* FromIfValid(const ui::Event* event) {
+    return event && event->IsLocatedEvent() ? event->AsLocatedEvent() : nullptr;
+  }
+
   ~LocatedEvent() override;
 
   float x() const { return location_.x(); }
diff --git a/ui/gfx/harfbuzz_font_skia.cc b/ui/gfx/harfbuzz_font_skia.cc
index 719d4fe3..889fa2d 100644
--- a/ui/gfx/harfbuzz_font_skia.cc
+++ b/ui/gfx/harfbuzz_font_skia.cc
@@ -260,7 +260,7 @@
 }  // namespace
 
 // Creates a HarfBuzz font from the given Skia face and text size.
-hb_font_t* CreateHarfBuzzFont(SkTypeface* skia_face,
+hb_font_t* CreateHarfBuzzFont(sk_sp<SkTypeface> skia_face,
                               SkScalar text_size,
                               const FontRenderParams& params,
                               bool subpixel_rendering_suppressed) {
@@ -269,13 +269,13 @@
 
   FaceCache* face_cache = &face_caches[skia_face->uniqueID()];
   if (face_cache->first.get() == NULL)
-    face_cache->first.Init(skia_face);
+    face_cache->first.Init(skia_face.get());
 
   hb_font_t* harfbuzz_font = hb_font_create(face_cache->first.get());
   const int scale = SkiaScalarToHarfBuzzUnits(text_size);
   hb_font_set_scale(harfbuzz_font, scale, scale);
   FontData* hb_font_data = new FontData(&face_cache->second);
-  hb_font_data->paint_.setTypeface(skia_face);
+  hb_font_data->paint_.setTypeface(std::move(skia_face));
   hb_font_data->paint_.setTextSize(text_size);
   // TODO(ckocagil): Do we need to update these params later?
   internal::ApplyRenderParams(params, subpixel_rendering_suppressed,
diff --git a/ui/gfx/harfbuzz_font_skia.h b/ui/gfx/harfbuzz_font_skia.h
index df8a3312..bdf6dc12 100644
--- a/ui/gfx/harfbuzz_font_skia.h
+++ b/ui/gfx/harfbuzz_font_skia.h
@@ -6,6 +6,7 @@
 #define UI_GFX_HARFBUZZ_FONT_SKIA_H_
 
 #include "third_party/harfbuzz-ng/src/hb.h"
+#include "third_party/skia/include/core/SkRefCnt.h"
 #include "third_party/skia/include/core/SkScalar.h"
 #include "ui/gfx/font_render_params.h"
 
@@ -13,7 +14,7 @@
 
 namespace gfx {
 
-hb_font_t* CreateHarfBuzzFont(SkTypeface* skia_face,
+hb_font_t* CreateHarfBuzzFont(sk_sp<SkTypeface> skia_face,
                               SkScalar text_size,
                               const FontRenderParams& params,
                               bool subpixel_rendering_suppressed);
diff --git a/ui/gfx/platform_font_linux.cc b/ui/gfx/platform_font_linux.cc
index 81e728b..603f61bf 100644
--- a/ui/gfx/platform_font_linux.cc
+++ b/ui/gfx/platform_font_linux.cc
@@ -286,7 +286,7 @@
     paint.setAntiAlias(false);
     paint.setSubpixelText(false);
     paint.setTextSize(font_size_pixels_);
-    paint.setTypeface(typeface_.get());
+    paint.setTypeface(typeface_);
     paint.setFakeBoldText(weight_ >= Font::Weight::BOLD &&
                           !typeface_->isBold());
     paint.setTextSkewX((Font::ITALIC & style_) && !typeface_->isItalic() ?
diff --git a/ui/gfx/render_text.cc b/ui/gfx/render_text.cc
index a56f8a7..d41c6abd 100644
--- a/ui/gfx/render_text.cc
+++ b/ui/gfx/render_text.cc
@@ -240,8 +240,8 @@
   ApplyRenderParams(params, subpixel_rendering_suppressed, &paint_);
 }
 
-void SkiaTextRenderer::SetTypeface(SkTypeface* typeface) {
-  paint_.setTypeface(typeface);
+void SkiaTextRenderer::SetTypeface(sk_sp<SkTypeface> typeface) {
+  paint_.setTypeface(std::move(typeface));
 }
 
 void SkiaTextRenderer::SetTextSize(SkScalar size) {
diff --git a/ui/gfx/render_text.h b/ui/gfx/render_text.h
index af2700d8..36c5871 100644
--- a/ui/gfx/render_text.h
+++ b/ui/gfx/render_text.h
@@ -21,6 +21,7 @@
 #include "base/strings/string16.h"
 #include "third_party/skia/include/core/SkColor.h"
 #include "third_party/skia/include/core/SkPaint.h"
+#include "third_party/skia/include/core/SkRefCnt.h"
 #include "ui/gfx/break_list.h"
 #include "ui/gfx/font_list.h"
 #include "ui/gfx/font_render_params.h"
@@ -59,7 +60,7 @@
   void SetDrawLooper(sk_sp<SkDrawLooper> draw_looper);
   void SetFontRenderParams(const FontRenderParams& params,
                            bool subpixel_rendering_suppressed);
-  void SetTypeface(SkTypeface* typeface);
+  void SetTypeface(sk_sp<SkTypeface> typeface);
   void SetTextSize(SkScalar size);
   void SetForegroundColor(SkColor foreground);
   void SetShader(sk_sp<SkShader> shader);
diff --git a/ui/gfx/render_text_harfbuzz.cc b/ui/gfx/render_text_harfbuzz.cc
index dac89b9b..7883efc 100644
--- a/ui/gfx/render_text_harfbuzz.cc
+++ b/ui/gfx/render_text_harfbuzz.cc
@@ -422,7 +422,7 @@
     line->segments.push_back(segment);
 
     SkPaint paint;
-    paint.setTypeface(run.skia_face.get());
+    paint.setTypeface(run.skia_face);
     paint.setTextSize(SkIntToScalar(run.font_size));
     paint.setAntiAlias(run.render_params.antialiasing);
     SkPaint::FontMetrics metrics;
@@ -1144,7 +1144,7 @@
     SkScalar preceding_segment_widths = 0;
     for (const internal::LineSegment& segment : line.segments) {
       const internal::TextRunHarfBuzz& run = *run_list->runs()[segment.run];
-      renderer->SetTypeface(run.skia_face.get());
+      renderer->SetTypeface(run.skia_face);
       renderer->SetTextSize(SkIntToScalar(run.font_size));
       renderer->SetFontRenderParams(run.render_params,
                                     subpixel_rendering_suppressed());
@@ -1481,7 +1481,7 @@
   run->render_params = params;
 
   hb_font_t* harfbuzz_font = CreateHarfBuzzFont(
-      run->skia_face.get(), SkIntToScalar(run->font_size), run->render_params,
+      run->skia_face, SkIntToScalar(run->font_size), run->render_params,
       subpixel_rendering_suppressed());
 
   // Create a HarfBuzz buffer and add the string to be shaped. The HarfBuzz
diff --git a/ui/gfx/render_text_mac.mm b/ui/gfx/render_text_mac.mm
index a6e28c25c..bd62b5d 100644
--- a/ui/gfx/render_text_mac.mm
+++ b/ui/gfx/render_text_mac.mm
@@ -221,7 +221,7 @@
 
     // The painter adds its own ref. So don't |release()| it from the ref ptr in
     // TextRun.
-    renderer->SetTypeface(run.typeface.get());
+    renderer->SetTypeface(run.typeface);
 
     renderer->DrawPosText(&run.glyph_positions[0], &run.glyphs[0],
                           run.glyphs.size());
diff --git a/ui/views/animation/flood_fill_ink_drop_ripple.cc b/ui/views/animation/flood_fill_ink_drop_ripple.cc
index 9abd3e75..3d37600 100644
--- a/ui/views/animation/flood_fill_ink_drop_ripple.cc
+++ b/ui/views/animation/flood_fill_ink_drop_ripple.cc
@@ -316,12 +316,23 @@
 }
 
 gfx::Transform FloodFillInkDropRipple::GetMaxSizeTargetTransform() const {
-  // TODO(estade): get rid of this 2, but make the fade out start before the
-  // active/action transform is done.
-  return CalculateTransform(gfx::Vector2dF(root_layer_.bounds().width(),
-                                           root_layer_.bounds().height())
-                                .Length() /
-                            2);
+  return CalculateTransform(MaxDistanceToCorners(center_point_));
+}
+
+float FloodFillInkDropRipple::MaxDistanceToCorners(
+    const gfx::Point& point) const {
+  const gfx::Rect bounds = root_layer_.bounds();
+  const float distance_to_top_left = (bounds.origin() - point).Length();
+  const float distance_to_top_right = (bounds.top_right() - point).Length();
+  const float distance_to_bottom_left = (bounds.bottom_left() - point).Length();
+  const float distance_to_bottom_right =
+      (bounds.bottom_right() - point).Length();
+
+  float largest_distance =
+      std::max(distance_to_top_left, distance_to_top_right);
+  largest_distance = std::max(largest_distance, distance_to_bottom_left);
+  largest_distance = std::max(largest_distance, distance_to_bottom_right);
+  return largest_distance;
 }
 
 }  // namespace views
diff --git a/ui/views/animation/flood_fill_ink_drop_ripple.h b/ui/views/animation/flood_fill_ink_drop_ripple.h
index f3f7314..b77560ff 100644
--- a/ui/views/animation/flood_fill_ink_drop_ripple.h
+++ b/ui/views/animation/flood_fill_ink_drop_ripple.h
@@ -101,6 +101,10 @@
   // Returns the target Transform for when the ink drop is fully shown.
   gfx::Transform GetMaxSizeTargetTransform() const;
 
+  // Returns the largest distance from |point| to the corners of the
+  // |root_layer_| bounds.
+  float MaxDistanceToCorners(const gfx::Point& point) const;
+
   // The point where the Center of the ink drop's circle should be drawn.
   gfx::Point center_point_;
 
diff --git a/ui/views/animation/flood_fill_ink_drop_ripple_unittest.cc b/ui/views/animation/flood_fill_ink_drop_ripple_unittest.cc
index a6e2a6cd..2e1b2db 100644
--- a/ui/views/animation/flood_fill_ink_drop_ripple_unittest.cc
+++ b/ui/views/animation/flood_fill_ink_drop_ripple_unittest.cc
@@ -31,5 +31,35 @@
   EXPECT_EQ(expected_center_point, actual_center);
 }
 
+TEST(FloodFillInkDropRippleTest, MaxDistanceToCorners) {
+  const float kAbsError = 0.01f;
+  // Rect with the following corners in clockwise order starting at the origin:
+  // (10, 30), (60, 30), (10, 100), (60, 100)
+  const gfx::Rect clip_bounds(10, 30, 50, 70);
+
+  FloodFillInkDropRipple ripple(clip_bounds, gfx::Point(), SK_ColorWHITE);
+  FloodFillInkDropRippleTestApi test_api(&ripple);
+
+  // Interior points
+  EXPECT_NEAR(78.10f, test_api.MaxDistanceToCorners(gfx::Point(10, 40)),
+              kAbsError);
+  EXPECT_NEAR(71.06f, test_api.MaxDistanceToCorners(gfx::Point(55, 45)),
+              kAbsError);
+  EXPECT_NEAR(64.03f, test_api.MaxDistanceToCorners(gfx::Point(50, 80)),
+              kAbsError);
+  EXPECT_NEAR(68.01f, test_api.MaxDistanceToCorners(gfx::Point(20, 85)),
+              kAbsError);
+
+  // Exterior points
+  EXPECT_NEAR(110.79f, test_api.MaxDistanceToCorners(gfx::Point(3, 5)),
+              kAbsError);
+  EXPECT_NEAR(108.17f, test_api.MaxDistanceToCorners(gfx::Point(70, 10)),
+              kAbsError);
+  EXPECT_NEAR(103.08f, test_api.MaxDistanceToCorners(gfx::Point(75, 110)),
+              kAbsError);
+  EXPECT_NEAR(101.24f, test_api.MaxDistanceToCorners(gfx::Point(5, 115)),
+              kAbsError);
+}
+
 }  // namespace test
 }  // namespace views
diff --git a/ui/views/animation/ink_drop.h b/ui/views/animation/ink_drop.h
index 9cb5232..e1987ff 100644
--- a/ui/views/animation/ink_drop.h
+++ b/ui/views/animation/ink_drop.h
@@ -19,7 +19,6 @@
 namespace ui {
 class Layer;
 }
-
 namespace views {
 
 // Pure virtual base class that manages the lifetime and state of an ink drop
diff --git a/ui/views/animation/ink_drop_host_view.cc b/ui/views/animation/ink_drop_host_view.cc
index 924770a..b1d5829 100644
--- a/ui/views/animation/ink_drop_host_view.cc
+++ b/ui/views/animation/ink_drop_host_view.cc
@@ -41,8 +41,10 @@
 // TODO(bruthig): Consider getting rid of this class.
 class InkDropHostView::InkDropGestureHandler : public ui::EventHandler {
  public:
-  InkDropGestureHandler(View* view, InkDrop* ink_drop)
-      : ink_drop_(ink_drop), target_handler_(view, this) {}
+  InkDropGestureHandler(InkDropHostView* host_view, InkDrop* ink_drop)
+      : target_handler_(new ui::ScopedTargetHandler(host_view, this)),
+        host_view_(host_view),
+        ink_drop_(ink_drop) {}
 
   ~InkDropGestureHandler() override {}
 
@@ -85,16 +87,19 @@
       // case would prematurely pre-empt these animations.
       return;
     }
-    ink_drop_->AnimateToState(ink_drop_state);
+    host_view_->AnimateInkDrop(ink_drop_state, event);
   }
 
  private:
+  // Allows |this| to handle all GestureEvents on |host_view_|.
+  std::unique_ptr<ui::ScopedTargetHandler> target_handler_;
+
+  // The host view to cache ui::Events to when animating the ink drop.
+  InkDropHostView* host_view_;
+
   // Animation controller for the ink drop ripple effect.
   InkDrop* ink_drop_;
 
-  // An instance of ScopedTargetHandler allowing |this| to handle events.
-  ui::ScopedTargetHandler target_handler_;
-
   DISALLOW_COPY_AND_ASSIGN(InkDropGestureHandler);
 };
 
@@ -129,22 +134,46 @@
 }
 
 std::unique_ptr<InkDropRipple> InkDropHostView::CreateInkDropRipple() const {
-  std::unique_ptr<InkDropRipple> ripple(new SquareInkDropRipple(
-      CalculateLargeInkDropSize(ink_drop_size_), kInkDropLargeCornerRadius,
-      ink_drop_size_, kInkDropSmallCornerRadius, GetInkDropCenter(),
-      GetInkDropBaseColor()));
-  return ripple;
+  return CreateDefaultInkDropRipple(GetLocalBounds().CenterPoint());
 }
 
 std::unique_ptr<InkDropHighlight> InkDropHostView::CreateInkDropHighlight()
     const {
+  return CreateDefaultInkDropHighlight(GetLocalBounds().CenterPoint());
+}
+
+std::unique_ptr<InkDropRipple> InkDropHostView::CreateDefaultInkDropRipple(
+    const gfx::Point& center_point) const {
+  std::unique_ptr<InkDropRipple> ripple(new SquareInkDropRipple(
+      CalculateLargeInkDropSize(ink_drop_size_), kInkDropLargeCornerRadius,
+      ink_drop_size_, kInkDropSmallCornerRadius, center_point,
+      GetInkDropBaseColor()));
+  return ripple;
+}
+
+std::unique_ptr<InkDropHighlight>
+InkDropHostView::CreateDefaultInkDropHighlight(
+    const gfx::Point& center_point) const {
   std::unique_ptr<InkDropHighlight> highlight(
       new InkDropHighlight(ink_drop_size_, kInkDropSmallCornerRadius,
-                           GetInkDropCenter(), GetInkDropBaseColor()));
+                           center_point, GetInkDropBaseColor()));
   highlight->set_explode_size(CalculateLargeInkDropSize(ink_drop_size_));
   return highlight;
 }
 
+gfx::Point InkDropHostView::GetInkDropCenterBasedOnLastEvent() const {
+  return last_ripple_triggering_event_
+             ? last_ripple_triggering_event_->location()
+             : GetLocalBounds().CenterPoint();
+}
+
+void InkDropHostView::AnimateInkDrop(InkDropState state,
+                                     const ui::LocatedEvent* event) {
+  last_ripple_triggering_event_.reset(
+      event ? ui::Event::Clone(*event).release()->AsLocatedEvent() : nullptr);
+  ink_drop_->AnimateToState(state);
+}
+
 void InkDropHostView::VisibilityChanged(View* starting_from, bool is_visible) {
   View::VisibilityChanged(starting_from, is_visible);
   if (GetWidget() && !is_visible) {
@@ -179,10 +208,6 @@
   View::OnMouseEvent(event);
 }
 
-gfx::Point InkDropHostView::GetInkDropCenter() const {
-  return GetLocalBounds().CenterPoint();
-}
-
 SkColor InkDropHostView::GetInkDropBaseColor() const {
   NOTREACHED();
   return gfx::kPlaceholderColor;
@@ -202,8 +227,4 @@
   }
 }
 
-void InkDropHostView::AnimateInkDrop(InkDropState ink_drop_state) {
-  ink_drop_->AnimateToState(ink_drop_state);
-}
-
 }  // namespace views
diff --git a/ui/views/animation/ink_drop_host_view.h b/ui/views/animation/ink_drop_host_view.h
index c6334de..af3621f 100644
--- a/ui/views/animation/ink_drop_host_view.h
+++ b/ui/views/animation/ink_drop_host_view.h
@@ -8,6 +8,7 @@
 #include <memory>
 
 #include "third_party/skia/include/core/SkColor.h"
+#include "ui/gfx/geometry/point.h"
 #include "ui/gfx/geometry/size.h"
 #include "ui/views/animation/ink_drop.h"
 #include "ui/views/animation/ink_drop_host.h"
@@ -25,6 +26,9 @@
 // A view that provides InkDropHost functionality.
 class VIEWS_EXPORT InkDropHostView : public View, public InkDropHost {
  public:
+  InkDropHostView();
+  ~InkDropHostView() override;
+
   // Overridden from InkDropHost:
   void AddInkDropLayer(ui::Layer* ink_drop_layer) override;
   void RemoveInkDropLayer(ui::Layer* ink_drop_layer) override;
@@ -34,11 +38,29 @@
   void set_ink_drop_size(const gfx::Size& size) { ink_drop_size_ = size; }
 
  protected:
-  InkDropHostView();
-  ~InkDropHostView() override;
-
   static const int kInkDropSmallCornerRadius;
 
+  // Returns the default InkDropRipple centered on |center_point|.
+  std::unique_ptr<InkDropRipple> CreateDefaultInkDropRipple(
+      const gfx::Point& center_point) const;
+
+  // Returns the default InkDropHighlight centered on |center_point|.
+  std::unique_ptr<InkDropHighlight> CreateDefaultInkDropHighlight(
+      const gfx::Point& center_point) const;
+
+  // Returns the point of the |last_ripple_triggering_event_| if it was a
+  // LocatedEvent, otherwise the center point of the local bounds is returned.
+  gfx::Point GetInkDropCenterBasedOnLastEvent() const;
+
+  // Animates |ink_drop_| to the desired |ink_drop_state|. Caches |event| as the
+  // last_ripple_triggering_event().
+  //
+  // *** NOTE ***: |event| has been plumbed through on a best effort basis for
+  // the purposes of centering ink drop ripples on located Events.  Thus nullptr
+  // has been used by clients who do not have an Event instance available to
+  // them.
+  void AnimateInkDrop(InkDropState state, const ui::LocatedEvent* event);
+
   // View:
   void VisibilityChanged(View* starting_from, bool is_visible) override;
   void OnFocus() override;
@@ -47,7 +69,6 @@
 
   // Overrideable methods to allow views to provide minor tweaks to the default
   // ink drop.
-  virtual gfx::Point GetInkDropCenter() const;
   virtual SkColor GetInkDropBaseColor() const;
 
   // Should return true if the ink drop is also used to depict focus.
@@ -60,17 +81,14 @@
   // of the InkDrop.
   void SetHasInkDrop(bool has_an_ink_drop);
 
-  // Animates |ink_drop_| to the desired |ink_drop_state|.
-  //
-  // TODO(bruthig): Enhance to accept a ui::Event parameter so InkDrops can be
-  // centered (see https://crbug.com/597273) and disabled for touch events on
-  // Windows (see https://crbug.com/595315).
-  void AnimateInkDrop(InkDropState ink_drop_state);
-
  private:
   class InkDropGestureHandler;
+  friend class InkDropGestureHandler;
   friend class test::InkDropHostViewTestApi;
 
+  // The last user Event to trigger an ink drop ripple animation.
+  std::unique_ptr<ui::LocatedEvent> last_ripple_triggering_event_;
+
   std::unique_ptr<InkDrop> ink_drop_;
 
   // Intentionally declared after |ink_drop_| so that it doesn't access a
diff --git a/ui/views/animation/ink_drop_host_view_unittest.cc b/ui/views/animation/ink_drop_host_view_unittest.cc
new file mode 100644
index 0000000..a9c8bcc
--- /dev/null
+++ b/ui/views/animation/ink_drop_host_view_unittest.cc
@@ -0,0 +1,61 @@
+// 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 "ui/views/animation/ink_drop_host_view.h"
+
+#include "base/macros.h"
+#include "testing/gtest/include/gtest/gtest.h"
+#include "ui/events/event.h"
+#include "ui/events/event_constants.h"
+#include "ui/events/event_utils.h"
+#include "ui/gfx/geometry/point.h"
+#include "ui/gfx/geometry/size.h"
+#include "ui/views/animation/test/ink_drop_host_view_test_api.h"
+
+namespace views {
+namespace test {
+
+class InkDropHostViewTest : public testing::Test {
+ public:
+  InkDropHostViewTest();
+  ~InkDropHostViewTest() override;
+
+ protected:
+  // Test target.
+  InkDropHostView host_view_;
+
+  // Provides internal access to |host_view_| test target.
+  InkDropHostViewTestApi test_api_;
+
+ private:
+  DISALLOW_COPY_AND_ASSIGN(InkDropHostViewTest);
+};
+
+InkDropHostViewTest::InkDropHostViewTest() : test_api_(&host_view_) {}
+
+InkDropHostViewTest::~InkDropHostViewTest() {}
+
+// Verifies the return value of GetInkDropCenterBasedOnLastEvent() for a null
+// Event.
+TEST_F(InkDropHostViewTest, GetInkDropCenterBasedOnLastEventForNullEvent) {
+  host_view_.SetSize(gfx::Size(20, 20));
+  test_api_.AnimateInkDrop(InkDropState::ACTION_PENDING, nullptr);
+  EXPECT_EQ(gfx::Point(10, 10), test_api_.GetInkDropCenterBasedOnLastEvent());
+}
+
+// Verifies the return value of GetInkDropCenterBasedOnLastEvent() for a located
+// Event.
+TEST_F(InkDropHostViewTest, GetInkDropCenterBasedOnLastEventForLocatedEvent) {
+  host_view_.SetSize(gfx::Size(20, 20));
+
+  ui::MouseEvent located_event(ui::ET_MOUSE_PRESSED, gfx::Point(5, 6),
+                               gfx::Point(5, 6), ui::EventTimeForNow(),
+                               ui::EF_LEFT_MOUSE_BUTTON, 0);
+
+  test_api_.AnimateInkDrop(InkDropState::ACTION_PENDING, &located_event);
+  EXPECT_EQ(gfx::Point(5, 6), test_api_.GetInkDropCenterBasedOnLastEvent());
+}
+
+}  // namespace test
+}  // namespace views
diff --git a/ui/views/animation/test/flood_fill_ink_drop_ripple_test_api.cc b/ui/views/animation/test/flood_fill_ink_drop_ripple_test_api.cc
index f499cc5..d71b60a2 100644
--- a/ui/views/animation/test/flood_fill_ink_drop_ripple_test_api.cc
+++ b/ui/views/animation/test/flood_fill_ink_drop_ripple_test_api.cc
@@ -32,6 +32,11 @@
       ink_drop_ripple()->circle_layer_delegate_.GetCenterPoint());
 }
 
+float FloodFillInkDropRippleTestApi::MaxDistanceToCorners(
+    const gfx::Point& point) const {
+  return ink_drop_ripple()->MaxDistanceToCorners(point);
+}
+
 float FloodFillInkDropRippleTestApi::GetCurrentOpacity() const {
   return ink_drop_ripple()->root_layer_.opacity();
 }
diff --git a/ui/views/animation/test/flood_fill_ink_drop_ripple_test_api.h b/ui/views/animation/test/flood_fill_ink_drop_ripple_test_api.h
index 568db56..dc4ed9b5 100644
--- a/ui/views/animation/test/flood_fill_ink_drop_ripple_test_api.h
+++ b/ui/views/animation/test/flood_fill_ink_drop_ripple_test_api.h
@@ -34,6 +34,9 @@
   // coordinate space.
   gfx::Point GetDrawnCenterPoint() const;
 
+  // Wrapper for FloodFillInkDropRipple::MaxDistanceToCorners().
+  float MaxDistanceToCorners(const gfx::Point& point) const;
+
   // InkDropRippleTestApi:
   float GetCurrentOpacity() const override;
 
diff --git a/ui/views/animation/test/ink_drop_host_view_test_api.cc b/ui/views/animation/test/ink_drop_host_view_test_api.cc
index a97628b..957ec20 100644
--- a/ui/views/animation/test/ink_drop_host_view_test_api.cc
+++ b/ui/views/animation/test/ink_drop_host_view_test_api.cc
@@ -17,5 +17,14 @@
   host_view_->ink_drop_ = std::move(ink_drop);
 }
 
+gfx::Point InkDropHostViewTestApi::GetInkDropCenterBasedOnLastEvent() const {
+  return host_view_->GetInkDropCenterBasedOnLastEvent();
+}
+
+void InkDropHostViewTestApi::AnimateInkDrop(InkDropState state,
+                                            const ui::LocatedEvent* event) {
+  host_view_->AnimateInkDrop(state, event);
+}
+
 }  // namespace test
 }  // namespace views
diff --git a/ui/views/animation/test/ink_drop_host_view_test_api.h b/ui/views/animation/test/ink_drop_host_view_test_api.h
index c02dcbf..2bbb820e 100644
--- a/ui/views/animation/test/ink_drop_host_view_test_api.h
+++ b/ui/views/animation/test/ink_drop_host_view_test_api.h
@@ -24,6 +24,12 @@
   void SetInkDrop(std::unique_ptr<InkDrop> ink_drop);
   InkDrop* ink_drop() { return host_view_->ink_drop(); }
 
+  // Wrapper for InkDropHostView::GetInkDropCenterBasedOnLastEvent().
+  gfx::Point GetInkDropCenterBasedOnLastEvent() const;
+
+  // Wrapper for InkDropHostView::AnimateInkDrop().
+  void AnimateInkDrop(InkDropState state, const ui::LocatedEvent* event);
+
  private:
   // The InkDropHostView to provide internal access to.
   InkDropHostView* host_view_;
diff --git a/ui/views/controls/button/custom_button.cc b/ui/views/controls/button/custom_button.cc
index 50cffe92..62b9699 100644
--- a/ui/views/controls/button/custom_button.cc
+++ b/ui/views/controls/button/custom_button.cc
@@ -148,7 +148,7 @@
   if (state_ != STATE_PRESSED && ShouldEnterPushedState(event) &&
       HitTestPoint(event.location())) {
     SetState(STATE_PRESSED);
-    AnimateInkDrop(views::InkDropState::ACTION_PENDING);
+    AnimateInkDrop(views::InkDropState::ACTION_PENDING, &event);
   }
   if (request_focus_on_press_)
     RequestFocus();
@@ -162,19 +162,19 @@
 
 bool CustomButton::OnMouseDragged(const ui::MouseEvent& event) {
   if (state_ != STATE_DISABLED) {
-    bool should_enter_pushed = ShouldEnterPushedState(event);
+    const bool should_enter_pushed = ShouldEnterPushedState(event);
     if (HitTestPoint(event.location())) {
       SetState(should_enter_pushed ? STATE_PRESSED : STATE_HOVERED);
       if (!InDrag() && should_enter_pushed &&
           ink_drop()->GetTargetInkDropState() == views::InkDropState::HIDDEN) {
-        AnimateInkDrop(views::InkDropState::ACTION_PENDING);
+        AnimateInkDrop(views::InkDropState::ACTION_PENDING, &event);
       }
     } else {
       SetState(STATE_NORMAL);
       if (!InDrag() && should_enter_pushed &&
           ink_drop()->GetTargetInkDropState() ==
               views::InkDropState::ACTION_PENDING) {
-        AnimateInkDrop(views::InkDropState::HIDDEN);
+        AnimateInkDrop(views::InkDropState::HIDDEN, &event);
       }
     }
   }
@@ -207,7 +207,7 @@
       !InDrag() || ui::MaterialDesignController::IsModeMaterial();
   if (state_ != STATE_DISABLED && reset_button_state)
     SetState(STATE_NORMAL);
-  AnimateInkDrop(views::InkDropState::HIDDEN);
+  AnimateInkDrop(views::InkDropState::HIDDEN, nullptr /* event */);
 }
 
 void CustomButton::OnMouseEntered(const ui::MouseEvent& event) {
@@ -237,7 +237,7 @@
     SetState(STATE_PRESSED);
     if (ink_drop()->GetTargetInkDropState() !=
         views::InkDropState::ACTION_PENDING) {
-      AnimateInkDrop(views::InkDropState::ACTION_PENDING);
+      AnimateInkDrop(views::InkDropState::ACTION_PENDING, nullptr /* event */);
     }
   } else if (event.key_code() == ui::VKEY_RETURN) {
     SetState(STATE_NORMAL);
@@ -314,7 +314,7 @@
     SetState(STATE_NORMAL);
   if (hide_ink_drop_when_showing_context_menu_) {
     ink_drop()->SetHovered(false);
-    AnimateInkDrop(InkDropState::HIDDEN);
+    AnimateInkDrop(InkDropState::HIDDEN, nullptr /* event */);
   }
   View::ShowContextMenu(p, source_type);
 }
@@ -324,7 +324,7 @@
   // (since disabled buttons may still be able to be dragged).
   if (state_ != STATE_DISABLED)
     SetState(STATE_NORMAL);
-  AnimateInkDrop(InkDropState::HIDDEN);
+  AnimateInkDrop(InkDropState::HIDDEN, nullptr /* event */);
 }
 
 void CustomButton::GetAccessibleState(ui::AXViewState* state) {
@@ -383,9 +383,9 @@
   if (IsHotTracked() || state_ == STATE_PRESSED) {
     SetState(STATE_NORMAL);
     if (ink_drop()->GetTargetInkDropState() != views::InkDropState::HIDDEN)
-      AnimateInkDrop(views::InkDropState::HIDDEN);
+      AnimateInkDrop(views::InkDropState::HIDDEN, nullptr /* event */);
     // TODO(bruthig) : Fix CustomButtons to work well when multiple input
-    // methods are interacting with a button.e.g.By animating to HIDDEN here
+    // methods are interacting with a button. e.g. By animating to HIDDEN here
     // it is possible for a Mouse Release to trigger an action however there
     // would be no visual cue to the user that this will occur.
   }
@@ -460,13 +460,16 @@
 // CustomButton, Button overrides (protected):
 
 void CustomButton::NotifyClick(const ui::Event& event) {
-  if (has_ink_drop_action_on_click_)
-    AnimateInkDrop(InkDropState::ACTION_TRIGGERED);
+  if (has_ink_drop_action_on_click_) {
+    AnimateInkDrop(InkDropState::ACTION_TRIGGERED,
+                   ui::LocatedEvent::FromIfValid(&event));
+  }
   Button::NotifyClick(event);
 }
 
 void CustomButton::OnClickCanceled(const ui::Event& event) {
-  AnimateInkDrop(views::InkDropState::HIDDEN);
+  AnimateInkDrop(views::InkDropState::HIDDEN,
+                 ui::LocatedEvent::FromIfValid(&event));
   Button::OnClickCanceled(event);
 }
 
diff --git a/ui/views/controls/button/label_button.cc b/ui/views/controls/button/label_button.cc
index a1c7843..332911b 100644
--- a/ui/views/controls/button/label_button.cc
+++ b/ui/views/controls/button/label_button.cc
@@ -21,6 +21,7 @@
 #include "ui/native_theme/native_theme.h"
 #include "ui/views/animation/flood_fill_ink_drop_ripple.h"
 #include "ui/views/animation/ink_drop_highlight.h"
+#include "ui/views/animation/square_ink_drop_ripple.h"
 #include "ui/views/background.h"
 #include "ui/views/controls/button/label_button_border.h"
 #include "ui/views/painter.h"
@@ -439,27 +440,25 @@
 }
 
 std::unique_ptr<views::InkDropRipple> LabelButton::CreateInkDropRipple() const {
-  return GetText().empty() ? CustomButton::CreateInkDropRipple()
-                           : base::WrapUnique(new views::FloodFillInkDropRipple(
-                                 GetLocalBounds(), GetInkDropCenter(),
-                                 GetInkDropBaseColor()));
+  return GetText().empty()
+             ? CreateDefaultInkDropRipple(
+                   image()->GetMirroredBounds().CenterPoint())
+             : std::unique_ptr<views::InkDropRipple>(
+                   new views::FloodFillInkDropRipple(
+                       GetLocalBounds(), GetInkDropCenterBasedOnLastEvent(),
+                       GetInkDropBaseColor()));
 }
 
 std::unique_ptr<views::InkDropHighlight> LabelButton::CreateInkDropHighlight()
     const {
   if (!ShouldShowInkDropHighlight())
     return nullptr;
-  return GetText().empty() ? CustomButton::CreateInkDropHighlight()
-                           : base::WrapUnique(new views::InkDropHighlight(
-                                 size(), kInkDropSmallCornerRadius,
-                                 GetInkDropCenter(), GetInkDropBaseColor()));
-}
-
-gfx::Point LabelButton::GetInkDropCenter() const {
-  // TODO(bruthig): Make the flood fill ink drops centered on the LocatedEvent
-  // that triggered them.
-  return GetText().empty() ? image()->GetMirroredBounds().CenterPoint()
-                           : CustomButton::GetInkDropCenter();
+  return GetText().empty()
+             ? CreateDefaultInkDropHighlight(
+                   image()->GetMirroredBounds().CenterPoint())
+             : base::WrapUnique(new views::InkDropHighlight(
+                   size(), kInkDropSmallCornerRadius,
+                   GetLocalBounds().CenterPoint(), GetInkDropBaseColor()));
 }
 
 void LabelButton::StateChanged() {
diff --git a/ui/views/controls/button/label_button.h b/ui/views/controls/button/label_button.h
index 3776402c..420b601 100644
--- a/ui/views/controls/button/label_button.h
+++ b/ui/views/controls/button/label_button.h
@@ -106,7 +106,6 @@
   void RemoveInkDropLayer(ui::Layer* ink_drop_layer) override;
   std::unique_ptr<InkDropRipple> CreateInkDropRipple() const override;
   std::unique_ptr<InkDropHighlight> CreateInkDropHighlight() const override;
-  gfx::Point GetInkDropCenter() const override;
 
  protected:
   ImageView* image() const { return image_; }
diff --git a/ui/views/controls/button/menu_button.cc b/ui/views/controls/button/menu_button.cc
index 20b34523..b891849 100644
--- a/ui/views/controls/button/menu_button.cc
+++ b/ui/views/controls/button/menu_button.cc
@@ -13,6 +13,7 @@
 #include "ui/display/screen.h"
 #include "ui/events/event.h"
 #include "ui/events/event_constants.h"
+#include "ui/events/event_utils.h"
 #include "ui/gfx/canvas.h"
 #include "ui/gfx/image/image.h"
 #include "ui/gfx/text_constants.h"
@@ -147,8 +148,10 @@
 
     menu_closed_time_ = TimeTicks::Now();
 
-    if (!increment_pressed_lock_called && pressed_lock_count_ == 0)
-      AnimateInkDrop(InkDropState::ACTION_TRIGGERED);
+    if (!increment_pressed_lock_called && pressed_lock_count_ == 0) {
+      AnimateInkDrop(InkDropState::ACTION_TRIGGERED,
+                     ui::LocatedEvent::FromIfValid(event));
+    }
 
     // We must return false here so that the RootView does not get stuck
     // sending all mouse pressed events to us instead of the appropriate
@@ -156,7 +159,7 @@
     return false;
   }
 
-  AnimateInkDrop(InkDropState::HIDDEN);
+  AnimateInkDrop(InkDropState::HIDDEN, ui::LocatedEvent::FromIfValid(event));
   return true;
 }
 
@@ -222,7 +225,7 @@
       HitTestPoint(event.location()) && !InDrag()) {
     Activate(&event);
   } else {
-    AnimateInkDrop(InkDropState::HIDDEN);
+    AnimateInkDrop(InkDropState::HIDDEN, &event);
     LabelButton::OnMouseReleased(event);
   }
 }
@@ -376,7 +379,7 @@
     if (snap_ink_drop_to_activated)
       ink_drop()->SnapToActivated();
     else
-      AnimateInkDrop(InkDropState::ACTIVATED);
+      AnimateInkDrop(InkDropState::ACTIVATED, nullptr /* event */);
   }
   SetState(STATE_PRESSED);
 }
@@ -398,7 +401,7 @@
     // The widget may be null during shutdown. If so, it doesn't make sense to
     // try to add an ink drop effect.
     if (GetWidget() && state() != STATE_PRESSED)
-      AnimateInkDrop(InkDropState::DEACTIVATED);
+      AnimateInkDrop(InkDropState::DEACTIVATED, nullptr /* event */);
   }
 }
 
diff --git a/ui/views/views.gyp b/ui/views/views.gyp
index c4bc8d4..eb8dcef9 100644
--- a/ui/views/views.gyp
+++ b/ui/views/views.gyp
@@ -578,6 +578,7 @@
       'animation/bounds_animator_unittest.cc',
       'animation/flood_fill_ink_drop_ripple_unittest.cc',
       'animation/ink_drop_highlight_unittest.cc',
+      'animation/ink_drop_host_view_unittest.cc',
       'animation/ink_drop_impl_unittest.cc',
       'animation/ink_drop_ripple_unittest.cc',
       'animation/ink_drop_unittest.cc',