diff --git a/.gitignore b/.gitignore
index ef1d2f6..597b6a7 100644
--- a/.gitignore
+++ b/.gitignore
@@ -61,7 +61,6 @@
 /android_emulator_sdk
 /ash/ash_unittests_run.xml
 /base/base_unittests_run.xml
-/breakpad/src/
 # See build/.gitignore for entries covering src/build.
 /buildtools
 # The Chrome OS build creates a /c symlink due to http://crbug.com/54866.
diff --git a/.gn b/.gn
index c4833e2..7a7160d 100644
--- a/.gn
+++ b/.gn
@@ -64,7 +64,6 @@
   "//ash/*",
   "//base/*",
   "//blink/*",
-  "//breakpad/*",
   "//build/*",
   "//cc/*",
 
@@ -135,6 +134,7 @@
   "//testing/*",
 
   #"//third_party/*",  # May not ever want this.
+  "//third_party/breakpad/*",
   "//third_party/brotli/*",
   "//third_party/hunspell/*",
   "//third_party/leveldatabase/*",
diff --git a/BUILD.gn b/BUILD.gn
index b75af2f..edbdca4 100644
--- a/BUILD.gn
+++ b/BUILD.gn
@@ -364,10 +364,10 @@
 
   if (is_linux || is_android) {
     deps += [
-      "//breakpad:breakpad_unittests",
-      "//breakpad:core-2-minidump",
-      "//breakpad:generate_test_dump",
-      "//breakpad:minidump-2-core",
+      "//third_party/breakpad:breakpad_unittests",
+      "//third_party/breakpad:core-2-minidump",
+      "//third_party/breakpad:generate_test_dump",
+      "//third_party/breakpad:minidump-2-core",
     ]
   }
 
@@ -508,16 +508,16 @@
 
   if (is_android || (is_linux && !is_chromeos)) {
     deps += [
-      "//breakpad:dump_syms($host_toolchain)",
-      "//breakpad:microdump_stackwalk($host_toolchain)",
-      "//breakpad:minidump_dump($host_toolchain)",
-      "//breakpad:minidump_stackwalk($host_toolchain)",
       "//components/network_hints/browser",
       "//content/public/app:browser",
       "//content/public/app:child",
       "//mojo/edk/test:mojo_public_system_perftests",
       "//services/service_manager/public/cpp",
       "//testing/gmock:gmock_main",
+      "//third_party/breakpad:dump_syms($host_toolchain)",
+      "//third_party/breakpad:microdump_stackwalk($host_toolchain)",
+      "//third_party/breakpad:minidump_dump($host_toolchain)",
+      "//third_party/breakpad:minidump_stackwalk($host_toolchain)",
     ]
 
     if (!is_android) {
@@ -547,9 +547,9 @@
 
   if (is_mac) {
     deps += [
-      "//breakpad:crash_inspector",
-      "//breakpad:dump_syms",
       "//third_party/apple_sample_code",
+      "//third_party/breakpad:crash_inspector",
+      "//third_party/breakpad:dump_syms",
       "//third_party/molokocacao",
     ]
     deps -= [
@@ -585,7 +585,7 @@
           [ "//chrome/installer/mini_installer:next_version_mini_installer" ]
     }
   } else if (!is_android && !is_ios && !is_fuchsia) {
-    deps += [ "//breakpad:symupload($host_toolchain)" ]
+    deps += [ "//third_party/breakpad:symupload($host_toolchain)" ]
   }
 
   if (is_chromecast) {
@@ -813,13 +813,13 @@
   group("chromiumos_preflight") {
     testonly = true
     deps = [
-      "//breakpad:minidump_stackwalk($host_toolchain)",
       "//chrome",
       "//chrome/test/chromedriver",
       "//media:media_unittests",
       "//ppapi/examples/video_decode",
       "//sandbox/linux:chrome_sandbox",
       "//sandbox/linux:sandbox_linux_unittests",
+      "//third_party/breakpad:minidump_stackwalk($host_toolchain)",
 
       # Blocked on https://github.com/catapult-project/catapult/issues/2297
       #"//third_party/catapult/telemetry:bitmaptools",
@@ -913,12 +913,12 @@
 
     if (is_android) {
       data_deps += [
-        "//breakpad:breakpad_unittests",
-        "//breakpad:dump_syms",
-        "//breakpad:microdump_stackwalk",
-        "//breakpad:minidump_dump",
-        "//breakpad:minidump_stackwalk",
-        "//breakpad:symupload",
+        "//third_party/breakpad:breakpad_unittests",
+        "//third_party/breakpad:dump_syms",
+        "//third_party/breakpad:microdump_stackwalk",
+        "//third_party/breakpad:minidump_dump",
+        "//third_party/breakpad:minidump_stackwalk",
+        "//third_party/breakpad:symupload",
         "//tools/android/forwarder2",
       ]
     }
@@ -928,15 +928,16 @@
     }
 
     if (!is_win && !is_android) {
-      data_deps += [ "//breakpad:minidump_stackwalk($host_toolchain)" ]
+      data_deps +=
+          [ "//third_party/breakpad:minidump_stackwalk($host_toolchain)" ]
     }
 
     if (is_mac) {
-      data_deps += [ "//breakpad:dump_syms($host_toolchain)" ]
+      data_deps += [ "//third_party/breakpad:dump_syms($host_toolchain)" ]
     }
 
     if (is_linux) {
-      data_deps += [ "//breakpad:dump_syms($host_toolchain)" ]
+      data_deps += [ "//third_party/breakpad:dump_syms($host_toolchain)" ]
     }
 
     data = [
@@ -1054,7 +1055,8 @@
         "//chrome/test:angle_perftests",
       ]
     } else {
-      data_deps += [ "//breakpad:minidump_stackwalk($host_toolchain)" ]
+      data_deps +=
+          [ "//third_party/breakpad:minidump_stackwalk($host_toolchain)" ]
     }
   }
 }
diff --git a/DEPS b/DEPS
index 5249be58..62d84b66ed 100644
--- a/DEPS
+++ b/DEPS
@@ -45,11 +45,11 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling Skia
   # and whatever else without interference from each other.
-  'skia_revision': '0e4e410ac8042d880923f87c8a7c325539896344',
+  'skia_revision': 'cb9adf7c6e81bf0bf4825afddf7732810f174ea2',
   # 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': '306bf06e29993ae06c926d27f5683e2a23566d74',
+  'v8_revision': 'c42c017f8423a0e142efc00599336d16cc50ec2f',
   # 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.
@@ -101,7 +101,7 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling catapult
   # and whatever else without interference from each other.
-  'catapult_revision': 'a8018a6284d053d1c80ee0119ee33bd80ff7fae9',
+  'catapult_revision': '9a255f51046c55ea3c209acd64e36d8a5bd46fa4',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling libFuzzer
   # and whatever else without interference from each other.
@@ -135,8 +135,8 @@
     'condition': 'checkout_src_internal',
   },
 
-  'src/breakpad/src':
-    Var('chromium_git') + '/breakpad/breakpad/src.git' + '@' + '6b59fc07474c9338e7727c52a6d8a92010a105ad',
+  'src/third_party/breakpad/breakpad':
+    Var('chromium_git') + '/breakpad/breakpad.git' + '@' + '1c6d1613966eab5d77531e85f3b60c40124b43f0',
 
   'src/buildtools':
     Var('chromium_git') + '/chromium/buildtools.git' + '@' +  Var('buildtools_revision'),
@@ -542,11 +542,11 @@
 
 # checkdeps.py shouldn't check include paths for files in these dirs:
 skip_child_includes = [
-  'breakpad',
   'native_client_sdk',
   'out',
   'skia',
   'testing',
+  'third_party/breakpad/breakpad',
   'v8',
   'win8',
 ]
diff --git a/PRESUBMIT.py b/PRESUBMIT.py
index be5db1d8..efe5574 100644
--- a/PRESUBMIT.py
+++ b/PRESUBMIT.py
@@ -10,13 +10,13 @@
 
 
 _EXCLUDED_PATHS = (
-    r"^breakpad[\\\/].*",
     r"^native_client_sdk[\\\/]src[\\\/]build_tools[\\\/]make_rules.py",
     r"^native_client_sdk[\\\/]src[\\\/]build_tools[\\\/]make_simple.py",
     r"^native_client_sdk[\\\/]src[\\\/]tools[\\\/].*.mk",
     r"^net[\\\/]tools[\\\/]spdyshark[\\\/].*",
     r"^skia[\\\/].*",
     r"^third_party[\\\/](WebKit|blink)[\\\/].*",
+    r"^third_party[\\\/]breakpad[\\\/].*",
     r"^v8[\\\/].*",
     r".*MakeFile$",
     r".+_autogen\.h$",
diff --git a/android_webview/browser/browser_view_renderer.cc b/android_webview/browser/browser_view_renderer.cc
index a22dba7..75b88755 100644
--- a/android_webview/browser/browser_view_renderer.cc
+++ b/android_webview/browser/browser_view_renderer.cc
@@ -17,7 +17,7 @@
 #include "base/strings/stringprintf.h"
 #include "base/supports_user_data.h"
 #include "base/trace_event/trace_event_argument.h"
-#include "cc/output/compositor_frame.h"
+#include "components/viz/common/quads/compositor_frame.h"
 #include "content/public/browser/render_process_host.h"
 #include "content/public/browser/render_view_host.h"
 #include "content/public/browser/web_contents.h"
diff --git a/android_webview/browser/browser_view_renderer_unittest.cc b/android_webview/browser/browser_view_renderer_unittest.cc
index 5c1dbdc..0b373600 100644
--- a/android_webview/browser/browser_view_renderer_unittest.cc
+++ b/android_webview/browser/browser_view_renderer_unittest.cc
@@ -15,7 +15,7 @@
 #include "base/memory/ptr_util.h"
 #include "base/single_thread_task_runner.h"
 #include "base/threading/thread_task_runner_handle.h"
-#include "cc/output/compositor_frame.h"
+#include "components/viz/common/quads/compositor_frame.h"
 #include "content/public/test/test_synchronous_compositor_android.h"
 
 namespace android_webview {
diff --git a/android_webview/browser/child_frame.cc b/android_webview/browser/child_frame.cc
index ce87860..86dd2ffa 100644
--- a/android_webview/browser/child_frame.cc
+++ b/android_webview/browser/child_frame.cc
@@ -7,14 +7,14 @@
 #include <utility>
 
 #include "base/trace_event/trace_event.h"
-#include "cc/output/compositor_frame.h"
+#include "components/viz/common/quads/compositor_frame.h"
 
 namespace android_webview {
 
 ChildFrame::ChildFrame(
     scoped_refptr<content::SynchronousCompositor::FrameFuture> frame_future,
     uint32_t layer_tree_frame_sink_id,
-    std::unique_ptr<cc::CompositorFrame> frame,
+    std::unique_ptr<viz::CompositorFrame> frame,
     const CompositorID& compositor_id,
     bool viewport_rect_for_tile_priority_empty,
     const gfx::Transform& transform_for_tile_priority,
diff --git a/android_webview/browser/child_frame.h b/android_webview/browser/child_frame.h
index e976bfc..b9fe825 100644
--- a/android_webview/browser/child_frame.h
+++ b/android_webview/browser/child_frame.h
@@ -15,7 +15,7 @@
 #include "ui/gfx/geometry/size.h"
 #include "ui/gfx/transform.h"
 
-namespace cc {
+namespace viz {
 class CompositorFrame;
 }
 
@@ -26,7 +26,7 @@
   ChildFrame(
       scoped_refptr<content::SynchronousCompositor::FrameFuture> frame_future,
       uint32_t layer_tree_frame_sink_id,
-      std::unique_ptr<cc::CompositorFrame> frame,
+      std::unique_ptr<viz::CompositorFrame> frame,
       const CompositorID& compositor_id,
       bool viewport_rect_for_tile_priority_empty,
       const gfx::Transform& transform_for_tile_priority,
@@ -42,7 +42,7 @@
   scoped_refptr<content::SynchronousCompositor::FrameFuture> frame_future;
   // These two fields are not const to make async path easier.
   uint32_t layer_tree_frame_sink_id;
-  std::unique_ptr<cc::CompositorFrame> frame;
+  std::unique_ptr<viz::CompositorFrame> frame;
   // The id of the compositor this |frame| comes from.
   const CompositorID compositor_id;
   const bool viewport_rect_for_tile_priority_empty;
diff --git a/android_webview/browser/hardware_renderer.cc b/android_webview/browser/hardware_renderer.cc
index 3a77766..d8ef6ae 100644
--- a/android_webview/browser/hardware_renderer.cc
+++ b/android_webview/browser/hardware_renderer.cc
@@ -14,7 +14,7 @@
 #include "android_webview/public/browser/draw_gl.h"
 #include "base/memory/ptr_util.h"
 #include "base/trace_event/trace_event.h"
-#include "cc/output/compositor_frame.h"
+#include "components/viz/common/quads/compositor_frame.h"
 #include "components/viz/common/surfaces/local_surface_id_allocator.h"
 #include "components/viz/service/frame_sinks/compositor_frame_sink_support.h"
 #include "components/viz/service/frame_sinks/frame_sink_manager_impl.h"
@@ -121,7 +121,7 @@
           child_frame_->layer_tree_frame_sink_id;
     }
 
-    std::unique_ptr<cc::CompositorFrame> child_compositor_frame =
+    std::unique_ptr<viz::CompositorFrame> child_compositor_frame =
         std::move(child_frame_->frame);
 
     float device_scale_factor = child_compositor_frame->device_scale_factor();
diff --git a/android_webview/browser/render_thread_manager.cc b/android_webview/browser/render_thread_manager.cc
index a34e3df..7dad422 100644
--- a/android_webview/browser/render_thread_manager.cc
+++ b/android_webview/browser/render_thread_manager.cc
@@ -22,7 +22,7 @@
 #include "base/time/time.h"
 #include "base/trace_event/trace_event.h"
 #include "base/trace_event/trace_event_argument.h"
-#include "cc/output/compositor_frame.h"
+#include "components/viz/common/quads/compositor_frame.h"
 
 namespace android_webview {
 
diff --git a/android_webview/browser/surfaces_instance.cc b/android_webview/browser/surfaces_instance.cc
index 3961c27..d305da1a 100644
--- a/android_webview/browser/surfaces_instance.cc
+++ b/android_webview/browser/surfaces_instance.cc
@@ -146,7 +146,7 @@
                        viz::SurfaceDrawQuadType::PRIMARY, SK_ColorWHITE,
                        nullptr);
 
-  cc::CompositorFrame frame;
+  viz::CompositorFrame frame;
   // We draw synchronously, so acknowledge a manual BeginFrame.
   frame.metadata.begin_frame_ack =
       viz::BeginFrameAck::CreateManualAckWithDamage();
@@ -196,7 +196,7 @@
   viz::SolidColorDrawQuad* solid_quad =
       render_pass->CreateAndAppendDrawQuad<viz::SolidColorDrawQuad>();
   solid_quad->SetNew(quad_state, rect, rect, SK_ColorBLACK, false);
-  cc::CompositorFrame frame;
+  viz::CompositorFrame frame;
   frame.render_pass_list.push_back(std::move(render_pass));
   // We draw synchronously, so acknowledge a manual BeginFrame.
   frame.metadata.begin_frame_ack =
diff --git a/android_webview/browser/test/rendering_test.cc b/android_webview/browser/test/rendering_test.cc
index 6b4ce751..4fb908f7 100644
--- a/android_webview/browser/test/rendering_test.cc
+++ b/android_webview/browser/test/rendering_test.cc
@@ -15,7 +15,7 @@
 #include "base/memory/ptr_util.h"
 #include "base/message_loop/message_loop.h"
 #include "base/threading/thread_task_runner_handle.h"
-#include "cc/output/compositor_frame.h"
+#include "components/viz/common/quads/compositor_frame.h"
 #include "components/viz/test/compositor_frame_helpers.h"
 #include "content/public/browser/android/synchronous_compositor.h"
 #include "content/public/test/test_synchronous_compositor_android.h"
@@ -117,8 +117,8 @@
   return browser_view_renderer_->GetActiveCompositorForTesting();
 }
 
-std::unique_ptr<cc::CompositorFrame> RenderingTest::ConstructEmptyFrame() {
-  auto compositor_frame = base::MakeUnique<cc::CompositorFrame>(
+std::unique_ptr<viz::CompositorFrame> RenderingTest::ConstructEmptyFrame() {
+  auto compositor_frame = base::MakeUnique<viz::CompositorFrame>(
       viz::test::MakeEmptyCompositorFrame());
   std::unique_ptr<viz::RenderPass> root_pass(viz::RenderPass::Create());
   gfx::Rect viewport(browser_view_renderer_->size());
@@ -127,9 +127,9 @@
   return compositor_frame;
 }
 
-std::unique_ptr<cc::CompositorFrame> RenderingTest::ConstructFrame(
+std::unique_ptr<viz::CompositorFrame> RenderingTest::ConstructFrame(
     viz::ResourceId resource_id) {
-  std::unique_ptr<cc::CompositorFrame> compositor_frame(ConstructEmptyFrame());
+  std::unique_ptr<viz::CompositorFrame> compositor_frame(ConstructEmptyFrame());
   viz::TransferableResource resource;
   resource.id = resource_id;
   compositor_frame->resource_list.push_back(resource);
diff --git a/android_webview/browser/test/rendering_test.h b/android_webview/browser/test/rendering_test.h
index 92da855f..23ccd48 100644
--- a/android_webview/browser/test/rendering_test.h
+++ b/android_webview/browser/test/rendering_test.h
@@ -20,10 +20,6 @@
 class MessageLoop;
 }
 
-namespace cc {
-class CompositorFrame;
-}
-
 namespace content {
 class SynchronousCompositor;
 class TestSynchronousCompositor;
@@ -33,6 +29,10 @@
 class TouchHandleDrawable;
 }
 
+namespace viz {
+class CompositorFrame;
+}
+
 namespace android_webview {
 
 class BrowserViewRenderer;
@@ -86,8 +86,8 @@
   void InitializeCompositor();
   void EndTest();
   content::SynchronousCompositor* ActiveCompositor() const;
-  std::unique_ptr<cc::CompositorFrame> ConstructEmptyFrame();
-  std::unique_ptr<cc::CompositorFrame> ConstructFrame(
+  std::unique_ptr<viz::CompositorFrame> ConstructEmptyFrame();
+  std::unique_ptr<viz::CompositorFrame> ConstructFrame(
       viz::ResourceId resource_id);
   scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner_;
   std::unique_ptr<FakeWindow> window_;
diff --git a/android_webview/javatests/src/org/chromium/android_webview/test/ClientOnPageFinishedTest.java b/android_webview/javatests/src/org/chromium/android_webview/test/ClientOnPageFinishedTest.java
index 476edaac..259af84 100644
--- a/android_webview/javatests/src/org/chromium/android_webview/test/ClientOnPageFinishedTest.java
+++ b/android_webview/javatests/src/org/chromium/android_webview/test/ClientOnPageFinishedTest.java
@@ -18,9 +18,9 @@
 import org.chromium.android_webview.AwContents;
 import org.chromium.android_webview.test.util.CommonResources;
 import org.chromium.android_webview.test.util.JSUtils;
+import org.chromium.base.test.util.DisabledTest;
 import org.chromium.base.test.util.Feature;
 import org.chromium.base.test.util.FlakyTest;
-import org.chromium.base.test.util.RetryOnFailure;
 import org.chromium.content.browser.test.util.TestCallbackHelperContainer;
 import org.chromium.content_public.common.ContentUrlConstants;
 import org.chromium.net.test.util.TestWebServer;
@@ -472,9 +472,9 @@
      * Ensure onPageFinished is called when a provisional load is cancelled.
      */
     @Test
-    @MediumTest
-    @Feature({"AndroidWebView"})
-    @RetryOnFailure
+    //@MediumTest
+    //@Feature({"AndroidWebView"})
+    @DisabledTest(message = "crbug.com/683384")
     public void testCalledOnCancelingProvisionalLoad() throws Throwable {
         TestWebServer webServer = TestWebServer.start();
         final CountDownLatch testDoneLatch = new CountDownLatch(1);
diff --git a/ash/app_list/app_list_presenter_delegate_unittest.cc b/ash/app_list/app_list_presenter_delegate_unittest.cc
index f43a3208..d3129f8 100644
--- a/ash/app_list/app_list_presenter_delegate_unittest.cc
+++ b/ash/app_list/app_list_presenter_delegate_unittest.cc
@@ -1020,13 +1020,20 @@
   ASSERT_EQ(app_list::AppListView::FULLSCREEN_ALL_APPS, view->app_list_state());
 }
 
-TEST_F(FullscreenAppListPresenterDelegateTest,
+TEST_P(FullscreenAppListPresenterDelegateTest,
        LongUpwardDragInFullscreenShouldNotClose) {
+  const bool test_fullscreen_search = GetParam();
   app_list_presenter_impl()->Show(GetPrimaryDisplayId());
   app_list::AppListView* view = app_list_presenter_impl()->GetView();
   FlingUpOrDown(GetEventGenerator(), view, true);
   EXPECT_EQ(app_list::AppListView::FULLSCREEN_ALL_APPS, view->app_list_state());
 
+  if (test_fullscreen_search) {
+    // Enter a character into the searchbox to transition to FULLSCREEN_SEARCH.
+    GetEventGenerator().PressKey(ui::VKEY_0, 0);
+    EXPECT_EQ(app_list::AppListView::FULLSCREEN_SEARCH, view->app_list_state());
+  }
+
   // Drag from the center of the applist to the top of the screen very slowly.
   // This should not trigger a state transition.
   gfx::Point drag_start = view->GetBoundsInScreen().CenterPoint();
@@ -1038,8 +1045,11 @@
       GetEventGenerator().CalculateScrollDurationForFlingVelocity(
           drag_start, drag_end, 1, 1000),
       1000);
-
-  EXPECT_EQ(app_list::AppListView::FULLSCREEN_ALL_APPS, view->app_list_state());
+  if (test_fullscreen_search)
+    EXPECT_EQ(app_list::AppListView::FULLSCREEN_SEARCH, view->app_list_state());
+  else
+    EXPECT_EQ(app_list::AppListView::FULLSCREEN_ALL_APPS,
+              view->app_list_state());
 }
 
 }  // namespace ash
diff --git a/ash/fast_ink/fast_ink_view.cc b/ash/fast_ink/fast_ink_view.cc
index f742950..6c87fbb 100644
--- a/ash/fast_ink/fast_ink_view.cc
+++ b/ash/fast_ink/fast_ink_view.cc
@@ -12,9 +12,9 @@
 #include "ash/shell.h"
 #include "base/threading/thread_task_runner_handle.h"
 #include "cc/base/math_util.h"
-#include "cc/output/compositor_frame.h"
 #include "cc/trees/layer_tree_frame_sink.h"
 #include "components/viz/common/gpu/context_provider.h"
+#include "components/viz/common/quads/compositor_frame.h"
 #include "components/viz/common/quads/texture_draw_quad.h"
 #include "gpu/command_buffer/client/gles2_interface.h"
 #include "gpu/command_buffer/client/gpu_memory_buffer_manager.h"
@@ -399,7 +399,7 @@
       /*is_clipped=*/false, /*are_contents_opaque=*/false, /*opacity=*/1.f,
       /*blend_mode=*/SkBlendMode::kSrcOver, /*sorting_context_id=*/0);
 
-  cc::CompositorFrame frame;
+  viz::CompositorFrame frame;
   // TODO(eseckler): FastInkView should use BeginFrames and set the ack
   // accordingly.
   frame.metadata.begin_frame_ack =
diff --git a/ash/mus/non_client_frame_controller_unittest.cc b/ash/mus/non_client_frame_controller_unittest.cc
index ff0fa9a..a1f14d05 100644
--- a/ash/mus/non_client_frame_controller_unittest.cc
+++ b/ash/mus/non_client_frame_controller_unittest.cc
@@ -10,8 +10,8 @@
 #include "ash/test/ash_test_base.h"
 #include "ash/test/ash_test_helper.h"
 #include "cc/base/math_util.h"
-#include "cc/output/compositor_frame.h"
 #include "cc/trees/layer_tree_settings.h"
+#include "components/viz/common/quads/compositor_frame.h"
 #include "components/viz/common/quads/solid_color_draw_quad.h"
 #include "services/ui/public/interfaces/window_manager_constants.mojom.h"
 #include "ui/aura/env.h"
@@ -31,7 +31,7 @@
       quad->shared_quad_state->quad_to_target_transform, quad->visible_rect);
 }
 
-bool FindAnyQuad(const cc::CompositorFrame& frame,
+bool FindAnyQuad(const viz::CompositorFrame& frame,
                  const gfx::Rect& screen_rect) {
   DCHECK_EQ(1u, frame.render_pass_list.size());
   const auto& quad_list = frame.render_pass_list[0]->quad_list;
@@ -42,7 +42,7 @@
   return false;
 }
 
-bool FindColorQuad(const cc::CompositorFrame& frame,
+bool FindColorQuad(const viz::CompositorFrame& frame,
                    const gfx::Rect& screen_rect,
                    SkColor color) {
   DCHECK_EQ(1u, frame.render_pass_list.size());
@@ -60,7 +60,7 @@
   return false;
 }
 
-bool FindTiledContentQuad(const cc::CompositorFrame& frame,
+bool FindTiledContentQuad(const viz::CompositorFrame& frame,
                           const gfx::Rect& screen_rect) {
   DCHECK_EQ(1u, frame.render_pass_list.size());
   const auto& quad_list = frame.render_pass_list[0]->quad_list;
@@ -79,7 +79,7 @@
   NonClientFrameControllerTest() = default;
   ~NonClientFrameControllerTest() override = default;
 
-  const cc::CompositorFrame& GetLastCompositorFrame() const {
+  const viz::CompositorFrame& GetLastCompositorFrame() const {
     return context_factory_.GetLastCompositorFrame();
   }
 
@@ -138,7 +138,7 @@
   compositor->ScheduleDraw();
   ui::DrawWaiterForTest::WaitForCompositingEnded(compositor);
   {
-    const cc::CompositorFrame& frame = GetLastCompositorFrame();
+    const viz::CompositorFrame& frame = GetLastCompositorFrame();
     ASSERT_EQ(1u, frame.render_pass_list.size());
     EXPECT_TRUE(FindColorQuad(frame, kTileBounds, SK_ColorBLACK));
   }
@@ -152,7 +152,7 @@
   ui::DrawWaiterForTest::WaitForCompositingEnded(compositor);
   {
     // This time, that tile for the wallpaper will not be drawn.
-    const cc::CompositorFrame& frame = GetLastCompositorFrame();
+    const viz::CompositorFrame& frame = GetLastCompositorFrame();
     ASSERT_EQ(1u, frame.render_pass_list.size());
     EXPECT_FALSE(FindColorQuad(frame, kTileBounds, SK_ColorBLACK));
 
diff --git a/ash/shelf/shelf_button.cc b/ash/shelf/shelf_button.cc
index 19046f5..bf24c1a1 100644
--- a/ash/shelf/shelf_button.cc
+++ b/ash/shelf/shelf_button.cc
@@ -17,6 +17,7 @@
 #include "skia/ext/image_operations.h"
 #include "ui/accessibility/ax_node_data.h"
 #include "ui/compositor/layer.h"
+#include "ui/compositor/scoped_layer_animation_settings.h"
 #include "ui/gfx/animation/animation_delegate.h"
 #include "ui/gfx/animation/throb_animation.h"
 #include "ui/gfx/canvas.h"
@@ -24,6 +25,7 @@
 #include "ui/gfx/image/image_skia_operations.h"
 #include "ui/gfx/scoped_canvas.h"
 #include "ui/gfx/skbitmap_operations.h"
+#include "ui/gfx/transform_util.h"
 #include "ui/views/animation/ink_drop_impl.h"
 #include "ui/views/animation/square_ink_drop_ripple.h"
 #include "ui/views/controls/image_view.h"
@@ -31,21 +33,30 @@
 
 namespace {
 
-const int kIconSize = 32;
-const int kAttentionThrobDurationMS = 800;
-const int kMaxAnimationSeconds = 10;
-const int kIndicatorOffsetFromBottom = 3;
-const int kIndicatorRadiusDip = 2;
-const SkColor kIndicatorColor = SK_ColorWHITE;
+constexpr int kIconSize = 32;
+constexpr int kAttentionThrobDurationMS = 800;
+constexpr int kMaxAnimationSeconds = 10;
+constexpr int kIndicatorOffsetFromBottom = 3;
+constexpr int kIndicatorRadiusDip = 2;
+constexpr SkColor kIndicatorColor = SK_ColorWHITE;
 
 // Shelf item ripple constants.
-const int kInkDropSmallSize = 48;
-const int kInkDropLargeSize = 60;
+constexpr int kInkDropSmallSize = 48;
+constexpr int kInkDropLargeSize = 60;
 
 // Padding from the edge of the shelf to the application icon when the shelf
 // is horizontally and vertically aligned, respectively.
-const int kIconPaddingHorizontal = 7;
-const int kIconPaddingVertical = 8;
+constexpr int kIconPaddingHorizontal = 7;
+constexpr int kIconPaddingVertical = 8;
+
+// The time threshold before an item can be dragged by touch events.
+constexpr int kTouchDragTimeThresholdMs = 300;
+
+// The drag and drop app icon should get scaled by this factor.
+constexpr float kAppIconScale = 1.2f;
+
+// The drag and drop app icon scaling up or down animation transition duration.
+constexpr int kDragDropAppIconScaleTransitionMs = 20;
 
 // Simple AnimationDelegate that owns a single ThrobAnimation instance to
 // keep all Draw Attention animations in sync.
@@ -285,6 +296,9 @@
     Layout();
     if (state & STATE_ATTENTION)
       indicator_->ShowAttention(true);
+
+    if (state & STATE_TOUCH_DRAGGING)
+      ScaleAppIcon(true);
   }
 }
 
@@ -294,6 +308,9 @@
     Layout();
     if (state & STATE_ATTENTION)
       indicator_->ShowAttention(false);
+
+    if (state & STATE_TOUCH_DRAGGING)
+      ScaleAppIcon(false);
   }
 }
 
@@ -444,30 +461,49 @@
   switch (event->type()) {
     case ui::ET_GESTURE_TAP_DOWN:
       AddState(STATE_HOVERED);
-      return Button::OnGestureEvent(event);
+      touch_drag_timer_.Start(
+          FROM_HERE,
+          base::TimeDelta::FromMilliseconds(kTouchDragTimeThresholdMs),
+          base::Bind(&ShelfButton::OnTouchDragTimer, base::Unretained(this)));
+      event->SetHandled();
+      break;
     case ui::ET_GESTURE_END:
+      touch_drag_timer_.Stop();
       ClearState(STATE_HOVERED);
-      return Button::OnGestureEvent(event);
+      ClearState(STATE_TOUCH_DRAGGING);
+      break;
     case ui::ET_GESTURE_SCROLL_BEGIN:
-      shelf_view_->PointerPressedOnButton(this, ShelfView::TOUCH, *event);
-      event->SetHandled();
-      return;
+      if (state_ & STATE_TOUCH_DRAGGING) {
+        shelf_view_->PointerPressedOnButton(this, ShelfView::TOUCH, *event);
+        event->SetHandled();
+      } else {
+        touch_drag_timer_.Stop();
+      }
+      break;
     case ui::ET_GESTURE_SCROLL_UPDATE:
-      shelf_view_->PointerDraggedOnButton(this, ShelfView::TOUCH, *event);
-      event->SetHandled();
-      return;
+      if ((state_ & STATE_TOUCH_DRAGGING) && shelf_view_->IsDraggedView(this)) {
+        shelf_view_->PointerDraggedOnButton(this, ShelfView::TOUCH, *event);
+        event->SetHandled();
+      }
+      break;
     case ui::ET_GESTURE_SCROLL_END:
     case ui::ET_SCROLL_FLING_START:
-      shelf_view_->PointerReleasedOnButton(this, ShelfView::TOUCH, false);
-      event->SetHandled();
-      return;
+      if (state_ & STATE_TOUCH_DRAGGING) {
+        ClearState(STATE_TOUCH_DRAGGING);
+        shelf_view_->PointerReleasedOnButton(this, ShelfView::TOUCH, false);
+        event->SetHandled();
+      }
+      break;
     case ui::ET_GESTURE_LONG_TAP:
       // Handle LONG_TAP to avoid opening the context menu twice.
       event->SetHandled();
-      return;
+      break;
     default:
-      return Button::OnGestureEvent(event);
+      break;
   }
+
+  if (!event->handled())
+    return Button::OnGestureEvent(event);
 }
 
 std::unique_ptr<views::InkDropRipple> ShelfButton::CreateInkDropRipple() const {
@@ -515,4 +551,21 @@
   SchedulePaint();
 }
 
+void ShelfButton::OnTouchDragTimer() {
+  AddState(STATE_TOUCH_DRAGGING);
+}
+
+void ShelfButton::ScaleAppIcon(bool scale_up) {
+  ui::ScopedLayerAnimationSettings settings(layer()->GetAnimator());
+  settings.SetTransitionDuration(
+      base::TimeDelta::FromMilliseconds(kDragDropAppIconScaleTransitionMs));
+
+  if (scale_up) {
+    layer()->SetTransform(gfx::GetScaleTransform(
+        gfx::Rect(layer()->bounds().size()).CenterPoint(), kAppIconScale));
+  } else {
+    layer()->SetTransform(gfx::Transform());
+  }
+}
+
 }  // namespace ash
diff --git a/ash/shelf/shelf_button.h b/ash/shelf/shelf_button.h
index a427a85e..1a06145 100644
--- a/ash/shelf/shelf_button.h
+++ b/ash/shelf/shelf_button.h
@@ -7,6 +7,7 @@
 
 #include "ash/ash_export.h"
 #include "base/macros.h"
+#include "base/timer/timer.h"
 #include "ui/gfx/shadow_value.h"
 #include "ui/views/controls/button/button.h"
 
@@ -39,6 +40,8 @@
     STATE_FOCUSED = 1 << 4,
     // Hide the status (temporarily for some animations).
     STATE_HIDDEN = 1 << 5,
+    // Button is being dragged by scroll gestures.
+    STATE_TOUCH_DRAGGING = 1 << 6,
   };
 
   ShelfButton(InkDropButtonListener* listener, ShelfView* shelf_view);
@@ -99,6 +102,13 @@
   // alignment. This may add or remove views, layout and paint.
   void UpdateState();
 
+  // Invoked when |touch_drag_timer_| fires to show dragging UI.
+  void OnTouchDragTimer();
+
+  // Scales up app icon if |scale_up| is true, otherwise scales it back to
+  // normal size.
+  void ScaleAppIcon(bool scale_up);
+
   InkDropButtonListener* listener_;
 
   // The shelf view hosting this button.
@@ -120,6 +130,9 @@
   // showing and used to detect if the menu was deleted while running.
   bool* destroyed_flag_;
 
+  // A timer to defer showing drag UI when the shelf button is touch pressed.
+  base::OneShotTimer touch_drag_timer_;
+
   DISALLOW_COPY_AND_ASSIGN(ShelfButton);
 };
 
diff --git a/ash/shelf/shelf_view.cc b/ash/shelf/shelf_view.cc
index 2ac0f5b..6e6bf0b 100644
--- a/ash/shelf/shelf_view.cc
+++ b/ash/shelf/shelf_view.cc
@@ -69,14 +69,11 @@
 const int kRipOffDistance = 48;
 
 // The rip off drag and drop proxy image should get scaled by this factor.
-const float kDragAndDropProxyScale = 1.5f;
+const float kDragAndDropProxyScale = 1.2f;
 
 // The opacity represents that this partially disappeared item will get removed.
 const float kDraggedImageOpacity = 0.5f;
 
-// The time threshold before an item may be dragged by touch events.
-const int kTouchDragTimeThresholdMs = 300;
-
 namespace {
 
 // A class to temporarily disable a given bounds animator.
@@ -565,6 +562,10 @@
     drag_image_->SetScreenPosition(origin_in_screen_coordinates);
 }
 
+bool ShelfView::IsDraggedView(const ShelfButton* view) const {
+  return drag_view_ == view;
+}
+
 void ShelfView::DestroyDragIconProxy() {
   drag_image_.reset();
   drag_image_offset_ = gfx::Vector2d(0, 0);
@@ -703,9 +704,6 @@
   is_repost_event_on_same_item_ =
       IsRepostEvent(event) && (last_pressed_index_ == index);
 
-  if (pointer == TOUCH)
-    touch_press_time_ = base::TimeTicks::Now();
-
   CHECK_EQ(ShelfButton::kViewClassName, view->GetClassName());
   drag_view_ = static_cast<ShelfButton*>(view);
   drag_origin_ = gfx::Point(event.x(), event.y());
@@ -1829,6 +1827,7 @@
   // shelf is not in auto-hide.
   const ShelfItem* item = ShelfItemForView(source);
   if (context_menu && item && item->type != TYPE_APP_LIST &&
+      source_type == ui::MenuSourceType::MENU_SOURCE_TOUCH &&
       shelf()->auto_hide_behavior() == SHELF_AUTO_HIDE_BEHAVIOR_NEVER) {
     run_types |= views::MenuRunner::SEND_GESTURE_EVENTS_TO_OWNER;
   }
@@ -1966,14 +1965,6 @@
     return false;
   }
 
-  // Touch dragging only begins after a delay from the press event. This
-  // prevents accidental dragging on swipe or scroll gestures.
-  if (pointer == TOUCH &&
-      (base::TimeTicks::Now() - touch_press_time_) <
-          base::TimeDelta::FromMilliseconds(kTouchDragTimeThresholdMs)) {
-    return false;
-  }
-
   return true;
 }
 
diff --git a/ash/shelf/shelf_view.h b/ash/shelf/shelf_view.h
index 57ee398..0343e39 100644
--- a/ash/shelf/shelf_view.h
+++ b/ash/shelf/shelf_view.h
@@ -175,6 +175,9 @@
   // Updates the background for the shelf items.
   void UpdateShelfItemBackground(SkColor color);
 
+  // True if the current |drag_view_| is the given |drag_view|.
+  bool IsDraggedView(const ShelfButton* drag_view) const;
+
   // Return the view model for test purposes.
   const views::ViewModel* view_model_for_test() const {
     return view_model_.get();
@@ -456,9 +459,6 @@
   // The timestamp of the event which closed the last menu - or 0.
   base::TimeTicks closing_event_time_;
 
-  // The timestamp of the last shelf item touch press event.
-  base::TimeTicks touch_press_time_;
-
   // True if a drag and drop operation created/pinned the item in the launcher
   // and it needs to be deleted/unpinned again if the operation gets cancelled.
   bool drag_and_drop_item_pinned_ = false;
diff --git a/ash/shelf/shelf_view_unittest.cc b/ash/shelf/shelf_view_unittest.cc
index 6e5ed55e..60fad73 100644
--- a/ash/shelf/shelf_view_unittest.cc
+++ b/ash/shelf/shelf_view_unittest.cc
@@ -446,8 +446,6 @@
                             int destination_index,
                             bool progressively) {
     views::View* button = SimulateViewPressed(pointer, button_index);
-    if (pointer == ShelfView::TOUCH && reach_touch_time_threshold_)
-      base::PlatformThread::Sleep(base::TimeDelta::FromMilliseconds(300));
 
     if (!progressively) {
       ContinueDrag(button, pointer, button_index, destination_index, false);
@@ -655,7 +653,6 @@
 
   ShelfModel* model_ = nullptr;
   ShelfView* shelf_view_ = nullptr;
-  bool reach_touch_time_threshold_ = true;
 
   std::unique_ptr<ShelfViewTestAPI> test_api_;
 
@@ -1105,46 +1102,6 @@
   ASSERT_NO_FATAL_FAILURE(CheckModelIDs(id_map));
 }
 
-TEST_F(ShelfViewTest, DragWithTimeThreshold) {
-  std::vector<std::pair<ShelfID, views::View*>> id_map;
-  SetupForDragTest(&id_map);
-
-  // Start a touch drag that does not reach the touch time threshold.
-  reach_touch_time_threshold_ = false;
-  views::View* dragged_button_touch =
-      SimulateDrag(ShelfView::TOUCH, 4, 2, false);
-  // Nothing changes since the drag didn't reach the touch time threshold.
-  ASSERT_NO_FATAL_FAILURE(CheckModelIDs(id_map));
-  shelf_view_->PointerReleasedOnButton(dragged_button_touch, ShelfView::TOUCH,
-                                       false);
-
-  // Start a touch drag that does reach the touch time threshold.
-  reach_touch_time_threshold_ = true;
-  dragged_button_touch = SimulateDrag(ShelfView::TOUCH, 1, 3, false);
-  std::rotate(id_map.begin() + 1, id_map.begin() + 2, id_map.begin() + 4);
-  ASSERT_NO_FATAL_FAILURE(CheckModelIDs(id_map));
-  shelf_view_->PointerReleasedOnButton(dragged_button_touch, ShelfView::TOUCH,
-                                       false);
-
-  // Start a mouse drag that does not reach the touch time threshold.
-  reach_touch_time_threshold_ = false;
-  views::View* dragged_button_mouse =
-      SimulateDrag(ShelfView::MOUSE, 1, 3, false);
-  std::rotate(id_map.begin() + 1, id_map.begin() + 2, id_map.begin() + 4);
-  // The ordering changes since there is no time threshold for mouse drags.
-  ASSERT_NO_FATAL_FAILURE(CheckModelIDs(id_map));
-  shelf_view_->PointerReleasedOnButton(dragged_button_mouse, ShelfView::MOUSE,
-                                       false);
-
-  // Start a mouse drag that does reach the touch time threshold.
-  reach_touch_time_threshold_ = true;
-  dragged_button_mouse = SimulateDrag(ShelfView::MOUSE, 4, 2, false);
-  std::rotate(id_map.begin() + 3, id_map.begin() + 4, id_map.begin() + 5);
-  ASSERT_NO_FATAL_FAILURE(CheckModelIDs(id_map));
-  shelf_view_->PointerReleasedOnButton(dragged_button_mouse, ShelfView::MOUSE,
-                                       false);
-}
-
 // Ensure the app list button cannot be dragged and other items cannot be
 // dragged in front of the app list button.
 TEST_F(ShelfViewTest, DragWithNotDraggableItemInFront) {
diff --git a/ash/test/ash_test_suite.cc b/ash/test/ash_test_suite.cc
index 9482d24..b64d083 100644
--- a/ash/test/ash_test_suite.cc
+++ b/ash/test/ash_test_suite.cc
@@ -44,7 +44,7 @@
   void DisplayReceivedLocalSurfaceId(
       const viz::LocalSurfaceId& local_surface_id) override {}
   void DisplayReceivedCompositorFrame(
-      const cc::CompositorFrame& frame) override {}
+      const viz::CompositorFrame& frame) override {}
   void DisplayWillDrawAndSwap(
       bool will_draw_and_swap,
       const viz::RenderPassList& render_passes) override {}
diff --git a/base/debug/stack_trace_win.cc b/base/debug/stack_trace_win.cc
index 1d7c2b3..ea270fc 100644
--- a/base/debug/stack_trace_win.cc
+++ b/base/debug/stack_trace_win.cc
@@ -106,7 +106,7 @@
 // we are using the Sym* functions.  This is because breakpad does now
 // share a lock with this function.  See this related bug:
 //
-//   http://code.google.com/p/google-breakpad/issues/detail?id=311
+//   https://crbug.com/google-breakpad/311
 //
 // This is a very unlikely edge case, and the current solution is to
 // just ignore it.
diff --git a/base/memory/ref_counted.cc b/base/memory/ref_counted.cc
index efc082c..6a5ef13 100644
--- a/base/memory/ref_counted.cc
+++ b/base/memory/ref_counted.cc
@@ -28,6 +28,15 @@
 #endif
 }
 
+#if defined(ARCH_CPU_64_BIT)
+void RefCountedBase::AddRefImpl() const {
+  // Check if |ref_count_| overflow only on 64 bit archs since the number of
+  // objects may exceed 2^32.
+  // To avoid the binary size bloat, use non-inline function here.
+  CHECK(++ref_count_ > 0);
+}
+#endif
+
 #if !defined(ARCH_CPU_X86_FAMILY)
 bool RefCountedThreadSafeBase::Release() const {
   return ReleaseImpl();
diff --git a/base/memory/ref_counted.h b/base/memory/ref_counted.h
index 1004c024..e1d3e27 100644
--- a/base/memory/ref_counted.h
+++ b/base/memory/ref_counted.h
@@ -74,7 +74,7 @@
     }
 #endif
 
-    ++ref_count_;
+    AddRefImpl();
   }
 
   // Returns true if the object should self-delete.
@@ -132,11 +132,17 @@
 #endif
   }
 
+#if defined(ARCH_CPU_64_BIT)
+  void AddRefImpl() const;
+#else
+  void AddRefImpl() const { ++ref_count_; }
+#endif
+
 #if DCHECK_IS_ON()
   bool CalledOnValidSequence() const;
 #endif
 
-  mutable size_t ref_count_ = 0;
+  mutable uint32_t ref_count_ = 0;
 
 #if DCHECK_IS_ON()
   mutable bool needs_adopt_ref_ = false;
diff --git a/base/process/launch.h b/base/process/launch.h
index 84ff06a3..0c425a7a 100644
--- a/base/process/launch.h
+++ b/base/process/launch.h
@@ -28,6 +28,7 @@
 #endif
 
 #if defined(OS_FUCHSIA)
+#include <launchpad/launchpad.h>
 #include <zircon/types.h>
 #endif
 
@@ -198,6 +199,15 @@
   // Each entry is an <id,handle> pair, with an |id| created using the PA_HND()
   // macro. The child retrieves the handle |zx_get_startup_handle(id)|.
   HandlesToTransferVector handles_to_transfer;
+
+  // If set, specifies which capabilities should be granted (cloned) to the
+  // child process.
+  // A zero value indicates that the child process will receive
+  // no capabilities.
+  // By default the child will inherit the same capabilities, job, and CWD
+  // from the parent process.
+  uint32_t clone_flags = LP_CLONE_FDIO_NAMESPACE | LP_CLONE_DEFAULT_JOB |
+                         LP_CLONE_FDIO_CWD | LP_CLONE_FDIO_STDIO;
 #endif  // defined(OS_FUCHSIA)
 
 #if defined(OS_POSIX)
diff --git a/base/process/launch_fuchsia.cc b/base/process/launch_fuchsia.cc
index b498f26..16ac513 100644
--- a/base/process/launch_fuchsia.cc
+++ b/base/process/launch_fuchsia.cc
@@ -5,6 +5,7 @@
 #include "base/process/launch.h"
 
 #include <launchpad/launchpad.h>
+#include <stdint.h>
 #include <unistd.h>
 #include <zircon/process.h>
 #include <zircon/processargs.h>
@@ -61,6 +62,8 @@
   return LaunchProcess(cmdline.argv(), options);
 }
 
+// TODO(768416): Investigate whether we can make LaunchProcess() create
+// unprivileged processes by default (no implicit capabilities are granted).
 Process LaunchProcess(const std::vector<std::string>& argv,
                       const LaunchOptions& options) {
   std::vector<const char*> argv_cstr;
@@ -82,7 +85,7 @@
   launchpad_load_from_file(lp, argv_cstr[0]);
   launchpad_set_args(lp, argv.size(), argv_cstr.data());
 
-  uint32_t to_clone = LP_CLONE_FDIO_NAMESPACE | LP_CLONE_DEFAULT_JOB;
+  uint32_t to_clone = options.clone_flags;
 
   std::unique_ptr<char* []> new_environ;
   char* const empty_environ = nullptr;
@@ -93,8 +96,9 @@
   EnvironmentMap environ_modifications = options.environ;
   if (!options.current_directory.empty()) {
     environ_modifications["PWD"] = options.current_directory.value();
-  } else {
-    to_clone |= LP_CLONE_FDIO_CWD;
+
+    // Don't clone the parent's CWD if we are overriding the child's PWD.
+    to_clone = to_clone & ~LP_CLONE_FDIO_CWD;
   }
 
   if (to_clone & LP_CLONE_DEFAULT_JOB) {
@@ -127,14 +131,18 @@
   bool stdio_already_mapped[3] = {false};
   for (const auto& src_target : options.fds_to_remap) {
     if (static_cast<size_t>(src_target.second) <
-        arraysize(stdio_already_mapped))
+        arraysize(stdio_already_mapped)) {
       stdio_already_mapped[src_target.second] = true;
+    }
     launchpad_clone_fd(lp, src_target.first, src_target.second);
   }
-  for (size_t stdio_fd = 0; stdio_fd < arraysize(stdio_already_mapped);
-       ++stdio_fd) {
-    if (!stdio_already_mapped[stdio_fd])
-      launchpad_clone_fd(lp, stdio_fd, stdio_fd);
+  if (to_clone & LP_CLONE_FDIO_STDIO) {
+    for (size_t stdio_fd = 0; stdio_fd < arraysize(stdio_already_mapped);
+         ++stdio_fd) {
+      if (!stdio_already_mapped[stdio_fd])
+        launchpad_clone_fd(lp, stdio_fd, stdio_fd);
+    }
+    to_clone &= ~LP_CLONE_FDIO_STDIO;
   }
 
   for (const auto& id_and_handle : options.handles_to_transfer) {
diff --git a/base/process/launch_mac.cc b/base/process/launch_mac.cc
index b8ff49c..dfa9257a 100644
--- a/base/process/launch_mac.cc
+++ b/base/process/launch_mac.cc
@@ -76,7 +76,7 @@
 void RestoreDefaultExceptionHandler() {
   // This function is tailored to remove the Breakpad exception handler.
   // exception_mask matches s_exception_mask in
-  // breakpad/src/client/mac/handler/exception_handler.cc
+  // third_party/breakpad/breakpad/src/client/mac/handler/exception_handler.cc
   const exception_mask_t exception_mask = EXC_MASK_BAD_ACCESS |
                                           EXC_MASK_BAD_INSTRUCTION |
                                           EXC_MASK_ARITHMETIC |
diff --git a/breakpad/BUILD.gn b/breakpad/BUILD.gn
deleted file mode 100644
index fb2aeeaa..0000000
--- a/breakpad/BUILD.gn
+++ /dev/null
@@ -1,993 +0,0 @@
-# Copyright 2014 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import("//build/symlink.gni")
-import("//testing/libfuzzer/fuzzer_test.gni")
-import("//testing/test.gni")
-
-if (is_win) {
-  import("//build/config/win/visual_studio_version.gni")
-}
-
-config("tools_config") {
-  include_dirs = [
-    "src",
-    "src/third_party",
-  ]
-  if (is_android) {
-    defines = [ "__ANDROID__" ]
-  }
-  if (is_clang) {
-    cflags = [ "-Wno-tautological-constant-out-of-range-compare" ]
-  }
-}
-
-config("internal_config") {
-  include_dirs = [ "src" ]
-  defines = []
-  if (is_debug) {
-    # This is needed for GTMLogger to work correctly.
-    defines += [ "DEBUG" ]
-  }
-  if (is_android) {
-    defines += [ "__ANDROID__" ]
-  }
-}
-
-config("client_config") {
-  include_dirs = [ "src" ]
-  if (is_android) {
-    include_dirs += [ "src/common/android/include" ]
-  }
-  if (is_chromeos) {
-    defines = [ "__CHROMEOS__" ]
-  }
-}
-
-config("handler_config") {
-  include_dirs = [ "src" ]
-}
-
-config("sender_config") {
-  include_dirs = [ "src" ]
-}
-
-config("breakpad_unittest_config") {
-  # One of the breakpad unit tests test that we can detect the proper build-id.
-  # We must override the build-id for this one target.
-  ldflags = [ "-Wl,--build-id=0x000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f" ]
-}
-
-# {micro,mini}dump_stackwalk and minidump_dump are tool-type executables
-# that do not build on Windows.
-if (!is_win) {
-  if (current_toolchain == host_toolchain) {
-    # Contains the code shared by both {micro,mini}dump_stackwalk.
-    static_library("stackwalk_common") {
-      # Always want these files included regardless of platform.
-      set_sources_assignment_filter([])
-      sources = [
-        "src/processor/basic_code_module.h",
-        "src/processor/basic_code_modules.cc",
-        "src/processor/basic_code_modules.h",
-        "src/processor/basic_source_line_resolver.cc",
-        "src/processor/call_stack.cc",
-        "src/processor/cfi_frame_info.cc",
-        "src/processor/cfi_frame_info.h",
-        "src/processor/disassembler_x86.cc",
-        "src/processor/disassembler_x86.h",
-        "src/processor/dump_context.cc",
-        "src/processor/dump_object.cc",
-        "src/processor/logging.cc",
-        "src/processor/logging.h",
-        "src/processor/pathname_stripper.cc",
-        "src/processor/pathname_stripper.h",
-        "src/processor/proc_maps_linux.cc",
-        "src/processor/process_state.cc",
-        "src/processor/simple_symbol_supplier.cc",
-        "src/processor/simple_symbol_supplier.h",
-        "src/processor/source_line_resolver_base.cc",
-        "src/processor/stack_frame_cpu.cc",
-        "src/processor/stack_frame_symbolizer.cc",
-        "src/processor/stackwalk_common.cc",
-        "src/processor/stackwalker.cc",
-        "src/processor/stackwalker_amd64.cc",
-        "src/processor/stackwalker_amd64.h",
-        "src/processor/stackwalker_arm.cc",
-        "src/processor/stackwalker_arm.h",
-        "src/processor/stackwalker_arm64.cc",
-        "src/processor/stackwalker_arm64.h",
-        "src/processor/stackwalker_mips.cc",
-        "src/processor/stackwalker_mips.h",
-        "src/processor/stackwalker_ppc.cc",
-        "src/processor/stackwalker_ppc.h",
-        "src/processor/stackwalker_ppc64.cc",
-        "src/processor/stackwalker_ppc64.h",
-        "src/processor/stackwalker_sparc.cc",
-        "src/processor/stackwalker_sparc.h",
-        "src/processor/stackwalker_x86.cc",
-        "src/processor/stackwalker_x86.h",
-        "src/processor/tokenize.cc",
-        "src/processor/tokenize.h",
-
-        # libdisasm
-        "src/third_party/libdisasm/ia32_implicit.c",
-        "src/third_party/libdisasm/ia32_implicit.h",
-        "src/third_party/libdisasm/ia32_insn.c",
-        "src/third_party/libdisasm/ia32_insn.h",
-        "src/third_party/libdisasm/ia32_invariant.c",
-        "src/third_party/libdisasm/ia32_invariant.h",
-        "src/third_party/libdisasm/ia32_modrm.c",
-        "src/third_party/libdisasm/ia32_modrm.h",
-        "src/third_party/libdisasm/ia32_opcode_tables.c",
-        "src/third_party/libdisasm/ia32_opcode_tables.h",
-        "src/third_party/libdisasm/ia32_operand.c",
-        "src/third_party/libdisasm/ia32_operand.h",
-        "src/third_party/libdisasm/ia32_reg.c",
-        "src/third_party/libdisasm/ia32_reg.h",
-        "src/third_party/libdisasm/ia32_settings.c",
-        "src/third_party/libdisasm/ia32_settings.h",
-        "src/third_party/libdisasm/libdis.h",
-        "src/third_party/libdisasm/qword.h",
-        "src/third_party/libdisasm/x86_disasm.c",
-        "src/third_party/libdisasm/x86_format.c",
-        "src/third_party/libdisasm/x86_imm.c",
-        "src/third_party/libdisasm/x86_imm.h",
-        "src/third_party/libdisasm/x86_insn.c",
-        "src/third_party/libdisasm/x86_misc.c",
-        "src/third_party/libdisasm/x86_operand_list.c",
-        "src/third_party/libdisasm/x86_operand_list.h",
-      ]
-
-      defines = [ "BPLOG_MINIMUM_SEVERITY=SEVERITY_ERROR" ]
-
-      configs -= [ "//build/config/compiler:chromium_code" ]
-      configs += [ "//build/config/compiler:no_chromium_code" ]
-      configs += [ ":tools_config" ]
-    }
-
-    fuzzer_test("minidump_fuzzer") {
-      sources = [
-        "minidump_fuzzer.cc",
-        "src/processor/exploitability.cc",
-        "src/processor/minidump.cc",
-        "src/processor/minidump_processor.cc",
-      ]
-
-      deps = [
-        ":stackwalk_common",
-        "//base",
-      ]
-
-      defines = [ "BPLOG_MINIMUM_SEVERITY=SEVERITY_ERROR" ]
-      include_dirs = [ "src" ]
-      dict = "minidump_fuzzer.dict"
-
-      libfuzzer_options = [
-        "close_fd_mask=3",
-        "max_len=128000",
-      ]
-
-      # Always want these files included regardless of platform.
-      set_sources_assignment_filter([])
-      sources += [
-        "src/processor/exploitability_linux.cc",
-        "src/processor/exploitability_linux.h",
-        "src/processor/exploitability_win.cc",
-        "src/processor/exploitability_win.h",
-        "src/processor/symbolic_constants_win.cc",
-        "src/processor/symbolic_constants_win.h",
-      ]
-    }
-
-    executable("microdump_stackwalk") {
-      sources = [
-        "src/processor/microdump.cc",
-        "src/processor/microdump_processor.cc",
-        "src/processor/microdump_stackwalk.cc",
-      ]
-
-      deps = [
-        ":stackwalk_common",
-        "//build/config:exe_and_shlib_deps",
-      ]
-
-      defines = [ "BPLOG_MINIMUM_SEVERITY=SEVERITY_ERROR" ]
-
-      configs -= [ "//build/config/compiler:chromium_code" ]
-      configs += [ "//build/config/compiler:no_chromium_code" ]
-      configs += [ ":tools_config" ]
-    }
-
-    executable("minidump_stackwalk") {
-      sources = [
-        "src/processor/exploitability.cc",
-        "src/processor/minidump.cc",
-        "src/processor/minidump_processor.cc",
-        "src/processor/minidump_stackwalk.cc",
-      ]
-
-      deps = [
-        ":stackwalk_common",
-        "//build/config:exe_and_shlib_deps",
-      ]
-
-      defines = [ "BPLOG_MINIMUM_SEVERITY=SEVERITY_ERROR" ]
-
-      configs -= [ "//build/config/compiler:chromium_code" ]
-      configs += [ "//build/config/compiler:no_chromium_code" ]
-      configs += [ ":tools_config" ]
-
-      # Always want these files included regardless of platform.
-      set_sources_assignment_filter([])
-      sources += [
-        "src/processor/exploitability_linux.cc",
-        "src/processor/exploitability_linux.h",
-        "src/processor/exploitability_win.cc",
-        "src/processor/exploitability_win.h",
-        "src/processor/symbolic_constants_win.cc",
-        "src/processor/symbolic_constants_win.h",
-      ]
-    }
-
-    executable("minidump_dump") {
-      set_sources_assignment_filter([])
-      sources = [
-        "src/processor/basic_code_module.h",
-        "src/processor/basic_code_modules.cc",
-        "src/processor/basic_code_modules.h",
-        "src/processor/dump_context.cc",
-        "src/processor/dump_object.cc",
-        "src/processor/logging.cc",
-        "src/processor/logging.h",
-        "src/processor/minidump.cc",
-        "src/processor/minidump_dump.cc",
-        "src/processor/pathname_stripper.cc",
-        "src/processor/pathname_stripper.h",
-        "src/processor/proc_maps_linux.cc",
-      ]
-
-      configs += [ ":tools_config" ]
-
-      # There are some warnings in this code.
-      configs -= [ "//build/config/compiler:chromium_code" ]
-      configs += [ "//build/config/compiler:no_chromium_code" ]
-
-      deps = [
-        "//build/config:exe_and_shlib_deps",
-      ]
-    }
-  } else {
-    # Aliases for convenience.
-    binary_symlink("microdump_stackwalk") {
-      binary_label = ":$target_name($host_toolchain)"
-    }
-    binary_symlink("minidump_stackwalk") {
-      binary_label = ":$target_name($host_toolchain)"
-    }
-    binary_symlink("minidump_dump") {
-      binary_label = ":$target_name($host_toolchain)"
-    }
-  }
-}
-
-# Mac --------------------------------------------------------------------------
-
-if (is_mac) {
-  if (current_toolchain == host_toolchain) {
-    # TODO(GYP) This should be only 64-bit on Mac. From .gypi:
-    # Like ld, dump_syms needs to operate on enough data that it may
-    # actually need to be able to address more than 4GB. Use x86_64.
-    # Don't worry! An x86_64 dump_syms is perfectly able to dump
-    # 32-bit files.
-    executable("dump_syms") {
-      sources = [
-        "src/common/dwarf/bytereader.cc",
-        "src/common/dwarf/dwarf2diehandler.cc",
-        "src/common/dwarf/dwarf2reader.cc",
-        "src/common/dwarf/elf_reader.cc",
-        "src/common/dwarf/elf_reader.h",
-        "src/common/dwarf_cfi_to_module.cc",
-        "src/common/dwarf_cu_to_module.cc",
-        "src/common/dwarf_line_to_module.cc",
-        "src/common/language.cc",
-        "src/common/mac/arch_utilities.cc",
-        "src/common/mac/arch_utilities.h",
-        "src/common/mac/dump_syms.cc",
-        "src/common/mac/file_id.cc",
-        "src/common/mac/macho_id.cc",
-        "src/common/mac/macho_reader.cc",
-        "src/common/mac/macho_utilities.cc",
-        "src/common/mac/macho_walker.cc",
-        "src/common/md5.cc",
-        "src/common/module.cc",
-        "src/common/stabs_reader.cc",
-        "src/common/stabs_to_module.cc",
-        "src/tools/mac/dump_syms/dump_syms_tool.cc",
-      ]
-
-      # For src/common/stabs_reader.h.
-      defines = [ "HAVE_MACH_O_NLIST_H" ]
-      include_dirs = [ "src/common/mac" ]
-
-      # The DWARF utilities require -funsigned-char.
-      cflags = [ "-funsigned-char" ]
-
-      configs += [ ":internal_config" ]
-
-      configs -= [ "//build/config/compiler:chromium_code" ]
-      configs += [ "//build/config/compiler:no_chromium_code" ]
-
-      # dwarf2reader.cc uses dynamic_cast.
-      configs -= [ "//build/config/compiler:no_rtti" ]
-      configs += [ "//build/config/compiler:rtti" ]
-
-      libs = [ "Foundation.framework" ]
-
-      if (!is_debug) {
-        # dump_syms crashes when built at -O1, -O2, and -O3.  It does
-        # not crash at -Os.  To play it safe, dump_syms is always built
-        # at -O0 until this can be sorted out.
-        # http://code.google.com/p/google-breakpad/issues/detail?id=329
-        configs -= [ "//build/config/compiler:default_optimization" ]
-        cflags += [ "-O0" ]
-      }
-
-      deps = [
-        "//build/config:exe_and_shlib_deps",
-      ]
-    }
-
-    executable("symupload") {
-      sources = [
-        "src/common/mac/HTTPMultipartUpload.m",
-        "src/tools/mac/symupload/symupload.m",
-      ]
-
-      include_dirs = [ "src/common/mac" ]
-
-      libs = [ "Foundation.framework" ]
-
-      configs -= [ "//build/config/compiler:chromium_code" ]
-      configs += [ "//build/config/compiler:no_chromium_code" ]
-
-      deps = [
-        "//build/config:exe_and_shlib_deps",
-      ]
-    }
-  } else {
-    binary_symlink("dump_syms") {
-      binary_label = ":$target_name($host_toolchain)"
-    }
-    binary_symlink("symupload") {
-      binary_label = ":$target_name($host_toolchain)"
-    }
-  }
-}
-
-if (is_ios) {
-  binary_symlink("dump_syms") {
-    binary_label = ":$target_name($host_toolchain)"
-  }
-  binary_symlink("symupload") {
-    binary_label = ":$target_name($host_toolchain)"
-  }
-}
-
-if (is_mac) {
-  static_library("utilities") {
-    sources = [
-      "src/client/mac/crash_generation/ConfigFile.mm",
-      "src/client/mac/handler/breakpad_nlist_64.cc",
-      "src/client/mac/handler/dynamic_images.cc",
-      "src/client/mac/handler/minidump_generator.cc",
-      "src/client/minidump_file_writer.cc",
-      "src/common/convert_UTF.c",
-      "src/common/mac/MachIPC.mm",
-      "src/common/mac/arch_utilities.cc",
-      "src/common/mac/bootstrap_compat.cc",
-      "src/common/mac/file_id.cc",
-      "src/common/mac/launch_reporter.cc",
-      "src/common/mac/macho_id.cc",
-      "src/common/mac/macho_utilities.cc",
-      "src/common/mac/macho_walker.cc",
-      "src/common/mac/string_utilities.cc",
-      "src/common/md5.cc",
-      "src/common/simple_string_dictionary.cc",
-      "src/common/string_conversion.cc",
-    ]
-
-    configs += [ ":internal_config" ]
-
-    # There are some warnings in this code.
-    configs -= [ "//build/config/compiler:chromium_code" ]
-    configs += [ "//build/config/compiler:no_chromium_code" ]
-  }
-
-  executable("crash_inspector") {
-    sources = [
-      "src/client/mac/crash_generation/Inspector.mm",
-      "src/client/mac/crash_generation/InspectorMain.mm",
-    ]
-
-    # TODO(GYP): 'mac_real_dsym': 1,
-
-    include_dirs = [
-      "src/client/apple/Framework",
-      "src/common/mac",
-      "src",
-    ]
-    libs = [
-      "CoreServices.framework",
-      "Foundation.framework",
-    ]
-
-    deps = [
-      ":utilities",
-      "//build/config:exe_and_shlib_deps",
-    ]
-  }
-
-  # TODO(GYP) this target has some mac_bundle_resources stuff.
-  # executable("crash_report_sender") {
-  # }
-  group("crash_report_sender") {
-  }
-
-  config("breakpad_config") {
-    include_dirs = [ "src/client/apple/Framework" ]
-  }
-
-  static_library("breakpad") {
-    sources = [
-      "src/client/mac/Framework/Breakpad.mm",
-      "src/client/mac/Framework/OnDemandServer.mm",
-      "src/client/mac/crash_generation/crash_generation_client.cc",
-      "src/client/mac/crash_generation/crash_generation_client.h",
-      "src/client/mac/handler/exception_handler.cc",
-      "src/client/mac/handler/protected_memory_allocator.cc",
-    ]
-
-    configs += [ ":internal_config" ]
-    public_configs = [ ":breakpad_config" ]
-
-    defines = [ "USE_PROTECTED_ALLOCATIONS=1" ]
-    include_dirs = [ "src/client/apple/Framework" ]
-
-    deps = [
-      ":crash_inspector",
-      ":crash_report_sender",
-      ":utilities",
-    ]
-  }
-
-  group("client") {
-    public_configs = [ ":client_config" ]
-  }
-}
-
-if (is_linux || is_android) {
-  if (current_toolchain == host_toolchain) {
-    executable("symupload") {
-      sources = [
-        "src/common/linux/http_upload.cc",
-        "src/common/linux/http_upload.h",
-        "src/common/linux/symbol_upload.cc",
-        "src/common/linux/symbol_upload.h",
-        "src/tools/linux/symupload/sym_upload.cc",
-      ]
-
-      include_dirs = [
-        "src",
-        "src/third_party",
-      ]
-
-      configs += [ ":tools_config" ]
-
-      libs = [ "dl" ]
-
-      deps = [
-        "//build/config:exe_and_shlib_deps",
-      ]
-    }
-
-    # dump_syms is a host tool, so only compile it for the host system.
-    executable("dump_syms") {
-      sources = [
-        "src/common/dwarf/bytereader.cc",
-        "src/common/dwarf/dwarf2diehandler.cc",
-        "src/common/dwarf/dwarf2reader.cc",
-        "src/common/dwarf/elf_reader.cc",
-        "src/common/dwarf/elf_reader.h",
-        "src/common/dwarf_cfi_to_module.cc",
-        "src/common/dwarf_cfi_to_module.h",
-        "src/common/dwarf_cu_to_module.cc",
-        "src/common/dwarf_cu_to_module.h",
-        "src/common/dwarf_line_to_module.cc",
-        "src/common/dwarf_line_to_module.h",
-        "src/common/language.cc",
-        "src/common/language.h",
-        "src/common/linux/crc32.cc",
-        "src/common/linux/crc32.h",
-        "src/common/linux/dump_symbols.cc",
-        "src/common/linux/dump_symbols.h",
-        "src/common/linux/elf_symbols_to_module.cc",
-        "src/common/linux/elf_symbols_to_module.h",
-        "src/common/linux/elfutils.cc",
-        "src/common/linux/elfutils.h",
-        "src/common/linux/file_id.cc",
-        "src/common/linux/file_id.h",
-        "src/common/linux/guid_creator.h",
-        "src/common/linux/linux_libc_support.cc",
-        "src/common/linux/linux_libc_support.h",
-        "src/common/linux/memory_mapped_file.cc",
-        "src/common/linux/memory_mapped_file.h",
-        "src/common/module.cc",
-        "src/common/module.h",
-        "src/common/stabs_reader.cc",
-        "src/common/stabs_reader.h",
-        "src/common/stabs_to_module.cc",
-        "src/common/stabs_to_module.h",
-        "src/tools/linux/dump_syms/dump_syms.cc",
-      ]
-
-      # There are some warnings in this code.
-      configs -= [ "//build/config/compiler:chromium_code" ]
-      configs += [ "//build/config/compiler:no_chromium_code" ]
-
-      # dwarf2reader.cc uses dynamic_cast. Because we don't typically
-      # don't support RTTI, we enable it for this single target. Since
-      # dump_syms doesn't share any object files with anything else,
-      # this doesn't end up polluting Chrome itself.
-      configs -= [ "//build/config/compiler:no_rtti" ]
-      configs += [ "//build/config/compiler:rtti" ]
-
-      # Breakpad rev 583 introduced this flag.
-      # Using this define, stabs_reader.h will include a.out.h to
-      # build on Linux.
-      defines = [ "HAVE_A_OUT_H" ]
-
-      include_dirs = [ "src" ]
-
-      deps = [
-        "//build/config:exe_and_shlib_deps",
-      ]
-    }
-  } else {
-    # Aliases for convenience.
-    binary_symlink("dump_syms") {
-      binary_label = ":dump_syms($host_toolchain)"
-    }
-    binary_symlink("symupload") {
-      binary_label = ":symupload($host_toolchain)"
-    }
-  }
-
-  static_library("client") {
-    # Want all these sources for both Linux and Android.
-    set_sources_assignment_filter([])
-    sources = [
-      "src/client/linux/crash_generation/crash_generation_client.cc",
-      "src/client/linux/crash_generation/crash_generation_client.h",
-      "src/client/linux/dump_writer_common/mapping_info.h",
-      "src/client/linux/dump_writer_common/thread_info.cc",
-      "src/client/linux/dump_writer_common/thread_info.h",
-      "src/client/linux/dump_writer_common/ucontext_reader.cc",
-      "src/client/linux/dump_writer_common/ucontext_reader.h",
-      "src/client/linux/handler/exception_handler.cc",
-      "src/client/linux/handler/exception_handler.h",
-      "src/client/linux/handler/minidump_descriptor.cc",
-      "src/client/linux/handler/minidump_descriptor.h",
-      "src/client/linux/log/log.cc",
-      "src/client/linux/log/log.h",
-      "src/client/linux/microdump_writer/microdump_writer.cc",
-      "src/client/linux/microdump_writer/microdump_writer.h",
-      "src/client/linux/minidump_writer/cpu_set.h",
-      "src/client/linux/minidump_writer/directory_reader.h",
-      "src/client/linux/minidump_writer/line_reader.h",
-      "src/client/linux/minidump_writer/linux_core_dumper.cc",
-      "src/client/linux/minidump_writer/linux_core_dumper.h",
-      "src/client/linux/minidump_writer/linux_dumper.cc",
-      "src/client/linux/minidump_writer/linux_dumper.h",
-      "src/client/linux/minidump_writer/linux_ptrace_dumper.cc",
-      "src/client/linux/minidump_writer/linux_ptrace_dumper.h",
-      "src/client/linux/minidump_writer/minidump_writer.cc",
-      "src/client/linux/minidump_writer/minidump_writer.h",
-      "src/client/linux/minidump_writer/proc_cpuinfo_reader.h",
-      "src/client/minidump_file_writer-inl.h",
-      "src/client/minidump_file_writer.cc",
-      "src/client/minidump_file_writer.h",
-      "src/common/convert_UTF.c",
-      "src/common/convert_UTF.h",
-      "src/common/linux/elf_core_dump.cc",
-      "src/common/linux/elf_core_dump.h",
-      "src/common/linux/elfutils.cc",
-      "src/common/linux/elfutils.h",
-      "src/common/linux/file_id.cc",
-      "src/common/linux/file_id.h",
-      "src/common/linux/google_crashdump_uploader.cc",
-      "src/common/linux/google_crashdump_uploader.h",
-      "src/common/linux/guid_creator.cc",
-      "src/common/linux/guid_creator.h",
-      "src/common/linux/libcurl_wrapper.cc",
-      "src/common/linux/libcurl_wrapper.h",
-      "src/common/linux/linux_libc_support.cc",
-      "src/common/linux/linux_libc_support.h",
-      "src/common/linux/memory_mapped_file.cc",
-      "src/common/linux/memory_mapped_file.h",
-      "src/common/linux/safe_readlink.cc",
-      "src/common/linux/safe_readlink.h",
-      "src/common/memory.h",
-      "src/common/simple_string_dictionary.cc",
-      "src/common/simple_string_dictionary.h",
-      "src/common/string_conversion.cc",
-      "src/common/string_conversion.h",
-    ]
-
-    configs -= [ "//build/config/compiler:chromium_code" ]
-    configs += [ "//build/config/compiler:no_chromium_code" ]
-    public_configs = [ ":client_config" ]
-
-    if (current_cpu == "arm" && is_chromeos) {
-      # Avoid running out of registers in
-      # linux_syscall_support.h:sys_clone()'s inline assembly.
-      cflags = [ "-marm" ]
-    }
-
-    # Clang's -mstackrealign doesn't work well with
-    # linux_syscall_support.h hand written asm syscalls.
-    # See https://crbug.com/556393
-    configs -= [ "//build/config/compiler:clang_stackrealign" ]
-
-    if (is_android) {
-      sources += [ "src/common/android/breakpad_getcontext.S" ]
-    }
-
-    libs = [ "dl" ]
-
-    include_dirs = [
-      ".",
-      "src",
-      "src/client",
-      "src/third_party/linux/include",
-    ]
-  }
-
-  static_library("processor_support") {
-    set_sources_assignment_filter([])
-    sources = [
-      "src/common/scoped_ptr.h",
-      "src/processor/basic_code_modules.cc",
-      "src/processor/basic_code_modules.h",
-      "src/processor/dump_context.cc",
-      "src/processor/dump_object.cc",
-      "src/processor/logging.cc",
-      "src/processor/logging.h",
-      "src/processor/minidump.cc",
-      "src/processor/pathname_stripper.cc",
-      "src/processor/pathname_stripper.h",
-      "src/processor/proc_maps_linux.cc",
-    ]
-
-    include_dirs = [
-      "src",
-      "src/client",
-      "src/third_party/linux/include",
-      ".",
-    ]
-
-    # There are some warnings in this code.
-    configs -= [ "//build/config/compiler:chromium_code" ]
-    configs += [ "//build/config/compiler:no_chromium_code" ]
-  }
-
-  test("breakpad_unittests") {
-    set_sources_assignment_filter([])
-    sources = [
-      "linux/breakpad_googletest_includes.h",
-      "src/client/linux/handler/exception_handler_unittest.cc",
-      "src/client/linux/minidump_writer/cpu_set_unittest.cc",
-      "src/client/linux/minidump_writer/directory_reader_unittest.cc",
-      "src/client/linux/minidump_writer/line_reader_unittest.cc",
-      "src/client/linux/minidump_writer/linux_core_dumper_unittest.cc",
-      "src/client/linux/minidump_writer/linux_ptrace_dumper_unittest.cc",
-      "src/client/linux/minidump_writer/minidump_writer_unittest.cc",
-      "src/client/linux/minidump_writer/minidump_writer_unittest_utils.cc",
-      "src/client/linux/minidump_writer/proc_cpuinfo_reader_unittest.cc",
-      "src/common/linux/elf_core_dump_unittest.cc",
-      "src/common/linux/file_id_unittest.cc",
-      "src/common/linux/linux_libc_support_unittest.cc",
-      "src/common/linux/synth_elf.cc",
-      "src/common/linux/tests/auto_testfile.h",
-      "src/common/linux/tests/crash_generator.cc",
-      "src/common/linux/tests/crash_generator.h",
-      "src/common/memory_range.h",
-      "src/common/memory_unittest.cc",
-      "src/common/simple_string_dictionary_unittest.cc",
-      "src/common/test_assembler.cc",
-      "src/common/tests/file_utils.cc",
-      "src/common/tests/file_utils.h",
-      "src/tools/linux/md2core/minidump_memory_range.h",
-      "src/tools/linux/md2core/minidump_memory_range_unittest.cc",
-    ]
-
-    deps = [
-      ":client",
-      ":linux_dumper_unittest_helper",
-      ":processor_support",
-      "//build/config:exe_and_shlib_deps",
-      "//testing/gmock",
-      "//testing/gtest",
-      "//testing/gtest:gtest_main",
-    ]
-
-    include_dirs = [
-      "linux",  # Use our copy of breakpad_googletest_includes.h
-      ".",
-    ]
-
-    # There are some warnings in this code.
-    configs -= [ "//build/config/compiler:chromium_code" ]
-    configs += [
-      ":client_config",
-      "//build/config/compiler:no_chromium_code",
-    ]
-
-    if (is_clang) {
-      # See http://crbug.com/138571#c18
-      cflags = [ "-Wno-unused-value" ]
-    }
-
-    if (is_android) {
-      use_raw_android_executable = true
-      sources += [ "src/common/android/breakpad_getcontext_unittest.cc" ]
-      libs = [ "log" ]
-      extra_dist_files = [ "$root_out_dir/linux_dumper_unittest_helper" ]
-    }
-
-    # Clang's -mstackrealign doesn't work well with
-    # linux_syscall_support.h hand written asm syscalls.
-    # See https://crbug.com/556393
-    configs -= [ "//build/config/compiler:clang_stackrealign" ]
-
-    # Add the breakpad unittest config at the end to override all configs.
-    configs += [ ":breakpad_unittest_config" ]
-  }
-
-  executable("linux_dumper_unittest_helper") {
-    set_sources_assignment_filter([])
-    testonly = true
-    sources = [
-      "src/client/linux/minidump_writer/linux_dumper_unittest_helper.cc",
-    ]
-    deps = [
-      ":processor_support",
-      "//build/config:exe_and_shlib_deps",
-    ]
-
-    configs += [ ":client_config" ]
-
-    if (is_component_build) {
-      ldflags = [
-        "-Wl,-rpath,",
-        rebase_path(root_build_dir),
-      ]
-    }
-  }
-
-  executable("generate_test_dump") {
-    set_sources_assignment_filter([])
-    testonly = true
-    sources = [
-      "linux/generate-test-dump.cc",
-    ]
-
-    # This file has an unused variable warning.
-    configs -= [ "//build/config/compiler:chromium_code" ]
-    configs += [
-      ":client_config",
-      "//build/config/compiler:no_chromium_code",
-    ]
-
-    deps = [
-      ":client",
-      "//build/config:exe_and_shlib_deps",
-    ]
-
-    if (is_android) {
-      libs = [ "log" ]
-    }
-  }
-
-  executable("minidump-2-core") {
-    set_sources_assignment_filter([])
-    sources = [
-      "src/tools/linux/md2core/minidump-2-core.cc",
-    ]
-
-    include_dirs = [ "src" ]
-
-    deps = [
-      ":client",
-      "//build/config:exe_and_shlib_deps",
-    ]
-  }
-
-  executable("core-2-minidump") {
-    set_sources_assignment_filter([])
-    sources = [
-      "src/tools/linux/core2md/core2md.cc",
-    ]
-
-    deps = [
-      ":client",
-      "//build/config:exe_and_shlib_deps",
-    ]
-
-    include_dirs = [ "src" ]
-  }
-}
-
-if (is_win) {
-  executable("dump_syms") {
-    # TODO(scottmg) using this with VS2015 may break the crash server.
-    # https://crbug.com/696671
-    include_dirs = [
-      "$visual_studio_path/DIA SDK/include",
-      "src",
-    ]
-
-    sources = [
-      "src/common/windows/dia_util.cc",
-      "src/common/windows/dia_util.h",
-      "src/common/windows/guid_string.cc",
-      "src/common/windows/guid_string.h",
-      "src/common/windows/omap.cc",
-      "src/common/windows/omap.h",
-      "src/common/windows/pdb_source_line_writer.cc",
-      "src/common/windows/pdb_source_line_writer.h",
-      "src/common/windows/string_utils-inl.h",
-      "src/common/windows/string_utils.cc",
-      "src/tools/windows/dump_syms/dump_syms.cc",
-    ]
-
-    lib_dirs = []
-    if (target_cpu == "x64") {
-      lib_dirs += [ "$visual_studio_path/DIA SDK/lib/amd64" ]
-    } else {
-      lib_dirs += [ "$visual_studio_path/DIA SDK/lib" ]
-    }
-
-    libs = [
-      "diaguids.lib",
-      "imagehlp.lib",
-    ]
-    if (is_clang) {
-      # clang complains about microsoft-specific goto extensions. Instead of
-      # rewriting decade-old, goto-ridden code, disable the warning.
-      cflags = [ "-Wno-microsoft-goto" ]
-    }
-  }
-}
-
-if (is_ios) {
-  static_library("client") {
-    set_sources_assignment_filter([])
-    sources = [
-      "src/client/ios/Breakpad.h",
-      "src/client/ios/Breakpad.mm",
-      "src/client/ios/BreakpadController.h",
-      "src/client/ios/BreakpadController.mm",
-      "src/client/ios/handler/ios_exception_minidump_generator.h",
-      "src/client/ios/handler/ios_exception_minidump_generator.mm",
-      "src/client/mac/crash_generation/ConfigFile.h",
-      "src/client/mac/crash_generation/ConfigFile.mm",
-      "src/client/mac/handler/breakpad_nlist_64.cc",
-      "src/client/mac/handler/breakpad_nlist_64.h",
-      "src/client/mac/handler/dynamic_images.cc",
-      "src/client/mac/handler/dynamic_images.h",
-      "src/client/mac/handler/exception_handler.cc",
-      "src/client/mac/handler/exception_handler.h",
-      "src/client/mac/handler/minidump_generator.cc",
-      "src/client/mac/handler/minidump_generator.h",
-      "src/client/mac/handler/protected_memory_allocator.cc",
-      "src/client/mac/handler/protected_memory_allocator.h",
-      "src/client/mac/sender/uploader.h",
-      "src/client/mac/sender/uploader.mm",
-      "src/client/minidump_file_writer-inl.h",
-      "src/client/minidump_file_writer.cc",
-      "src/client/minidump_file_writer.h",
-      "src/common/convert_UTF.c",
-      "src/common/convert_UTF.h",
-      "src/common/mac/HTTPMultipartUpload.m",
-      "src/common/mac/file_id.cc",
-      "src/common/mac/file_id.h",
-      "src/common/mac/macho_id.cc",
-      "src/common/mac/macho_id.h",
-      "src/common/mac/macho_utilities.cc",
-      "src/common/mac/macho_utilities.h",
-      "src/common/mac/macho_walker.cc",
-      "src/common/mac/macho_walker.h",
-      "src/common/mac/string_utilities.cc",
-      "src/common/mac/string_utilities.h",
-      "src/common/md5.cc",
-      "src/common/md5.h",
-      "src/common/simple_string_dictionary.cc",
-      "src/common/simple_string_dictionary.h",
-      "src/common/string_conversion.cc",
-      "src/common/string_conversion.h",
-      "src/google_breakpad/common/minidump_format.h",
-    ]
-    set_sources_assignment_filter(sources_assignment_filter)
-
-    include_dirs = [
-      "src",
-      "src/client/mac/Framework",
-      "src/common/mac",
-    ]
-
-    deps = [
-      "//third_party/google_toolbox_for_mac",
-    ]
-
-    public_configs = [ ":client_config" ]
-
-    if (is_clang) {
-      # See https://bugs.chromium.org/p/google-breakpad/issues/detail?id=675.
-      cflags = [ "-Wno-deprecated-declarations" ]
-    }
-  }
-  # TODO(GYP) There is some XCode-only targets like ninja-breakpad.
-}
-
-if (is_win) {
-  group("client") {
-    public_configs = [ ":client_config" ]
-  }
-
-  config("breakpad_handler_warnings") {
-    if (is_clang) {
-      # See https://code.google.com/p/google-breakpad/issues/detail?id=658.
-      cflags = [ "-Wno-reorder" ]
-    }
-  }
-
-  static_library("breakpad_handler") {
-    configs += [ ":handler_config" ]
-    if (is_win) {
-      public_configs = [ ":handler_config" ]
-    }
-
-    defines = [ "BREAKPAD_NO_TERMINATE_THREAD" ]
-
-    sources = [
-      "src/client/windows/crash_generation/client_info.cc",
-      "src/client/windows/crash_generation/client_info.h",
-      "src/client/windows/crash_generation/crash_generation_client.cc",
-      "src/client/windows/crash_generation/crash_generation_client.h",
-      "src/client/windows/crash_generation/crash_generation_server.cc",
-      "src/client/windows/crash_generation/crash_generation_server.h",
-      "src/client/windows/crash_generation/minidump_generator.cc",
-      "src/client/windows/crash_generation/minidump_generator.h",
-      "src/client/windows/handler/exception_handler.cc",
-      "src/client/windows/handler/exception_handler.h",
-      "src/common/windows/guid_string.cc",
-      "src/common/windows/guid_string.h",
-      "src/common/windows/string_utils-inl.h",
-      "src/google_breakpad/common/minidump_format.h",
-    ]
-    configs += [ ":breakpad_handler_warnings" ]
-  }
-
-  source_set("breakpad_sender") {
-    sources = [
-      "src/client/windows/sender/crash_report_sender.cc",
-      "src/client/windows/sender/crash_report_sender.h",
-      "src/common/windows/http_upload.cc",
-      "src/common/windows/http_upload.h",
-    ]
-    configs += [ ":sender_config" ]
-    public_configs = [ ":sender_config" ]
-  }
-}
diff --git a/breakpad/README.chromium b/breakpad/README.chromium
deleted file mode 100644
index bab0a12..0000000
--- a/breakpad/README.chromium
+++ /dev/null
@@ -1,12 +0,0 @@
-Name: Breakpad, An open-source multi-platform crash reporting system
-Short Name: breakpad
-URL: https://chromium.googlesource.com/breakpad/breakpad
-License: New BSD, Apple PSL 2.0 and Apache 2.0
-Security Critical: no
-
-This directory contains Chrome's version of Breakpad's Visual Studio build
-files (*.vcproj) and a compiled version of Breakpad's symupload.exe utility
-for Windows.
-
-Part of the upstream Breakpad project is pulled into the src/ subdirectory via
-DEPS.
diff --git a/build/android/resource_sizes.py b/build/android/resource_sizes.py
index 1ee6730..7362223 100755
--- a/build/android/resource_sizes.py
+++ b/build/android/resource_sizes.py
@@ -422,6 +422,7 @@
   for group in file_groups:
     actual_size = group.ComputeZippedSize()
     install_size = group.ComputeInstallSize()
+    uncompressed_size = group.ComputeUncompressedSize()
 
     total_install_size += group.ComputeExtractedSize()
     zip_overhead -= actual_size
@@ -432,10 +433,14 @@
     perf_tests_results_helper.ReportPerfResult(chartjson,
                      apk_basename + '_InstallBreakdown',
                      group.name + ' size', install_size, 'bytes')
-    perf_tests_results_helper.ReportPerfResult(chartjson,
-                     apk_basename + '_Uncompressed',
-                     group.name + ' size', group.ComputeUncompressedSize(),
-                     'bytes')
+    # Only a few metrics are compressed in the first place.
+    # To avoid over-reporting, track uncompressed size only for compressed
+    # entries.
+    if uncompressed_size != actual_size:
+      perf_tests_results_helper.ReportPerfResult(chartjson,
+                       apk_basename + '_Uncompressed',
+                       group.name + ' size', uncompressed_size,
+                       'bytes')
 
   # Per-file zip overhead is caused by:
   # * 30 byte entry header + len(file name)
diff --git a/build/config/jumbo.gni b/build/config/jumbo.gni
index 5a20916..90e8f52 100644
--- a/build/config/jumbo.gni
+++ b/build/config/jumbo.gni
@@ -3,7 +3,6 @@
 # found in the LICENSE file.
 
 import("//build/split_static_library.gni")  # When someone uses that target_type
-import("//testing/test.gni")  # When someone uses the test target_type
 
 declare_args() {
   # If true, use a jumbo build (files compiled together) to speed up
@@ -199,8 +198,8 @@
 }
 
 set_defaults("jumbo_source_set") {
-  # This sets the default list of configs when the source_set target
-  # is used. The default_compiler_configs comes from BUILDCONFIG.gn and
+  # This sets the default list of configs when the content_source_set target
+  # is defined. The default_compiler_configs comes from BUILDCONFIG.gn and
   # is the list normally applied to static libraries and source sets.
   configs = default_compiler_configs
 }
@@ -214,8 +213,8 @@
 }
 
 set_defaults("jumbo_static_library") {
-  # This sets the default list of configs when the static_library target
-  # is used. The default_compiler_configs comes from BUILDCONFIG.gn and
+  # This sets the default list of configs when the content_source_set target
+  # is defined. The default_compiler_configs comes from BUILDCONFIG.gn and
   # is the list normally applied to static libraries and source sets.
   configs = default_compiler_configs
 }
@@ -229,9 +228,8 @@
 }
 
 set_defaults("jumbo_split_static_library") {
-  # This sets the default list of configs when the
-  # split_static_library target is used.
-  # The default_compiler_configs comes from BUILDCONFIG.gn and
+  # This sets the default list of configs when the content_source_set target
+  # is defined. The default_compiler_configs comes from BUILDCONFIG.gn and
   # is the list normally applied to static libraries and source sets.
   configs = default_compiler_configs
 }
@@ -245,8 +243,8 @@
 }
 
 set_defaults("jumbo_component") {
-  # This sets the default list of configs when the component
-  # target is used. This code is a clone of set_defaults for the
+  # This sets the default list of configs when the content_source_set
+  # target is defined. This code is a clone of set_defaults for the
   # ordinary "component" template.
   if (is_component_build) {
     configs = default_shared_library_configs
@@ -257,24 +255,3 @@
     configs = default_compiler_configs
   }
 }
-
-# See documentation above by "internal_jumbo_target".
-template("jumbo_test") {
-  internal_jumbo_target(target_name) {
-    target_type = "test"
-    forward_variables_from(invoker, "*")
-  }
-}
-
-set_defaults("jumbo_test") {
-  # This sets the default list of configs when the test target is
-  # used. This code is a clone of set_defaults for the ordinary
-  # "test" template.
-  if (is_android) {
-    configs = default_shared_library_configs
-    configs -= [ "//build/config/android:hide_all_but_jni_onload" ]
-    configs += [ "//build/config/android:hide_all_but_jni" ]
-  } else {
-    configs = default_executable_configs
-  }
-}
diff --git a/cc/BUILD.gn b/cc/BUILD.gn
index 65d2b69..4f69bb4 100644
--- a/cc/BUILD.gn
+++ b/cc/BUILD.gn
@@ -45,7 +45,6 @@
     "input/scroll_state_data.h",
     "input/scrollbar_animation_controller.cc",
     "input/scrollbar_animation_controller.h",
-    "input/selection.h",
     "input/single_scrollbar_animation_controller_thinning.cc",
     "input/single_scrollbar_animation_controller_thinning.h",
     "input/touch_action.h",
@@ -134,10 +133,6 @@
     "layers/video_layer_impl.h",
     "layers/viewport.cc",
     "layers/viewport.h",
-    "output/compositor_frame.cc",
-    "output/compositor_frame.h",
-    "output/compositor_frame_metadata.cc",
-    "output/compositor_frame_metadata.h",
     "output/overlay_candidate.cc",
     "output/overlay_candidate.h",
     "raster/bitmap_raster_buffer_provider.cc",
@@ -192,8 +187,6 @@
     "resources/scoped_resource.h",
     "resources/scoped_ui_resource.cc",
     "resources/scoped_ui_resource.h",
-    "resources/single_release_callback_impl.cc",
-    "resources/single_release_callback_impl.h",
     "resources/ui_resource_bitmap.cc",
     "resources/ui_resource_bitmap.h",
     "resources/ui_resource_client.h",
@@ -263,8 +256,6 @@
     "tiles/tiling_set_raster_queue_all.h",
     "tiles/tiling_set_raster_queue_required.cc",
     "tiles/tiling_set_raster_queue_required.h",
-    "trees/blocking_task_runner.cc",
-    "trees/blocking_task_runner.h",
     "trees/clip_expander.cc",
     "trees/clip_expander.h",
     "trees/clip_node.cc",
@@ -645,7 +636,6 @@
     "tiles/software_image_decode_cache_unittest.cc",
     "tiles/tile_manager_unittest.cc",
     "tiles/tile_priority_unittest.cc",
-    "trees/blocking_task_runner_unittest.cc",
     "trees/damage_tracker_unittest.cc",
     "trees/image_animation_controller_unittest.cc",
     "trees/layer_tree_frame_sink_unittest.cc",
diff --git a/cc/input/layer_selection_bound.h b/cc/input/layer_selection_bound.h
index f69d1548..5174341 100644
--- a/cc/input/layer_selection_bound.h
+++ b/cc/input/layer_selection_bound.h
@@ -6,7 +6,7 @@
 #define CC_INPUT_LAYER_SELECTION_BOUND_H_
 
 #include "cc/cc_export.h"
-#include "cc/input/selection.h"
+#include "components/viz/common/quads/selection.h"
 #include "ui/gfx/geometry/point.h"
 #include "ui/gfx/selection_bound.h"
 
@@ -30,7 +30,7 @@
   bool operator!=(const LayerSelectionBound& other) const;
 };
 
-typedef Selection<LayerSelectionBound> LayerSelection;
+using LayerSelection = viz::Selection<LayerSelectionBound>;
 
 }  // namespace cc
 
diff --git a/cc/ipc/cc_param_traits.cc b/cc/ipc/cc_param_traits.cc
index 4205e0a..db66e3ea 100644
--- a/cc/ipc/cc_param_traits.cc
+++ b/cc/ipc/cc_param_traits.cc
@@ -12,7 +12,7 @@
 #include "base/trace_event/trace_event.h"
 #include "base/unguessable_token.h"
 #include "cc/base/filter_operations.h"
-#include "cc/output/compositor_frame.h"
+#include "components/viz/common/quads/compositor_frame.h"
 #include "components/viz/common/quads/debug_border_draw_quad.h"
 #include "components/viz/common/quads/draw_quad.h"
 #include "components/viz/common/quads/largest_draw_quad.h"
@@ -735,8 +735,8 @@
   l->append(")");
 }
 
-void ParamTraits<cc::CompositorFrame>::Write(base::Pickle* m,
-                                             const param_type& p) {
+void ParamTraits<viz::CompositorFrame>::Write(base::Pickle* m,
+                                              const param_type& p) {
   TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("cc.debug.ipc"),
                "ParamTraits::CompositorFrame::Write");
   WriteParam(m, p.metadata);
@@ -758,9 +758,9 @@
   }
 }
 
-bool ParamTraits<cc::CompositorFrame>::Read(const base::Pickle* m,
-                                            base::PickleIterator* iter,
-                                            param_type* p) {
+bool ParamTraits<viz::CompositorFrame>::Read(const base::Pickle* m,
+                                             base::PickleIterator* iter,
+                                             param_type* p) {
   TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("cc.debug.ipc"),
                "ParamTraits::CompositorFrame::Read");
   if (!ReadParam(m, iter, &p->metadata))
@@ -807,8 +807,8 @@
   return true;
 }
 
-void ParamTraits<cc::CompositorFrame>::Log(const param_type& p,
-                                           std::string* l) {
+void ParamTraits<viz::CompositorFrame>::Log(const param_type& p,
+                                            std::string* l) {
   l->append("CompositorFrame(");
   LogParam(p.metadata, l);
   l->append(", ");
diff --git a/cc/ipc/cc_param_traits.h b/cc/ipc/cc_param_traits.h
index 03e5fefc..3cd8a20 100644
--- a/cc/ipc/cc_param_traits.h
+++ b/cc/ipc/cc_param_traits.h
@@ -10,7 +10,7 @@
 #include "cc/base/filter_operation.h"
 #include "cc/ipc/cc_ipc_export.h"
 #include "cc/ipc/cc_param_traits_macros.h"
-#include "cc/output/compositor_frame.h"
+#include "components/viz/common/quads/compositor_frame.h"
 #include "components/viz/common/quads/draw_quad.h"
 #include "components/viz/common/quads/stream_video_draw_quad.h"
 #include "components/viz/common/quads/texture_draw_quad.h"
@@ -104,8 +104,8 @@
 };
 
 template <>
-struct CC_IPC_EXPORT ParamTraits<cc::CompositorFrame> {
-  typedef cc::CompositorFrame param_type;
+struct CC_IPC_EXPORT ParamTraits<viz::CompositorFrame> {
+  typedef viz::CompositorFrame param_type;
   static void Write(base::Pickle* m, const param_type& p);
   static bool Read(const base::Pickle* m,
                    base::PickleIterator* iter,
diff --git a/cc/ipc/cc_param_traits_macros.h b/cc/ipc/cc_param_traits_macros.h
index 79b09f6..93054c3 100644
--- a/cc/ipc/cc_param_traits_macros.h
+++ b/cc/ipc/cc_param_traits_macros.h
@@ -6,8 +6,8 @@
 #define CC_IPC_CC_PARAM_TRAITS_MACROS_H_
 
 #include "cc/base/filter_operation.h"
-#include "cc/output/compositor_frame.h"
 #include "components/viz/common/frame_sinks/begin_frame_args.h"
+#include "components/viz/common/quads/compositor_frame.h"
 #include "components/viz/common/quads/debug_border_draw_quad.h"
 #include "components/viz/common/quads/draw_quad.h"
 #include "components/viz/common/quads/render_pass.h"
@@ -163,7 +163,7 @@
   IPC_STRUCT_TRAITS_MEMBER(lost)
 IPC_STRUCT_TRAITS_END()
 
-IPC_STRUCT_TRAITS_BEGIN(cc::Selection<gfx::SelectionBound>)
+IPC_STRUCT_TRAITS_BEGIN(viz::Selection<gfx::SelectionBound>)
   IPC_STRUCT_TRAITS_MEMBER(start)
   IPC_STRUCT_TRAITS_MEMBER(end)
 IPC_STRUCT_TRAITS_END()
@@ -180,7 +180,7 @@
   IPC_STRUCT_TRAITS_MEMBER(type)
 IPC_STRUCT_TRAITS_END()
 
-IPC_STRUCT_TRAITS_BEGIN(cc::CompositorFrameMetadata)
+IPC_STRUCT_TRAITS_BEGIN(viz::CompositorFrameMetadata)
   IPC_STRUCT_TRAITS_MEMBER(device_scale_factor)
   IPC_STRUCT_TRAITS_MEMBER(root_scroll_offset)
   IPC_STRUCT_TRAITS_MEMBER(page_scale_factor)
diff --git a/cc/ipc/cc_param_traits_unittest.cc b/cc/ipc/cc_param_traits_unittest.cc
index 5421e64..48a61ea 100644
--- a/cc/ipc/cc_param_traits_unittest.cc
+++ b/cc/ipc/cc_param_traits_unittest.cc
@@ -10,8 +10,8 @@
 #include "base/macros.h"
 #include "build/build_config.h"
 #include "cc/ipc/cc_param_traits.h"
-#include "cc/output/compositor_frame.h"
 #include "cc/resources/resource_provider.h"
+#include "components/viz/common/quads/compositor_frame.h"
 #include "components/viz/common/quads/picture_draw_quad.h"
 #include "components/viz/common/quads/render_pass_draw_quad.h"
 #include "ipc/ipc_message.h"
@@ -22,7 +22,7 @@
 #include "base/file_descriptor_posix.h"
 #endif
 
-using cc::CompositorFrame;
+using viz::CompositorFrame;
 using cc::FilterOperation;
 using cc::FilterOperations;
 using cc::ResourceProvider;
diff --git a/cc/ipc/cc_serialization_perftest.cc b/cc/ipc/cc_serialization_perftest.cc
index 6b0abe1a..aaf99ac 100644
--- a/cc/ipc/cc_serialization_perftest.cc
+++ b/cc/ipc/cc_serialization_perftest.cc
@@ -7,7 +7,7 @@
 #include "base/test/launcher/unit_test_launcher.h"
 #include "base/test/test_suite.h"
 #include "cc/ipc/cc_param_traits.h"
-#include "cc/output/compositor_frame.h"
+#include "components/viz/common/quads/compositor_frame.h"
 #include "components/viz/common/quads/picture_draw_quad.h"
 #include "gpu/ipc/common/mailbox_holder_struct_traits.h"
 #include "gpu/ipc/common/mailbox_struct_traits.h"
@@ -40,20 +40,22 @@
 
 class CCSerializationPerfTest : public testing::Test {
  protected:
-  static void ReadMessage(const IPC::Message* msg, CompositorFrame* frame) {
+  static void ReadMessage(const IPC::Message* msg,
+                          viz::CompositorFrame* frame) {
     base::PickleIterator iter(*msg);
-    bool success = IPC::ParamTraits<CompositorFrame>::Read(msg, &iter, frame);
+    bool success =
+        IPC::ParamTraits<viz::CompositorFrame>::Read(msg, &iter, frame);
     CHECK(success);
   }
 
   static void RunDeserializationTestParamTraits(
       const std::string& test_name,
-      const CompositorFrame& frame,
+      const viz::CompositorFrame& frame,
       UseSingleSharedQuadState single_sqs) {
     IPC::Message msg(1, 2, IPC::Message::PRIORITY_NORMAL);
-    IPC::ParamTraits<CompositorFrame>::Write(&msg, frame);
+    IPC::ParamTraits<viz::CompositorFrame>::Write(&msg, frame);
     for (int i = 0; i < kNumWarmupRuns; ++i) {
-      CompositorFrame compositor_frame;
+      viz::CompositorFrame compositor_frame;
       ReadMessage(&msg, &compositor_frame);
     }
 
@@ -65,7 +67,7 @@
     size_t count = 0;
     while (start < end) {
       for (int i = 0; i < kTimeCheckInterval; ++i) {
-        CompositorFrame compositor_frame;
+        viz::CompositorFrame compositor_frame;
         ReadMessage(&msg, &compositor_frame);
         now = base::TimeTicks::Now();
         // We don't count iterations after the end time.
@@ -94,11 +96,11 @@
 
   static void RunSerializationTestParamTraits(
       const std::string& test_name,
-      const CompositorFrame& frame,
+      const viz::CompositorFrame& frame,
       UseSingleSharedQuadState single_sqs) {
     for (int i = 0; i < kNumWarmupRuns; ++i) {
       IPC::Message msg(1, 2, IPC::Message::PRIORITY_NORMAL);
-      IPC::ParamTraits<CompositorFrame>::Write(&msg, frame);
+      IPC::ParamTraits<viz::CompositorFrame>::Write(&msg, frame);
     }
 
     base::TimeTicks start = base::TimeTicks::Now();
@@ -110,7 +112,7 @@
     while (start < end) {
       for (int i = 0; i < kTimeCheckInterval; ++i) {
         IPC::Message msg(1, 2, IPC::Message::PRIORITY_NORMAL);
-        IPC::ParamTraits<CompositorFrame>::Write(&msg, frame);
+        IPC::ParamTraits<viz::CompositorFrame>::Write(&msg, frame);
         now = base::TimeTicks::Now();
         // We don't count iterations after the end time.
         if (now < end)
@@ -138,12 +140,12 @@
 
   static void RunDeserializationTestStructTraits(
       const std::string& test_name,
-      const CompositorFrame& frame,
+      const viz::CompositorFrame& frame,
       UseSingleSharedQuadState single_sqs) {
     mojo::Message message =
         viz::mojom::CompositorFrame::SerializeAsMessage(&frame);
     for (int i = 0; i < kNumWarmupRuns; ++i) {
-      CompositorFrame compositor_frame;
+      viz::CompositorFrame compositor_frame;
       viz::mojom::CompositorFrame::Deserialize(
           message.payload(), message.payload_num_bytes(), &compositor_frame);
     }
@@ -156,7 +158,7 @@
     size_t count = 0;
     while (start < end) {
       for (int i = 0; i < kTimeCheckInterval; ++i) {
-        CompositorFrame compositor_frame;
+        viz::CompositorFrame compositor_frame;
         viz::mojom::CompositorFrame::Deserialize(
             message.payload(), message.payload_num_bytes(), &compositor_frame);
         now = base::TimeTicks::Now();
@@ -187,7 +189,7 @@
 
   static void RunSerializationTestStructTraits(
       const std::string& test_name,
-      const CompositorFrame& frame,
+      const viz::CompositorFrame& frame,
       UseSingleSharedQuadState single_sqs) {
     for (int i = 0; i < kNumWarmupRuns; ++i) {
       mojo::Message message =
@@ -230,7 +232,7 @@
   }
 
   static void RunComplexCompositorFrameTest(const std::string& test_name) {
-    CompositorFrame frame;
+    viz::CompositorFrame frame;
     frame.metadata.begin_frame_ack = viz::BeginFrameAck(0, 1, true);
 
     std::vector<viz::TransferableResource>& resource_list = frame.resource_list;
@@ -397,7 +399,7 @@
                                      uint32_t num_quads,
                                      uint32_t num_passes,
                                      UseSingleSharedQuadState single_sqs) {
-    CompositorFrame frame;
+    viz::CompositorFrame frame;
     frame.metadata.begin_frame_ack = viz::BeginFrameAck(0, 1, true);
 
     for (uint32_t i = 0; i < num_passes; ++i) {
@@ -419,7 +421,7 @@
   }
 
   static void RunTest(const std::string& test_name,
-                      CompositorFrame frame,
+                      viz::CompositorFrame frame,
                       UseSingleSharedQuadState single_sqs) {
     RunSerializationTestStructTraits(test_name, frame, single_sqs);
     RunDeserializationTestStructTraits(test_name, frame, single_sqs);
diff --git a/cc/layers/surface_layer.cc b/cc/layers/surface_layer.cc
index e128bc7..a1434f0 100644
--- a/cc/layers/surface_layer.cc
+++ b/cc/layers/surface_layer.cc
@@ -32,7 +32,7 @@
  private:
   void DidActivate() override {}
 
-  void WillSwap(CompositorFrameMetadata* metadata) override {}
+  void WillSwap(viz::CompositorFrameMetadata* metadata) override {}
 
   void DidSwap() override {
     main_task_runner_->PostTask(FROM_HERE, reference_returner_);
diff --git a/cc/layers/surface_layer_unittest.cc b/cc/layers/surface_layer_unittest.cc
index 9d744f0..7c40a80 100644
--- a/cc/layers/surface_layer_unittest.cc
+++ b/cc/layers/surface_layer_unittest.cc
@@ -15,7 +15,6 @@
 #include "cc/layers/solid_color_layer.h"
 #include "cc/layers/surface_layer.h"
 #include "cc/layers/surface_layer_impl.h"
-#include "cc/output/compositor_frame.h"
 #include "cc/test/fake_impl_task_runner_provider.h"
 #include "cc/test/fake_layer_tree_host.h"
 #include "cc/test/fake_layer_tree_host_client.h"
@@ -24,6 +23,7 @@
 #include "cc/test/layer_tree_test.h"
 #include "cc/test/test_task_graph_runner.h"
 #include "cc/trees/layer_tree_host.h"
+#include "components/viz/common/quads/compositor_frame.h"
 #include "components/viz/common/surfaces/sequence_surface_reference_factory.h"
 #include "components/viz/common/surfaces/surface_info.h"
 #include "testing/gmock/include/gmock/gmock.h"
diff --git a/cc/layers/texture_layer.cc b/cc/layers/texture_layer.cc
index df6e6c1..da5cae7 100644
--- a/cc/layers/texture_layer.cc
+++ b/cc/layers/texture_layer.cc
@@ -13,8 +13,6 @@
 #include "cc/base/simple_enclosed_region.h"
 #include "cc/layers/texture_layer_client.h"
 #include "cc/layers/texture_layer_impl.h"
-#include "cc/resources/single_release_callback_impl.h"
-#include "cc/trees/blocking_task_runner.h"
 #include "cc/trees/layer_tree_host.h"
 #include "components/viz/common/quads/single_release_callback.h"
 
@@ -219,14 +217,15 @@
   texture_layer->SetBlendBackgroundColor(blend_background_color_);
   if (needs_set_mailbox_) {
     viz::TextureMailbox texture_mailbox;
-    std::unique_ptr<SingleReleaseCallbackImpl> release_callback_impl;
+    std::unique_ptr<viz::SingleReleaseCallback> release_callback;
     if (holder_ref_) {
       TextureMailboxHolder* holder = holder_ref_->holder();
       texture_mailbox = holder->mailbox();
-      release_callback_impl = holder->GetCallbackForImplThread();
+      release_callback = holder->GetCallbackForImplThread(
+          layer_tree_host()->GetTaskRunnerProvider()->MainThreadTaskRunner());
     }
     texture_layer->SetTextureMailbox(texture_mailbox,
-                                     std::move(release_callback_impl));
+                                     std::move(release_callback));
     needs_set_mailbox_ = false;
   }
 }
@@ -271,14 +270,16 @@
   is_lost_ = is_lost;
 }
 
-std::unique_ptr<SingleReleaseCallbackImpl>
-TextureLayer::TextureMailboxHolder::GetCallbackForImplThread() {
+std::unique_ptr<viz::SingleReleaseCallback>
+TextureLayer::TextureMailboxHolder::GetCallbackForImplThread(
+    scoped_refptr<base::SequencedTaskRunner> main_thread_task_runner) {
   // We can't call GetCallbackForImplThread if we released the main thread
   // reference.
   DCHECK_GT(internal_references_, 0u);
   InternalAddRef();
-  return SingleReleaseCallbackImpl::Create(
-      base::Bind(&TextureMailboxHolder::ReturnAndReleaseOnImplThread, this));
+  return viz::SingleReleaseCallback::Create(
+      base::Bind(&TextureMailboxHolder::ReturnAndReleaseOnImplThread, this,
+                 std::move(main_thread_task_runner)));
 }
 
 void TextureLayer::TextureMailboxHolder::InternalAddRef() {
@@ -295,9 +296,9 @@
 }
 
 void TextureLayer::TextureMailboxHolder::ReturnAndReleaseOnImplThread(
+    const scoped_refptr<base::SequencedTaskRunner>& main_thread_task_runner,
     const gpu::SyncToken& sync_token,
-    bool is_lost,
-    BlockingTaskRunner* main_thread_task_runner) {
+    bool is_lost) {
   Return(sync_token, is_lost);
   main_thread_task_runner->PostTask(
       FROM_HERE, base::Bind(&TextureMailboxHolder::InternalRelease, this));
diff --git a/cc/layers/texture_layer.h b/cc/layers/texture_layer.h
index c13f47b..5fe35c2 100644
--- a/cc/layers/texture_layer.h
+++ b/cc/layers/texture_layer.h
@@ -24,8 +24,7 @@
 }
 
 namespace cc {
-class BlockingTaskRunner;
-class SingleReleaseCallbackImpl;
+class SingleReleaseCallback;
 class TextureLayerClient;
 
 // A Layer containing a the rendered output of a plugin instance.
@@ -50,7 +49,8 @@
 
     // Gets a viz::ReleaseCallback that can be called from another thread. Note:
     // the caller must ensure the callback is called.
-    std::unique_ptr<SingleReleaseCallbackImpl> GetCallbackForImplThread();
+    std::unique_ptr<viz::SingleReleaseCallback> GetCallbackForImplThread(
+        scoped_refptr<base::SequencedTaskRunner> main_thread_task_runner);
 
    protected:
     friend class TextureLayer;
@@ -71,9 +71,9 @@
     void InternalAddRef();
     void InternalRelease();
     void ReturnAndReleaseOnImplThread(
+        const scoped_refptr<base::SequencedTaskRunner>& main_thread_task_runner,
         const gpu::SyncToken& sync_token,
-        bool is_lost,
-        BlockingTaskRunner* main_thread_task_runner);
+        bool is_lost);
 
     // These members are only accessed on the main thread, or on the impl thread
     // during commit where the main thread is blocked.
diff --git a/cc/layers/texture_layer_impl.cc b/cc/layers/texture_layer_impl.cc
index 3ee0505..ee7e4f93 100644
--- a/cc/layers/texture_layer_impl.cc
+++ b/cc/layers/texture_layer_impl.cc
@@ -11,9 +11,9 @@
 
 #include "base/strings/stringprintf.h"
 #include "cc/resources/scoped_resource.h"
-#include "cc/resources/single_release_callback_impl.h"
 #include "cc/trees/layer_tree_impl.h"
 #include "cc/trees/occlusion.h"
+#include "components/viz/common/quads/single_release_callback.h"
 #include "components/viz/common/quads/solid_color_draw_quad.h"
 #include "components/viz/common/quads/texture_draw_quad.h"
 #include "components/viz/common/resources/platform_color.h"
@@ -41,7 +41,7 @@
 
 void TextureLayerImpl::SetTextureMailbox(
     const viz::TextureMailbox& mailbox,
-    std::unique_ptr<SingleReleaseCallbackImpl> release_callback) {
+    std::unique_ptr<viz::SingleReleaseCallback> release_callback) {
   DCHECK_EQ(mailbox.IsValid(), !!release_callback);
   FreeTextureMailbox();
   texture_mailbox_ = mailbox;
@@ -248,12 +248,8 @@
 void TextureLayerImpl::FreeTextureMailbox() {
   if (own_mailbox_) {
     DCHECK(!external_texture_resource_);
-    if (release_callback_) {
-      release_callback_->Run(texture_mailbox_.sync_token(), false,
-                             layer_tree_impl()
-                                 ->task_runner_provider()
-                                 ->blocking_main_thread_task_runner());
-    }
+    if (release_callback_)
+      release_callback_->Run(texture_mailbox_.sync_token(), false);
     texture_mailbox_ = viz::TextureMailbox();
     release_callback_ = nullptr;
   } else if (external_texture_resource_) {
diff --git a/cc/layers/texture_layer_impl.h b/cc/layers/texture_layer_impl.h
index da51a1f..0f942c5 100644
--- a/cc/layers/texture_layer_impl.h
+++ b/cc/layers/texture_layer_impl.h
@@ -13,8 +13,11 @@
 #include "cc/cc_export.h"
 #include "cc/layers/layer_impl.h"
 
+namespace viz {
+class SingleReleaseCallback;
+}
+
 namespace cc {
-class SingleReleaseCallbackImpl;
 class ScopedResource;
 
 class CC_EXPORT TextureLayerImpl : public LayerImpl {
@@ -55,7 +58,7 @@
 
   void SetTextureMailbox(
       const viz::TextureMailbox& mailbox,
-      std::unique_ptr<SingleReleaseCallbackImpl> release_callback);
+      std::unique_ptr<viz::SingleReleaseCallback> release_callback);
 
  private:
   TextureLayerImpl(LayerTreeImpl* tree_impl, int id);
@@ -75,7 +78,7 @@
   std::unique_ptr<ScopedResource> texture_copy_;
 
   viz::TextureMailbox texture_mailbox_;
-  std::unique_ptr<SingleReleaseCallbackImpl> release_callback_;
+  std::unique_ptr<viz::SingleReleaseCallback> release_callback_;
   bool own_mailbox_;
   bool valid_texture_copy_;
 
diff --git a/cc/layers/texture_layer_impl_unittest.cc b/cc/layers/texture_layer_impl_unittest.cc
index 7fcc1f9..b1f0e5b 100644
--- a/cc/layers/texture_layer_impl_unittest.cc
+++ b/cc/layers/texture_layer_impl_unittest.cc
@@ -18,9 +18,7 @@
 namespace cc {
 namespace {
 
-void IgnoreCallback(const gpu::SyncToken& sync_token,
-                    bool lost,
-                    BlockingTaskRunner* main_thread_task_runner) {}
+void IgnoreCallback(const gpu::SyncToken& sync_token, bool lost) {}
 
 TEST(TextureLayerImplTest, VisibleOpaqueRegion) {
   const gfx::Size layer_bounds(100, 100);
@@ -71,7 +69,7 @@
   texture_layer_impl->SetDrawsContent(true);
   texture_layer_impl->SetTextureMailbox(
       texture_mailbox,
-      SingleReleaseCallbackImpl::Create(base::Bind(&IgnoreCallback)));
+      viz::SingleReleaseCallback::Create(base::Bind(&IgnoreCallback)));
 
   impl.CalcDrawProps(viewport_size);
 
@@ -131,7 +129,7 @@
   texture_layer_impl->SetDrawsContent(true);
   texture_layer_impl->SetTextureMailbox(
       texture_mailbox,
-      SingleReleaseCallbackImpl::Create(base::Bind(&IgnoreCallback)));
+      viz::SingleReleaseCallback::Create(base::Bind(&IgnoreCallback)));
 
   impl.CalcDrawProps(viewport_size);
 
@@ -173,11 +171,10 @@
   texture_layer_impl->SetBounds(layer_size);
   texture_layer_impl->SetDrawsContent(true);
   texture_layer_impl->SetTextureMailbox(
-      texture_mailbox,
-      SingleReleaseCallbackImpl::Create(base::Bind(
-          [](bool* released, const gpu::SyncToken& sync_token, bool lost,
-             BlockingTaskRunner* main_thread_task_runner) { *released = true; },
-          base::Unretained(&released))));
+      texture_mailbox, viz::SingleReleaseCallback::Create(base::Bind(
+                           [](bool* released, const gpu::SyncToken& sync_token,
+                              bool lost) { *released = true; },
+                           base::Unretained(&released))));
 
   impl.CalcDrawProps(viewport_size);
 
diff --git a/cc/layers/texture_layer_unittest.cc b/cc/layers/texture_layer_unittest.cc
index ed4de24d..78262dd 100644
--- a/cc/layers/texture_layer_unittest.cc
+++ b/cc/layers/texture_layer_unittest.cc
@@ -34,7 +34,6 @@
 #include "cc/test/stub_layer_tree_host_single_thread_client.h"
 #include "cc/test/test_task_graph_runner.h"
 #include "cc/test/test_web_graphics_context_3d.h"
-#include "cc/trees/blocking_task_runner.h"
 #include "cc/trees/layer_tree_host.h"
 #include "cc/trees/layer_tree_impl.h"
 #include "cc/trees/single_thread_proxy.h"
@@ -81,7 +80,6 @@
   }
 
   MOCK_METHOD0(SetNeedsCommit, void());
-  MOCK_METHOD0(SetNeedsUpdateLayers, void());
   MOCK_METHOD0(StartRateLimiter, void());
   MOCK_METHOD0(StopRateLimiter, void());
 
@@ -136,16 +134,6 @@
                void(viz::SharedBitmap* shared_bitmap,
                     const gpu::SyncToken& sync_token,
                     bool lost_resource));
-  MOCK_METHOD4(ReleaseImpl,
-               void(const gpu::Mailbox& mailbox,
-                    const gpu::SyncToken& sync_token,
-                    bool lost_resource,
-                    BlockingTaskRunner* main_thread_task_runner));
-  MOCK_METHOD4(ReleaseImpl2,
-               void(viz::SharedBitmap* shared_bitmap,
-                    const gpu::SyncToken& sync_token,
-                    bool lost_resource,
-                    BlockingTaskRunner* main_thread_task_runner));
 };
 
 struct CommonMailboxObjects {
@@ -166,12 +154,6 @@
     release_mailbox2_ = base::Bind(&MockMailboxCallback::Release,
                                    base::Unretained(&mock_callback_),
                                    mailbox_name2_);
-    release_mailbox1_impl_ = base::Bind(&MockMailboxCallback::ReleaseImpl,
-                                        base::Unretained(&mock_callback_),
-                                        mailbox_name1_);
-    release_mailbox2_impl_ = base::Bind(&MockMailboxCallback::ReleaseImpl,
-                                        base::Unretained(&mock_callback_),
-                                        mailbox_name2_);
     const uint32_t arbitrary_target1 = GL_TEXTURE_2D;
     const uint32_t arbitrary_target2 = GL_TEXTURE_EXTERNAL_OES;
     mailbox1_ =
@@ -184,9 +166,6 @@
     release_mailbox3_ =
         base::Bind(&MockMailboxCallback::Release2,
                    base::Unretained(&mock_callback_), shared_bitmap_.get());
-    release_mailbox3_impl_ =
-        base::Bind(&MockMailboxCallback::ReleaseImpl2,
-                   base::Unretained(&mock_callback_), shared_bitmap_.get());
     mailbox3_ = viz::TextureMailbox(shared_bitmap_.get(), size);
   }
 
@@ -196,9 +175,6 @@
   viz::ReleaseCallback release_mailbox1_;
   viz::ReleaseCallback release_mailbox2_;
   viz::ReleaseCallback release_mailbox3_;
-  ReleaseCallbackImpl release_mailbox1_impl_;
-  ReleaseCallbackImpl release_mailbox2_impl_;
-  ReleaseCallbackImpl release_mailbox3_impl_;
   viz::TextureMailbox mailbox1_;
   viz::TextureMailbox mailbox2_;
   viz::TextureMailbox mailbox3_;
@@ -344,11 +320,6 @@
   TextureLayerMailboxHolderTest()
       : main_thread_("MAIN") {
     main_thread_.Start();
-    main_thread_.task_runner()->PostTask(
-        FROM_HERE,
-        base::BindOnce(&TextureLayerMailboxHolderTest::InitializeOnMain,
-                       base::Unretained(this)));
-    Wait(main_thread_);
   }
 
   void Wait(const base::Thread& thread) {
@@ -368,29 +339,16 @@
 
   void ReleaseMainRef() { main_ref_ = nullptr; }
 
-  void CreateImplRef(std::unique_ptr<SingleReleaseCallbackImpl>* impl_ref) {
-    *impl_ref = main_ref_->holder()->GetCallbackForImplThread();
-  }
-
-  void CapturePostTasksAndWait(base::WaitableEvent* begin_capture,
-                               base::WaitableEvent* wait_for_capture,
-                               base::WaitableEvent* stop_capture) {
-    begin_capture->Wait();
-    BlockingTaskRunner::CapturePostTasks capture(
-        main_thread_task_runner_.get());
-    wait_for_capture->Signal();
-    stop_capture->Wait();
+  void CreateImplRef(
+      std::unique_ptr<viz::SingleReleaseCallback>* impl_ref,
+      scoped_refptr<base::SequencedTaskRunner> main_thread_task_runner) {
+    *impl_ref = main_ref_->holder()->GetCallbackForImplThread(
+        std::move(main_thread_task_runner));
   }
 
  protected:
-  void InitializeOnMain() {
-    main_thread_task_runner_ =
-        BlockingTaskRunner::Create(main_thread_.task_runner());
-  }
-
   std::unique_ptr<TestMailboxHolder::MainThreadReference> main_ref_;
   base::Thread main_thread_;
-  std::unique_ptr<BlockingTaskRunner> main_thread_task_runner_;
 };
 
 TEST_F(TextureLayerMailboxHolderTest, TwoCompositors_BothReleaseThenMain) {
@@ -406,27 +364,27 @@
 
   // The texture layer is attached to compositor1, and passes a reference to its
   // impl tree.
-  std::unique_ptr<SingleReleaseCallbackImpl> compositor1;
+  std::unique_ptr<viz::SingleReleaseCallback> compositor1;
   main_thread_.task_runner()->PostTask(
       FROM_HERE, base::BindOnce(&TextureLayerMailboxHolderTest::CreateImplRef,
-                                base::Unretained(this), &compositor1));
+                                base::Unretained(this), &compositor1,
+                                main_thread_.task_runner()));
 
   // Then the texture layer is removed and attached to compositor2, and passes a
   // reference to its impl tree.
-  std::unique_ptr<SingleReleaseCallbackImpl> compositor2;
+  std::unique_ptr<viz::SingleReleaseCallback> compositor2;
   main_thread_.task_runner()->PostTask(
       FROM_HERE, base::BindOnce(&TextureLayerMailboxHolderTest::CreateImplRef,
-                                base::Unretained(this), &compositor2));
+                                base::Unretained(this), &compositor2,
+                                main_thread_.task_runner()));
 
   Wait(main_thread_);
   Mock::VerifyAndClearExpectations(&test_data_.mock_callback_);
 
   // The compositors both destroy their impl trees before the main thread layer
   // is destroyed.
-  compositor1->Run(SyncTokenFromUInt(100), false,
-                   main_thread_task_runner_.get());
-  compositor2->Run(SyncTokenFromUInt(200), false,
-                   main_thread_task_runner_.get());
+  compositor1->Run(SyncTokenFromUInt(100), false);
+  compositor2->Run(SyncTokenFromUInt(200), false);
 
   Wait(main_thread_);
 
@@ -459,24 +417,25 @@
 
   // The texture layer is attached to compositor1, and passes a reference to its
   // impl tree.
-  std::unique_ptr<SingleReleaseCallbackImpl> compositor1;
+  std::unique_ptr<viz::SingleReleaseCallback> compositor1;
   main_thread_.task_runner()->PostTask(
       FROM_HERE, base::BindOnce(&TextureLayerMailboxHolderTest::CreateImplRef,
-                                base::Unretained(this), &compositor1));
+                                base::Unretained(this), &compositor1,
+                                main_thread_.task_runner()));
 
   // Then the texture layer is removed and attached to compositor2, and passes a
   // reference to its impl tree.
-  std::unique_ptr<SingleReleaseCallbackImpl> compositor2;
+  std::unique_ptr<viz::SingleReleaseCallback> compositor2;
   main_thread_.task_runner()->PostTask(
       FROM_HERE, base::BindOnce(&TextureLayerMailboxHolderTest::CreateImplRef,
-                                base::Unretained(this), &compositor2));
+                                base::Unretained(this), &compositor2,
+                                main_thread_.task_runner()));
 
   Wait(main_thread_);
   Mock::VerifyAndClearExpectations(&test_data_.mock_callback_);
 
   // One compositor destroys their impl tree.
-  compositor1->Run(SyncTokenFromUInt(100), false,
-                   main_thread_task_runner_.get());
+  compositor1->Run(SyncTokenFromUInt(100), false);
 
   // Then the main thread reference is destroyed.
   main_thread_.task_runner()->PostTask(
@@ -494,8 +453,7 @@
               Release(test_data_.mailbox_name1_, SyncTokenFromUInt(200), true))
       .Times(1);
 
-  compositor2->Run(SyncTokenFromUInt(200), true,
-                   main_thread_task_runner_.get());
+  compositor2->Run(SyncTokenFromUInt(200), true);
   Wait(main_thread_);
   Mock::VerifyAndClearExpectations(&test_data_.mock_callback_);
 }
@@ -513,17 +471,19 @@
 
   // The texture layer is attached to compositor1, and passes a reference to its
   // impl tree.
-  std::unique_ptr<SingleReleaseCallbackImpl> compositor1;
+  std::unique_ptr<viz::SingleReleaseCallback> compositor1;
   main_thread_.task_runner()->PostTask(
       FROM_HERE, base::BindOnce(&TextureLayerMailboxHolderTest::CreateImplRef,
-                                base::Unretained(this), &compositor1));
+                                base::Unretained(this), &compositor1,
+                                main_thread_.task_runner()));
 
   // Then the texture layer is removed and attached to compositor2, and passes a
   // reference to its impl tree.
-  std::unique_ptr<SingleReleaseCallbackImpl> compositor2;
+  std::unique_ptr<viz::SingleReleaseCallback> compositor2;
   main_thread_.task_runner()->PostTask(
       FROM_HERE, base::BindOnce(&TextureLayerMailboxHolderTest::CreateImplRef,
-                                base::Unretained(this), &compositor2));
+                                base::Unretained(this), &compositor2,
+                                main_thread_.task_runner()));
 
   Wait(main_thread_);
   Mock::VerifyAndClearExpectations(&test_data_.mock_callback_);
@@ -534,8 +494,7 @@
                                 base::Unretained(this)));
 
   // One compositor destroys their impl tree.
-  compositor2->Run(SyncTokenFromUInt(200), false,
-                   main_thread_task_runner_.get());
+  compositor2->Run(SyncTokenFromUInt(200), false);
 
   Wait(main_thread_);
 
@@ -548,91 +507,11 @@
               Release(test_data_.mailbox_name1_, SyncTokenFromUInt(100), true))
       .Times(1);
 
-  compositor1->Run(SyncTokenFromUInt(100), true,
-                   main_thread_task_runner_.get());
+  compositor1->Run(SyncTokenFromUInt(100), true);
   Wait(main_thread_);
   Mock::VerifyAndClearExpectations(&test_data_.mock_callback_);
 }
 
-TEST_F(TextureLayerMailboxHolderTest, TwoCompositors_SecondImplRefShortcut) {
-  scoped_refptr<TextureLayer> test_layer =
-      TextureLayer::CreateForMailbox(nullptr);
-  ASSERT_TRUE(test_layer.get());
-
-  main_thread_.task_runner()->PostTask(
-      FROM_HERE, base::BindOnce(&TextureLayerMailboxHolderTest::CreateMainRef,
-                                base::Unretained(this)));
-
-  Wait(main_thread_);
-
-  // The texture layer is attached to compositor1, and passes a reference to its
-  // impl tree.
-  std::unique_ptr<SingleReleaseCallbackImpl> compositor1;
-  main_thread_.task_runner()->PostTask(
-      FROM_HERE, base::BindOnce(&TextureLayerMailboxHolderTest::CreateImplRef,
-                                base::Unretained(this), &compositor1));
-
-  // Then the texture layer is removed and attached to compositor2, and passes a
-  // reference to its impl tree.
-  std::unique_ptr<SingleReleaseCallbackImpl> compositor2;
-  main_thread_.task_runner()->PostTask(
-      FROM_HERE, base::BindOnce(&TextureLayerMailboxHolderTest::CreateImplRef,
-                                base::Unretained(this), &compositor2));
-
-  Wait(main_thread_);
-  Mock::VerifyAndClearExpectations(&test_data_.mock_callback_);
-
-  // The main thread reference is destroyed first.
-  main_thread_.task_runner()->PostTask(
-      FROM_HERE, base::BindOnce(&TextureLayerMailboxHolderTest::ReleaseMainRef,
-                                base::Unretained(this)));
-
-  EXPECT_CALL(test_data_.mock_callback_,
-              Release(test_data_.mailbox_name1_, SyncTokenFromUInt(200), true))
-      .Times(1);
-
-  base::WaitableEvent begin_capture(
-      base::WaitableEvent::ResetPolicy::AUTOMATIC,
-      base::WaitableEvent::InitialState::NOT_SIGNALED);
-  base::WaitableEvent wait_for_capture(
-      base::WaitableEvent::ResetPolicy::AUTOMATIC,
-      base::WaitableEvent::InitialState::NOT_SIGNALED);
-  base::WaitableEvent stop_capture(
-      base::WaitableEvent::ResetPolicy::AUTOMATIC,
-      base::WaitableEvent::InitialState::NOT_SIGNALED);
-
-  // Post a task to start capturing tasks on the main thread. This will block
-  // the main thread until we signal the |stop_capture| event.
-  main_thread_.task_runner()->PostTask(
-      FROM_HERE,
-      base::BindOnce(&TextureLayerMailboxHolderTest::CapturePostTasksAndWait,
-                     base::Unretained(this), &begin_capture, &wait_for_capture,
-                     &stop_capture));
-
-  // Before the main thread capturing starts, one compositor destroys their
-  // impl reference. Since capturing did not start, this gets post-tasked to
-  // the main thread.
-  compositor1->Run(SyncTokenFromUInt(100), false,
-                   main_thread_task_runner_.get());
-
-  // Start capturing on the main thread.
-  begin_capture.Signal();
-  wait_for_capture.Wait();
-
-  // Meanwhile, the second compositor released its impl reference, but this task
-  // gets shortcutted directly to the main thread. This means the reference is
-  // released before compositor1, whose reference will be released later when
-  // the post-task is serviced. But since it was destroyed _on the impl thread_
-  // last, its sync point values should be used.
-  compositor2->Run(SyncTokenFromUInt(200), true,
-                   main_thread_task_runner_.get());
-
-  stop_capture.Signal();
-  Wait(main_thread_);
-
-  Mock::VerifyAndClearExpectations(&test_data_.mock_callback_);
-}
-
 class TextureLayerImplWithMailboxThreadedCallback : public LayerTreeTest {
  public:
   TextureLayerImplWithMailboxThreadedCallback() = default;
@@ -705,8 +584,16 @@
         break;
       case 7:
         EXPECT_EQ(4, callback_count_);
-        // Resetting the mailbox will call the callback now.
+        // Resetting the mailbox will call the callback now, before another
+        // commit is needed, as the ReleaseCallback is already in flight from
+        // RemoveFromParent().
         layer_->SetTextureMailbox(viz::TextureMailbox(), nullptr);
+        pending_callback_ = true;
+        frame_number_ = layer_tree_host()->SourceFrameNumber();
+        break;
+      case 8:
+        // A commit wasn't needed, the ReleaseCallback was already in flight.
+        EXPECT_EQ(frame_number_, layer_tree_host()->SourceFrameNumber());
         EXPECT_EQ(5, callback_count_);
         EndTest();
         break;
@@ -779,6 +666,7 @@
   base::ThreadChecker main_thread_;
   int callback_count_ = 0;
   int test_case_ = 0;
+  int frame_number_ = 0;
   // Whether we are waiting on a callback to advance the test case.
   bool pending_callback_ = false;
   scoped_refptr<Layer> root_;
@@ -913,11 +801,11 @@
 TEST_F(TextureLayerImplWithMailboxTest, TestWillDraw) {
   EXPECT_CALL(
       test_data_.mock_callback_,
-      ReleaseImpl(test_data_.mailbox_name1_, test_data_.sync_token1_, false, _))
+      Release(test_data_.mailbox_name1_, test_data_.sync_token1_, false))
       .Times(AnyNumber());
   EXPECT_CALL(
       test_data_.mock_callback_,
-      ReleaseImpl2(test_data_.shared_bitmap_.get(), gpu::SyncToken(), false, _))
+      Release2(test_data_.shared_bitmap_.get(), gpu::SyncToken(), false))
       .Times(AnyNumber());
   // Hardware mode.
   {
@@ -925,7 +813,7 @@
         TextureLayerImpl::Create(host_impl_.active_tree(), 1);
     impl_layer->SetTextureMailbox(
         test_data_.mailbox1_,
-        SingleReleaseCallbackImpl::Create(test_data_.release_mailbox1_impl_));
+        viz::SingleReleaseCallback::Create(test_data_.release_mailbox1_));
     EXPECT_TRUE(WillDraw(impl_layer.get(), DRAW_MODE_HARDWARE));
   }
 
@@ -942,7 +830,7 @@
         TextureLayerImpl::Create(host_impl_.active_tree(), 1);
     impl_layer->SetTextureMailbox(
         test_data_.mailbox3_,
-        SingleReleaseCallbackImpl::Create(test_data_.release_mailbox3_impl_));
+        viz::SingleReleaseCallback::Create(test_data_.release_mailbox3_));
     EXPECT_TRUE(WillDraw(impl_layer.get(), DRAW_MODE_HARDWARE));
   }
 
@@ -952,7 +840,7 @@
         TextureLayerImpl::Create(host_impl_.active_tree(), 1);
     impl_layer->SetTextureMailbox(
         test_data_.mailbox1_,
-        SingleReleaseCallbackImpl::Create(test_data_.release_mailbox1_impl_));
+        viz::SingleReleaseCallback::Create(test_data_.release_mailbox1_));
     EXPECT_FALSE(WillDraw(impl_layer.get(), DRAW_MODE_SOFTWARE));
   }
 
@@ -969,7 +857,7 @@
         TextureLayerImpl::Create(host_impl_.active_tree(), 1);
     impl_layer->SetTextureMailbox(
         test_data_.mailbox3_,
-        SingleReleaseCallbackImpl::Create(test_data_.release_mailbox3_impl_));
+        viz::SingleReleaseCallback::Create(test_data_.release_mailbox3_));
     EXPECT_TRUE(WillDraw(impl_layer.get(), DRAW_MODE_SOFTWARE));
   }
 
@@ -979,7 +867,7 @@
         TextureLayerImpl::Create(host_impl_.active_tree(), 1);
     impl_layer->SetTextureMailbox(
         test_data_.mailbox1_,
-        SingleReleaseCallbackImpl::Create(test_data_.release_mailbox1_impl_));
+        viz::SingleReleaseCallback::Create(test_data_.release_mailbox1_));
     EXPECT_FALSE(WillDraw(impl_layer.get(), DRAW_MODE_RESOURCELESS_SOFTWARE));
   }
 }
@@ -996,37 +884,39 @@
 
   pending_layer->SetTextureMailbox(
       test_data_.mailbox1_,
-      SingleReleaseCallbackImpl::Create(test_data_.release_mailbox1_impl_));
+      viz::SingleReleaseCallback::Create(test_data_.release_mailbox1_));
 
   // Test multiple commits without an activation.
   EXPECT_CALL(
       test_data_.mock_callback_,
-      ReleaseImpl(test_data_.mailbox_name1_, test_data_.sync_token1_, false, _))
+      Release(test_data_.mailbox_name1_, test_data_.sync_token1_, false))
       .Times(1);
   pending_layer->SetTextureMailbox(
       test_data_.mailbox2_,
-      SingleReleaseCallbackImpl::Create(test_data_.release_mailbox2_impl_));
+      viz::SingleReleaseCallback::Create(test_data_.release_mailbox2_));
   Mock::VerifyAndClearExpectations(&test_data_.mock_callback_);
 
   // Test callback after activation.
   pending_layer->PushPropertiesTo(active_layer.get());
   active_layer->DidBecomeActive();
 
-  EXPECT_CALL(test_data_.mock_callback_, ReleaseImpl(_, _, _, _)).Times(0);
+  EXPECT_CALL(test_data_.mock_callback_, Release(_, _, _)).Times(0);
   pending_layer->SetTextureMailbox(
       test_data_.mailbox1_,
-      SingleReleaseCallbackImpl::Create(test_data_.release_mailbox1_impl_));
+      viz::SingleReleaseCallback::Create(test_data_.release_mailbox1_));
   Mock::VerifyAndClearExpectations(&test_data_.mock_callback_);
 
   EXPECT_CALL(test_data_.mock_callback_,
-              ReleaseImpl(test_data_.mailbox_name2_, _, false, _)).Times(1);
+              Release(test_data_.mailbox_name2_, _, false))
+      .Times(1);
   pending_layer->PushPropertiesTo(active_layer.get());
   active_layer->DidBecomeActive();
   Mock::VerifyAndClearExpectations(&test_data_.mock_callback_);
 
   // Test resetting the mailbox.
   EXPECT_CALL(test_data_.mock_callback_,
-              ReleaseImpl(test_data_.mailbox_name1_, _, false, _)).Times(1);
+              Release(test_data_.mailbox_name1_, _, false))
+      .Times(1);
   pending_layer->SetTextureMailbox(viz::TextureMailbox(), nullptr);
   pending_layer->PushPropertiesTo(active_layer.get());
   active_layer->DidBecomeActive();
@@ -1035,11 +925,11 @@
   // Test destructor.
   EXPECT_CALL(
       test_data_.mock_callback_,
-      ReleaseImpl(test_data_.mailbox_name1_, test_data_.sync_token1_, false, _))
+      Release(test_data_.mailbox_name1_, test_data_.sync_token1_, false))
       .Times(1);
   pending_layer->SetTextureMailbox(
       test_data_.mailbox1_,
-      SingleReleaseCallbackImpl::Create(test_data_.release_mailbox1_impl_));
+      viz::SingleReleaseCallback::Create(test_data_.release_mailbox1_));
 }
 
 TEST_F(TextureLayerImplWithMailboxTest,
@@ -1049,10 +939,11 @@
   ASSERT_TRUE(impl_layer);
 
   EXPECT_CALL(test_data_.mock_callback_,
-              ReleaseImpl(test_data_.mailbox_name1_, _, false, _)).Times(1);
+              Release(test_data_.mailbox_name1_, _, false))
+      .Times(1);
   impl_layer->SetTextureMailbox(
       test_data_.mailbox1_,
-      SingleReleaseCallbackImpl::Create(test_data_.release_mailbox1_impl_));
+      viz::SingleReleaseCallback::Create(test_data_.release_mailbox1_));
   impl_layer->DidBecomeActive();
   EXPECT_TRUE(impl_layer->WillDraw(
       DRAW_MODE_HARDWARE, host_impl_.active_tree()->resource_provider()));
@@ -1065,7 +956,7 @@
       host_impl_.active_tree()->resource_provider();
   viz::ResourceId id = provider->CreateResourceFromTextureMailbox(
       test_data_.mailbox1_,
-      SingleReleaseCallbackImpl::Create(test_data_.release_mailbox1_impl_));
+      viz::SingleReleaseCallback::Create(test_data_.release_mailbox1_));
   provider->AllocateForTesting(id);
 
   // Transfer some resources to the parent.
@@ -1074,11 +965,12 @@
   std::vector<viz::TransferableResource> list;
   provider->PrepareSendToParent(resource_ids_to_transfer, &list);
   EXPECT_TRUE(provider->InUseByConsumer(id));
-  EXPECT_CALL(test_data_.mock_callback_, ReleaseImpl(_, _, _, _)).Times(0);
+  EXPECT_CALL(test_data_.mock_callback_, Release(_, _, _)).Times(0);
   provider->DeleteResource(id);
   Mock::VerifyAndClearExpectations(&test_data_.mock_callback_);
   EXPECT_CALL(test_data_.mock_callback_,
-              ReleaseImpl(test_data_.mailbox_name1_, _, false, _)).Times(1);
+              Release(test_data_.mailbox_name1_, _, false))
+      .Times(1);
   std::vector<viz::ReturnedResource> returned =
       viz::TransferableResource::ReturnResources(list);
   provider->ReceiveReturnsFromParent(returned);
diff --git a/cc/layers/video_layer_impl.cc b/cc/layers/video_layer_impl.cc
index 618c718da..7d84abf6 100644
--- a/cc/layers/video_layer_impl.cc
+++ b/cc/layers/video_layer_impl.cc
@@ -11,10 +11,10 @@
 #include "base/memory/ptr_util.h"
 #include "cc/layers/video_frame_provider_client_impl.h"
 #include "cc/resources/resource_provider.h"
-#include "cc/resources/single_release_callback_impl.h"
 #include "cc/trees/layer_tree_impl.h"
 #include "cc/trees/occlusion.h"
 #include "cc/trees/task_runner_provider.h"
+#include "components/viz/common/quads/single_release_callback.h"
 #include "components/viz/common/quads/stream_video_draw_quad.h"
 #include "components/viz/common/quads/texture_draw_quad.h"
 #include "components/viz/common/quads/yuv_video_draw_quad.h"
@@ -129,7 +129,7 @@
   for (size_t i = 0; i < external_resources.mailboxes.size(); ++i) {
     unsigned resource_id = resource_provider->CreateResourceFromTextureMailbox(
         external_resources.mailboxes[i],
-        SingleReleaseCallbackImpl::Create(
+        viz::SingleReleaseCallback::Create(
             external_resources.release_callbacks[i]),
         external_resources.read_lock_fences_enabled,
         external_resources.buffer_format);
@@ -337,10 +337,7 @@
   if (frame_resource_type_ ==
       VideoFrameExternalResources::SOFTWARE_RESOURCE) {
     for (size_t i = 0; i < software_resources_.size(); ++i) {
-      software_release_callback_.Run(gpu::SyncToken(), false,
-                                     layer_tree_impl()
-                                         ->task_runner_provider()
-                                         ->blocking_main_thread_task_runner());
+      software_release_callback_.Run(gpu::SyncToken(), false);
     }
 
     software_resources_.clear();
diff --git a/cc/layers/video_layer_impl.h b/cc/layers/video_layer_impl.h
index 8e4a1a3e..0bf9a2da 100644
--- a/cc/layers/video_layer_impl.h
+++ b/cc/layers/video_layer_impl.h
@@ -10,8 +10,8 @@
 #include "base/macros.h"
 #include "cc/cc_export.h"
 #include "cc/layers/layer_impl.h"
-#include "cc/resources/release_callback_impl.h"
 #include "cc/resources/video_resource_updater.h"
+#include "components/viz/common/quads/release_callback.h"
 #include "media/base/video_rotation.h"
 
 namespace media {
@@ -85,7 +85,7 @@
   // ExternalResource (aka TextureMailbox) classes.
   std::vector<unsigned> software_resources_;
   // Called once for each software resource.
-  ReleaseCallbackImpl software_release_callback_;
+  viz::ReleaseCallback software_release_callback_;
 
   DISALLOW_COPY_AND_ASSIGN(VideoLayerImpl);
 };
diff --git a/cc/resources/display_resource_provider.cc b/cc/resources/display_resource_provider.cc
index cb31b65..19dafce 100644
--- a/cc/resources/display_resource_provider.cc
+++ b/cc/resources/display_resource_provider.cc
@@ -18,14 +18,12 @@
     viz::ContextProvider* compositor_context_provider,
     viz::SharedBitmapManager* shared_bitmap_manager,
     gpu::GpuMemoryBufferManager* gpu_memory_buffer_manager,
-    BlockingTaskRunner* blocking_main_thread_task_runner,
     bool delegated_sync_points_required,
     bool enable_color_correct_rasterization,
     const viz::ResourceSettings& resource_settings)
     : ResourceProvider(compositor_context_provider,
                        shared_bitmap_manager,
                        gpu_memory_buffer_manager,
-                       blocking_main_thread_task_runner,
                        delegated_sync_points_required,
                        enable_color_correct_rasterization,
                        resource_settings) {}
@@ -252,8 +250,7 @@
     returned->sync_token = new_sync_token;
 
   if (!to_return.empty())
-    child_info->return_callback.Run(to_return,
-                                    blocking_main_thread_task_runner_);
+    child_info->return_callback.Run(to_return);
 
   if (child_info->marked_for_deletion &&
       child_info->child_to_parent_map.empty()) {
@@ -286,8 +283,7 @@
           "cc", "DisplayResourceProvider::ReceiveFromChild dropping invalid");
       std::vector<viz::ReturnedResource> to_return;
       to_return.push_back(it->ToReturnedResource());
-      child_info.return_callback.Run(to_return,
-                                     blocking_main_thread_task_runner_);
+      child_info.return_callback.Run(to_return);
       continue;
     }
 
diff --git a/cc/resources/display_resource_provider.h b/cc/resources/display_resource_provider.h
index 33ecbb1..66a64b9 100644
--- a/cc/resources/display_resource_provider.h
+++ b/cc/resources/display_resource_provider.h
@@ -14,7 +14,6 @@
 }  // namespace viz
 
 namespace cc {
-class BlockingTaskRunner;
 
 // This class is not thread-safe and can only be called from the thread it was
 // created on.
@@ -24,7 +23,6 @@
       viz::ContextProvider* compositor_context_provider,
       viz::SharedBitmapManager* shared_bitmap_manager,
       gpu::GpuMemoryBufferManager* gpu_memory_buffer_manager,
-      BlockingTaskRunner* blocking_main_thread_task_runner,
       bool delegated_sync_points_required,
       bool enable_color_correct_rasterization,
       const viz::ResourceSettings& resource_settings);
diff --git a/cc/resources/layer_tree_resource_provider.cc b/cc/resources/layer_tree_resource_provider.cc
index c37f56a..d82b054 100644
--- a/cc/resources/layer_tree_resource_provider.cc
+++ b/cc/resources/layer_tree_resource_provider.cc
@@ -18,14 +18,12 @@
     viz::ContextProvider* compositor_context_provider,
     viz::SharedBitmapManager* shared_bitmap_manager,
     gpu::GpuMemoryBufferManager* gpu_memory_buffer_manager,
-    BlockingTaskRunner* blocking_main_thread_task_runner,
     bool delegated_sync_points_required,
     bool enable_color_correct_rasterization,
     const viz::ResourceSettings& resource_settings)
     : ResourceProvider(compositor_context_provider,
                        shared_bitmap_manager,
                        gpu_memory_buffer_manager,
-                       blocking_main_thread_task_runner,
                        delegated_sync_points_required,
                        enable_color_correct_rasterization,
                        resource_settings) {}
diff --git a/cc/resources/layer_tree_resource_provider.h b/cc/resources/layer_tree_resource_provider.h
index 95c1f39..25603c3 100644
--- a/cc/resources/layer_tree_resource_provider.h
+++ b/cc/resources/layer_tree_resource_provider.h
@@ -12,7 +12,6 @@
 }  // namespace viz
 
 namespace cc {
-class BlockingTaskRunner;
 
 // This class is not thread-safe and can only be called from the thread it was
 // created on (in practice, the impl thread).
@@ -22,7 +21,6 @@
       viz::ContextProvider* compositor_context_provider,
       viz::SharedBitmapManager* shared_bitmap_manager,
       gpu::GpuMemoryBufferManager* gpu_memory_buffer_manager,
-      BlockingTaskRunner* blocking_main_thread_task_runner,
       bool delegated_sync_points_required,
       bool enable_color_correct_rasterization,
       const viz::ResourceSettings& resource_settings);
diff --git a/cc/resources/release_callback_impl.h b/cc/resources/release_callback_impl.h
deleted file mode 100644
index c5dffb5..0000000
--- a/cc/resources/release_callback_impl.h
+++ /dev/null
@@ -1,24 +0,0 @@
-// Copyright 2014 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef CC_RESOURCES_RELEASE_CALLBACK_IMPL_H_
-#define CC_RESOURCES_RELEASE_CALLBACK_IMPL_H_
-
-#include "base/callback.h"
-
-namespace gpu {
-struct SyncToken;
-}
-
-namespace cc {
-class BlockingTaskRunner;
-
-typedef base::Callback<void(const gpu::SyncToken& sync_token,
-                            bool is_lost,
-                            BlockingTaskRunner* main_thread_task_runner)>
-    ReleaseCallbackImpl;
-
-}  // namespace cc
-
-#endif  // CC_RESOURCES_RELEASE_CALLBACK_IMPL_H_
diff --git a/cc/resources/resource_provider.cc b/cc/resources/resource_provider.cc
index 64264cd..9be259b 100644
--- a/cc/resources/resource_provider.cc
+++ b/cc/resources/resource_provider.cc
@@ -384,7 +384,6 @@
     viz::ContextProvider* compositor_context_provider,
     viz::SharedBitmapManager* shared_bitmap_manager,
     gpu::GpuMemoryBufferManager* gpu_memory_buffer_manager,
-    BlockingTaskRunner* blocking_main_thread_task_runner,
     bool delegated_sync_points_required,
     bool enable_color_correct_rasterization,
     const viz::ResourceSettings& resource_settings)
@@ -395,7 +394,6 @@
       compositor_context_provider_(compositor_context_provider),
       shared_bitmap_manager_(shared_bitmap_manager),
       gpu_memory_buffer_manager_(gpu_memory_buffer_manager),
-      blocking_main_thread_task_runner_(blocking_main_thread_task_runner),
       next_id_(1),
       next_child_(1),
       lost_context_provider_(false),
@@ -638,7 +636,7 @@
 
 viz::ResourceId ResourceProvider::CreateResourceFromTextureMailbox(
     const viz::TextureMailbox& mailbox,
-    std::unique_ptr<SingleReleaseCallbackImpl> release_callback_impl,
+    std::unique_ptr<viz::SingleReleaseCallback> release_callback,
     bool read_lock_fences_enabled,
     gfx::BufferFormat buffer_format) {
   DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
@@ -666,9 +664,9 @@
   resource->allocated = true;
   resource->SetMailbox(mailbox);
   resource->color_space = mailbox.color_space();
-  resource->release_callback_impl =
-      base::Bind(&SingleReleaseCallbackImpl::Run,
-                 base::Owned(release_callback_impl.release()));
+  resource->release_callback =
+      base::Bind(&viz::SingleReleaseCallback::Run,
+                 base::Owned(release_callback.release()));
   resource->read_lock_fences_enabled = read_lock_fences_enabled;
   resource->buffer_format = buffer_format;
   resource->is_overlay_candidate = mailbox.is_overlay_candidate();
@@ -686,18 +684,18 @@
 
 viz::ResourceId ResourceProvider::CreateResourceFromTextureMailbox(
     const viz::TextureMailbox& mailbox,
-    std::unique_ptr<SingleReleaseCallbackImpl> release_callback_impl,
+    std::unique_ptr<viz::SingleReleaseCallback> release_callback,
     bool read_lock_fences_enabled) {
-  return CreateResourceFromTextureMailbox(
-      mailbox, std::move(release_callback_impl), read_lock_fences_enabled,
-      gfx::BufferFormat::RGBA_8888);
+  return CreateResourceFromTextureMailbox(mailbox, std::move(release_callback),
+                                          read_lock_fences_enabled,
+                                          gfx::BufferFormat::RGBA_8888);
 }
 
 viz::ResourceId ResourceProvider::CreateResourceFromTextureMailbox(
     const viz::TextureMailbox& mailbox,
-    std::unique_ptr<SingleReleaseCallbackImpl> release_callback_impl) {
-  return CreateResourceFromTextureMailbox(
-      mailbox, std::move(release_callback_impl), false);
+    std::unique_ptr<viz::SingleReleaseCallback> release_callback) {
+  return CreateResourceFromTextureMailbox(mailbox, std::move(release_callback),
+                                          false);
 }
 
 void ResourceProvider::DeleteResource(viz::ResourceId id) {
@@ -773,8 +771,7 @@
       resource->shared_bitmap = nullptr;
       resource->pixels = nullptr;
     }
-    resource->release_callback_impl.Run(sync_token, lost_resource,
-                                        blocking_main_thread_task_runner_);
+    resource->release_callback.Run(sync_token, lost_resource);
   }
 
   if (resource->gl_id) {
diff --git a/cc/resources/resource_provider.h b/cc/resources/resource_provider.h
index e4f0b6a..82578b4 100644
--- a/cc/resources/resource_provider.h
+++ b/cc/resources/resource_provider.h
@@ -25,12 +25,12 @@
 #include "base/trace_event/memory_allocator_dump.h"
 #include "base/trace_event/memory_dump_provider.h"
 #include "cc/cc_export.h"
-#include "cc/resources/release_callback_impl.h"
 #include "cc/resources/return_callback.h"
-#include "cc/resources/single_release_callback_impl.h"
 #include "components/viz/common/display/renderer_settings.h"
 #include "components/viz/common/gpu/context_provider.h"
+#include "components/viz/common/quads/release_callback.h"
 #include "components/viz/common/quads/shared_bitmap.h"
+#include "components/viz/common/quads/single_release_callback.h"
 #include "components/viz/common/quads/texture_mailbox.h"
 #include "components/viz/common/resources/resource_format.h"
 #include "components/viz/common/resources/resource_id.h"
@@ -58,7 +58,6 @@
 }  // namespace viz
 
 namespace cc {
-class BlockingTaskRunner;
 class TextureIdAllocator;
 
 // This class is not thread-safe and can only be called from the thread it was
@@ -90,7 +89,6 @@
   ResourceProvider(viz::ContextProvider* compositor_context_provider,
                    viz::SharedBitmapManager* shared_bitmap_manager,
                    gpu::GpuMemoryBufferManager* gpu_memory_buffer_manager,
-                   BlockingTaskRunner* blocking_main_thread_task_runner,
                    bool delegated_sync_points_required,
                    bool enable_color_correct_rasterization,
                    const viz::ResourceSettings& resource_settings);
@@ -160,16 +158,16 @@
   // Wraps an external texture mailbox into a GL resource.
   viz::ResourceId CreateResourceFromTextureMailbox(
       const viz::TextureMailbox& mailbox,
-      std::unique_ptr<SingleReleaseCallbackImpl> release_callback_impl);
+      std::unique_ptr<viz::SingleReleaseCallback> release_callback);
 
   viz::ResourceId CreateResourceFromTextureMailbox(
       const viz::TextureMailbox& mailbox,
-      std::unique_ptr<SingleReleaseCallbackImpl> release_callback_impl,
+      std::unique_ptr<viz::SingleReleaseCallback> release_callback,
       bool read_lock_fences_enabled);
 
   viz::ResourceId CreateResourceFromTextureMailbox(
       const viz::TextureMailbox& mailbox,
-      std::unique_ptr<SingleReleaseCallbackImpl> release_callback_impl,
+      std::unique_ptr<viz::SingleReleaseCallback> release_callback,
       bool read_lock_fences_enabled,
       gfx::BufferFormat buffer_format);
 
@@ -465,7 +463,7 @@
     int child_id;
     viz::ResourceId id_in_child;
     GLuint gl_id;
-    ReleaseCallbackImpl release_callback_impl;
+    viz::ReleaseCallback release_callback;
     uint8_t* pixels;
     int lock_for_read_count;
     int imported_count;
@@ -598,7 +596,6 @@
   viz::ContextProvider* compositor_context_provider_;
   viz::SharedBitmapManager* shared_bitmap_manager_;
   gpu::GpuMemoryBufferManager* gpu_memory_buffer_manager_;
-  BlockingTaskRunner* blocking_main_thread_task_runner_;
   viz::ResourceId next_id_;
   int next_child_;
 
diff --git a/cc/resources/resource_provider_unittest.cc b/cc/resources/resource_provider_unittest.cc
index 151fac7..a7b82cb 100644
--- a/cc/resources/resource_provider_unittest.cc
+++ b/cc/resources/resource_provider_unittest.cc
@@ -23,7 +23,6 @@
 #include "cc/test/test_shared_bitmap_manager.h"
 #include "cc/test/test_texture.h"
 #include "cc/test/test_web_graphics_context_3d.h"
-#include "cc/trees/blocking_task_runner.h"
 #include "components/viz/common/quads/single_release_callback.h"
 #include "components/viz/common/resources/buffer_to_texture_target_map.h"
 #include "components/viz/common/resources/resource_format_utils.h"
@@ -59,26 +58,20 @@
 }
 
 static void EmptyReleaseCallback(const gpu::SyncToken& sync_token,
-                                 bool lost_resource,
-                                 BlockingTaskRunner* main_thread_task_runner) {}
+                                 bool lost_resource) {}
 
-static void ReleaseCallback(
-    gpu::SyncToken* release_sync_token,
-    bool* release_lost_resource,
-    BlockingTaskRunner** release_main_thread_task_runner,
-    const gpu::SyncToken& sync_token,
-    bool lost_resource,
-    BlockingTaskRunner* main_thread_task_runner) {
+static void ReleaseCallback(gpu::SyncToken* release_sync_token,
+                            bool* release_lost_resource,
+                            const gpu::SyncToken& sync_token,
+                            bool lost_resource) {
   *release_sync_token = sync_token;
   *release_lost_resource = lost_resource;
-  *release_main_thread_task_runner = main_thread_task_runner;
 }
 
 static void SharedBitmapReleaseCallback(
     std::unique_ptr<viz::SharedBitmap> bitmap,
     const gpu::SyncToken& sync_token,
-    bool lost_resource,
-    BlockingTaskRunner* main_thread_task_runner) {}
+    bool lost_resource) {}
 
 static void ReleaseSharedBitmapCallback(
     std::unique_ptr<viz::SharedBitmap> shared_bitmap,
@@ -86,8 +79,7 @@
     gpu::SyncToken* release_sync_token,
     bool* lost_resource_result,
     const gpu::SyncToken& sync_token,
-    bool lost_resource,
-    BlockingTaskRunner* main_thread_task_runner) {
+    bool lost_resource) {
   *release_called = true;
   *release_sync_token = sync_token;
   *lost_resource_result = lost_resource;
@@ -436,8 +428,7 @@
   explicit ResourceProviderTest(bool child_needs_sync_token)
       : shared_data_(ContextSharedData::Create()),
         context3d_(NULL),
-        child_context_(NULL),
-        main_thread_task_runner_(BlockingTaskRunner::Create(NULL)) {
+        child_context_(NULL) {
     switch (GetParam()) {
       case ResourceProvider::RESOURCE_TYPE_GPU_MEMORY_BUFFER:
       case ResourceProvider::RESOURCE_TYPE_GL_TEXTURE: {
@@ -468,22 +459,19 @@
     viz::ResourceSettings resource_settings = CreateResourceSettings();
     resource_provider_ = std::make_unique<DisplayResourceProvider>(
         context_provider_.get(), shared_bitmap_manager_.get(),
-        gpu_memory_buffer_manager_.get(), main_thread_task_runner_.get(),
-        kDelegatedSyncPointsRequired, kEnableColorCorrectRendering,
-        resource_settings);
+        gpu_memory_buffer_manager_.get(), kDelegatedSyncPointsRequired,
+        kEnableColorCorrectRendering, resource_settings);
     child_resource_provider_ = std::make_unique<LayerTreeResourceProvider>(
         child_context_provider_.get(), shared_bitmap_manager_.get(),
-        child_gpu_memory_buffer_manager_.get(), main_thread_task_runner_.get(),
-        child_needs_sync_token, kEnableColorCorrectRendering,
-        resource_settings);
+        child_gpu_memory_buffer_manager_.get(), child_needs_sync_token,
+        kEnableColorCorrectRendering, resource_settings);
   }
 
   ResourceProviderTest() : ResourceProviderTest(true) {}
 
   static void CollectResources(
       std::vector<viz::ReturnedResource>* array,
-      const std::vector<viz::ReturnedResource>& returned,
-      BlockingTaskRunner* main_thread_task_runner) {
+      const std::vector<viz::ReturnedResource>& returned) {
     array->insert(array->end(), returned.begin(), returned.end());
   }
 
@@ -516,8 +504,8 @@
       EXPECT_TRUE(sync_token->HasData());
 
       std::unique_ptr<viz::SharedBitmap> shared_bitmap;
-      std::unique_ptr<SingleReleaseCallbackImpl> callback =
-          SingleReleaseCallbackImpl::Create(base::Bind(
+      std::unique_ptr<viz::SingleReleaseCallback> callback =
+          viz::SingleReleaseCallback::Create(base::Bind(
               ReleaseSharedBitmapCallback, base::Passed(&shared_bitmap),
               release_called, release_sync_token, lost_resource));
       return child_resource_provider_->CreateResourceFromTextureMailbox(
@@ -529,8 +517,8 @@
           CreateAndFillSharedBitmap(shared_bitmap_manager_.get(), size, 0));
 
       viz::SharedBitmap* shared_bitmap_ptr = shared_bitmap.get();
-      std::unique_ptr<SingleReleaseCallbackImpl> callback =
-          SingleReleaseCallbackImpl::Create(base::Bind(
+      std::unique_ptr<viz::SingleReleaseCallback> callback =
+          viz::SingleReleaseCallback::Create(base::Bind(
               ReleaseSharedBitmapCallback, base::Passed(&shared_bitmap),
               release_called, release_sync_token, lost_resource));
       return child_resource_provider_->CreateResourceFromTextureMailbox(
@@ -544,7 +532,6 @@
   ResourceProviderContext* child_context_;
   scoped_refptr<TestContextProvider> context_provider_;
   scoped_refptr<TestContextProvider> child_context_provider_;
-  std::unique_ptr<BlockingTaskRunner> main_thread_task_runner_;
   std::unique_ptr<viz::TestGpuMemoryBufferManager> gpu_memory_buffer_manager_;
   std::unique_ptr<DisplayResourceProvider> resource_provider_;
   std::unique_ptr<viz::TestGpuMemoryBufferManager>
@@ -668,8 +655,8 @@
   id4_mailbox.set_color_space(color_space4);
   viz::ResourceId id4 =
       child_resource_provider_->CreateResourceFromTextureMailbox(
-          id4_mailbox,
-          SingleReleaseCallbackImpl::Create(base::Bind(&EmptyReleaseCallback)));
+          id4_mailbox, viz::SingleReleaseCallback::Create(
+                           base::Bind(&EmptyReleaseCallback)));
 
   std::vector<viz::ReturnedResource> returned_to_child;
   int child_id =
@@ -917,8 +904,8 @@
   id1_mailbox.set_is_backed_by_surface_texture(true);
   viz::ResourceId id1 =
       child_resource_provider_->CreateResourceFromTextureMailbox(
-          id1_mailbox,
-          SingleReleaseCallbackImpl::Create(base::Bind(&EmptyReleaseCallback)));
+          id1_mailbox, viz::SingleReleaseCallback::Create(
+                           base::Bind(&EmptyReleaseCallback)));
 
   viz::TextureMailbox id2_mailbox(external_mailbox, external_sync_token,
                                   GL_TEXTURE_EXTERNAL_OES);
@@ -927,8 +914,8 @@
   id2_mailbox.set_is_backed_by_surface_texture(false);
   viz::ResourceId id2 =
       child_resource_provider_->CreateResourceFromTextureMailbox(
-          id2_mailbox,
-          SingleReleaseCallbackImpl::Create(base::Bind(&EmptyReleaseCallback)));
+          id2_mailbox, viz::SingleReleaseCallback::Create(
+                           base::Bind(&EmptyReleaseCallback)));
 
   std::vector<viz::ReturnedResource> returned_to_child;
   int child_id =
@@ -1037,7 +1024,8 @@
       child_resource_provider_->CreateResourceFromTextureMailbox(
           viz::TextureMailbox(external_mailbox, external_sync_token,
                               GL_TEXTURE_EXTERNAL_OES),
-          SingleReleaseCallbackImpl::Create(base::Bind(&EmptyReleaseCallback)));
+          viz::SingleReleaseCallback::Create(
+              base::Bind(&EmptyReleaseCallback)));
 
   std::vector<viz::ReturnedResource> returned_to_child;
   int child_id =
@@ -1435,7 +1423,7 @@
   viz::ResourceId id3 =
       child_resource_provider_->CreateResourceFromTextureMailbox(
           viz::TextureMailbox(shared_bitmap_ptr, gfx::Size(1, 1)),
-          SingleReleaseCallbackImpl::Create(base::Bind(
+          viz::SingleReleaseCallback::Create(base::Bind(
               &SharedBitmapReleaseCallback, base::Passed(&shared_bitmap))));
 
   std::vector<viz::ReturnedResource> returned_to_child;
@@ -1617,9 +1605,8 @@
   std::unique_ptr<LayerTreeResourceProvider> child_resource_provider(
       std::make_unique<LayerTreeResourceProvider>(
           child_context_provider.get(), shared_bitmap_manager_.get(),
-          gpu_memory_buffer_manager_.get(), nullptr,
-          kDelegatedSyncPointsRequired, kEnableColorCorrectRendering,
-          CreateResourceSettings()));
+          gpu_memory_buffer_manager_.get(), kDelegatedSyncPointsRequired,
+          kEnableColorCorrectRendering, CreateResourceSettings()));
 
   gfx::Size size(1, 1);
   viz::ResourceFormat format = viz::RGBA_8888;
@@ -1898,7 +1885,7 @@
     std::unique_ptr<LayerTreeResourceProvider> child_resource_provider(
         std::make_unique<LayerTreeResourceProvider>(
             child_context_provider.get(), shared_bitmap_manager.get(), nullptr,
-            nullptr, kDelegatedSyncPointsRequired, kEnableColorCorrectRendering,
+            kDelegatedSyncPointsRequired, kEnableColorCorrectRendering,
             resource_settings));
 
     std::unique_ptr<TextureStateTrackingContext> parent_context_owned(
@@ -1912,7 +1899,7 @@
     std::unique_ptr<DisplayResourceProvider> parent_resource_provider(
         std::make_unique<DisplayResourceProvider>(
             parent_context_provider.get(), shared_bitmap_manager.get(), nullptr,
-            nullptr, kDelegatedSyncPointsRequired, kEnableColorCorrectRendering,
+            kDelegatedSyncPointsRequired, kEnableColorCorrectRendering,
             resource_settings));
 
     gfx::Size size(1, 1);
@@ -2053,14 +2040,12 @@
 
   gpu::SyncToken release_sync_token;
   bool lost_resource = false;
-  BlockingTaskRunner* main_thread_task_runner = nullptr;
-  ReleaseCallbackImpl callback =
-      base::Bind(ReleaseCallback, &release_sync_token, &lost_resource,
-                 &main_thread_task_runner);
+  viz::ReleaseCallback callback =
+      base::Bind(ReleaseCallback, &release_sync_token, &lost_resource);
   viz::ResourceId resource =
       child_resource_provider_->CreateResourceFromTextureMailbox(
           viz::TextureMailbox(mailbox, sync_token, GL_TEXTURE_2D),
-          SingleReleaseCallbackImpl::Create(callback));
+          viz::SingleReleaseCallback::Create(callback));
   EXPECT_EQ(1u, context()->NumTextures());
   EXPECT_FALSE(release_sync_token.HasData());
   {
@@ -2105,7 +2090,6 @@
     EXPECT_LE(list[0].mailbox_holder.sync_token.release_count(),
               release_sync_token.release_count());
     EXPECT_FALSE(lost_resource);
-    EXPECT_EQ(main_thread_task_runner_.get(), main_thread_task_runner);
   }
 
   // We're going to do the same thing as above, but testing the case where we
@@ -2115,7 +2099,7 @@
   release_sync_token.Clear();
   resource = child_resource_provider_->CreateResourceFromTextureMailbox(
       viz::TextureMailbox(mailbox, sync_token, GL_TEXTURE_2D),
-      SingleReleaseCallbackImpl::Create(callback));
+      viz::SingleReleaseCallback::Create(callback));
   EXPECT_EQ(1u, context()->NumTextures());
   EXPECT_FALSE(release_sync_token.HasData());
   {
@@ -2161,7 +2145,6 @@
     EXPECT_LE(list[0].mailbox_holder.sync_token.release_count(),
               release_sync_token.release_count());
     EXPECT_FALSE(lost_resource);
-    EXPECT_EQ(main_thread_task_runner_.get(), main_thread_task_runner);
   }
 
   context()->waitSyncToken(release_sync_token.GetConstData());
@@ -2340,25 +2323,21 @@
 
   gpu::SyncToken release_sync_token;
   bool lost_resource = false;
-  BlockingTaskRunner* main_thread_task_runner = nullptr;
-  std::unique_ptr<SingleReleaseCallbackImpl> callback =
-      SingleReleaseCallbackImpl::Create(
-          base::Bind(&ReleaseCallback, &release_sync_token, &lost_resource,
-                     &main_thread_task_runner));
+  std::unique_ptr<viz::SingleReleaseCallback> callback =
+      viz::SingleReleaseCallback::Create(
+          base::Bind(&ReleaseCallback, &release_sync_token, &lost_resource));
   resource_provider_->CreateResourceFromTextureMailbox(
       viz::TextureMailbox(mailbox, sync_token, GL_TEXTURE_2D),
       std::move(callback));
 
   EXPECT_FALSE(release_sync_token.HasData());
   EXPECT_FALSE(lost_resource);
-  EXPECT_FALSE(main_thread_task_runner);
 
   resource_provider_->DidLoseVulkanContextProvider();
   resource_provider_ = nullptr;
 
   EXPECT_LE(sync_token.release_count(), release_sync_token.release_count());
   EXPECT_TRUE(lost_resource);
-  EXPECT_EQ(main_thread_task_runner_.get(), main_thread_task_runner);
 }
 
 TEST_P(ResourceProviderTest, ScopedSampler) {
@@ -2375,9 +2354,8 @@
   std::unique_ptr<DisplayResourceProvider> resource_provider(
       std::make_unique<DisplayResourceProvider>(
           context_provider.get(), shared_bitmap_manager_.get(),
-          gpu_memory_buffer_manager_.get(), nullptr,
-          kDelegatedSyncPointsRequired, kEnableColorCorrectRendering,
-          CreateResourceSettings()));
+          gpu_memory_buffer_manager_.get(), kDelegatedSyncPointsRequired,
+          kEnableColorCorrectRendering, CreateResourceSettings()));
 
   gfx::Size size(1, 1);
   viz::ResourceFormat format = viz::RGBA_8888;
@@ -2454,9 +2432,8 @@
   std::unique_ptr<LayerTreeResourceProvider> resource_provider(
       std::make_unique<LayerTreeResourceProvider>(
           context_provider.get(), shared_bitmap_manager_.get(),
-          gpu_memory_buffer_manager_.get(), nullptr,
-          kDelegatedSyncPointsRequired, kEnableColorCorrectRendering,
-          CreateResourceSettings()));
+          gpu_memory_buffer_manager_.get(), kDelegatedSyncPointsRequired,
+          kEnableColorCorrectRendering, CreateResourceSettings()));
 
   gfx::Size size(1, 1);
   viz::ResourceFormat format = viz::RGBA_8888;
@@ -2497,9 +2474,8 @@
   std::unique_ptr<LayerTreeResourceProvider> resource_provider(
       std::make_unique<LayerTreeResourceProvider>(
           context_provider.get(), shared_bitmap_manager_.get(),
-          gpu_memory_buffer_manager_.get(), nullptr,
-          kDelegatedSyncPointsRequired, kEnableColorCorrectRendering,
-          CreateResourceSettings()));
+          gpu_memory_buffer_manager_.get(), kDelegatedSyncPointsRequired,
+          kEnableColorCorrectRendering, CreateResourceSettings()));
 
   gfx::Size size(1, 1);
   viz::ResourceFormat format = viz::RGBA_8888;
@@ -2541,9 +2517,8 @@
   std::unique_ptr<LayerTreeResourceProvider> resource_provider(
       std::make_unique<LayerTreeResourceProvider>(
           context_provider.get(), shared_bitmap_manager_.get(),
-          gpu_memory_buffer_manager_.get(), nullptr,
-          kDelegatedSyncPointsRequired, kEnableColorCorrectRendering,
-          CreateResourceSettings()));
+          gpu_memory_buffer_manager_.get(), kDelegatedSyncPointsRequired,
+          kEnableColorCorrectRendering, CreateResourceSettings()));
 
   gfx::Size size(1, 1);
   viz::ResourceFormat format = viz::RGBA_8888;
@@ -2596,17 +2571,14 @@
   std::unique_ptr<DisplayResourceProvider> resource_provider(
       std::make_unique<DisplayResourceProvider>(
           nullptr, shared_bitmap_manager_.get(),
-          gpu_memory_buffer_manager_.get(), main_thread_task_runner_.get(),
-          kDelegatedSyncPointsRequired, kEnableColorCorrectRendering,
-          CreateResourceSettings()));
+          gpu_memory_buffer_manager_.get(), kDelegatedSyncPointsRequired,
+          kEnableColorCorrectRendering, CreateResourceSettings()));
 
   gpu::SyncToken release_sync_token;
   bool lost_resource = false;
-  BlockingTaskRunner* main_thread_task_runner = nullptr;
-  std::unique_ptr<SingleReleaseCallbackImpl> callback =
-      SingleReleaseCallbackImpl::Create(
-          base::Bind(&ReleaseCallback, &release_sync_token, &lost_resource,
-                     &main_thread_task_runner));
+  std::unique_ptr<viz::SingleReleaseCallback> callback =
+      viz::SingleReleaseCallback::Create(
+          base::Bind(&ReleaseCallback, &release_sync_token, &lost_resource));
   viz::TextureMailbox mailbox(shared_bitmap.get(), size);
 
   viz::ResourceId id = resource_provider->CreateResourceFromTextureMailbox(
@@ -2625,7 +2597,6 @@
   resource_provider->DeleteResource(id);
   EXPECT_FALSE(release_sync_token.HasData());
   EXPECT_FALSE(lost_resource);
-  EXPECT_EQ(main_thread_task_runner_.get(), main_thread_task_runner);
 }
 
 class ResourceProviderTestTextureMailboxGLFilters
@@ -2634,7 +2605,6 @@
   static void RunTest(
       TestSharedBitmapManager* shared_bitmap_manager,
       viz::TestGpuMemoryBufferManager* gpu_memory_buffer_manager,
-      BlockingTaskRunner* main_thread_task_runner,
       bool mailbox_nearest_neighbor,
       GLenum sampler_filter) {
     std::unique_ptr<TextureStateTrackingContext> context_owned(
@@ -2647,9 +2617,8 @@
     std::unique_ptr<DisplayResourceProvider> resource_provider(
         std::make_unique<DisplayResourceProvider>(
             context_provider.get(), shared_bitmap_manager,
-            gpu_memory_buffer_manager, main_thread_task_runner,
-            kDelegatedSyncPointsRequired, kEnableColorCorrectRendering,
-            CreateResourceSettings()));
+            gpu_memory_buffer_manager, kDelegatedSyncPointsRequired,
+            kEnableColorCorrectRendering, CreateResourceSettings()));
 
     unsigned texture_id = 1;
     gpu::SyncToken sync_token(gpu::CommandBufferNamespace::GPU_IO, 0,
@@ -2667,11 +2636,9 @@
     memcpy(gpu_mailbox.name, "Hello world", strlen("Hello world") + 1);
     gpu::SyncToken release_sync_token;
     bool lost_resource = false;
-    BlockingTaskRunner* mailbox_task_runner = nullptr;
-    std::unique_ptr<SingleReleaseCallbackImpl> callback =
-        SingleReleaseCallbackImpl::Create(
-            base::Bind(&ReleaseCallback, &release_sync_token, &lost_resource,
-                       &mailbox_task_runner));
+    std::unique_ptr<viz::SingleReleaseCallback> callback =
+        viz::SingleReleaseCallback::Create(
+            base::Bind(&ReleaseCallback, &release_sync_token, &lost_resource));
 
     viz::TextureMailbox mailbox(gpu_mailbox, sync_token, target);
     mailbox.set_nearest_neighbor(mailbox_nearest_neighbor);
@@ -2721,7 +2688,6 @@
     resource_provider->DeleteResource(id);
     EXPECT_TRUE(release_sync_token.HasData());
     EXPECT_FALSE(lost_resource);
-    EXPECT_EQ(main_thread_task_runner, mailbox_task_runner);
   }
 };
 
@@ -2733,7 +2699,6 @@
   ResourceProviderTestTextureMailboxGLFilters::RunTest(
       shared_bitmap_manager_.get(),
       gpu_memory_buffer_manager_.get(),
-      main_thread_task_runner_.get(),
       false,
       GL_LINEAR);
 }
@@ -2746,7 +2711,6 @@
   ResourceProviderTestTextureMailboxGLFilters::RunTest(
       shared_bitmap_manager_.get(),
       gpu_memory_buffer_manager_.get(),
-      main_thread_task_runner_.get(),
       true,
       GL_NEAREST);
 }
@@ -2759,7 +2723,6 @@
   ResourceProviderTestTextureMailboxGLFilters::RunTest(
       shared_bitmap_manager_.get(),
       gpu_memory_buffer_manager_.get(),
-      main_thread_task_runner_.get(),
       true,
       GL_LINEAR);
 }
@@ -2772,7 +2735,6 @@
   ResourceProviderTestTextureMailboxGLFilters::RunTest(
       shared_bitmap_manager_.get(),
       gpu_memory_buffer_manager_.get(),
-      main_thread_task_runner_.get(),
       false,
       GL_NEAREST);
 }
@@ -2791,9 +2753,8 @@
   std::unique_ptr<DisplayResourceProvider> resource_provider(
       std::make_unique<DisplayResourceProvider>(
           context_provider.get(), shared_bitmap_manager_.get(),
-          gpu_memory_buffer_manager_.get(), nullptr,
-          kDelegatedSyncPointsRequired, kEnableColorCorrectRendering,
-          CreateResourceSettings()));
+          gpu_memory_buffer_manager_.get(), kDelegatedSyncPointsRequired,
+          kEnableColorCorrectRendering, CreateResourceSettings()));
 
   gpu::SyncToken sync_token(gpu::CommandBufferNamespace::GPU_IO, 0,
                             gpu::CommandBufferId::FromUnsafeValue(0x12), 0x34);
@@ -2807,8 +2768,8 @@
 
   gpu::Mailbox gpu_mailbox;
   memcpy(gpu_mailbox.name, "Hello world", strlen("Hello world") + 1);
-  std::unique_ptr<SingleReleaseCallbackImpl> callback =
-      SingleReleaseCallbackImpl::Create(base::Bind(&EmptyReleaseCallback));
+  std::unique_ptr<viz::SingleReleaseCallback> callback =
+      viz::SingleReleaseCallback::Create(base::Bind(&EmptyReleaseCallback));
 
   viz::TextureMailbox mailbox(gpu_mailbox, sync_token, target);
 
@@ -2860,9 +2821,8 @@
   std::unique_ptr<LayerTreeResourceProvider> resource_provider(
       std::make_unique<LayerTreeResourceProvider>(
           context_provider.get(), shared_bitmap_manager_.get(),
-          gpu_memory_buffer_manager_.get(), nullptr,
-          kDelegatedSyncPointsRequired, kEnableColorCorrectRendering,
-          CreateResourceSettings()));
+          gpu_memory_buffer_manager_.get(), kDelegatedSyncPointsRequired,
+          kEnableColorCorrectRendering, CreateResourceSettings()));
 
   gpu::SyncToken sync_token(gpu::CommandBufferNamespace::GPU_IO, 0,
                             gpu::CommandBufferId::FromUnsafeValue(0x12), 0x34);
@@ -2876,8 +2836,8 @@
 
   gpu::Mailbox gpu_mailbox;
   memcpy(gpu_mailbox.name, "Hello world", strlen("Hello world") + 1);
-  std::unique_ptr<SingleReleaseCallbackImpl> callback =
-      SingleReleaseCallbackImpl::Create(base::Bind(&EmptyReleaseCallback));
+  std::unique_ptr<viz::SingleReleaseCallback> callback =
+      viz::SingleReleaseCallback::Create(base::Bind(&EmptyReleaseCallback));
 
   viz::TextureMailbox mailbox(gpu_mailbox, sync_token, target);
 
@@ -2915,9 +2875,8 @@
   std::unique_ptr<LayerTreeResourceProvider> resource_provider(
       std::make_unique<LayerTreeResourceProvider>(
           context_provider.get(), shared_bitmap_manager_.get(),
-          gpu_memory_buffer_manager_.get(), nullptr,
-          kDelegatedSyncPointsRequired, kEnableColorCorrectRendering,
-          CreateResourceSettings()));
+          gpu_memory_buffer_manager_.get(), kDelegatedSyncPointsRequired,
+          kEnableColorCorrectRendering, CreateResourceSettings()));
 
   gpu::SyncToken sync_token;
   const GLuint64 current_fence_sync = context->GetNextFenceSync();
@@ -2930,8 +2889,8 @@
 
   gpu::Mailbox gpu_mailbox;
   memcpy(gpu_mailbox.name, "Hello world", strlen("Hello world") + 1);
-  std::unique_ptr<SingleReleaseCallbackImpl> callback =
-      SingleReleaseCallbackImpl::Create(base::Bind(&EmptyReleaseCallback));
+  std::unique_ptr<viz::SingleReleaseCallback> callback =
+      viz::SingleReleaseCallback::Create(base::Bind(&EmptyReleaseCallback));
 
   viz::TextureMailbox mailbox(gpu_mailbox, sync_token, target);
 
@@ -2964,9 +2923,8 @@
   std::unique_ptr<LayerTreeResourceProvider> resource_provider(
       std::make_unique<LayerTreeResourceProvider>(
           context_provider.get(), shared_bitmap_manager_.get(),
-          gpu_memory_buffer_manager_.get(), nullptr,
-          kDelegatedSyncPointsRequired, kEnableColorCorrectRendering,
-          CreateResourceSettings()));
+          gpu_memory_buffer_manager_.get(), kDelegatedSyncPointsRequired,
+          kEnableColorCorrectRendering, CreateResourceSettings()));
 
   EXPECT_CALL(*context, bindTexture(_, _)).Times(0);
   EXPECT_CALL(*context, waitSyncToken(_)).Times(0);
@@ -2976,8 +2934,8 @@
   viz::TextureMailbox mailbox(gpu::Mailbox::Generate(), gpu::SyncToken(),
                               GL_TEXTURE_2D);
 
-  std::unique_ptr<SingleReleaseCallbackImpl> callback =
-      SingleReleaseCallbackImpl::Create(base::Bind(&EmptyReleaseCallback));
+  std::unique_ptr<viz::SingleReleaseCallback> callback =
+      viz::SingleReleaseCallback::Create(base::Bind(&EmptyReleaseCallback));
 
   viz::ResourceId id = resource_provider->CreateResourceFromTextureMailbox(
       mailbox, std::move(callback));
@@ -3078,9 +3036,8 @@
   std::unique_ptr<LayerTreeResourceProvider> resource_provider(
       std::make_unique<LayerTreeResourceProvider>(
           context_provider.get(), shared_bitmap_manager_.get(),
-          gpu_memory_buffer_manager_.get(), nullptr,
-          kDelegatedSyncPointsRequired, kEnableColorCorrectRendering,
-          CreateResourceSettings()));
+          gpu_memory_buffer_manager_.get(), kDelegatedSyncPointsRequired,
+          kEnableColorCorrectRendering, CreateResourceSettings()));
 
   gfx::Size size(2, 2);
   gfx::Vector2d offset(0, 0);
@@ -3135,9 +3092,8 @@
   std::unique_ptr<LayerTreeResourceProvider> resource_provider(
       std::make_unique<LayerTreeResourceProvider>(
           context_provider.get(), shared_bitmap_manager_.get(),
-          gpu_memory_buffer_manager_.get(), nullptr,
-          kDelegatedSyncPointsRequired, kEnableColorCorrectRendering,
-          CreateResourceSettings()));
+          gpu_memory_buffer_manager_.get(), kDelegatedSyncPointsRequired,
+          kEnableColorCorrectRendering, CreateResourceSettings()));
 
   gfx::Size size(2, 2);
 
@@ -3191,9 +3147,8 @@
   std::unique_ptr<LayerTreeResourceProvider> resource_provider(
       std::make_unique<LayerTreeResourceProvider>(
           context_provider.get(), shared_bitmap_manager_.get(),
-          gpu_memory_buffer_manager_.get(), nullptr,
-          kDelegatedSyncPointsRequired, kEnableColorCorrectRendering,
-          CreateResourceSettings()));
+          gpu_memory_buffer_manager_.get(), kDelegatedSyncPointsRequired,
+          kEnableColorCorrectRendering, CreateResourceSettings()));
 
   gfx::Size size(2, 2);
   const viz::ResourceFormat formats[2] = {viz::RGBA_8888, viz::BGRA_8888};
@@ -3247,9 +3202,8 @@
   std::unique_ptr<LayerTreeResourceProvider> resource_provider(
       std::make_unique<LayerTreeResourceProvider>(
           context_provider.get(), shared_bitmap_manager_.get(),
-          gpu_memory_buffer_manager_.get(), nullptr,
-          kDelegatedSyncPointsRequired, kEnableColorCorrectRendering,
-          CreateResourceSettings()));
+          gpu_memory_buffer_manager_.get(), kDelegatedSyncPointsRequired,
+          kEnableColorCorrectRendering, CreateResourceSettings()));
 
   viz::ResourceId id = resource_provider->CreateGpuMemoryBufferResource(
       gfx::Size(kWidth, kHeight), ResourceProvider::TEXTURE_HINT_IMMUTABLE,
@@ -3303,9 +3257,8 @@
   std::unique_ptr<LayerTreeResourceProvider> resource_provider(
       std::make_unique<LayerTreeResourceProvider>(
           context_provider.get(), shared_bitmap_manager_.get(),
-          gpu_memory_buffer_manager_.get(), nullptr,
-          kDelegatedSyncPointsRequired, kEnableColorCorrectRendering,
-          CreateResourceSettings()));
+          gpu_memory_buffer_manager_.get(), kDelegatedSyncPointsRequired,
+          kEnableColorCorrectRendering, CreateResourceSettings()));
   int texture_id = 123;
 
   viz::ResourceId id = resource_provider->CreateResource(
@@ -3335,9 +3288,8 @@
   std::unique_ptr<LayerTreeResourceProvider> resource_provider(
       std::make_unique<LayerTreeResourceProvider>(
           context_provider.get(), shared_bitmap_manager_.get(),
-          gpu_memory_buffer_manager_.get(), nullptr,
-          kDelegatedSyncPointsRequired, kEnableColorCorrectRendering,
-          CreateResourceSettings()));
+          gpu_memory_buffer_manager_.get(), kDelegatedSyncPointsRequired,
+          kEnableColorCorrectRendering, CreateResourceSettings()));
   int texture_id = 123;
   uint8_t pixels[8];
 
@@ -3391,7 +3343,7 @@
     std::unique_ptr<LayerTreeResourceProvider> resource_provider(
         std::make_unique<LayerTreeResourceProvider>(
             context_provider.get(), shared_bitmap_manager.get(), nullptr,
-            nullptr, kDelegatedSyncPointsRequired, kEnableColorCorrectRendering,
+            kDelegatedSyncPointsRequired, kEnableColorCorrectRendering,
             CreateResourceSettings(kTextureAllocationChunkSize)));
 
     viz::ResourceId id = resource_provider->CreateResource(
@@ -3409,7 +3361,7 @@
     std::unique_ptr<LayerTreeResourceProvider> resource_provider(
         std::make_unique<LayerTreeResourceProvider>(
             context_provider.get(), shared_bitmap_manager.get(), nullptr,
-            nullptr, kDelegatedSyncPointsRequired, kEnableColorCorrectRendering,
+            kDelegatedSyncPointsRequired, kEnableColorCorrectRendering,
             CreateResourceSettings(kTextureAllocationChunkSize)));
 
     viz::ResourceId id = resource_provider->CreateResource(
@@ -3470,9 +3422,8 @@
   std::unique_ptr<LayerTreeResourceProvider> resource_provider(
       std::make_unique<LayerTreeResourceProvider>(
           context_provider.get(), shared_bitmap_manager_.get(),
-          gpu_memory_buffer_manager_.get(), nullptr,
-          kDelegatedSyncPointsRequired, kEnableColorCorrectRendering,
-          CreateResourceSettings()));
+          gpu_memory_buffer_manager_.get(), kDelegatedSyncPointsRequired,
+          kEnableColorCorrectRendering, CreateResourceSettings()));
 
   viz::ResourceId id = resource_provider->CreateResource(
       gfx::Size(kWidth, kHeight), ResourceProvider::TEXTURE_HINT_IMMUTABLE,
@@ -3520,9 +3471,8 @@
   std::unique_ptr<LayerTreeResourceProvider> resource_provider(
       std::make_unique<LayerTreeResourceProvider>(
           context_provider.get(), shared_bitmap_manager_.get(),
-          gpu_memory_buffer_manager_.get(), nullptr,
-          kDelegatedSyncPointsRequired, kEnableColorCorrectRendering,
-          CreateResourceSettings()));
+          gpu_memory_buffer_manager_.get(), kDelegatedSyncPointsRequired,
+          kEnableColorCorrectRendering, CreateResourceSettings()));
 
   viz::ResourceId id = resource_provider->CreateGpuMemoryBufferResource(
       gfx::Size(kWidth, kHeight), ResourceProvider::TEXTURE_HINT_IMMUTABLE,
@@ -3573,9 +3523,8 @@
   std::unique_ptr<LayerTreeResourceProvider> resource_provider(
       std::make_unique<LayerTreeResourceProvider>(
           context_provider.get(), shared_bitmap_manager_.get(),
-          gpu_memory_buffer_manager_.get(), nullptr,
-          kDelegatedSyncPointsRequired, kEnableColorCorrectRendering,
-          CreateResourceSettings()));
+          gpu_memory_buffer_manager_.get(), kDelegatedSyncPointsRequired,
+          kEnableColorCorrectRendering, CreateResourceSettings()));
 
   viz::ResourceId id = resource_provider->CreateResource(
       gfx::Size(kWidth, kHeight), ResourceProvider::TEXTURE_HINT_IMMUTABLE,
@@ -3658,9 +3607,8 @@
   std::unique_ptr<LayerTreeResourceProvider> resource_provider(
       std::make_unique<LayerTreeResourceProvider>(
           context_provider.get(), shared_bitmap_manager_.get(),
-          gpu_memory_buffer_manager_.get(), nullptr,
-          kDelegatedSyncPointsRequired, kEnableColorCorrectRendering,
-          CreateResourceSettings()));
+          gpu_memory_buffer_manager_.get(), kDelegatedSyncPointsRequired,
+          kEnableColorCorrectRendering, CreateResourceSettings()));
 
   viz::ResourceId id = resource_provider->CreateGpuMemoryBufferResource(
       gfx::Size(kWidth, kHeight), ResourceProvider::TEXTURE_HINT_IMMUTABLE,
diff --git a/cc/resources/return_callback.h b/cc/resources/return_callback.h
index 30f0cf9..a8d5c3a 100644
--- a/cc/resources/return_callback.h
+++ b/cc/resources/return_callback.h
@@ -9,11 +9,9 @@
 #include "components/viz/common/resources/returned_resource.h"
 
 namespace cc {
-class BlockingTaskRunner;
 
-typedef base::Callback<void(const std::vector<viz::ReturnedResource>&,
-                            BlockingTaskRunner* main_thread_task_runner)>
-    ReturnCallback;
+using ReturnCallback =
+    base::Callback<void(const std::vector<viz::ReturnedResource>&)>;
 
 }  // namespace cc
 
diff --git a/cc/resources/single_release_callback_impl.cc b/cc/resources/single_release_callback_impl.cc
deleted file mode 100644
index bab9dd4..0000000
--- a/cc/resources/single_release_callback_impl.cc
+++ /dev/null
@@ -1,34 +0,0 @@
-// Copyright 2014 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "cc/resources/single_release_callback_impl.h"
-
-#include "base/callback_helpers.h"
-#include "base/logging.h"
-#include "cc/trees/blocking_task_runner.h"
-
-namespace cc {
-
-SingleReleaseCallbackImpl::SingleReleaseCallbackImpl(
-    const ReleaseCallbackImpl& callback)
-    : callback_(callback) {
-  DCHECK(!callback_.is_null())
-      << "Use a NULL SingleReleaseCallbackImpl for an empty callback.";
-}
-
-SingleReleaseCallbackImpl::~SingleReleaseCallbackImpl() {
-  DCHECK(callback_.is_null()) << "SingleReleaseCallbackImpl was never run.";
-}
-
-void SingleReleaseCallbackImpl::Run(
-    const gpu::SyncToken& sync_token,
-    bool is_lost,
-    BlockingTaskRunner* main_thread_task_runner) {
-  DCHECK(!callback_.is_null())
-      << "SingleReleaseCallbackImpl was run more than once.";
-  base::ResetAndReturn(&callback_)
-      .Run(sync_token, is_lost, main_thread_task_runner);
-}
-
-}  // namespace cc
diff --git a/cc/resources/single_release_callback_impl.h b/cc/resources/single_release_callback_impl.h
deleted file mode 100644
index f5a8af0564..0000000
--- a/cc/resources/single_release_callback_impl.h
+++ /dev/null
@@ -1,37 +0,0 @@
-// Copyright 2014 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef CC_RESOURCES_SINGLE_RELEASE_CALLBACK_IMPL_H_
-#define CC_RESOURCES_SINGLE_RELEASE_CALLBACK_IMPL_H_
-
-#include <memory>
-
-#include "base/memory/ptr_util.h"
-#include "cc/cc_export.h"
-#include "cc/resources/release_callback_impl.h"
-
-namespace cc {
-
-class CC_EXPORT SingleReleaseCallbackImpl {
- public:
-  static std::unique_ptr<SingleReleaseCallbackImpl> Create(
-      const ReleaseCallbackImpl& cb) {
-    return base::WrapUnique(new SingleReleaseCallbackImpl(cb));
-  }
-
-  ~SingleReleaseCallbackImpl();
-
-  void Run(const gpu::SyncToken& sync_token,
-           bool is_lost,
-           BlockingTaskRunner* main_thread_task_runner);
-
- private:
-  explicit SingleReleaseCallbackImpl(const ReleaseCallbackImpl& callback);
-
-  ReleaseCallbackImpl callback_;
-};
-
-}  // namespace cc
-
-#endif  // CC_RESOURCES_SINGLE_RELEASE_CALLBACK_IMPL_H_
diff --git a/cc/resources/video_resource_updater.cc b/cc/resources/video_resource_updater.cc
index 014e233..faeba2f1 100644
--- a/cc/resources/video_resource_updater.cc
+++ b/cc/resources/video_resource_updater.cc
@@ -600,8 +600,7 @@
     base::WeakPtr<VideoResourceUpdater> updater,
     const scoped_refptr<media::VideoFrame>& video_frame,
     const gpu::SyncToken& sync_token,
-    bool lost_resource,
-    BlockingTaskRunner* main_thread_task_runner) {
+    bool lost_resource) {
   // TODO(dshwang) this case should be forwarded to the decoder as lost
   // resource.
   if (lost_resource || !updater.get())
@@ -727,8 +726,7 @@
     base::WeakPtr<VideoResourceUpdater> updater,
     viz::ResourceId resource_id,
     const gpu::SyncToken& sync_token,
-    bool lost_resource,
-    BlockingTaskRunner* main_thread_task_runner) {
+    bool lost_resource) {
   if (!updater.get()) {
     // Resource was already deleted.
     return;
diff --git a/cc/resources/video_resource_updater.h b/cc/resources/video_resource_updater.h
index 50ec17c..8333f43 100644
--- a/cc/resources/video_resource_updater.h
+++ b/cc/resources/video_resource_updater.h
@@ -17,7 +17,7 @@
 #include "base/memory/weak_ptr.h"
 #include "base/time/time.h"
 #include "cc/cc_export.h"
-#include "cc/resources/release_callback_impl.h"
+#include "components/viz/common/quads/release_callback.h"
 #include "components/viz/common/quads/texture_mailbox.h"
 #include "components/viz/common/resources/resource_format.h"
 #include "ui/gfx/buffer_types.h"
@@ -54,14 +54,14 @@
 
   ResourceType type;
   std::vector<viz::TextureMailbox> mailboxes;
-  std::vector<ReleaseCallbackImpl> release_callbacks;
+  std::vector<viz::ReleaseCallback> release_callbacks;
   bool read_lock_fences_enabled;
   // Format of the storage of the resource, if known.
   gfx::BufferFormat buffer_format;
 
   // TODO(danakj): Remove these too.
   std::vector<unsigned> software_resources;
-  ReleaseCallbackImpl software_release_callback;
+  viz::ReleaseCallback software_release_callback;
 
   // Used by hardware textures which do not return values in the 0-1 range.
   // After a lookup, subtract offset and multiply by multiplier.
@@ -175,13 +175,11 @@
   static void RecycleResource(base::WeakPtr<VideoResourceUpdater> updater,
                               unsigned resource_id,
                               const gpu::SyncToken& sync_token,
-                              bool lost_resource,
-                              BlockingTaskRunner* main_thread_task_runner);
+                              bool lost_resource);
   static void ReturnTexture(base::WeakPtr<VideoResourceUpdater> updater,
                             const scoped_refptr<media::VideoFrame>& video_frame,
                             const gpu::SyncToken& sync_token,
-                            bool lost_resource,
-                            BlockingTaskRunner* main_thread_task_runner);
+                            bool lost_resource);
 
   viz::ContextProvider* context_provider_;
   ResourceProvider* resource_provider_;
diff --git a/cc/resources/video_resource_updater_unittest.cc b/cc/resources/video_resource_updater_unittest.cc
index d811f73..f5600d0 100644
--- a/cc/resources/video_resource_updater_unittest.cc
+++ b/cc/resources/video_resource_updater_unittest.cc
@@ -15,7 +15,6 @@
 #include "cc/test/fake_resource_provider.h"
 #include "cc/test/test_shared_bitmap_manager.h"
 #include "cc/test/test_web_graphics_context_3d.h"
-#include "cc/trees/blocking_task_runner.h"
 #include "gpu/GLES2/gl2extchromium.h"
 #include "media/base/video_frame.h"
 #include "testing/gtest/include/gtest/gtest.h"
@@ -402,8 +401,8 @@
 
   // Simulate the ResourceProvider releasing the resources back to the video
   // updater.
-  for (ReleaseCallbackImpl& release_callback : resources.release_callbacks)
-    release_callback.Run(gpu::SyncToken(), false, nullptr);
+  for (auto& release_callback : resources.release_callbacks)
+    release_callback.Run(gpu::SyncToken(), false);
 
   // Allocate resources for the same frame.
   context3d_->ResetUploadCount();
@@ -475,7 +474,7 @@
 
   // Simulate the ResourceProvider releasing the resource back to the video
   // updater.
-  resources.software_release_callback.Run(gpu::SyncToken(), false, nullptr);
+  resources.software_release_callback.Run(gpu::SyncToken(), false);
 
   // Allocate resources for the same frame.
   shared_bitmap_manager_->ResetAllocationCount();
@@ -633,7 +632,7 @@
         updater.CreateExternalResourcesFromVideoFrame(video_frame);
 
     ASSERT_EQ(resources.release_callbacks.size(), 1u);
-    resources.release_callbacks[0].Run(sync_token, false, nullptr);
+    resources.release_callbacks[0].Run(sync_token, false);
   }
 
   EXPECT_EQ(release_sync_token_, sync_token);
@@ -661,8 +660,8 @@
         updater.CreateExternalResourcesFromVideoFrame(video_frame);
 
     ASSERT_EQ(resources.release_callbacks.size(), 1u);
-    resources.release_callbacks[0].Run(sync_token1, false, nullptr);
-    resources.release_callbacks[0].Run(sync_token2, false, nullptr);
+    resources.release_callbacks[0].Run(sync_token1, false);
+    resources.release_callbacks[0].Run(sync_token2, false);
   }
 
   EXPECT_TRUE(release_sync_token_.HasData());
diff --git a/cc/test/fake_layer_tree_frame_sink.cc b/cc/test/fake_layer_tree_frame_sink.cc
index ff03537..88675a5 100644
--- a/cc/test/fake_layer_tree_frame_sink.cc
+++ b/cc/test/fake_layer_tree_frame_sink.cc
@@ -46,10 +46,10 @@
   LayerTreeFrameSink::DetachFromClient();
 }
 
-void FakeLayerTreeFrameSink::SubmitCompositorFrame(CompositorFrame frame) {
+void FakeLayerTreeFrameSink::SubmitCompositorFrame(viz::CompositorFrame frame) {
   ReturnResourcesHeldByParent();
 
-  last_sent_frame_.reset(new CompositorFrame(std::move(frame)));
+  last_sent_frame_ = std::make_unique<viz::CompositorFrame>(std::move(frame));
   ++num_sent_frames_;
 
   last_swap_rect_ = last_sent_frame_->render_pass_list.back()->damage_rect;
diff --git a/cc/test/fake_layer_tree_frame_sink.h b/cc/test/fake_layer_tree_frame_sink.h
index 650898e..221ba20 100644
--- a/cc/test/fake_layer_tree_frame_sink.h
+++ b/cc/test/fake_layer_tree_frame_sink.h
@@ -12,13 +12,13 @@
 #include "base/memory/ptr_util.h"
 #include "base/memory/weak_ptr.h"
 #include "base/time/time.h"
-#include "cc/output/compositor_frame.h"
 #include "cc/test/test_context_provider.h"
 #include "cc/test/test_gles2_interface.h"
 #include "cc/test/test_shared_bitmap_manager.h"
 #include "cc/test/test_web_graphics_context_3d.h"
 #include "cc/trees/layer_tree_frame_sink.h"
 #include "components/viz/common/frame_sinks/begin_frame_args.h"
+#include "components/viz/common/quads/compositor_frame.h"
 #include "components/viz/service/display/software_output_device.h"
 #include "components/viz/test/test_gpu_memory_buffer_manager.h"
 
@@ -63,12 +63,12 @@
   }
 
   // LayerTreeFrameSink implementation.
-  void SubmitCompositorFrame(CompositorFrame frame) override;
+  void SubmitCompositorFrame(viz::CompositorFrame frame) override;
   void DidNotProduceFrame(const viz::BeginFrameAck& ack) override;
   bool BindToClient(LayerTreeFrameSinkClient* client) override;
   void DetachFromClient() override;
 
-  CompositorFrame* last_sent_frame() { return last_sent_frame_.get(); }
+  viz::CompositorFrame* last_sent_frame() { return last_sent_frame_.get(); }
   size_t num_sent_frames() { return num_sent_frames_; }
 
   LayerTreeFrameSinkClient* client() { return client_; }
@@ -89,7 +89,7 @@
   viz::TestGpuMemoryBufferManager test_gpu_memory_buffer_manager_;
   TestSharedBitmapManager test_shared_bitmap_manager_;
 
-  std::unique_ptr<CompositorFrame> last_sent_frame_;
+  std::unique_ptr<viz::CompositorFrame> last_sent_frame_;
   size_t num_sent_frames_ = 0;
   std::vector<viz::TransferableResource> resources_held_by_parent_;
   gfx::Rect last_swap_rect_;
diff --git a/cc/test/fake_resource_provider.h b/cc/test/fake_resource_provider.h
index 07e7638..7d032f19 100644
--- a/cc/test/fake_resource_provider.h
+++ b/cc/test/fake_resource_provider.h
@@ -25,9 +25,9 @@
     resource_settings.buffer_to_texture_target_map =
         viz::DefaultBufferToTextureTargetMapForTesting();
     resource_settings.high_bit_for_testing = high_bit_for_testing;
-    return base::WrapUnique(new FakeResourceProvider(
-        context_provider, shared_bitmap_manager, nullptr, nullptr, true, false,
-        resource_settings));
+    return base::WrapUnique(
+        new FakeResourceProvider(context_provider, shared_bitmap_manager,
+                                 nullptr, true, false, resource_settings));
   }
 
   template <typename T>
@@ -39,8 +39,7 @@
     resource_settings.buffer_to_texture_target_map =
         viz::DefaultBufferToTextureTargetMapForTesting();
     return base::WrapUnique(new T(context_provider, shared_bitmap_manager,
-                                  nullptr, nullptr, true, false,
-                                  resource_settings));
+                                  nullptr, true, false, resource_settings));
   }
 
   static std::unique_ptr<FakeResourceProvider> Create(
@@ -55,7 +54,7 @@
     resource_settings.high_bit_for_testing = high_bit_for_testing;
     return base::WrapUnique(new FakeResourceProvider(
         context_provider, shared_bitmap_manager, gpu_memory_buffer_manager,
-        nullptr, true, false, resource_settings));
+        true, false, resource_settings));
   }
 
   template <typename T>
@@ -68,22 +67,20 @@
     resource_settings.buffer_to_texture_target_map =
         viz::DefaultBufferToTextureTargetMapForTesting();
     return base::WrapUnique(new T(context_provider, shared_bitmap_manager,
-                                  gpu_memory_buffer_manager, nullptr, true,
-                                  false, resource_settings));
+                                  gpu_memory_buffer_manager, true, false,
+                                  resource_settings));
   }
 
  private:
   FakeResourceProvider(viz::ContextProvider* context_provider,
                        viz::SharedBitmapManager* shared_bitmap_manager,
                        gpu::GpuMemoryBufferManager* gpu_memory_buffer_manager,
-                       BlockingTaskRunner* blocking_main_thread_task_runner,
                        bool delegated_sync_points_required,
                        bool enable_color_corect_rasterization,
                        const viz::ResourceSettings resource_settings)
       : ResourceProvider(context_provider,
                          shared_bitmap_manager,
                          gpu_memory_buffer_manager,
-                         blocking_main_thread_task_runner,
                          delegated_sync_points_required,
                          enable_color_corect_rasterization,
                          resource_settings) {}
diff --git a/cc/test/layer_tree_test.cc b/cc/test/layer_tree_test.cc
index 393bb80..303dd8d 100644
--- a/cc/test/layer_tree_test.cc
+++ b/cc/test/layer_tree_test.cc
@@ -482,7 +482,8 @@
       const viz::LocalSurfaceId& local_surface_id) override {
     hooks_->DisplayReceivedLocalSurfaceIdOnThread(local_surface_id);
   }
-  void DisplayReceivedCompositorFrame(const CompositorFrame& frame) override {
+  void DisplayReceivedCompositorFrame(
+      const viz::CompositorFrame& frame) override {
     hooks_->DisplayReceivedCompositorFrameOnThread(frame);
   }
   void DisplayWillDrawAndSwap(
diff --git a/cc/test/pixel_test.cc b/cc/test/pixel_test.cc
index c8d4011..9234a90 100644
--- a/cc/test/pixel_test.cc
+++ b/cc/test/pixel_test.cc
@@ -10,7 +10,6 @@
 #include "base/run_loop.h"
 #include "base/threading/thread_task_runner_handle.h"
 #include "cc/base/switches.h"
-#include "cc/output/compositor_frame_metadata.h"
 #include "cc/raster/raster_buffer_provider.h"
 #include "cc/resources/resource_provider.h"
 #include "cc/test/fake_output_surface_client.h"
@@ -18,8 +17,8 @@
 #include "cc/test/pixel_test_utils.h"
 #include "cc/test/test_in_process_context_provider.h"
 #include "cc/test/test_shared_bitmap_manager.h"
-#include "cc/trees/blocking_task_runner.h"
 #include "components/viz/common/frame_sinks/begin_frame_source.h"
+#include "components/viz/common/quads/compositor_frame_metadata.h"
 #include "components/viz/common/quads/copy_output_request.h"
 #include "components/viz/common/quads/copy_output_result.h"
 #include "components/viz/service/display/gl_renderer.h"
@@ -37,10 +36,9 @@
 PixelTest::PixelTest()
     : device_viewport_size_(gfx::Size(200, 200)),
       disable_picture_quad_image_filtering_(false),
-      output_surface_client_(new FakeOutputSurfaceClient),
-      main_thread_task_runner_(
-          BlockingTaskRunner::Create(base::ThreadTaskRunnerHandle::Get())) {}
-PixelTest::~PixelTest() {}
+      output_surface_client_(new FakeOutputSurfaceClient) {}
+
+PixelTest::~PixelTest() = default;
 
 bool PixelTest::RunPixelTest(viz::RenderPassList* pass_list,
                              const base::FilePath& ref_file,
@@ -173,8 +171,7 @@
   constexpr bool delegated_sync_points_required = false;
   resource_provider_ = std::make_unique<DisplayResourceProvider>(
       output_surface_->context_provider(), shared_bitmap_manager_.get(),
-      gpu_memory_buffer_manager_.get(), main_thread_task_runner_.get(),
-      delegated_sync_points_required,
+      gpu_memory_buffer_manager_.get(), delegated_sync_points_required,
       settings_.enable_color_correct_rasterization,
       settings_.resource_settings);
 
@@ -202,7 +199,7 @@
       false;  // Meaningless for software.
   resource_provider_ = std::make_unique<DisplayResourceProvider>(
       nullptr, shared_bitmap_manager_.get(), gpu_memory_buffer_manager_.get(),
-      main_thread_task_runner_.get(), delegated_sync_points_required,
+      delegated_sync_points_required,
       settings_.enable_color_correct_rasterization,
       settings_.resource_settings);
   auto renderer = std::make_unique<viz::SoftwareRenderer>(
diff --git a/cc/test/pixel_test.h b/cc/test/pixel_test.h
index 75daf31..33a0437 100644
--- a/cc/test/pixel_test.h
+++ b/cc/test/pixel_test.h
@@ -65,7 +65,6 @@
   std::unique_ptr<viz::OutputSurface> output_surface_;
   std::unique_ptr<TestSharedBitmapManager> shared_bitmap_manager_;
   std::unique_ptr<viz::TestGpuMemoryBufferManager> gpu_memory_buffer_manager_;
-  std::unique_ptr<BlockingTaskRunner> main_thread_task_runner_;
   std::unique_ptr<DisplayResourceProvider> resource_provider_;
   std::unique_ptr<viz::TextureMailboxDeleter> texture_mailbox_deleter_;
   std::unique_ptr<viz::DirectRenderer> renderer_;
diff --git a/cc/test/render_pass_test_utils.cc b/cc/test/render_pass_test_utils.cc
index 965b5bea..5a73192b 100644
--- a/cc/test/render_pass_test_utils.cc
+++ b/cc/test/render_pass_test_utils.cc
@@ -102,8 +102,7 @@
 }
 
 static void EmptyReleaseCallback(const gpu::SyncToken& sync_token,
-                                 bool lost_resource,
-                                 BlockingTaskRunner* main_thread_task_runner) {}
+                                 bool lost_resource) {}
 
 void AddOneOfEveryQuadType(viz::RenderPass* to_pass,
                            ResourceProvider* resource_provider,
@@ -152,8 +151,8 @@
   unsigned target = GL_TEXTURE_2D;
   gpu::Mailbox gpu_mailbox;
   memcpy(gpu_mailbox.name, "Hello world", strlen("Hello world") + 1);
-  std::unique_ptr<SingleReleaseCallbackImpl> callback =
-      SingleReleaseCallbackImpl::Create(base::Bind(&EmptyReleaseCallback));
+  std::unique_ptr<viz::SingleReleaseCallback> callback =
+      viz::SingleReleaseCallback::Create(base::Bind(&EmptyReleaseCallback));
   viz::TextureMailbox mailbox(gpu_mailbox, kSyncTokenForMailboxTextureQuad,
                               target);
   viz::ResourceId resource8 =
@@ -249,9 +248,9 @@
                    gfx::ColorSpace::CreateREC601(), 0.0, 1.0, 8);
 }
 
-static void CollectResources(std::vector<viz::ReturnedResource>* array,
-                             const std::vector<viz::ReturnedResource>& returned,
-                             BlockingTaskRunner* main_thread_task_runner) {}
+static void CollectResources(
+    std::vector<viz::ReturnedResource>* array,
+    const std::vector<viz::ReturnedResource>& returned) {}
 
 void AddOneOfEveryQuadTypeInDisplayResourceProvider(
     viz::RenderPass* to_pass,
@@ -309,8 +308,8 @@
   unsigned target = GL_TEXTURE_2D;
   gpu::Mailbox gpu_mailbox;
   memcpy(gpu_mailbox.name, "Hello world", strlen("Hello world") + 1);
-  std::unique_ptr<SingleReleaseCallbackImpl> callback =
-      SingleReleaseCallbackImpl::Create(base::Bind(&EmptyReleaseCallback));
+  std::unique_ptr<viz::SingleReleaseCallback> callback =
+      viz::SingleReleaseCallback::Create(base::Bind(&EmptyReleaseCallback));
   viz::TextureMailbox mailbox(gpu_mailbox, kSyncTokenForMailboxTextureQuad,
                               target);
   viz::ResourceId resource8 =
diff --git a/cc/test/test_hooks.h b/cc/test/test_hooks.h
index 9fa60d8..a2e85a7 100644
--- a/cc/test/test_hooks.h
+++ b/cc/test/test_hooks.h
@@ -11,13 +11,12 @@
 #include "cc/trees/layer_tree_host_impl.h"
 
 namespace viz {
+class CompositorFrame;
 class OutputSurface;
 }
 
 namespace cc {
 
-class CompositorFrame;
-
 // Used by test stubs to notify the test when something interesting happens.
 class TestHooks : public AnimationDelegate {
  public:
@@ -82,7 +81,7 @@
   virtual void DisplayReceivedLocalSurfaceIdOnThread(
       const viz::LocalSurfaceId& local_surface_id) {}
   virtual void DisplayReceivedCompositorFrameOnThread(
-      const CompositorFrame& frame) {}
+      const viz::CompositorFrame& frame) {}
   virtual void DisplayWillDrawAndSwapOnThread(
       bool will_draw_and_swap,
       const viz::RenderPassList& render_passes) {}
diff --git a/cc/trees/blocking_task_runner.cc b/cc/trees/blocking_task_runner.cc
deleted file mode 100644
index 0b87f3bb..0000000
--- a/cc/trees/blocking_task_runner.cc
+++ /dev/null
@@ -1,76 +0,0 @@
-// Copyright 2013 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "cc/trees/blocking_task_runner.h"
-
-#include <stddef.h>
-
-#include <utility>
-
-#include "base/callback.h"
-#include "base/logging.h"
-#include "base/memory/ptr_util.h"
-
-namespace cc {
-
-// static
-std::unique_ptr<BlockingTaskRunner> BlockingTaskRunner::Create(
-    scoped_refptr<base::SingleThreadTaskRunner> task_runner) {
-  return base::WrapUnique(new BlockingTaskRunner(task_runner));
-}
-
-BlockingTaskRunner::BlockingTaskRunner(
-    scoped_refptr<base::SingleThreadTaskRunner> task_runner)
-    : thread_id_(base::PlatformThread::CurrentId()),
-      task_runner_(task_runner),
-      capture_(0) {
-}
-
-BlockingTaskRunner::~BlockingTaskRunner() {}
-
-bool BlockingTaskRunner::BelongsToCurrentThread() {
-  return base::PlatformThread::CurrentId() == thread_id_;
-}
-
-bool BlockingTaskRunner::PostTask(const base::Location& from_here,
-                                  base::OnceClosure task) {
-  base::AutoLock lock(lock_);
-  DCHECK(task_runner_.get() || capture_);
-  if (!capture_)
-    return task_runner_->PostTask(from_here, std::move(task));
-  captured_tasks_.push_back(std::move(task));
-  return true;
-}
-
-void BlockingTaskRunner::SetCapture(bool capture) {
-  DCHECK(BelongsToCurrentThread());
-
-  std::vector<base::OnceClosure> tasks;
-
-  {
-    base::AutoLock lock(lock_);
-    capture_ += capture ? 1 : -1;
-    DCHECK_GE(capture_, 0);
-
-    if (capture_)
-      return;
-
-    // We're done capturing, so grab all the captured tasks and run them.
-    tasks.swap(captured_tasks_);
-  }
-  for (size_t i = 0; i < tasks.size(); ++i)
-    std::move(tasks[i]).Run();
-}
-
-BlockingTaskRunner::CapturePostTasks::CapturePostTasks(
-    BlockingTaskRunner* blocking_runner)
-    : blocking_runner_(blocking_runner) {
-  blocking_runner_->SetCapture(true);
-}
-
-BlockingTaskRunner::CapturePostTasks::~CapturePostTasks() {
-  blocking_runner_->SetCapture(false);
-}
-
-}  // namespace cc
diff --git a/cc/trees/blocking_task_runner.h b/cc/trees/blocking_task_runner.h
deleted file mode 100644
index c4c111cc..0000000
--- a/cc/trees/blocking_task_runner.h
+++ /dev/null
@@ -1,98 +0,0 @@
-// Copyright 2013 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef CC_TREES_BLOCKING_TASK_RUNNER_H_
-#define CC_TREES_BLOCKING_TASK_RUNNER_H_
-
-#include <memory>
-#include <vector>
-
-#include "base/location.h"
-#include "base/macros.h"
-#include "base/single_thread_task_runner.h"
-#include "base/synchronization/lock.h"
-#include "base/threading/platform_thread.h"
-#include "cc/cc_export.h"
-
-namespace cc {
-
-// This class wraps a SingleThreadTaskRunner but allows posted tasks to be
-// run without a round trip through the message loop. This shortcutting
-// removes guarantees about ordering. Tasks posted while the
-// BlockingTaskRunner is in a capturing state will run in order, and tasks
-// posted while the BlockingTaskRunner is /not/ in a capturing state will
-// run in order, but the two sets of tasks will *not* run in order relative
-// to when they were posted.
-//
-// To use this class, post tasks to the task runner returned by
-// BlockingTaskRunner::Create(). The thread it is created on identifies the
-// thread you want the tasks to run on. The SingleThreadTaskRunner which is
-// passed into Create() is used to run tasks that are posted when not in a
-// capturing state.
-//
-// Then, on the thread that the given task runner belongs to, you may
-// instantiate a BlockingTaskRunner::CapturePostTasks. While this object
-// exists, the task runner will collect any PostTasks called on it, posting
-// tasks to that thread from anywhere. This CapturePostTasks object provides
-// a window in time where tasks can shortcut past the MessageLoop. As soon
-// as the CapturePostTasks object is destroyed (goes out of scope), all
-// tasks that had been posted to the thread during the window will be executed
-// immediately.
-//
-// Beware of re-entrancy, make sure the CapturePostTasks object is destroyed at
-// a time when it makes sense for the embedder to call arbitrary things.
-class CC_EXPORT BlockingTaskRunner {
- public:
-  // Creates a BlockingTaskRunner for a given SingleThreadTaskRunner.
-  // |task_runner| will be used to run the tasks which are posted while we are
-  // not capturing. |task_runner| should belong to same the thread on which
-  // capturing is done.
-  static std::unique_ptr<BlockingTaskRunner> Create(
-      scoped_refptr<base::SingleThreadTaskRunner> task_runner);
-
-  ~BlockingTaskRunner();
-
-  // While an object of this type is held alive on a thread, any tasks
-  // posted to the thread will be captured and run as soon as the object
-  // is destroyed, shortcutting past the task runner.
-  class CC_EXPORT CapturePostTasks {
-   public:
-    explicit CapturePostTasks(BlockingTaskRunner* blocking_runner);
-    ~CapturePostTasks();
-
-   private:
-    BlockingTaskRunner* blocking_runner_;
-
-    DISALLOW_COPY_AND_ASSIGN(CapturePostTasks);
-  };
-
-  // True if tasks posted to the BlockingTaskRunner will run on the current
-  // thread.
-  bool BelongsToCurrentThread();
-
-  // Posts a task using the contained SingleThreadTaskRunner unless |capture_|
-  // is true. When |capture_| is true, tasks posted will be caught and stored
-  // until the capturing stops. At that time the tasks will be run directly
-  // instead of being posted to the SingleThreadTaskRunner.
-  bool PostTask(const base::Location& from_here, base::OnceClosure task);
-
- private:
-  explicit BlockingTaskRunner(
-      scoped_refptr<base::SingleThreadTaskRunner> task_runner);
-
-  void SetCapture(bool capture);
-
-  base::PlatformThreadId thread_id_;
-  scoped_refptr<base::SingleThreadTaskRunner> task_runner_;
-
-  base::Lock lock_;
-  int capture_;
-  std::vector<base::OnceClosure> captured_tasks_;
-
-  DISALLOW_COPY_AND_ASSIGN(BlockingTaskRunner);
-};
-
-}  // namespace cc
-
-#endif  // CC_TREES_BLOCKING_TASK_RUNNER_H_
diff --git a/cc/trees/blocking_task_runner_unittest.cc b/cc/trees/blocking_task_runner_unittest.cc
deleted file mode 100644
index 78a3707b..0000000
--- a/cc/trees/blocking_task_runner_unittest.cc
+++ /dev/null
@@ -1,45 +0,0 @@
-// Copyright 2014 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "cc/trees/blocking_task_runner.h"
-
-#include "base/bind.h"
-#include "base/location.h"
-#include "base/run_loop.h"
-#include "base/single_thread_task_runner.h"
-#include "base/threading/thread_task_runner_handle.h"
-#include "components/viz/test/ordered_simple_task_runner.h"
-#include "testing/gtest/include/gtest/gtest.h"
-
-namespace cc {
-namespace {
-
-void TestTask(bool* result) {
-  *result = true;
-}
-
-TEST(BlockingTaskRunnerTest, NoCapture) {
-  bool did_run = false;
-  std::unique_ptr<BlockingTaskRunner> runner(
-      BlockingTaskRunner::Create(base::ThreadTaskRunnerHandle::Get()));
-  runner->PostTask(FROM_HERE, base::Bind(&TestTask, &did_run));
-  EXPECT_FALSE(did_run);
-  base::RunLoop().RunUntilIdle();
-  EXPECT_TRUE(did_run);
-}
-
-TEST(BlockingTaskRunnerTest, Capture) {
-  bool did_run = false;
-  std::unique_ptr<BlockingTaskRunner> runner(
-      BlockingTaskRunner::Create(base::ThreadTaskRunnerHandle::Get()));
-  {
-    BlockingTaskRunner::CapturePostTasks capture(runner.get());
-    runner->PostTask(FROM_HERE, base::Bind(&TestTask, &did_run));
-    EXPECT_FALSE(did_run);
-  }
-  EXPECT_TRUE(did_run);
-}
-
-}  // namespace
-}  // namespace cc
diff --git a/cc/trees/latency_info_swap_promise.cc b/cc/trees/latency_info_swap_promise.cc
index bb12e7a..3dcaf1e 100644
--- a/cc/trees/latency_info_swap_promise.cc
+++ b/cc/trees/latency_info_swap_promise.cc
@@ -31,9 +31,9 @@
 LatencyInfoSwapPromise::LatencyInfoSwapPromise(const ui::LatencyInfo& latency)
     : latency_(latency) {}
 
-LatencyInfoSwapPromise::~LatencyInfoSwapPromise() {}
+LatencyInfoSwapPromise::~LatencyInfoSwapPromise() = default;
 
-void LatencyInfoSwapPromise::WillSwap(CompositorFrameMetadata* metadata) {
+void LatencyInfoSwapPromise::WillSwap(viz::CompositorFrameMetadata* metadata) {
   DCHECK(!latency_.terminated());
   metadata->latency_info.push_back(latency_);
 }
diff --git a/cc/trees/latency_info_swap_promise.h b/cc/trees/latency_info_swap_promise.h
index 095c29f..2b23d67 100644
--- a/cc/trees/latency_info_swap_promise.h
+++ b/cc/trees/latency_info_swap_promise.h
@@ -19,7 +19,7 @@
   ~LatencyInfoSwapPromise() override;
 
   void DidActivate() override {}
-  void WillSwap(CompositorFrameMetadata* metadata) override;
+  void WillSwap(viz::CompositorFrameMetadata* metadata) override;
   void DidSwap() override;
   DidNotSwapAction DidNotSwap(DidNotSwapReason reason) override;
   void OnCommit() override;
diff --git a/cc/trees/layer_tree_frame_sink.h b/cc/trees/layer_tree_frame_sink.h
index 8c2a058..4792c66 100644
--- a/cc/trees/layer_tree_frame_sink.h
+++ b/cc/trees/layer_tree_frame_sink.h
@@ -23,14 +23,13 @@
 }
 
 namespace viz {
+class CompositorFrame;
 class LocalSurfaceId;
 class SharedBitmapManager;
 struct BeginFrameAck;
 }  // namespace viz
 
 namespace cc {
-
-class CompositorFrame;
 class LayerTreeFrameSinkClient;
 
 // An interface for submitting CompositorFrames to a display compositor
@@ -124,7 +123,7 @@
   // For successful swaps, the implementation must call
   // DidReceiveCompositorFrameAck() asynchronously when the frame has been
   // processed in order to unthrottle the next frame.
-  virtual void SubmitCompositorFrame(CompositorFrame frame) = 0;
+  virtual void SubmitCompositorFrame(viz::CompositorFrame frame) = 0;
 
   // Signals that a BeginFrame issued by the viz::BeginFrameSource provided to
   // the client did not lead to a CompositorFrame submission.
diff --git a/cc/trees/layer_tree_frame_sink_unittest.cc b/cc/trees/layer_tree_frame_sink_unittest.cc
index 1cb7668..9895cfa 100644
--- a/cc/trees/layer_tree_frame_sink_unittest.cc
+++ b/cc/trees/layer_tree_frame_sink_unittest.cc
@@ -5,10 +5,10 @@
 #include "cc/trees/layer_tree_frame_sink.h"
 
 #include "base/memory/ptr_util.h"
-#include "cc/output/compositor_frame.h"
 #include "cc/test/fake_layer_tree_frame_sink_client.h"
 #include "cc/test/test_context_provider.h"
 #include "cc/test/test_web_graphics_context_3d.h"
+#include "components/viz/common/quads/compositor_frame.h"
 #include "gpu/GLES2/gl2extchromium.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
@@ -25,7 +25,7 @@
                            nullptr,
                            nullptr) {}
 
-  void SubmitCompositorFrame(CompositorFrame frame) override {
+  void SubmitCompositorFrame(viz::CompositorFrame frame) override {
     client_->DidReceiveCompositorFrameAck();
   }
   void DidNotProduceFrame(const viz::BeginFrameAck& ack) override {}
diff --git a/cc/trees/layer_tree_host_impl.cc b/cc/trees/layer_tree_host_impl.cc
index 3ce444d..1af4bd9 100644
--- a/cc/trees/layer_tree_host_impl.cc
+++ b/cc/trees/layer_tree_host_impl.cc
@@ -45,8 +45,6 @@
 #include "cc/layers/scrollbar_layer_impl_base.h"
 #include "cc/layers/surface_layer_impl.h"
 #include "cc/layers/viewport.h"
-#include "cc/output/compositor_frame.h"
-#include "cc/output/compositor_frame_metadata.h"
 #include "cc/raster/bitmap_raster_buffer_provider.h"
 #include "cc/raster/gpu_raster_buffer_provider.h"
 #include "cc/raster/one_copy_raster_buffer_provider.h"
@@ -78,6 +76,8 @@
 #include "cc/trees/transform_node.h"
 #include "cc/trees/tree_synchronizer.h"
 #include "components/viz/common/frame_sinks/delay_based_time_source.h"
+#include "components/viz/common/quads/compositor_frame.h"
+#include "components/viz/common/quads/compositor_frame_metadata.h"
 #include "components/viz/common/quads/copy_output_request.h"
 #include "components/viz/common/quads/render_pass_draw_quad.h"
 #include "components/viz/common/quads/shared_quad_state.h"
@@ -1662,8 +1662,9 @@
   client_->OnCanDrawStateChanged(CanDraw());
 }
 
-CompositorFrameMetadata LayerTreeHostImpl::MakeCompositorFrameMetadata() const {
-  CompositorFrameMetadata metadata;
+viz::CompositorFrameMetadata LayerTreeHostImpl::MakeCompositorFrameMetadata()
+    const {
+  viz::CompositorFrameMetadata metadata;
   metadata.device_scale_factor = active_tree_->painted_device_scale_factor() *
                                  active_tree_->device_scale_factor();
 
@@ -1777,7 +1778,7 @@
         frame->render_passes);
   }
 
-  CompositorFrameMetadata metadata = MakeCompositorFrameMetadata();
+  viz::CompositorFrameMetadata metadata = MakeCompositorFrameMetadata();
   metadata.may_contain_video = frame->may_contain_video;
   metadata.activation_dependencies = std::move(frame->activation_dependencies);
   active_tree()->FinishSwapPromises(&metadata);
@@ -1808,7 +1809,7 @@
             frame->begin_frame_ack.sequence_number);
   metadata.begin_frame_ack = frame->begin_frame_ack;
 
-  CompositorFrame compositor_frame;
+  viz::CompositorFrame compositor_frame;
   compositor_frame.metadata = std::move(metadata);
   resource_provider_->PrepareSendToParent(resources,
                                           &compositor_frame.resource_list);
@@ -2609,7 +2610,6 @@
       layer_tree_frame_sink_->context_provider(),
       layer_tree_frame_sink_->shared_bitmap_manager(),
       layer_tree_frame_sink_->gpu_memory_buffer_manager(),
-      task_runner_provider_->blocking_main_thread_task_runner(),
       layer_tree_frame_sink_->capabilities().delegated_sync_points_required,
       settings_.enable_color_correct_rasterization,
       settings_.resource_settings);
diff --git a/cc/trees/layer_tree_host_impl.h b/cc/trees/layer_tree_host_impl.h
index 0373670..ea2e4ec 100644
--- a/cc/trees/layer_tree_host_impl.h
+++ b/cc/trees/layer_tree_host_impl.h
@@ -51,10 +51,12 @@
 class ScrollOffset;
 }
 
-namespace cc {
-
-class BrowserControlsOffsetManager;
+namespace viz {
 class CompositorFrameMetadata;
+}
+
+namespace cc {
+class BrowserControlsOffsetManager;
 class LayerTreeFrameSink;
 class DebugRectHistory;
 class EvictionTilePriorityQueue;
@@ -548,7 +550,7 @@
 
   void ScheduleMicroBenchmark(std::unique_ptr<MicroBenchmarkImpl> benchmark);
 
-  CompositorFrameMetadata MakeCompositorFrameMetadata() const;
+  viz::CompositorFrameMetadata MakeCompositorFrameMetadata() const;
 
   // Viewport rectangle and clip in device space.  These rects are used to
   // prioritize raster and determine what is submitted in a CompositorFrame.
diff --git a/cc/trees/layer_tree_host_impl_unittest.cc b/cc/trees/layer_tree_host_impl_unittest.cc
index 8b5a156..53d0f99 100644
--- a/cc/trees/layer_tree_host_impl_unittest.cc
+++ b/cc/trees/layer_tree_host_impl_unittest.cc
@@ -35,7 +35,6 @@
 #include "cc/layers/texture_layer_impl.h"
 #include "cc/layers/video_layer_impl.h"
 #include "cc/layers/viewport.h"
-#include "cc/output/compositor_frame_metadata.h"
 #include "cc/resources/ui_resource_bitmap.h"
 #include "cc/resources/ui_resource_manager.h"
 #include "cc/test/animation_test_common.h"
@@ -62,6 +61,7 @@
 #include "cc/trees/single_thread_proxy.h"
 #include "cc/trees/transform_node.h"
 #include "components/viz/common/frame_sinks/begin_frame_args.h"
+#include "components/viz/common/quads/compositor_frame_metadata.h"
 #include "components/viz/common/quads/copy_output_request.h"
 #include "components/viz/common/quads/copy_output_result.h"
 #include "components/viz/common/quads/render_pass_draw_quad.h"
@@ -3904,7 +3904,7 @@
 }
 
 // This test verifies that only SurfaceLayers in the viewport and have fallbacks
-// that are different are included in CompositorFrameMetadata's
+// that are different are included in viz::CompositorFrameMetadata's
 // |activation_dependencies|.
 TEST_F(LayerTreeHostImplTest, ActivationDependenciesInMetadata) {
   SetupScrollAndContentsLayers(gfx::Size(100, 100));
@@ -3947,7 +3947,7 @@
 
   auto* fake_layer_tree_frame_sink =
       static_cast<FakeLayerTreeFrameSink*>(host_impl_->layer_tree_frame_sink());
-  const CompositorFrameMetadata& metadata =
+  const viz::CompositorFrameMetadata& metadata =
       fake_layer_tree_frame_sink->last_sent_frame()->metadata;
   EXPECT_THAT(
       metadata.activation_dependencies,
@@ -3964,7 +3964,7 @@
   host_impl_->active_tree()->PushPageScaleFromMainThread(1.f, 0.5f, 4.f);
   DrawFrame();
   {
-    CompositorFrameMetadata metadata =
+    viz::CompositorFrameMetadata metadata =
         host_impl_->MakeCompositorFrameMetadata();
     EXPECT_EQ(gfx::Vector2dF(), metadata.root_scroll_offset);
     EXPECT_EQ(1.f, metadata.page_scale_factor);
@@ -3984,13 +3984,13 @@
           .thread);
   host_impl_->ScrollBy(UpdateState(gfx::Point(), gfx::Vector2d(0, 10)).get());
   {
-    CompositorFrameMetadata metadata =
+    viz::CompositorFrameMetadata metadata =
         host_impl_->MakeCompositorFrameMetadata();
     EXPECT_EQ(gfx::Vector2dF(0.f, 10.f), metadata.root_scroll_offset);
   }
   host_impl_->ScrollEnd(EndState().get());
   {
-    CompositorFrameMetadata metadata =
+    viz::CompositorFrameMetadata metadata =
         host_impl_->MakeCompositorFrameMetadata();
     EXPECT_EQ(gfx::Vector2dF(0.f, 10.f), metadata.root_scroll_offset);
   }
@@ -4003,7 +4003,7 @@
         ->test_properties()
         ->user_scrollable_horizontal = false;
     host_impl_->active_tree()->BuildPropertyTreesForTesting();
-    CompositorFrameMetadata metadata =
+    viz::CompositorFrameMetadata metadata =
         host_impl_->MakeCompositorFrameMetadata();
     EXPECT_TRUE(metadata.root_overflow_x_hidden);
     EXPECT_FALSE(metadata.root_overflow_y_hidden);
@@ -4029,7 +4029,7 @@
         ->test_properties()
         ->user_scrollable_vertical = true;
     host_impl_->active_tree()->BuildPropertyTreesForTesting();
-    CompositorFrameMetadata metadata =
+    viz::CompositorFrameMetadata metadata =
         host_impl_->MakeCompositorFrameMetadata();
     EXPECT_FALSE(metadata.root_overflow_x_hidden);
     EXPECT_FALSE(metadata.root_overflow_y_hidden);
@@ -4043,7 +4043,7 @@
         ->test_properties()
         ->user_scrollable_horizontal = false;
     host_impl_->active_tree()->BuildPropertyTreesForTesting();
-    CompositorFrameMetadata metadata =
+    viz::CompositorFrameMetadata metadata =
         host_impl_->MakeCompositorFrameMetadata();
     EXPECT_TRUE(metadata.root_overflow_x_hidden);
     EXPECT_FALSE(metadata.root_overflow_y_hidden);
@@ -4066,7 +4066,7 @@
   host_impl_->PinchGestureEnd();
   host_impl_->ScrollEnd(EndState().get());
   {
-    CompositorFrameMetadata metadata =
+    viz::CompositorFrameMetadata metadata =
         host_impl_->MakeCompositorFrameMetadata();
     EXPECT_EQ(gfx::Vector2dF(0.f, 10.f), metadata.root_scroll_offset);
     EXPECT_EQ(2.f, metadata.page_scale_factor);
@@ -4081,7 +4081,7 @@
   host_impl_->active_tree()->PushPageScaleFromMainThread(4.f, 0.5f, 4.f);
   host_impl_->active_tree()->SetPageScaleOnActiveTree(4.f);
   {
-    CompositorFrameMetadata metadata =
+    viz::CompositorFrameMetadata metadata =
         host_impl_->MakeCompositorFrameMetadata();
     EXPECT_EQ(gfx::Vector2dF(0.f, 10.f), metadata.root_scroll_offset);
     EXPECT_EQ(4.f, metadata.page_scale_factor);
@@ -8432,7 +8432,7 @@
       : LayerImpl(tree_impl, id) {}
 };
 
-// Make sure damage tracking propagates all the way to the CompositorFrame
+// Make sure damage tracking propagates all the way to the viz::CompositorFrame
 // submitted to the LayerTreeFrameSink, where it should request to swap only
 // the sub-buffer that is damaged.
 TEST_F(LayerTreeHostImplTest, PartialSwapReceivesDamageRect) {
@@ -9170,7 +9170,8 @@
 
   void DisplayReceivedLocalSurfaceId(
       const viz::LocalSurfaceId& local_surface_id) override {}
-  void DisplayReceivedCompositorFrame(const CompositorFrame& frame) override {}
+  void DisplayReceivedCompositorFrame(
+      const viz::CompositorFrame& frame) override {}
   void DisplayWillDrawAndSwap(
       bool will_draw_and_swap,
       const viz::RenderPassList& render_passes) override {}
@@ -9545,7 +9546,7 @@
 }
 
 // Make sure LatencyInfo carried by LatencyInfoSwapPromise are passed
-// in CompositorFrameMetadata.
+// in viz::CompositorFrameMetadata.
 TEST_F(LayerTreeHostImplTest, LatencyInfoPassedToCompositorFrameMetadata) {
   std::unique_ptr<SolidColorLayerImpl> root =
       SolidColorLayerImpl::Create(host_impl_->active_tree(), 1);
@@ -9618,7 +9619,7 @@
   host_impl_->DidDrawAllLayers(frame);
 
   // Ensure the selection bounds have propagated to the frame metadata.
-  const Selection<gfx::SelectionBound>& selection_after =
+  const viz::Selection<gfx::SelectionBound>& selection_after =
       fake_layer_tree_frame_sink->last_sent_frame()->metadata.selection;
   EXPECT_EQ(selection.start.type, selection_after.start.type());
   EXPECT_EQ(selection.end.type, selection_after.end.type());
@@ -9669,7 +9670,7 @@
   host_impl_->DidDrawAllLayers(frame);
 
   // Ensure the selection bounds have propagated to the frame metadata.
-  const Selection<gfx::SelectionBound>& selection_after =
+  const viz::Selection<gfx::SelectionBound>& selection_after =
       fake_layer_tree_frame_sink->last_sent_frame()->metadata.selection;
   EXPECT_EQ(selection.start.type, selection_after.start.type());
   EXPECT_EQ(selection.end.type, selection_after.end.type());
diff --git a/cc/trees/layer_tree_host_unittest.cc b/cc/trees/layer_tree_host_unittest.cc
index fe787686..c1ab7fdd2 100644
--- a/cc/trees/layer_tree_host_unittest.cc
+++ b/cc/trees/layer_tree_host_unittest.cc
@@ -4914,7 +4914,7 @@
     result_->did_activate_called = true;
   }
 
-  void WillSwap(CompositorFrameMetadata* metadata) override {
+  void WillSwap(viz::CompositorFrameMetadata* metadata) override {
     base::AutoLock lock(result_->lock);
     EXPECT_FALSE(result_->did_swap_called);
     EXPECT_FALSE(result_->did_not_swap_called);
@@ -7546,7 +7546,7 @@
   }
 
   void DisplayReceivedCompositorFrameOnThread(
-      const CompositorFrame& frame) override {
+      const viz::CompositorFrame& frame) override {
     EXPECT_EQ(2.0f, frame.metadata.device_scale_factor);
     EndTest();
   }
@@ -7684,7 +7684,7 @@
   }
 
   void DisplayReceivedCompositorFrameOnThread(
-      const CompositorFrame& frame) override {
+      const viz::CompositorFrame& frame) override {
     EXPECT_EQ(1, ++num_swaps_);
 
     EXPECT_EQ(drawn_viewport_, frame.render_pass_list.back()->output_rect);
@@ -7730,7 +7730,7 @@
   }
 
   void DisplayReceivedCompositorFrameOnThread(
-      const CompositorFrame& frame) override {
+      const viz::CompositorFrame& frame) override {
     EXPECT_EQ(2u, frame.render_pass_list.size());
     // Each render pass has 10 resources in it. And the root render pass has a
     // mask resource used when drawing the child render pass. The number 10 may
@@ -7763,7 +7763,7 @@
   }
 
   void DisplayReceivedCompositorFrameOnThread(
-      const CompositorFrame& frame) override {
+      const viz::CompositorFrame& frame) override {
     EXPECT_EQ(5U, frame.metadata.content_source_id);
     EndTest();
   }
@@ -7791,7 +7791,7 @@
   }
 
   void DisplayReceivedCompositorFrameOnThread(
-      const CompositorFrame& frame) override {
+      const viz::CompositorFrame& frame) override {
     if (compositor_frame_submitted_)
       return;
     compositor_frame_submitted_ = true;
diff --git a/cc/trees/layer_tree_impl.cc b/cc/trees/layer_tree_impl.cc
index 55b4dae..e674e8e3 100644
--- a/cc/trees/layer_tree_impl.cc
+++ b/cc/trees/layer_tree_impl.cc
@@ -1558,7 +1558,7 @@
   new_swap_promises.clear();
 }
 
-void LayerTreeImpl::FinishSwapPromises(CompositorFrameMetadata* metadata) {
+void LayerTreeImpl::FinishSwapPromises(viz::CompositorFrameMetadata* metadata) {
   for (const auto& swap_promise : swap_promise_list_)
     swap_promise->WillSwap(metadata);
   for (const auto& swap_promise : pinned_swap_promise_list_)
@@ -2053,7 +2053,7 @@
 }
 
 void LayerTreeImpl::GetViewportSelection(
-    Selection<gfx::SelectionBound>* selection) {
+    viz::Selection<gfx::SelectionBound>* selection) {
   DCHECK(selection);
 
   selection->start = ComputeViewportSelectionBound(
diff --git a/cc/trees/layer_tree_impl.h b/cc/trees/layer_tree_impl.h
index 38bf8c2..525363a 100644
--- a/cc/trees/layer_tree_impl.h
+++ b/cc/trees/layer_tree_impl.h
@@ -439,7 +439,7 @@
       std::vector<std::unique_ptr<SwapPromise>> new_swap_promises);
   void AppendSwapPromises(
       std::vector<std::unique_ptr<SwapPromise>> new_swap_promises);
-  void FinishSwapPromises(CompositorFrameMetadata* metadata);
+  void FinishSwapPromises(viz::CompositorFrameMetadata* metadata);
   void ClearSwapPromises();
   void BreakSwapPromises(SwapPromise::DidNotSwapReason reason);
 
@@ -474,7 +474,7 @@
 
   // Compute the current selection handle location and visbility with respect to
   // the viewport.
-  void GetViewportSelection(Selection<gfx::SelectionBound>* selection);
+  void GetViewportSelection(viz::Selection<gfx::SelectionBound>* selection);
 
   void set_browser_controls_shrink_blink_size(bool shrink);
   bool browser_controls_shrink_blink_size() const {
diff --git a/cc/trees/layer_tree_impl_unittest.cc b/cc/trees/layer_tree_impl_unittest.cc
index 04dd096..fef1cac 100644
--- a/cc/trees/layer_tree_impl_unittest.cc
+++ b/cc/trees/layer_tree_impl_unittest.cc
@@ -1875,7 +1875,7 @@
   input.end.edge_bottom = gfx::Point(50, 30);
   input.end.layer_id = root->id();
 
-  Selection<gfx::SelectionBound> output;
+  viz::Selection<gfx::SelectionBound> output;
 
   // Empty input bounds should produce empty output bounds.
   host_impl().active_tree()->GetViewportSelection(&output);
@@ -1956,7 +1956,7 @@
   host_impl().active_tree()->RegisterSelection(input);
 
   // The left bound should be occluded by the clip layer.
-  Selection<gfx::SelectionBound> output;
+  viz::Selection<gfx::SelectionBound> output;
   host_impl().active_tree()->GetViewportSelection(&output);
   EXPECT_EQ(input.start.type, output.start.type());
   auto expected_output_start_top = gfx::PointF(input.start.edge_top);
@@ -2096,7 +2096,7 @@
 
   // The viewport bounds should be properly scaled by the page scale, but should
   // remain in DIP coordinates.
-  Selection<gfx::SelectionBound> output;
+  viz::Selection<gfx::SelectionBound> output;
   host_impl().active_tree()->GetViewportSelection(&output);
   EXPECT_EQ(input.start.type, output.start.type());
   auto expected_output_start_top = gfx::PointF(input.start.edge_top);
@@ -2163,7 +2163,7 @@
 
   // The viewport bounds should be properly scaled by the page scale, but should
   // remain in DIP coordinates.
-  Selection<gfx::SelectionBound> output;
+  viz::Selection<gfx::SelectionBound> output;
   host_impl().active_tree()->GetViewportSelection(&output);
   EXPECT_EQ(input.start.type, output.start.type());
   auto expected_output_start_top = gfx::PointF(input.start.edge_top);
@@ -2234,7 +2234,7 @@
 
   host_impl().active_tree()->RegisterSelection(input);
 
-  Selection<gfx::SelectionBound> output;
+  viz::Selection<gfx::SelectionBound> output;
   host_impl().active_tree()->GetViewportSelection(&output);
 
   // edge_bottom and edge_top aren't allowed to have NaNs, so the selection
@@ -2339,7 +2339,7 @@
   ~PersistentSwapPromise() override = default;
 
   void DidActivate() override {}
-  MOCK_METHOD1(WillSwap, void(CompositorFrameMetadata* metadata));
+  MOCK_METHOD1(WillSwap, void(viz::CompositorFrameMetadata* metadata));
   MOCK_METHOD0(DidSwap, void());
 
   DidNotSwapAction DidNotSwap(DidNotSwapReason reason) override {
@@ -2358,7 +2358,7 @@
   ~NotPersistentSwapPromise() override = default;
 
   void DidActivate() override {}
-  void WillSwap(CompositorFrameMetadata* metadata) override {}
+  void WillSwap(viz::CompositorFrameMetadata* metadata) override {}
   void DidSwap() override {}
 
   DidNotSwapAction DidNotSwap(DidNotSwapReason reason) override {
diff --git a/cc/trees/proxy_main.cc b/cc/trees/proxy_main.cc
index cff9b41..4893971 100644
--- a/cc/trees/proxy_main.cc
+++ b/cc/trees/proxy_main.cc
@@ -14,7 +14,6 @@
 #include "cc/base/devtools_instrumentation.h"
 #include "cc/benchmarks/benchmark_instrumentation.h"
 #include "cc/resources/ui_resource_manager.h"
-#include "cc/trees/blocking_task_runner.h"
 #include "cc/trees/layer_tree_frame_sink.h"
 #include "cc/trees/layer_tree_host.h"
 #include "cc/trees/mutator_host.h"
@@ -279,12 +278,6 @@
 
     DebugScopedSetMainThreadBlocked main_thread_blocked(task_runner_provider_);
 
-    // This CapturePostTasks should be destroyed before CommitComplete() is
-    // called since that goes out to the embedder, and we want the embedder
-    // to receive its callbacks before that.
-    BlockingTaskRunner::CapturePostTasks blocked(
-        task_runner_provider_->blocking_main_thread_task_runner());
-
     bool hold_commit_for_activation = commit_waits_for_activation_;
     commit_waits_for_activation_ = false;
     CompletionEvent completion;
diff --git a/cc/trees/single_thread_proxy.cc b/cc/trees/single_thread_proxy.cc
index bc0f6c2..ded82a7 100644
--- a/cc/trees/single_thread_proxy.cc
+++ b/cc/trees/single_thread_proxy.cc
@@ -188,12 +188,6 @@
     DebugScopedSetMainThreadBlocked main_thread_blocked(task_runner_provider_);
     DebugScopedSetImplThread impl(task_runner_provider_);
 
-    // This CapturePostTasks should be destroyed before CommitComplete() is
-    // called since that goes out to the embedder, and we want the embedder
-    // to receive its callbacks before that.
-    commit_blocking_task_runner_.reset(new BlockingTaskRunner::CapturePostTasks(
-        task_runner_provider_->blocking_main_thread_task_runner()));
-
     host_impl_->ReadyToCommit();
     host_impl_->BeginCommit();
 
@@ -231,10 +225,8 @@
   // SetNextCommitWaitsForActivation calls.
   DCHECK(!host_impl_->pending_tree())
       << "Activation is expected to have synchronously occurred by now.";
-  DCHECK(commit_blocking_task_runner_);
 
   DebugScopedSetMainThread main(task_runner_provider_);
-  commit_blocking_task_runner_.reset();
   layer_tree_host_->CommitComplete();
   layer_tree_host_->DidBeginMainFrame();
 
@@ -383,9 +375,6 @@
 }
 
 void SingleThreadProxy::DidActivateSyncTree() {
-  // Synchronously call to CommitComplete. Resetting
-  // |commit_blocking_task_runner| would make sure all tasks posted during
-  // commit/activation before CommitComplete.
   CommitComplete();
 }
 
@@ -581,8 +570,6 @@
     // there as the main thread is not blocked, so any posted tasks inside
     // the swap buffers will execute first.
     DebugScopedSetMainThreadBlocked main_thread_blocked(task_runner_provider_);
-    BlockingTaskRunner::CapturePostTasks blocked(
-        task_runner_provider_->blocking_main_thread_task_runner());
 
     draw_result = host_impl_->PrepareToDraw(frame);
     draw_frame = draw_result == DRAW_SUCCESS;
@@ -800,8 +787,6 @@
   DCHECK(scheduler_on_impl_thread_);
 
   DebugScopedSetImplThread impl(task_runner_provider_);
-  commit_blocking_task_runner_.reset(new BlockingTaskRunner::CapturePostTasks(
-      task_runner_provider_->blocking_main_thread_task_runner()));
   host_impl_->InvalidateContentOnImplSide();
 
   // Invalidations go directly to the active tree, so we synchronously call
diff --git a/cc/trees/single_thread_proxy.h b/cc/trees/single_thread_proxy.h
index 5843ed2..99414cd 100644
--- a/cc/trees/single_thread_proxy.h
+++ b/cc/trees/single_thread_proxy.h
@@ -11,7 +11,6 @@
 #include "base/macros.h"
 #include "base/time/time.h"
 #include "cc/scheduler/scheduler.h"
-#include "cc/trees/blocking_task_runner.h"
 #include "cc/trees/layer_tree_host_impl.h"
 #include "cc/trees/proxy.h"
 #include "cc/trees/task_runner_provider.h"
@@ -147,8 +146,6 @@
   // Accessed from both threads.
   std::unique_ptr<Scheduler> scheduler_on_impl_thread_;
 
-  std::unique_ptr<BlockingTaskRunner::CapturePostTasks>
-      commit_blocking_task_runner_;
   bool next_frame_is_newly_committed_frame_;
 
 #if DCHECK_IS_ON()
diff --git a/cc/trees/swap_promise.h b/cc/trees/swap_promise.h
index 858161c..81ec7cd0 100644
--- a/cc/trees/swap_promise.h
+++ b/cc/trees/swap_promise.h
@@ -7,7 +7,8 @@
 
 #include <stdint.h>
 
-#include "cc/output/compositor_frame_metadata.h"
+#include "cc/cc_export.h"
+#include "components/viz/common/quads/compositor_frame_metadata.h"
 
 namespace cc {
 
@@ -60,7 +61,7 @@
   virtual ~SwapPromise() {}
 
   virtual void DidActivate() = 0;
-  virtual void WillSwap(CompositorFrameMetadata* metadata) = 0;
+  virtual void WillSwap(viz::CompositorFrameMetadata* metadata) = 0;
   virtual void DidSwap() = 0;
   // Return |KEEP_ACTIVE| if this promise should remain active (should not be
   // broken by the owner).
diff --git a/cc/trees/swap_promise_manager_unittest.cc b/cc/trees/swap_promise_manager_unittest.cc
index 9975899..02f4df2 100644
--- a/cc/trees/swap_promise_manager_unittest.cc
+++ b/cc/trees/swap_promise_manager_unittest.cc
@@ -31,7 +31,7 @@
   ~MockSwapPromise() override {}
 
   void DidActivate() override {}
-  void WillSwap(CompositorFrameMetadata* metadata) override {}
+  void WillSwap(viz::CompositorFrameMetadata* metadata) override {}
   void DidSwap() override {}
   DidNotSwapAction DidNotSwap(DidNotSwapReason reason) override {
     return DidNotSwapAction::BREAK_PROMISE;
diff --git a/cc/trees/task_runner_provider.cc b/cc/trees/task_runner_provider.cc
index 053b0473..ebe7dd0 100644
--- a/cc/trees/task_runner_provider.cc
+++ b/cc/trees/task_runner_provider.cc
@@ -3,7 +3,6 @@
 // found in the LICENSE file.
 
 #include "base/single_thread_task_runner.h"
-#include "cc/trees/blocking_task_runner.h"
 #include "cc/trees/task_runner_provider.h"
 
 namespace cc {
@@ -71,15 +70,10 @@
     scoped_refptr<base::SingleThreadTaskRunner> main_task_runner,
     scoped_refptr<base::SingleThreadTaskRunner> impl_task_runner)
 #if !DCHECK_IS_ON()
-    : main_task_runner_(main_task_runner),
-      impl_task_runner_(impl_task_runner),
-      blocking_main_thread_task_runner_(
-          BlockingTaskRunner::Create(main_task_runner)) {
+    : main_task_runner_(main_task_runner), impl_task_runner_(impl_task_runner) {
 #else
     : main_task_runner_(main_task_runner),
       impl_task_runner_(impl_task_runner),
-      blocking_main_thread_task_runner_(
-          BlockingTaskRunner::Create(main_task_runner)),
       main_thread_id_(base::PlatformThread::CurrentId()),
       impl_thread_is_overridden_(false),
       is_main_thread_blocked_(false) {
diff --git a/cc/trees/task_runner_provider.h b/cc/trees/task_runner_provider.h
index 1a7ebf5a..42b0ed80 100644
--- a/cc/trees/task_runner_provider.h
+++ b/cc/trees/task_runner_provider.h
@@ -23,7 +23,6 @@
 }
 
 namespace cc {
-class BlockingTaskRunner;
 
 // Class responsible for controlling access to the main and impl task runners.
 // Useful for assertion checks.
@@ -53,10 +52,6 @@
 
   virtual ~TaskRunnerProvider();
 
-  BlockingTaskRunner* blocking_main_thread_task_runner() const {
-    return blocking_main_thread_task_runner_.get();
-  }
-
  protected:
   TaskRunnerProvider(
       scoped_refptr<base::SingleThreadTaskRunner> main_task_runner,
@@ -69,7 +64,6 @@
  private:
   scoped_refptr<base::SingleThreadTaskRunner> main_task_runner_;
   scoped_refptr<base::SingleThreadTaskRunner> impl_task_runner_;
-  std::unique_ptr<BlockingTaskRunner> blocking_main_thread_task_runner_;
 
 #if DCHECK_IS_ON()
   const base::PlatformThreadId main_thread_id_;
diff --git a/chrome/BUILD.gn b/chrome/BUILD.gn
index cf36e40..c828018 100644
--- a/chrome/BUILD.gn
+++ b/chrome/BUILD.gn
@@ -199,8 +199,6 @@
           ":file_pre_reader",
           ":visual_elements_resources",
           "//base",
-          "//breakpad:breakpad_handler",
-          "//breakpad:breakpad_sender",
           "//chrome/app/version_assembly:chrome_exe_manifest",
           "//chrome/browser:active_use_util",
           "//chrome/browser:chrome_process_finder",
@@ -219,6 +217,8 @@
           "//crypto",
           "//gpu/config:crash_keys",
           "//sandbox",
+          "//third_party/breakpad:breakpad_handler",
+          "//third_party/breakpad:breakpad_sender",
         ]
         data_deps = [
           "//chrome/app/version_assembly:version_assembly_manifest",
@@ -1366,8 +1366,8 @@
         ":chrome_app",
         ":chrome_framework",
         ":chrome_helper_app",
-        "//breakpad:dump_syms",
         "//chrome/browser/ui/cocoa/notifications:alert_notification_xpc_service",
+        "//third_party/breakpad:dump_syms",
         "//third_party/crashpad/crashpad/handler:crashpad_handler",
       ]
     }
@@ -1821,7 +1821,7 @@
     action("linux_symbols") {
       script = "//build/linux/dump_app_syms.py"
 
-      dump_syms_label = "//breakpad:dump_syms($host_toolchain)"
+      dump_syms_label = "//third_party/breakpad:dump_syms($host_toolchain)"
       dump_syms_binary =
           get_label_info(dump_syms_label, "root_out_dir") + "/" + "dump_syms"
 
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkPromoHeader.java b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkPromoHeader.java
index 983320b..0633b4d5 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkPromoHeader.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkPromoHeader.java
@@ -185,18 +185,15 @@
      * @param view The view to be configured.
      */
     void setupPersonalizedSigninPromo(PersonalizedSigninPromoView view) {
-        Account[] accounts = AccountManagerFacade.get().tryGetGoogleAccounts();
-        String defaultAccountName = accounts.length == 0 ? null : accounts[0].name;
-
         DisplayableProfileData profileData = null;
-        if (defaultAccountName != null) {
+        Account[] accounts = AccountManagerFacade.get().tryGetGoogleAccounts();
+        if (accounts.length > 0) {
+            String defaultAccountName = accounts[0].name;
             mProfileDataCache.update(Collections.singletonList(defaultAccountName));
             profileData = mProfileDataCache.getProfileDataOrDefault(defaultAccountName);
         }
-        mSigninPromoController.setProfileData(profileData);
-
         SigninPromoController.OnDismissListener listener = this::setPersonalizedSigninPromoDeclined;
-        mSigninPromoController.setupPromoView(mContext, view, listener);
+        mSigninPromoController.setupPromoView(mContext, view, profileData, listener);
     }
 
     /**
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ntp/RecentTabsManager.java b/chrome/android/java/src/org/chromium/chrome/browser/ntp/RecentTabsManager.java
index 063d368..78c6774 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/ntp/RecentTabsManager.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/ntp/RecentTabsManager.java
@@ -399,16 +399,14 @@
      * @param view The view to be configured.
      */
     void setupPersonalizedSigninPromo(PersonalizedSigninPromoView view) {
-        Account[] accounts = AccountManagerFacade.get().tryGetGoogleAccounts();
-        String defaultAccountName = accounts.length == 0 ? null : accounts[0].name;
-
         DisplayableProfileData profileData = null;
-        if (defaultAccountName != null) {
+        Account[] accounts = AccountManagerFacade.get().tryGetGoogleAccounts();
+        if (accounts.length > 0) {
+            String defaultAccountName = accounts[0].name;
             mProfileDataCache.update(Collections.singletonList(defaultAccountName));
             profileData = mProfileDataCache.getProfileDataOrDefault(defaultAccountName);
         }
-        mSigninPromoController.setProfileData(profileData);
-        mSigninPromoController.setupPromoView(mContext, view, null);
+        mSigninPromoController.setupPromoView(mContext, view, profileData, null);
     }
 
     // SignInStateObserver implementation.
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ntp/cards/SignInPromo.java b/chrome/android/java/src/org/chromium/chrome/browser/ntp/cards/SignInPromo.java
index ed92a80..abf88ca 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/ntp/cards/SignInPromo.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/ntp/cards/SignInPromo.java
@@ -358,18 +358,15 @@
         }
 
         private void updatePersonalizedSigninPromo() {
-            Account[] accounts = AccountManagerFacade.get().tryGetGoogleAccounts();
-            String defaultAccountName = accounts.length == 0 ? null : accounts[0].name;
-
             DisplayableProfileData profileData = null;
-            if (defaultAccountName != null) {
+            Account[] accounts = AccountManagerFacade.get().tryGetGoogleAccounts();
+            if (accounts.length > 0) {
+                String defaultAccountName = accounts[0].name;
                 mProfileDataCache.update(Collections.singletonList(defaultAccountName));
                 profileData = mProfileDataCache.getProfileDataOrDefault(defaultAccountName);
             }
-            mSigninPromoController.setProfileData(profileData);
-
             PersonalizedSigninPromoView view = (PersonalizedSigninPromoView) itemView;
-            mSigninPromoController.setupPromoView(view.getContext(), view, null);
+            mSigninPromoController.setupPromoView(view.getContext(), view, profileData, null);
         }
 
         /**
@@ -380,9 +377,8 @@
         @VisibleForTesting
         public void bindAndConfigureViewForTests(@Nullable DisplayableProfileData profileData) {
             super.onBindViewHolder();
-            mSigninPromoController.setProfileData(profileData);
             PersonalizedSigninPromoView view = (PersonalizedSigninPromoView) itemView;
-            mSigninPromoController.setupPromoView(view.getContext(), view, null);
+            mSigninPromoController.setupPromoView(view.getContext(), view, profileData, null);
         }
     }
 
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/SignInPreference.java b/chrome/android/java/src/org/chromium/chrome/browser/preferences/SignInPreference.java
index 6a7f6b0..e12917a 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/preferences/SignInPreference.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/preferences/SignInPreference.java
@@ -152,16 +152,6 @@
             mSigninPromoController = new SigninPromoController(SigninAccessPoint.SETTINGS);
         }
 
-        Account[] accounts = AccountManagerFacade.get().tryGetGoogleAccounts();
-        String defaultAccountName = accounts.length == 0 ? null : accounts[0].name;
-
-        DisplayableProfileData profileData = null;
-        if (defaultAccountName != null) {
-            mProfileDataCache.update(Collections.singletonList(defaultAccountName));
-            profileData = mProfileDataCache.getProfileDataOrDefault(defaultAccountName);
-        }
-        mSigninPromoController.setProfileData(profileData);
-
         mWasGenericSigninPromoDisplayed = false;
         notifyChanged();
     }
@@ -214,11 +204,21 @@
     protected void onBindView(final View view) {
         super.onBindView(view);
         ViewUtils.setEnabledRecursive(view, mViewEnabled);
-        if (mSigninPromoController != null) {
-            PersonalizedSigninPromoView signinPromoView =
-                    view.findViewById(R.id.signin_promo_view_container);
-            mSigninPromoController.setupPromoView(getContext(), signinPromoView, null);
+
+        if (mSigninPromoController == null) {
+            return;
         }
+
+        DisplayableProfileData profileData = null;
+        Account[] accounts = AccountManagerFacade.get().tryGetGoogleAccounts();
+        if (accounts.length > 0) {
+            String defaultAccountName = accounts[0].name;
+            mProfileDataCache.update(Collections.singletonList(defaultAccountName));
+            profileData = mProfileDataCache.getProfileDataOrDefault(defaultAccountName);
+        }
+        PersonalizedSigninPromoView signinPromoView =
+                view.findViewById(R.id.signin_promo_view_container);
+        mSigninPromoController.setupPromoView(getContext(), signinPromoView, profileData, null);
     }
 
     // ProfileSyncServiceListener implementation.
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/signin/SigninPromoController.java b/chrome/android/java/src/org/chromium/chrome/browser/signin/SigninPromoController.java
index 6709a89b..42b0927 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/signin/SigninPromoController.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/signin/SigninPromoController.java
@@ -48,7 +48,7 @@
 
     private final ImpressionTracker mImpressionTracker = new ImpressionTracker(this);
     private @Nullable DisplayableProfileData mProfileData;
-    private final @AccountSigninActivity.AccessPoint int mAccessPoint;
+    private final @AccessPoint int mAccessPoint;
     private final @Nullable String mImpressionCountName;
     private final String mImpressionUserActionName;
     private final String mImpressionWithAccountUserActionName;
@@ -95,7 +95,7 @@
      * Creates a new SigninPromoController.
      * @param accessPoint Specifies the AccessPoint from which the promo is to be shown.
      */
-    public SigninPromoController(@AccountSigninActivity.AccessPoint int accessPoint) {
+    public SigninPromoController(@AccessPoint int accessPoint) {
         mAccessPoint = accessPoint;
 
         switch (mAccessPoint) {
@@ -168,12 +168,17 @@
     /**
      * Configures the signin promo view and resets the impression tracker.
      * @param view The view in which the promo will be added.
+     * @param profileData If not null, the promo will be configured to be in the hot state, using
+     *         the account image, email and full name of the user to set the picture and the text of
+     *         the promo appropriately. Otherwise, the promo will be in the cold state.
      * @param onDismissListener Listener which handles the action of dismissing the promo. A null
      *         onDismissListener marks that the promo is not dismissible and as a result the close
      *         button is hidden.
      */
     public void setupPromoView(Context context, PersonalizedSigninPromoView view,
+            final @Nullable DisplayableProfileData profileData,
             final @Nullable OnDismissListener onDismissListener) {
+        mProfileData = profileData;
         mWasDisplayed = true;
         mImpressionTracker.reset(mImpressionTracker.wasTriggered() ? null : view);
 
@@ -200,16 +205,6 @@
         }
     }
 
-    /**
-     * Sets the profile data which will be used to configure the promo.
-     * @param profileData If not null, the promo will be configured to be in the hot state, using
-     *         the account image, email and full name of the user to set the picture and the text of
-     *         the promo appropriately. Otherwise, the promo will be in the cold state.
-     */
-    public void setProfileData(@Nullable DisplayableProfileData profileData) {
-        mProfileData = profileData;
-    }
-
     /** @return the resource used for the text displayed as promo description. */
     public @StringRes int getDescriptionStringId() {
         return mDescriptionStringId;
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/omnibox/OmniboxUrlEmphasizerTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/omnibox/OmniboxUrlEmphasizerTest.java
index 79d468c..af46941 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/omnibox/OmniboxUrlEmphasizerTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/omnibox/OmniboxUrlEmphasizerTest.java
@@ -32,6 +32,9 @@
 import org.chromium.chrome.browser.test.ChromeBrowserTestRule;
 import org.chromium.components.security_state.ConnectionSecurityLevel;
 
+import java.util.Arrays;
+import java.util.Comparator;
+
 /**
  * Unit tests for OmniboxUrlEmphasizer that ensure various types of URLs are
  * emphasized and colored correctly.
@@ -127,6 +130,21 @@
     }
 
     /**
+     * Wraps EmphasizedUrlHelper.getSpansForEmphasizedUrl and sorts spans to fix an Android N bug:
+     * https://code.google.com/p/android/issues/detail?id=229861.
+     */
+    private EmphasizedUrlSpanHelper[] getSpansForEmphasizedUrl(Spannable url) {
+        EmphasizedUrlSpanHelper[] spans = EmphasizedUrlSpanHelper.getSpansForEmphasizedUrl(url);
+        Arrays.sort(spans, new Comparator<EmphasizedUrlSpanHelper>() {
+            @Override
+            public int compare(EmphasizedUrlSpanHelper o1, EmphasizedUrlSpanHelper o2) {
+                return o1.getStartIndex() - o2.getStartIndex();
+            }
+        });
+        return spans;
+    }
+
+    /**
      * Verify that a short, secure HTTPS URL is colored correctly by
      * OmniboxUrlEmphasizer.emphasizeUrl().
      */
@@ -138,7 +156,7 @@
         Spannable url = new SpannableStringBuilder("https://www.google.com/");
         OmniboxUrlEmphasizer.emphasizeUrl(
                 url, mResources, mProfile, ConnectionSecurityLevel.SECURE, false, true, true);
-        EmphasizedUrlSpanHelper[] spans = EmphasizedUrlSpanHelper.getSpansForEmphasizedUrl(url);
+        EmphasizedUrlSpanHelper[] spans = getSpansForEmphasizedUrl(url);
 
         Assert.assertEquals("Unexpected number of spans:", 4, spans.length);
         spans[0].assertIsColoredSpan(
@@ -166,7 +184,7 @@
         Spannable url = new SpannableStringBuilder("https://www.google.com/");
         OmniboxUrlEmphasizer.emphasizeUrl(
                 url, mResources, mProfile, ConnectionSecurityLevel.SECURE, false, false, false);
-        EmphasizedUrlSpanHelper[] spans = EmphasizedUrlSpanHelper.getSpansForEmphasizedUrl(url);
+        EmphasizedUrlSpanHelper[] spans = getSpansForEmphasizedUrl(url);
 
         Assert.assertEquals("Unexpected number of spans:", 4, spans.length);
         spans[0].assertIsColoredSpan("https", 0,
@@ -196,7 +214,7 @@
                 new SpannableStringBuilder("https://www.google.com/q?query=abc123&results=1");
         OmniboxUrlEmphasizer.emphasizeUrl(
                 url, mResources, mProfile, ConnectionSecurityLevel.DANGEROUS, false, true, true);
-        EmphasizedUrlSpanHelper[] spans = EmphasizedUrlSpanHelper.getSpansForEmphasizedUrl(url);
+        EmphasizedUrlSpanHelper[] spans = getSpansForEmphasizedUrl(url);
 
         Assert.assertEquals("Unexpected number of spans:", 5, spans.length);
         spans[0].assertIsStrikethroughSpan("https", 0);
@@ -225,7 +243,7 @@
         Spannable url = new SpannableStringBuilder("m.w.co/p");
         OmniboxUrlEmphasizer.emphasizeUrl(url, mResources, mProfile,
                 ConnectionSecurityLevel.HTTP_SHOW_WARNING, false, true, false);
-        EmphasizedUrlSpanHelper[] spans = EmphasizedUrlSpanHelper.getSpansForEmphasizedUrl(url);
+        EmphasizedUrlSpanHelper[] spans = getSpansForEmphasizedUrl(url);
 
         Assert.assertEquals("Unexpected number of spans:", 2, spans.length);
         spans[0].assertIsColoredSpan("m.w.co", 0,
@@ -248,7 +266,7 @@
         Spannable url = new SpannableStringBuilder("about:blank");
         OmniboxUrlEmphasizer.emphasizeUrl(
                 url, mResources, mProfile, ConnectionSecurityLevel.NONE, true, true, true);
-        EmphasizedUrlSpanHelper[] spans = EmphasizedUrlSpanHelper.getSpansForEmphasizedUrl(url);
+        EmphasizedUrlSpanHelper[] spans = getSpansForEmphasizedUrl(url);
 
         Assert.assertEquals("Unexpected number of spans:", 3, spans.length);
         spans[0].assertIsColoredSpan("about", 0,
@@ -275,7 +293,7 @@
                 new SpannableStringBuilder("data:text/plain;charset=utf-8;base64,VGVzdCBVUkw=");
         OmniboxUrlEmphasizer.emphasizeUrl(
                 url, mResources, mProfile, ConnectionSecurityLevel.NONE, false, true, true);
-        EmphasizedUrlSpanHelper[] spans = EmphasizedUrlSpanHelper.getSpansForEmphasizedUrl(url);
+        EmphasizedUrlSpanHelper[] spans = getSpansForEmphasizedUrl(url);
 
         Assert.assertEquals("Unexpected number of spans:", 2, spans.length);
         spans[0].assertIsColoredSpan("data", 0,
@@ -297,7 +315,7 @@
         Spannable url = new SpannableStringBuilder("chrome://bookmarks");
         OmniboxUrlEmphasizer.emphasizeUrl(
                 url, mResources, mProfile, ConnectionSecurityLevel.NONE, true, true, true);
-        EmphasizedUrlSpanHelper[] spans = EmphasizedUrlSpanHelper.getSpansForEmphasizedUrl(url);
+        EmphasizedUrlSpanHelper[] spans = getSpansForEmphasizedUrl(url);
 
         Assert.assertEquals("Unexpected number of spans:", 3, spans.length);
         spans[0].assertIsColoredSpan("chrome", 0,
@@ -323,7 +341,7 @@
         Spannable url = new SpannableStringBuilder("chrome-native://bookmarks");
         OmniboxUrlEmphasizer.emphasizeUrl(
                 url, mResources, mProfile, ConnectionSecurityLevel.NONE, true, true, true);
-        EmphasizedUrlSpanHelper[] spans = EmphasizedUrlSpanHelper.getSpansForEmphasizedUrl(url);
+        EmphasizedUrlSpanHelper[] spans = getSpansForEmphasizedUrl(url);
 
         Assert.assertEquals("Unexpected number of spans:", 3, spans.length);
         spans[0].assertIsColoredSpan("chrome-native", 0,
@@ -349,7 +367,7 @@
         Spannable url = new SpannableStringBuilder("invalidurl");
         OmniboxUrlEmphasizer.emphasizeUrl(
                 url, mResources, mProfile, ConnectionSecurityLevel.NONE, true, true, true);
-        EmphasizedUrlSpanHelper[] spans = EmphasizedUrlSpanHelper.getSpansForEmphasizedUrl(url);
+        EmphasizedUrlSpanHelper[] spans = getSpansForEmphasizedUrl(url);
 
         Assert.assertEquals("Unexpected number of spans:", 1, spans.length);
         spans[0].assertIsColoredSpan("invalidurl", 0,
@@ -369,7 +387,7 @@
         Spannable url = new SpannableStringBuilder("");
         OmniboxUrlEmphasizer.emphasizeUrl(
                 url, mResources, mProfile, ConnectionSecurityLevel.NONE, false, true, true);
-        EmphasizedUrlSpanHelper[] spans = EmphasizedUrlSpanHelper.getSpansForEmphasizedUrl(url);
+        EmphasizedUrlSpanHelper[] spans = getSpansForEmphasizedUrl(url);
 
         Assert.assertEquals("Unexpected number of spans:", 0, spans.length);
     }
diff --git a/chrome/app/DEPS b/chrome/app/DEPS
index 7e271d87..5ab2f4c 100644
--- a/chrome/app/DEPS
+++ b/chrome/app/DEPS
@@ -1,5 +1,4 @@
 include_rules = [
-  "+breakpad",
   "+chrome/browser",
   "+chrome/child",
   "+chrome/chrome_watcher",
@@ -38,5 +37,6 @@
   "+sandbox",
   "+services/service_manager",
   "+services/ui/public",
+  "+third_party/breakpad/breakpad",
   "+third_party/crashpad/crashpad",
 ]
diff --git a/chrome/app/chrome_binaries.vsprops b/chrome/app/chrome_binaries.vsprops
index 7975c32..8c4d981 100644
--- a/chrome/app/chrome_binaries.vsprops
+++ b/chrome/app/chrome_binaries.vsprops
@@ -3,7 +3,7 @@
 	ProjectType="Visual C++"
 	Version="8.00"
 	Name="chrome_binaries"
-	InheritedPropertySheets="$(SolutionDir)..\third_party\ffmpeg\using_ffmpeg.vsprops;$(SolutionDir)..\breakpad\using_breakpad.vsprops;$(SolutionDir)..\third_party\libxml\build\using_libxml.vsprops;$(SolutionDir)..\third_party\libxslt\build\using_libxslt.vsprops;$(SolutionDir)..\skia\using_skia.vsprops;$(SolutionDir)..\third_party\libpng\using_libpng.vsprops;$(SolutionDir)..\tools\grit\build\using_generated_resources.vsprops;$(SolutionDir)third_party\wtl\using_wtl.vsprops"
+	InheritedPropertySheets="$(SolutionDir)..\third_party\ffmpeg\using_ffmpeg.vsprops;$(SolutionDir)..\third_party\breakpad\using_breakpad.vsprops;$(SolutionDir)..\third_party\libxml\build\using_libxml.vsprops;$(SolutionDir)..\third_party\libxslt\build\using_libxslt.vsprops;$(SolutionDir)..\skia\using_skia.vsprops;$(SolutionDir)..\third_party\libpng\using_libpng.vsprops;$(SolutionDir)..\tools\grit\build\using_generated_resources.vsprops;$(SolutionDir)third_party\wtl\using_wtl.vsprops"
 	>
 	<Tool
 		Name="VCLinkerTool"
diff --git a/chrome/app/chrome_exe.vsprops b/chrome/app/chrome_exe.vsprops
index e42799c..95b044a1 100644
--- a/chrome/app/chrome_exe.vsprops
+++ b/chrome/app/chrome_exe.vsprops
@@ -3,7 +3,7 @@
 	ProjectType="Visual C++"
 	Version="8.00"
 	Name="chrome_exe"
-	InheritedPropertySheets="$(SolutionDir)..\breakpad\using_breakpad.vsprops"
+	InheritedPropertySheets="$(SolutionDir)..\third_party\breakpad\using_breakpad.vsprops"
 	>
 	<Tool
 		Name="VCCLCompilerTool"
diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources.grd
index 5913bbc..39919cc 100644
--- a/chrome/app/generated_resources.grd
+++ b/chrome/app/generated_resources.grd
@@ -5284,6 +5284,9 @@
       <message name="IDS_GOOGLE_SEARCH_BOX_EMPTY_HINT" desc="The text displayed in the fakebox (on the New Tab page) when it is empty, and Google is the default search engine.">
         Search Google or type URL
       </message>
+      <message name="IDS_CLICK_TO_VIEW_DOODLE" desc="Prompts users to click on an icon to view a Google doodle. Normally, today's Google doodle is shown when the user opens a new tab (if there is a doodle today). If there is a doodle, but it cannot be shown, Chrome puts an icon next to the regular Google logo. The icon uses this label for accessibility. If the user clicks the icon, Chrome will show the doodle.">
+        Click to view today’s doodle
+      </message>
       <message name="IDS_OMNIBOX_ACCESSIBLE_ANSWER" desc="Readable text represening a query typed by the user in the omnibox, followed by an indication that an answer to that query will follow, followed by the answer. The commas are significant as they will introduce a pause in the spoken text.">
         <ph name="QUERY">$1<ex>weather in los angeles</ex></ph>, answer, <ph name="ANSWER">$2<ex>sunny and 84 degrees</ex></ph>
       </message>
diff --git a/chrome/browser/android/vr_shell/vr_shell_gl.cc b/chrome/browser/android/vr_shell/vr_shell_gl.cc
index f7279755a..6094234 100644
--- a/chrome/browser/android/vr_shell/vr_shell_gl.cc
+++ b/chrome/browser/android/vr_shell/vr_shell_gl.cc
@@ -733,6 +733,54 @@
   browser_->ProcessContentGesture(std::move(event));
 }
 
+bool VrShellGl::ResizeForWebVR(int16_t frame_index) {
+  // Process all pending_bounds_ changes targeted for before this frame, being
+  // careful of wrapping frame indices.
+  static constexpr unsigned max =
+      std::numeric_limits<decltype(frame_index_)>::max();
+  static_assert(max > kPoseRingBufferSize * 2,
+                "To detect wrapping, kPoseRingBufferSize must be smaller "
+                "than half of frame_index_ range.");
+  while (!pending_bounds_.empty()) {
+    uint16_t index = pending_bounds_.front().first;
+    // If index is less than the frame_index it's possible we've wrapped, so we
+    // extend the range and 'un-wrap' to account for this.
+    if (index < frame_index)
+      index += max;
+    // If the pending bounds change is for an upcoming frame within our buffer
+    // size, wait to apply it. Otherwise, apply it immediately. This guarantees
+    // that even if we miss many frames, the queue can't fill up with stale
+    // bounds.
+    if (index > frame_index && index <= frame_index + kPoseRingBufferSize)
+      break;
+
+    const WebVrBounds& bounds = pending_bounds_.front().second;
+    webvr_left_viewport_->SetSourceUv(UVFromGfxRect(bounds.left_bounds));
+    webvr_right_viewport_->SetSourceUv(UVFromGfxRect(bounds.right_bounds));
+    DVLOG(1) << __FUNCTION__ << ": resize from pending_bounds to "
+             << bounds.source_size.width() << "x"
+             << bounds.source_size.height();
+    CreateOrResizeWebVRSurface(bounds.source_size);
+    pending_bounds_.pop();
+  }
+  if (render_info_primary_.surface_texture_size != webvr_surface_size_) {
+    if (!webvr_surface_size_.width()) {
+      // Don't try to resize to 0x0 pixels, drop frames until we get a valid
+      // size.
+      return false;
+    }
+
+    render_info_primary_.surface_texture_size = webvr_surface_size_;
+    DVLOG(1) << __FUNCTION__ << ": resize GVR to "
+             << webvr_surface_size_.width() << "x"
+             << webvr_surface_size_.height();
+    swap_chain_->ResizeBuffer(
+        kFramePrimaryBuffer,
+        {webvr_surface_size_.width(), webvr_surface_size_.height()});
+  }
+  return true;
+}
+
 void VrShellGl::DrawFrame(int16_t frame_index) {
   TRACE_EVENT1("gpu", "VrShellGl::DrawFrame", "frame", frame_index);
 
@@ -746,56 +794,14 @@
   // If needed, resize the primary buffer for use with WebVR. Resizing
   // needs to happen before acquiring a frame.
   if (ShouldDrawWebVr()) {
-    // Process all pending_bounds_ changes targeted for before this
-    // frame, being careful of wrapping frame indices.
-    static constexpr unsigned max =
-        std::numeric_limits<decltype(frame_index_)>::max();
-    static_assert(max > kPoseRingBufferSize * 2,
-                  "To detect wrapping, kPoseRingBufferSize must be smaller "
-                  "than half of frame_index_ range.");
-    while (!pending_bounds_.empty()) {
-      uint16_t index = pending_bounds_.front().first;
-      // If index is less than the frame_index it's possible we've
-      // wrapped, so we extend the range and 'un-wrap' to account
-      // for this.
-      if (index < frame_index)
-        index += max;
-      // If the pending bounds change is for an upcoming frame
-      // within our buffer size, wait to apply it. Otherwise, apply
-      // it immediately. This guarantees that even if we miss many
-      // frames, the queue can't fill up with stale bounds.
-      if (index > frame_index && index <= frame_index + kPoseRingBufferSize)
-        break;
-
-      const WebVrBounds& bounds = pending_bounds_.front().second;
-      webvr_left_viewport_->SetSourceUv(UVFromGfxRect(bounds.left_bounds));
-      webvr_right_viewport_->SetSourceUv(UVFromGfxRect(bounds.right_bounds));
-      DVLOG(1) << __FUNCTION__ << ": resize from pending_bounds to "
-               << bounds.source_size.width() << "x"
-               << bounds.source_size.height();
-      CreateOrResizeWebVRSurface(bounds.source_size);
-      pending_bounds_.pop();
+    if (!ResizeForWebVR(frame_index)) {
+      // We don't have a valid size yet, can't draw.
+      return;
     }
     buffer_viewport_list_->SetBufferViewport(GVR_LEFT_EYE,
                                              *webvr_left_viewport_);
     buffer_viewport_list_->SetBufferViewport(GVR_RIGHT_EYE,
                                              *webvr_right_viewport_);
-    if (render_info_primary_.surface_texture_size != webvr_surface_size_) {
-      if (!webvr_surface_size_.width()) {
-        // Don't try to resize to 0x0 pixels, drop frames until we get a
-        // valid size.
-        return;
-      }
-
-      render_info_primary_.surface_texture_size = webvr_surface_size_;
-      DVLOG(1) << __FUNCTION__ << ": resize GVR to "
-               << render_info_primary_.surface_texture_size.width() << "x"
-               << render_info_primary_.surface_texture_size.height();
-      swap_chain_->ResizeBuffer(
-          kFramePrimaryBuffer,
-          {render_info_primary_.surface_texture_size.width(),
-           render_info_primary_.surface_texture_size.height()});
-    }
   } else {
     if (render_info_primary_.surface_texture_size != render_size_default_) {
       render_info_primary_.surface_texture_size = render_size_default_;
diff --git a/chrome/browser/android/vr_shell/vr_shell_gl.h b/chrome/browser/android/vr_shell/vr_shell_gl.h
index e2fe2bc..da37485 100644
--- a/chrome/browser/android/vr_shell/vr_shell_gl.h
+++ b/chrome/browser/android/vr_shell/vr_shell_gl.h
@@ -121,6 +121,8 @@
  private:
   void GvrInit(gvr_context* gvr_api);
   void InitializeRenderer();
+  // Returns true if successfully resized.
+  bool ResizeForWebVR(int16_t frame_index);
   void DrawFrame(int16_t frame_index);
   void DrawFrameSubmitWhenReady(int16_t frame_index,
                                 gvr_frame* frame_ptr,
diff --git a/chrome/browser/chromeos/BUILD.gn b/chrome/browser/chromeos/BUILD.gn
index 4a93d94..dee623b0 100644
--- a/chrome/browser/chromeos/BUILD.gn
+++ b/chrome/browser/chromeos/BUILD.gn
@@ -1493,6 +1493,8 @@
     "tether/tether_service.h",
     "tether/tether_service_factory.cc",
     "tether/tether_service_factory.h",
+    "tpm_firmware_update.cc",
+    "tpm_firmware_update.h",
     "ui/echo_dialog_listener.h",
     "ui/echo_dialog_view.cc",
     "ui/echo_dialog_view.h",
diff --git a/chrome/browser/chromeos/events/event_rewriter_controller.cc b/chrome/browser/chromeos/events/event_rewriter_controller.cc
index 6d41869..a00b51c9 100644
--- a/chrome/browser/chromeos/events/event_rewriter_controller.cc
+++ b/chrome/browser/chromeos/events/event_rewriter_controller.cc
@@ -6,6 +6,8 @@
 
 #include <utility>
 
+#include "ash/display/mirror_window_controller.h"
+#include "ash/display/window_tree_host_manager.h"
 #include "ash/shell.h"
 #include "base/memory/ptr_util.h"
 #include "ui/aura/env.h"
@@ -42,9 +44,15 @@
   initialized_ = true;
   // Add the rewriters to each existing root window EventSource.
   aura::Window::Windows windows = ash::Shell::GetAllRootWindows();
-  for (auto* window : windows) {
+  for (auto* window : windows)
     AddToEventSource(window->GetHost()->GetEventSource());
-  }
+
+  // In case there are any mirroring displays, their hosts' EventSources won't
+  // be included above.
+  const auto* mirror_window_controller =
+      ash::Shell::Get()->window_tree_host_manager()->mirror_window_controller();
+  for (auto* window : mirror_window_controller->GetAllRootWindows())
+    AddToEventSource(window->GetHost()->GetEventSource());
 }
 
 void EventRewriterController::OnHostInitialized(aura::WindowTreeHost* host) {
diff --git a/chrome/browser/chromeos/extensions/default_app_order.cc b/chrome/browser/chromeos/extensions/default_app_order.cc
index a5ff7bb..dc0698e 100644
--- a/chrome/browser/chromeos/extensions/default_app_order.cc
+++ b/chrome/browser/chromeos/extensions/default_app_order.cc
@@ -39,26 +39,31 @@
 const char* const kDefaultAppOrder[] = {
     extension_misc::kChromeAppId,
     arc::kPlayStoreAppId,
-    extensions::kWebStoreAppId,
-    "nplnnjkbeijcggmpdcecpabgbjgeiedc",  // Play Games
-    genius_app::kGeniusAppId,
-    extension_misc::kYoutubeAppId,
+    extension_misc::kFilesManagerAppId,
     extension_misc::kGmailAppId,
-    "ejjicmeblgpmajnghnpcppodonldlgfn",  // Calendar
-    "lneaknkopdijkpnocmklfnjbeapigfbh",  // Google Maps
-    "apdfllckaahabafndbhieahigkjlhalf",  // Drive
+    extension_misc::kCalendarAppId,
     extension_misc::kGoogleDocAppId,
-    extension_misc::kGoogleSheetsAppId,
     extension_misc::kGoogleSlidesAppId,
-    "dlppkpafhbajpcmmoheippocdidnckmm",  // Google+
-    "hcglmfcclpfgljeaiahehebeoaiicbko",  // Google Photos
-    "hhaomjibdihmijegdhdafkllkbggdgoj",  // Files
-    extension_misc::kGooglePlayMusicAppId,
-    extension_misc::kGooglePlayBooksAppId,   // Play Books
-    extension_misc::kGooglePlayMoviesAppId,  // Play Movies & TV
-    "joodangkbfjnajiiifokapkpmhfnpleo",      // Calculator
-    "hfhhnacclhffhdffklopdkcgdhifgngh",      // Camera
-    "gbchcmhmhahfdphkhkmpfmihenigjmpp",      // Chrome Remote Desktop
+    extension_misc::kGoogleSheetsAppId,
+    extension_misc::kGoogleKeepAppId,
+    extension_misc::kGooglePhotosAppId,
+    extension_misc::kYoutubeAppId,
+    arc::kPlayMoviesAppId,                   // Play Movies & TV ARC app
+    extension_misc::kGooglePlayMoviesAppId,  // Play Movies & TV Chrome app
+    arc::kPlayMusicAppId,                    // Play Music ARC app
+    extension_misc::kGooglePlayMusicAppId,   // Play Music Chrome app
+    arc::kPlayGamesAppId,
+    arc::kPlayBooksAppId,                   // Play Books ARC app
+    extension_misc::kGooglePlayBooksAppId,  // Play Books Chrome app
+    extension_misc::kGoogleMapsAppId,
+    extension_misc::kDriveHostedAppId,
+    extension_misc::kCameraAppId,
+    extension_misc::kCalculatorAppId,
+    extension_misc::kTextEditorAppId,
+    extension_misc::kGooglePlusAppId,
+    extension_misc::kChromeRemoteDesktopAppId,
+    extensions::kWebStoreAppId,
+    genius_app::kGeniusAppId,
 };
 
 // Reads external ordinal json file and returned the parsed value. Returns NULL
diff --git a/chrome/browser/chromeos/login/screens/reset_screen.cc b/chrome/browser/chromeos/login/screens/reset_screen.cc
index f440cacd..176c422 100644
--- a/chrome/browser/chromeos/login/screens/reset_screen.cc
+++ b/chrome/browser/chromeos/login/screens/reset_screen.cc
@@ -5,9 +5,6 @@
 #include "chrome/browser/chromeos/login/screens/reset_screen.h"
 
 #include "base/command_line.h"
-#include "base/feature_list.h"
-#include "base/files/file_path.h"
-#include "base/files/file_util.h"
 #include "base/metrics/histogram_macros.h"
 #include "base/task_scheduler/post_task.h"
 #include "base/values.h"
@@ -18,7 +15,7 @@
 #include "chrome/browser/chromeos/login/screens/reset_view.h"
 #include "chrome/browser/chromeos/login/ui/login_display_host.h"
 #include "chrome/browser/chromeos/reset/metrics.h"
-#include "chrome/common/chrome_features.h"
+#include "chrome/browser/chromeos/tpm_firmware_update.h"
 #include "chrome/common/pref_names.h"
 #include "chromeos/chromeos_switches.h"
 #include "chromeos/dbus/dbus_thread_manager.h"
@@ -53,9 +50,6 @@
 constexpr const char kContextKeyIsOfficialBuild[] = "is-official-build";
 constexpr const char kContextKeyScreenState[] = "screen-state";
 
-constexpr const base::FilePath::CharType kTPMFirmwareUpdateAvailableFlagFile[] =
-    FILE_PATH_LITERAL("/run/tpm_firmware_update_available");
-
 }  // namespace
 
 ResetScreen::ResetScreen(BaseScreenDelegate* base_screen_delegate,
@@ -122,14 +116,9 @@
   }
 
   // Set availability of TPM firmware update.
-  if (base::FeatureList::IsEnabled(features::kTPMFirmwareUpdate)) {
-    base::PostTaskWithTraitsAndReplyWithResult(
-        FROM_HERE, {base::MayBlock(), base::TaskPriority::USER_VISIBLE},
-        base::Bind(&base::PathExists,
-                   base::FilePath(kTPMFirmwareUpdateAvailableFlagFile)),
-        base::Bind(&ResetScreen::OnTPMFirmwareUpdateAvailableCheck,
-                   weak_ptr_factory_.GetWeakPtr()));
-  }
+  tpm_firmware_update::ShouldOfferUpdateViaPowerwash(
+      base::Bind(&ResetScreen::OnTPMFirmwareUpdateAvailableCheck,
+                 weak_ptr_factory_.GetWeakPtr()));
 
   if (dialog_type < reset::DIALOG_VIEW_TYPE_SIZE) {
     UMA_HISTOGRAM_ENUMERATION("Reset.ChromeOS.PowerwashDialogShown",
diff --git a/chrome/browser/chromeos/login/ui/webui_login_view.cc b/chrome/browser/chromeos/login/ui/webui_login_view.cc
index 9b1ce8f2..9931447 100644
--- a/chrome/browser/chromeos/login/ui/webui_login_view.cc
+++ b/chrome/browser/chromeos/login/ui/webui_login_view.cc
@@ -21,7 +21,6 @@
 #include "chrome/browser/chromeos/accessibility/accessibility_util.h"
 #include "chrome/browser/chromeos/app_mode/kiosk_app_manager.h"
 #include "chrome/browser/chromeos/lock_screen_apps/state_controller.h"
-#include "chrome/browser/chromeos/login/enrollment/auto_enrollment_controller.h"
 #include "chrome/browser/chromeos/login/ui/login_display_host_impl.h"
 #include "chrome/browser/chromeos/login/ui/preloaded_web_view.h"
 #include "chrome/browser/chromeos/login/ui/preloaded_web_view_factory.h"
@@ -144,17 +143,9 @@
   }
   accel_map_[ui::Accelerator(ui::VKEY_V, ui::EF_ALT_DOWN)] =
       kAccelNameVersion;
-
-  // Devices with forced re-enrollment enabled shouldn't be able to powerwash.
-  const AutoEnrollmentController::FRERequirement requirement =
-      AutoEnrollmentController::GetFRERequirement();
-  if (requirement == AutoEnrollmentController::NOT_REQUIRED ||
-      requirement == AutoEnrollmentController::EXPLICITLY_NOT_REQUIRED) {
-    accel_map_[ui::Accelerator(ui::VKEY_R,
-                               ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN |
-                                   ui::EF_SHIFT_DOWN)] = kAccelNameReset;
-  }
-
+  accel_map_[ui::Accelerator(
+      ui::VKEY_R, ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN | ui::EF_SHIFT_DOWN)] =
+      kAccelNameReset;
   accel_map_[ui::Accelerator(ui::VKEY_X,
       ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN | ui::EF_SHIFT_DOWN)] =
       kAccelNameEnableDebugging;
diff --git a/chrome/browser/chromeos/login/wizard_controller.cc b/chrome/browser/chromeos/login/wizard_controller.cc
index b355915..17f1f95 100644
--- a/chrome/browser/chromeos/login/wizard_controller.cc
+++ b/chrome/browser/chromeos/login/wizard_controller.cc
@@ -35,7 +35,6 @@
 #include "chrome/browser/chromeos/customization/customization_document.h"
 #include "chrome/browser/chromeos/device/input_service_proxy.h"
 #include "chrome/browser/chromeos/login/enrollment/auto_enrollment_check_screen.h"
-#include "chrome/browser/chromeos/login/enrollment/auto_enrollment_controller.h"
 #include "chrome/browser/chromeos/login/enrollment/enrollment_screen.h"
 #include "chrome/browser/chromeos/login/existing_user_controller.h"
 #include "chrome/browser/chromeos/login/helper.h"
diff --git a/chrome/browser/chromeos/login/wizard_controller.h b/chrome/browser/chromeos/login/wizard_controller.h
index 9b88c10a6..c6616f6 100644
--- a/chrome/browser/chromeos/login/wizard_controller.h
+++ b/chrome/browser/chromeos/login/wizard_controller.h
@@ -18,6 +18,7 @@
 #include "base/time/time.h"
 #include "base/timer/timer.h"
 #include "chrome/browser/chromeos/accessibility/accessibility_manager.h"
+#include "chrome/browser/chromeos/login/enrollment/auto_enrollment_controller.h"
 #include "chrome/browser/chromeos/login/screen_manager.h"
 #include "chrome/browser/chromeos/login/screens/base_screen_delegate.h"
 #include "chrome/browser/chromeos/login/screens/controller_pairing_screen.h"
@@ -38,7 +39,6 @@
 
 namespace chromeos {
 
-class AutoEnrollmentController;
 class ErrorScreen;
 struct Geoposition;
 class LoginDisplayHost;
diff --git a/chrome/browser/chromeos/policy/device_policy_decoder_chromeos.cc b/chrome/browser/chromeos/policy/device_policy_decoder_chromeos.cc
index 8ccc981..c1c529c 100644
--- a/chrome/browser/chromeos/policy/device_policy_decoder_chromeos.cc
+++ b/chrome/browser/chromeos/policy/device_policy_decoder_chromeos.cc
@@ -18,6 +18,7 @@
 #include "chrome/browser/chromeos/policy/device_local_account.h"
 #include "chrome/browser/chromeos/policy/device_off_hours_controller.h"
 #include "chrome/browser/chromeos/policy/proto/chrome_device_policy.pb.h"
+#include "chrome/browser/chromeos/tpm_firmware_update.h"
 #include "chromeos/dbus/dbus_thread_manager.h"
 #include "chromeos/dbus/update_engine_client.h"
 #include "chromeos/settings/cros_settings_names.h"
@@ -942,6 +943,14 @@
                   POLICY_SCOPE_MACHINE, POLICY_SOURCE_CLOUD,
                   std::move(whitelist), nullptr);
   }
+
+  if (policy.has_tpm_firmware_update_settings()) {
+    policies->Set(key::kTPMFirmwareUpdateSettings, POLICY_LEVEL_MANDATORY,
+                  POLICY_SCOPE_MACHINE, POLICY_SOURCE_CLOUD,
+                  chromeos::tpm_firmware_update::DecodeSettingsProto(
+                      policy.tpm_firmware_update_settings()),
+                  nullptr);
+  }
 }
 }  // namespace
 
diff --git a/chrome/browser/chromeos/policy/proto/chrome_device_policy.proto b/chrome/browser/chromeos/policy/proto/chrome_device_policy.proto
index 4a9d1bc5..b71779e 100644
--- a/chrome/browser/chromeos/policy/proto/chrome_device_policy.proto
+++ b/chrome/browser/chromeos/policy/proto/chrome_device_policy.proto
@@ -894,6 +894,12 @@
   repeated string whitelist = 1;
 }
 
+// Settings to control the behavior of the TPM firmware update functionality.
+message TPMFirmwareUpdateSettingsProto {
+  // Whether the user can invoke the update via powerwash.
+  optional bool allow_user_initiated_powerwash = 1;
+}
+
 message ChromeDeviceSettingsProto {
   optional DevicePolicyRefreshRateProto device_policy_refresh_rate = 1;
   optional UserWhitelistProto user_whitelist = 2;
@@ -965,4 +971,5 @@
       57;
   optional DeviceNativePrintersWhitelistProto native_device_printers_whitelist =
       58;
+  optional TPMFirmwareUpdateSettingsProto tpm_firmware_update_settings = 59;
 }
diff --git a/chrome/browser/chromeos/settings/device_settings_provider.cc b/chrome/browser/chromeos/settings/device_settings_provider.cc
index 2d50970..7ecd4ec 100644
--- a/chrome/browser/chromeos/settings/device_settings_provider.cc
+++ b/chrome/browser/chromeos/settings/device_settings_provider.cc
@@ -24,6 +24,7 @@
 #include "chrome/browser/chromeos/policy/device_off_hours_controller.h"
 #include "chrome/browser/chromeos/settings/cros_settings.h"
 #include "chrome/browser/chromeos/settings/device_settings_cache.h"
+#include "chrome/browser/chromeos/tpm_firmware_update.h"
 #include "chrome/browser/metrics/metrics_reporting_state.h"
 #include "chromeos/chromeos_switches.h"
 #include "chromeos/dbus/cryptohome_client.h"
@@ -106,6 +107,7 @@
     kDeviceLoginScreenLocales,
     kDeviceLoginScreenInputMethods,
     kDeviceOffHours,
+    kTPMFirmwareUpdateSettings,
 };
 
 void DecodeLoginPolicies(
@@ -488,8 +490,8 @@
   new_values_cache->SetBoolean(
       kReleaseChannelDelegated,
       policy.has_release_channel() &&
-      policy.release_channel().has_release_channel_delegated() &&
-      policy.release_channel().release_channel_delegated());
+          policy.release_channel().has_release_channel_delegated() &&
+          policy.release_channel().release_channel_delegated());
 
   if (policy.has_system_timezone()) {
     if (policy.system_timezone().has_timezone()) {
@@ -578,6 +580,12 @@
     if (off_hours_policy)
       new_values_cache->SetValue(kDeviceOffHours, std::move(off_hours_policy));
   }
+
+  if (policy.has_tpm_firmware_update_settings()) {
+    new_values_cache->SetValue(kTPMFirmwareUpdateSettings,
+                               tpm_firmware_update::DecodeSettingsProto(
+                                   policy.tpm_firmware_update_settings()));
+  }
 }
 
 void DecodeLogUploadPolicies(const em::ChromeDeviceSettingsProto& policy,
diff --git a/chrome/browser/chromeos/tpm_firmware_update.cc b/chrome/browser/chromeos/tpm_firmware_update.cc
new file mode 100644
index 0000000..c7eae220
--- /dev/null
+++ b/chrome/browser/chromeos/tpm_firmware_update.cc
@@ -0,0 +1,119 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/chromeos/tpm_firmware_update.h"
+
+#include "base/bind.h"
+#include "base/callback.h"
+#include "base/callback_helpers.h"
+#include "base/feature_list.h"
+#include "base/files/file_path.h"
+#include "base/files/file_util.h"
+#include "base/memory/ptr_util.h"
+#include "base/task_scheduler/post_task.h"
+#include "base/values.h"
+#include "chrome/browser/browser_process.h"
+#include "chrome/browser/chromeos/login/enrollment/auto_enrollment_controller.h"
+#include "chrome/browser/chromeos/policy/browser_policy_connector_chromeos.h"
+#include "chrome/browser/chromeos/policy/proto/chrome_device_policy.pb.h"
+#include "chrome/browser/chromeos/settings/cros_settings.h"
+#include "chrome/common/chrome_features.h"
+
+namespace chromeos {
+namespace tpm_firmware_update {
+
+namespace {
+
+// Settings dictionary key constants.
+constexpr char kSettingsKeyAllowPowerwash[] = "allow-user-initiated-powerwash";
+
+// The presence of this flag file indicates that a firmware update is available.
+constexpr base::FilePath::CharType kTPMFirmwareUpdateAvailableFlagFile[] =
+    FILE_PATH_LITERAL("/run/tpm_firmware_update_available");
+
+// Checks whether |kSettingsKeyAllowPowerwash| is set to true in |settings|.
+bool SettingsAllowUpdateViaPowerwash(const base::Value* settings) {
+  if (!settings)
+    return false;
+
+  const base::Value* const allow_powerwash = settings->FindKeyOfType(
+      kSettingsKeyAllowPowerwash, base::Value::Type::BOOLEAN);
+  return allow_powerwash && allow_powerwash->GetBool();
+}
+
+}  // namespace
+
+std::unique_ptr<base::DictionaryValue> DecodeSettingsProto(
+    const enterprise_management::TPMFirmwareUpdateSettingsProto& settings) {
+  std::unique_ptr<base::DictionaryValue> result =
+      base::MakeUnique<base::DictionaryValue>();
+
+  if (settings.has_allow_user_initiated_powerwash()) {
+    result->SetPath({kSettingsKeyAllowPowerwash},
+                    base::Value(settings.allow_user_initiated_powerwash()));
+  }
+
+  return result;
+}
+
+void ShouldOfferUpdateViaPowerwash(base::OnceCallback<void(bool)> completion) {
+  // Wrap |completion| in a RepeatingCallback. This is necessary to cater to the
+  // somewhat awkward PrepareTrustedValues interface, which for some return
+  // values invokes the callback passed to it, and for others requires the code
+  // here to do so.
+  base::RepeatingCallback<void(bool)> callback(
+      base::AdaptCallbackForRepeating(std::move(completion)));
+
+  if (!base::FeatureList::IsEnabled(features::kTPMFirmwareUpdate)) {
+    callback.Run(false);
+    return;
+  }
+
+  if (g_browser_process->platform_part()
+          ->browser_policy_connector_chromeos()
+          ->IsEnterpriseManaged()) {
+    // For enterprise-managed devices, always honor the device setting.
+    CrosSettings* const cros_settings = CrosSettings::Get();
+    switch (cros_settings->PrepareTrustedValues(
+        base::Bind(&ShouldOfferUpdateViaPowerwash, callback))) {
+      case CrosSettingsProvider::TEMPORARILY_UNTRUSTED:
+        // Retry happens via the callback registered above.
+        return;
+      case CrosSettingsProvider::PERMANENTLY_UNTRUSTED:
+        // No device settings? Default to disallow.
+        callback.Run(false);
+        return;
+      case CrosSettingsProvider::TRUSTED:
+        // Setting is present and trusted so respect its value.
+        if (!SettingsAllowUpdateViaPowerwash(
+                cros_settings->GetPref(kTPMFirmwareUpdateSettings))) {
+          callback.Run(false);
+          return;
+        }
+        break;
+    }
+  } else {
+    // Consumer device or still in OOBE. If FRE is required, enterprise
+    // enrollment might still be pending, in which case powerwash is disallowed
+    // until FRE determines that the device is not remotely managed or it does
+    // get enrolled and the admin allows TPM firmware update via powerwash.
+    const AutoEnrollmentController::FRERequirement requirement =
+        AutoEnrollmentController::GetFRERequirement();
+    if (requirement == AutoEnrollmentController::EXPLICITLY_REQUIRED) {
+      callback.Run(false);
+      return;
+    }
+  }
+
+  // OK to offer TPM firmware update via powerwash to the user. Last thing to
+  // check is whether there actually is a pending update.
+  base::PostTaskWithTraitsAndReplyWithResult(
+      FROM_HERE, {base::MayBlock(), base::TaskPriority::USER_VISIBLE},
+      base::Bind(&base::PathExists,
+                 base::FilePath(kTPMFirmwareUpdateAvailableFlagFile)),
+      callback);
+}
+
+}  // namespace tpm_firmware_update
+}  // namespace chromeos
diff --git a/chrome/browser/chromeos/tpm_firmware_update.h b/chrome/browser/chromeos/tpm_firmware_update.h
new file mode 100644
index 0000000..00382211
--- /dev/null
+++ b/chrome/browser/chromeos/tpm_firmware_update.h
@@ -0,0 +1,33 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROME_BROWSER_CHROMEOS_TPM_FIRMWARE_UPDATE_H_
+#define CHROME_BROWSER_CHROMEOS_TPM_FIRMWARE_UPDATE_H_
+
+#include <memory>
+
+#include "base/callback_forward.h"
+
+namespace base {
+class DictionaryValue;
+}
+
+namespace enterprise_management {
+class TPMFirmwareUpdateSettingsProto;
+}
+
+namespace chromeos {
+namespace tpm_firmware_update {
+
+// Decodes the TPM firmware update settings into base::Value representation.
+std::unique_ptr<base::DictionaryValue> DecodeSettingsProto(
+    const enterprise_management::TPMFirmwareUpdateSettingsProto& settings);
+
+// Check whether the update should be offered as part of the powerwash flow.
+void ShouldOfferUpdateViaPowerwash(base::OnceCallback<void(bool)> completion);
+
+}  // namespace tpm_firmware_update
+}  // namespace chromeos
+
+#endif  // CHROME_BROWSER_CHROMEOS_TPM_FIRMWARE_UPDATE_H_
diff --git a/chrome/browser/component_updater/cros_component_installer.cc b/chrome/browser/component_updater/cros_component_installer.cc
index c31ab0a1..4af2729 100644
--- a/chrome/browser/component_updater/cros_component_installer.cc
+++ b/chrome/browser/component_updater/cros_component_installer.cc
@@ -72,7 +72,7 @@
     : name(name), env_version(env_version), sha2hashstr(sha2hashstr) {}
 ComponentConfig::~ComponentConfig() {}
 
-CrOSComponentInstallerTraits::CrOSComponentInstallerTraits(
+CrOSComponentInstallerPolicy::CrOSComponentInstallerPolicy(
     const ComponentConfig& config)
     : name(config.name), env_version(config.env_version) {
   if (config.sha2hashstr.length() != 64)
@@ -84,17 +84,17 @@
   }
 }
 
-bool CrOSComponentInstallerTraits::SupportsGroupPolicyEnabledComponentUpdates()
+bool CrOSComponentInstallerPolicy::SupportsGroupPolicyEnabledComponentUpdates()
     const {
   return true;
 }
 
-bool CrOSComponentInstallerTraits::RequiresNetworkEncryption() const {
+bool CrOSComponentInstallerPolicy::RequiresNetworkEncryption() const {
   return true;
 }
 
 update_client::CrxInstaller::Result
-CrOSComponentInstallerTraits::OnCustomInstall(
+CrOSComponentInstallerPolicy::OnCustomInstall(
     const base::DictionaryValue& manifest,
     const base::FilePath& install_dir) {
   std::string version;
@@ -107,7 +107,7 @@
   return update_client::CrxInstaller::Result(update_client::InstallError::NONE);
 }
 
-void CrOSComponentInstallerTraits::ComponentReady(
+void CrOSComponentInstallerPolicy::ComponentReady(
     const base::Version& version,
     const base::FilePath& path,
     std::unique_ptr<base::DictionaryValue> manifest) {
@@ -119,37 +119,37 @@
   }
 }
 
-bool CrOSComponentInstallerTraits::VerifyInstallation(
+bool CrOSComponentInstallerPolicy::VerifyInstallation(
     const base::DictionaryValue& manifest,
     const base::FilePath& install_dir) const {
   return true;
 }
 
-base::FilePath CrOSComponentInstallerTraits::GetRelativeInstallDir() const {
+base::FilePath CrOSComponentInstallerPolicy::GetRelativeInstallDir() const {
   return base::FilePath(name);
 }
 
-void CrOSComponentInstallerTraits::GetHash(std::vector<uint8_t>* hash) const {
+void CrOSComponentInstallerPolicy::GetHash(std::vector<uint8_t>* hash) const {
   hash->assign(kSha2Hash_, kSha2Hash_ + arraysize(kSha2Hash_));
 }
 
-std::string CrOSComponentInstallerTraits::GetName() const {
+std::string CrOSComponentInstallerPolicy::GetName() const {
   return name;
 }
 
 update_client::InstallerAttributes
-CrOSComponentInstallerTraits::GetInstallerAttributes() const {
+CrOSComponentInstallerPolicy::GetInstallerAttributes() const {
   update_client::InstallerAttributes attrs;
   attrs["_env_version"] = env_version;
   return attrs;
 }
 
-std::vector<std::string> CrOSComponentInstallerTraits::GetMimeTypes() const {
+std::vector<std::string> CrOSComponentInstallerPolicy::GetMimeTypes() const {
   std::vector<std::string> mime_types;
   return mime_types;
 }
 
-bool CrOSComponentInstallerTraits::IsCompatible(
+bool CrOSComponentInstallerPolicy::IsCompatible(
     const std::string& env_version_str,
     const std::string& min_env_version_str) {
   base::Version env_version(env_version_str);
@@ -205,12 +205,11 @@
                               const ComponentConfig& config,
                               const base::Closure& register_callback) {
   DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
-  std::unique_ptr<ComponentInstallerTraits> traits(
-      new CrOSComponentInstallerTraits(config));
+  std::unique_ptr<ComponentInstallerPolicy> policy(
+      new CrOSComponentInstallerPolicy(config));
   // |cus| will take ownership of |installer| during
   // installer->Register(cus).
-  DefaultComponentInstaller* installer =
-      new DefaultComponentInstaller(std::move(traits));
+  ComponentInstaller* installer = new ComponentInstaller(std::move(policy));
   installer->Register(cus, register_callback);
 }
 
diff --git a/chrome/browser/component_updater/cros_component_installer.h b/chrome/browser/component_updater/cros_component_installer.h
index 7c79748..bc2a98dfa 100644
--- a/chrome/browser/component_updater/cros_component_installer.h
+++ b/chrome/browser/component_updater/cros_component_installer.h
@@ -11,8 +11,8 @@
 #include <vector>
 
 #include "chromeos/dbus/dbus_method_call_status.h"
+#include "components/component_updater/component_installer.h"
 #include "components/component_updater/component_updater_service.h"
-#include "components/component_updater/default_component_installer.h"
 #include "components/update_client/update_client.h"
 #include "crypto/sha2.h"
 
@@ -42,10 +42,10 @@
   ~ComponentConfig();
 };
 
-class CrOSComponentInstallerTraits : public ComponentInstallerTraits {
+class CrOSComponentInstallerPolicy : public ComponentInstallerPolicy {
  public:
-  explicit CrOSComponentInstallerTraits(const ComponentConfig& config);
-  ~CrOSComponentInstallerTraits() override {}
+  explicit CrOSComponentInstallerPolicy(const ComponentConfig& config);
+  ~CrOSComponentInstallerPolicy() override {}
 
  private:
   FRIEND_TEST_ALL_PREFIXES(CrOSComponentInstallerTest, IsCompatibleOrNot);
@@ -53,7 +53,7 @@
                            ComponentReadyCorrectManifest);
   FRIEND_TEST_ALL_PREFIXES(CrOSComponentInstallerTest,
                            ComponentReadyWrongManifest);
-  // The following methods override ComponentInstallerTraits.
+  // The following methods override ComponentInstallerPolicy.
   bool SupportsGroupPolicyEnabledComponentUpdates() const override;
   bool RequiresNetworkEncryption() const override;
   update_client::CrxInstaller::Result OnCustomInstall(
@@ -76,7 +76,7 @@
   std::string env_version;
   uint8_t kSha2Hash_[crypto::kSHA256Length] = {};
 
-  DISALLOW_COPY_AND_ASSIGN(CrOSComponentInstallerTraits);
+  DISALLOW_COPY_AND_ASSIGN(CrOSComponentInstallerPolicy);
 };
 
 // This class contains functions used to register and install a component.
diff --git a/chrome/browser/component_updater/cros_component_installer_unittest.cc b/chrome/browser/component_updater/cros_component_installer_unittest.cc
index 6a6b910..3477646 100644
--- a/chrome/browser/component_updater/cros_component_installer_unittest.cc
+++ b/chrome/browser/component_updater/cros_component_installer_unittest.cc
@@ -45,10 +45,10 @@
   DISALLOW_COPY_AND_ASSIGN(CrOSComponentInstallerTest);
 };
 
-class MockCrOSComponentInstallerTraits : public CrOSComponentInstallerTraits {
+class MockCrOSComponentInstallerPolicy : public CrOSComponentInstallerPolicy {
  public:
-  explicit MockCrOSComponentInstallerTraits(const ComponentConfig& config)
-      : CrOSComponentInstallerTraits(config) {}
+  explicit MockCrOSComponentInstallerPolicy(const ComponentConfig& config)
+      : CrOSComponentInstallerPolicy(config) {}
   MOCK_METHOD2(IsCompatible,
                bool(const std::string& env_version_str,
                     const std::string& min_env_version_str));
@@ -65,39 +65,39 @@
 
 TEST_F(CrOSComponentInstallerTest, ComponentReadyCorrectManifest) {
   ComponentConfig config("a", "2.1", "");
-  MockCrOSComponentInstallerTraits traits(config);
-  EXPECT_CALL(traits, IsCompatible(testing::_, testing::_)).Times(1);
+  MockCrOSComponentInstallerPolicy policy(config);
+  EXPECT_CALL(policy, IsCompatible(testing::_, testing::_)).Times(1);
   base::Version version;
   base::FilePath path;
   std::unique_ptr<base::DictionaryValue> manifest =
       base::MakeUnique<base::DictionaryValue>();
   manifest->SetString("min_env_version", "2.1");
-  traits.ComponentReady(version, path, std::move(manifest));
+  policy.ComponentReady(version, path, std::move(manifest));
   RunUntilIdle();
 }
 
 TEST_F(CrOSComponentInstallerTest, ComponentReadyWrongManifest) {
   ComponentConfig config("a", "2.1", "");
-  MockCrOSComponentInstallerTraits traits(config);
-  EXPECT_CALL(traits, IsCompatible(testing::_, testing::_)).Times(0);
+  MockCrOSComponentInstallerPolicy policy(config);
+  EXPECT_CALL(policy, IsCompatible(testing::_, testing::_)).Times(0);
   base::Version version;
   base::FilePath path;
   std::unique_ptr<base::DictionaryValue> manifest =
       base::MakeUnique<base::DictionaryValue>();
-  traits.ComponentReady(version, path, std::move(manifest));
+  policy.ComponentReady(version, path, std::move(manifest));
   RunUntilIdle();
 }
 
 TEST_F(CrOSComponentInstallerTest, IsCompatibleOrNot) {
   ComponentConfig config("", "", "");
-  CrOSComponentInstallerTraits traits(config);
-  EXPECT_TRUE(traits.IsCompatible("1.0", "1.0"));
-  EXPECT_TRUE(traits.IsCompatible("1.1", "1.0"));
-  EXPECT_FALSE(traits.IsCompatible("1.0", "1.1"));
-  EXPECT_FALSE(traits.IsCompatible("1.0", "2.0"));
-  EXPECT_FALSE(traits.IsCompatible("1.c", "1.c"));
-  EXPECT_FALSE(traits.IsCompatible("1", "1.1"));
-  EXPECT_TRUE(traits.IsCompatible("1.1.1", "1.1"));
+  CrOSComponentInstallerPolicy policy(config);
+  EXPECT_TRUE(policy.IsCompatible("1.0", "1.0"));
+  EXPECT_TRUE(policy.IsCompatible("1.1", "1.0"));
+  EXPECT_FALSE(policy.IsCompatible("1.0", "1.1"));
+  EXPECT_FALSE(policy.IsCompatible("1.0", "2.0"));
+  EXPECT_FALSE(policy.IsCompatible("1.c", "1.c"));
+  EXPECT_FALSE(policy.IsCompatible("1", "1.1"));
+  EXPECT_TRUE(policy.IsCompatible("1.1.1", "1.1"));
 }
 
 }  // namespace component_updater
diff --git a/chrome/browser/component_updater/file_type_policies_component_installer.cc b/chrome/browser/component_updater/file_type_policies_component_installer.cc
index 7fbb1c2..e19f2f4 100644
--- a/chrome/browser/component_updater/file_type_policies_component_installer.cc
+++ b/chrome/browser/component_updater/file_type_policies_component_installer.cc
@@ -56,29 +56,29 @@
 
 namespace component_updater {
 
-bool FileTypePoliciesComponentInstallerTraits::
+bool FileTypePoliciesComponentInstallerPolicy::
     SupportsGroupPolicyEnabledComponentUpdates() const {
   return false;
 }
 
-bool FileTypePoliciesComponentInstallerTraits::RequiresNetworkEncryption()
+bool FileTypePoliciesComponentInstallerPolicy::RequiresNetworkEncryption()
     const {
   return false;
 }
 
 update_client::CrxInstaller::Result
-FileTypePoliciesComponentInstallerTraits::OnCustomInstall(
+FileTypePoliciesComponentInstallerPolicy::OnCustomInstall(
     const base::DictionaryValue& manifest,
     const base::FilePath& install_dir) {
   return update_client::CrxInstaller::Result(0);  // Nothing custom here.
 }
 
-base::FilePath FileTypePoliciesComponentInstallerTraits::GetInstalledPath(
+base::FilePath FileTypePoliciesComponentInstallerPolicy::GetInstalledPath(
     const base::FilePath& base) {
   return base.Append(kFileTypePoliciesBinaryPbFileName);
 }
 
-void FileTypePoliciesComponentInstallerTraits::ComponentReady(
+void FileTypePoliciesComponentInstallerPolicy::ComponentReady(
     const base::Version& version,
     const base::FilePath& install_dir,
     std::unique_ptr<base::DictionaryValue> manifest) {
@@ -91,7 +91,7 @@
 }
 
 // Called during startup and installation before ComponentReady().
-bool FileTypePoliciesComponentInstallerTraits::VerifyInstallation(
+bool FileTypePoliciesComponentInstallerPolicy::VerifyInstallation(
     const base::DictionaryValue& manifest,
     const base::FilePath& install_dir) const {
   // No need to actually validate the proto here, since we'll do the checking
@@ -99,28 +99,28 @@
   return base::PathExists(GetInstalledPath(install_dir));
 }
 
-base::FilePath FileTypePoliciesComponentInstallerTraits::GetRelativeInstallDir()
+base::FilePath FileTypePoliciesComponentInstallerPolicy::GetRelativeInstallDir()
     const {
   return base::FilePath(FILE_PATH_LITERAL("FileTypePolicies"));
 }
 
-void FileTypePoliciesComponentInstallerTraits::GetHash(
+void FileTypePoliciesComponentInstallerPolicy::GetHash(
     std::vector<uint8_t>* hash) const {
   hash->assign(kPublicKeySHA256,
                kPublicKeySHA256 + arraysize(kPublicKeySHA256));
 }
 
-std::string FileTypePoliciesComponentInstallerTraits::GetName() const {
+std::string FileTypePoliciesComponentInstallerPolicy::GetName() const {
   return kFileTypePoliciesManifestName;
 }
 
 update_client::InstallerAttributes
-FileTypePoliciesComponentInstallerTraits::GetInstallerAttributes() const {
+FileTypePoliciesComponentInstallerPolicy::GetInstallerAttributes() const {
   return update_client::InstallerAttributes();
 }
 
 std::vector<std::string>
-FileTypePoliciesComponentInstallerTraits::GetMimeTypes() const {
+FileTypePoliciesComponentInstallerPolicy::GetMimeTypes() const {
   return std::vector<std::string>();
 }
 
@@ -128,11 +128,10 @@
                                        const base::FilePath& user_data_dir) {
   VLOG(1) << "Registering File Type Policies component.";
 
-  std::unique_ptr<ComponentInstallerTraits> traits(
-      new FileTypePoliciesComponentInstallerTraits());
+  std::unique_ptr<ComponentInstallerPolicy> policy(
+      new FileTypePoliciesComponentInstallerPolicy());
   // |cus| will take ownership of |installer| during installer->Register(cus).
-  DefaultComponentInstaller* installer =
-      new DefaultComponentInstaller(std::move(traits));
+  ComponentInstaller* installer = new ComponentInstaller(std::move(policy));
   installer->Register(cus, base::Closure());
 }
 
diff --git a/chrome/browser/component_updater/file_type_policies_component_installer.h b/chrome/browser/component_updater/file_type_policies_component_installer.h
index 0cf9a49..f87c86f 100644
--- a/chrome/browser/component_updater/file_type_policies_component_installer.h
+++ b/chrome/browser/component_updater/file_type_policies_component_installer.h
@@ -14,7 +14,7 @@
 #include "base/files/file_path.h"
 #include "base/macros.h"
 #include "base/values.h"
-#include "components/component_updater/default_component_installer.h"
+#include "components/component_updater/component_installer.h"
 
 namespace base {
 class FilePath;
@@ -24,14 +24,14 @@
 
 class ComponentUpdateService;
 
-class FileTypePoliciesComponentInstallerTraits
-    : public ComponentInstallerTraits {
+class FileTypePoliciesComponentInstallerPolicy
+    : public ComponentInstallerPolicy {
  public:
-  FileTypePoliciesComponentInstallerTraits() {}
-  ~FileTypePoliciesComponentInstallerTraits() override {}
+  FileTypePoliciesComponentInstallerPolicy() {}
+  ~FileTypePoliciesComponentInstallerPolicy() override {}
 
  private:
-  // The following methods override ComponentInstallerTraits.
+  // The following methods override ComponentInstallerPolicy.
   bool SupportsGroupPolicyEnabledComponentUpdates() const override;
   bool RequiresNetworkEncryption() const override;
   update_client::CrxInstaller::Result OnCustomInstall(
@@ -50,7 +50,7 @@
 
   static base::FilePath GetInstalledPath(const base::FilePath& base);
 
-  DISALLOW_COPY_AND_ASSIGN(FileTypePoliciesComponentInstallerTraits);
+  DISALLOW_COPY_AND_ASSIGN(FileTypePoliciesComponentInstallerPolicy);
 };
 
 // Call once during startup to make the component update service aware of
diff --git a/chrome/browser/component_updater/origin_trials_component_installer.cc b/chrome/browser/component_updater/origin_trials_component_installer.cc
index 0a651b2..c1bd1d4 100644
--- a/chrome/browser/component_updater/origin_trials_component_installer.cc
+++ b/chrome/browser/component_updater/origin_trials_component_installer.cc
@@ -55,30 +55,30 @@
 
 }  // namespace
 
-bool OriginTrialsComponentInstallerTraits::VerifyInstallation(
+bool OriginTrialsComponentInstallerPolicy::VerifyInstallation(
     const base::DictionaryValue& manifest,
     const base::FilePath& install_dir) const {
   // Test if the "origin-trials" key is present in the manifest.
   return manifest.HasKey(kManifestOriginTrialsKey);
 }
 
-bool OriginTrialsComponentInstallerTraits::
+bool OriginTrialsComponentInstallerPolicy::
     SupportsGroupPolicyEnabledComponentUpdates() const {
   return false;
 }
 
-bool OriginTrialsComponentInstallerTraits::RequiresNetworkEncryption() const {
+bool OriginTrialsComponentInstallerPolicy::RequiresNetworkEncryption() const {
   return false;
 }
 
 update_client::CrxInstaller::Result
-OriginTrialsComponentInstallerTraits::OnCustomInstall(
+OriginTrialsComponentInstallerPolicy::OnCustomInstall(
     const base::DictionaryValue& manifest,
     const base::FilePath& install_dir) {
   return update_client::CrxInstaller::Result(0);
 }
 
-void OriginTrialsComponentInstallerTraits::ComponentReady(
+void OriginTrialsComponentInstallerPolicy::ComponentReady(
     const base::Version& version,
     const base::FilePath& install_dir,
     std::unique_ptr<base::DictionaryValue> manifest) {
@@ -115,39 +115,38 @@
   }
 }
 
-base::FilePath OriginTrialsComponentInstallerTraits::GetRelativeInstallDir()
+base::FilePath OriginTrialsComponentInstallerPolicy::GetRelativeInstallDir()
     const {
   return base::FilePath(FILE_PATH_LITERAL("OriginTrials"));
 }
 
-void OriginTrialsComponentInstallerTraits::GetHash(
+void OriginTrialsComponentInstallerPolicy::GetHash(
     std::vector<uint8_t>* hash) const {
   if (!hash)
     return;
   hash->assign(kSha256Hash, kSha256Hash + arraysize(kSha256Hash));
 }
 
-std::string OriginTrialsComponentInstallerTraits::GetName() const {
+std::string OriginTrialsComponentInstallerPolicy::GetName() const {
   return "Origin Trials";
 }
 
 update_client::InstallerAttributes
-OriginTrialsComponentInstallerTraits::GetInstallerAttributes() const {
+OriginTrialsComponentInstallerPolicy::GetInstallerAttributes() const {
   return update_client::InstallerAttributes();
 }
 
-std::vector<std::string> OriginTrialsComponentInstallerTraits::GetMimeTypes()
+std::vector<std::string> OriginTrialsComponentInstallerPolicy::GetMimeTypes()
     const {
   return std::vector<std::string>();
 }
 
 void RegisterOriginTrialsComponent(ComponentUpdateService* cus,
                                    const base::FilePath& user_data_dir) {
-  std::unique_ptr<ComponentInstallerTraits> traits(
-      new OriginTrialsComponentInstallerTraits());
+  std::unique_ptr<ComponentInstallerPolicy> policy(
+      new OriginTrialsComponentInstallerPolicy());
   // |cus| will take ownership of |installer| during installer->Register(cus).
-  DefaultComponentInstaller* installer =
-      new DefaultComponentInstaller(std::move(traits));
+  ComponentInstaller* installer = new ComponentInstaller(std::move(policy));
   installer->Register(cus, base::Closure());
 }
 
diff --git a/chrome/browser/component_updater/origin_trials_component_installer.h b/chrome/browser/component_updater/origin_trials_component_installer.h
index 7bc337b..f988a00 100644
--- a/chrome/browser/component_updater/origin_trials_component_installer.h
+++ b/chrome/browser/component_updater/origin_trials_component_installer.h
@@ -15,16 +15,16 @@
 #include "base/macros.h"
 #include "base/values.h"
 #include "base/version.h"
-#include "components/component_updater/default_component_installer.h"
+#include "components/component_updater/component_installer.h"
 
 namespace component_updater {
 
 class ComponentUpdateService;
 
-class OriginTrialsComponentInstallerTraits : public ComponentInstallerTraits {
+class OriginTrialsComponentInstallerPolicy : public ComponentInstallerPolicy {
  public:
-  OriginTrialsComponentInstallerTraits() = default;
-  ~OriginTrialsComponentInstallerTraits() override = default;
+  OriginTrialsComponentInstallerPolicy() = default;
+  ~OriginTrialsComponentInstallerPolicy() override = default;
 
  private:
   bool VerifyInstallation(const base::DictionaryValue& manifest,
@@ -43,7 +43,7 @@
   update_client::InstallerAttributes GetInstallerAttributes() const override;
   std::vector<std::string> GetMimeTypes() const override;
 
-  DISALLOW_COPY_AND_ASSIGN(OriginTrialsComponentInstallerTraits);
+  DISALLOW_COPY_AND_ASSIGN(OriginTrialsComponentInstallerPolicy);
 };
 
 // Call once during startup to make the component update service aware of
diff --git a/chrome/browser/component_updater/origin_trials_component_installer_unittest.cc b/chrome/browser/component_updater/origin_trials_component_installer_unittest.cc
index b9c17c197..3d1a996 100644
--- a/chrome/browser/component_updater/origin_trials_component_installer_unittest.cc
+++ b/chrome/browser/component_updater/origin_trials_component_installer_unittest.cc
@@ -67,7 +67,7 @@
 
     ASSERT_TRUE(temp_dir_.CreateUniqueTempDir());
 
-    traits_.reset(new OriginTrialsComponentInstallerTraits());
+    policy_.reset(new OriginTrialsComponentInstallerPolicy());
   }
 
   void LoadUpdates(std::unique_ptr<base::DictionaryValue> manifest) {
@@ -75,9 +75,9 @@
       manifest = base::MakeUnique<base::DictionaryValue>();
       manifest->Set(kManifestOriginTrialsKey, base::MakeUnique<base::Value>());
     }
-    ASSERT_TRUE(traits_->VerifyInstallation(*manifest, temp_dir_.GetPath()));
+    ASSERT_TRUE(policy_->VerifyInstallation(*manifest, temp_dir_.GetPath()));
     const base::Version expected_version(kTestUpdateVersion);
-    traits_->ComponentReady(expected_version, temp_dir_.GetPath(),
+    policy_->ComponentReady(expected_version, temp_dir_.GetPath(),
                             std::move(manifest));
   }
 
@@ -147,7 +147,7 @@
  protected:
   base::ScopedTempDir temp_dir_;
   ScopedTestingLocalState testing_local_state_;
-  std::unique_ptr<ComponentInstallerTraits> traits_;
+  std::unique_ptr<ComponentInstallerPolicy> policy_;
 
  private:
   DISALLOW_COPY_AND_ASSIGN(OriginTrialsComponentInstallerTest);
diff --git a/chrome/browser/component_updater/pepper_flash_component_installer.cc b/chrome/browser/component_updater/pepper_flash_component_installer.cc
index 7e2d2f02..20b08ad 100644
--- a/chrome/browser/component_updater/pepper_flash_component_installer.cc
+++ b/chrome/browser/component_updater/pepper_flash_component_installer.cc
@@ -35,8 +35,8 @@
 #include "chrome/common/chrome_switches.h"
 #include "chrome/common/pepper_flash.h"
 #include "chrome/common/ppapi_utils.h"
+#include "components/component_updater/component_installer.h"
 #include "components/component_updater/component_updater_service.h"
-#include "components/component_updater/default_component_installer.h"
 #include "components/update_client/update_client.h"
 #include "components/update_client/update_client_errors.h"
 #include "content/public/browser/browser_thread.h"
@@ -238,13 +238,13 @@
 #endif  // !defined(OS_LINUX) && defined(GOOGLE_CHROME_BUILD)
 
 #if defined(GOOGLE_CHROME_BUILD)
-class FlashComponentInstallerTraits : public ComponentInstallerTraits {
+class FlashComponentInstallerPolicy : public ComponentInstallerPolicy {
  public:
-  FlashComponentInstallerTraits();
-  ~FlashComponentInstallerTraits() override {}
+  FlashComponentInstallerPolicy();
+  ~FlashComponentInstallerPolicy() override {}
 
  private:
-  // The following methods override ComponentInstallerTraits.
+  // The following methods override ComponentInstallerPolicy.
   bool SupportsGroupPolicyEnabledComponentUpdates() const override;
   bool RequiresNetworkEncryption() const override;
   update_client::CrxInstaller::Result OnCustomInstall(
@@ -261,22 +261,22 @@
   update_client::InstallerAttributes GetInstallerAttributes() const override;
   std::vector<std::string> GetMimeTypes() const override;
 
-  DISALLOW_COPY_AND_ASSIGN(FlashComponentInstallerTraits);
+  DISALLOW_COPY_AND_ASSIGN(FlashComponentInstallerPolicy);
 };
 
-FlashComponentInstallerTraits::FlashComponentInstallerTraits() {}
+FlashComponentInstallerPolicy::FlashComponentInstallerPolicy() {}
 
-bool FlashComponentInstallerTraits::SupportsGroupPolicyEnabledComponentUpdates()
+bool FlashComponentInstallerPolicy::SupportsGroupPolicyEnabledComponentUpdates()
     const {
   return true;
 }
 
-bool FlashComponentInstallerTraits::RequiresNetworkEncryption() const {
+bool FlashComponentInstallerPolicy::RequiresNetworkEncryption() const {
   return false;
 }
 
 update_client::CrxInstaller::Result
-FlashComponentInstallerTraits::OnCustomInstall(
+FlashComponentInstallerPolicy::OnCustomInstall(
     const base::DictionaryValue& manifest,
     const base::FilePath& install_dir) {
   std::string version;
@@ -301,7 +301,7 @@
   return update_client::CrxInstaller::Result(update_client::InstallError::NONE);
 }
 
-void FlashComponentInstallerTraits::ComponentReady(
+void FlashComponentInstallerPolicy::ComponentReady(
     const base::Version& version,
     const base::FilePath& path,
     std::unique_ptr<base::DictionaryValue> manifest) {
@@ -317,7 +317,7 @@
 #endif  // !defined(OS_LINUX)
 }
 
-bool FlashComponentInstallerTraits::VerifyInstallation(
+bool FlashComponentInstallerPolicy::VerifyInstallation(
     const base::DictionaryValue& manifest,
     const base::FilePath& install_dir) const {
   base::Version unused;
@@ -326,20 +326,20 @@
 
 // The base directory on Windows looks like:
 // <profile>\AppData\Local\Google\Chrome\User Data\PepperFlash\.
-base::FilePath FlashComponentInstallerTraits::GetRelativeInstallDir() const {
+base::FilePath FlashComponentInstallerPolicy::GetRelativeInstallDir() const {
   return base::FilePath(FILE_PATH_LITERAL("PepperFlash"));
 }
 
-void FlashComponentInstallerTraits::GetHash(std::vector<uint8_t>* hash) const {
+void FlashComponentInstallerPolicy::GetHash(std::vector<uint8_t>* hash) const {
   hash->assign(kSha2Hash, kSha2Hash + arraysize(kSha2Hash));
 }
 
-std::string FlashComponentInstallerTraits::GetName() const {
+std::string FlashComponentInstallerPolicy::GetName() const {
   return "Adobe Flash Player";
 }
 
 update_client::InstallerAttributes
-FlashComponentInstallerTraits::GetInstallerAttributes() const {
+FlashComponentInstallerPolicy::GetInstallerAttributes() const {
   // For Chrome OS, send the built-in flash player version to the server,
   // otherwise it will serve component updates of outdated flash players.
   update_client::InstallerAttributes attrs;
@@ -352,7 +352,7 @@
   return attrs;
 }
 
-std::vector<std::string> FlashComponentInstallerTraits::GetMimeTypes() const {
+std::vector<std::string> FlashComponentInstallerPolicy::GetMimeTypes() const {
   std::vector<std::string> mime_types;
   mime_types.push_back("application/x-shockwave-flash");
   mime_types.push_back("application/futuresplash");
@@ -375,11 +375,10 @@
     return;
 #endif  // defined(OS_CHROMEOS)
 
-  std::unique_ptr<ComponentInstallerTraits> traits(
-      new FlashComponentInstallerTraits);
+  std::unique_ptr<ComponentInstallerPolicy> policy(
+      new FlashComponentInstallerPolicy);
   // |cus| will take ownership of |installer| during installer->Register(cus).
-  DefaultComponentInstaller* installer =
-      new DefaultComponentInstaller(std::move(traits));
+  ComponentInstaller* installer = new ComponentInstaller(std::move(policy));
   installer->Register(cus, base::Closure());
 #endif  // defined(GOOGLE_CHROME_BUILD)
 }
diff --git a/chrome/browser/component_updater/pnacl_component_installer.cc b/chrome/browser/component_updater/pnacl_component_installer.cc
index de3aa385..3ab0106 100644
--- a/chrome/browser/component_updater/pnacl_component_installer.cc
+++ b/chrome/browser/component_updater/pnacl_component_installer.cc
@@ -29,8 +29,8 @@
 #include "build/build_config.h"
 #include "chrome/browser/browser_process.h"
 #include "chrome/common/chrome_paths.h"
+#include "components/component_updater/component_installer.h"
 #include "components/component_updater/component_updater_service.h"
-#include "components/component_updater/default_component_installer.h"
 #include "components/nacl/common/nacl_switches.h"
 #include "components/update_client/update_query_params.h"
 #include "components/update_client/utils.h"
@@ -160,13 +160,13 @@
   return true;
 }
 
-class PnaclComponentInstallerTraits : public ComponentInstallerTraits {
+class PnaclComponentInstallerPolicy : public ComponentInstallerPolicy {
  public:
-  PnaclComponentInstallerTraits();
-  ~PnaclComponentInstallerTraits() override;
+  PnaclComponentInstallerPolicy();
+  ~PnaclComponentInstallerPolicy() override;
 
  private:
-  // ComponentInstallerTraits implementation.
+  // ComponentInstallerPolicy implementation.
   bool SupportsGroupPolicyEnabledComponentUpdates() const override;
   bool RequiresNetworkEncryption() const override;
   update_client::CrxInstaller::Result OnCustomInstall(
@@ -183,29 +183,29 @@
   update_client::InstallerAttributes GetInstallerAttributes() const override;
   std::vector<std::string> GetMimeTypes() const override;
 
-  DISALLOW_COPY_AND_ASSIGN(PnaclComponentInstallerTraits);
+  DISALLOW_COPY_AND_ASSIGN(PnaclComponentInstallerPolicy);
 };
 
-PnaclComponentInstallerTraits::PnaclComponentInstallerTraits() {}
-PnaclComponentInstallerTraits::~PnaclComponentInstallerTraits() {}
+PnaclComponentInstallerPolicy::PnaclComponentInstallerPolicy() {}
+PnaclComponentInstallerPolicy::~PnaclComponentInstallerPolicy() {}
 
-bool PnaclComponentInstallerTraits::SupportsGroupPolicyEnabledComponentUpdates()
+bool PnaclComponentInstallerPolicy::SupportsGroupPolicyEnabledComponentUpdates()
     const {
   return true;
 }
 
-bool PnaclComponentInstallerTraits::RequiresNetworkEncryption() const {
+bool PnaclComponentInstallerPolicy::RequiresNetworkEncryption() const {
   return false;
 }
 
 update_client::CrxInstaller::Result
-PnaclComponentInstallerTraits::OnCustomInstall(
+PnaclComponentInstallerPolicy::OnCustomInstall(
     const base::DictionaryValue& manifest,
     const base::FilePath& install_dir) {
   return update_client::CrxInstaller::Result(0);  // Nothing custom here.
 }
 
-bool PnaclComponentInstallerTraits::VerifyInstallation(
+bool PnaclComponentInstallerPolicy::VerifyInstallation(
     const base::DictionaryValue& manifest,
     const base::FilePath& install_dir) const {
   std::unique_ptr<base::DictionaryValue> pnacl_manifest(
@@ -217,7 +217,7 @@
   return CheckPnaclComponentManifest(manifest, *pnacl_manifest);
 }
 
-void PnaclComponentInstallerTraits::ComponentReady(
+void PnaclComponentInstallerPolicy::ComponentReady(
     const base::Version& version,
     const base::FilePath& install_dir,
     std::unique_ptr<base::DictionaryValue> manifest) {
@@ -227,23 +227,23 @@
       base::BindOnce(&OverrideDirPnaclComponent, install_dir));
 }
 
-base::FilePath PnaclComponentInstallerTraits::GetRelativeInstallDir() const {
+base::FilePath PnaclComponentInstallerPolicy::GetRelativeInstallDir() const {
   return base::FilePath(FILE_PATH_LITERAL("pnacl"));
 }
-void PnaclComponentInstallerTraits::GetHash(std::vector<uint8_t>* hash) const {
+void PnaclComponentInstallerPolicy::GetHash(std::vector<uint8_t>* hash) const {
   hash->assign(std::begin(kPublicKeySHA256), std::end(kPublicKeySHA256));
 }
 
-std::string PnaclComponentInstallerTraits::GetName() const {
+std::string PnaclComponentInstallerPolicy::GetName() const {
   return "pnacl";
 }
 
 update_client::InstallerAttributes
-PnaclComponentInstallerTraits::GetInstallerAttributes() const {
+PnaclComponentInstallerPolicy::GetInstallerAttributes() const {
   return update_client::InstallerAttributes();
 }
 
-std::vector<std::string> PnaclComponentInstallerTraits::GetMimeTypes() const {
+std::vector<std::string> PnaclComponentInstallerPolicy::GetMimeTypes() const {
   return std::vector<std::string>();
 }
 
@@ -251,8 +251,8 @@
 
 void RegisterPnaclComponent(ComponentUpdateService* cus) {
   // |cus| will take ownership of |installer| during installer->Register(cus).
-  DefaultComponentInstaller* installer = new DefaultComponentInstaller(
-      base::MakeUnique<PnaclComponentInstallerTraits>());
+  ComponentInstaller* installer =
+      new ComponentInstaller(base::MakeUnique<PnaclComponentInstallerPolicy>());
   installer->Register(cus, base::Closure());
 }
 
diff --git a/chrome/browser/component_updater/recovery_improved_component_installer.cc b/chrome/browser/component_updater/recovery_improved_component_installer.cc
index f4ebd95f..43a8019 100644
--- a/chrome/browser/component_updater/recovery_improved_component_installer.cc
+++ b/chrome/browser/component_updater/recovery_improved_component_installer.cc
@@ -22,29 +22,29 @@
     0x97, 0xd7, 0x32, 0x75, 0xcc, 0xd5, 0x7f, 0xec, 0x09, 0x60, 0x6d,
     0x20, 0xc3, 0x81, 0xd7, 0xce, 0x7b, 0x10, 0x15, 0x44, 0xd1};
 
-RecoveryImprovedInstallerTraits::RecoveryImprovedInstallerTraits(
+RecoveryImprovedInstallerPolicy::RecoveryImprovedInstallerPolicy(
     PrefService* prefs)
     : prefs_(prefs) {}
 
-RecoveryImprovedInstallerTraits::~RecoveryImprovedInstallerTraits() {}
+RecoveryImprovedInstallerPolicy::~RecoveryImprovedInstallerPolicy() {}
 
-bool RecoveryImprovedInstallerTraits::
+bool RecoveryImprovedInstallerPolicy::
     SupportsGroupPolicyEnabledComponentUpdates() const {
   return true;
 }
 
-bool RecoveryImprovedInstallerTraits::RequiresNetworkEncryption() const {
+bool RecoveryImprovedInstallerPolicy::RequiresNetworkEncryption() const {
   return false;
 }
 
 update_client::CrxInstaller::Result
-RecoveryImprovedInstallerTraits::OnCustomInstall(
+RecoveryImprovedInstallerPolicy::OnCustomInstall(
     const base::DictionaryValue& manifest,
     const base::FilePath& install_dir) {
   return update_client::CrxInstaller::Result(0);
 }
 
-void RecoveryImprovedInstallerTraits::ComponentReady(
+void RecoveryImprovedInstallerPolicy::ComponentReady(
     const base::Version& version,
     const base::FilePath& install_dir,
     std::unique_ptr<base::DictionaryValue> manifest) {
@@ -52,31 +52,31 @@
 }
 
 // Called during startup and installation before ComponentReady().
-bool RecoveryImprovedInstallerTraits::VerifyInstallation(
+bool RecoveryImprovedInstallerPolicy::VerifyInstallation(
     const base::DictionaryValue& manifest,
     const base::FilePath& install_dir) const {
   return true;
 }
 
-base::FilePath RecoveryImprovedInstallerTraits::GetRelativeInstallDir() const {
+base::FilePath RecoveryImprovedInstallerPolicy::GetRelativeInstallDir() const {
   return base::FilePath(FILE_PATH_LITERAL("RecoveryImproved"));
 }
 
-void RecoveryImprovedInstallerTraits::GetHash(
+void RecoveryImprovedInstallerPolicy::GetHash(
     std::vector<uint8_t>* hash) const {
   hash->assign(std::begin(kPublicKeySHA256), std::end(kPublicKeySHA256));
 }
 
-std::string RecoveryImprovedInstallerTraits::GetName() const {
+std::string RecoveryImprovedInstallerPolicy::GetName() const {
   return "Chrome Improved Recovery";
 }
 
 update_client::InstallerAttributes
-RecoveryImprovedInstallerTraits::GetInstallerAttributes() const {
+RecoveryImprovedInstallerPolicy::GetInstallerAttributes() const {
   return update_client::InstallerAttributes();
 }
 
-std::vector<std::string> RecoveryImprovedInstallerTraits::GetMimeTypes() const {
+std::vector<std::string> RecoveryImprovedInstallerPolicy::GetMimeTypes() const {
   return std::vector<std::string>();
 }
 
@@ -92,11 +92,10 @@
 
   DVLOG(1) << "Registering RecoveryImproved component.";
 
-  std::unique_ptr<ComponentInstallerTraits> traits(
-      new RecoveryImprovedInstallerTraits(prefs));
+  std::unique_ptr<ComponentInstallerPolicy> policy(
+      new RecoveryImprovedInstallerPolicy(prefs));
   // |cus| will take ownership of |installer| during installer->Register(cus).
-  DefaultComponentInstaller* installer =
-      new DefaultComponentInstaller(std::move(traits));
+  ComponentInstaller* installer = new ComponentInstaller(std::move(policy));
   installer->Register(cus, base::Closure());
 #endif
 #endif
diff --git a/chrome/browser/component_updater/recovery_improved_component_installer.h b/chrome/browser/component_updater/recovery_improved_component_installer.h
index 207070ce0..fea874e 100644
--- a/chrome/browser/component_updater/recovery_improved_component_installer.h
+++ b/chrome/browser/component_updater/recovery_improved_component_installer.h
@@ -10,7 +10,7 @@
 #include <vector>
 
 #include "base/feature_list.h"
-#include "components/component_updater/default_component_installer.h"
+#include "components/component_updater/component_installer.h"
 
 class PrefRegistrySimple;
 class PrefService;
@@ -19,15 +19,15 @@
 
 class ComponentUpdateService;
 
-class RecoveryImprovedInstallerTraits : public ComponentInstallerTraits {
+class RecoveryImprovedInstallerPolicy : public ComponentInstallerPolicy {
  public:
-  explicit RecoveryImprovedInstallerTraits(PrefService* prefs);
-  ~RecoveryImprovedInstallerTraits() override;
+  explicit RecoveryImprovedInstallerPolicy(PrefService* prefs);
+  ~RecoveryImprovedInstallerPolicy() override;
 
  private:
   friend class RecoveryImprovedInstallerTest;
 
-  // ComponentInstallerTraits implementation.
+  // ComponentInstallerPolicy implementation.
   bool SupportsGroupPolicyEnabledComponentUpdates() const override;
   bool RequiresNetworkEncryption() const override;
   update_client::CrxInstaller::Result OnCustomInstall(
@@ -46,7 +46,7 @@
 
   PrefService* prefs_;
 
-  DISALLOW_COPY_AND_ASSIGN(RecoveryImprovedInstallerTraits);
+  DISALLOW_COPY_AND_ASSIGN(RecoveryImprovedInstallerPolicy);
 };
 
 void RegisterRecoveryImprovedComponent(ComponentUpdateService* cus,
diff --git a/chrome/browser/component_updater/ssl_error_assistant_component_installer.cc b/chrome/browser/component_updater/ssl_error_assistant_component_installer.cc
index 6b174ef9..2dcfb1f6 100644
--- a/chrome/browser/component_updater/ssl_error_assistant_component_installer.cc
+++ b/chrome/browser/component_updater/ssl_error_assistant_component_installer.cc
@@ -55,29 +55,29 @@
 
 namespace component_updater {
 
-bool SSLErrorAssistantComponentInstallerTraits::
+bool SSLErrorAssistantComponentInstallerPolicy::
     SupportsGroupPolicyEnabledComponentUpdates() const {
   return false;
 }
 
-bool SSLErrorAssistantComponentInstallerTraits::RequiresNetworkEncryption()
+bool SSLErrorAssistantComponentInstallerPolicy::RequiresNetworkEncryption()
     const {
   return false;
 }
 
 update_client::CrxInstaller::Result
-SSLErrorAssistantComponentInstallerTraits::OnCustomInstall(
+SSLErrorAssistantComponentInstallerPolicy::OnCustomInstall(
     const base::DictionaryValue& manifest,
     const base::FilePath& install_dir) {
   return update_client::CrxInstaller::Result(0);  // Nothing custom here.
 }
 
-base::FilePath SSLErrorAssistantComponentInstallerTraits::GetInstalledPath(
+base::FilePath SSLErrorAssistantComponentInstallerPolicy::GetInstalledPath(
     const base::FilePath& base) {
   return base.Append(kConfigBinaryPbFileName);
 }
 
-void SSLErrorAssistantComponentInstallerTraits::ComponentReady(
+void SSLErrorAssistantComponentInstallerPolicy::ComponentReady(
     const base::Version& version,
     const base::FilePath& install_dir,
     std::unique_ptr<base::DictionaryValue> manifest) {
@@ -90,7 +90,7 @@
 }
 
 // Called during startup and installation before ComponentReady().
-bool SSLErrorAssistantComponentInstallerTraits::VerifyInstallation(
+bool SSLErrorAssistantComponentInstallerPolicy::VerifyInstallation(
     const base::DictionaryValue& manifest,
     const base::FilePath& install_dir) const {
   // No need to actually validate the proto here, since we'll do the checking
@@ -99,27 +99,27 @@
 }
 
 base::FilePath
-SSLErrorAssistantComponentInstallerTraits::GetRelativeInstallDir() const {
+SSLErrorAssistantComponentInstallerPolicy::GetRelativeInstallDir() const {
   return base::FilePath(FILE_PATH_LITERAL("SSLErrorAssistant"));
 }
 
-void SSLErrorAssistantComponentInstallerTraits::GetHash(
+void SSLErrorAssistantComponentInstallerPolicy::GetHash(
     std::vector<uint8_t>* hash) const {
   hash->assign(kPublicKeySHA256,
                kPublicKeySHA256 + arraysize(kPublicKeySHA256));
 }
 
-std::string SSLErrorAssistantComponentInstallerTraits::GetName() const {
+std::string SSLErrorAssistantComponentInstallerPolicy::GetName() const {
   return "SSL Error Assistant";
 }
 
 update_client::InstallerAttributes
-SSLErrorAssistantComponentInstallerTraits::GetInstallerAttributes() const {
+SSLErrorAssistantComponentInstallerPolicy::GetInstallerAttributes() const {
   return update_client::InstallerAttributes();
 }
 
 std::vector<std::string>
-SSLErrorAssistantComponentInstallerTraits::GetMimeTypes() const {
+SSLErrorAssistantComponentInstallerPolicy::GetMimeTypes() const {
   return std::vector<std::string>();
 }
 
@@ -127,11 +127,10 @@
                                         const base::FilePath& user_data_dir) {
   DVLOG(1) << "Registering SSL Error Assistant component.";
 
-  std::unique_ptr<ComponentInstallerTraits> traits(
-      new SSLErrorAssistantComponentInstallerTraits());
+  std::unique_ptr<ComponentInstallerPolicy> policy(
+      new SSLErrorAssistantComponentInstallerPolicy());
   // |cus| takes ownership of |installer|.
-  DefaultComponentInstaller* installer =
-      new DefaultComponentInstaller(std::move(traits));
+  ComponentInstaller* installer = new ComponentInstaller(std::move(policy));
   installer->Register(cus, base::Closure());
 }
 
diff --git a/chrome/browser/component_updater/ssl_error_assistant_component_installer.h b/chrome/browser/component_updater/ssl_error_assistant_component_installer.h
index 8d6fbee2..46408df9 100644
--- a/chrome/browser/component_updater/ssl_error_assistant_component_installer.h
+++ b/chrome/browser/component_updater/ssl_error_assistant_component_installer.h
@@ -11,21 +11,21 @@
 
 #include "base/macros.h"
 #include "base/values.h"
-#include "components/component_updater/default_component_installer.h"
+#include "components/component_updater/component_installer.h"
 
 namespace base {
 class FilePath;
 }  // namespace base
 
 namespace component_updater {
-class SSLErrorAssistantComponentInstallerTraits
-    : public ComponentInstallerTraits {
+class SSLErrorAssistantComponentInstallerPolicy
+    : public ComponentInstallerPolicy {
  public:
-  SSLErrorAssistantComponentInstallerTraits() {}
-  ~SSLErrorAssistantComponentInstallerTraits() override {}
+  SSLErrorAssistantComponentInstallerPolicy() {}
+  ~SSLErrorAssistantComponentInstallerPolicy() override {}
 
  private:
-  // ComponentInstallerTraits methods:
+  // ComponentInstallerPolicy methods:
   bool SupportsGroupPolicyEnabledComponentUpdates() const override;
   bool RequiresNetworkEncryption() const override;
   update_client::CrxInstaller::Result OnCustomInstall(
@@ -44,7 +44,7 @@
 
   static base::FilePath GetInstalledPath(const base::FilePath& base);
 
-  DISALLOW_COPY_AND_ASSIGN(SSLErrorAssistantComponentInstallerTraits);
+  DISALLOW_COPY_AND_ASSIGN(SSLErrorAssistantComponentInstallerPolicy);
 };
 
 void RegisterSSLErrorAssistantComponent(ComponentUpdateService* cus,
diff --git a/chrome/browser/component_updater/sth_set_component_installer.cc b/chrome/browser/component_updater/sth_set_component_installer.cc
index 0f678dd..dd387df 100644
--- a/chrome/browser/component_updater/sth_set_component_installer.cc
+++ b/chrome/browser/component_updater/sth_set_component_installer.cc
@@ -50,69 +50,69 @@
 
 const char kSTHSetFetcherManifestName[] = "Signed Tree Heads";
 
-STHSetComponentInstallerTraits::STHSetComponentInstallerTraits(
+STHSetComponentInstallerPolicy::STHSetComponentInstallerPolicy(
     net::ct::STHObserver* sth_observer)
     : sth_observer_(sth_observer), weak_ptr_factory_(this) {}
 
-STHSetComponentInstallerTraits::~STHSetComponentInstallerTraits() {}
+STHSetComponentInstallerPolicy::~STHSetComponentInstallerPolicy() {}
 
-bool STHSetComponentInstallerTraits::
+bool STHSetComponentInstallerPolicy::
     SupportsGroupPolicyEnabledComponentUpdates() const {
   return false;
 }
 
 // Public data is delivered via this component, no need for encryption.
-bool STHSetComponentInstallerTraits::RequiresNetworkEncryption() const {
+bool STHSetComponentInstallerPolicy::RequiresNetworkEncryption() const {
   return false;
 }
 
 update_client::CrxInstaller::Result
-STHSetComponentInstallerTraits::OnCustomInstall(
+STHSetComponentInstallerPolicy::OnCustomInstall(
     const base::DictionaryValue& manifest,
     const base::FilePath& install_dir) {
   return update_client::CrxInstaller::Result(0);  // Nothing custom here.
 }
 
-void STHSetComponentInstallerTraits::ComponentReady(
+void STHSetComponentInstallerPolicy::ComponentReady(
     const base::Version& version,
     const base::FilePath& install_dir,
     std::unique_ptr<base::DictionaryValue> manifest) {
   base::PostTaskWithTraits(
       FROM_HERE, {base::TaskPriority::BACKGROUND, base::MayBlock()},
-      base::BindOnce(&STHSetComponentInstallerTraits::LoadSTHsFromDisk,
+      base::BindOnce(&STHSetComponentInstallerPolicy::LoadSTHsFromDisk,
                      weak_ptr_factory_.GetWeakPtr(),
                      GetInstalledPath(install_dir), version));
 }
 
 // Called during startup and installation before ComponentReady().
-bool STHSetComponentInstallerTraits::VerifyInstallation(
+bool STHSetComponentInstallerPolicy::VerifyInstallation(
     const base::DictionaryValue& manifest,
     const base::FilePath& install_dir) const {
   return base::PathExists(GetInstalledPath(install_dir));
 }
 
-base::FilePath STHSetComponentInstallerTraits::GetRelativeInstallDir() const {
+base::FilePath STHSetComponentInstallerPolicy::GetRelativeInstallDir() const {
   return base::FilePath(FILE_PATH_LITERAL("CertificateTransparency"));
 }
 
-void STHSetComponentInstallerTraits::GetHash(std::vector<uint8_t>* hash) const {
+void STHSetComponentInstallerPolicy::GetHash(std::vector<uint8_t>* hash) const {
   hash->assign(std::begin(kPublicKeySHA256), std::end(kPublicKeySHA256));
 }
 
-std::string STHSetComponentInstallerTraits::GetName() const {
+std::string STHSetComponentInstallerPolicy::GetName() const {
   return kSTHSetFetcherManifestName;
 }
 
 update_client::InstallerAttributes
-STHSetComponentInstallerTraits::GetInstallerAttributes() const {
+STHSetComponentInstallerPolicy::GetInstallerAttributes() const {
   return update_client::InstallerAttributes();
 }
 
-std::vector<std::string> STHSetComponentInstallerTraits::GetMimeTypes() const {
+std::vector<std::string> STHSetComponentInstallerPolicy::GetMimeTypes() const {
   return std::vector<std::string>();
 }
 
-void STHSetComponentInstallerTraits::LoadSTHsFromDisk(
+void STHSetComponentInstallerPolicy::LoadSTHsFromDisk(
     const base::FilePath& sths_path,
     const base::Version& version) {
   if (sths_path.empty())
@@ -165,7 +165,7 @@
   }
 }
 
-void STHSetComponentInstallerTraits::OnJsonParseSuccess(
+void STHSetComponentInstallerPolicy::OnJsonParseSuccess(
     const std::string& log_id,
     std::unique_ptr<base::Value> parsed_json) {
   net::ct::SignedTreeHead signed_tree_head;
@@ -185,7 +185,7 @@
                          base::Unretained(sth_observer_), signed_tree_head));
 }
 
-void STHSetComponentInstallerTraits::OnJsonParseError(
+void STHSetComponentInstallerPolicy::OnJsonParseError(
     const std::string& log_id,
     const std::string& error) {
   DVLOG(1) << "STH loading failed: " << error
@@ -201,11 +201,10 @@
   // The global STHDistributor should have been created by this point.
   DCHECK(distributor);
 
-  std::unique_ptr<ComponentInstallerTraits> traits(
-      new STHSetComponentInstallerTraits(distributor));
+  std::unique_ptr<ComponentInstallerPolicy> policy(
+      new STHSetComponentInstallerPolicy(distributor));
   // |cus| will take ownership of |installer| during installer->Register(cus).
-  DefaultComponentInstaller* installer =
-      new DefaultComponentInstaller(std::move(traits));
+  ComponentInstaller* installer = new ComponentInstaller(std::move(policy));
   installer->Register(cus, base::Closure());
 }
 
diff --git a/chrome/browser/component_updater/sth_set_component_installer.h b/chrome/browser/component_updater/sth_set_component_installer.h
index 0afadb4..6efd75a 100644
--- a/chrome/browser/component_updater/sth_set_component_installer.h
+++ b/chrome/browser/component_updater/sth_set_component_installer.h
@@ -13,7 +13,7 @@
 
 #include "base/gtest_prod_util.h"
 #include "base/memory/weak_ptr.h"
-#include "components/component_updater/default_component_installer.h"
+#include "components/component_updater/component_installer.h"
 
 namespace base {
 class FilePath;
@@ -38,16 +38,16 @@
 //
 // Notifications of each of the new STHs are sent to the net::ct::STHObserver,
 // so that it can take appropriate steps, including possible persistence.
-class STHSetComponentInstallerTraits : public ComponentInstallerTraits {
+class STHSetComponentInstallerPolicy : public ComponentInstallerPolicy {
  public:
   // The |sth_distributor| will be notified each time a new STH is observed.
-  explicit STHSetComponentInstallerTraits(net::ct::STHObserver* sth_observer);
-  ~STHSetComponentInstallerTraits() override;
+  explicit STHSetComponentInstallerPolicy(net::ct::STHObserver* sth_observer);
+  ~STHSetComponentInstallerPolicy() override;
 
  private:
   friend class STHSetComponentInstallerTest;
 
-  // ComponentInstallerTraits implementation.
+  // ComponentInstallerPolicy implementation.
   bool SupportsGroupPolicyEnabledComponentUpdates() const override;
   bool RequiresNetworkEncryption() const override;
   update_client::CrxInstaller::Result OnCustomInstall(
@@ -80,9 +80,9 @@
   // this class does. Typically the observer provided will be a global.
   net::ct::STHObserver* sth_observer_;
 
-  base::WeakPtrFactory<STHSetComponentInstallerTraits> weak_ptr_factory_;
+  base::WeakPtrFactory<STHSetComponentInstallerPolicy> weak_ptr_factory_;
 
-  DISALLOW_COPY_AND_ASSIGN(STHSetComponentInstallerTraits);
+  DISALLOW_COPY_AND_ASSIGN(STHSetComponentInstallerPolicy);
 };
 
 void RegisterSTHSetComponent(ComponentUpdateService* cus,
diff --git a/chrome/browser/component_updater/sth_set_component_installer_unittest.cc b/chrome/browser/component_updater/sth_set_component_installer_unittest.cc
index 4ab1c10..5af13717 100644
--- a/chrome/browser/component_updater/sth_set_component_installer_unittest.cc
+++ b/chrome/browser/component_updater/sth_set_component_installer_unittest.cc
@@ -45,7 +45,7 @@
     ASSERT_TRUE(temp_dir_.CreateUniqueTempDir());
 
     observer_.reset(new StoringSTHObserver());
-    traits_.reset(new STHSetComponentInstallerTraits(observer_.get()));
+    policy_.reset(new STHSetComponentInstallerPolicy(observer_.get()));
   }
 
   void WriteSTHToFile(const std::string& sth_json,
@@ -63,16 +63,16 @@
 
   void CreateSTHsDir(const base::DictionaryValue& manifest,
                      const base::FilePath& sths_dir) {
-    ASSERT_FALSE(traits_->VerifyInstallation(manifest, temp_dir_.GetPath()));
+    ASSERT_FALSE(policy_->VerifyInstallation(manifest, temp_dir_.GetPath()));
     ASSERT_TRUE(base::CreateDirectory(sths_dir));
   }
 
   void LoadSTHs(const base::DictionaryValue& manifest,
                 const base::FilePath& sths_dir) {
-    ASSERT_TRUE(traits_->VerifyInstallation(manifest, temp_dir_.GetPath()));
+    ASSERT_TRUE(policy_->VerifyInstallation(manifest, temp_dir_.GetPath()));
 
     const base::Version v("1.0");
-    traits_->LoadSTHsFromDisk(sths_dir, v);
+    policy_->LoadSTHsFromDisk(sths_dir, v);
     // Drain the RunLoop created by the TestBrowserThreadBundle
     base::RunLoop().RunUntilIdle();
   }
@@ -82,9 +82,9 @@
 
   base::ScopedTempDir temp_dir_;
   std::unique_ptr<StoringSTHObserver> observer_;
-  // |traits_| should be destroyed before the |observer_| as it holds a pointer
+  // |policy_| should be destroyed before the |observer_| as it holds a pointer
   // to it.
-  std::unique_ptr<STHSetComponentInstallerTraits> traits_;
+  std::unique_ptr<STHSetComponentInstallerPolicy> policy_;
   safe_json::TestingJsonParser::ScopedFactoryOverride factory_override_;
 
  private:
diff --git a/chrome/browser/component_updater/subresource_filter_component_installer.cc b/chrome/browser/component_updater/subresource_filter_component_installer.cc
index 791277b..f200ad7f 100644
--- a/chrome/browser/component_updater/subresource_filter_component_installer.cc
+++ b/chrome/browser/component_updater/subresource_filter_component_installer.cc
@@ -32,37 +32,37 @@
 
 // static
 const char
-    SubresourceFilterComponentInstallerTraits::kManifestRulesetFormatKey[] =
+    SubresourceFilterComponentInstallerPolicy::kManifestRulesetFormatKey[] =
         "ruleset_format";
 
 // static
-const int SubresourceFilterComponentInstallerTraits::kCurrentRulesetFormat = 1;
+const int SubresourceFilterComponentInstallerPolicy::kCurrentRulesetFormat = 1;
 
-SubresourceFilterComponentInstallerTraits::
-    SubresourceFilterComponentInstallerTraits() {}
+SubresourceFilterComponentInstallerPolicy::
+    SubresourceFilterComponentInstallerPolicy() {}
 
-SubresourceFilterComponentInstallerTraits::
-    ~SubresourceFilterComponentInstallerTraits() {}
+SubresourceFilterComponentInstallerPolicy::
+    ~SubresourceFilterComponentInstallerPolicy() {}
 
-bool SubresourceFilterComponentInstallerTraits::
+bool SubresourceFilterComponentInstallerPolicy::
     SupportsGroupPolicyEnabledComponentUpdates() const {
   return false;
 }
 
 // Public data is delivered via this component, no need for encryption.
-bool SubresourceFilterComponentInstallerTraits::RequiresNetworkEncryption()
+bool SubresourceFilterComponentInstallerPolicy::RequiresNetworkEncryption()
     const {
   return false;
 }
 
 update_client::CrxInstaller::Result
-SubresourceFilterComponentInstallerTraits::OnCustomInstall(
+SubresourceFilterComponentInstallerPolicy::OnCustomInstall(
     const base::DictionaryValue& manifest,
     const base::FilePath& install_dir) {
   return update_client::CrxInstaller::Result(0);  // Nothing custom here.
 }
 
-void SubresourceFilterComponentInstallerTraits::ComponentReady(
+void SubresourceFilterComponentInstallerPolicy::ComponentReady(
     const base::Version& version,
     const base::FilePath& install_dir,
     std::unique_ptr<base::DictionaryValue> manifest) {
@@ -89,29 +89,29 @@
 }
 
 // Called during startup and installation before ComponentReady().
-bool SubresourceFilterComponentInstallerTraits::VerifyInstallation(
+bool SubresourceFilterComponentInstallerPolicy::VerifyInstallation(
     const base::DictionaryValue& manifest,
     const base::FilePath& install_dir) const {
   return base::PathExists(install_dir);
 }
 
 base::FilePath
-SubresourceFilterComponentInstallerTraits::GetRelativeInstallDir() const {
+SubresourceFilterComponentInstallerPolicy::GetRelativeInstallDir() const {
   return base::FilePath(subresource_filter::kTopLevelDirectoryName)
       .Append(subresource_filter::kUnindexedRulesetBaseDirectoryName);
 }
 
-void SubresourceFilterComponentInstallerTraits::GetHash(
+void SubresourceFilterComponentInstallerPolicy::GetHash(
     std::vector<uint8_t>* hash) const {
   hash->assign(std::begin(kPublicKeySHA256), std::end(kPublicKeySHA256));
 }
 
-std::string SubresourceFilterComponentInstallerTraits::GetName() const {
+std::string SubresourceFilterComponentInstallerPolicy::GetName() const {
   return kSubresourceFilterSetFetcherManifestName;
 }
 
 // static
-std::string SubresourceFilterComponentInstallerTraits::GetInstallerTag() {
+std::string SubresourceFilterComponentInstallerPolicy::GetInstallerTag() {
   const std::string ruleset_flavor =
       subresource_filter::GetEnabledConfigurations()
           ->lexicographically_greatest_ruleset_flavor()
@@ -133,7 +133,7 @@
 }
 
 update_client::InstallerAttributes
-SubresourceFilterComponentInstallerTraits::GetInstallerAttributes() const {
+SubresourceFilterComponentInstallerPolicy::GetInstallerAttributes() const {
   update_client::InstallerAttributes attributes;
   std::string installer_tag = GetInstallerTag();
   if (!installer_tag.empty())
@@ -142,7 +142,7 @@
 }
 
 std::vector<std::string>
-SubresourceFilterComponentInstallerTraits::GetMimeTypes() const {
+SubresourceFilterComponentInstallerPolicy::GetMimeTypes() const {
   return std::vector<std::string>();
 }
 
@@ -151,11 +151,10 @@
           subresource_filter::kSafeBrowsingSubresourceFilter)) {
     return;
   }
-  std::unique_ptr<ComponentInstallerTraits> traits(
-      new SubresourceFilterComponentInstallerTraits());
+  std::unique_ptr<ComponentInstallerPolicy> policy(
+      new SubresourceFilterComponentInstallerPolicy());
   // |cus| will take ownership of |installer| during installer->Register(cus).
-  DefaultComponentInstaller* installer =
-      new DefaultComponentInstaller(std::move(traits));
+  ComponentInstaller* installer = new ComponentInstaller(std::move(policy));
   installer->Register(cus, base::Closure());
 }
 
diff --git a/chrome/browser/component_updater/subresource_filter_component_installer.h b/chrome/browser/component_updater/subresource_filter_component_installer.h
index a20506b..d2a0ae0 100644
--- a/chrome/browser/component_updater/subresource_filter_component_installer.h
+++ b/chrome/browser/component_updater/subresource_filter_component_installer.h
@@ -10,7 +10,7 @@
 #include <vector>
 
 #include "base/gtest_prod_util.h"
-#include "components/component_updater/default_component_installer.h"
+#include "components/component_updater/component_installer.h"
 
 namespace base {
 class FilePath;
@@ -21,14 +21,14 @@
 class ComponentUpdateService;
 
 // Component for receiving Safe Browsing Subresource filtering rules.
-class SubresourceFilterComponentInstallerTraits
-    : public ComponentInstallerTraits {
+class SubresourceFilterComponentInstallerPolicy
+    : public ComponentInstallerPolicy {
  public:
   static const char kManifestRulesetFormatKey[];
   static const int kCurrentRulesetFormat;
 
-  SubresourceFilterComponentInstallerTraits();
-  ~SubresourceFilterComponentInstallerTraits() override;
+  SubresourceFilterComponentInstallerPolicy();
+  ~SubresourceFilterComponentInstallerPolicy() override;
 
  private:
   friend class SubresourceFilterComponentInstallerTest;
@@ -37,7 +37,7 @@
 
   static std::string GetInstallerTag();
 
-  // ComponentInstallerTraits implementation.
+  // ComponentInstallerPolicy implementation.
   bool SupportsGroupPolicyEnabledComponentUpdates() const override;
   bool RequiresNetworkEncryption() const override;
   update_client::CrxInstaller::Result OnCustomInstall(
@@ -54,7 +54,7 @@
   update_client::InstallerAttributes GetInstallerAttributes() const override;
   std::vector<std::string> GetMimeTypes() const override;
 
-  DISALLOW_COPY_AND_ASSIGN(SubresourceFilterComponentInstallerTraits);
+  DISALLOW_COPY_AND_ASSIGN(SubresourceFilterComponentInstallerPolicy);
 };
 
 void RegisterSubresourceFilterComponent(ComponentUpdateService* cus);
diff --git a/chrome/browser/component_updater/subresource_filter_component_installer_unittest.cc b/chrome/browser/component_updater/subresource_filter_component_installer_unittest.cc
index e704d70..5270e0d3 100644
--- a/chrome/browser/component_updater/subresource_filter_component_installer_unittest.cc
+++ b/chrome/browser/component_updater/subresource_filter_component_installer_unittest.cc
@@ -117,7 +117,7 @@
 
     TestingBrowserProcess::GetGlobal()->SetRulesetService(
         std::move(content_service));
-    traits_ = base::MakeUnique<SubresourceFilterComponentInstallerTraits>();
+    policy_ = base::MakeUnique<SubresourceFilterComponentInstallerPolicy>();
   }
 
   void TearDown() override {
@@ -156,18 +156,18 @@
   void LoadSubresourceFilterRuleset(int ruleset_format) {
     std::unique_ptr<base::DictionaryValue> manifest(new base::DictionaryValue);
     manifest->SetInteger(
-        SubresourceFilterComponentInstallerTraits::kManifestRulesetFormatKey,
+        SubresourceFilterComponentInstallerPolicy::kManifestRulesetFormatKey,
         ruleset_format);
     ASSERT_TRUE(
-        traits_->VerifyInstallation(*manifest, component_install_dir()));
+        policy_->VerifyInstallation(*manifest, component_install_dir()));
     const base::Version expected_version(kTestRulesetVersion);
-    traits_->ComponentReady(expected_version, component_install_dir(),
+    policy_->ComponentReady(expected_version, component_install_dir(),
                             std::move(manifest));
     base::RunLoop().RunUntilIdle();
   }
 
   update_client::InstallerAttributes GetInstallerAttributes() {
-    return traits_->GetInstallerAttributes();
+    return policy_->GetInstallerAttributes();
   }
 
  protected:
@@ -182,7 +182,7 @@
   base::ScopedTempDir component_install_dir_;
   base::ScopedTempDir ruleset_service_dir_;
 
-  std::unique_ptr<SubresourceFilterComponentInstallerTraits> traits_;
+  std::unique_ptr<SubresourceFilterComponentInstallerPolicy> policy_;
   TestingPrefServiceSimple pref_service_;
 
   TestRulesetService* test_ruleset_service_ = nullptr;
@@ -219,7 +219,7 @@
   ASSERT_NO_FATAL_FAILURE(
       CreateTestSubresourceFilterRuleset(std::string(), nullptr));
   ASSERT_NO_FATAL_FAILURE(LoadSubresourceFilterRuleset(
-      SubresourceFilterComponentInstallerTraits::kCurrentRulesetFormat));
+      SubresourceFilterComponentInstallerPolicy::kCurrentRulesetFormat));
   EXPECT_EQ(kTestRulesetVersion, service()->content_version());
   std::string actual_ruleset_contents;
   ASSERT_TRUE(base::ReadFileToString(service()->ruleset_path(),
@@ -234,7 +234,7 @@
   ASSERT_NO_FATAL_FAILURE(
       CreateTestSubresourceFilterRuleset(expected_ruleset_contents, nullptr));
   ASSERT_NO_FATAL_FAILURE(LoadSubresourceFilterRuleset(
-      SubresourceFilterComponentInstallerTraits::kCurrentRulesetFormat + 1));
+      SubresourceFilterComponentInstallerPolicy::kCurrentRulesetFormat + 1));
   EXPECT_EQ(std::string(), service()->content_version());
   EXPECT_TRUE(service()->ruleset_path().empty());
   EXPECT_TRUE(service()->license_path().empty());
@@ -247,7 +247,7 @@
   ASSERT_NO_FATAL_FAILURE(CreateTestSubresourceFilterRuleset(
       expected_ruleset_contents, &expected_license_contents));
   ASSERT_NO_FATAL_FAILURE(LoadSubresourceFilterRuleset(
-      SubresourceFilterComponentInstallerTraits::kCurrentRulesetFormat));
+      SubresourceFilterComponentInstallerPolicy::kCurrentRulesetFormat));
   EXPECT_EQ(kTestRulesetVersion, service()->content_version());
   std::string actual_ruleset_contents;
   std::string actual_license_contents;
@@ -293,7 +293,7 @@
         scoped_configuration(std::move(configs));
 
     EXPECT_EQ(test_case.expected_installer_tag_selected,
-              SubresourceFilterComponentInstallerTraits::GetInstallerTag());
+              SubresourceFilterComponentInstallerPolicy::GetInstallerTag());
   }
 }
 
diff --git a/chrome/browser/component_updater/supervised_user_whitelist_installer.cc b/chrome/browser/component_updater/supervised_user_whitelist_installer.cc
index 0ba8930..02f3d932 100644
--- a/chrome/browser/component_updater/supervised_user_whitelist_installer.cc
+++ b/chrome/browser/component_updater/supervised_user_whitelist_installer.cc
@@ -34,9 +34,9 @@
 #include "chrome/browser/supervised_user/supervised_user_whitelist_service.h"
 #include "chrome/common/chrome_paths.h"
 #include "chrome/common/pref_names.h"
+#include "components/component_updater/component_installer.h"
 #include "components/component_updater/component_updater_paths.h"
 #include "components/component_updater/component_updater_service.h"
-#include "components/component_updater/default_component_installer.h"
 #include "components/crx_file/id_util.h"
 #include "components/prefs/pref_registry_simple.h"
 #include "components/prefs/pref_service.h"
@@ -238,23 +238,23 @@
   }
 }
 
-class SupervisedUserWhitelistComponentInstallerTraits
-    : public ComponentInstallerTraits {
+class SupervisedUserWhitelistComponentInstallerPolicy
+    : public ComponentInstallerPolicy {
  public:
   using RawWhitelistReadyCallback =
       base::Callback<void(const base::string16&, /* title */
                           const base::FilePath&, /* icon_path */
                           const base::FilePath& /* whitelist_path */)>;
 
-  SupervisedUserWhitelistComponentInstallerTraits(
+  SupervisedUserWhitelistComponentInstallerPolicy(
       const std::string& crx_id,
       const std::string& name,
       const RawWhitelistReadyCallback& callback)
       : crx_id_(crx_id), name_(name), callback_(callback) {}
-  ~SupervisedUserWhitelistComponentInstallerTraits() override {}
+  ~SupervisedUserWhitelistComponentInstallerPolicy() override {}
 
  private:
-  // ComponentInstallerTraits overrides:
+  // ComponentInstallerPolicy overrides:
   bool VerifyInstallation(const base::DictionaryValue& manifest,
                           const base::FilePath& install_dir) const override;
   bool SupportsGroupPolicyEnabledComponentUpdates() const override;
@@ -275,10 +275,10 @@
   std::string name_;
   RawWhitelistReadyCallback callback_;
 
-  DISALLOW_COPY_AND_ASSIGN(SupervisedUserWhitelistComponentInstallerTraits);
+  DISALLOW_COPY_AND_ASSIGN(SupervisedUserWhitelistComponentInstallerPolicy);
 };
 
-bool SupervisedUserWhitelistComponentInstallerTraits::VerifyInstallation(
+bool SupervisedUserWhitelistComponentInstallerPolicy::VerifyInstallation(
     const base::DictionaryValue& manifest,
     const base::FilePath& install_dir) const {
   // Check whether the whitelist exists at the path specified by the manifest.
@@ -286,18 +286,18 @@
   return base::PathExists(GetRawWhitelistPath(manifest, install_dir));
 }
 
-bool SupervisedUserWhitelistComponentInstallerTraits::
+bool SupervisedUserWhitelistComponentInstallerPolicy::
     SupportsGroupPolicyEnabledComponentUpdates() const {
   return false;
 }
 
-bool SupervisedUserWhitelistComponentInstallerTraits::
+bool SupervisedUserWhitelistComponentInstallerPolicy::
     RequiresNetworkEncryption() const {
   return true;
 }
 
 update_client::CrxInstaller::Result
-SupervisedUserWhitelistComponentInstallerTraits::OnCustomInstall(
+SupervisedUserWhitelistComponentInstallerPolicy::OnCustomInstall(
     const base::DictionaryValue& manifest,
     const base::FilePath& install_dir) {
   // Delete the existing sanitized whitelist.
@@ -308,7 +308,7 @@
               : update_client::InstallError::GENERIC_ERROR);
 }
 
-void SupervisedUserWhitelistComponentInstallerTraits::ComponentReady(
+void SupervisedUserWhitelistComponentInstallerPolicy::ComponentReady(
     const base::Version& version,
     const base::FilePath& install_dir,
     std::unique_ptr<base::DictionaryValue> manifest) {
@@ -321,28 +321,28 @@
 }
 
 base::FilePath
-SupervisedUserWhitelistComponentInstallerTraits::GetRelativeInstallDir() const {
+SupervisedUserWhitelistComponentInstallerPolicy::GetRelativeInstallDir() const {
   return base::FilePath(component_updater::kSupervisedUserWhitelistDirName)
       .AppendASCII(crx_id_);
 }
 
-void SupervisedUserWhitelistComponentInstallerTraits::GetHash(
+void SupervisedUserWhitelistComponentInstallerPolicy::GetHash(
     std::vector<uint8_t>* hash) const {
   *hash = SupervisedUserWhitelistInstaller::GetHashFromCrxId(crx_id_);
 }
 
-std::string SupervisedUserWhitelistComponentInstallerTraits::GetName() const {
+std::string SupervisedUserWhitelistComponentInstallerPolicy::GetName() const {
   return name_;
 }
 
 update_client::InstallerAttributes
-SupervisedUserWhitelistComponentInstallerTraits::GetInstallerAttributes()
+SupervisedUserWhitelistComponentInstallerPolicy::GetInstallerAttributes()
     const {
   return update_client::InstallerAttributes();
 }
 
 std::vector<std::string>
-SupervisedUserWhitelistComponentInstallerTraits::GetMimeTypes() const {
+SupervisedUserWhitelistComponentInstallerPolicy::GetMimeTypes() const {
   return std::vector<std::string>();
 }
 
@@ -418,13 +418,13 @@
     const std::string& crx_id,
     const std::string& name,
     const base::Closure& callback) {
-  std::unique_ptr<ComponentInstallerTraits> traits(
-      new SupervisedUserWhitelistComponentInstallerTraits(
+  std::unique_ptr<ComponentInstallerPolicy> policy(
+      new SupervisedUserWhitelistComponentInstallerPolicy(
           crx_id, name,
           base::Bind(&SupervisedUserWhitelistInstallerImpl::OnRawWhitelistReady,
                      weak_ptr_factory_.GetWeakPtr(), crx_id)));
-  scoped_refptr<DefaultComponentInstaller> installer(
-      new DefaultComponentInstaller(std::move(traits)));
+  scoped_refptr<ComponentInstaller> installer(
+      new ComponentInstaller(std::move(policy)));
   installer->Register(cus_, callback);
 }
 
diff --git a/chrome/browser/component_updater/sw_reporter_installer_win.cc b/chrome/browser/component_updater/sw_reporter_installer_win.cc
index fd29cda..af786ea7 100644
--- a/chrome/browser/component_updater/sw_reporter_installer_win.cc
+++ b/chrome/browser/component_updater/sw_reporter_installer_win.cc
@@ -123,7 +123,7 @@
 
 // Once the Software Reporter is downloaded, schedules it to run sometime after
 // the current browser startup is complete. (This is the default
-// |reporter_runner| function passed to the |SwReporterInstallerTraits|
+// |reporter_runner| function passed to the |SwReporterInstallerPolicy|
 // constructor in |RegisterSwReporterComponent| below.)
 void RunSwReportersAfterStartup(
     const safe_browsing::SwReporterQueue& invocations,
@@ -285,36 +285,36 @@
 
 }  // namespace
 
-SwReporterInstallerTraits::SwReporterInstallerTraits(
+SwReporterInstallerPolicy::SwReporterInstallerPolicy(
     const SwReporterRunner& reporter_runner,
     bool is_experimental_engine_supported)
     : reporter_runner_(reporter_runner),
       is_experimental_engine_supported_(is_experimental_engine_supported) {}
 
-SwReporterInstallerTraits::~SwReporterInstallerTraits() {}
+SwReporterInstallerPolicy::~SwReporterInstallerPolicy() {}
 
-bool SwReporterInstallerTraits::VerifyInstallation(
+bool SwReporterInstallerPolicy::VerifyInstallation(
     const base::DictionaryValue& manifest,
     const base::FilePath& dir) const {
   return base::PathExists(dir.Append(kSwReporterExeName));
 }
 
-bool SwReporterInstallerTraits::SupportsGroupPolicyEnabledComponentUpdates()
+bool SwReporterInstallerPolicy::SupportsGroupPolicyEnabledComponentUpdates()
     const {
   return true;
 }
 
-bool SwReporterInstallerTraits::RequiresNetworkEncryption() const {
+bool SwReporterInstallerPolicy::RequiresNetworkEncryption() const {
   return false;
 }
 
-update_client::CrxInstaller::Result SwReporterInstallerTraits::OnCustomInstall(
+update_client::CrxInstaller::Result SwReporterInstallerPolicy::OnCustomInstall(
     const base::DictionaryValue& manifest,
     const base::FilePath& install_dir) {
   return update_client::CrxInstaller::Result(0);
 }
 
-void SwReporterInstallerTraits::ComponentReady(
+void SwReporterInstallerPolicy::ComponentReady(
     const base::Version& version,
     const base::FilePath& install_dir,
     std::unique_ptr<base::DictionaryValue> manifest) {
@@ -339,21 +339,21 @@
   }
 }
 
-base::FilePath SwReporterInstallerTraits::GetRelativeInstallDir() const {
+base::FilePath SwReporterInstallerPolicy::GetRelativeInstallDir() const {
   return base::FilePath(FILE_PATH_LITERAL("SwReporter"));
 }
 
-void SwReporterInstallerTraits::GetHash(std::vector<uint8_t>* hash) const {
+void SwReporterInstallerPolicy::GetHash(std::vector<uint8_t>* hash) const {
   DCHECK(hash);
   hash->assign(kSha256Hash, kSha256Hash + sizeof(kSha256Hash));
 }
 
-std::string SwReporterInstallerTraits::GetName() const {
+std::string SwReporterInstallerPolicy::GetName() const {
   return "Software Reporter Tool";
 }
 
 update_client::InstallerAttributes
-SwReporterInstallerTraits::GetInstallerAttributes() const {
+SwReporterInstallerPolicy::GetInstallerAttributes() const {
   update_client::InstallerAttributes attributes;
   if (IsExperimentalEngineEnabled()) {
     // Pass the "tag" parameter to the installer; it will be used to choose
@@ -363,7 +363,7 @@
         kExperimentalEngineFeature, kTagParam);
 
     // If the tag is not a valid attribute (see the regexp in
-    // ComponentInstallerTraits::InstallerAttributes), set it to a valid but
+    // ComponentInstallerPolicy::InstallerAttributes), set it to a valid but
     // unrecognized value so that nothing will be downloaded.
     constexpr size_t kMaxAttributeLength = 256;
     constexpr char kExtraAttributeChars[] = "-.,;+_=";
@@ -378,11 +378,11 @@
   return attributes;
 }
 
-std::vector<std::string> SwReporterInstallerTraits::GetMimeTypes() const {
+std::vector<std::string> SwReporterInstallerPolicy::GetMimeTypes() const {
   return std::vector<std::string>();
 }
 
-bool SwReporterInstallerTraits::IsExperimentalEngineEnabled() const {
+bool SwReporterInstallerPolicy::IsExperimentalEngineEnabled() const {
   return is_experimental_engine_supported_ &&
          base::FeatureList::IsEnabled(kExperimentalEngineFeature);
 }
@@ -475,12 +475,11 @@
       is_x86_architecture;
 
   // Install the component.
-  std::unique_ptr<ComponentInstallerTraits> traits(
-      new SwReporterInstallerTraits(base::Bind(&RunSwReportersAfterStartup),
+  std::unique_ptr<ComponentInstallerPolicy> policy(
+      new SwReporterInstallerPolicy(base::Bind(&RunSwReportersAfterStartup),
                                     is_experimental_engine_supported));
   // |cus| will take ownership of |installer| during installer->Register(cus).
-  DefaultComponentInstaller* installer =
-      new DefaultComponentInstaller(std::move(traits));
+  ComponentInstaller* installer = new ComponentInstaller(std::move(policy));
   installer->Register(cus, base::Closure());
 }
 
diff --git a/chrome/browser/component_updater/sw_reporter_installer_win.h b/chrome/browser/component_updater/sw_reporter_installer_win.h
index 83a6286..c4593b3 100644
--- a/chrome/browser/component_updater/sw_reporter_installer_win.h
+++ b/chrome/browser/component_updater/sw_reporter_installer_win.h
@@ -13,7 +13,7 @@
 #include "base/callback.h"
 #include "base/macros.h"
 #include "chrome/browser/safe_browsing/chrome_cleaner/reporter_runner_win.h"
-#include "components/component_updater/default_component_installer.h"
+#include "components/component_updater/component_installer.h"
 
 class PrefRegistrySimple;
 
@@ -46,13 +46,13 @@
     base::Callback<void(const safe_browsing::SwReporterQueue& invocations,
                         const base::Version& version)>;
 
-class SwReporterInstallerTraits : public ComponentInstallerTraits {
+class SwReporterInstallerPolicy : public ComponentInstallerPolicy {
  public:
-  SwReporterInstallerTraits(const SwReporterRunner& reporter_runner,
+  SwReporterInstallerPolicy(const SwReporterRunner& reporter_runner,
                             bool is_experimental_engine_supported);
-  ~SwReporterInstallerTraits() override;
+  ~SwReporterInstallerPolicy() override;
 
-  // ComponentInstallerTraits implementation.
+  // ComponentInstallerPolicy implementation.
   bool VerifyInstallation(const base::DictionaryValue& manifest,
                           const base::FilePath& dir) const override;
   bool SupportsGroupPolicyEnabledComponentUpdates() const override;
@@ -79,7 +79,7 @@
   SwReporterRunner reporter_runner_;
   const bool is_experimental_engine_supported_;
 
-  DISALLOW_COPY_AND_ASSIGN(SwReporterInstallerTraits);
+  DISALLOW_COPY_AND_ASSIGN(SwReporterInstallerPolicy);
 };
 
 // Call once during startup to make the component update service aware of the
diff --git a/chrome/browser/component_updater/sw_reporter_installer_win_unittest.cc b/chrome/browser/component_updater/sw_reporter_installer_win_unittest.cc
index 724da6c..d0bc4402 100644
--- a/chrome/browser/component_updater/sw_reporter_installer_win_unittest.cc
+++ b/chrome/browser/component_updater/sw_reporter_installer_win_unittest.cc
@@ -67,9 +67,9 @@
     return path.Append(L"software_reporter_tool.exe");
   }
 
-  void ExpectEmptyAttributes(const SwReporterInstallerTraits& traits) const {
+  void ExpectEmptyAttributes(const SwReporterInstallerPolicy& policy) const {
     update_client::InstallerAttributes attributes =
-        traits.GetInstallerAttributes();
+        policy.GetInstallerAttributes();
     EXPECT_TRUE(attributes.empty());
   }
 
@@ -149,10 +149,10 @@
         std::set<std::string>{kFeatureAndTrialName});  // associated_features
   }
 
-  void ExpectAttributesWithTag(const SwReporterInstallerTraits& traits,
+  void ExpectAttributesWithTag(const SwReporterInstallerPolicy& policy,
                                const std::string& tag) {
     update_client::InstallerAttributes attributes =
-        traits.GetInstallerAttributes();
+        policy.GetInstallerAttributes();
     EXPECT_EQ(1U, attributes.size());
     EXPECT_EQ(tag, attributes["tag"]);
   }
@@ -248,9 +248,9 @@
 };
 
 TEST_F(SwReporterInstallerTest, Default) {
-  SwReporterInstallerTraits traits(launched_callback_, false);
-  ExpectEmptyAttributes(traits);
-  traits.ComponentReady(default_version_, default_path_,
+  SwReporterInstallerPolicy policy(launched_callback_, false);
+  ExpectEmptyAttributes(policy);
+  policy.ComponentReady(default_version_, default_path_,
                         std::make_unique<base::DictionaryValue>());
   ExpectDefaultInvocation();
 }
@@ -258,9 +258,9 @@
 TEST_F(ExperimentalSwReporterInstallerTest, NoExperimentConfig) {
   // Even if the experiment is supported on this hardware, the user shouldn't
   // be enrolled unless enabled through variations.
-  SwReporterInstallerTraits traits(launched_callback_, true);
-  ExpectEmptyAttributes(traits);
-  traits.ComponentReady(default_version_, default_path_,
+  SwReporterInstallerPolicy policy(launched_callback_, true);
+  ExpectEmptyAttributes(policy);
+  policy.ComponentReady(default_version_, default_path_,
                         std::make_unique<base::DictionaryValue>());
   ExpectDefaultInvocation();
 }
@@ -268,51 +268,51 @@
 TEST_F(ExperimentalSwReporterInstallerTest, ExperimentUnsupported) {
   // Even if the experiment config is enabled in variations, the user shouldn't
   // be enrolled if the hardware doesn't support it.
-  SwReporterInstallerTraits traits(launched_callback_, false);
+  SwReporterInstallerPolicy policy(launched_callback_, false);
   CreateFeatureWithTag(kExperimentTag);
-  ExpectEmptyAttributes(traits);
-  traits.ComponentReady(default_version_, default_path_,
+  ExpectEmptyAttributes(policy);
+  policy.ComponentReady(default_version_, default_path_,
                         std::make_unique<base::DictionaryValue>());
   ExpectDefaultInvocation();
 }
 
 TEST_F(ExperimentalSwReporterInstallerTest, ExperimentMissingTag) {
-  SwReporterInstallerTraits traits(launched_callback_, true);
+  SwReporterInstallerPolicy policy(launched_callback_, true);
   CreateFeatureWithoutTag();
-  ExpectAttributesWithTag(traits, kMissingTag);
+  ExpectAttributesWithTag(policy, kMissingTag);
   histograms_.ExpectUniqueSample(kErrorHistogramName,
                                  SW_REPORTER_EXPERIMENT_ERROR_BAD_TAG, 1);
 }
 
 TEST_F(ExperimentalSwReporterInstallerTest, ExperimentInvalidTag) {
-  SwReporterInstallerTraits traits(launched_callback_, true);
+  SwReporterInstallerPolicy policy(launched_callback_, true);
   CreateFeatureWithTag("tag with invalid whitespace chars");
-  ExpectAttributesWithTag(traits, kMissingTag);
+  ExpectAttributesWithTag(policy, kMissingTag);
   histograms_.ExpectUniqueSample(kErrorHistogramName,
                                  SW_REPORTER_EXPERIMENT_ERROR_BAD_TAG, 1);
 }
 
 TEST_F(ExperimentalSwReporterInstallerTest, ExperimentTagTooLong) {
-  SwReporterInstallerTraits traits(launched_callback_, true);
+  SwReporterInstallerPolicy policy(launched_callback_, true);
   std::string tag_too_long(500, 'x');
   CreateFeatureWithTag(tag_too_long);
-  ExpectAttributesWithTag(traits, kMissingTag);
+  ExpectAttributesWithTag(policy, kMissingTag);
   histograms_.ExpectUniqueSample(kErrorHistogramName,
                                  SW_REPORTER_EXPERIMENT_ERROR_BAD_TAG, 1);
 }
 
 TEST_F(ExperimentalSwReporterInstallerTest, ExperimentEmptyTag) {
-  SwReporterInstallerTraits traits(launched_callback_, true);
+  SwReporterInstallerPolicy policy(launched_callback_, true);
   CreateFeatureWithTag("");
-  ExpectAttributesWithTag(traits, kMissingTag);
+  ExpectAttributesWithTag(policy, kMissingTag);
   histograms_.ExpectUniqueSample(kErrorHistogramName,
                                  SW_REPORTER_EXPERIMENT_ERROR_BAD_TAG, 1);
 }
 
 TEST_F(ExperimentalSwReporterInstallerTest, SingleInvocation) {
-  SwReporterInstallerTraits traits(launched_callback_, true);
+  SwReporterInstallerPolicy policy(launched_callback_, true);
   CreateFeatureWithTag(kExperimentTag);
-  ExpectAttributesWithTag(traits, kExperimentTag);
+  ExpectAttributesWithTag(policy, kExperimentTag);
 
   static constexpr char kTestManifest[] =
       "{\"launch_params\": ["
@@ -322,7 +322,7 @@
       "    \"prompt\": false"
       "  }"
       "]}";
-  traits.ComponentReady(
+  policy.ComponentReady(
       default_version_, default_path_,
       base::DictionaryValue::From(base::JSONReader::Read(kTestManifest)));
 
@@ -352,9 +352,9 @@
 }
 
 TEST_F(ExperimentalSwReporterInstallerTest, MultipleInvocations) {
-  SwReporterInstallerTraits traits(launched_callback_, true);
+  SwReporterInstallerPolicy policy(launched_callback_, true);
   CreateFeatureWithTag(kExperimentTag);
-  ExpectAttributesWithTag(traits, kExperimentTag);
+  ExpectAttributesWithTag(policy, kExperimentTag);
 
   static constexpr char kTestManifest[] =
       "{\"launch_params\": ["
@@ -382,7 +382,7 @@
       "  }"
 
       "]}";
-  traits.ComponentReady(
+  policy.ComponentReady(
       default_version_, default_path_,
       base::DictionaryValue::From(base::JSONReader::Read(kTestManifest)));
 
@@ -417,7 +417,7 @@
 }
 
 TEST_F(ExperimentalSwReporterInstallerTest, MissingSuffix) {
-  SwReporterInstallerTraits traits(launched_callback_, true);
+  SwReporterInstallerPolicy policy(launched_callback_, true);
   CreateFeatureWithTag(kExperimentTag);
 
   static constexpr char kTestManifest[] =
@@ -426,7 +426,7 @@
       "    \"arguments\": [\"random argument\"]"
       "  }"
       "]}";
-  traits.ComponentReady(
+  policy.ComponentReady(
       default_version_, default_path_,
       base::DictionaryValue::From(base::JSONReader::Read(kTestManifest)));
 
@@ -434,7 +434,7 @@
 }
 
 TEST_F(ExperimentalSwReporterInstallerTest, EmptySuffix) {
-  SwReporterInstallerTraits traits(launched_callback_, true);
+  SwReporterInstallerPolicy policy(launched_callback_, true);
   CreateFeatureWithTag(kExperimentTag);
 
   static constexpr char kTestManifest[] =
@@ -444,7 +444,7 @@
       "    \"arguments\": [\"random argument\"]"
       "  }"
       "]}";
-  traits.ComponentReady(
+  policy.ComponentReady(
       default_version_, default_path_,
       base::DictionaryValue::From(base::JSONReader::Read(kTestManifest)));
 
@@ -452,7 +452,7 @@
 }
 
 TEST_F(ExperimentalSwReporterInstallerTest, MissingSuffixAndArgs) {
-  SwReporterInstallerTraits traits(launched_callback_, true);
+  SwReporterInstallerPolicy policy(launched_callback_, true);
   CreateFeatureWithTag(kExperimentTag);
 
   static constexpr char kTestManifest[] =
@@ -460,7 +460,7 @@
       "  {"
       "  }"
       "]}";
-  traits.ComponentReady(
+  policy.ComponentReady(
       default_version_, default_path_,
       base::DictionaryValue::From(base::JSONReader::Read(kTestManifest)));
 
@@ -468,7 +468,7 @@
 }
 
 TEST_F(ExperimentalSwReporterInstallerTest, EmptySuffixAndArgs) {
-  SwReporterInstallerTraits traits(launched_callback_, true);
+  SwReporterInstallerPolicy policy(launched_callback_, true);
   CreateFeatureWithTag(kExperimentTag);
 
   static constexpr char kTestManifest[] =
@@ -478,7 +478,7 @@
       "    \"arguments\": []"
       "  }"
       "]}";
-  traits.ComponentReady(
+  policy.ComponentReady(
       default_version_, default_path_,
       base::DictionaryValue::From(base::JSONReader::Read(kTestManifest)));
 
@@ -486,7 +486,7 @@
 }
 
 TEST_F(ExperimentalSwReporterInstallerTest, EmptySuffixAndArgs2) {
-  SwReporterInstallerTraits traits(launched_callback_, true);
+  SwReporterInstallerPolicy policy(launched_callback_, true);
   CreateFeatureWithTag(kExperimentTag);
 
   static constexpr char kTestManifest[] =
@@ -496,7 +496,7 @@
       "    \"arguments\": [\"\"]"
       "  }"
       "]}";
-  traits.ComponentReady(
+  policy.ComponentReady(
       default_version_, default_path_,
       base::DictionaryValue::From(base::JSONReader::Read(kTestManifest)));
 
@@ -504,7 +504,7 @@
 }
 
 TEST_F(ExperimentalSwReporterInstallerTest, MissingArguments) {
-  SwReporterInstallerTraits traits(launched_callback_, true);
+  SwReporterInstallerPolicy policy(launched_callback_, true);
   CreateFeatureWithTag(kExperimentTag);
 
   static constexpr char kTestManifest[] =
@@ -513,7 +513,7 @@
       "    \"suffix\": \"TestSuffix\""
       "  }"
       "]}";
-  traits.ComponentReady(
+  policy.ComponentReady(
       default_version_, default_path_,
       base::DictionaryValue::From(base::JSONReader::Read(kTestManifest)));
 
@@ -521,7 +521,7 @@
 }
 
 TEST_F(ExperimentalSwReporterInstallerTest, EmptyArguments) {
-  SwReporterInstallerTraits traits(launched_callback_, true);
+  SwReporterInstallerPolicy policy(launched_callback_, true);
   CreateFeatureWithTag(kExperimentTag);
 
   static constexpr char kTestManifest[] =
@@ -531,7 +531,7 @@
       "    \"arguments\": []"
       "  }"
       "]}";
-  traits.ComponentReady(
+  policy.ComponentReady(
       default_version_, default_path_,
       base::DictionaryValue::From(base::JSONReader::Read(kTestManifest)));
 
@@ -539,7 +539,7 @@
 }
 
 TEST_F(ExperimentalSwReporterInstallerTest, EmptyArguments2) {
-  SwReporterInstallerTraits traits(launched_callback_, true);
+  SwReporterInstallerPolicy policy(launched_callback_, true);
   CreateFeatureWithTag(kExperimentTag);
 
   static constexpr char kTestManifest[] =
@@ -549,7 +549,7 @@
       "    \"arguments\": [\"\"]"
       "  }"
       "]}";
-  traits.ComponentReady(
+  policy.ComponentReady(
       default_version_, default_path_,
       base::DictionaryValue::From(base::JSONReader::Read(kTestManifest)));
 
@@ -557,11 +557,11 @@
 }
 
 TEST_F(ExperimentalSwReporterInstallerTest, EmptyManifest) {
-  SwReporterInstallerTraits traits(launched_callback_, true);
+  SwReporterInstallerPolicy policy(launched_callback_, true);
   CreateFeatureWithTag(kExperimentTag);
 
   static constexpr char kTestManifest[] = "{}";
-  traits.ComponentReady(
+  policy.ComponentReady(
       default_version_, default_path_,
       base::DictionaryValue::From(base::JSONReader::Read(kTestManifest)));
 
@@ -573,11 +573,11 @@
 }
 
 TEST_F(ExperimentalSwReporterInstallerTest, EmptyLaunchParams) {
-  SwReporterInstallerTraits traits(launched_callback_, true);
+  SwReporterInstallerPolicy policy(launched_callback_, true);
   CreateFeatureWithTag(kExperimentTag);
 
   static constexpr char kTestManifest[] = "{\"launch_params\": []}";
-  traits.ComponentReady(
+  policy.ComponentReady(
       default_version_, default_path_,
       base::DictionaryValue::From(base::JSONReader::Read(kTestManifest)));
 
@@ -588,11 +588,11 @@
 }
 
 TEST_F(ExperimentalSwReporterInstallerTest, EmptyLaunchParams2) {
-  SwReporterInstallerTraits traits(launched_callback_, true);
+  SwReporterInstallerPolicy policy(launched_callback_, true);
   CreateFeatureWithTag(kExperimentTag);
 
   static constexpr char kTestManifest[] = "{\"launch_params\": {}}";
-  traits.ComponentReady(
+  policy.ComponentReady(
       default_version_, default_path_,
       base::DictionaryValue::From(base::JSONReader::Read(kTestManifest)));
 
@@ -603,7 +603,7 @@
 }
 
 TEST_F(ExperimentalSwReporterInstallerTest, BadSuffix) {
-  SwReporterInstallerTraits traits(launched_callback_, true);
+  SwReporterInstallerPolicy policy(launched_callback_, true);
   CreateFeatureWithTag(kExperimentTag);
 
   static constexpr char kTestManifest[] =
@@ -613,7 +613,7 @@
       "    \"suffix\": \"invalid whitespace characters\""
       "  }"
       "]}";
-  traits.ComponentReady(
+  policy.ComponentReady(
       default_version_, default_path_,
       base::DictionaryValue::From(base::JSONReader::Read(kTestManifest)));
 
@@ -624,7 +624,7 @@
 }
 
 TEST_F(ExperimentalSwReporterInstallerTest, SuffixTooLong) {
-  SwReporterInstallerTraits traits(launched_callback_, true);
+  SwReporterInstallerPolicy policy(launched_callback_, true);
   CreateFeatureWithTag(kExperimentTag);
 
   static constexpr char kTestManifest[] =
@@ -637,7 +637,7 @@
   std::string suffix_too_long(500, 'x');
   std::string manifest =
       base::StringPrintf(kTestManifest, suffix_too_long.c_str());
-  traits.ComponentReady(
+  policy.ComponentReady(
       default_version_, default_path_,
       base::DictionaryValue::From(base::JSONReader::Read(manifest)));
 
@@ -648,7 +648,7 @@
 }
 
 TEST_F(ExperimentalSwReporterInstallerTest, BadTypesInManifest) {
-  SwReporterInstallerTraits traits(launched_callback_, true);
+  SwReporterInstallerPolicy policy(launched_callback_, true);
   CreateFeatureWithTag(kExperimentTag);
 
   // This has a string instead of a list for "arguments".
@@ -659,7 +659,7 @@
       "    \"suffix\": \"TestSuffix\""
       "  }"
       "]}";
-  traits.ComponentReady(
+  policy.ComponentReady(
       default_version_, default_path_,
       base::DictionaryValue::From(base::JSONReader::Read(kTestManifest)));
 
@@ -670,7 +670,7 @@
 }
 
 TEST_F(ExperimentalSwReporterInstallerTest, BadTypesInManifest2) {
-  SwReporterInstallerTraits traits(launched_callback_, true);
+  SwReporterInstallerPolicy policy(launched_callback_, true);
   CreateFeatureWithTag(kExperimentTag);
 
   // This has the invocation parameters as direct children of "launch_params",
@@ -682,7 +682,7 @@
       "    \"suffix\": \"TestSuffix\""
       "  }"
       "}";
-  traits.ComponentReady(
+  policy.ComponentReady(
       default_version_, default_path_,
       base::DictionaryValue::From(base::JSONReader::Read(kTestManifest)));
 
@@ -693,7 +693,7 @@
 }
 
 TEST_F(ExperimentalSwReporterInstallerTest, BadTypesInManifest3) {
-  SwReporterInstallerTraits traits(launched_callback_, true);
+  SwReporterInstallerPolicy policy(launched_callback_, true);
   CreateFeatureWithTag(kExperimentTag);
 
   // This has a list for suffix as well as for arguments.
@@ -704,7 +704,7 @@
       "    \"suffix\": [\"TestSuffix\"]"
       "  }"
       "]}";
-  traits.ComponentReady(
+  policy.ComponentReady(
       default_version_, default_path_,
       base::DictionaryValue::From(base::JSONReader::Read(kTestManifest)));
 
@@ -715,7 +715,7 @@
 }
 
 TEST_F(ExperimentalSwReporterInstallerTest, BadTypesInManifest4) {
-  SwReporterInstallerTraits traits(launched_callback_, true);
+  SwReporterInstallerPolicy policy(launched_callback_, true);
   CreateFeatureWithTag(kExperimentTag);
 
   // This has an int instead of a bool for prompt.
@@ -727,7 +727,7 @@
       "    \"prompt\": 1"
       "  }"
       "]}";
-  traits.ComponentReady(
+  policy.ComponentReady(
       default_version_, default_path_,
       base::DictionaryValue::From(base::JSONReader::Read(kTestManifest)));
 
diff --git a/chrome/browser/component_updater/third_party_module_list_component_installer_win.cc b/chrome/browser/component_updater/third_party_module_list_component_installer_win.cc
index b67a42b..7a99c08 100644
--- a/chrome/browser/component_updater/third_party_module_list_component_installer_win.cc
+++ b/chrome/browser/component_updater/third_party_module_list_component_installer_win.cc
@@ -43,26 +43,26 @@
 // The name of the component. This is used in the chrome://components page.
 const char kThirdPartyModuleListName[] = "Third Party Module List";
 
-ThirdPartyModuleListComponentInstallerTraits::
-    ThirdPartyModuleListComponentInstallerTraits(ModuleListManager* manager)
+ThirdPartyModuleListComponentInstallerPolicy::
+    ThirdPartyModuleListComponentInstallerPolicy(ModuleListManager* manager)
     : manager_(manager) {}
 
-ThirdPartyModuleListComponentInstallerTraits::
-    ~ThirdPartyModuleListComponentInstallerTraits() {}
+ThirdPartyModuleListComponentInstallerPolicy::
+    ~ThirdPartyModuleListComponentInstallerPolicy() {}
 
-bool ThirdPartyModuleListComponentInstallerTraits::
+bool ThirdPartyModuleListComponentInstallerPolicy::
     SupportsGroupPolicyEnabledComponentUpdates() const {
   return false;
 }
 
-bool ThirdPartyModuleListComponentInstallerTraits::RequiresNetworkEncryption()
+bool ThirdPartyModuleListComponentInstallerPolicy::RequiresNetworkEncryption()
     const {
   // Public data is delivered via this component, no need for encryption.
   return false;
 }
 
 update_client::CrxInstaller::Result
-ThirdPartyModuleListComponentInstallerTraits::OnCustomInstall(
+ThirdPartyModuleListComponentInstallerPolicy::OnCustomInstall(
     const base::DictionaryValue& manifest,
     const base::FilePath& install_dir) {
   return update_client::CrxInstaller::Result(0);  // Nothing custom here.
@@ -71,7 +71,7 @@
 // NOTE: This is always called on the main UI thread. It is called once every
 // startup to notify of an already installed component, and may be called
 // repeatedly after that every time a new component is ready.
-void ThirdPartyModuleListComponentInstallerTraits::ComponentReady(
+void ThirdPartyModuleListComponentInstallerPolicy::ComponentReady(
     const base::Version& version,
     const base::FilePath& install_dir,
     std::unique_ptr<base::DictionaryValue> manifest) {
@@ -81,7 +81,7 @@
   manager_->LoadModuleList(version, GetModuleListPath(install_dir));
 }
 
-bool ThirdPartyModuleListComponentInstallerTraits::VerifyInstallation(
+bool ThirdPartyModuleListComponentInstallerPolicy::VerifyInstallation(
     const base::DictionaryValue& manifest,
     const base::FilePath& install_dir) const {
   // This is called during startup and installation before ComponentReady().
@@ -91,33 +91,33 @@
 }
 
 base::FilePath
-ThirdPartyModuleListComponentInstallerTraits::GetRelativeInstallDir() const {
+ThirdPartyModuleListComponentInstallerPolicy::GetRelativeInstallDir() const {
   // The same path is used for installation and for the registry key to keep
   // things consistent.
   return base::FilePath(ModuleListManager::kModuleListRegistryKeyPath);
 }
 
-void ThirdPartyModuleListComponentInstallerTraits::GetHash(
+void ThirdPartyModuleListComponentInstallerPolicy::GetHash(
     std::vector<uint8_t>* hash) const {
   hash->assign(std::begin(kPublicKeySHA256), std::end(kPublicKeySHA256));
 }
 
-std::string ThirdPartyModuleListComponentInstallerTraits::GetName() const {
+std::string ThirdPartyModuleListComponentInstallerPolicy::GetName() const {
   return kThirdPartyModuleListName;
 }
 
 std::vector<std::string>
-ThirdPartyModuleListComponentInstallerTraits::GetMimeTypes() const {
+ThirdPartyModuleListComponentInstallerPolicy::GetMimeTypes() const {
   return std::vector<std::string>();
 }
 
 update_client::InstallerAttributes
-ThirdPartyModuleListComponentInstallerTraits::GetInstallerAttributes() const {
+ThirdPartyModuleListComponentInstallerPolicy::GetInstallerAttributes() const {
   return update_client::InstallerAttributes();
 }
 
 // static
-base::FilePath ThirdPartyModuleListComponentInstallerTraits::GetModuleListPath(
+base::FilePath ThirdPartyModuleListComponentInstallerPolicy::GetModuleListPath(
     const base::FilePath& install_dir) {
   return install_dir.Append(kRelativeModuleListPath);
 }
@@ -132,12 +132,11 @@
     return;
   ModuleListManager* manager = &database->module_list_manager();
 
-  std::unique_ptr<ComponentInstallerTraits> traits(
-      new ThirdPartyModuleListComponentInstallerTraits(manager));
+  std::unique_ptr<ComponentInstallerPolicy> policy(
+      new ThirdPartyModuleListComponentInstallerPolicy(manager));
 
   // |cus| will take ownership of |installer| during installer->Register(cus).
-  DefaultComponentInstaller* installer =
-      new DefaultComponentInstaller(std::move(traits));
+  ComponentInstaller* installer = new ComponentInstaller(std::move(policy));
   installer->Register(cus, base::Closure());
 }
 
diff --git a/chrome/browser/component_updater/third_party_module_list_component_installer_win.h b/chrome/browser/component_updater/third_party_module_list_component_installer_win.h
index 5001901..4aa3e5a 100644
--- a/chrome/browser/component_updater/third_party_module_list_component_installer_win.h
+++ b/chrome/browser/component_updater/third_party_module_list_component_installer_win.h
@@ -11,7 +11,7 @@
 #include <string>
 #include <vector>
 
-#include "components/component_updater/default_component_installer.h"
+#include "components/component_updater/component_installer.h"
 
 namespace base {
 class FilePath;
@@ -30,19 +30,19 @@
 //
 // Notifications of a new version of the module list are sent to the
 // ModuleListManager.
-class ThirdPartyModuleListComponentInstallerTraits
-    : public ComponentInstallerTraits {
+class ThirdPartyModuleListComponentInstallerPolicy
+    : public ComponentInstallerPolicy {
  public:
   // The |manager| will be notified each time a new module list is available,
   // including once every startup when a component is already installed.
-  explicit ThirdPartyModuleListComponentInstallerTraits(
+  explicit ThirdPartyModuleListComponentInstallerPolicy(
       ModuleListManager* manager);
-  ~ThirdPartyModuleListComponentInstallerTraits() override;
+  ~ThirdPartyModuleListComponentInstallerPolicy() override;
 
  private:
-  friend class ThirdPartyModuleListComponentInstallerTraitsTest;
+  friend class ThirdPartyModuleListComponentInstallerPolicyTest;
 
-  // ComponentInstallerTraits implementation.
+  // ComponentInstallerPolicy implementation.
   bool SupportsGroupPolicyEnabledComponentUpdates() const override;
   bool RequiresNetworkEncryption() const override;
   update_client::CrxInstaller::Result OnCustomInstall(
@@ -67,7 +67,7 @@
   // the manager provided will be a global singleton.
   ModuleListManager* manager_;
 
-  DISALLOW_COPY_AND_ASSIGN(ThirdPartyModuleListComponentInstallerTraits);
+  DISALLOW_COPY_AND_ASSIGN(ThirdPartyModuleListComponentInstallerPolicy);
 };
 
 void RegisterThirdPartyModuleListComponent(ComponentUpdateService* cus);
diff --git a/chrome/browser/component_updater/widevine_cdm_component_installer.cc b/chrome/browser/component_updater/widevine_cdm_component_installer.cc
index 31eecc32..aad7ee0943 100644
--- a/chrome/browser/component_updater/widevine_cdm_component_installer.cc
+++ b/chrome/browser/component_updater/widevine_cdm_component_installer.cc
@@ -30,8 +30,8 @@
 #include "build/build_config.h"
 #include "chrome/common/chrome_paths.h"
 #include "chrome/common/widevine_cdm_constants.h"
+#include "components/component_updater/component_installer.h"
 #include "components/component_updater/component_updater_service.h"
-#include "components/component_updater/default_component_installer.h"
 #include "components/version_info/version_info.h"
 #include "content/public/browser/browser_thread.h"
 #include "content/public/browser/cdm_registry.h"
@@ -247,13 +247,13 @@
 
 }  // namespace
 
-class WidevineCdmComponentInstallerTraits : public ComponentInstallerTraits {
+class WidevineCdmComponentInstallerPolicy : public ComponentInstallerPolicy {
  public:
-  WidevineCdmComponentInstallerTraits();
-  ~WidevineCdmComponentInstallerTraits() override {}
+  WidevineCdmComponentInstallerPolicy();
+  ~WidevineCdmComponentInstallerPolicy() override {}
 
  private:
-  // The following methods override ComponentInstallerTraits.
+  // The following methods override ComponentInstallerPolicy.
   bool SupportsGroupPolicyEnabledComponentUpdates() const override;
   bool RequiresNetworkEncryption() const override;
   update_client::CrxInstaller::Result OnCustomInstall(
@@ -280,30 +280,29 @@
                         const base::FilePath& cdm_install_dir,
                         std::unique_ptr<base::DictionaryValue> manifest);
 
-  DISALLOW_COPY_AND_ASSIGN(WidevineCdmComponentInstallerTraits);
+  DISALLOW_COPY_AND_ASSIGN(WidevineCdmComponentInstallerPolicy);
 };
 
-WidevineCdmComponentInstallerTraits::WidevineCdmComponentInstallerTraits() {
-}
+WidevineCdmComponentInstallerPolicy::WidevineCdmComponentInstallerPolicy() {}
 
-bool WidevineCdmComponentInstallerTraits::
+bool WidevineCdmComponentInstallerPolicy::
     SupportsGroupPolicyEnabledComponentUpdates() const {
   return true;
 }
 
-bool WidevineCdmComponentInstallerTraits::RequiresNetworkEncryption() const {
+bool WidevineCdmComponentInstallerPolicy::RequiresNetworkEncryption() const {
   return false;
 }
 
 update_client::CrxInstaller::Result
-WidevineCdmComponentInstallerTraits::OnCustomInstall(
+WidevineCdmComponentInstallerPolicy::OnCustomInstall(
     const base::DictionaryValue& manifest,
     const base::FilePath& install_dir) {
   return update_client::CrxInstaller::Result(0);
 }
 
 // Once the CDM is ready, check the CDM adapter.
-void WidevineCdmComponentInstallerTraits::ComponentReady(
+void WidevineCdmComponentInstallerPolicy::ComponentReady(
     const base::Version& version,
     const base::FilePath& path,
     std::unique_ptr<base::DictionaryValue> manifest) {
@@ -314,12 +313,12 @@
 
   base::PostTaskWithTraits(
       FROM_HERE, {base::MayBlock(), base::TaskPriority::BACKGROUND},
-      base::Bind(&WidevineCdmComponentInstallerTraits::UpdateCdmAdapter,
+      base::Bind(&WidevineCdmComponentInstallerPolicy::UpdateCdmAdapter,
                  base::Unretained(this), version, path,
                  base::Passed(&manifest)));
 }
 
-bool WidevineCdmComponentInstallerTraits::VerifyInstallation(
+bool WidevineCdmComponentInstallerPolicy::VerifyInstallation(
     const base::DictionaryValue& manifest,
     const base::FilePath& install_dir) const {
   return IsCompatibleWithChrome(manifest) &&
@@ -330,26 +329,26 @@
 
 // The base directory on Windows looks like:
 // <profile>\AppData\Local\Google\Chrome\User Data\WidevineCdm\.
-base::FilePath WidevineCdmComponentInstallerTraits::GetRelativeInstallDir()
+base::FilePath WidevineCdmComponentInstallerPolicy::GetRelativeInstallDir()
     const {
   return base::FilePath(FILE_PATH_LITERAL("WidevineCdm"));
 }
 
-void WidevineCdmComponentInstallerTraits::GetHash(
+void WidevineCdmComponentInstallerPolicy::GetHash(
     std::vector<uint8_t>* hash) const {
   hash->assign(kSha2Hash, kSha2Hash + arraysize(kSha2Hash));
 }
 
-std::string WidevineCdmComponentInstallerTraits::GetName() const {
+std::string WidevineCdmComponentInstallerPolicy::GetName() const {
   return kWidevineCdmDisplayName;
 }
 
 update_client::InstallerAttributes
-WidevineCdmComponentInstallerTraits::GetInstallerAttributes() const {
+WidevineCdmComponentInstallerPolicy::GetInstallerAttributes() const {
   return update_client::InstallerAttributes();
 }
 
-std::vector<std::string> WidevineCdmComponentInstallerTraits::GetMimeTypes()
+std::vector<std::string> WidevineCdmComponentInstallerPolicy::GetMimeTypes()
     const {
   return std::vector<std::string>();
 }
@@ -363,7 +362,7 @@
          base::PathExists(adapter_install_path);
 }
 
-void WidevineCdmComponentInstallerTraits::UpdateCdmAdapter(
+void WidevineCdmComponentInstallerPolicy::UpdateCdmAdapter(
     const base::Version& cdm_version,
     const base::FilePath& cdm_install_dir,
     std::unique_ptr<base::DictionaryValue> manifest) {
@@ -443,11 +442,10 @@
   PathService::Get(chrome::FILE_WIDEVINE_CDM_ADAPTER, &adapter_source_path);
   if (!base::PathExists(adapter_source_path))
     return;
-  std::unique_ptr<ComponentInstallerTraits> traits(
-      new WidevineCdmComponentInstallerTraits);
+  std::unique_ptr<ComponentInstallerPolicy> policy(
+      new WidevineCdmComponentInstallerPolicy);
   // |cus| will take ownership of |installer| during installer->Register(cus).
-  DefaultComponentInstaller* installer =
-      new DefaultComponentInstaller(std::move(traits));
+  ComponentInstaller* installer = new ComponentInstaller(std::move(policy));
   installer->Register(cus, base::Closure());
 #endif  // defined(WIDEVINE_CDM_AVAILABLE) && defined(WIDEVINE_CDM_IS_COMPONENT)
 }
diff --git a/chrome/browser/conflicts/module_list_manager_win.h b/chrome/browser/conflicts/module_list_manager_win.h
index 126ceb0..ed60326 100644
--- a/chrome/browser/conflicts/module_list_manager_win.h
+++ b/chrome/browser/conflicts/module_list_manager_win.h
@@ -12,7 +12,7 @@
 #include "base/version.h"
 
 namespace component_updater {
-class ThirdPartyModuleListComponentInstallerTraits;
+class ThirdPartyModuleListComponentInstallerPolicy;
 }  // namespace component_updater
 
 // Declares a class that is responsible for knowing the location of the most
@@ -84,7 +84,7 @@
   static std::wstring GetRegistryPath();
 
  protected:
-  friend class component_updater::ThirdPartyModuleListComponentInstallerTraits;
+  friend class component_updater::ThirdPartyModuleListComponentInstallerPolicy;
 
   // Called post-startup with information about the most recently available
   // module list installation. Can potentially be called again much later when
diff --git a/chrome/browser/resources/local_ntp/local_ntp.css b/chrome/browser/resources/local_ntp/local_ntp.css
index 1c11877..0cbbe47 100644
--- a/chrome/browser/resources/local_ntp/local_ntp.css
+++ b/chrome/browser/resources/local_ntp/local_ntp.css
@@ -72,7 +72,12 @@
 
 #logo-default,
 #logo-doodle {
+  opacity: 0;
   position: absolute;
+}
+
+#logo-default.fade,
+#logo-doodle.fade {
   transition: opacity 130ms;
 }
 
@@ -92,7 +97,6 @@
    * left and the right side.
    */
   left: -100px;
-  opacity: 0;
   right: -100px;
   top: 44px;
 }
diff --git a/chrome/browser/resources/local_ntp/local_ntp.js b/chrome/browser/resources/local_ntp/local_ntp.js
index ee7f0fd2..fb5a74f1 100644
--- a/chrome/browser/resources/local_ntp/local_ntp.js
+++ b/chrome/browser/resources/local_ntp/local_ntp.js
@@ -54,11 +54,12 @@
  * @const
  */
 var CLASSES = {
-  ALTERNATE_LOGO: 'alternate-logo', // Shows white logo if required by theme
+  ALTERNATE_LOGO: 'alternate-logo',  // Shows white logo if required by theme
   DARK: 'dark',
   DEFAULT_THEME: 'default-theme',
   DELAYED_HIDE_NOTIFICATION: 'mv-notice-delayed-hide',
-  FAKEBOX_FOCUS: 'fakebox-focused', // Applies focus styles to the fakebox
+  FADE: 'fade',  // Enables opacity transition on logo and doodle.
+  FAKEBOX_FOCUS: 'fakebox-focused',  // Applies focus styles to the fakebox
   // Applies drag focus style to the fakebox
   FAKEBOX_DRAG_FOCUS: 'fakebox-drag-focused',
   HIDE_FAKEBOX_AND_LOGO: 'hide-fakebox-logo',
@@ -574,28 +575,26 @@
       injectOneGoogleBar(og);
     };
 
-    // Initialize opacity and install transitionend handlers. It's necessary to
-    // explicitly initialize opacity here because isFadedOut() below uses the
-    // difference between .style and getComputedStyle() to detect fades in
-    // progress.
-    var logoDefault = $(IDS.LOGO_DEFAULT);
-    var logoDoodle = $(IDS.LOGO_DOODLE);
-    logoDefault.style.opacity = 1;
-    logoDoodle.style.opacity = 0;
-    logoDefault.addEventListener('transitionend', onDoodleTransitionEnd);
-    logoDoodle.addEventListener('transitionend', onDoodleTransitionEnd);
-
     // Load the Doodle. After the first request completes (getting cached
     // data), issue a second request for fresh Doodle data.
-    loadDoodle(null, function(ddl) {
-      if (ddl.usable) {
-        injectDoodle(ddl.image, ddl.metadata);
+    loadDoodle(/*v=*/null, function(ddl) {
+      if (ddl === null) {
+        // Got no ddl object at all, the feature is probably disabled. Just show
+        // the logo.
+        showLogoOrDoodle(null, null);
+        return;
       }
-      loadDoodle(ddl.v, function(ddl) {
-        if (ddl.usable) {
-          injectDoodle(ddl.image, ddl.metadata);
-        }
-      });
+
+      // Got a (possibly empty) ddl object. Show logo or doodle.
+      showLogoOrDoodle(ddl.image, ddl.metadata);
+      // If we got a valid ddl object (from cache), load a fresh one.
+      if (ddl.v !== null) {
+        loadDoodle(ddl.v, function(ddl) {
+          if (ddl.usable) {
+            fadeToLogoOrDoodle(ddl.image, ddl.metadata);
+          }
+        });
+      }
     });
   } else {
     document.body.classList.add(CLASSES.NON_GOOGLE_PAGE);
@@ -679,12 +678,13 @@
 }
 
 
-/** Loads the Doodle. The loaded script declares a global variable ddl, which
- * onload() receives as its single argument. If v is null, then the call
- * requests a cached logo. If non-null, it must be the ddl.v of a previous
- * request for a cached logo, and the corresponding fresh logo is returned.
+/** Loads the Doodle. On success, the loaded script declares a global variable
+ * ddl, which onload() receives as its single argument. On failure, onload() is
+ * called with null as the argument. If v is null, then the call requests a
+ * cached logo. If non-null, it must be the ddl.v of a previous request for a
+ * cached logo, and the corresponding fresh logo is returned.
  * @param {?number} v
- * @param {function({v, image, metadata})} onload
+ * @param {function(?{v, usable, image, metadata})} onload
  */
 var loadDoodle = function(v, onload) {
   var ddlScript = document.createElement('script');
@@ -694,6 +694,10 @@
   ddlScript.onload = function() {
     onload(ddl);
   };
+  ddlScript.onerror = function() {
+    onload(null);
+  };
+  // TODO(treib,sfiera): Add a timeout in case something goes wrong?
   document.body.appendChild(ddlScript);
 };
 
@@ -708,31 +712,42 @@
 };
 
 
-/** Returns true if |doodle| is currently visible. If doodle.image is null,
- * returns true when the default logo is visible; if non-null, checks that it
- * matches the doodle that is currently visible. Here, "visible" means
- * fully-visible or fading in.
+/** Returns true if the doodle given by |image| and |metadata| is currently
+ * visible. If |image| is null, returns true when the default logo is visible;
+ * if non-null, checks that it matches the doodle that is currently visible.
+ * Here, "visible" means fully-visible or fading in.
  *
- * @param {{image, metadata}} doodle
+ * @param {?Object} image
+ * @param {?Object} metadata
  * @returns {boolean}
  */
-var isDoodleCurrentlyVisible = function(doodle) {
+var isDoodleCurrentlyVisible = function(image, metadata) {
   var haveDoodle = ($(IDS.LOGO_DOODLE).style.opacity != 0);
-  var wantDoodle = (doodle.image !== null);
+  var wantDoodle = (image !== null) && (metadata !== null);
   if (!haveDoodle || !wantDoodle)
     return haveDoodle === wantDoodle;
 
   // Have a visible doodle and a query doodle. Test that they match.
   var logoDoodleImage = $(IDS.LOGO_DOODLE_IMAGE);
-  return (logoDoodleImage.src === doodle.image) ||
-      (logoDoodleImage.src === doodle.metadata.animatedUrl);
+  return (logoDoodleImage.src === image) ||
+      (logoDoodleImage.src === metadata.animatedUrl);
+};
+
+
+var showLogoOrDoodle = function(image, metadata) {
+  if (metadata !== null) {
+    applyDoodleMetadata(metadata);
+    $(IDS.LOGO_DOODLE_IMAGE).src = image;
+    $(IDS.LOGO_DOODLE).style.opacity = 1;
+  } else {
+    $(IDS.LOGO_DEFAULT).style.opacity = 1;
+  }
 };
 
 
 /** The image and metadata that should be shown, according to the latest fetch.
  * After a logo fades out, onDoodleTransitionEnd fades in a logo according to
- * targetDoodle. After a logo fades in, onDoodleTransitionEnd fades out again if
- * targetDoodle has change since the fade-in started.
+ * targetDoodle.
  */
 var targetDoodle = {
   image: null,
@@ -741,58 +756,59 @@
 
 
 /**
- * Injects the Doodle into the page. Called asynchronously, so that it doesn't
- * block the main page load.
+ * Starts fading out the given element, which should be either the default logo
+ * or the doodle.
+ *
+ * @param {HTMLElement} element
  */
-var injectDoodle = function(image, metadata) {
-  var logoDoodle = $(IDS.LOGO_DOODLE);
-  var logoDoodleLink = $(IDS.LOGO_DOODLE_LINK);
-  var logoDefault = $(IDS.LOGO_DEFAULT);
+var startFadeOut = function(element) {
+  element.classList.add(CLASSES.FADE);
+  element.addEventListener('transitionend', onDoodleTransitionEnd);
+  element.style.opacity = 0;
+};
 
-  // If the image is already visible, or a transition to it is in progress,
-  // there's no need to start a fade-out. However, metadata may have changed, so
-  // update the doodle's alt text and href, if applicable.
-  if (image === targetDoodle.image) {
+
+/**
+ * Integrates a fresh doodle into the page as appropriate. If the correct logo
+ * or doodle is already shown, just updates the metadata. Otherwise, initiates
+ * a fade from the currently-shown logo/doodle to the new one.
+ *
+ * @param {?Object} image
+ * @param {?Object} metadata
+ */
+var fadeToLogoOrDoodle = function(image, metadata) {
+  // If the image is already visible, there's no need to start a fade-out.
+  // However, metadata may have changed, so update the doodle's alt text and
+  // href, if applicable.
+  if (isDoodleCurrentlyVisible(image, metadata)) {
     if (metadata !== null) {
       applyDoodleMetadata(metadata);
-      targetDoodle.metadata = metadata;
     }
     return;
   }
 
+  // Set the target to use once the current logo/doodle has finished fading out.
   targetDoodle.image = image;
   targetDoodle.metadata = metadata;
 
-  // If either element is visible, start fading it out. onDoodleTransitionEnd
-  // will apply the change when the fade-out finishes.
-  logoDoodle.style.opacity = 0;
-  logoDefault.style.opacity = 0;
+  // Start fading out the current logo or doodle. onDoodleTransitionEnd will
+  // apply the change when the fade-out finishes.
+  startFadeOut($(IDS.LOGO_DEFAULT));
+  startFadeOut($(IDS.LOGO_DOODLE));
 };
 
 
 var onDoodleTransitionEnd = function(e) {
   var logoDoodle = $(IDS.LOGO_DOODLE);
-  var logoDoodleLink = $(IDS.LOGO_DOODLE_LINK);
   var logoDoodleImage = $(IDS.LOGO_DOODLE_IMAGE);
   var logoDefault = $(IDS.LOGO_DEFAULT);
 
   if (isFadedOut(logoDoodle) && isFadedOut(logoDefault)) {
     // Fade-out finished. Start fading in the appropriate logo.
-    if (targetDoodle.image === null) {
-      logoDefault.style.opacity = 1;
-    } else {
-      applyDoodleMetadata(targetDoodle.metadata);
-      logoDoodleImage.src = targetDoodle.image;
-      logoDoodle.style.opacity = 1;
-    }
-    return;
-  }
+    showLogoOrDoodle(targetDoodle.image, targetDoodle.metadata);
 
-  // Fade-in finished. It's possible that the wrong image is now faded in, if
-  // the logo updated during a fade-in. In this case, restart the fade-out.
-  if (!isDoodleCurrentlyVisible(targetDoodle)) {
-    logoDoodle.style.opacity = 0;
-    logoDefault.style.opacity = 0;
+    logoDefault.removeEventListener('transitionend', onDoodleTransitionEnd);
+    logoDoodle.removeEventListener('transitionend', onDoodleTransitionEnd);
   }
 };
 
diff --git a/chrome/browser/search/local_ntp_source.cc b/chrome/browser/search/local_ntp_source.cc
index 78047d8..5006e2c 100644
--- a/chrome/browser/search/local_ntp_source.cc
+++ b/chrome/browser/search/local_ntp_source.cc
@@ -604,7 +604,7 @@
   base::CommandLine* command_line = base::CommandLine::ForCurrentProcess();
   if (command_line->HasSwitch(switches::kLocalNtpReload)) {
     // While live-editing the local NTP files, turn off CSP.
-    return "script-src *;";
+    return "script-src * 'unsafe-inline';";
   }
 #endif  // !defined(GOOGLE_CHROME_BUILD)
 
diff --git a/chrome/browser/ssl/security_state_tab_helper_browser_tests.cc b/chrome/browser/ssl/security_state_tab_helper_browser_tests.cc
index 751c6a6..b83d4f1 100644
--- a/chrome/browser/ssl/security_state_tab_helper_browser_tests.cc
+++ b/chrome/browser/ssl/security_state_tab_helper_browser_tests.cc
@@ -530,10 +530,10 @@
   const content::SecurityStyleExplanations& explanation =
       observer.latest_explanations();
 
-  ASSERT_EQ(1u, explanation.insecure_explanations.size());
-  ASSERT_EQ(0u, explanation.neutral_explanations.size());
+  ASSERT_EQ(0u, explanation.insecure_explanations.size());
+  ASSERT_EQ(1u, explanation.neutral_explanations.size());
   EXPECT_EQ(l10n_util::GetStringUTF8(IDS_SHA1),
-            explanation.insecure_explanations[0].summary);
+            explanation.neutral_explanations[0].summary);
 }
 
 IN_PROC_BROWSER_TEST_F(SecurityStateTabHelperTest, MixedContent) {
diff --git a/chrome/browser/ui/app_list/arc/arc_app_utils.cc b/chrome/browser/ui/app_list/arc/arc_app_utils.cc
index 9033669..1359677 100644
--- a/chrome/browser/ui/app_list/arc/arc_app_utils.cc
+++ b/chrome/browser/ui/app_list/arc/arc_app_utils.cc
@@ -243,6 +243,10 @@
 }  // namespace
 
 const char kPlayStoreAppId[] = "cnbgggchhmkkdmeppjobngjoejnihlei";
+const char kPlayBooksAppId[] = "cafegjnmmjpfibnlddppihpnkbkgicbg";
+const char kPlayGamesAppId[] = "nplnnjkbeijcggmpdcecpabgbjgeiedc";
+const char kPlayMoviesAppId[] = "dbbihmicnlldbflflckpafphlekmjfnm";
+const char kPlayMusicAppId[] = "ophbaopahelaolbjliokocojjbgfadfn";
 const char kLegacyPlayStoreAppId[] = "gpkmicpkkebkmabiaedjognfppcchdfa";
 const char kPlayStorePackage[] = "com.android.vending";
 const char kPlayStoreActivity[] = "com.android.vending.AssetBrowserActivity";
diff --git a/chrome/browser/ui/app_list/arc/arc_app_utils.h b/chrome/browser/ui/app_list/arc/arc_app_utils.h
index 4f89f3a..0c2c3d6 100644
--- a/chrome/browser/ui/app_list/arc/arc_app_utils.h
+++ b/chrome/browser/ui/app_list/arc/arc_app_utils.h
@@ -21,6 +21,10 @@
 namespace arc {
 
 extern const char kPlayStoreAppId[];
+extern const char kPlayBooksAppId[];
+extern const char kPlayGamesAppId[];
+extern const char kPlayMoviesAppId[];
+extern const char kPlayMusicAppId[];
 // This represents legacy Play Store item in the app launcher that was used
 // before unifying app id in the app launcher and shelf.
 // TODO(khmel): Remove this after few release http://crbug.com/722675.
diff --git a/chrome/browser/ui/ash/media_client.cc b/chrome/browser/ui/ash/media_client.cc
index 3f36203..a525588 100644
--- a/chrome/browser/ui/ash/media_client.cc
+++ b/chrome/browser/ui/ash/media_client.cc
@@ -35,6 +35,8 @@
 
 namespace {
 
+MediaClient* g_media_client_ = nullptr;
+
 MediaCaptureState& operator|=(MediaCaptureState& lhs, MediaCaptureState rhs) {
   lhs = static_cast<MediaCaptureState>(static_cast<int>(lhs) |
                                        static_cast<int>(rhs));
@@ -141,12 +143,21 @@
   ash::mojom::MediaClientAssociatedPtrInfo ptr_info;
   binding_.Bind(mojo::MakeRequest(&ptr_info));
   media_controller_->SetClient(std::move(ptr_info));
+
+  DCHECK(!g_media_client_);
+  g_media_client_ = this;
 }
 
 MediaClient::~MediaClient() {
+  g_media_client_ = nullptr;
   MediaCaptureDevicesDispatcher::GetInstance()->RemoveObserver(this);
 }
 
+// static
+MediaClient* MediaClient::Get() {
+  return g_media_client_;
+}
+
 void MediaClient::HandleMediaNextTrack() {
   extensions::MediaPlayerAPI::Get(ProfileManager::GetActiveUserProfile())
       ->media_player_event_router()
diff --git a/chrome/browser/ui/ash/media_client.h b/chrome/browser/ui/ash/media_client.h
index c566745..dda370a 100644
--- a/chrome/browser/ui/ash/media_client.h
+++ b/chrome/browser/ui/ash/media_client.h
@@ -17,6 +17,9 @@
   MediaClient();
   ~MediaClient() override;
 
+  // Returns a pointer to the singleton MediaClient, or nullptr if none exists.
+  static MediaClient* Get();
+
   // ash::mojom::MediaClient:
   void HandleMediaNextTrack() override;
   void HandleMediaPlayPause() override;
diff --git a/chrome/browser/ui/ash/multi_user/multi_user_window_manager_chromeos.cc b/chrome/browser/ui/ash/multi_user/multi_user_window_manager_chromeos.cc
index 7411548f..6252234 100644
--- a/chrome/browser/ui/ash/multi_user/multi_user_window_manager_chromeos.cc
+++ b/chrome/browser/ui/ash/multi_user/multi_user_window_manager_chromeos.cc
@@ -7,7 +7,6 @@
 #include <set>
 #include <vector>
 
-#include "ash/media_controller.h"
 #include "ash/multi_profile_uma.h"
 #include "ash/public/cpp/shell_window_ids.h"
 #include "ash/shell.h"
@@ -21,6 +20,7 @@
 #include "chrome/browser/chrome_notification_types.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/profiles/profile_manager.h"
+#include "chrome/browser/ui/ash/media_client.h"
 #include "chrome/browser/ui/ash/multi_user/multi_user_util.h"
 #include "chrome/browser/ui/ash/multi_user/user_switch_animator_chromeos.h"
 #include "chrome/browser/ui/ash/session_controller_client.h"
@@ -389,9 +389,13 @@
   animation_.reset(new UserSwitchAnimatorChromeOS(
       this, current_account_id_,
       GetAdjustedAnimationTimeInMS(kUserFadeTimeMS)));
-  // Call notifier here instead of observing ActiveUserChanged because
-  // this must happen after MultiUserWindowManagerChromeOS is notified.
-  ash::Shell::Get()->media_controller()->RequestCaptureState();
+
+  // Call RequestCaptureState here instead of having MediaClient observe
+  // ActiveUserChanged because it must happen after
+  // MultiUserWindowManagerChromeOS is notified. The MediaClient may be null in
+  // tests.
+  if (MediaClient::Get())
+    MediaClient::Get()->RequestCaptureState();
 }
 
 void MultiUserWindowManagerChromeOS::OnWindowDestroyed(aura::Window* window) {
diff --git a/chrome/browser/ui/webui/chromeos/login/core_oobe_handler.cc b/chrome/browser/ui/webui/chromeos/login/core_oobe_handler.cc
index 028151d..bb29a3b 100644
--- a/chrome/browser/ui/webui/chromeos/login/core_oobe_handler.cc
+++ b/chrome/browser/ui/webui/chromeos/login/core_oobe_handler.cc
@@ -15,6 +15,7 @@
 #include "chrome/browser/chromeos/accessibility/accessibility_manager.h"
 #include "chrome/browser/chromeos/accessibility/magnification_manager.h"
 #include "chrome/browser/chromeos/events/keyboard_driven_event_rewriter.h"
+#include "chrome/browser/chromeos/login/enrollment/auto_enrollment_controller.h"
 #include "chrome/browser/chromeos/login/helper.h"
 #include "chrome/browser/chromeos/login/lock/screen_locker.h"
 #include "chrome/browser/chromeos/login/lock/webui_screen_locker.h"
@@ -23,6 +24,7 @@
 #include "chrome/browser/chromeos/policy/browser_policy_connector_chromeos.h"
 #include "chrome/browser/chromeos/policy/device_cloud_policy_manager_chromeos.h"
 #include "chrome/browser/chromeos/system/input_device_settings.h"
+#include "chrome/browser/chromeos/tpm_firmware_update.h"
 #include "chrome/browser/lifetime/application_lifetime.h"
 #include "chrome/browser/ui/ash/ash_util.h"
 #include "chrome/browser/ui/webui/chromeos/login/oobe_ui.h"
@@ -46,6 +48,8 @@
 #include "ui/gfx/geometry/size.h"
 #include "ui/keyboard/keyboard_controller.h"
 
+namespace chromeos {
+
 namespace {
 
 const char kJsScreenPath[] = "cr.ui.Oobe";
@@ -58,9 +62,20 @@
   return policy_manager && policy_manager->IsRemoraRequisition();
 }
 
-}  // namespace
+void LaunchResetScreen() {
+  // Don't recreate WizardController if it already exists.
+  WizardController* const wizard_controller =
+      WizardController::default_controller();
+  if (wizard_controller && !wizard_controller->login_screen_started()) {
+    wizard_controller->AdvanceToScreen(OobeScreen::SCREEN_OOBE_RESET);
+  } else {
+    DCHECK(LoginDisplayHost::default_host());
+    LoginDisplayHost::default_host()->StartWizard(
+        OobeScreen::SCREEN_OOBE_RESET);
+  }
+}
 
-namespace chromeos {
+}  // namespace
 
 // Note that show_oobe_ui_ defaults to false because WizardController assumes
 // OOBE UI is not visible by default.
@@ -186,19 +201,33 @@
 }
 
 void CoreOobeHandler::ShowDeviceResetScreen() {
-  policy::BrowserPolicyConnectorChromeOS* connector =
-      g_browser_process->platform_part()->browser_policy_connector_chromeos();
-  if (!connector->IsEnterpriseManaged()) {
-    // Don't recreate WizardController if it already exists.
-    WizardController* wizard_controller =
-        WizardController::default_controller();
-    if (wizard_controller && !wizard_controller->login_screen_started()) {
-      wizard_controller->AdvanceToScreen(OobeScreen::SCREEN_OOBE_RESET);
-    } else {
-      DCHECK(LoginDisplayHost::default_host());
-      LoginDisplayHost::default_host()->StartWizard(
-          OobeScreen::SCREEN_OOBE_RESET);
-    }
+  // Powerwash is generally not available on enterprise devices. First, check
+  // the common case of a correctly enrolled device.
+  if (g_browser_process->platform_part()
+          ->browser_policy_connector_chromeos()
+          ->IsEnterpriseManaged()) {
+    // Powerwash not allowed, except if allowed by the admin specifically for
+    // the purpose of installing a TPM firmware update.
+    tpm_firmware_update::ShouldOfferUpdateViaPowerwash(
+        base::Bind([](bool offer_update) {
+          if (offer_update) {
+            // Force the TPM firmware update option to be enabled.
+            g_browser_process->local_state()->SetBoolean(
+                prefs::kFactoryResetTPMFirmwareUpdateRequested, true);
+            LaunchResetScreen();
+          }
+        }));
+    return;
+  }
+
+  // Devices that are still in OOBE may be subject to forced re-enrollment (FRE)
+  // and thus pending for enterprise management. These should not be allowed to
+  // powerwash either. Note that taking consumer device ownership has the side
+  // effect of dropping the FRE requirement if it was previously in effect.
+  const AutoEnrollmentController::FRERequirement requirement =
+      AutoEnrollmentController::GetFRERequirement();
+  if (requirement != AutoEnrollmentController::EXPLICITLY_REQUIRED) {
+    LaunchResetScreen();
   }
 }
 
diff --git a/chrome/browser/vr/test/ui_scene_manager_test.cc b/chrome/browser/vr/test/ui_scene_manager_test.cc
index c30e34a6..7ae3b0a 100644
--- a/chrome/browser/vr/test/ui_scene_manager_test.cc
+++ b/chrome/browser/vr/test/ui_scene_manager_test.cc
@@ -93,6 +93,9 @@
     if (element->IsVisible() != visible) {
       return false;
     }
+    if (!element || (visible && element->draw_phase() == kPhaseNone)) {
+      return false;
+    }
   }
   return true;
 }
diff --git a/chrome/browser/vr/ui_scene_manager.cc b/chrome/browser/vr/ui_scene_manager.cc
index a393ec7..4eef439 100644
--- a/chrome/browser/vr/ui_scene_manager.cc
+++ b/chrome/browser/vr/ui_scene_manager.cc
@@ -287,6 +287,7 @@
   // Create transient exit warning.
   element = base::MakeUnique<ExitWarning>(1024);
   element->set_name(kExitWarning);
+  element->set_draw_phase(kPhaseOverlayForeground);
   element->SetSize(kExitWarningWidth, kExitWarningHeight);
   element->SetTranslate(0, 0, -kExitWarningDistance);
   element->SetScale(kExitWarningDistance, kExitWarningDistance, 1);
diff --git a/chrome/browser/vr/ui_scene_manager_unittest.cc b/chrome/browser/vr/ui_scene_manager_unittest.cc
index dbc6f182..8ee895d 100644
--- a/chrome/browser/vr/ui_scene_manager_unittest.cc
+++ b/chrome/browser/vr/ui_scene_manager_unittest.cc
@@ -55,6 +55,9 @@
     kLoadingIndicator,
     kCloseButton,
 };
+std::set<UiElementName> kElementsVisibleWithExitWarning = {
+    kScreenDimmer, kExitWarning,
+};
 
 static constexpr float kTolerance = 1e-5;
 static constexpr float kTransienceDelayMs = 6000;
@@ -622,6 +625,13 @@
   CheckRendererOpacityRecursive(&scene_->root_element());
 }
 
+TEST_F(UiSceneManagerTest, ExitWarning) {
+  MakeManager(kNotInCct, kNotInWebVr);
+  manager_->SetIsExiting();
+  AnimateBy(MsToDelta(0));
+  EXPECT_TRUE(VerifyVisibility(kElementsVisibleWithExitWarning, true));
+}
+
 // This test ensures that we maintain a specific view hierarchy so that our UI
 // is not distorted based on a device's physical screen size. This test ensures
 // that we don't silently cause distoration by changing the hierarchy. The long
diff --git a/chrome/common/extensions/extension_constants.cc b/chrome/common/extensions/extension_constants.cc
index c0b50a9f..819c0c64 100644
--- a/chrome/common/extensions/extension_constants.cc
+++ b/chrome/common/extensions/extension_constants.cc
@@ -30,18 +30,27 @@
 namespace extension_misc {
 
 const char kBookmarkManagerId[] = "eemcgdkfndhakfknompkggombfjjjeno";
+const char kCameraAppId[] = "hfhhnacclhffhdffklopdkcgdhifgngh";
+const char kCalculatorAppId[] = "joodangkbfjnajiiifokapkpmhfnpleo";
+const char kCalendarAppId[] = "ejjicmeblgpmajnghnpcppodonldlgfn";
 const char kChromeAppId[] = "mgndgikekgjfcpckkfioiadnlibdjbkf";
+const char kChromeRemoteDesktopAppId[] = "gbchcmhmhahfdphkhkmpfmihenigjmpp";
 const char kCloudPrintAppId[] = "mfehgcgbbipciphmccgaenjidiccnmng";
 const char kDataSaverExtensionId[] = "pfmgfdlgomnbgkofeojodiodmgpgmkac";
 const char kDriveExtensionId[] = "ghbmnnjooekpmoecnnnilnnbdlolhkhi";
 const char kDriveHostedAppId[] = "apdfllckaahabafndbhieahigkjlhalf";
 const char kEasyUnlockAppId[] = "mkaemigholebcgchlkbankmihknojeak";
 const char kEnterpriseWebStoreAppId[] = "afchcafgojfnemjkcbhfekplkmjaldaa";
+const char kFilesManagerAppId[] = "hhaomjibdihmijegdhdafkllkbggdgoj";
 const char kGmailAppId[] = "pjkljhegncpnkpknbcohdijeoejaedia";
 const char kGoogleDocAppId[] = "aohghmighlieiainnegkcijnfilokake";
+const char kGoogleKeepAppId[] = "hmjkmjkepdijhoojdojkdfohbdgmmhki";
+const char kGoogleMapsAppId[] = "lneaknkopdijkpnocmklfnjbeapigfbh";
+const char kGooglePhotosAppId[] = "hcglmfcclpfgljeaiahehebeoaiicbko";
 const char kGooglePlayBooksAppId[] = "mmimngoggfoobjdlefbcabngfnmieonb";
 const char kGooglePlayMoviesAppId[] = "gdijeikdkaembjbdobgfkoidjkpbmlkd";
 const char kGooglePlayMusicAppId[] = "icppfcnhkcmnfdhfhphakoifcfokfdhg";
+const char kGooglePlusAppId[] = "dlppkpafhbajpcmmoheippocdidnckmm";
 const char kGoogleSheetsAppId[] = "felcaaldnbdncclmgdcncolpebgiejap";
 const char kGoogleSlidesAppId[] = "aapocclcgogkmnckokdopfmhonfmgoek";
 const char kHTermAppId[] = "pnhechapfaindjhompbnflcldabbghjo";
@@ -52,6 +61,7 @@
     "abjokfonkihficiokmkfboogholifghn";
 const char kHotwordNewExtensionId[] = "nbpagnldghgfoolbancepceaanlmhfmd";
 const char kHotwordSharedModuleId[] = "lccekmodgklaepjeofjdjpbminllajkg";
+const char kTextEditorAppId[] = "mmfbcljfglbokpmkimbfghdkjmjhdgbg";
 const char kYoutubeAppId[] = "blpcfgokakmgnkcojhhkbfbldkacnbeo";
 const char kInAppPaymentsSupportAppId[] = "nmmhkkegccagdldgiimedpiccmgmieda";
 const char kMediaRouterStableExtensionId[] = "pkedcjkdefgpdelpbcmbmeomcjbeemfm";
diff --git a/chrome/common/extensions/extension_constants.h b/chrome/common/extensions/extension_constants.h
index 43ef3bcd..d5c1db0 100644
--- a/chrome/common/extensions/extension_constants.h
+++ b/chrome/common/extensions/extension_constants.h
@@ -34,9 +34,21 @@
 // The extension id of the bookmark manager.
 extern const char kBookmarkManagerId[];
 
+// The extension id of the Camera application.
+extern const char kCameraAppId[];
+
+// The extension id of the Calculator application.
+extern const char kCalculatorAppId[];
+
+// The extension id of the Calendar application.
+extern const char kCalendarAppId[];
+
 // The extension id of the Chrome component application.
 extern const char kChromeAppId[];
 
+// The extension id of the Chrome Remote Desktop application.
+extern const char kChromeRemoteDesktopAppId[];
+
 // The extension id of the Cloud Print component application.
 extern const char kCloudPrintAppId[];
 
@@ -55,12 +67,24 @@
 // The extension id of the Enterprise Web Store component application.
 extern const char kEnterpriseWebStoreAppId[];
 
+// The extension id of the Files Manager application.
+extern const char kFilesManagerAppId[];
+
 // The extension id of GMail application.
 extern const char kGmailAppId[];
 
 // The extension id of the Google Doc application.
 extern const char kGoogleDocAppId[];
 
+// The extension id of the Google Keep application.
+extern const char kGoogleKeepAppId[];
+
+// The extension id of the Google Maps application.
+extern const char kGoogleMapsAppId[];
+
+// The extension id of the Google Photos application.
+extern const char kGooglePhotosAppId[];
+
 // The extension id of the Google Play Books application.
 extern const char kGooglePlayBooksAppId[];
 
@@ -70,6 +94,9 @@
 // The extension id of the Google Play Music application.
 extern const char kGooglePlayMusicAppId[];
 
+// The extension id of the Google+ application.
+extern const char kGooglePlusAppId[];
+
 // The extension id of the Google Sheets application.
 extern const char kGoogleSheetsAppId[];
 
@@ -97,6 +124,9 @@
 // The extension id of the hotword shared module.
 extern const char kHotwordSharedModuleId[];
 
+// The extension id of the Text Editor application.
+extern const char kTextEditorAppId[];
+
 // The extension id of the Youtube application.
 extern const char kYoutubeAppId[];
 
diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn
index 352d122..f16fd52 100644
--- a/chrome/test/BUILD.gn
+++ b/chrome/test/BUILD.gn
@@ -209,8 +209,8 @@
       "//chrome/app/chrome_crash_reporter_client_mac.mm",
     ]
     public_deps += [
-      "//breakpad",
       "//components/crash/content/app",
+      "//third_party/breakpad",
       "//third_party/ocmock",
     ]
   }
@@ -5096,12 +5096,12 @@
       ":test_support",
       "//base/test:run_all_unittests",
       "//base/test:test_support",
-      "//breakpad:client",
       "//chrome/browser",
       "//chrome/child",
       "//components/crash/core/common",
       "//components/flags_ui:switches",
       "//gpu/config:crash_keys",
+      "//third_party/breakpad:client",
     ]
   }
 }
diff --git a/chrome/test/data/policy/policy_test_cases.json b/chrome/test/data/policy/policy_test_cases.json
index 3308998..092dbe6 100644
--- a/chrome/test/data/policy/policy_test_cases.json
+++ b/chrome/test/data/policy/policy_test_cases.json
@@ -3249,6 +3249,16 @@
     ]
   },
 
+  "TPMFirmwareUpdateSettings": {
+    "os": ["chromeos"],
+    "test_policy": {
+      "allow-user-initiated-powerwash": true
+    },
+    "pref_mappings": [
+      { "pref": "cros.tpm_firmware_update_settings" }
+    ]
+  },
+
 
   "----- Chrome Frame policies -------------------------------------------": {},
 
diff --git a/chrome_elf/DEPS b/chrome_elf/DEPS
index 484d1cf..978ee22 100644
--- a/chrome_elf/DEPS
+++ b/chrome_elf/DEPS
@@ -1,11 +1,11 @@
 include_rules = [
-  "+sandbox",
-  "+breakpad/src/client",
   "+chrome/app/chrome_crash_reporter_client_win.h",
   "+chrome/common/chrome_switches.h",
   "+chrome/common/chrome_version.h",
   "+chrome/install_static",
-  "+third_party/crashpad/crashpad/client/crashpad_client.h",
   "+components/crash/content/app/crashpad.h",
   "+components/crash/core/common/crash_keys.h",
+  "+sandbox",
+  "+third_party/breakpad/breakpad/src/client",
+  "+third_party/crashpad/crashpad/client/crashpad_client.h",
 ]
diff --git a/chromecast/app/BUILD.gn b/chromecast/app/BUILD.gn
index 885334c..928c715 100644
--- a/chromecast/app/BUILD.gn
+++ b/chromecast/app/BUILD.gn
@@ -50,9 +50,9 @@
 
   if (is_android) {
     deps += [
-      "//breakpad:client",
       "//chromecast/base:cast_version",
       "//chromecast/browser:jni_headers",
+      "//third_party/breakpad:client",
     ]
   }
 }
diff --git a/chromecast/app/android/DEPS b/chromecast/app/android/DEPS
index f9e9e330..78006b0 100644
--- a/chromecast/app/android/DEPS
+++ b/chromecast/app/android/DEPS
@@ -1,6 +1,6 @@
 include_rules = [
-  "+breakpad",
   "+chromecast/android",
   "+chromecast/browser/android",
   "+jni",
+  "+third_party/breakpad",
 ]
diff --git a/chromecast/app/android/crash_handler.cc b/chromecast/app/android/crash_handler.cc
index 194f0bc..44f75a4 100644
--- a/chromecast/app/android/crash_handler.cc
+++ b/chromecast/app/android/crash_handler.cc
@@ -13,14 +13,14 @@
 #include "base/files/file_path.h"
 #include "base/logging.h"
 #include "base/strings/string_number_conversions.h"
-#include "breakpad/src/client/linux/handler/exception_handler.h"
-#include "breakpad/src/client/linux/handler/minidump_descriptor.h"
 #include "chromecast/app/android/cast_crash_reporter_client_android.h"
 #include "chromecast/base/version.h"
 #include "components/crash/content/app/breakpad_linux.h"
 #include "components/crash/content/app/crash_reporter_client.h"
 #include "content/public/common/content_switches.h"
 #include "jni/CastCrashHandler_jni.h"
+#include "third_party/breakpad/breakpad/src/client/linux/handler/exception_handler.h"
+#include "third_party/breakpad/breakpad/src/client/linux/handler/minidump_descriptor.h"
 
 namespace {
 
diff --git a/chromecast/crash/BUILD.gn b/chromecast/crash/BUILD.gn
index e9da31b..7f40688 100644
--- a/chromecast/crash/BUILD.gn
+++ b/chromecast/crash/BUILD.gn
@@ -32,13 +32,13 @@
 
   deps = [
     "//base",
-    "//breakpad:client",
     "//chromecast/base",
     "//chromecast/base:cast_version",
     "//components/crash/core/common",
     "//components/metrics",
     "//components/prefs",
     "//gpu/config:crash_keys",
+    "//third_party/breakpad:client",
   ]
 
   if (chromecast_branding == "public") {
@@ -97,13 +97,13 @@
       "//base",
       "//base/test:run_all_unittests",
       "//base/test:test_support",
-      "//breakpad:client",
       "//chromecast/base:cast_sys_info",
       "//chromecast/base:test_support",
       "//components/metrics",
       "//components/prefs:test_support",
       "//testing/gmock",
       "//testing/gtest",
+      "//third_party/breakpad:client",
     ]
   }
 }
diff --git a/chromecast/crash/DEPS b/chromecast/crash/DEPS
index f5bcf98..83894d3 100644
--- a/chromecast/crash/DEPS
+++ b/chromecast/crash/DEPS
@@ -1,5 +1,5 @@
 include_rules = [
-  "+breakpad",
   "+components/crash/core/common",
   "+gpu/config/gpu_crash_keys.h",
+  "+third_party/breakpad",
 ]
diff --git a/chromecast/crash/cast_crashdump_uploader.cc b/chromecast/crash/cast_crashdump_uploader.cc
index b02eee7e..1454f158 100644
--- a/chromecast/crash/cast_crashdump_uploader.cc
+++ b/chromecast/crash/cast_crashdump_uploader.cc
@@ -10,12 +10,13 @@
 #include "base/memory/ptr_util.h"
 // TODO(slan): Find a replacement for LibcurlWrapper in Chromium to remove the
 // breakpad dependency.
-#include "breakpad/src/common/linux/libcurl_wrapper.h"
+#include "third_party/breakpad/breakpad/src/common/linux/libcurl_wrapper.h"
 
 namespace chromecast {
 namespace {
 
-// Keep these in sync with "//breakpad/src/client/mac/sender/uploader.mm"
+// Keep these in sync with
+// //third_party/breakpad/breakpad/src/client/mac/sender/uploader.mm
 const char kProdKey[] = "prod";
 const char kVerKey[] = "ver";
 const char kGuidKey[] = "guid";
diff --git a/chromecast/crash/cast_crashdump_uploader_unittest.cc b/chromecast/crash/cast_crashdump_uploader_unittest.cc
index b9daa80..97f9e402 100644
--- a/chromecast/crash/cast_crashdump_uploader_unittest.cc
+++ b/chromecast/crash/cast_crashdump_uploader_unittest.cc
@@ -6,11 +6,11 @@
 
 #include "base/files/file_util.h"
 #include "base/memory/ptr_util.h"
-#include "breakpad/src/common/linux/libcurl_wrapper.h"
 #include "chromecast/base/scoped_temp_file.h"
 #include "chromecast/crash/cast_crashdump_uploader.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
+#include "third_party/breakpad/breakpad/src/common/linux/libcurl_wrapper.h"
 
 namespace chromecast {
 
@@ -186,4 +186,4 @@
   ASSERT_TRUE(uploader.Upload(nullptr));
 }
 
-}  // namespace chromeceast
+}  // namespace chromecast
diff --git a/chromeos/CHROMEOS_LKGM b/chromeos/CHROMEOS_LKGM
index f106c4f3..ad9e23b2 100644
--- a/chromeos/CHROMEOS_LKGM
+++ b/chromeos/CHROMEOS_LKGM
@@ -1 +1 @@
-9916.0.0
\ No newline at end of file
+9972.0.0
diff --git a/chromeos/settings/cros_settings_names.cc b/chromeos/settings/cros_settings_names.cc
index 2113692..f71b9e2 100644
--- a/chromeos/settings/cros_settings_names.cc
+++ b/chromeos/settings/cros_settings_names.cc
@@ -275,4 +275,9 @@
 // A list of strings representing the list of device printer ids which are
 // accessible.
 const char kDevicePrintersWhitelist[] = "cros.device.printers_whitelist";
+
+// A dictionary containing parameters controlling the TPM firmware update
+// functionality.
+const char kTPMFirmwareUpdateSettings[] = "cros.tpm_firmware_update_settings";
+
 }  // namespace chromeos
diff --git a/chromeos/settings/cros_settings_names.h b/chromeos/settings/cros_settings_names.h
index 7250a91..4962884 100644
--- a/chromeos/settings/cros_settings_names.h
+++ b/chromeos/settings/cros_settings_names.h
@@ -128,6 +128,8 @@
 CHROMEOS_EXPORT extern const char kDevicePrintersBlacklist[];
 CHROMEOS_EXPORT extern const char kDevicePrintersWhitelist[];
 
+CHROMEOS_EXPORT extern const char kTPMFirmwareUpdateSettings[];
+
 }  // namespace chromeos
 
 #endif  // CHROMEOS_SETTINGS_CROS_SETTINGS_NAMES_H_
diff --git a/components/arc/arc_session.cc b/components/arc/arc_session.cc
index 05113e7..ef73499f 100644
--- a/components/arc/arc_session.cc
+++ b/components/arc/arc_session.cc
@@ -514,10 +514,8 @@
   arc_bridge_host_ = base::MakeUnique<ArcBridgeHostImpl>(arc_bridge_service_,
                                                          std::move(instance));
 
-  VLOG(2) << "Mojo is connected. ARC is running.";
+  VLOG(0) << "ARC ready.";
   state_ = State::RUNNING;
-  for (auto& observer : observer_list_)
-    observer.OnSessionReady();
 }
 
 void ArcSessionImpl::Stop() {
diff --git a/components/arc/arc_session.h b/components/arc/arc_session.h
index 4fa74c3..be033514 100644
--- a/components/arc/arc_session.h
+++ b/components/arc/arc_session.h
@@ -27,9 +27,6 @@
   // Observer to notify events corresponding to one ARC session run.
   class Observer {
    public:
-    // Called when the connection with ARC instance has been established.
-    virtual void OnSessionReady() = 0;
-
     // Called when ARC instance is stopped. This is called exactly once
     // per instance which is Start()ed.
     // |was_running| is true, if the stopped instance was fully set up
@@ -46,17 +43,15 @@
   virtual ~ArcSession();
 
   // Starts an instance for login screen. The instance is not a fully functional
-  // one, and Observer::OnSessionReady() will *never* be called.
+  // one.
   virtual void StartForLoginScreen() = 0;
 
   // Returns true if StartForLoginScreen() has been called but Start() hasn't.
   virtual bool IsForLoginScreen() = 0;
 
-  // Starts and bootstraps a connection with the instance. The Observer's
-  // OnSessionReady() will be called if the bootstrapping is successful, or
-  // OnSessionStopped() if it is not. Start() should not be called twice or
-  // more. When StartForLoginScreen() has already been called, Start() turns
-  // the mini instance to a fully functional one.
+  // Starts and bootstraps a connection with the instance. Start() should not
+  // be called twice or more. When StartForLoginScreen() has already been
+  // called, Start() turns the mini instance to a fully functional one.
   virtual void Start() = 0;
 
   // Requests to stop the currently-running instance whether or not it is for
diff --git a/components/arc/arc_session_runner.cc b/components/arc/arc_session_runner.cc
index 81e8e79..6c70a61 100644
--- a/components/arc/arc_session_runner.cc
+++ b/components/arc/arc_session_runner.cc
@@ -210,13 +210,6 @@
     observer.OnSessionRestarting();
 }
 
-void ArcSessionRunner::OnSessionReady() {
-  DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
-  DCHECK(arc_session_);
-  DCHECK(!restart_timer_.IsRunning());
-  VLOG(0) << "ARC ready";
-}
-
 void ArcSessionRunner::OnSessionStopped(ArcStopReason stop_reason,
                                         bool was_running) {
   DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
diff --git a/components/arc/arc_session_runner.h b/components/arc/arc_session_runner.h
index 37dfe40..4ff6c409d 100644
--- a/components/arc/arc_session_runner.h
+++ b/components/arc/arc_session_runner.h
@@ -93,7 +93,6 @@
   void RestartArcSession();
 
   // ArcSession::Observer:
-  void OnSessionReady() override;
   void OnSessionStopped(ArcStopReason reason, bool was_running) override;
 
   // chromeos::SessionManagerClient::Observer:
diff --git a/components/arc/test/fake_arc_session.cc b/components/arc/test/fake_arc_session.cc
index d46afadf..4ee5854 100644
--- a/components/arc/test/fake_arc_session.cc
+++ b/components/arc/test/fake_arc_session.cc
@@ -34,8 +34,6 @@
       observer.OnSessionStopped(boot_failure_reason_, false);
   } else if (!boot_suspended_) {
     running_ = true;
-    for (auto& observer : observer_list_)
-      observer.OnSessionReady();
   }
 }
 
diff --git a/components/arc/test/fake_arc_session.h b/components/arc/test/fake_arc_session.h
index d360eef..1b11460 100644
--- a/components/arc/test/fake_arc_session.h
+++ b/components/arc/test/fake_arc_session.h
@@ -37,8 +37,7 @@
   // will be called when Start() or StartForLoginScreen() is called.
   void EnableBootFailureEmulation(ArcStopReason reason);
 
-  // Emulate Start() is suspended at some phase, before OnSessionReady() is
-  // invoked.
+  // Emulate Start() is suspended at some phase.
   void SuspendBoot();
 
   // Returns FakeArcSession instance. This can be used for a factory
diff --git a/components/component_updater/BUILD.gn b/components/component_updater/BUILD.gn
index 210a6be..166b3a0f 100644
--- a/components/component_updater/BUILD.gn
+++ b/components/component_updater/BUILD.gn
@@ -4,6 +4,8 @@
 
 static_library("component_updater") {
   sources = [
+    "component_installer.cc",
+    "component_installer.h",
     "component_updater_paths.cc",
     "component_updater_paths.h",
     "component_updater_service.cc",
@@ -15,8 +17,6 @@
     "component_updater_url_constants.h",
     "configurator_impl.cc",
     "configurator_impl.h",
-    "default_component_installer.cc",
-    "default_component_installer.h",
     "pref_names.cc",
     "pref_names.h",
     "timer.cc",
@@ -49,9 +49,9 @@
 source_set("unit_tests") {
   testonly = true
   sources = [
+    "component_installer_unittest.cc",
     "component_updater_service_unittest.cc",
     "configurator_impl_unittest.cc",
-    "default_component_installer_unittest.cc",
     "timer_unittest.cc",
   ]
 
diff --git a/components/component_updater/README.md b/components/component_updater/README.md
index 53ce47c7..bf3fc31 100644
--- a/components/component_updater/README.md
+++ b/components/component_updater/README.md
@@ -55,10 +55,10 @@
 rendered as hexadecimal using the characters `a-p` (rather than `0-9a-f`).
 
 New components should use
-[`default_component_installer`](default_component_installer.h)
+[`component_installer`](component_installer.h)
 if possible, as this provides you with transparent differential updates, version
-management, and more. You must provide a `ComponentInstallerTraits` object to
-a new `DefaultComponentInstaller`.
+management, and more. You must provide a `ComponentInstallerPolicy` object to
+a new `ComponentInstaller`.
 [file\_type\_policies\_component\_installer.cc](../../chrome/browser/component_updater/file_type_policies_component_installer.cc)
 is a good example to work from.
 
@@ -68,7 +68,7 @@
 ### Bundle with the Chrome Installer (Optional)
 If you need the guarantee that some implementation of your component is always
 available, you must bundle a component implementation with the browser itself.
-If you are using `DefaultComponentInstaller`, you simply need to make sure that
+If you are using `ComponentInstaller`, you simply need to make sure that
 your component implementation (and a corresponding manifest.json file) are
 written to DIR\_COMPONENTS as part of the build. The manifest.json file must
 state the version of this component implementation, and the files must be
diff --git a/components/component_updater/default_component_installer.cc b/components/component_updater/component_installer.cc
similarity index 77%
rename from components/component_updater/default_component_installer.cc
rename to components/component_updater/component_installer.cc
index a5262127..9ff52eb 100644
--- a/components/component_updater/default_component_installer.cc
+++ b/components/component_updater/component_installer.cc
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "components/component_updater/default_component_installer.h"
+#include "components/component_updater/component_installer.h"
 
 #include <utility>
 
@@ -43,54 +43,51 @@
 
 }  // namespace
 
-ComponentInstallerTraits::~ComponentInstallerTraits() {}
+ComponentInstallerPolicy::~ComponentInstallerPolicy() {}
 
-DefaultComponentInstaller::RegistrationInfo::RegistrationInfo()
+ComponentInstaller::RegistrationInfo::RegistrationInfo()
     : version(kNullVersion) {}
 
-DefaultComponentInstaller::RegistrationInfo::~RegistrationInfo() = default;
+ComponentInstaller::RegistrationInfo::~RegistrationInfo() = default;
 
-DefaultComponentInstaller::DefaultComponentInstaller(
-    std::unique_ptr<ComponentInstallerTraits> installer_traits)
+ComponentInstaller::ComponentInstaller(
+    std::unique_ptr<ComponentInstallerPolicy> installer_policy)
     : current_version_(kNullVersion),
       main_task_runner_(base::ThreadTaskRunnerHandle::Get()) {
-  installer_traits_ = std::move(installer_traits);
+  installer_policy_ = std::move(installer_policy);
 }
 
-DefaultComponentInstaller::~DefaultComponentInstaller() {
-}
+ComponentInstaller::~ComponentInstaller() {}
 
-void DefaultComponentInstaller::Register(
-    ComponentUpdateService* cus,
-    const base::Closure& callback) {
-  DCHECK(thread_checker_.CalledOnValidThread());
+void ComponentInstaller::Register(ComponentUpdateService* cus,
+                                  const base::Closure& callback) {
+  DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
   task_runner_ = base::CreateSequencedTaskRunnerWithTraits(
       {base::MayBlock(), base::TaskPriority::BACKGROUND,
        base::TaskShutdownBehavior::SKIP_ON_SHUTDOWN});
 
-  if (!installer_traits_) {
-    LOG(ERROR) << "A DefaultComponentInstaller has been created but "
-               << "has no installer traits.";
+  if (!installer_policy_) {
+    LOG(ERROR) << "A ComponentInstaller has been created but "
+               << "has no installer policy.";
     return;
   }
 
   auto registration_info = base::MakeRefCounted<RegistrationInfo>();
   task_runner_->PostTaskAndReply(
       FROM_HERE,
-      base::Bind(&DefaultComponentInstaller::StartRegistration, this,
+      base::Bind(&ComponentInstaller::StartRegistration, this,
                  registration_info, cus),
-      base::Bind(&DefaultComponentInstaller::FinishRegistration, this,
+      base::Bind(&ComponentInstaller::FinishRegistration, this,
                  registration_info, cus, callback));
 }
 
-void DefaultComponentInstaller::OnUpdateError(int error) {
+void ComponentInstaller::OnUpdateError(int error) {
   LOG(ERROR) << "Component update error: " << error;
 }
 
-Result DefaultComponentInstaller::InstallHelper(
-    const base::DictionaryValue& manifest,
-    const base::FilePath& unpack_path,
-    const base::FilePath& install_path) {
+Result ComponentInstaller::InstallHelper(const base::DictionaryValue& manifest,
+                                         const base::FilePath& unpack_path,
+                                         const base::FilePath& install_path) {
   VLOG(1) << "InstallHelper: unpack_path=" << unpack_path.AsUTF8Unsafe()
           << " install_path=" << install_path.AsUTF8Unsafe();
 
@@ -107,19 +104,19 @@
 #endif  // defined(OS_CHROMEOS)
 
   const auto result =
-      installer_traits_->OnCustomInstall(manifest, install_path);
+      installer_policy_->OnCustomInstall(manifest, install_path);
   if (result.error) {
     PLOG(ERROR) << "CustomInstall failed.";
     return result;
   }
-  if (!installer_traits_->VerifyInstallation(manifest, install_path)) {
+  if (!installer_policy_->VerifyInstallation(manifest, install_path)) {
     return Result(InstallError::INSTALL_VERIFICATION_FAILED);
   }
 
   return Result(InstallError::NONE);
 }
 
-Result DefaultComponentInstaller::Install(
+Result ComponentInstaller::Install(
     std::unique_ptr<base::DictionaryValue> manifest,
     const base::FilePath& unpack_path) {
   std::string manifest_version;
@@ -141,7 +138,7 @@
   base::FilePath install_path;
   if (!PathService::Get(DIR_COMPONENT_USER, &install_path))
     return Result(InstallError::NO_DIR_COMPONENT_USER);
-  install_path = install_path.Append(installer_traits_->GetRelativeInstallDir())
+  install_path = install_path.Append(installer_policy_->GetRelativeInstallDir())
                      .AppendASCII(version.GetString());
   if (base::PathExists(install_path)) {
     if (!base::DeleteFile(install_path, true))
@@ -160,33 +157,31 @@
   current_install_dir_ = install_path;
 
   main_task_runner_->PostTask(
-      FROM_HERE, base::Bind(&DefaultComponentInstaller::ComponentReady, this,
+      FROM_HERE, base::Bind(&ComponentInstaller::ComponentReady, this,
                             base::Passed(std::move(manifest))));
 
   return result;
 }
 
-bool DefaultComponentInstaller::GetInstalledFile(
-    const std::string& file,
-    base::FilePath* installed_file) {
+bool ComponentInstaller::GetInstalledFile(const std::string& file,
+                                          base::FilePath* installed_file) {
   if (current_version_ == base::Version(kNullVersion))
     return false;  // No component has been installed yet.
   *installed_file = current_install_dir_.AppendASCII(file);
   return true;
 }
 
-bool DefaultComponentInstaller::Uninstall() {
-  DCHECK(thread_checker_.CalledOnValidThread());
+bool ComponentInstaller::Uninstall() {
+  DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
   task_runner_->PostTask(
-      FROM_HERE,
-      base::Bind(&DefaultComponentInstaller::UninstallOnTaskRunner, this));
+      FROM_HERE, base::Bind(&ComponentInstaller::UninstallOnTaskRunner, this));
   return true;
 }
 
-bool DefaultComponentInstaller::FindPreinstallation(
+bool ComponentInstaller::FindPreinstallation(
     const base::FilePath& root,
     const scoped_refptr<RegistrationInfo>& registration_info) {
-  base::FilePath path = root.Append(installer_traits_->GetRelativeInstallDir());
+  base::FilePath path = root.Append(installer_policy_->GetRelativeInstallDir());
   if (!base::PathExists(path)) {
     DVLOG(1) << "Relative install dir does not exist: " << path.MaybeAsASCII();
     return false;
@@ -199,7 +194,7 @@
     return false;
   }
 
-  if (!installer_traits_->VerifyInstallation(*manifest, path)) {
+  if (!installer_policy_->VerifyInstallation(*manifest, path)) {
     DVLOG(1) << "Installation verification failed: " << path.MaybeAsASCII();
     return false;
   }
@@ -216,7 +211,7 @@
     return false;
   }
 
-  VLOG(1) << "Preinstalled component found for " << installer_traits_->GetName()
+  VLOG(1) << "Preinstalled component found for " << installer_policy_->GetName()
           << " at " << path.MaybeAsASCII() << " with version " << version
           << ".";
 
@@ -227,10 +222,10 @@
   return true;
 }
 
-void DefaultComponentInstaller::StartRegistration(
+void ComponentInstaller::StartRegistration(
     const scoped_refptr<RegistrationInfo>& registration_info,
     ComponentUpdateService* cus) {
-  VLOG(1) << __func__ << " for " << installer_traits_->GetName();
+  VLOG(1) << __func__ << " for " << installer_policy_->GetName();
   DCHECK(task_runner_.get());
   DCHECK(task_runner_->RunsTasksInCurrentSequence());
 
@@ -258,10 +253,10 @@
   base::FilePath base_dir;
   if (!PathService::Get(DIR_COMPONENT_USER, &base_dir))
     return;
-  base_dir = base_dir.Append(installer_traits_->GetRelativeInstallDir());
+  base_dir = base_dir.Append(installer_policy_->GetRelativeInstallDir());
   if (!base::PathExists(base_dir) && !base::CreateDirectory(base_dir)) {
     PLOG(ERROR) << "Could not create the base directory for "
-                << installer_traits_->GetName() << " ("
+                << installer_policy_->GetName() << " ("
                 << base_dir.MaybeAsASCII() << ").";
     return;
   }
@@ -274,10 +269,9 @@
 #endif  // defined(OS_CHROMEOS)
 
   std::vector<base::FilePath> older_paths;
-  base::FileEnumerator file_enumerator(
-      base_dir, false, base::FileEnumerator::DIRECTORIES);
-  for (base::FilePath path = file_enumerator.Next();
-       !path.value().empty();
+  base::FileEnumerator file_enumerator(base_dir, false,
+                                       base::FileEnumerator::DIRECTORIES);
+  for (base::FilePath path = file_enumerator.Next(); !path.value().empty();
        path = file_enumerator.Next()) {
     base::Version version(path.BaseName().MaybeAsASCII());
 
@@ -295,9 +289,9 @@
 
     std::unique_ptr<base::DictionaryValue> manifest =
         update_client::ReadManifest(path);
-    if (!manifest || !installer_traits_->VerifyInstallation(*manifest, path)) {
+    if (!manifest || !installer_policy_->VerifyInstallation(*manifest, path)) {
       PLOG(ERROR) << "Failed to read manifest or verify installation for "
-                  << installer_traits_->GetName() << " (" << path.MaybeAsASCII()
+                  << installer_policy_->GetName() << " (" << path.MaybeAsASCII()
                   << ").";
       older_paths.push_back(path);
       continue;
@@ -327,7 +321,7 @@
     base::DeleteFile(older_path, true);
 }
 
-void DefaultComponentInstaller::UninstallOnTaskRunner() {
+void ComponentInstaller::UninstallOnTaskRunner() {
   DCHECK(task_runner_.get());
   DCHECK(task_runner_->RunsTasksInCurrentSequence());
 
@@ -361,33 +355,33 @@
   }
 }
 
-void DefaultComponentInstaller::FinishRegistration(
+void ComponentInstaller::FinishRegistration(
     const scoped_refptr<RegistrationInfo>& registration_info,
     ComponentUpdateService* cus,
     const base::Closure& callback) {
-  VLOG(1) << __func__ << " for " << installer_traits_->GetName();
-  DCHECK(thread_checker_.CalledOnValidThread());
+  VLOG(1) << __func__ << " for " << installer_policy_->GetName();
+  DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
 
   current_install_dir_ = registration_info->install_dir;
   current_version_ = registration_info->version;
   current_fingerprint_ = registration_info->fingerprint;
 
   update_client::CrxComponent crx;
-  installer_traits_->GetHash(&crx.pk_hash);
+  installer_policy_->GetHash(&crx.pk_hash);
   crx.installer = this;
   crx.version = current_version_;
   crx.fingerprint = current_fingerprint_;
-  crx.name = installer_traits_->GetName();
-  crx.installer_attributes = installer_traits_->GetInstallerAttributes();
+  crx.name = installer_policy_->GetName();
+  crx.installer_attributes = installer_policy_->GetInstallerAttributes();
   crx.requires_network_encryption =
-      installer_traits_->RequiresNetworkEncryption();
-  crx.handled_mime_types = installer_traits_->GetMimeTypes();
+      installer_policy_->RequiresNetworkEncryption();
+  crx.handled_mime_types = installer_policy_->GetMimeTypes();
   crx.supports_group_policy_enable_component_updates =
-      installer_traits_->SupportsGroupPolicyEnabledComponentUpdates();
+      installer_policy_->SupportsGroupPolicyEnabledComponentUpdates();
 
   if (!cus->RegisterComponent(crx)) {
     LOG(ERROR) << "Component registration failed for "
-               << installer_traits_->GetName();
+               << installer_policy_->GetName();
     return;
   }
 
@@ -395,18 +389,18 @@
     callback.Run();
 
   if (!registration_info->manifest) {
-    DVLOG(1) << "No component found for " << installer_traits_->GetName();
+    DVLOG(1) << "No component found for " << installer_policy_->GetName();
     return;
   }
 
   ComponentReady(std::move(registration_info->manifest));
 }
 
-void DefaultComponentInstaller::ComponentReady(
+void ComponentInstaller::ComponentReady(
     std::unique_ptr<base::DictionaryValue> manifest) {
   VLOG(1) << "Component ready, version " << current_version_.GetString()
           << " in " << current_install_dir_.value();
-  installer_traits_->ComponentReady(current_version_, current_install_dir_,
+  installer_policy_->ComponentReady(current_version_, current_install_dir_,
                                     std::move(manifest));
 }
 
diff --git a/components/component_updater/default_component_installer.h b/components/component_updater/component_installer.h
similarity index 87%
rename from components/component_updater/default_component_installer.h
rename to components/component_updater/component_installer.h
index 59ce39b..f854a31 100644
--- a/components/component_updater/default_component_installer.h
+++ b/components/component_updater/component_installer.h
@@ -2,8 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef COMPONENTS_COMPONENT_UPDATER_DEFAULT_COMPONENT_INSTALLER_H_
-#define COMPONENTS_COMPONENT_UPDATER_DEFAULT_COMPONENT_INSTALLER_H_
+#ifndef COMPONENTS_COMPONENT_UPDATER_COMPONENT_INSTALLER_H_
+#define COMPONENTS_COMPONENT_UPDATER_COMPONENT_INSTALLER_H_
 
 #include <stdint.h>
 
@@ -29,13 +29,13 @@
 
 class ComponentUpdateService;
 
-// Components should use a DefaultComponentInstaller by defining a class that
-// implements the members of ComponentInstallerTraits, and then registering a
-// DefaultComponentInstaller that has been constructed with an instance of that
+// Components should use a ComponentInstaller by defining a class that
+// implements the members of ComponentInstallerPolicy, and then registering a
+// ComponentInstaller that has been constructed with an instance of that
 // class.
-class ComponentInstallerTraits {
+class ComponentInstallerPolicy {
  public:
-  virtual ~ComponentInstallerTraits();
+  virtual ~ComponentInstallerPolicy();
 
   // Verifies that a working installation resides within the directory specified
   // by |install_dir|. |install_dir| is of the form <base directory>/<version>.
@@ -101,13 +101,13 @@
   virtual update_client::InstallerAttributes GetInstallerAttributes() const = 0;
 };
 
-// A DefaultComponentInstaller is intended to be final, and not derived from.
-// Customization must be provided by passing a ComponentInstallerTraits object
+// A ComponentInstaller is intended to be final, and not derived from.
+// Customization must be provided by passing a ComponentInstallerPolicy object
 // to the constructor.
-class DefaultComponentInstaller : public update_client::CrxInstaller {
+class ComponentInstaller : public update_client::CrxInstaller {
  public:
-  DefaultComponentInstaller(
-      std::unique_ptr<ComponentInstallerTraits> installer_traits);
+  ComponentInstaller(
+      std::unique_ptr<ComponentInstallerPolicy> installer_policy);
 
   // Registers the component for update checks and installs.
   // The passed |callback| will be called once the initial check for installed
@@ -141,7 +141,7 @@
     DISALLOW_COPY_AND_ASSIGN(RegistrationInfo);
   };
 
-  ~DefaultComponentInstaller() override;
+  ~ComponentInstaller() override;
 
   // If there is a installation of the component set up alongside Chrome's
   // files (as opposed to in the user data directory), sets current_* to the
@@ -168,17 +168,17 @@
   base::Version current_version_;
   std::string current_fingerprint_;
 
-  std::unique_ptr<ComponentInstallerTraits> installer_traits_;
+  std::unique_ptr<ComponentInstallerPolicy> installer_policy_;
   scoped_refptr<base::SequencedTaskRunner> task_runner_;
 
   // Posts responses back to the main thread.
   scoped_refptr<base::SingleThreadTaskRunner> main_task_runner_;
 
-  base::ThreadChecker thread_checker_;
+  THREAD_CHECKER(thread_checker_);
 
-  DISALLOW_COPY_AND_ASSIGN(DefaultComponentInstaller);
+  DISALLOW_COPY_AND_ASSIGN(ComponentInstaller);
 };
 
 }  // namespace component_updater
 
-#endif  // COMPONENTS_COMPONENT_UPDATER_DEFAULT_COMPONENT_INSTALLER_H_
+#endif  // COMPONENTS_COMPONENT_UPDATER_COMPONENT_INSTALLER_H_
diff --git a/components/component_updater/default_component_installer_unittest.cc b/components/component_updater/component_installer_unittest.cc
similarity index 87%
rename from components/component_updater/default_component_installer_unittest.cc
rename to components/component_updater/component_installer_unittest.cc
index 4fa8646..ec4aad9 100644
--- a/components/component_updater/default_component_installer_unittest.cc
+++ b/components/component_updater/component_installer_unittest.cc
@@ -20,10 +20,10 @@
 #include "base/test/scoped_task_environment.h"
 #include "base/threading/thread_task_runner_handle.h"
 #include "base/version.h"
+#include "components/component_updater/component_installer.h"
 #include "components/component_updater/component_updater_paths.h"
 #include "components/component_updater/component_updater_service.h"
 #include "components/component_updater/component_updater_service_internal.h"
-#include "components/component_updater/default_component_installer.h"
 #include "components/update_client/component_unpacker.h"
 #include "components/update_client/crx_update_item.h"
 #include "components/update_client/test_configurator.h"
@@ -91,10 +91,10 @@
   ~MockUpdateClient() override {}
 };
 
-class FakeInstallerTraits : public ComponentInstallerTraits {
+class FakeInstallerPolicy : public ComponentInstallerPolicy {
  public:
-  FakeInstallerTraits() {}
-  ~FakeInstallerTraits() override {}
+  FakeInstallerPolicy() {}
+  ~FakeInstallerPolicy() override {}
 
   bool VerifyInstallation(const base::DictionaryValue& manifest,
                           const base::FilePath& dir) const override {
@@ -143,10 +143,10 @@
   }
 };
 
-class DefaultComponentInstallerTest : public testing::Test {
+class ComponentInstallerTest : public testing::Test {
  public:
-  DefaultComponentInstallerTest();
-  ~DefaultComponentInstallerTest() override;
+  ComponentInstallerTest();
+  ~ComponentInstallerTest() override;
 
   MockUpdateClient& update_client() { return *update_client_; }
   ComponentUpdateService* component_updater() {
@@ -177,31 +177,31 @@
   ComponentUnpacker::Result result_;
 };
 
-DefaultComponentInstallerTest::DefaultComponentInstallerTest() {
+ComponentInstallerTest::ComponentInstallerTest() {
   EXPECT_CALL(update_client(), AddObserver(_)).Times(1);
   component_updater_ =
       base::MakeUnique<CrxUpdateService>(config_, update_client_);
 }
 
-DefaultComponentInstallerTest::~DefaultComponentInstallerTest() {
+ComponentInstallerTest::~ComponentInstallerTest() {
   EXPECT_CALL(update_client(), RemoveObserver(_)).Times(1);
   component_updater_.reset();
 }
 
-void DefaultComponentInstallerTest::RunThreads() {
+void ComponentInstallerTest::RunThreads() {
   runloop_.Run();
 }
 
-void DefaultComponentInstallerTest::Unpack(const base::FilePath& crx_path) {
+void ComponentInstallerTest::Unpack(const base::FilePath& crx_path) {
   auto component_unpacker = base::MakeRefCounted<ComponentUnpacker>(
       std::vector<uint8_t>(std::begin(kSha256Hash), std::end(kSha256Hash)),
       crx_path, nullptr, nullptr);
-  component_unpacker->Unpack(base::Bind(
-      &DefaultComponentInstallerTest::UnpackComplete, base::Unretained(this)));
+  component_unpacker->Unpack(base::Bind(&ComponentInstallerTest::UnpackComplete,
+                                        base::Unretained(this)));
   RunThreads();
 }
 
-void DefaultComponentInstallerTest::UnpackComplete(
+void ComponentInstallerTest::UnpackComplete(
     const ComponentUnpacker::Result& result) {
   result_ = result;
 
@@ -213,10 +213,10 @@
 
 }  // namespace
 
-// Tests that the component metadata is propagated from the default
-// component installer and its component traits, through the instance of the
-// CrxComponent, to the component updater service.
-TEST_F(DefaultComponentInstallerTest, RegisterComponent) {
+// Tests that the component metadata is propagated from the component installer
+// and its component policy, through the instance of the CrxComponent, to the
+// component updater service.
+TEST_F(ComponentInstallerTest, RegisterComponent) {
   class LoopHandler {
    public:
     LoopHandler(int max_cnt, const base::Closure& quit_closure)
@@ -249,8 +249,8 @@
   EXPECT_CALL(update_client(), GetCrxUpdateState(id, _)).Times(1);
   EXPECT_CALL(update_client(), Stop()).Times(1);
 
-  auto installer = base::MakeRefCounted<DefaultComponentInstaller>(
-      base::MakeUnique<FakeInstallerTraits>());
+  auto installer = base::MakeRefCounted<ComponentInstaller>(
+      base::MakeUnique<FakeInstallerPolicy>());
   installer->Register(component_updater(), base::Closure());
 
   RunThreads();
@@ -275,9 +275,9 @@
 }
 
 // Tests that the unpack path is removed when the install succeeded.
-TEST_F(DefaultComponentInstallerTest, UnpackPathInstallSuccess) {
-  auto installer = base::MakeRefCounted<DefaultComponentInstaller>(
-      base::MakeUnique<FakeInstallerTraits>());
+TEST_F(ComponentInstallerTest, UnpackPathInstallSuccess) {
+  auto installer = base::MakeRefCounted<ComponentInstaller>(
+      base::MakeUnique<FakeInstallerPolicy>());
 
   Unpack(test_file("jebgalgnebhfojomionfpkfelancnnkf.crx"));
 
@@ -299,9 +299,9 @@
 }
 
 // Tests that the unpack path is removed when the install failed.
-TEST_F(DefaultComponentInstallerTest, UnpackPathInstallError) {
-  auto installer = base::MakeRefCounted<DefaultComponentInstaller>(
-      base::MakeUnique<FakeInstallerTraits>());
+TEST_F(ComponentInstallerTest, UnpackPathInstallError) {
+  auto installer = base::MakeRefCounted<ComponentInstaller>(
+      base::MakeUnique<FakeInstallerPolicy>());
 
   Unpack(test_file("jebgalgnebhfojomionfpkfelancnnkf.crx"));
 
diff --git a/components/component_updater/component_updater_service.h b/components/component_updater/component_updater_service.h
index 72f293e9..32fafea 100644
--- a/components/component_updater/component_updater_service.h
+++ b/components/component_updater/component_updater_service.h
@@ -143,7 +143,7 @@
                                    CrxUpdateItem* item) const = 0;
 
   friend class ::ComponentsUI;
-  FRIEND_TEST_ALL_PREFIXES(DefaultComponentInstallerTest, RegisterComponent);
+  FRIEND_TEST_ALL_PREFIXES(ComponentInstallerTest, RegisterComponent);
 };
 
 using ServiceObserver = ComponentUpdateService::Observer;
diff --git a/components/crash/content/DEPS b/components/crash/content/DEPS
index 9ebc497..ddabec2 100644
--- a/components/crash/content/DEPS
+++ b/components/crash/content/DEPS
@@ -1,3 +1,3 @@
 include_rules = [
-  "+breakpad",
+  "+third_party/breakpad",
 ]
diff --git a/components/crash/content/app/BUILD.gn b/components/crash/content/app/BUILD.gn
index 5b68bc7..8e6bad3 100644
--- a/components/crash/content/app/BUILD.gn
+++ b/components/crash/content/app/BUILD.gn
@@ -15,14 +15,14 @@
     "crash_reporter_client.h",
   ]
 
-  include_dirs = [ "../../../../breakpad/src" ]
+  include_dirs = [ "../../../../third_party/breakpad/breakpad/src" ]
 
   deps = [
     "//base",
   ]
 
   if (is_win) {
-    deps += [ "//breakpad:breakpad_handler" ]
+    deps += [ "//third_party/breakpad:breakpad_handler" ]
   }
 }
 
@@ -213,11 +213,11 @@
 
   if (is_win) {
     deps += [
-      "//breakpad:breakpad_handler",
       "//sandbox",
+      "//third_party/breakpad:breakpad_handler",
     ]
   } else if (is_posix && !is_ios) {
-    deps += [ "//breakpad:client" ]
+    deps += [ "//third_party/breakpad:client" ]
   }
 }
 
@@ -249,18 +249,18 @@
     deps += [
       "//base",
       "//base:base_static",
-      "//breakpad:client",
       "//components/crash/core/common",
       "//content/public/common:result_codes",
       "//sandbox",
+      "//third_party/breakpad:client",
     ]
 
     if (is_mac) {
-      deps += [ "//breakpad" ]
+      deps += [ "//third_party/breakpad" ]
     }
 
     if (is_win) {
-      deps += [ "//breakpad:breakpad_handler" ]
+      deps += [ "//third_party/breakpad:breakpad_handler" ]
       libs = [ "userenv.lib" ]
     }
   }
@@ -299,7 +299,7 @@
   if (is_win) {
     deps += [
       ":run_as_crashpad_handler",
-      "//breakpad:client",
+      "//third_party/breakpad:client",
       "//third_party/crashpad/crashpad/client:client",
       "//third_party/crashpad/crashpad/snapshot:snapshot",
       "//third_party/crashpad/crashpad/util",
diff --git a/components/crash/content/app/breakpad_linux.cc b/components/crash/content/app/breakpad_linux.cc
index 2199920..1800a7d 100644
--- a/components/crash/content/app/breakpad_linux.cc
+++ b/components/crash/content/app/breakpad_linux.cc
@@ -40,16 +40,16 @@
 #include "base/strings/string_split.h"
 #include "base/strings/string_util.h"
 #include "base/threading/thread_checker.h"
-#include "breakpad/src/client/linux/crash_generation/crash_generation_client.h"
-#include "breakpad/src/client/linux/handler/exception_handler.h"
-#include "breakpad/src/client/linux/minidump_writer/directory_reader.h"
-#include "breakpad/src/common/linux/linux_libc_support.h"
-#include "breakpad/src/common/memory.h"
 #include "build/build_config.h"
 #include "components/crash/content/app/breakpad_linux_impl.h"
 #include "components/crash/content/app/crash_reporter_client.h"
 #include "components/crash/core/common/crash_keys.h"
 #include "content/public/common/content_descriptors.h"
+#include "third_party/breakpad/breakpad/src/client/linux/crash_generation/crash_generation_client.h"
+#include "third_party/breakpad/breakpad/src/client/linux/handler/exception_handler.h"
+#include "third_party/breakpad/breakpad/src/client/linux/minidump_writer/directory_reader.h"
+#include "third_party/breakpad/breakpad/src/common/linux/linux_libc_support.h"
+#include "third_party/breakpad/breakpad/src/common/memory.h"
 
 #if defined(OS_ANDROID)
 #include <android/log.h>
@@ -192,8 +192,8 @@
 }
 
 // uint64_t version of my_int_len() from
-// breakpad/src/common/linux/linux_libc_support.h. Return the length of the
-// given, non-negative integer when expressed in base 10.
+// third_party/breakpad/breakpad/src/common/linux/linux_libc_support.h. Return
+// the length of the given, non-negative integer when expressed in base 10.
 unsigned my_uint64_len(uint64_t i) {
   if (!i)
     return 1;
@@ -208,8 +208,8 @@
 }
 
 // uint64_t version of my_uitos() from
-// breakpad/src/common/linux/linux_libc_support.h. Convert a non-negative
-// integer to a string (not null-terminated).
+// third_party/breakpad/breakpad/src/common/linux/linux_libc_support.h. Convert
+// a non-negative integer to a string (not null-terminated).
 void my_uint64tos(char* output, uint64_t i, unsigned i_len) {
   for (unsigned index = i_len; index; --index, i /= 10)
     output[index - 1] = '0' + (i % 10);
diff --git a/components/crash/content/app/breakpad_linux_impl.h b/components/crash/content/app/breakpad_linux_impl.h
index d4eab16..6b224a9 100644
--- a/components/crash/content/app/breakpad_linux_impl.h
+++ b/components/crash/content/app/breakpad_linux_impl.h
@@ -12,8 +12,8 @@
 #include <stdint.h>
 #include <sys/types.h>
 
-#include "breakpad/src/common/simple_string_dictionary.h"
 #include "components/crash/content/app/breakpad_linux.h"
+#include "third_party/breakpad/breakpad/src/common/simple_string_dictionary.h"
 
 namespace breakpad {
 
diff --git a/components/crash/content/app/breakpad_mac.mm b/components/crash/content/app/breakpad_mac.mm
index d7ab1ae6..5ade381 100644
--- a/components/crash/content/app/breakpad_mac.mm
+++ b/components/crash/content/app/breakpad_mac.mm
@@ -26,10 +26,10 @@
 #include "base/strings/sys_string_conversions.h"
 #include "base/threading/platform_thread.h"
 #include "base/threading/thread_restrictions.h"
-#import "breakpad/src/client/mac/Framework/Breakpad.h"
-#include "breakpad/src/common/simple_string_dictionary.h"
 #include "components/crash/content/app/crash_reporter_client.h"
 #include "components/crash/core/common/crash_keys.h"
+#import "third_party/breakpad/breakpad/src/client/mac/Framework/Breakpad.h"
+#include "third_party/breakpad/breakpad/src/common/simple_string_dictionary.h"
 
 using crash_reporter::GetCrashReporterClient;
 
diff --git a/components/crash/content/app/breakpad_win.cc b/components/crash/content/app/breakpad_win.cc
index 0604383e..d5680a8 100644
--- a/components/crash/content/app/breakpad_win.cc
+++ b/components/crash/content/app/breakpad_win.cc
@@ -32,8 +32,6 @@
 #include "base/strings/utf_string_conversions.h"
 #include "base/win/pe_image.h"
 #include "base/win/win_util.h"
-#include "breakpad/src/client/windows/common/ipc_protocol.h"
-#include "breakpad/src/client/windows/handler/exception_handler.h"
 #include "components/crash/content/app/crash_keys_win.h"
 #include "components/crash/content/app/crash_reporter_client.h"
 #include "components/crash/content/app/hard_error_handler_win.h"
@@ -41,6 +39,8 @@
 #include "content/public/common/result_codes.h"
 #include "sandbox/win/src/nt_internals.h"
 #include "sandbox/win/src/sidestep/preamble_patcher.h"
+#include "third_party/breakpad/breakpad/src/client/windows/common/ipc_protocol.h"
+#include "third_party/breakpad/breakpad/src/client/windows/handler/exception_handler.h"
 
 #pragma intrinsic(_AddressOfReturnAddress)
 #pragma intrinsic(_ReturnAddress)
diff --git a/components/crash/content/app/crash_keys_win.cc b/components/crash/content/app/crash_keys_win.cc
index c7ea488..7df7135 100644
--- a/components/crash/content/app/crash_keys_win.cc
+++ b/components/crash/content/app/crash_keys_win.cc
@@ -11,8 +11,8 @@
 #include "base/logging.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/stringprintf.h"
-#include "breakpad/src/client/windows/common/ipc_protocol.h"
 #include "components/crash/content/app/crash_reporter_client.h"
+#include "third_party/breakpad/breakpad/src/client/windows/common/ipc_protocol.h"
 
 namespace breakpad {
 
diff --git a/components/crash/content/app/crash_keys_win_unittest.cc b/components/crash/content/app/crash_keys_win_unittest.cc
index aebe4535..99da0ab 100644
--- a/components/crash/content/app/crash_keys_win_unittest.cc
+++ b/components/crash/content/app/crash_keys_win_unittest.cc
@@ -9,10 +9,10 @@
 #include "base/command_line.h"
 #include "base/files/file_path.h"
 #include "base/strings/stringprintf.h"
-#include "breakpad/src/client/windows/common/ipc_protocol.h"
 #include "components/crash/content/app/crash_reporter_client.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
+#include "third_party/breakpad/breakpad/src/client/windows/common/ipc_protocol.h"
 
 namespace breakpad {
 
diff --git a/components/crash/content/app/crash_reporter_client.h b/components/crash/content/app/crash_reporter_client.h
index 9f69c193..46ba162 100644
--- a/components/crash/content/app/crash_reporter_client.h
+++ b/components/crash/content/app/crash_reporter_client.h
@@ -20,8 +20,8 @@
 
 #if defined(OS_MACOSX)
 // We don't want to directly include
-// breakpad/src/client/mac/Framework/Breakpad.h here, so we repeat the
-// definition of BreakpadRef.
+// third_party/breakpad/breakpad/src/client/mac/Framework/Breakpad.h here, so we
+// repeat the definition of BreakpadRef.
 //
 // On Mac, when compiling without breakpad support, a stub implementation is
 // compiled in. Not having any includes of the breakpad library allows for
diff --git a/components/crash/content/browser/BUILD.gn b/components/crash/content/browser/BUILD.gn
index 94e18cb..ecbfce2 100644
--- a/components/crash/content/browser/BUILD.gn
+++ b/components/crash/content/browser/BUILD.gn
@@ -18,10 +18,10 @@
 
   deps = [
     "//base",
-    "//breakpad:client",
     "//components/crash/content/app",
     "//content/public/browser",
     "//content/public/common",
+    "//third_party/breakpad:client",
   ]
 
   if (is_linux || is_android) {
@@ -33,16 +33,16 @@
       "crash_handler_host_linux.h",
     ]
     deps += [
-      "//breakpad:client",
       "//components/crash/content/app:app_non_mac_win",
+      "//third_party/breakpad:client",
     ]
   }
 
   # This is not in the GYP build but this target includes breakpad client
   # headers, so add the dependency here.
   if (is_posix && !is_ios) {
-    configs += [ "//breakpad:client_config" ]
-    public_configs = [ "//breakpad:client_config" ]
+    configs += [ "//third_party/breakpad:client_config" ]
+    public_configs = [ "//third_party/breakpad:client_config" ]
   }
 
   if (is_android) {
diff --git a/components/crash/content/browser/crash_handler_host_linux.cc b/components/crash/content/browser/crash_handler_host_linux.cc
index c1db248..f656cf17 100644
--- a/components/crash/content/browser/crash_handler_host_linux.cc
+++ b/components/crash/content/browser/crash_handler_host_linux.cc
@@ -33,12 +33,12 @@
 #include "base/threading/thread.h"
 #include "base/threading/thread_restrictions.h"
 #include "base/threading/thread_task_runner_handle.h"
-#include "breakpad/src/client/linux/handler/exception_handler.h"
-#include "breakpad/src/client/linux/minidump_writer/linux_dumper.h"
-#include "breakpad/src/client/linux/minidump_writer/minidump_writer.h"
 #include "build/build_config.h"
 #include "components/crash/content/app/breakpad_linux_impl.h"
 #include "content/public/browser/browser_thread.h"
+#include "third_party/breakpad/breakpad/src/client/linux/handler/exception_handler.h"
+#include "third_party/breakpad/breakpad/src/client/linux/minidump_writer/linux_dumper.h"
+#include "third_party/breakpad/breakpad/src/client/linux/minidump_writer/minidump_writer.h"
 
 #if defined(OS_ANDROID) && !defined(__LP64__)
 #include <sys/linux-syscalls.h>
diff --git a/components/crash/content/tools/BUILD.gn b/components/crash/content/tools/BUILD.gn
index 6206020..99010f05 100644
--- a/components/crash/content/tools/BUILD.gn
+++ b/components/crash/content/tools/BUILD.gn
@@ -12,7 +12,7 @@
 
   deps = [
     "//base",
-    "//breakpad:breakpad_handler",
-    "//breakpad:breakpad_sender",
+    "//third_party/breakpad:breakpad_handler",
+    "//third_party/breakpad:breakpad_sender",
   ]
 }
diff --git a/components/crash/content/tools/crash_service.cc b/components/crash/content/tools/crash_service.cc
index 46b6359..c7a5a79 100644
--- a/components/crash/content/tools/crash_service.cc
+++ b/components/crash/content/tools/crash_service.cc
@@ -15,9 +15,9 @@
 #include "base/files/file_util.h"
 #include "base/logging.h"
 #include "base/macros.h"
-#include "breakpad/src/client/windows/crash_generation/client_info.h"
-#include "breakpad/src/client/windows/crash_generation/crash_generation_server.h"
-#include "breakpad/src/client/windows/sender/crash_report_sender.h"
+#include "third_party/breakpad/breakpad/src/client/windows/crash_generation/client_info.h"
+#include "third_party/breakpad/breakpad/src/client/windows/crash_generation/crash_generation_server.h"
+#include "third_party/breakpad/breakpad/src/client/windows/sender/crash_report_sender.h"
 
 namespace breakpad {
 
diff --git a/components/exo/surface.cc b/components/exo/surface.cc
index 2158f3d4..e87e023 100644
--- a/components/exo/surface.cc
+++ b/components/exo/surface.cc
@@ -517,7 +517,7 @@
     const gfx::Point& origin,
     float device_scale_factor,
     LayerTreeFrameSinkHolder* frame_sink_holder,
-    cc::CompositorFrame* frame) {
+    viz::CompositorFrame* frame) {
   // The top most sub-surface is at the front of the RenderPass's quad_list,
   // so we need composite sub-surface in reversed order.
   for (const auto& sub_surface_entry : base::Reversed(sub_surfaces_)) {
@@ -731,7 +731,7 @@
 
 void Surface::AppendContentsToFrame(const gfx::Point& origin,
                                     float device_scale_factor,
-                                    cc::CompositorFrame* frame) {
+                                    viz::CompositorFrame* frame) {
   const std::unique_ptr<viz::RenderPass>& render_pass =
       frame->render_pass_list.back();
   gfx::Rect output_rect(origin, content_size_);
diff --git a/components/exo/surface.h b/components/exo/surface.h
index 76f72b5..42aea8c 100644
--- a/components/exo/surface.h
+++ b/components/exo/surface.h
@@ -31,14 +31,14 @@
 }
 }
 
-namespace cc {
-class CompositorFrame;
-}
-
 namespace gfx {
 class Path;
 }
 
+namespace viz {
+class CompositorFrame;
+}
+
 namespace exo {
 class Buffer;
 class LayerTreeFrameSinkHolder;
@@ -154,7 +154,7 @@
       const gfx::Point& origin,
       float device_scale_factor,
       LayerTreeFrameSinkHolder* frame_sink_holder,
-      cc::CompositorFrame* frame);
+      viz::CompositorFrame* frame);
 
   // Returns true if surface is in synchronized mode.
   bool IsSynchronized() const;
@@ -268,7 +268,7 @@
   // the |frame|.
   void AppendContentsToFrame(const gfx::Point& origin,
                              float device_scale_factor,
-                             cc::CompositorFrame* frame);
+                             viz::CompositorFrame* frame);
 
   // Update surface content size base on current buffer size.
   void UpdateContentSize();
diff --git a/components/exo/surface_tree_host.cc b/components/exo/surface_tree_host.cc
index a33dd23f..7cf36be 100644
--- a/components/exo/surface_tree_host.cc
+++ b/components/exo/surface_tree_host.cc
@@ -8,10 +8,10 @@
 
 #include "base/macros.h"
 #include "base/memory/ptr_util.h"
-#include "cc/output/compositor_frame.h"
 #include "cc/trees/layer_tree_frame_sink.h"
 #include "components/exo/layer_tree_frame_sink_holder.h"
 #include "components/exo/surface.h"
+#include "components/viz/common/quads/compositor_frame.h"
 #include "services/ui/public/interfaces/window_tree_constants.mojom.h"
 #include "ui/aura/env.h"
 #include "ui/aura/window.h"
@@ -295,7 +295,7 @@
 
 void SurfaceTreeHost::SubmitCompositorFrame() {
   DCHECK(root_surface_);
-  cc::CompositorFrame frame;
+  viz::CompositorFrame frame;
   // If we commit while we don't have an active BeginFrame, we acknowledge a
   // manual one.
   if (current_begin_frame_ack_.sequence_number ==
diff --git a/components/exo/surface_unittest.cc b/components/exo/surface_unittest.cc
index 140f84e..812e5d4f 100644
--- a/components/exo/surface_unittest.cc
+++ b/components/exo/surface_unittest.cc
@@ -7,12 +7,12 @@
 #include "base/bind.h"
 #include "base/command_line.h"
 #include "base/strings/stringprintf.h"
-#include "cc/output/compositor_frame.h"
 #include "components/exo/buffer.h"
 #include "components/exo/shell_surface.h"
 #include "components/exo/sub_surface.h"
 #include "components/exo/test/exo_test_base.h"
 #include "components/exo/test/exo_test_helper.h"
+#include "components/viz/common/quads/compositor_frame.h"
 #include "components/viz/common/quads/texture_draw_quad.h"
 #include "components/viz/service/frame_sinks/frame_sink_manager_impl.h"
 #include "components/viz/service/surfaces/surface.h"
@@ -100,13 +100,13 @@
   ASSERT_EQ(1, release_buffer_call_count);
 }
 
-const cc::CompositorFrame& GetFrameFromSurface(ShellSurface* shell_surface) {
+const viz::CompositorFrame& GetFrameFromSurface(ShellSurface* shell_surface) {
   viz::SurfaceId surface_id = shell_surface->host_window()->GetSurfaceId();
   viz::SurfaceManager* surface_manager = aura::Env::GetInstance()
                                              ->context_factory_private()
                                              ->GetFrameSinkManager()
                                              ->surface_manager();
-  const cc::CompositorFrame& frame =
+  const viz::CompositorFrame& frame =
       surface_manager->GetSurfaceForId(surface_id)->GetActiveFrame();
   return frame;
 }
@@ -136,7 +136,8 @@
   RunAllPendingInMessageLoop();
 
   {
-    const cc::CompositorFrame& frame = GetFrameFromSurface(shell_surface.get());
+    const viz::CompositorFrame& frame =
+        GetFrameFromSurface(shell_surface.get());
     EXPECT_EQ(ToPixel(gfx::Rect(0, 0, 512, 512)),
               frame.render_pass_list.back()->damage_rect);
   }
@@ -147,7 +148,8 @@
   RunAllPendingInMessageLoop();
 
   {
-    const cc::CompositorFrame& frame = GetFrameFromSurface(shell_surface.get());
+    const viz::CompositorFrame& frame =
+        GetFrameFromSurface(shell_surface.get());
     EXPECT_EQ(ToPixel(gfx::Rect(64, 128, 16, 32)),
               frame.render_pass_list.back()->damage_rect);
   }
@@ -186,7 +188,8 @@
   RunAllPendingInMessageLoop();
 
   {
-    const cc::CompositorFrame& frame = GetFrameFromSurface(shell_surface.get());
+    const viz::CompositorFrame& frame =
+        GetFrameFromSurface(shell_surface.get());
     ASSERT_EQ(1u, frame.render_pass_list.size());
     ASSERT_EQ(1u, frame.render_pass_list.back()->quad_list.size());
     EXPECT_FALSE(frame.render_pass_list.back()
@@ -202,7 +205,8 @@
   RunAllPendingInMessageLoop();
 
   {
-    const cc::CompositorFrame& frame = GetFrameFromSurface(shell_surface.get());
+    const viz::CompositorFrame& frame =
+        GetFrameFromSurface(shell_surface.get());
     ASSERT_EQ(1u, frame.render_pass_list.size());
     ASSERT_EQ(1u, frame.render_pass_list.back()->quad_list.size());
     EXPECT_TRUE(frame.render_pass_list.back()
@@ -223,7 +227,8 @@
   RunAllPendingInMessageLoop();
 
   {
-    const cc::CompositorFrame& frame = GetFrameFromSurface(shell_surface.get());
+    const viz::CompositorFrame& frame =
+        GetFrameFromSurface(shell_surface.get());
     ASSERT_EQ(1u, frame.render_pass_list.size());
     ASSERT_EQ(1u, frame.render_pass_list.back()->quad_list.size());
     EXPECT_FALSE(frame.render_pass_list.back()
@@ -266,7 +271,7 @@
 
   RunAllPendingInMessageLoop();
 
-  const cc::CompositorFrame& frame = GetFrameFromSurface(shell_surface.get());
+  const viz::CompositorFrame& frame = GetFrameFromSurface(shell_surface.get());
   ASSERT_EQ(1u, frame.render_pass_list.size());
   EXPECT_EQ(ToPixel(gfx::Rect(0, 0, 256, 256)),
             frame.render_pass_list.back()->damage_rect);
@@ -292,7 +297,8 @@
   RunAllPendingInMessageLoop();
 
   {
-    const cc::CompositorFrame& frame = GetFrameFromSurface(shell_surface.get());
+    const viz::CompositorFrame& frame =
+        GetFrameFromSurface(shell_surface.get());
     ASSERT_EQ(1u, frame.render_pass_list.size());
     EXPECT_EQ(
         ToPixel(gfx::Rect(0, 0, buffer_size.height(), buffer_size.width())),
@@ -333,7 +339,8 @@
   RunAllPendingInMessageLoop();
 
   {
-    const cc::CompositorFrame& frame = GetFrameFromSurface(shell_surface.get());
+    const viz::CompositorFrame& frame =
+        GetFrameFromSurface(shell_surface.get());
     ASSERT_EQ(1u, frame.render_pass_list.size());
     const auto& quad_list = frame.render_pass_list[0]->quad_list;
     ASSERT_EQ(2u, quad_list.size());
@@ -394,7 +401,7 @@
 
   RunAllPendingInMessageLoop();
 
-  const cc::CompositorFrame& frame = GetFrameFromSurface(shell_surface.get());
+  const viz::CompositorFrame& frame = GetFrameFromSurface(shell_surface.get());
   ASSERT_EQ(1u, frame.render_pass_list.size());
   EXPECT_EQ(ToPixel(gfx::Rect(0, 0, 512, 512)),
             frame.render_pass_list.back()->damage_rect);
@@ -417,7 +424,7 @@
 
   RunAllPendingInMessageLoop();
 
-  const cc::CompositorFrame& frame = GetFrameFromSurface(shell_surface.get());
+  const viz::CompositorFrame& frame = GetFrameFromSurface(shell_surface.get());
   ASSERT_EQ(1u, frame.render_pass_list.size());
   EXPECT_EQ(ToPixel(gfx::Rect(0, 0, 12, 12)),
             frame.render_pass_list.back()->damage_rect);
@@ -450,7 +457,8 @@
   RunAllPendingInMessageLoop();
 
   {
-    const cc::CompositorFrame& frame = GetFrameFromSurface(shell_surface.get());
+    const viz::CompositorFrame& frame =
+        GetFrameFromSurface(shell_surface.get());
     ASSERT_EQ(1u, frame.render_pass_list.size());
     const viz::QuadList& quad_list = frame.render_pass_list[0]->quad_list;
     ASSERT_EQ(1u, quad_list.size());
@@ -470,7 +478,8 @@
   RunAllPendingInMessageLoop();
 
   {
-    const cc::CompositorFrame& frame = GetFrameFromSurface(shell_surface.get());
+    const viz::CompositorFrame& frame =
+        GetFrameFromSurface(shell_surface.get());
     ASSERT_EQ(1u, frame.render_pass_list.size());
     const viz::QuadList& quad_list = frame.render_pass_list[0]->quad_list;
     ASSERT_EQ(1u, quad_list.size());
@@ -490,7 +499,8 @@
   RunAllPendingInMessageLoop();
 
   {
-    const cc::CompositorFrame& frame = GetFrameFromSurface(shell_surface.get());
+    const viz::CompositorFrame& frame =
+        GetFrameFromSurface(shell_surface.get());
     ASSERT_EQ(1u, frame.render_pass_list.size());
     const viz::QuadList& quad_list = frame.render_pass_list[0]->quad_list;
     ASSERT_EQ(1u, quad_list.size());
@@ -510,7 +520,8 @@
   RunAllPendingInMessageLoop();
 
   {
-    const cc::CompositorFrame& frame = GetFrameFromSurface(shell_surface.get());
+    const viz::CompositorFrame& frame =
+        GetFrameFromSurface(shell_surface.get());
     ASSERT_EQ(1u, frame.render_pass_list.size());
     const viz::QuadList& quad_list = frame.render_pass_list[0]->quad_list;
     ASSERT_EQ(1u, quad_list.size());
@@ -531,7 +542,8 @@
   RunAllPendingInMessageLoop();
 
   {
-    const cc::CompositorFrame& frame = GetFrameFromSurface(shell_surface.get());
+    const viz::CompositorFrame& frame =
+        GetFrameFromSurface(shell_surface.get());
     ASSERT_EQ(1u, frame.render_pass_list.size());
     const viz::QuadList& quad_list = frame.render_pass_list[0]->quad_list;
     ASSERT_EQ(1u, quad_list.size());
@@ -551,7 +563,8 @@
   RunAllPendingInMessageLoop();
 
   {
-    const cc::CompositorFrame& frame = GetFrameFromSurface(shell_surface.get());
+    const viz::CompositorFrame& frame =
+        GetFrameFromSurface(shell_surface.get());
     ASSERT_EQ(1u, frame.render_pass_list.size());
     const viz::QuadList& quad_list = frame.render_pass_list[0]->quad_list;
     ASSERT_EQ(1u, quad_list.size());
@@ -571,7 +584,8 @@
   RunAllPendingInMessageLoop();
 
   {
-    const cc::CompositorFrame& frame = GetFrameFromSurface(shell_surface.get());
+    const viz::CompositorFrame& frame =
+        GetFrameFromSurface(shell_surface.get());
     ASSERT_EQ(1u, frame.render_pass_list.size());
     const viz::QuadList& quad_list = frame.render_pass_list[0]->quad_list;
     ASSERT_EQ(1u, quad_list.size());
@@ -591,7 +605,8 @@
   RunAllPendingInMessageLoop();
 
   {
-    const cc::CompositorFrame& frame = GetFrameFromSurface(shell_surface.get());
+    const viz::CompositorFrame& frame =
+        GetFrameFromSurface(shell_surface.get());
     ASSERT_EQ(1u, frame.render_pass_list.size());
     const viz::QuadList& quad_list = frame.render_pass_list[0]->quad_list;
     ASSERT_EQ(1u, quad_list.size());
@@ -618,7 +633,7 @@
   surface->Commit();
   RunAllPendingInMessageLoop();
 
-  const cc::CompositorFrame& frame = GetFrameFromSurface(shell_surface.get());
+  const viz::CompositorFrame& frame = GetFrameFromSurface(shell_surface.get());
   ASSERT_EQ(1u, frame.render_pass_list.size());
   ASSERT_EQ(1u, frame.render_pass_list.back()->quad_list.size());
   EXPECT_FALSE(frame.render_pass_list.back()
@@ -638,7 +653,7 @@
   surface->Commit();
   RunAllPendingInMessageLoop();
 
-  const cc::CompositorFrame& frame = GetFrameFromSurface(shell_surface.get());
+  const viz::CompositorFrame& frame = GetFrameFromSurface(shell_surface.get());
   ASSERT_EQ(1u, frame.render_pass_list.size());
   ASSERT_EQ(1u, frame.render_pass_list.back()->quad_list.size());
   viz::DrawQuad* draw_quad = frame.render_pass_list.back()->quad_list.back();
@@ -662,7 +677,7 @@
   surface->Commit();
   RunAllPendingInMessageLoop();
 
-  const cc::CompositorFrame& frame = GetFrameFromSurface(shell_surface.get());
+  const viz::CompositorFrame& frame = GetFrameFromSurface(shell_surface.get());
   ASSERT_EQ(1u, frame.render_pass_list.size());
   EXPECT_EQ(ToPixel(gfx::Rect(0, 0, 1, 1)),
             frame.render_pass_list.back()->damage_rect);
@@ -706,7 +721,7 @@
   surface->Commit();  // Acknowledges the BeginFrame via CompositorFrame.
   RunAllPendingInMessageLoop();
 
-  const cc::CompositorFrame& frame = GetFrameFromSurface(shell_surface.get());
+  const viz::CompositorFrame& frame = GetFrameFromSurface(shell_surface.get());
   viz::BeginFrameAck expected_ack(args.source_id, args.sequence_number, true);
   EXPECT_EQ(expected_ack, frame.metadata.begin_frame_ack);
 
diff --git a/components/nacl/broker/BUILD.gn b/components/nacl/broker/BUILD.gn
index ef7773a..e189f4e9 100644
--- a/components/nacl/broker/BUILD.gn
+++ b/components/nacl/broker/BUILD.gn
@@ -106,7 +106,6 @@
       ":nacl64_content",
       ":nacl64_crash_reporter_client",
       "//base",
-      "//breakpad:breakpad_handler",
       "//build/win:default_exe_manifest",
       "//chrome:nacl64_exe_version",
       "//chrome/install_static:install_static_util",
@@ -116,6 +115,7 @@
       "//content/public/common:static_switches",
       "//ppapi/proxy:ipc",
       "//sandbox",
+      "//third_party/breakpad:breakpad_handler",
     ]
   }
 
diff --git a/components/policy/resources/policy_templates.json b/components/policy/resources/policy_templates.json
index 8d86d40..14d07ed 100644
--- a/components/policy/resources/policy_templates.json
+++ b/components/policy/resources/policy_templates.json
@@ -143,7 +143,7 @@
 #   persistent IDs for all fields (but not for groups!) are needed. These are
 #   specified by the 'id' keys of each policy. NEVER CHANGE EXISTING IDs,
 #   because doing so would break the deployed wire format!
-#   For your editing convenience: highest ID currently used: 389
+#   For your editing convenience: highest ID currently used: 390
 #   And don't forget to also update the EnterprisePolicies enum of
 #   histograms.xml (run 'python tools/metrics/histograms/update_policies.py').
 #
@@ -9729,6 +9729,38 @@
       the entries in the file specified in DeviceNativePrinters.''',
     },
     {
+      'name': 'TPMFirmwareUpdateSettings',
+      'supported_on': ['chrome_os:63-'],
+      'device_only': True,
+      'id': 390,
+      'type': 'dict',
+      'schema': {
+        'type': 'object',
+        'properties': {
+          'allow-user-initiated-powerwash': {
+            'type': 'boolean',
+          },
+        },
+      },
+      'features': {
+        'dynamic_refresh': True,
+        'per_profile': False,
+      },
+      'example_value': {
+        'allow-user-initiated-powerwash': True
+      },
+      'caption': '''Configure TPM firmware update behavior''',
+      'tags': [],
+      'desc': '''Configures availability and behavior of TPM firmware update functionality.
+
+      Individual settings can be specified in JSON properties:
+
+      <ph name="TPM_FIRMWARE_UPDATE_SETTINGS_ALLOW_USER_INITIATED_POWERWASH">allow-user-initiated-powerwash</ph>: If set to <ph name="TPM_FIRMWARE_UPDATE_SETTINGS_ALLOW_USER_INITIATED_POWERWASH_TRUE">true</ph>, users will be able to trigger the powerwash flow to install a TPM firmware update.
+
+      If the policy is not set, TPM firmware update functionality will not be available.''',
+    },
+
+    {
       'name': 'QuickUnlock',
       'type': 'group',
       'caption': '''Quick unlock policies''',
diff --git a/components/security_state/content/content_utils.cc b/components/security_state/content/content_utils.cc
index dac337b..b9a3711 100644
--- a/components/security_state/content/content_utils.cc
+++ b/components/security_state/content/content_utils.cc
@@ -93,12 +93,18 @@
     const security_state::SecurityInfo& security_info,
     content::SecurityStyleExplanations* security_style_explanations) {
   if (security_info.sha1_in_chain) {
-    security_style_explanations->insecure_explanations.push_back(
-        content::SecurityStyleExplanation(
-            l10n_util::GetStringUTF8(IDS_SHA1),
-            l10n_util::GetStringUTF8(IDS_SHA1_DESCRIPTION),
-            security_info.certificate,
-            blink::WebMixedContentContextType::kNotMixedContent));
+    content::SecurityStyleExplanation explanation(
+        l10n_util::GetStringUTF8(IDS_SHA1),
+        l10n_util::GetStringUTF8(IDS_SHA1_DESCRIPTION),
+        security_info.certificate,
+        blink::WebMixedContentContextType::kNotMixedContent);
+    // The impact of SHA1 on the certificate status depends on
+    // the EnableSHA1ForLocalAnchors policy.
+    if (security_info.cert_status & net::CERT_STATUS_WEAK_SIGNATURE_ALGORITHM) {
+      security_style_explanations->insecure_explanations.push_back(explanation);
+    } else {
+      security_style_explanations->neutral_explanations.push_back(explanation);
+    }
   }
 
   if (security_info.cert_missing_subject_alt_name) {
diff --git a/components/upload_list/crash_upload_list.h b/components/upload_list/crash_upload_list.h
index cbb2d31..166f8fed 100644
--- a/components/upload_list/crash_upload_list.h
+++ b/components/upload_list/crash_upload_list.h
@@ -10,7 +10,7 @@
 class CrashUploadList {
  public:
   // Should match kReporterLogFilename in
-  // breakpad/src/client/apple/Framework/BreakpadDefines.h.
+  // third_party/breakpad/breakpad/src/client/apple/Framework/BreakpadDefines.h.
   static const char kReporterLogFilename[];
 
  private:
diff --git a/components/viz/client/client_layer_tree_frame_sink.cc b/components/viz/client/client_layer_tree_frame_sink.cc
index 3b1da3f..7ac9472 100644
--- a/components/viz/client/client_layer_tree_frame_sink.cc
+++ b/components/viz/client/client_layer_tree_frame_sink.cc
@@ -7,11 +7,11 @@
 #include "base/bind.h"
 #include "base/memory/ptr_util.h"
 #include "base/trace_event/trace_event.h"
-#include "cc/output/compositor_frame.h"
 #include "cc/trees/layer_tree_frame_sink_client.h"
 #include "components/viz/client/hit_test_data_provider.h"
 #include "components/viz/client/local_surface_id_provider.h"
 #include "components/viz/common/frame_sinks/begin_frame_args.h"
+#include "components/viz/common/quads/compositor_frame.h"
 #include "components/viz/common/resources/shared_bitmap_manager.h"
 
 namespace viz {
@@ -105,8 +105,7 @@
   local_surface_id_ = local_surface_id;
 }
 
-void ClientLayerTreeFrameSink::SubmitCompositorFrame(
-    cc::CompositorFrame frame) {
+void ClientLayerTreeFrameSink::SubmitCompositorFrame(CompositorFrame frame) {
   DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
   DCHECK(frame.metadata.begin_frame_ack.has_damage);
   DCHECK_LE(BeginFrameArgs::kStartingFrameNumber,
diff --git a/components/viz/client/client_layer_tree_frame_sink.h b/components/viz/client/client_layer_tree_frame_sink.h
index 953c4fab..44b7d88 100644
--- a/components/viz/client/client_layer_tree_frame_sink.h
+++ b/components/viz/client/client_layer_tree_frame_sink.h
@@ -59,7 +59,7 @@
   bool BindToClient(cc::LayerTreeFrameSinkClient* client) override;
   void DetachFromClient() override;
   void SetLocalSurfaceId(const LocalSurfaceId& local_surface_id) override;
-  void SubmitCompositorFrame(cc::CompositorFrame frame) override;
+  void SubmitCompositorFrame(CompositorFrame frame) override;
   void DidNotProduceFrame(const BeginFrameAck& ack) override;
 
  private:
diff --git a/components/viz/client/local_surface_id_provider.cc b/components/viz/client/local_surface_id_provider.cc
index e556b19..32be7ac 100644
--- a/components/viz/client/local_surface_id_provider.cc
+++ b/components/viz/client/local_surface_id_provider.cc
@@ -3,7 +3,7 @@
 // found in the LICENSE file.
 
 #include "components/viz/client/local_surface_id_provider.h"
-#include "cc/output/compositor_frame.h"
+#include "components/viz/common/quads/compositor_frame.h"
 
 namespace viz {
 
@@ -14,7 +14,7 @@
 DefaultLocalSurfaceIdProvider::DefaultLocalSurfaceIdProvider() = default;
 
 const LocalSurfaceId& DefaultLocalSurfaceIdProvider::GetLocalSurfaceIdForFrame(
-    const cc::CompositorFrame& frame) {
+    const CompositorFrame& frame) {
   if (!local_surface_id_.is_valid() ||
       surface_size_ != frame.size_in_pixels() ||
       frame.device_scale_factor() != device_scale_factor_) {
diff --git a/components/viz/client/local_surface_id_provider.h b/components/viz/client/local_surface_id_provider.h
index 4d1ea05..500f2205 100644
--- a/components/viz/client/local_surface_id_provider.h
+++ b/components/viz/client/local_surface_id_provider.h
@@ -9,11 +9,8 @@
 #include "components/viz/common/surfaces/local_surface_id_allocator.h"
 #include "ui/gfx/geometry/size.h"
 
-namespace cc {
-class CompositorFrame;
-}
-
 namespace viz {
+class CompositorFrame;
 
 class LocalSurfaceIdProvider {
  public:
@@ -21,7 +18,7 @@
   virtual ~LocalSurfaceIdProvider();
 
   virtual const LocalSurfaceId& GetLocalSurfaceIdForFrame(
-      const cc::CompositorFrame& frame) = 0;
+      const CompositorFrame& frame) = 0;
 
  private:
   DISALLOW_COPY_AND_ASSIGN(LocalSurfaceIdProvider);
@@ -32,7 +29,7 @@
   DefaultLocalSurfaceIdProvider();
 
   const LocalSurfaceId& GetLocalSurfaceIdForFrame(
-      const cc::CompositorFrame& frame) override;
+      const CompositorFrame& frame) override;
 
  private:
   LocalSurfaceId local_surface_id_;
diff --git a/components/viz/common/BUILD.gn b/components/viz/common/BUILD.gn
index f8c7c6c..4a52e7a 100644
--- a/components/viz/common/BUILD.gn
+++ b/components/viz/common/BUILD.gn
@@ -56,6 +56,10 @@
     "gpu/vulkan_in_process_context_provider.cc",
     "gpu/vulkan_in_process_context_provider.h",
     "hit_test/aggregated_hit_test_region.h",
+    "quads/compositor_frame.cc",
+    "quads/compositor_frame.h",
+    "quads/compositor_frame_metadata.cc",
+    "quads/compositor_frame_metadata.h",
     "quads/content_draw_quad_base.cc",
     "quads/content_draw_quad_base.h",
     "quads/copy_output_request.cc",
@@ -75,6 +79,7 @@
     "quads/render_pass.h",
     "quads/render_pass_draw_quad.cc",
     "quads/render_pass_draw_quad.h",
+    "quads/selection.h",
     "quads/shared_bitmap.cc",
     "quads/shared_bitmap.h",
     "quads/shared_quad_state.cc",
@@ -150,6 +155,7 @@
     "//ui/gfx:color_space",
     "//ui/gfx:geometry_skia",
     "//ui/gfx/geometry",
+    "//ui/latency",
   ]
 
   public_deps = [
diff --git a/components/viz/common/quads/DEPS b/components/viz/common/quads/DEPS
index d16f2df..a7e480ee 100644
--- a/components/viz/common/quads/DEPS
+++ b/components/viz/common/quads/DEPS
@@ -7,6 +7,7 @@
   "+gpu/command_buffer/common",
   "+mojo/public/cpp/bindings",
   "+third_party/skia",
+  "+ui/latency",
 ]
 
 specific_include_rules = {
diff --git a/cc/output/compositor_frame.cc b/components/viz/common/quads/compositor_frame.cc
similarity index 81%
rename from cc/output/compositor_frame.cc
rename to components/viz/common/quads/compositor_frame.cc
index a84712e..17e748a 100644
--- a/cc/output/compositor_frame.cc
+++ b/components/viz/common/quads/compositor_frame.cc
@@ -2,9 +2,9 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "cc/output/compositor_frame.h"
+#include "components/viz/common/quads/compositor_frame.h"
 
-namespace cc {
+namespace viz {
 
 CompositorFrame::CompositorFrame() = default;
 
@@ -14,4 +14,4 @@
 
 CompositorFrame& CompositorFrame::operator=(CompositorFrame&& other) = default;
 
-}  // namespace cc
+}  // namespace viz
diff --git a/cc/output/compositor_frame.h b/components/viz/common/quads/compositor_frame.h
similarity index 75%
rename from cc/output/compositor_frame.h
rename to components/viz/common/quads/compositor_frame.h
index 9e0362d..de77425 100644
--- a/cc/output/compositor_frame.h
+++ b/components/viz/common/quads/compositor_frame.h
@@ -2,18 +2,18 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef CC_OUTPUT_COMPOSITOR_FRAME_H_
-#define CC_OUTPUT_COMPOSITOR_FRAME_H_
+#ifndef COMPONENTS_VIZ_COMMON_QUADS_COMPOSITOR_FRAME_H_
+#define COMPONENTS_VIZ_COMMON_QUADS_COMPOSITOR_FRAME_H_
 
 #include <memory>
 
 #include "base/macros.h"
-#include "cc/cc_export.h"
-#include "cc/output/compositor_frame_metadata.h"
+#include "components/viz/common/quads/compositor_frame_metadata.h"
 #include "components/viz/common/quads/render_pass.h"
 #include "components/viz/common/resources/transferable_resource.h"
+#include "components/viz/common/viz_common_export.h"
 
-namespace cc {
+namespace viz {
 
 // A CompositorFrame struct contains the complete output of a compositor meant
 // for display. A CompositorFrame consists of a series of DrawQuads that
@@ -22,7 +22,7 @@
 // may share common data referred to as SharedQuadState. A CompositorFrame also
 // has |metadata| that refers to global graphical state associated with this
 // frame.
-class CC_EXPORT CompositorFrame {
+class VIZ_COMMON_EXPORT CompositorFrame {
  public:
   CompositorFrame();
   CompositorFrame(CompositorFrame&& other);
@@ -38,16 +38,16 @@
   }
 
   CompositorFrameMetadata metadata;
-  std::vector<viz::TransferableResource> resource_list;
+  std::vector<TransferableResource> resource_list;
   // This list is in the order that each RenderPass will be drawn. The last one
   // is the "root" RenderPass that all others are directly or indirectly drawn
   // into.
-  viz::RenderPassList render_pass_list;
+  RenderPassList render_pass_list;
 
  private:
   DISALLOW_COPY_AND_ASSIGN(CompositorFrame);
 };
 
-}  // namespace cc
+}  // namespace viz
 
-#endif  // CC_OUTPUT_COMPOSITOR_FRAME_H_
+#endif  // COMPONENTS_VIZ_COMMON_QUADS_COMPOSITOR_FRAME_H_
diff --git a/cc/output/compositor_frame_metadata.cc b/components/viz/common/quads/compositor_frame_metadata.cc
similarity index 80%
rename from cc/output/compositor_frame_metadata.cc
rename to components/viz/common/quads/compositor_frame_metadata.cc
index afd9741..dcf9aff 100644
--- a/cc/output/compositor_frame_metadata.cc
+++ b/components/viz/common/quads/compositor_frame_metadata.cc
@@ -2,17 +2,16 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "cc/output/compositor_frame_metadata.h"
+#include "components/viz/common/quads/compositor_frame_metadata.h"
 
-namespace cc {
+namespace viz {
 
 CompositorFrameMetadata::CompositorFrameMetadata() = default;
 
 CompositorFrameMetadata::CompositorFrameMetadata(
     CompositorFrameMetadata&& other) = default;
 
-CompositorFrameMetadata::~CompositorFrameMetadata() {
-}
+CompositorFrameMetadata::~CompositorFrameMetadata() {}
 
 CompositorFrameMetadata& CompositorFrameMetadata::operator=(
     CompositorFrameMetadata&& other) = default;
@@ -25,4 +24,4 @@
 CompositorFrameMetadata::CompositorFrameMetadata(
     const CompositorFrameMetadata& other) = default;
 
-}  // namespace cc
+}  // namespace viz
diff --git a/cc/output/compositor_frame_metadata.h b/components/viz/common/quads/compositor_frame_metadata.h
similarity index 88%
rename from cc/output/compositor_frame_metadata.h
rename to components/viz/common/quads/compositor_frame_metadata.h
index 104b24b..ada11472 100644
--- a/cc/output/compositor_frame_metadata.h
+++ b/components/viz/common/quads/compositor_frame_metadata.h
@@ -2,26 +2,26 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef CC_OUTPUT_COMPOSITOR_FRAME_METADATA_H_
-#define CC_OUTPUT_COMPOSITOR_FRAME_METADATA_H_
+#ifndef COMPONENTS_VIZ_COMMON_QUADS_COMPOSITOR_FRAME_METADATA_H_
+#define COMPONENTS_VIZ_COMMON_QUADS_COMPOSITOR_FRAME_METADATA_H_
 
 #include <stdint.h>
 
 #include <vector>
 
-#include "cc/cc_export.h"
-#include "cc/input/selection.h"
 #include "components/viz/common/frame_sinks/begin_frame_args.h"
+#include "components/viz/common/quads/selection.h"
 #include "components/viz/common/surfaces/surface_id.h"
+#include "components/viz/common/viz_common_export.h"
 #include "third_party/skia/include/core/SkColor.h"
 #include "ui/gfx/geometry/size_f.h"
 #include "ui/gfx/geometry/vector2d_f.h"
 #include "ui/gfx/selection_bound.h"
 #include "ui/latency/latency_info.h"
 
-namespace cc {
+namespace viz {
 
-class CC_EXPORT CompositorFrameMetadata {
+class VIZ_COMMON_EXPORT CompositorFrameMetadata {
  public:
   CompositorFrameMetadata();
   CompositorFrameMetadata(CompositorFrameMetadata&& other);
@@ -83,7 +83,7 @@
   // determine which surfaces to retain and which to evict. It will likely
   // be unnecessary for the embedder to explicitly specify which surfaces to
   // retain. Thus, this field will likely go away.
-  std::vector<viz::SurfaceId> referenced_surfaces;
+  std::vector<SurfaceId> referenced_surfaces;
 
   // This is the set of dependent SurfaceIds that should be active in the
   // display compositor before this CompositorFrame can be activated. Note
@@ -96,7 +96,7 @@
   //       |referenced_surfaces|. |activation_dependencies| is the set of
   //       surface IDs that this frame would like to block on until they
   //       become available or a deadline hits.
-  std::vector<viz::SurfaceId> activation_dependencies;
+  std::vector<SurfaceId> activation_dependencies;
 
   // This indicates whether this CompositorFrame can be activated before
   // dependencies have been resolved.
@@ -108,8 +108,8 @@
   // become available in all renderer processes. See https://crbug.com/695579.
   uint32_t content_source_id = 0;
 
-  // viz::BeginFrameAck for the BeginFrame that this CompositorFrame answers.
-  viz::BeginFrameAck begin_frame_ack;
+  // BeginFrameAck for the BeginFrame that this CompositorFrame answers.
+  BeginFrameAck begin_frame_ack;
 
   // Once the display compositor processes a frame containing a non-zero frame
   // token, the token is sent to embedder of the frame. This is helpful when
@@ -121,6 +121,6 @@
   CompositorFrameMetadata operator=(const CompositorFrameMetadata&) = delete;
 };
 
-}  // namespace cc
+}  // namespace viz
 
-#endif  // CC_OUTPUT_COMPOSITOR_FRAME_METADATA_H_
+#endif  // COMPONENTS_VIZ_COMMON_QUADS_COMPOSITOR_FRAME_METADATA_H_
diff --git a/cc/input/selection.h b/components/viz/common/quads/selection.h
similarity index 69%
rename from cc/input/selection.h
rename to components/viz/common/quads/selection.h
index 1b95ec9b..e2e21c0 100644
--- a/cc/input/selection.h
+++ b/components/viz/common/quads/selection.h
@@ -2,17 +2,15 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef CC_INPUT_SELECTION_H_
-#define CC_INPUT_SELECTION_H_
+#ifndef COMPONENTS_VIZ_COMMON_QUADS_SELECTION_H_
+#define COMPONENTS_VIZ_COMMON_QUADS_SELECTION_H_
 
-#include "cc/cc_export.h"
-
-namespace cc {
+namespace viz {
 
 template <typename BoundType>
-struct CC_EXPORT Selection {
-  Selection() {}
-  ~Selection() {}
+struct Selection {
+  Selection() = default;
+  ~Selection() = default;
 
   BoundType start, end;
 };
@@ -29,6 +27,6 @@
   return !(lhs == rhs);
 }
 
-}  // namespace cc
+}  // namespace viz
 
-#endif  // CC_INPUT_SELECTION_H_
+#endif  // COMPONENTS_VIZ_COMMON_QUADS_SELECTION_H_
diff --git a/components/viz/service/display/display.cc b/components/viz/service/display/display.cc
index 8f4f80fb..8b990a9 100644
--- a/components/viz/service/display/display.cc
+++ b/components/viz/service/display/display.cc
@@ -11,9 +11,9 @@
 #include "base/timer/elapsed_timer.h"
 #include "base/trace_event/trace_event.h"
 #include "cc/benchmarks/benchmark_instrumentation.h"
-#include "cc/output/compositor_frame.h"
 #include "components/viz/common/display/renderer_settings.h"
 #include "components/viz/common/frame_sinks/begin_frame_source.h"
+#include "components/viz/common/quads/compositor_frame.h"
 #include "components/viz/service/display/direct_renderer.h"
 #include "components/viz/service/display/display_client.h"
 #include "components/viz/service/display/display_scheduler.h"
@@ -184,7 +184,7 @@
   constexpr bool delegated_sync_points_required = false;
   resource_provider_ = base::MakeUnique<cc::DisplayResourceProvider>(
       output_surface_->context_provider(), bitmap_manager_,
-      gpu_memory_buffer_manager_, nullptr, delegated_sync_points_required,
+      gpu_memory_buffer_manager_, delegated_sync_points_required,
       settings_.enable_color_correct_rendering, settings_.resource_settings);
 
   if (output_surface_->context_provider()) {
@@ -254,7 +254,7 @@
   }
 
   base::ElapsedTimer aggregate_timer;
-  cc::CompositorFrame frame = aggregator_->Aggregate(current_surface_id_);
+  CompositorFrame frame = aggregator_->Aggregate(current_surface_id_);
   UMA_HISTOGRAM_COUNTS_1M("Compositing.SurfaceAggregator.AggregateUs",
                           aggregate_timer.Elapsed().InMicroseconds());
 
diff --git a/components/viz/service/display/display_unittest.cc b/components/viz/service/display/display_unittest.cc
index dad43059..132889e 100644
--- a/components/viz/service/display/display_unittest.cc
+++ b/components/viz/service/display/display_unittest.cc
@@ -8,11 +8,11 @@
 
 #include "base/memory/ptr_util.h"
 #include "base/test/null_task_runner.h"
-#include "cc/output/compositor_frame.h"
 #include "cc/test/fake_output_surface.h"
 #include "cc/test/scheduler_test_common.h"
 #include "cc/test/test_shared_bitmap_manager.h"
 #include "components/viz/common/frame_sinks/begin_frame_source.h"
+#include "components/viz/common/quads/compositor_frame.h"
 #include "components/viz/common/quads/copy_output_result.h"
 #include "components/viz/common/quads/render_pass.h"
 #include "components/viz/common/resources/shared_bitmap_manager.h"
@@ -147,7 +147,7 @@
  protected:
   void SubmitCompositorFrame(RenderPassList* pass_list,
                              const LocalSurfaceId& local_surface_id) {
-    cc::CompositorFrame frame = test::MakeCompositorFrame();
+    CompositorFrame frame = test::MakeCompositorFrame();
     pass_list->swap(frame.render_pass_list);
 
     support_->SubmitCompositorFrame(local_surface_id, std::move(frame));
@@ -358,7 +358,7 @@
     pass_list.push_back(std::move(pass));
     scheduler_->ResetDamageForTest();
 
-    cc::CompositorFrame frame = test::MakeCompositorFrame();
+    CompositorFrame frame = test::MakeCompositorFrame();
     pass_list.swap(frame.render_pass_list);
     frame.metadata.latency_info.push_back(ui::LatencyInfo());
 
@@ -390,7 +390,7 @@
     pass_list.push_back(std::move(pass));
     scheduler_->ResetDamageForTest();
 
-    cc::CompositorFrame frame = test::MakeCompositorFrame();
+    CompositorFrame frame = test::MakeCompositorFrame();
     pass_list.swap(frame.render_pass_list);
 
     support_->SubmitCompositorFrame(local_surface_id, std::move(frame));
@@ -478,7 +478,7 @@
     pass_list.push_back(std::move(pass));
     scheduler_->ResetDamageForTest();
 
-    cc::CompositorFrame frame = test::MakeCompositorFrame();
+    CompositorFrame frame = test::MakeCompositorFrame();
     pass_list.swap(frame.render_pass_list);
     frame.metadata.latency_info.push_back(ui::LatencyInfo());
 
diff --git a/components/viz/service/display/gl_renderer.cc b/components/viz/service/display/gl_renderer.cc
index e2c872c1..4aa726e 100644
--- a/components/viz/service/display/gl_renderer.cc
+++ b/components/viz/service/display/gl_renderer.cc
@@ -29,13 +29,13 @@
 #include "cc/base/math_util.h"
 #include "cc/base/render_surface_filters.h"
 #include "cc/debug/debug_colors.h"
-#include "cc/output/compositor_frame.h"
-#include "cc/output/compositor_frame_metadata.h"
 #include "cc/raster/scoped_gpu_raster.h"
 #include "cc/resources/resource_pool.h"
 #include "cc/resources/scoped_resource.h"
 #include "components/viz/common/display/renderer_settings.h"
 #include "components/viz/common/gpu/context_provider.h"
+#include "components/viz/common/quads/compositor_frame.h"
+#include "components/viz/common/quads/compositor_frame_metadata.h"
 #include "components/viz/common/quads/copy_output_request.h"
 #include "components/viz/common/quads/picture_draw_quad.h"
 #include "components/viz/common/quads/render_pass.h"
diff --git a/components/viz/service/display/gl_renderer_unittest.cc b/components/viz/service/display/gl_renderer_unittest.cc
index dc5bc54a..5ce07fb 100644
--- a/components/viz/service/display/gl_renderer_unittest.cc
+++ b/components/viz/service/display/gl_renderer_unittest.cc
@@ -1928,13 +1928,10 @@
   Strategy* strategy_;
 };
 
-void MailboxReleased(const gpu::SyncToken& sync_token,
-                     bool lost_resource,
-                     cc::BlockingTaskRunner* main_thread_task_runner) {}
+void MailboxReleased(const gpu::SyncToken& sync_token, bool lost_resource) {}
 
 static void CollectResources(std::vector<ReturnedResource>* array,
-                             const std::vector<ReturnedResource>& returned,
-                             cc::BlockingTaskRunner* main_thread_task_runner) {
+                             const std::vector<ReturnedResource>& returned) {
   array->insert(array->end(), returned.begin(), returned.end());
 }
 
@@ -1961,7 +1958,7 @@
   TextureMailbox mailbox(gpu::Mailbox::Generate(), gpu::SyncToken(),
                          GL_TEXTURE_2D, gfx::Size(256, 256), true, false);
   auto release_callback =
-      cc::SingleReleaseCallbackImpl::Create(base::Bind(&MailboxReleased));
+      SingleReleaseCallback::Create(base::Bind(&MailboxReleased));
   ResourceId resource_id =
       child_resource_provider->CreateResourceFromTextureMailbox(
           mailbox, std::move(release_callback));
@@ -2153,7 +2150,7 @@
   TextureMailbox mailbox(gpu::Mailbox::Generate(), sync_token, GL_TEXTURE_2D,
                          gfx::Size(256, 256), true, false);
   auto release_callback =
-      cc::SingleReleaseCallbackImpl::Create(base::Bind(&MailboxReleased));
+      SingleReleaseCallback::Create(base::Bind(&MailboxReleased));
   ResourceId resource_id =
       child_resource_provider->CreateResourceFromTextureMailbox(
           mailbox, std::move(release_callback));
@@ -2388,7 +2385,7 @@
   TextureMailbox mailbox(gpu::Mailbox::Generate(), gpu::SyncToken(),
                          GL_TEXTURE_2D, gfx::Size(256, 256), true, false);
   auto release_callback =
-      cc::SingleReleaseCallbackImpl::Create(base::Bind(&MailboxReleased));
+      SingleReleaseCallback::Create(base::Bind(&MailboxReleased));
   ResourceId resource_id =
       child_resource_provider->CreateResourceFromTextureMailbox(
           mailbox, std::move(release_callback));
diff --git a/components/viz/service/display/overlay_unittest.cc b/components/viz/service/display/overlay_unittest.cc
index 9c386d4..af79ba2af 100644
--- a/components/viz/service/display/overlay_unittest.cc
+++ b/components/viz/service/display/overlay_unittest.cc
@@ -65,9 +65,10 @@
 const gfx::Transform kSwapTransform =
     gfx::Transform(0, 1, 1, 0, 0, 0);  // x,y -> y,x.
 
-void MailboxReleased(const gpu::SyncToken& sync_token,
-                     bool lost_resource,
-                     cc::BlockingTaskRunner* main_thread_task_runner) {}
+void MailboxReleased(const gpu::SyncToken& sync_token, bool lost_resource) {}
+
+void CollectResources(std::vector<ReturnedResource>* array,
+                      const std::vector<ReturnedResource>& returned) {}
 
 class FullscreenOverlayValidator : public OverlayCandidateValidator {
  public:
@@ -259,10 +260,6 @@
   return pass;
 }
 
-static void CollectResources(std::vector<ReturnedResource>* array,
-                             const std::vector<ReturnedResource>& returned,
-                             cc::BlockingTaskRunner* main_thread_task_runner) {}
-
 ResourceId CreateResource(
     cc::DisplayResourceProvider* parent_resource_provider,
     cc::LayerTreeResourceProvider* child_resource_provider,
@@ -271,7 +268,7 @@
   TextureMailbox mailbox(gpu::Mailbox::Generate(), gpu::SyncToken(),
                          GL_TEXTURE_2D, size, is_overlay_candidate, false);
   auto release_callback =
-      cc::SingleReleaseCallbackImpl::Create(base::Bind(&MailboxReleased));
+      SingleReleaseCallback::Create(base::Bind(&MailboxReleased));
 
   ResourceId resource_id =
       child_resource_provider->CreateResourceFromTextureMailbox(
diff --git a/components/viz/service/display/renderer_pixeltest.cc b/components/viz/service/display/renderer_pixeltest.cc
index fe17eb3..d0c4cd78 100644
--- a/components/viz/service/display/renderer_pixeltest.cc
+++ b/components/viz/service/display/renderer_pixeltest.cc
@@ -251,21 +251,21 @@
 
   ResourceId y_resource = resource_provider->CreateResourceFromTextureMailbox(
       resources.mailboxes[media::VideoFrame::kYPlane],
-      cc::SingleReleaseCallbackImpl::Create(
+      SingleReleaseCallback::Create(
           resources.release_callbacks[media::VideoFrame::kYPlane]));
   ResourceId u_resource = resource_provider->CreateResourceFromTextureMailbox(
       resources.mailboxes[media::VideoFrame::kUPlane],
-      cc::SingleReleaseCallbackImpl::Create(
+      SingleReleaseCallback::Create(
           resources.release_callbacks[media::VideoFrame::kUPlane]));
   ResourceId v_resource = resource_provider->CreateResourceFromTextureMailbox(
       resources.mailboxes[media::VideoFrame::kVPlane],
-      cc::SingleReleaseCallbackImpl::Create(
+      SingleReleaseCallback::Create(
           resources.release_callbacks[media::VideoFrame::kVPlane]));
   ResourceId a_resource = 0;
   if (with_alpha) {
     a_resource = resource_provider->CreateResourceFromTextureMailbox(
         resources.mailboxes[media::VideoFrame::kAPlane],
-        cc::SingleReleaseCallbackImpl::Create(
+        SingleReleaseCallback::Create(
             resources.release_callbacks[media::VideoFrame::kAPlane]));
   }
 
@@ -337,7 +337,7 @@
 
   ResourceId y_resource = resource_provider->CreateResourceFromTextureMailbox(
       resources.mailboxes[0],
-      cc::SingleReleaseCallbackImpl::Create(resources.release_callbacks[0]));
+      SingleReleaseCallback::Create(resources.release_callbacks[0]));
 
   auto* quad = render_pass->CreateAndAppendDrawQuad<TextureDrawQuad>();
   bool needs_blending = true;
diff --git a/components/viz/service/display/software_renderer_unittest.cc b/components/viz/service/display/software_renderer_unittest.cc
index 9f99d6c..65722d6 100644
--- a/components/viz/service/display/software_renderer_unittest.cc
+++ b/components/viz/service/display/software_renderer_unittest.cc
@@ -9,7 +9,6 @@
 #include "base/bind.h"
 #include "base/memory/ptr_util.h"
 #include "base/run_loop.h"
-#include "cc/output/compositor_frame_metadata.h"
 #include "cc/test/animation_test_common.h"
 #include "cc/test/fake_output_surface.h"
 #include "cc/test/fake_output_surface_client.h"
@@ -17,6 +16,7 @@
 #include "cc/test/geometry_test_utils.h"
 #include "cc/test/render_pass_test_utils.h"
 #include "cc/test/test_shared_bitmap_manager.h"
+#include "components/viz/common/quads/compositor_frame_metadata.h"
 #include "components/viz/common/quads/copy_output_request.h"
 #include "components/viz/common/quads/copy_output_result.h"
 #include "components/viz/common/quads/render_pass.h"
diff --git a/components/viz/service/display/surface_aggregator.cc b/components/viz/service/display/surface_aggregator.cc
index 5116fe5..9a71aad 100644
--- a/components/viz/service/display/surface_aggregator.cc
+++ b/components/viz/service/display/surface_aggregator.cc
@@ -17,8 +17,8 @@
 #include "base/stl_util.h"
 #include "base/trace_event/trace_event.h"
 #include "cc/base/math_util.h"
-#include "cc/output/compositor_frame.h"
 #include "cc/resources/display_resource_provider.h"
+#include "components/viz/common/quads/compositor_frame.h"
 #include "components/viz/common/quads/draw_quad.h"
 #include "components/viz/common/quads/render_pass_draw_quad.h"
 #include "components/viz/common/quads/shared_quad_state.h"
@@ -177,8 +177,7 @@
 // static
 void SurfaceAggregator::UnrefResources(
     base::WeakPtr<SurfaceClient> surface_client,
-    const std::vector<ReturnedResource>& resources,
-    cc::BlockingTaskRunner* main_thread_task_runner) {
+    const std::vector<ReturnedResource>& resources) {
   if (surface_client)
     surface_client->UnrefResources(resources);
 }
@@ -249,7 +248,7 @@
   }
   ++uma_stats_.valid_surface;
 
-  const cc::CompositorFrame& frame = surface->GetActiveFrame();
+  const CompositorFrame& frame = surface->GetActiveFrame();
   bool has_transparent_background =
       frame.metadata.root_background_color == SK_ColorTRANSPARENT;
 
@@ -623,7 +622,7 @@
   }
 }
 
-void SurfaceAggregator::CopyPasses(const cc::CompositorFrame& frame,
+void SurfaceAggregator::CopyPasses(const CompositorFrame& frame,
                                    Surface* surface) {
   // The root surface is allowed to have copy output requests, so grab them
   // off its render passes. This map contains a set of CopyOutputRequests
@@ -729,7 +728,7 @@
   contained_surfaces_[surface_id] = surface->GetActiveFrameIndex();
   if (!surface->HasActiveFrame())
     return gfx::Rect();
-  const cc::CompositorFrame& frame = surface->GetActiveFrame();
+  const CompositorFrame& frame = surface->GetActiveFrame();
   int child_id = 0;
   // TODO(jbauman): hack for unit tests that don't set up rp
   if (provider_) {
@@ -930,7 +929,7 @@
       continue;
     if (!surface->HasActiveFrame())
       continue;
-    const cc::CompositorFrame& frame = surface->GetActiveFrame();
+    const CompositorFrame& frame = surface->GetActiveFrame();
     bool surface_has_copy_requests = false;
     for (const auto& render_pass : frame.render_pass_list) {
       surface_has_copy_requests |= !render_pass->copy_requests.empty();
@@ -974,7 +973,7 @@
   }
 }
 
-cc::CompositorFrame SurfaceAggregator::Aggregate(const SurfaceId& surface_id) {
+CompositorFrame SurfaceAggregator::Aggregate(const SurfaceId& surface_id) {
   uma_stats_.Reset();
 
   Surface* surface = manager_->GetSurfaceForId(surface_id);
@@ -984,10 +983,10 @@
   if (!surface->HasActiveFrame())
     return {};
 
-  const cc::CompositorFrame& root_surface_frame = surface->GetActiveFrame();
+  const CompositorFrame& root_surface_frame = surface->GetActiveFrame();
   TRACE_EVENT0("viz", "SurfaceAggregator::Aggregate");
 
-  cc::CompositorFrame frame;
+  CompositorFrame frame;
 
   dest_pass_list_ = &frame.render_pass_list;
 
diff --git a/components/viz/service/display/surface_aggregator.h b/components/viz/service/display/surface_aggregator.h
index 0619885..34abb432 100644
--- a/components/viz/service/display/surface_aggregator.h
+++ b/components/viz/service/display/surface_aggregator.h
@@ -20,12 +20,11 @@
 #include "ui/gfx/color_space.h"
 
 namespace cc {
-class BlockingTaskRunner;
-class CompositorFrame;
 class DisplayResourceProvider;
 }  // namespace cc
 
 namespace viz {
+class CompositorFrame;
 class Surface;
 class SurfaceClient;
 class SurfaceDrawQuad;
@@ -40,7 +39,7 @@
                     bool aggregate_only_damaged);
   ~SurfaceAggregator();
 
-  cc::CompositorFrame Aggregate(const SurfaceId& surface_id);
+  CompositorFrame Aggregate(const SurfaceId& surface_id);
   void ReleaseResources(const SurfaceId& surface_id);
   SurfaceIndexMap& previous_contained_surfaces() {
     return previous_contained_surfaces_;
@@ -127,7 +126,7 @@
                         int parent_pass,
                         PrewalkResult* result);
   void CopyUndrawnSurfaces(PrewalkResult* prewalk);
-  void CopyPasses(const cc::CompositorFrame& frame, Surface* surface);
+  void CopyPasses(const CompositorFrame& frame, Surface* surface);
   void AddColorConversionPass();
 
   // Remove Surfaces that were referenced before but aren't currently
@@ -144,8 +143,7 @@
                                  const gfx::Rect& full_rect) const;
 
   static void UnrefResources(base::WeakPtr<SurfaceClient> surface_client,
-                             const std::vector<ReturnedResource>& resources,
-                             cc::BlockingTaskRunner* main_thread_task_runner);
+                             const std::vector<ReturnedResource>& resources);
 
   SurfaceManager* manager_;
   cc::DisplayResourceProvider* provider_;
diff --git a/components/viz/service/display/surface_aggregator_perftest.cc b/components/viz/service/display/surface_aggregator_perftest.cc
index 419358c..2e1f107 100644
--- a/components/viz/service/display/surface_aggregator_perftest.cc
+++ b/components/viz/service/display/surface_aggregator_perftest.cc
@@ -4,12 +4,12 @@
 
 #include "base/memory/ptr_util.h"
 #include "cc/base/lap_timer.h"
-#include "cc/output/compositor_frame.h"
 #include "cc/resources/display_resource_provider.h"
 #include "cc/test/fake_output_surface_client.h"
 #include "cc/test/fake_resource_provider.h"
 #include "cc/test/test_context_provider.h"
 #include "cc/test/test_shared_bitmap_manager.h"
+#include "components/viz/common/quads/compositor_frame.h"
 #include "components/viz/common/quads/surface_draw_quad.h"
 #include "components/viz/common/quads/texture_draw_quad.h"
 #include "components/viz/service/display/surface_aggregator.h"
@@ -62,7 +62,7 @@
       auto pass = RenderPass::Create();
       pass->output_rect = gfx::Rect(0, 0, 1, 2);
 
-      cc::CompositorFrame frame = test::MakeEmptyCompositorFrame();
+      CompositorFrame frame = test::MakeEmptyCompositorFrame();
 
       auto* sqs = pass->CreateAndAppendSharedQuadState();
       for (int j = 0; j < num_textures; j++) {
@@ -110,7 +110,7 @@
     timer_.Reset();
     do {
       auto pass = RenderPass::Create();
-      cc::CompositorFrame frame = test::MakeEmptyCompositorFrame();
+      CompositorFrame frame = test::MakeEmptyCompositorFrame();
 
       auto* sqs = pass->CreateAndAppendSharedQuadState();
       auto* surface_quad = pass->CreateAndAppendDrawQuad<SurfaceDrawQuad>();
@@ -132,7 +132,7 @@
       root_support->SubmitCompositorFrame(
           LocalSurfaceId(num_surfaces + 1, kArbitraryToken), std::move(frame));
 
-      cc::CompositorFrame aggregated = aggregator_->Aggregate(
+      CompositorFrame aggregated = aggregator_->Aggregate(
           SurfaceId(FrameSinkId(1, num_surfaces + 1),
                     LocalSurfaceId(num_surfaces + 1, kArbitraryToken)));
       timer_.NextLap();
diff --git a/components/viz/service/display/surface_aggregator_pixeltest.cc b/components/viz/service/display/surface_aggregator_pixeltest.cc
index 1a01210..abaa1b4 100644
--- a/components/viz/service/display/surface_aggregator_pixeltest.cc
+++ b/components/viz/service/display/surface_aggregator_pixeltest.cc
@@ -3,9 +3,9 @@
 // found in the LICENSE file.
 
 #include "build/build_config.h"
-#include "cc/output/compositor_frame.h"
 #include "cc/test/pixel_comparator.h"
 #include "cc/test/pixel_test.h"
+#include "components/viz/common/quads/compositor_frame.h"
 #include "components/viz/common/quads/render_pass.h"
 #include "components/viz/common/quads/solid_color_draw_quad.h"
 #include "components/viz/common/quads/surface_draw_quad.h"
@@ -88,7 +88,7 @@
 
   SurfaceAggregator aggregator(manager_.surface_manager(),
                                resource_provider_.get(), true);
-  cc::CompositorFrame aggregated_frame = aggregator.Aggregate(root_surface_id);
+  CompositorFrame aggregated_frame = aggregator.Aggregate(root_surface_id);
 
   bool discard_alpha = false;
   cc::ExactPixelComparator pixel_comparator(discard_alpha);
@@ -162,7 +162,7 @@
 
   SurfaceAggregator aggregator(manager_.surface_manager(),
                                resource_provider_.get(), true);
-  cc::CompositorFrame aggregated_frame = aggregator.Aggregate(root_surface_id);
+  CompositorFrame aggregated_frame = aggregator.Aggregate(root_surface_id);
 
   bool discard_alpha = false;
   cc::ExactPixelComparator pixel_comparator(discard_alpha);
@@ -292,7 +292,7 @@
 
   SurfaceAggregator aggregator(manager_.surface_manager(),
                                resource_provider_.get(), true);
-  cc::CompositorFrame aggregated_frame = aggregator.Aggregate(root_surface_id);
+  CompositorFrame aggregated_frame = aggregator.Aggregate(root_surface_id);
 
   bool discard_alpha = false;
   cc::ExactPixelComparator pixel_comparator(discard_alpha);
diff --git a/components/viz/service/display/surface_aggregator_unittest.cc b/components/viz/service/display/surface_aggregator_unittest.cc
index f60243d..08fa2092 100644
--- a/components/viz/service/display/surface_aggregator_unittest.cc
+++ b/components/viz/service/display/surface_aggregator_unittest.cc
@@ -14,11 +14,11 @@
 #include "base/memory/ptr_util.h"
 #include "base/memory/weak_ptr.h"
 #include "base/strings/stringprintf.h"
-#include "cc/output/compositor_frame.h"
 #include "cc/resources/display_resource_provider.h"
 #include "cc/test/fake_resource_provider.h"
 #include "cc/test/render_pass_test_utils.h"
 #include "cc/test/test_shared_bitmap_manager.h"
+#include "components/viz/common/quads/compositor_frame.h"
 #include "components/viz/common/quads/render_pass.h"
 #include "components/viz/common/quads/render_pass_draw_quad.h"
 #include "components/viz/common/quads/solid_color_draw_quad.h"
@@ -349,7 +349,7 @@
                           size_t expected_pass_count,
                           SurfaceId* surface_ids,
                           size_t expected_surface_count) {
-    cc::CompositorFrame aggregated_frame = aggregator_.Aggregate(
+    CompositorFrame aggregated_frame = aggregator_.Aggregate(
         SurfaceId(support_->frame_sink_id(), root_local_surface_id_));
 
     TestPassesMatchExpectations(expected_passes, expected_pass_count,
@@ -373,7 +373,7 @@
   void SubmitPassListAsFrame(CompositorFrameSinkSupport* support,
                              const LocalSurfaceId& local_surface_id,
                              RenderPassList* pass_list) {
-    cc::CompositorFrame frame = test::MakeEmptyCompositorFrame();
+    CompositorFrame frame = test::MakeEmptyCompositorFrame();
     pass_list->swap(frame.render_pass_list);
 
     support->SubmitCompositorFrame(local_surface_id, std::move(frame));
@@ -391,7 +391,7 @@
   void QueuePassAsFrame(std::unique_ptr<RenderPass> pass,
                         const LocalSurfaceId& local_surface_id,
                         CompositorFrameSinkSupport* support) {
-    cc::CompositorFrame child_frame = test::MakeEmptyCompositorFrame();
+    CompositorFrame child_frame = test::MakeEmptyCompositorFrame();
     child_frame.render_pass_list.push_back(std::move(pass));
 
     support->SubmitCompositorFrame(local_surface_id, std::move(child_frame));
@@ -456,7 +456,7 @@
                         root_local_surface_id_);
 
   SurfaceId root_surface_id(support_->frame_sink_id(), root_local_surface_id_);
-  cc::CompositorFrame aggregated_frame = aggregator_.Aggregate(root_surface_id);
+  CompositorFrame aggregated_frame = aggregator_.Aggregate(root_surface_id);
 
   auto& render_pass_list = aggregated_frame.render_pass_list;
   ASSERT_EQ(2u, render_pass_list.size());
@@ -503,7 +503,7 @@
 
   SurfaceId surface_id(support_->frame_sink_id(), root_local_surface_id_);
 
-  cc::CompositorFrame aggregated_frame;
+  CompositorFrame aggregated_frame;
   aggregated_frame = aggregator_.Aggregate(surface_id);
   auto id0 = aggregated_frame.render_pass_list[0]->id;
   auto id1 = aggregated_frame.render_pass_list[1]->id;
@@ -605,7 +605,7 @@
   Pass fallback_child_passes[] = {
       Pass(fallback_child_quads, arraysize(fallback_child_quads))};
 
-  // Submit a cc::CompositorFrame to the fallback Surface containing a red
+  // Submit a CompositorFrame to the fallback Surface containing a red
   // SolidColorDrawQuad.
   SubmitCompositorFrame(fallback_child_support.get(), fallback_child_passes,
                         arraysize(fallback_child_passes),
@@ -621,7 +621,7 @@
   SubmitCompositorFrame(support_.get(), root_passes, arraysize(root_passes),
                         root_local_surface_id_);
 
-  // There is no cc::CompositorFrame submitted to |primary_child_surface_id| and
+  // There is no CompositorFrame submitted to |primary_child_surface_id| and
   // so |fallback_child_surface_id| will be embedded and we should see a red
   // SolidColorDrawQuad.
   Quad expected_quads1[] = {
@@ -651,13 +651,13 @@
   Pass primary_child_passes[] = {
       Pass(primary_child_quads, arraysize(primary_child_quads))};
 
-  // Submit a cc::CompositorFrame to the primary Surface containing a green
+  // Submit a CompositorFrame to the primary Surface containing a green
   // SolidColorDrawQuad.
   SubmitCompositorFrame(primary_child_support.get(), primary_child_passes,
                         arraysize(primary_child_passes),
                         primary_child_local_surface_id);
 
-  // Now that the primary Surface has a cc::CompositorFrame, we expect
+  // Now that the primary Surface has a CompositorFrame, we expect
   // SurfaceAggregator to embed the primary Surface, and drop the fallback
   // Surface.
   Quad expected_quads2[] = {
@@ -689,7 +689,7 @@
   Pass primary_child_passes[] = {
       Pass(primary_child_quads, arraysize(primary_child_quads))};
 
-  // Submit a cc::CompositorFrame to the primary Surface containing a green
+  // Submit a CompositorFrame to the primary Surface containing a green
   // SolidColorDrawQuad.
   SubmitCompositorFrame(primary_child_support.get(), primary_child_passes,
                         arraysize(primary_child_passes),
@@ -707,7 +707,7 @@
   Pass fallback_child_passes[] = {
       Pass(fallback_child_quads, arraysize(fallback_child_quads))};
 
-  // Submit a cc::CompositorFrame to the fallback Surface containing a red
+  // Submit a CompositorFrame to the fallback Surface containing a red
   // SolidColorDrawQuad.
   SubmitCompositorFrame(fallback_child_support.get(), fallback_child_passes,
                         arraysize(fallback_child_passes),
@@ -723,7 +723,7 @@
   SubmitCompositorFrame(support_.get(), root_passes, arraysize(root_passes),
                         root_local_surface_id_);
 
-  // The cc::CompositorFrame is submitted to |primary_child_surface_id|, so
+  // The CompositorFrame is submitted to |primary_child_surface_id|, so
   // |fallback_child_surface_id| will not be used and we should see a green
   // SolidColorDrawQuad.
   Quad expected_quads1[] = {
@@ -769,7 +769,7 @@
                         root_local_surface_id_);
 
   SurfaceId root_surface_id(support_->frame_sink_id(), root_local_surface_id_);
-  cc::CompositorFrame aggregated_frame = aggregator_.Aggregate(root_surface_id);
+  CompositorFrame aggregated_frame = aggregator_.Aggregate(root_surface_id);
 
   Quad expected_quads[] = {
       Quad::SolidColorQuad(SK_ColorWHITE, gfx::Rect(5, 5)),
@@ -825,7 +825,7 @@
   Pass root_passes[] = {Pass(root_quads, arraysize(root_quads), 1),
                         Pass(root_quads2, arraysize(root_quads2), 2)};
   {
-    cc::CompositorFrame frame = test::MakeEmptyCompositorFrame();
+    CompositorFrame frame = test::MakeEmptyCompositorFrame();
     AddPasses(&frame.render_pass_list, gfx::Rect(SurfaceSize()), root_passes,
               arraysize(root_passes));
     frame.render_pass_list[0]->copy_requests.push_back(std::move(copy_request));
@@ -836,7 +836,7 @@
   }
 
   SurfaceId root_surface_id(support_->frame_sink_id(), root_local_surface_id_);
-  cc::CompositorFrame aggregated_frame = aggregator_.Aggregate(root_surface_id);
+  CompositorFrame aggregated_frame = aggregator_.Aggregate(root_surface_id);
 
   Quad expected_quads[] = {
       Quad::SolidColorQuad(SK_ColorWHITE, gfx::Rect(5, 5)),
@@ -864,10 +864,9 @@
   }
 
   // Ensure copy requests have been removed from root surface.
-  const cc::CompositorFrame& original_frame =
-      manager_.surface_manager()
-          ->GetSurfaceForId(root_surface_id)
-          ->GetActiveFrame();
+  const CompositorFrame& original_frame = manager_.surface_manager()
+                                              ->GetSurfaceForId(root_surface_id)
+                                              ->GetActiveFrame();
   const auto& original_pass_list = original_frame.render_pass_list;
   ASSERT_EQ(2u, original_pass_list.size());
   DCHECK(original_pass_list[0]->copy_requests.empty());
@@ -911,7 +910,7 @@
   Pass parent_passes[] = {Pass(parent_quads, arraysize(parent_quads))};
 
   {
-    cc::CompositorFrame frame = test::MakeEmptyCompositorFrame();
+    CompositorFrame frame = test::MakeEmptyCompositorFrame();
 
     AddPasses(&frame.render_pass_list, gfx::Rect(SurfaceSize()), parent_passes,
               arraysize(parent_passes));
@@ -927,7 +926,7 @@
   Pass root_passes[] = {Pass(root_quads, arraysize(root_quads))};
 
   {
-    cc::CompositorFrame frame = test::MakeEmptyCompositorFrame();
+    CompositorFrame frame = test::MakeEmptyCompositorFrame();
     AddPasses(&frame.render_pass_list, gfx::Rect(SurfaceSize()), root_passes,
               arraysize(root_passes));
 
@@ -940,7 +939,7 @@
   }
 
   SurfaceId root_surface_id(support_->frame_sink_id(), root_local_surface_id_);
-  cc::CompositorFrame aggregated_frame = aggregator_.Aggregate(root_surface_id);
+  CompositorFrame aggregated_frame = aggregator_.Aggregate(root_surface_id);
 
   // First pass should come from surface that had a copy request but was not
   // referenced directly. The second pass comes from the root surface.
@@ -1009,7 +1008,7 @@
                         root_local_surface_id_);
 
   SurfaceId root_surface_id(support_->frame_sink_id(), root_local_surface_id_);
-  cc::CompositorFrame aggregated_frame = aggregator_.Aggregate(root_surface_id);
+  CompositorFrame aggregated_frame = aggregator_.Aggregate(root_surface_id);
 
   const auto& aggregated_pass_list = aggregated_frame.render_pass_list;
 
@@ -1288,7 +1287,7 @@
                         root_local_surface_id_);
 
   SurfaceId root_surface_id(support_->frame_sink_id(), root_local_surface_id_);
-  cc::CompositorFrame aggregated_frame = aggregator_.Aggregate(root_surface_id);
+  CompositorFrame aggregated_frame = aggregator_.Aggregate(root_surface_id);
 
   const auto& aggregated_pass_list = aggregated_frame.render_pass_list;
 
@@ -1463,7 +1462,7 @@
                    support_.get());
 
   SurfaceId root_surface_id(support_->frame_sink_id(), root_local_surface_id_);
-  cc::CompositorFrame aggregated_frame = aggregator_.Aggregate(root_surface_id);
+  CompositorFrame aggregated_frame = aggregator_.Aggregate(root_surface_id);
 
   const auto& aggregated_pass_list = aggregated_frame.render_pass_list;
 
@@ -1520,7 +1519,7 @@
         Pass(child_quads[0], arraysize(child_quads[0]), child_pass_id[0]),
         Pass(child_quads[1], arraysize(child_quads[1]), child_pass_id[1])};
 
-    cc::CompositorFrame child_frame = test::MakeEmptyCompositorFrame();
+    CompositorFrame child_frame = test::MakeEmptyCompositorFrame();
     AddPasses(&child_frame.render_pass_list, gfx::Rect(SurfaceSize()),
               child_passes, arraysize(child_passes));
 
@@ -1552,7 +1551,7 @@
         Pass(middle_quads, arraysize(middle_quads)),
     };
 
-    cc::CompositorFrame middle_frame = test::MakeEmptyCompositorFrame();
+    CompositorFrame middle_frame = test::MakeEmptyCompositorFrame();
     AddPasses(&middle_frame.render_pass_list, gfx::Rect(SurfaceSize()),
               middle_passes, arraysize(middle_passes));
 
@@ -1576,7 +1575,7 @@
   Pass root_passes[] = {Pass(secondary_quads, arraysize(secondary_quads)),
                         Pass(root_quads, arraysize(root_quads))};
 
-  cc::CompositorFrame root_frame = test::MakeEmptyCompositorFrame();
+  CompositorFrame root_frame = test::MakeEmptyCompositorFrame();
   AddPasses(&root_frame.render_pass_list, gfx::Rect(SurfaceSize()), root_passes,
             arraysize(root_passes));
 
@@ -1595,7 +1594,7 @@
                                   std::move(root_frame));
 
   SurfaceId root_surface_id(support_->frame_sink_id(), root_local_surface_id_);
-  cc::CompositorFrame aggregated_frame = aggregator_.Aggregate(root_surface_id);
+  CompositorFrame aggregated_frame = aggregator_.Aggregate(root_surface_id);
 
   const auto& aggregated_pass_list = aggregated_frame.render_pass_list;
 
@@ -1676,7 +1675,7 @@
   Quad child_quads[] = {Quad::RenderPassQuad(1)};
   Pass child_passes[] = {Pass(child_quads, arraysize(child_quads), 1)};
 
-  cc::CompositorFrame child_frame = test::MakeEmptyCompositorFrame();
+  CompositorFrame child_frame = test::MakeEmptyCompositorFrame();
   AddPasses(&child_frame.render_pass_list, gfx::Rect(SurfaceSize()),
             child_passes, arraysize(child_passes));
 
@@ -1698,7 +1697,7 @@
 
   // Parent surface is only used to test if the transform is applied correctly
   // to the child surface's damage.
-  cc::CompositorFrame parent_surface_frame = test::MakeEmptyCompositorFrame();
+  CompositorFrame parent_surface_frame = test::MakeEmptyCompositorFrame();
   AddPasses(&parent_surface_frame.render_pass_list, gfx::Rect(SurfaceSize()),
             parent_surface_passes, arraysize(parent_surface_passes));
 
@@ -1717,7 +1716,7 @@
       Pass(root_surface_quads, arraysize(root_surface_quads), 1),
       Pass(root_render_pass_quads, arraysize(root_render_pass_quads), 2)};
 
-  cc::CompositorFrame root_frame = test::MakeEmptyCompositorFrame();
+  CompositorFrame root_frame = test::MakeEmptyCompositorFrame();
   AddPasses(&root_frame.render_pass_list, gfx::Rect(SurfaceSize()), root_passes,
             arraysize(root_passes));
 
@@ -1731,7 +1730,7 @@
                                   std::move(root_frame));
 
   SurfaceId root_surface_id(support_->frame_sink_id(), root_local_surface_id_);
-  cc::CompositorFrame aggregated_frame = aggregator_.Aggregate(root_surface_id);
+  CompositorFrame aggregated_frame = aggregator_.Aggregate(root_surface_id);
 
   const auto& aggregated_pass_list = aggregated_frame.render_pass_list;
 
@@ -1742,7 +1741,7 @@
       aggregated_pass_list[1]->damage_rect.Contains(gfx::Rect(SurfaceSize())));
 
   {
-    cc::CompositorFrame child_frame = test::MakeEmptyCompositorFrame();
+    CompositorFrame child_frame = test::MakeEmptyCompositorFrame();
     AddPasses(&child_frame.render_pass_list, gfx::Rect(SurfaceSize()),
               child_passes, arraysize(child_passes));
 
@@ -1756,8 +1755,7 @@
 
     SurfaceId root_surface_id(support_->frame_sink_id(),
                               root_local_surface_id_);
-    cc::CompositorFrame aggregated_frame =
-        aggregator_.Aggregate(root_surface_id);
+    CompositorFrame aggregated_frame = aggregator_.Aggregate(root_surface_id);
 
     const auto& aggregated_pass_list = aggregated_frame.render_pass_list;
 
@@ -1770,7 +1768,7 @@
   }
 
   {
-    cc::CompositorFrame root_frame = test::MakeEmptyCompositorFrame();
+    CompositorFrame root_frame = test::MakeEmptyCompositorFrame();
     AddPasses(&root_frame.render_pass_list, gfx::Rect(SurfaceSize()),
               root_passes, arraysize(root_passes));
 
@@ -1784,7 +1782,7 @@
   }
 
   {
-    cc::CompositorFrame root_frame = test::MakeEmptyCompositorFrame();
+    CompositorFrame root_frame = test::MakeEmptyCompositorFrame();
     AddPasses(&root_frame.render_pass_list, gfx::Rect(SurfaceSize()),
               root_passes, arraysize(root_passes));
 
@@ -1798,8 +1796,7 @@
 
     SurfaceId root_surface_id(support_->frame_sink_id(),
                               root_local_surface_id_);
-    cc::CompositorFrame aggregated_frame =
-        aggregator_.Aggregate(root_surface_id);
+    CompositorFrame aggregated_frame = aggregator_.Aggregate(root_surface_id);
 
     const auto& aggregated_pass_list = aggregated_frame.render_pass_list;
 
@@ -1815,8 +1812,7 @@
   {
     SurfaceId root_surface_id(support_->frame_sink_id(),
                               root_local_surface_id_);
-    cc::CompositorFrame aggregated_frame =
-        aggregator_.Aggregate(root_surface_id);
+    CompositorFrame aggregated_frame = aggregator_.Aggregate(root_surface_id);
 
     const auto& aggregated_pass_list = aggregated_frame.render_pass_list;
 
@@ -1829,8 +1825,7 @@
   // marked as damaged.
   {
     aggregator_.SetFullDamageForSurface(root_surface_id);
-    cc::CompositorFrame aggregated_frame =
-        aggregator_.Aggregate(root_surface_id);
+    CompositorFrame aggregated_frame = aggregator_.Aggregate(root_surface_id);
 
     const auto& aggregated_pass_list = aggregated_frame.render_pass_list;
 
@@ -1850,7 +1845,7 @@
   Pass root_passes[] = {
       Pass(root_render_pass_quads, arraysize(root_render_pass_quads), 2)};
 
-  cc::CompositorFrame root_frame = test::MakeEmptyCompositorFrame();
+  CompositorFrame root_frame = test::MakeEmptyCompositorFrame();
   AddPasses(&root_frame.render_pass_list, gfx::Rect(SurfaceSize()), root_passes,
             arraysize(root_passes));
 
@@ -1862,8 +1857,7 @@
   {
     SurfaceId root_surface_id(support_->frame_sink_id(),
                               root_local_surface_id_);
-    cc::CompositorFrame aggregated_frame =
-        aggregator_.Aggregate(root_surface_id);
+    CompositorFrame aggregated_frame = aggregator_.Aggregate(root_surface_id);
 
     const auto& aggregated_pass_list = aggregated_frame.render_pass_list;
 
@@ -1883,7 +1877,7 @@
     Pass root_passes[] = {
         Pass(root_render_pass_quads, arraysize(root_render_pass_quads), 2)};
 
-    cc::CompositorFrame root_frame = test::MakeEmptyCompositorFrame();
+    CompositorFrame root_frame = test::MakeEmptyCompositorFrame();
     AddPasses(&root_frame.render_pass_list, gfx::Rect(SurfaceSize()),
               root_passes, arraysize(root_passes));
 
@@ -1893,7 +1887,7 @@
                                     std::move(root_frame));
   }
   {
-    cc::CompositorFrame aggregated_frame =
+    CompositorFrame aggregated_frame =
         aggregator_.Aggregate(second_root_surface_id);
 
     const auto& aggregated_pass_list = aggregated_frame.render_pass_list;
@@ -1903,7 +1897,7 @@
     EXPECT_EQ(gfx::Rect(1, 2, 3, 4), aggregated_pass_list[0]->damage_rect);
   }
   {
-    cc::CompositorFrame aggregated_frame =
+    CompositorFrame aggregated_frame =
         aggregator_.Aggregate(second_root_surface_id);
 
     const auto& aggregated_pass_list = aggregated_frame.render_pass_list;
@@ -1987,7 +1981,7 @@
   }
 
   SurfaceId root_surface_id(support_->frame_sink_id(), root_local_surface_id_);
-  cc::CompositorFrame aggregated_frame = aggregator_.Aggregate(root_surface_id);
+  CompositorFrame aggregated_frame = aggregator_.Aggregate(root_surface_id);
 
   const auto& aggregated_pass_list = aggregated_frame.render_pass_list;
 
@@ -2020,8 +2014,7 @@
   }
 
   {
-    cc::CompositorFrame aggregated_frame =
-        aggregator_.Aggregate(root_surface_id);
+    CompositorFrame aggregated_frame = aggregator_.Aggregate(root_surface_id);
 
     const auto& aggregated_pass_list = aggregated_frame.render_pass_list;
 
@@ -2070,8 +2063,7 @@
   }
 
   {
-    cc::CompositorFrame aggregated_frame =
-        aggregator_.Aggregate(root_surface_id);
+    CompositorFrame aggregated_frame = aggregator_.Aggregate(root_surface_id);
 
     const auto& aggregated_pass_list = aggregated_frame.render_pass_list;
 
@@ -2091,8 +2083,7 @@
   }
 
   {
-    cc::CompositorFrame aggregated_frame =
-        aggregator_.Aggregate(root_surface_id);
+    CompositorFrame aggregated_frame = aggregator_.Aggregate(root_surface_id);
 
     const auto& aggregated_pass_list = aggregated_frame.render_pass_list;
     // There were no changes since last aggregation, so output should be empty
@@ -2131,8 +2122,7 @@
   }
 
   {
-    cc::CompositorFrame aggregated_frame =
-        aggregator_.Aggregate(root_surface_id);
+    CompositorFrame aggregated_frame = aggregator_.Aggregate(root_surface_id);
 
     const auto& aggregated_pass_list = aggregated_frame.render_pass_list;
 
@@ -2181,8 +2171,7 @@
   }
 
   {
-    cc::CompositorFrame aggregated_frame =
-        aggregator_.Aggregate(root_surface_id);
+    CompositorFrame aggregated_frame = aggregator_.Aggregate(root_surface_id);
     const auto& aggregated_pass_list = aggregated_frame.render_pass_list;
 
     ASSERT_EQ(3u, aggregated_pass_list.size());
@@ -2232,8 +2221,7 @@
   }
 
   {
-    cc::CompositorFrame aggregated_frame =
-        aggregator_.Aggregate(root_surface_id);
+    CompositorFrame aggregated_frame = aggregator_.Aggregate(root_surface_id);
 
     const auto& aggregated_pass_list = aggregated_frame.render_pass_list;
 
@@ -2279,7 +2267,7 @@
                                         SurfaceId child_id,
                                         CompositorFrameSinkSupport* support,
                                         SurfaceId surface_id) {
-  cc::CompositorFrame frame = test::MakeEmptyCompositorFrame();
+  CompositorFrame frame = test::MakeEmptyCompositorFrame();
   auto pass = RenderPass::Create();
   pass->SetNew(1, gfx::Rect(0, 0, 20, 20), gfx::Rect(), gfx::Transform());
   auto* sqs = pass->CreateAndAppendSharedQuadState();
@@ -2331,7 +2319,7 @@
   SubmitCompositorFrameWithResources(ids, arraysize(ids), true, SurfaceId(),
                                      support.get(), surface_id);
 
-  cc::CompositorFrame frame = aggregator_->Aggregate(surface_id);
+  CompositorFrame frame = aggregator_->Aggregate(surface_id);
 
   // Nothing should be available to be returned yet.
   EXPECT_TRUE(client.returned_resources().empty());
@@ -2369,7 +2357,7 @@
   SubmitCompositorFrameWithResources(ids, arraysize(ids), true, SurfaceId(),
                                      support.get(), surface_id1);
 
-  cc::CompositorFrame frame = aggregator_->Aggregate(surface_id1);
+  CompositorFrame frame = aggregator_->Aggregate(surface_id1);
 
   // Nothing should be available to be returned yet.
   EXPECT_TRUE(client.returned_resources().empty());
@@ -2400,7 +2388,7 @@
   LocalSurfaceId local_surface_id(7u, base::UnguessableToken::Create());
   SurfaceId surface_id(support->frame_sink_id(), local_surface_id);
 
-  cc::CompositorFrame frame = test::MakeCompositorFrame();
+  CompositorFrame frame = test::MakeCompositorFrame();
   TransferableResource resource;
   resource.id = 11;
   // ResourceProvider is software but resource is not, so it should be
@@ -2409,7 +2397,7 @@
   frame.resource_list.push_back(resource);
   support->SubmitCompositorFrame(local_surface_id, std::move(frame));
 
-  cc::CompositorFrame returned_frame = aggregator_->Aggregate(surface_id);
+  CompositorFrame returned_frame = aggregator_->Aggregate(surface_id);
 
   // Nothing should be available to be returned yet.
   EXPECT_TRUE(client.returned_resources().empty());
@@ -2441,7 +2429,7 @@
   SubmitCompositorFrameWithResources(ids2, arraysize(ids2), true, SurfaceId(),
                                      support2.get(), surface2_id);
 
-  cc::CompositorFrame frame = aggregator_->Aggregate(surface1_id);
+  CompositorFrame frame = aggregator_->Aggregate(surface1_id);
 
   SubmitCompositorFrameWithResources(NULL, 0, true, SurfaceId(), support1.get(),
                                      surface1_id);
@@ -2501,7 +2489,7 @@
                                      middle_surface_id, root_support.get(),
                                      root_surface_id);
 
-  cc::CompositorFrame frame;
+  CompositorFrame frame;
   frame = aggregator_->Aggregate(root_surface_id);
 
   auto* pass_list = &frame.render_pass_list;
@@ -2539,7 +2527,7 @@
   SubmitCompositorFrameWithResources(ids, arraysize(ids), true, SurfaceId(),
                                      support1.get(), surface1_id);
 
-  cc::CompositorFrame frame = aggregator_->Aggregate(surface1_id);
+  CompositorFrame frame = aggregator_->Aggregate(surface1_id);
 
   auto* render_pass = frame.render_pass_list.back().get();
 
@@ -2557,7 +2545,7 @@
                          SK_ColorWHITE, nullptr);
     pass->copy_requests.push_back(CopyOutputRequest::CreateStubForTesting());
 
-    cc::CompositorFrame frame = test::MakeEmptyCompositorFrame();
+    CompositorFrame frame = test::MakeEmptyCompositorFrame();
     frame.render_pass_list.push_back(std::move(pass));
 
     support2->SubmitCompositorFrame(local_frame2_id, std::move(frame));
@@ -2607,7 +2595,7 @@
 
   SurfaceId surface_id(support_->frame_sink_id(), root_local_surface_id_);
 
-  cc::CompositorFrame aggregated_frame;
+  CompositorFrame aggregated_frame;
   aggregator_.SetOutputColorSpace(color_space1, color_space1);
   aggregated_frame = aggregator_.Aggregate(surface_id);
   EXPECT_EQ(2u, aggregated_frame.render_pass_list.size());
@@ -2635,7 +2623,7 @@
   Pass child_surface_passes[] = {
       Pass(child_surface_quads, arraysize(child_surface_quads), 1)};
 
-  cc::CompositorFrame child_surface_frame = test::MakeEmptyCompositorFrame();
+  CompositorFrame child_surface_frame = test::MakeEmptyCompositorFrame();
   AddPasses(&child_surface_frame.render_pass_list, gfx::Rect(SurfaceSize()),
             child_surface_passes, arraysize(child_surface_passes));
 
@@ -2651,7 +2639,7 @@
   Pass root_passes[] = {
       Pass(root_surface_quads, arraysize(root_surface_quads), 1)};
 
-  cc::CompositorFrame root_frame = test::MakeEmptyCompositorFrame();
+  CompositorFrame root_frame = test::MakeEmptyCompositorFrame();
   AddPasses(&root_frame.render_pass_list, gfx::Rect(SurfaceSize()), root_passes,
             arraysize(root_passes));
 
@@ -2661,26 +2649,24 @@
 
   // On first frame there is no existing cache texture to worry about re-using,
   // so we don't worry what this bool is set to.
-  cc::CompositorFrame aggregated_frame = aggregator_.Aggregate(root_surface_id);
+  CompositorFrame aggregated_frame = aggregator_.Aggregate(root_surface_id);
 
   // No Surface changed, so no damage should be given.
   {
-    cc::CompositorFrame aggregated_frame =
-        aggregator_.Aggregate(root_surface_id);
+    CompositorFrame aggregated_frame = aggregator_.Aggregate(root_surface_id);
     EXPECT_FALSE(aggregated_frame.render_pass_list[0]
                      ->has_damage_from_contributing_content);
   }
 
   // Change child_frame with damage should set the flag.
   {
-    cc::CompositorFrame child_surface_frame = test::MakeEmptyCompositorFrame();
+    CompositorFrame child_surface_frame = test::MakeEmptyCompositorFrame();
     AddPasses(&child_surface_frame.render_pass_list, gfx::Rect(SurfaceSize()),
               child_surface_passes, arraysize(child_surface_passes));
     child_support_->SubmitCompositorFrame(child_local_surface_id,
                                           std::move(child_surface_frame));
 
-    cc::CompositorFrame aggregated_frame =
-        aggregator_.Aggregate(root_surface_id);
+    CompositorFrame aggregated_frame = aggregator_.Aggregate(root_surface_id);
     // True for new child_frame with damage.
     EXPECT_TRUE(aggregated_frame.render_pass_list[0]
                     ->has_damage_from_contributing_content);
@@ -2688,15 +2674,14 @@
 
   // Change child_frame without damage should not set the flag.
   {
-    cc::CompositorFrame child_surface_frame = test::MakeEmptyCompositorFrame();
+    CompositorFrame child_surface_frame = test::MakeEmptyCompositorFrame();
     AddPasses(&child_surface_frame.render_pass_list, gfx::Rect(SurfaceSize()),
               child_surface_passes, arraysize(child_surface_passes));
     child_surface_frame.render_pass_list[0]->damage_rect = gfx::Rect();
     child_support_->SubmitCompositorFrame(child_local_surface_id,
                                           std::move(child_surface_frame));
 
-    cc::CompositorFrame aggregated_frame =
-        aggregator_.Aggregate(root_surface_id);
+    CompositorFrame aggregated_frame = aggregator_.Aggregate(root_surface_id);
     // False for new child_frame without damage.
     EXPECT_FALSE(aggregated_frame.render_pass_list[0]
                      ->has_damage_from_contributing_content);
@@ -2715,7 +2700,7 @@
   Pass child_surface_passes[] = {
       Pass(child_surface_quads, arraysize(child_surface_quads), 1)};
 
-  cc::CompositorFrame child_surface_frame = test::MakeEmptyCompositorFrame();
+  CompositorFrame child_surface_frame = test::MakeEmptyCompositorFrame();
   AddPasses(&child_surface_frame.render_pass_list, gfx::Rect(SurfaceSize()),
             child_surface_passes, arraysize(child_surface_passes));
 
@@ -2731,7 +2716,7 @@
   Pass root_passes[] = {
       Pass(root_surface_quads, arraysize(root_surface_quads), 1)};
 
-  cc::CompositorFrame root_frame = test::MakeEmptyCompositorFrame();
+  CompositorFrame root_frame = test::MakeEmptyCompositorFrame();
   AddPasses(&root_frame.render_pass_list, gfx::Rect(SurfaceSize()), root_passes,
             arraysize(root_passes));
 
@@ -2741,12 +2726,11 @@
 
   // On first frame there is no existing cache texture to worry about re-using,
   // so we don't worry what this bool is set to.
-  cc::CompositorFrame aggregated_frame = aggregator_.Aggregate(root_surface_id);
+  CompositorFrame aggregated_frame = aggregator_.Aggregate(root_surface_id);
 
   // No Surface changed, so no damage should be given.
   {
-    cc::CompositorFrame aggregated_frame =
-        aggregator_.Aggregate(root_surface_id);
+    CompositorFrame aggregated_frame = aggregator_.Aggregate(root_surface_id);
     EXPECT_FALSE(aggregated_frame.render_pass_list[0]
                      ->has_damage_from_contributing_content);
   }
@@ -2759,7 +2743,7 @@
   SurfaceId grand_child_surface_id(grand_child_support->frame_sink_id(),
                                    grand_child_local_surface_id);
   {
-    cc::CompositorFrame grand_child_frame = test::MakeEmptyCompositorFrame();
+    CompositorFrame grand_child_frame = test::MakeEmptyCompositorFrame();
     AddPasses(&grand_child_frame.render_pass_list, gfx::Rect(SurfaceSize()),
               grand_child_passes, arraysize(grand_child_passes));
 
@@ -2779,8 +2763,7 @@
     child_support_->SubmitCompositorFrame(child_local_surface_id,
                                           std::move(child_surface_frame));
 
-    cc::CompositorFrame aggregated_frame =
-        aggregator_.Aggregate(root_surface_id);
+    CompositorFrame aggregated_frame = aggregator_.Aggregate(root_surface_id);
     // True for new grand_child_frame.
     EXPECT_TRUE(aggregated_frame.render_pass_list[0]
                     ->has_damage_from_contributing_content);
@@ -2788,22 +2771,20 @@
 
   // No Surface changed, so no damage should be given.
   {
-    cc::CompositorFrame aggregated_frame =
-        aggregator_.Aggregate(root_surface_id);
+    CompositorFrame aggregated_frame = aggregator_.Aggregate(root_surface_id);
     EXPECT_FALSE(aggregated_frame.render_pass_list[0]
                      ->has_damage_from_contributing_content);
   }
 
   // Change grand_child_frame with damage should set the flag.
   {
-    cc::CompositorFrame grand_child_frame = test::MakeEmptyCompositorFrame();
+    CompositorFrame grand_child_frame = test::MakeEmptyCompositorFrame();
     AddPasses(&grand_child_frame.render_pass_list, gfx::Rect(SurfaceSize()),
               grand_child_passes, arraysize(grand_child_passes));
     grand_child_support->SubmitCompositorFrame(grand_child_local_surface_id,
                                                std::move(grand_child_frame));
 
-    cc::CompositorFrame aggregated_frame =
-        aggregator_.Aggregate(root_surface_id);
+    CompositorFrame aggregated_frame = aggregator_.Aggregate(root_surface_id);
     // True for new grand_child_frame with damage.
     EXPECT_TRUE(aggregated_frame.render_pass_list[0]
                     ->has_damage_from_contributing_content);
@@ -2811,15 +2792,14 @@
 
   // Change grand_child_frame without damage should not set the flag.
   {
-    cc::CompositorFrame grand_child_frame = test::MakeEmptyCompositorFrame();
+    CompositorFrame grand_child_frame = test::MakeEmptyCompositorFrame();
     AddPasses(&grand_child_frame.render_pass_list, gfx::Rect(SurfaceSize()),
               grand_child_passes, arraysize(grand_child_passes));
     grand_child_frame.render_pass_list[0]->damage_rect = gfx::Rect();
     grand_child_support->SubmitCompositorFrame(grand_child_local_surface_id,
                                                std::move(grand_child_frame));
 
-    cc::CompositorFrame aggregated_frame =
-        aggregator_.Aggregate(root_surface_id);
+    CompositorFrame aggregated_frame = aggregator_.Aggregate(root_surface_id);
     // False for new grand_child_frame without damage.
     EXPECT_FALSE(aggregated_frame.render_pass_list[0]
                      ->has_damage_from_contributing_content);
@@ -2834,7 +2814,7 @@
   Quad child_quads[] = {Quad::RenderPassQuad(1)};
   Pass child_passes[] = {Pass(child_quads, arraysize(child_quads), 1)};
 
-  cc::CompositorFrame child_frame = test::MakeEmptyCompositorFrame();
+  CompositorFrame child_frame = test::MakeEmptyCompositorFrame();
   AddPasses(&child_frame.render_pass_list, gfx::Rect(SurfaceSize()),
             child_passes, arraysize(child_passes));
 
@@ -2853,7 +2833,7 @@
       Pass(root_surface_quads, arraysize(root_surface_quads), 1),
       Pass(root_render_pass_quads, arraysize(root_render_pass_quads), 2)};
 
-  cc::CompositorFrame root_frame = test::MakeEmptyCompositorFrame();
+  CompositorFrame root_frame = test::MakeEmptyCompositorFrame();
   AddPasses(&root_frame.render_pass_list, gfx::Rect(SurfaceSize()), root_passes,
             arraysize(root_passes));
 
@@ -2861,7 +2841,7 @@
                                   std::move(root_frame));
 
   SurfaceId root_surface_id(support_->frame_sink_id(), root_local_surface_id_);
-  cc::CompositorFrame aggregated_frame = aggregator_.Aggregate(root_surface_id);
+  CompositorFrame aggregated_frame = aggregator_.Aggregate(root_surface_id);
 
   // On first frame there is no existing cache texture to worry about re-using,
   // so we don't worry what this bool is set to.
@@ -2871,8 +2851,7 @@
 
   // No Surface changed, so no damage should be given.
   {
-    cc::CompositorFrame aggregated_frame =
-        aggregator_.Aggregate(root_surface_id);
+    CompositorFrame aggregated_frame = aggregator_.Aggregate(root_surface_id);
     EXPECT_FALSE(aggregated_frame.render_pass_list[0]
                      ->has_damage_from_contributing_content);
     EXPECT_FALSE(aggregated_frame.render_pass_list[1]
@@ -2881,14 +2860,13 @@
 
   // Changing child_frame should damage both render_pass.
   {
-    cc::CompositorFrame child_frame = test::MakeEmptyCompositorFrame();
+    CompositorFrame child_frame = test::MakeEmptyCompositorFrame();
     AddPasses(&child_frame.render_pass_list, gfx::Rect(SurfaceSize()),
               child_passes, arraysize(child_passes));
     child_support_->SubmitCompositorFrame(child_local_surface_id,
                                           std::move(child_frame));
 
-    cc::CompositorFrame aggregated_frame =
-        aggregator_.Aggregate(root_surface_id);
+    CompositorFrame aggregated_frame = aggregator_.Aggregate(root_surface_id);
     // True for new child_frame.
     EXPECT_TRUE(aggregated_frame.render_pass_list[0]
                     ->has_damage_from_contributing_content);
@@ -2909,7 +2887,7 @@
       Pass(root_quads[0], arraysize(root_quads[0]), pass_id[0]),
       Pass(root_quads[1], arraysize(root_quads[1]), pass_id[1])};
 
-  cc::CompositorFrame root_frame = test::MakeEmptyCompositorFrame();
+  CompositorFrame root_frame = test::MakeEmptyCompositorFrame();
   AddPasses(&root_frame.render_pass_list, gfx::Rect(SurfaceSize()), root_passes,
             arraysize(root_passes));
 
@@ -2917,7 +2895,7 @@
                                   std::move(root_frame));
 
   SurfaceId root_surface_id(support_->frame_sink_id(), root_local_surface_id_);
-  cc::CompositorFrame aggregated_frame = aggregator_.Aggregate(root_surface_id);
+  CompositorFrame aggregated_frame = aggregator_.Aggregate(root_surface_id);
 
   const auto& aggregated_pass_list = aggregated_frame.render_pass_list;
 
@@ -2932,7 +2910,7 @@
 
   // For offscreen render pass, only the visible area is damaged.
   {
-    cc::CompositorFrame root_frame = test::MakeEmptyCompositorFrame();
+    CompositorFrame root_frame = test::MakeEmptyCompositorFrame();
     AddPasses(&root_frame.render_pass_list, gfx::Rect(SurfaceSize()),
               root_passes, arraysize(root_passes));
 
@@ -2948,8 +2926,7 @@
     support_->SubmitCompositorFrame(root_local_surface_id_,
                                     std::move(root_frame));
 
-    cc::CompositorFrame aggregated_frame =
-        aggregator_.Aggregate(root_surface_id);
+    CompositorFrame aggregated_frame = aggregator_.Aggregate(root_surface_id);
     const auto& aggregated_pass_list = aggregated_frame.render_pass_list;
 
     // Only the visible area is damaged.
@@ -2959,7 +2936,7 @@
 
   // For offscreen cached render pass, should have full damage.
   {
-    cc::CompositorFrame root_frame = test::MakeEmptyCompositorFrame();
+    CompositorFrame root_frame = test::MakeEmptyCompositorFrame();
     AddPasses(&root_frame.render_pass_list, gfx::Rect(SurfaceSize()),
               root_passes, arraysize(root_passes));
 
@@ -2976,8 +2953,7 @@
     support_->SubmitCompositorFrame(root_local_surface_id_,
                                     std::move(root_frame));
 
-    cc::CompositorFrame aggregated_frame =
-        aggregator_.Aggregate(root_surface_id);
+    CompositorFrame aggregated_frame = aggregator_.Aggregate(root_surface_id);
     const auto& aggregated_pass_list = aggregated_frame.render_pass_list;
 
     // Should have full damage.
@@ -2999,7 +2975,7 @@
       Pass(child_quads[0], arraysize(child_quads[0]), pass_id[0]),
       Pass(child_quads[1], arraysize(child_quads[1]), pass_id[1])};
 
-  cc::CompositorFrame child_frame = test::MakeEmptyCompositorFrame();
+  CompositorFrame child_frame = test::MakeEmptyCompositorFrame();
   AddPasses(&child_frame.render_pass_list, gfx::Rect(SurfaceSize()),
             child_passes, arraysize(child_passes));
 
@@ -3016,7 +2992,7 @@
   Pass root_passes[] = {
       Pass(root_surface_quads, arraysize(root_surface_quads), 1)};
 
-  cc::CompositorFrame root_frame = test::MakeEmptyCompositorFrame();
+  CompositorFrame root_frame = test::MakeEmptyCompositorFrame();
   AddPasses(&root_frame.render_pass_list, gfx::Rect(SurfaceSize()), root_passes,
             arraysize(root_passes));
 
@@ -3024,7 +3000,7 @@
                                   std::move(root_frame));
 
   SurfaceId root_surface_id(support_->frame_sink_id(), root_local_surface_id_);
-  cc::CompositorFrame aggregated_frame = aggregator_.Aggregate(root_surface_id);
+  CompositorFrame aggregated_frame = aggregator_.Aggregate(root_surface_id);
 
   const auto& aggregated_pass_list = aggregated_frame.render_pass_list;
 
@@ -3039,7 +3015,7 @@
 
   // For offscreen render pass, only the visible area is damaged.
   {
-    cc::CompositorFrame child_frame = test::MakeEmptyCompositorFrame();
+    CompositorFrame child_frame = test::MakeEmptyCompositorFrame();
     AddPasses(&child_frame.render_pass_list, gfx::Rect(SurfaceSize()),
               child_passes, arraysize(child_passes));
 
@@ -3055,8 +3031,7 @@
     child_support_->SubmitCompositorFrame(child_local_surface_id,
                                           std::move(child_frame));
 
-    cc::CompositorFrame aggregated_frame =
-        aggregator_.Aggregate(root_surface_id);
+    CompositorFrame aggregated_frame = aggregator_.Aggregate(root_surface_id);
     const auto& aggregated_pass_list = aggregated_frame.render_pass_list;
 
     // Only the visible area is damaged.
@@ -3066,7 +3041,7 @@
 
   // For offscreen cached render pass, should have full damage.
   {
-    cc::CompositorFrame child_frame = test::MakeEmptyCompositorFrame();
+    CompositorFrame child_frame = test::MakeEmptyCompositorFrame();
     AddPasses(&child_frame.render_pass_list, gfx::Rect(SurfaceSize()),
               child_passes, arraysize(child_passes));
 
@@ -3083,8 +3058,7 @@
     child_support_->SubmitCompositorFrame(child_local_surface_id,
                                           std::move(child_frame));
 
-    cc::CompositorFrame aggregated_frame =
-        aggregator_.Aggregate(root_surface_id);
+    CompositorFrame aggregated_frame = aggregator_.Aggregate(root_surface_id);
     const auto& aggregated_pass_list = aggregated_frame.render_pass_list;
 
     // Should have full damage.
@@ -3156,7 +3130,7 @@
   }
 
   SurfaceId root_surface_id(support_->frame_sink_id(), root_local_surface_id_);
-  cc::CompositorFrame aggregated_frame = aggregator_.Aggregate(root_surface_id);
+  CompositorFrame aggregated_frame = aggregator_.Aggregate(root_surface_id);
 
   const auto& aggregated_pass_list = aggregated_frame.render_pass_list;
 
@@ -3194,8 +3168,7 @@
   }
 
   {
-    cc::CompositorFrame aggregated_frame =
-        aggregator_.Aggregate(root_surface_id);
+    CompositorFrame aggregated_frame = aggregator_.Aggregate(root_surface_id);
     const auto& aggregated_pass_list = aggregated_frame.render_pass_list;
 
     ASSERT_EQ(3u, aggregated_pass_list.size());
diff --git a/components/viz/service/frame_sinks/compositor_frame_sink_impl.cc b/components/viz/service/frame_sinks/compositor_frame_sink_impl.cc
index 9bd756f..bad4f16 100644
--- a/components/viz/service/frame_sinks/compositor_frame_sink_impl.cc
+++ b/components/viz/service/frame_sinks/compositor_frame_sink_impl.cc
@@ -36,7 +36,7 @@
 
 void CompositorFrameSinkImpl::SubmitCompositorFrame(
     const LocalSurfaceId& local_surface_id,
-    cc::CompositorFrame frame,
+    CompositorFrame frame,
     mojom::HitTestRegionListPtr hit_test_region_list,
     uint64_t submit_time) {
   if (!support_->SubmitCompositorFrame(local_surface_id, std::move(frame),
diff --git a/components/viz/service/frame_sinks/compositor_frame_sink_impl.h b/components/viz/service/frame_sinks/compositor_frame_sink_impl.h
index 7734fdd9..21f8e2f09 100644
--- a/components/viz/service/frame_sinks/compositor_frame_sink_impl.h
+++ b/components/viz/service/frame_sinks/compositor_frame_sink_impl.h
@@ -30,7 +30,7 @@
   // mojom::CompositorFrameSink:
   void SetNeedsBeginFrame(bool needs_begin_frame) override;
   void SubmitCompositorFrame(const LocalSurfaceId& local_surface_id,
-                             cc::CompositorFrame frame,
+                             CompositorFrame frame,
                              mojom::HitTestRegionListPtr hit_test_region_list,
                              uint64_t submit_time) override;
   void DidNotProduceFrame(const BeginFrameAck& begin_frame_ack) override;
diff --git a/components/viz/service/frame_sinks/compositor_frame_sink_support.cc b/components/viz/service/frame_sinks/compositor_frame_sink_support.cc
index 08311ac..0409c81c 100644
--- a/components/viz/service/frame_sinks/compositor_frame_sink_support.cc
+++ b/components/viz/service/frame_sinks/compositor_frame_sink_support.cc
@@ -7,8 +7,8 @@
 #include <algorithm>
 #include <utility>
 
-#include "cc/output/compositor_frame.h"
 #include "components/viz/common/frame_sinks/begin_frame_source.h"
+#include "components/viz/common/quads/compositor_frame.h"
 #include "components/viz/common/surfaces/surface_info.h"
 #include "components/viz/service/display/display.h"
 #include "components/viz/service/frame_sinks/frame_sink_manager_impl.h"
@@ -138,7 +138,7 @@
 
 void CompositorFrameSinkSupport::SubmitCompositorFrame(
     const LocalSurfaceId& local_surface_id,
-    cc::CompositorFrame frame,
+    CompositorFrame frame,
     mojom::HitTestRegionListPtr hit_test_region_list,
     uint64_t submit_time) {
   SubmitCompositorFrame(local_surface_id, std::move(frame),
@@ -147,7 +147,7 @@
 
 bool CompositorFrameSinkSupport::SubmitCompositorFrame(
     const LocalSurfaceId& local_surface_id,
-    cc::CompositorFrame frame,
+    CompositorFrame frame,
     mojom::HitTestRegionListPtr hit_test_region_list) {
   TRACE_EVENT0("cc", "CompositorFrameSinkSupport::SubmitCompositorFrame");
   DCHECK(local_surface_id.is_valid());
diff --git a/components/viz/service/frame_sinks/compositor_frame_sink_support.h b/components/viz/service/frame_sinks/compositor_frame_sink_support.h
index 7847f6d9..7b8b92f 100644
--- a/components/viz/service/frame_sinks/compositor_frame_sink_support.h
+++ b/components/viz/service/frame_sinks/compositor_frame_sink_support.h
@@ -12,8 +12,8 @@
 #include "base/callback.h"
 #include "base/compiler_specific.h"
 #include "base/memory/weak_ptr.h"
-#include "cc/output/compositor_frame.h"
 #include "components/viz/common/frame_sinks/begin_frame_source.h"
+#include "components/viz/common/quads/compositor_frame.h"
 #include "components/viz/common/surfaces/surface_info.h"
 #include "components/viz/service/frame_sinks/frame_sink_manager_client.h"
 #include "components/viz/service/frame_sinks/referenced_surface_tracker.h"
@@ -82,7 +82,7 @@
   void SetNeedsBeginFrame(bool needs_begin_frame) override;
   void DidNotProduceFrame(const BeginFrameAck& ack) override;
   void SubmitCompositorFrame(const LocalSurfaceId& local_surface_id,
-                             cc::CompositorFrame frame,
+                             CompositorFrame frame,
                              mojom::HitTestRegionListPtr hit_test_region_list,
                              uint64_t submit_time) override;
 
@@ -94,7 +94,7 @@
   // TODO(kylechar): Merge the two SubmitCompositorFrame() methods.
   bool SubmitCompositorFrame(
       const LocalSurfaceId& local_surface_id,
-      cc::CompositorFrame frame,
+      CompositorFrame frame,
       mojom::HitTestRegionListPtr hit_test_region_list = nullptr);
   void RequestCopyOfSurface(std::unique_ptr<CopyOutputRequest> request);
 
diff --git a/components/viz/service/frame_sinks/compositor_frame_sink_support_unittest.cc b/components/viz/service/frame_sinks/compositor_frame_sink_support_unittest.cc
index e4af54a..bd75f46 100644
--- a/components/viz/service/frame_sinks/compositor_frame_sink_support_unittest.cc
+++ b/components/viz/service/frame_sinks/compositor_frame_sink_support_unittest.cc
@@ -5,8 +5,8 @@
 #include "components/viz/service/frame_sinks/compositor_frame_sink_support.h"
 
 #include "base/macros.h"
-#include "cc/output/compositor_frame.h"
 #include "cc/resources/resource_provider.h"
+#include "components/viz/common/quads/compositor_frame.h"
 #include "components/viz/common/quads/copy_output_request.h"
 #include "components/viz/common/quads/copy_output_result.h"
 #include "components/viz/common/surfaces/frame_sink_id.h"
diff --git a/components/viz/service/frame_sinks/direct_layer_tree_frame_sink.cc b/components/viz/service/frame_sinks/direct_layer_tree_frame_sink.cc
index b9baa9d..b98c32c 100644
--- a/components/viz/service/frame_sinks/direct_layer_tree_frame_sink.cc
+++ b/components/viz/service/frame_sinks/direct_layer_tree_frame_sink.cc
@@ -5,8 +5,8 @@
 #include "components/viz/service/frame_sinks/direct_layer_tree_frame_sink.h"
 
 #include "base/bind.h"
-#include "cc/output/compositor_frame.h"
 #include "cc/trees/layer_tree_frame_sink_client.h"
+#include "components/viz/common/quads/compositor_frame.h"
 #include "components/viz/common/surfaces/frame_sink_id.h"
 #include "components/viz/common/surfaces/local_surface_id_allocator.h"
 #include "components/viz/service/display/display.h"
@@ -96,8 +96,7 @@
   cc::LayerTreeFrameSink::DetachFromClient();
 }
 
-void DirectLayerTreeFrameSink::SubmitCompositorFrame(
-    cc::CompositorFrame frame) {
+void DirectLayerTreeFrameSink::SubmitCompositorFrame(CompositorFrame frame) {
   DCHECK(frame.metadata.begin_frame_ack.has_damage);
   DCHECK_LE(BeginFrameArgs::kStartingFrameNumber,
             frame.metadata.begin_frame_ack.sequence_number);
diff --git a/components/viz/service/frame_sinks/direct_layer_tree_frame_sink.h b/components/viz/service/frame_sinks/direct_layer_tree_frame_sink.h
index 52d91bf0..58606db 100644
--- a/components/viz/service/frame_sinks/direct_layer_tree_frame_sink.h
+++ b/components/viz/service/frame_sinks/direct_layer_tree_frame_sink.h
@@ -54,7 +54,7 @@
   // LayerTreeFrameSink implementation.
   bool BindToClient(cc::LayerTreeFrameSinkClient* client) override;
   void DetachFromClient() override;
-  void SubmitCompositorFrame(cc::CompositorFrame frame) override;
+  void SubmitCompositorFrame(CompositorFrame frame) override;
   void DidNotProduceFrame(const BeginFrameAck& ack) override;
 
   // DisplayClient implementation.
diff --git a/components/viz/service/frame_sinks/direct_layer_tree_frame_sink_unittest.cc b/components/viz/service/frame_sinks/direct_layer_tree_frame_sink_unittest.cc
index 606a355..f79f346 100644
--- a/components/viz/service/frame_sinks/direct_layer_tree_frame_sink_unittest.cc
+++ b/components/viz/service/frame_sinks/direct_layer_tree_frame_sink_unittest.cc
@@ -107,7 +107,7 @@
     auto render_pass = RenderPass::Create();
     render_pass->SetNew(1, display_rect_, damage_rect, gfx::Transform());
 
-    cc::CompositorFrame frame = test::MakeEmptyCompositorFrame();
+    CompositorFrame frame = test::MakeEmptyCompositorFrame();
     frame.metadata.begin_frame_ack = BeginFrameAck(0, 1, true);
     frame.render_pass_list.push_back(std::move(render_pass));
 
diff --git a/components/viz/service/frame_sinks/root_compositor_frame_sink_impl.cc b/components/viz/service/frame_sinks/root_compositor_frame_sink_impl.cc
index 7ea9ed6..856a769 100644
--- a/components/viz/service/frame_sinks/root_compositor_frame_sink_impl.cc
+++ b/components/viz/service/frame_sinks/root_compositor_frame_sink_impl.cc
@@ -77,7 +77,7 @@
 
 void RootCompositorFrameSinkImpl::SubmitCompositorFrame(
     const LocalSurfaceId& local_surface_id,
-    cc::CompositorFrame frame,
+    CompositorFrame frame,
     mojom::HitTestRegionListPtr hit_test_region_list,
     uint64_t submit_time) {
   if (!support_->SubmitCompositorFrame(local_surface_id, std::move(frame),
diff --git a/components/viz/service/frame_sinks/root_compositor_frame_sink_impl.h b/components/viz/service/frame_sinks/root_compositor_frame_sink_impl.h
index c4cb9b5..4b0f420 100644
--- a/components/viz/service/frame_sinks/root_compositor_frame_sink_impl.h
+++ b/components/viz/service/frame_sinks/root_compositor_frame_sink_impl.h
@@ -52,7 +52,7 @@
   // mojom::CompositorFrameSink:
   void SetNeedsBeginFrame(bool needs_begin_frame) override;
   void SubmitCompositorFrame(const LocalSurfaceId& local_surface_id,
-                             cc::CompositorFrame frame,
+                             CompositorFrame frame,
                              mojom::HitTestRegionListPtr hit_test_region_list,
                              uint64_t submit_time) override;
   void DidNotProduceFrame(const BeginFrameAck& begin_frame_ack) override;
diff --git a/components/viz/service/frame_sinks/surface_synchronization_unittest.cc b/components/viz/service/frame_sinks/surface_synchronization_unittest.cc
index 3fc1fc9..33f6a58b3 100644
--- a/components/viz/service/frame_sinks/surface_synchronization_unittest.cc
+++ b/components/viz/service/frame_sinks/surface_synchronization_unittest.cc
@@ -210,13 +210,13 @@
 };
 
 // The display root surface should have a surface reference from the top-level
-// root added/removed when a cc::CompositorFrame is submitted with a new
+// root added/removed when a CompositorFrame is submitted with a new
 // SurfaceId.
 TEST_F(SurfaceSynchronizationTest, RootSurfaceReceivesReferences) {
   const SurfaceId display_id_first = MakeSurfaceId(kDisplayFrameSink, 1);
   const SurfaceId display_id_second = MakeSurfaceId(kDisplayFrameSink, 2);
 
-  // Submit a cc::CompositorFrame for the first display root surface.
+  // Submit a CompositorFrame for the first display root surface.
   display_support().SubmitCompositorFrame(display_id_first.local_surface_id(),
                                           MakeCompositorFrame());
 
@@ -227,7 +227,7 @@
                   frame_sink_manager().surface_manager()->GetRootSurfaceId()),
               UnorderedElementsAre(display_id_first));
 
-  // Submit a cc::CompositorFrame for the second display root surface.
+  // Submit a CompositorFrame for the second display root surface.
   display_support().SubmitCompositorFrame(display_id_second.local_surface_id(),
                                           MakeCompositorFrame());
 
@@ -260,7 +260,7 @@
   EXPECT_THAT(parent_surface()->activation_dependencies(),
               UnorderedElementsAre(child_id1, child_id2));
 
-  // Submit a cc::CompositorFrame without any dependencies to |child_id1|.
+  // Submit a CompositorFrame without any dependencies to |child_id1|.
   // parent_support should now only be blocked on |child_id2|.
   child_support1().SubmitCompositorFrame(child_id1.local_surface_id(),
                                          MakeCompositorFrame());
@@ -271,7 +271,7 @@
   EXPECT_THAT(parent_surface()->activation_dependencies(),
               UnorderedElementsAre(child_id2));
 
-  // Submit a cc::CompositorFrame without any dependencies to |child_id2|.
+  // Submit a CompositorFrame without any dependencies to |child_id2|.
   // parent_support should be activated.
   child_support2().SubmitCompositorFrame(child_id2.local_surface_id(),
                                          MakeCompositorFrame());
@@ -322,7 +322,7 @@
   EXPECT_THAT(parent_surface()->activation_dependencies(),
               UnorderedElementsAre(child_id1));
 
-  // Submit a cc::CompositorFrame without any dependencies to |child_id2|.
+  // Submit a CompositorFrame without any dependencies to |child_id2|.
   // parent_support should be activated.
   child_support2().SubmitCompositorFrame(
       child_id2.local_surface_id(),
@@ -382,7 +382,7 @@
   EXPECT_THAT(parent_surface()->activation_dependencies(),
               UnorderedElementsAre(child_id2));
 
-  // Submit a cc::CompositorFrame without any dependencies to |child_id2|.
+  // Submit a CompositorFrame without any dependencies to |child_id2|.
   // parent_support should be activated.
   child_support2().SubmitCompositorFrame(child_id2.local_surface_id(),
                                          MakeCompositorFrame());
@@ -469,35 +469,35 @@
   EXPECT_THAT(child_surface1()->activation_dependencies(), IsEmpty());
 }
 
-// This test verifies at the Surface activates once a cc::CompositorFrame is
+// This test verifies at the Surface activates once a CompositorFrame is
 // submitted that has no unresolved dependencies.
 TEST_F(SurfaceSynchronizationTest, NewFrameOverridesOldDependencies) {
   const SurfaceId parent_id = MakeSurfaceId(kParentFrameSink, 1);
   const SurfaceId arbitrary_id = MakeSurfaceId(kArbitraryFrameSink, 1);
 
-  // Submit a cc::CompositorFrame that depends on |arbitrary_id|.
+  // Submit a CompositorFrame that depends on |arbitrary_id|.
   parent_support().SubmitCompositorFrame(
       parent_id.local_surface_id(),
       MakeCompositorFrame({arbitrary_id}, empty_surface_ids(),
                           std::vector<TransferableResource>()));
 
-  // Verify that the cc::CompositorFrame is blocked on |arbitrary_id|.
+  // Verify that the CompositorFrame is blocked on |arbitrary_id|.
   EXPECT_FALSE(parent_surface()->HasActiveFrame());
   EXPECT_TRUE(parent_surface()->HasPendingFrame());
   EXPECT_THAT(parent_surface()->activation_dependencies(),
               UnorderedElementsAre(arbitrary_id));
 
-  // Submit a cc::CompositorFrame that has no dependencies.
+  // Submit a CompositorFrame that has no dependencies.
   parent_support().SubmitCompositorFrame(parent_id.local_surface_id(),
                                          MakeCompositorFrame());
 
-  // Verify that the cc::CompositorFrame has been activated.
+  // Verify that the CompositorFrame has been activated.
   EXPECT_TRUE(parent_surface()->HasActiveFrame());
   EXPECT_FALSE(parent_surface()->HasPendingFrame());
   EXPECT_THAT(parent_surface()->activation_dependencies(), IsEmpty());
 }
 
-// This test verifies that a pending cc::CompositorFrame does not affect surface
+// This test verifies that a pending CompositorFrame does not affect surface
 // references. A new surface from a child will continue to exist as a temporary
 // reference until the parent's frame activates.
 TEST_F(SurfaceSynchronizationTest, OnlyActiveFramesAffectSurfaceReferences) {
@@ -505,7 +505,7 @@
   const SurfaceId child_id1 = MakeSurfaceId(kChildFrameSink1, 1);
   const SurfaceId child_id2 = MakeSurfaceId(kChildFrameSink2, 1);
 
-  // child_support1 submits a cc::CompositorFrame without any dependencies.
+  // child_support1 submits a CompositorFrame without any dependencies.
   // DidReceiveCompositorFrameAck should call on immediate activation.
   EXPECT_CALL(support_client_, DidReceiveCompositorFrameAck(_)).Times(1);
   child_support1().SubmitCompositorFrame(child_id1.local_surface_id(),
@@ -520,10 +520,10 @@
   // Verify that there's a temporary reference for |child_id1|.
   EXPECT_TRUE(HasTemporaryReference(child_id1));
 
-  // parent_support submits a cc::CompositorFrame that depends on |child_id1|
+  // parent_support submits a CompositorFrame that depends on |child_id1|
   // (which is already active) and |child_id2|. Thus, the parent should not
   // activate immediately. DidReceiveCompositorFrameAck should not be called
-  // immediately because the parent cc::CompositorFrame is also blocked on
+  // immediately because the parent CompositorFrame is also blocked on
   // |child_id2|.
   EXPECT_CALL(support_client_, DidReceiveCompositorFrameAck(_)).Times(0);
   parent_support().SubmitCompositorFrame(
@@ -541,7 +541,7 @@
   // exists.
   EXPECT_TRUE(HasTemporaryReference(child_id1));
 
-  // child_support2 submits a cc::CompositorFrame without any dependencies.
+  // child_support2 submits a CompositorFrame without any dependencies.
   // Both the child and the parent should immediately ACK CompositorFrames
   // on activation.
   EXPECT_CALL(support_client_, DidReceiveCompositorFrameAck(_)).Times(2);
@@ -554,7 +554,7 @@
   EXPECT_FALSE(child_surface1()->HasPendingFrame());
   EXPECT_THAT(child_surface1()->activation_dependencies(), IsEmpty());
 
-  // Verify that the parent surface's cc::CompositorFrame has activated and that
+  // Verify that the parent surface's CompositorFrame has activated and that
   // the temporary reference has been replaced by a permanent one.
   EXPECT_TRUE(parent_surface()->HasActiveFrame());
   EXPECT_FALSE(parent_surface()->HasPendingFrame());
@@ -564,14 +564,14 @@
 }
 
 // This test verifies that we do not double count returned resources when a
-// cc::CompositorFrame starts out as pending, then becomes active, and then is
-// replaced with another active cc::CompositorFrame.
+// CompositorFrame starts out as pending, then becomes active, and then is
+// replaced with another active CompositorFrame.
 TEST_F(SurfaceSynchronizationTest, ResourcesOnlyReturnedOnce) {
   const SurfaceId parent_id = MakeSurfaceId(kParentFrameSink, 1);
   const SurfaceId child_id = MakeSurfaceId(kChildFrameSink1, 1);
 
-  // The parent submits a cc::CompositorFrame that depends on |child_id| before
-  // the child submits a cc::CompositorFrame. The cc::CompositorFrame also has
+  // The parent submits a CompositorFrame that depends on |child_id| before
+  // the child submits a CompositorFrame. The CompositorFrame also has
   // resources in its resource list.
   TransferableResource resource;
   resource.id = 1337;
@@ -583,7 +583,7 @@
       parent_id.local_surface_id(),
       MakeCompositorFrame({child_id}, empty_surface_ids(), resource_list));
 
-  // Verify that the cc::CompositorFrame is blocked on |child_id|.
+  // Verify that the CompositorFrame is blocked on |child_id|.
   EXPECT_FALSE(parent_surface()->HasActiveFrame());
   EXPECT_TRUE(parent_surface()->HasPendingFrame());
   EXPECT_THAT(parent_surface()->activation_dependencies(),
@@ -594,7 +594,7 @@
       MakeCompositorFrame(empty_surface_ids(), empty_surface_ids(),
                           std::vector<TransferableResource>()));
 
-  // Verify that the child cc::CompositorFrame activates immediately.
+  // Verify that the child CompositorFrame activates immediately.
   EXPECT_TRUE(child_surface1()->HasActiveFrame());
   EXPECT_FALSE(child_surface1()->HasPendingFrame());
   EXPECT_THAT(child_surface1()->activation_dependencies(), IsEmpty());
@@ -609,7 +609,7 @@
   EXPECT_CALL(support_client_,
               DidReceiveCompositorFrameAck(returned_resources));
 
-  // The parent submits a cc::CompositorFrame without any dependencies. That
+  // The parent submits a CompositorFrame without any dependencies. That
   // frame should activate immediately, replacing the earlier frame. The
   // resource from the earlier frame should be returned to the client.
   parent_support().SubmitCompositorFrame(
@@ -622,8 +622,8 @@
 }
 
 // This test verifies that if a surface has both a pending and active
-// cc::CompositorFrame and the pending cc::CompositorFrame activates, replacing
-// the existing active cc::CompositorFrame, then the surface reference hierarchy
+// CompositorFrame and the pending CompositorFrame activates, replacing
+// the existing active CompositorFrame, then the surface reference hierarchy
 // will be updated allowing garbage collection of surfaces that are no longer
 // referenced.
 TEST_F(SurfaceSynchronizationTest, DropStaleReferencesAfterActivation) {
@@ -631,33 +631,33 @@
   const SurfaceId child_id1 = MakeSurfaceId(kChildFrameSink1, 1);
   const SurfaceId child_id2 = MakeSurfaceId(kChildFrameSink2, 1);
 
-  // The parent submits a cc::CompositorFrame that depends on |child_id1| before
-  // the child submits a cc::CompositorFrame.
+  // The parent submits a CompositorFrame that depends on |child_id1| before
+  // the child submits a CompositorFrame.
   EXPECT_CALL(support_client_, DidReceiveCompositorFrameAck(_)).Times(0);
   parent_support().SubmitCompositorFrame(
       parent_id.local_surface_id(),
       MakeCompositorFrame({child_id1}, empty_surface_ids(),
                           std::vector<TransferableResource>()));
 
-  // Verify that the cc::CompositorFrame is blocked on |child_id|.
+  // Verify that the CompositorFrame is blocked on |child_id|.
   EXPECT_FALSE(parent_surface()->HasActiveFrame());
   EXPECT_TRUE(parent_surface()->HasPendingFrame());
   EXPECT_THAT(parent_surface()->activation_dependencies(),
               UnorderedElementsAre(child_id1));
   testing::Mock::VerifyAndClearExpectations(&support_client_);
 
-  // Verify that no references are added while the cc::CompositorFrame is
+  // Verify that no references are added while the CompositorFrame is
   // pending.
   EXPECT_THAT(GetChildReferences(parent_id), IsEmpty());
 
   // DidReceiveCompositorFrameAck should get called twice: once for the child
-  // and once for the now active parent cc::CompositorFrame.
+  // and once for the now active parent CompositorFrame.
   EXPECT_CALL(support_client_, DidReceiveCompositorFrameAck(_)).Times(2);
   child_support1().SubmitCompositorFrame(child_id1.local_surface_id(),
                                          MakeCompositorFrame());
   testing::Mock::VerifyAndClearExpectations(&support_client_);
 
-  // Verify that the child cc::CompositorFrame activates immediately.
+  // Verify that the child CompositorFrame activates immediately.
   EXPECT_TRUE(child_surface1()->HasActiveFrame());
   EXPECT_FALSE(child_surface1()->HasPendingFrame());
   EXPECT_THAT(child_surface1()->activation_dependencies(), IsEmpty());
@@ -667,7 +667,7 @@
   EXPECT_FALSE(parent_surface()->HasPendingFrame());
   EXPECT_THAT(parent_surface()->activation_dependencies(), IsEmpty());
 
-  // Submit a new parent cc::CompositorFrame to add a reference.
+  // Submit a new parent CompositorFrame to add a reference.
   parent_support().SubmitCompositorFrame(
       parent_id.local_surface_id(),
       MakeCompositorFrame(empty_surface_ids(), {child_id1},
@@ -683,8 +683,8 @@
   EXPECT_FALSE(HasTemporaryReference(child_id1));
   EXPECT_THAT(GetChildReferences(parent_id), UnorderedElementsAre(child_id1));
 
-  // The parent submits another cc::CompositorFrame that depends on |child_id2|.
-  // Submitting a pending cc::CompositorFrame will not trigger a
+  // The parent submits another CompositorFrame that depends on |child_id2|.
+  // Submitting a pending CompositorFrame will not trigger a
   // CompositorFrameAck.
   EXPECT_CALL(support_client_, DidReceiveCompositorFrameAck(_)).Times(0);
   parent_support().SubmitCompositorFrame(
@@ -694,8 +694,8 @@
   testing::Mock::VerifyAndClearExpectations(&support_client_);
 
   // The parent surface should now have both a pending and activate
-  // cc::CompositorFrame. Verify that the set of child references from
-  // |parent_id| are only from the active cc::CompositorFrame.
+  // CompositorFrame. Verify that the set of child references from
+  // |parent_id| are only from the active CompositorFrame.
   EXPECT_TRUE(parent_surface()->HasActiveFrame());
   EXPECT_TRUE(parent_surface()->HasPendingFrame());
   EXPECT_THAT(parent_surface()->activation_dependencies(),
@@ -706,13 +706,13 @@
                                          MakeCompositorFrame());
 
   // Verify that the parent Surface has activated and no longer has a
-  // pending cc::CompositorFrame. Also verify that |child_id1| is no longer a
+  // pending CompositorFrame. Also verify that |child_id1| is no longer a
   // child reference of |parent_id|.
   EXPECT_TRUE(parent_surface()->HasActiveFrame());
   EXPECT_FALSE(parent_surface()->HasPendingFrame());
   EXPECT_THAT(parent_surface()->activation_dependencies(), IsEmpty());
   // The parent will not immediately refer to the child until it submits a new
-  // cc::CompositorFrame with the reference.
+  // CompositorFrame with the reference.
   EXPECT_THAT(GetChildReferences(parent_id), IsEmpty());
 }
 
@@ -734,7 +734,7 @@
   ui::LatencyInfo info;
   info.AddLatencyNumber(latency_type1, latency_id1, latency_sequence_number1);
 
-  cc::CompositorFrame frame = MakeCompositorFrame();
+  CompositorFrame frame = MakeCompositorFrame();
   frame.metadata.latency_info.push_back(info);
 
   parent_support().SubmitCompositorFrame(parent_id1.local_surface_id(),
@@ -751,7 +751,7 @@
   ui::LatencyInfo info2;
   info2.AddLatencyNumber(latency_type2, latency_id2, latency_sequence_number2);
 
-  cc::CompositorFrame frame2 = MakeCompositorFrame();
+  CompositorFrame frame2 = MakeCompositorFrame();
   frame2.metadata.latency_info.push_back(info2);
 
   parent_support().SubmitCompositorFrame(parent_id2.local_surface_id(),
@@ -807,7 +807,7 @@
   ui::LatencyInfo info;
   info.AddLatencyNumber(latency_type1, latency_id1, latency_sequence_number1);
 
-  cc::CompositorFrame frame = MakeCompositorFrame();
+  CompositorFrame frame = MakeCompositorFrame();
   frame.metadata.latency_info.push_back(info);
 
   parent_support().SubmitCompositorFrame(parent_id1.local_surface_id(),
@@ -817,7 +817,7 @@
   ui::LatencyInfo info2;
   info2.AddLatencyNumber(latency_type2, latency_id2, latency_sequence_number2);
 
-  cc::CompositorFrame frame2 = MakeCompositorFrame(
+  CompositorFrame frame2 = MakeCompositorFrame(
       {child_id}, empty_surface_ids(), std::vector<TransferableResource>());
   frame2.metadata.latency_info.push_back(info2);
 
@@ -885,7 +885,7 @@
   ui::LatencyInfo info;
   info.AddLatencyNumber(latency_type1, latency_id1, latency_sequence_number1);
 
-  cc::CompositorFrame frame = MakeCompositorFrame();
+  CompositorFrame frame = MakeCompositorFrame();
   frame.metadata.latency_info.push_back(info);
 
   parent_support().SubmitCompositorFrame(parent_id1.local_surface_id(),
@@ -902,7 +902,7 @@
   ui::LatencyInfo info2;
   info2.AddLatencyNumber(latency_type2, latency_id2, latency_sequence_number2);
 
-  cc::CompositorFrame frame2 = MakeCompositorFrame(
+  CompositorFrame frame2 = MakeCompositorFrame(
       {child_id}, empty_surface_ids(), std::vector<TransferableResource>());
   frame2.metadata.latency_info.push_back(info2);
 
@@ -1089,7 +1089,7 @@
   EXPECT_TRUE(display_surface()->HasActiveFrame());
   EXPECT_TRUE(display_surface()->HasPendingFrame());
 
-  // Submitting a cc::CompositorFrame will trigger garbage collection of the
+  // Submitting a CompositorFrame will trigger garbage collection of the
   // |parent_id1| subtree. This should not crash.
   child_support1().SubmitCompositorFrame(child_id.local_surface_id(),
                                          MakeCompositorFrame());
@@ -1126,7 +1126,7 @@
   EXPECT_FALSE(display_surface()->HasActiveFrame());
 
   // Advance BeginFrames to trigger a deadline. This activates the
-  // cc::CompositorFrame submitted above.
+  // CompositorFrame submitted above.
   for (int i = 0; i < 3; ++i) {
     SendNextBeginFrame();
     EXPECT_TRUE(display_surface()->has_deadline());
@@ -1138,8 +1138,8 @@
   EXPECT_FALSE(display_surface()->HasPendingFrame());
   EXPECT_TRUE(display_surface()->HasActiveFrame());
 
-  // By submitting a display cc::CompositorFrame, and replacing the parent's
-  // cc::CompositorFrame with another surface ID, parent_id1 becomes unreachable
+  // By submitting a display CompositorFrame, and replacing the parent's
+  // CompositorFrame with another surface ID, parent_id1 becomes unreachable
   // and a candidate for garbage collection.
   display_support().SubmitCompositorFrame(
       display_id.local_surface_id(),
@@ -1168,15 +1168,15 @@
   EXPECT_FALSE(display_surface()->has_deadline());
 }
 
-// This test verifies that a cc::CompositorFrame will only blocked on embedded
-// surfaces but not on other retained surface IDs in the cc::CompositorFrame.
+// This test verifies that a CompositorFrame will only blocked on embedded
+// surfaces but not on other retained surface IDs in the CompositorFrame.
 TEST_F(SurfaceSynchronizationTest, OnlyBlockOnEmbeddedSurfaces) {
   const SurfaceId display_id = MakeSurfaceId(kDisplayFrameSink, 1);
   const SurfaceId parent_id1 = MakeSurfaceId(kParentFrameSink, 1);
   const SurfaceId parent_id2 = MakeSurfaceId(kParentFrameSink, 2);
 
-  // Submitting a cc::CompositorFrame with |parent_id2| so that the display
-  // cc::CompositorFrame can hold a reference to it.
+  // Submitting a CompositorFrame with |parent_id2| so that the display
+  // CompositorFrame can hold a reference to it.
   parent_support().SubmitCompositorFrame(parent_id2.local_surface_id(),
                                          MakeCompositorFrame());
 
@@ -1189,16 +1189,16 @@
   EXPECT_FALSE(display_surface()->HasActiveFrame());
   EXPECT_TRUE(display_surface()->has_deadline());
 
-  // Verify that the display cc::CompositorFrame will only block on |parent_id1|
+  // Verify that the display CompositorFrame will only block on |parent_id1|
   // but not |parent_id2|.
   EXPECT_THAT(display_surface()->activation_dependencies(),
               UnorderedElementsAre(parent_id1));
   // Verify that the display surface holds no references while its
-  // cc::CompositorFrame is pending.
+  // CompositorFrame is pending.
   EXPECT_THAT(GetChildReferences(display_id), IsEmpty());
 
-  // Submitting a cc::CompositorFrame with |parent_id1| should unblock the
-  // display cc::CompositorFrame.
+  // Submitting a CompositorFrame with |parent_id1| should unblock the
+  // display CompositorFrame.
   parent_support().SubmitCompositorFrame(parent_id1.local_surface_id(),
                                          MakeCompositorFrame());
 
@@ -1208,7 +1208,7 @@
   EXPECT_THAT(display_surface()->activation_dependencies(), IsEmpty());
 }
 
-// This test verifies that a late arriving cc::CompositorFrame activates
+// This test verifies that a late arriving CompositorFrame activates
 // immediately and does not trigger a new deadline.
 TEST_F(SurfaceSynchronizationTest, LateArrivingDependency) {
   const SurfaceId display_id = MakeSurfaceId(kDisplayFrameSink, 1);
@@ -1225,7 +1225,7 @@
   EXPECT_TRUE(display_surface()->has_deadline());
 
   // Advance BeginFrames to trigger a deadline. This activates the
-  // cc::CompositorFrame submitted above.
+  // CompositorFrame submitted above.
   for (int i = 0; i < 3; ++i) {
     SendNextBeginFrame();
     EXPECT_TRUE(display_surface()->has_deadline());
@@ -1235,7 +1235,7 @@
   EXPECT_FALSE(display_surface()->HasPendingFrame());
   EXPECT_TRUE(display_surface()->HasActiveFrame());
 
-  // A late arriving cc::CompositorFrame should activate immediately without
+  // A late arriving CompositorFrame should activate immediately without
   // scheduling a deadline and without waiting for dependencies to resolve.
   parent_support().SubmitCompositorFrame(
       parent_id1.local_surface_id(),
@@ -1246,7 +1246,7 @@
   EXPECT_TRUE(parent_surface()->HasActiveFrame());
 }
 
-// This test verifies that a late arriving cc::CompositorFrame activates
+// This test verifies that a late arriving CompositorFrame activates
 // immediately along with its subtree and does not trigger a new deadline.
 TEST_F(SurfaceSynchronizationTest, MultiLevelLateArrivingDependency) {
   const SurfaceId display_id = MakeSurfaceId(kDisplayFrameSink, 1);
@@ -1283,7 +1283,7 @@
   EXPECT_FALSE(child_surface1()->HasActiveFrame());
   EXPECT_TRUE(child_surface1()->has_deadline());
 
-  // Submitting a cc::CompositorFrame to the parent surface creates a dependency
+  // Submitting a CompositorFrame to the parent surface creates a dependency
   // chain from the display to the parent to the child, allowing them all to
   // assume the same deadline. Both the parent and the child are determined to
   // be late and activate immediately.
@@ -1301,7 +1301,7 @@
 }
 
 // This test verifies that CompositorFrames submitted to a surface referenced
-// by a parent cc::CompositorFrame as a fallback will be rejected and ACK'ed
+// by a parent CompositorFrame as a fallback will be rejected and ACK'ed
 // immediately.
 TEST_F(SurfaceSynchronizationTest, FallbackSurfacesClosed) {
   const SurfaceId parent_id1 = MakeSurfaceId(kParentFrameSink, 1);
@@ -1310,7 +1310,7 @@
   // This is the primary child surface that the parent wants to block on.
   const SurfaceId child_id2 = MakeSurfaceId(kChildFrameSink1, 2);
 
-  // child_support1 submits a cc::CompositorFrame without any dependencies.
+  // child_support1 submits a CompositorFrame without any dependencies.
   // DidReceiveCompositorFrameAck should call on immediate activation.
   // However, resources will not be returned because this frame is a candidate
   // for display.
@@ -1333,7 +1333,7 @@
 
   // The parent is blocked on |child_id2| and references |child_id1|. The
   // surface corresponding to |child_id1| will not accept new CompositorFrames
-  // while the parent cc::CompositorFrame is blocked.
+  // while the parent CompositorFrame is blocked.
   parent_support().SubmitCompositorFrame(
       parent_id1.local_surface_id(),
       MakeCompositorFrame({child_id2}, {child_id1},
@@ -1360,7 +1360,7 @@
   testing::Mock::VerifyAndClearExpectations(&support_client_);
 
   // Advance BeginFrames to trigger a deadline. This activates the
-  // cc::CompositorFrame submitted to the parent.
+  // CompositorFrame submitted to the parent.
   for (int i = 0; i < 3; ++i) {
     SendNextBeginFrame();
     EXPECT_TRUE(parent_surface()->has_deadline());
@@ -1407,7 +1407,7 @@
   EXPECT_TRUE(parent_surface()->HasActiveFrame());
   EXPECT_FALSE(parent_surface()->has_deadline());
 
-  // Submit another cc::CompositorFrame to |child_id1| that blocks on
+  // Submit another CompositorFrame to |child_id1| that blocks on
   // |arbitrary_id|.
   child_support1().SubmitCompositorFrame(
       child_id1.local_surface_id(),
@@ -1421,7 +1421,7 @@
   // after 3 frames.
   SendNextBeginFrame();
 
-  // Submit another cc::CompositorFrame to |child_id2| that blocks on
+  // Submit another CompositorFrame to |child_id2| that blocks on
   // |arbitrary_id|.
   child_support2().SubmitCompositorFrame(
       child_id2.local_surface_id(),
@@ -1536,7 +1536,7 @@
   EXPECT_FALSE(child_surface1()->HasActiveFrame());
   EXPECT_TRUE(child_surface1()->has_deadline());
 
-  // Submitting a cc::CompositorFrame to the parent frame creates a dependency
+  // Submitting a CompositorFrame to the parent frame creates a dependency
   // chain from the display to the parent to the child, allowing them all to
   // assume the same deadline.
   parent_support().SubmitCompositorFrame(
@@ -1618,7 +1618,7 @@
   EXPECT_TRUE(parent_surface->HasPendingFrame());
 
   // Advance BeginFrames to trigger a deadline. This activates the
-  // cc::CompositorFrame submitted above.
+  // CompositorFrame submitted above.
   for (int i = 0; i < 4; ++i)
     SendNextBeginFrame();
 
diff --git a/components/viz/service/surfaces/surface.cc b/components/viz/service/surfaces/surface.cc
index 71aff339..466ee9d 100644
--- a/components/viz/service/surfaces/surface.cc
+++ b/components/viz/service/surfaces/surface.cc
@@ -51,8 +51,8 @@
 void Surface::SetPreviousFrameSurface(Surface* surface) {
   DCHECK(surface && (HasActiveFrame() || HasPendingFrame()));
   previous_frame_surface_id_ = surface->surface_id();
-  cc::CompositorFrame& frame = active_frame_data_ ? active_frame_data_->frame
-                                                  : pending_frame_data_->frame;
+  CompositorFrame& frame = active_frame_data_ ? active_frame_data_->frame
+                                              : pending_frame_data_->frame;
   surface->TakeLatencyInfo(&frame.metadata.latency_info);
   surface->TakeLatencyInfoFromPendingFrame(&frame.metadata.latency_info);
 }
@@ -100,7 +100,7 @@
   closed_ = true;
 }
 
-bool Surface::QueueFrame(cc::CompositorFrame frame,
+bool Surface::QueueFrame(CompositorFrame frame,
                          uint64_t frame_index,
                          base::OnceClosure callback,
                          const WillDrawCallback& will_draw_callback) {
@@ -132,7 +132,7 @@
 
   UpdateActivationDependencies(frame);
 
-  // Receive and track the resources referenced from the cc::CompositorFrame
+  // Receive and track the resources referenced from the CompositorFrame
   // regardless of whether it's pending or active.
   surface_client_->ReceiveFromChild(frame.resource_list);
 
@@ -205,7 +205,7 @@
   ActivatePendingFrame();
 }
 
-Surface::FrameData::FrameData(cc::CompositorFrame&& frame,
+Surface::FrameData::FrameData(CompositorFrame&& frame,
                               uint64_t frame_index,
                               base::OnceClosure draw_callback,
                               const WillDrawCallback& will_draw_callback)
@@ -264,7 +264,7 @@
 }
 
 void Surface::UpdateActivationDependencies(
-    const cc::CompositorFrame& current_frame) {
+    const CompositorFrame& current_frame) {
   base::flat_set<SurfaceId> new_activation_dependencies;
 
   for (const SurfaceId& surface_id :
@@ -324,12 +324,12 @@
   }
 }
 
-const cc::CompositorFrame& Surface::GetActiveFrame() const {
+const CompositorFrame& Surface::GetActiveFrame() const {
   DCHECK(active_frame_data_);
   return active_frame_data_->frame;
 }
 
-const cc::CompositorFrame& Surface::GetPendingFrame() {
+const CompositorFrame& Surface::GetPendingFrame() {
   DCHECK(pending_frame_data_);
   return pending_frame_data_->frame;
 }
@@ -406,7 +406,7 @@
 
 // static
 void Surface::TakeLatencyInfoFromFrame(
-    cc::CompositorFrame* frame,
+    CompositorFrame* frame,
     std::vector<ui::LatencyInfo>* latency_info) {
   if (latency_info->empty()) {
     frame->metadata.latency_info.swap(*latency_info);
diff --git a/components/viz/service/surfaces/surface.h b/components/viz/service/surfaces/surface.h
index 60a2b02f..6576956 100644
--- a/components/viz/service/surfaces/surface.h
+++ b/components/viz/service/surfaces/surface.h
@@ -18,7 +18,7 @@
 #include "base/macros.h"
 #include "base/memory/weak_ptr.h"
 #include "base/optional.h"
-#include "cc/output/compositor_frame.h"
+#include "components/viz/common/quads/compositor_frame.h"
 #include "components/viz/common/quads/copy_output_request.h"
 #include "components/viz/common/surfaces/frame_sink_id.h"
 #include "components/viz/common/surfaces/surface_info.h"
@@ -118,11 +118,11 @@
 
   // Returns false if |frame| is invalid.
   // |draw_callback| is called once to notify the client that the previously
-  // submitted cc::CompositorFrame is processed and that another frame can be
+  // submitted CompositorFrame is processed and that another frame can be
   // there is visible damage.
   // |will_draw_callback| is called when |surface| is scheduled for a draw and
   // there is visible damage.
-  bool QueueFrame(cc::CompositorFrame frame,
+  bool QueueFrame(CompositorFrame frame,
                   uint64_t frame_index,
                   base::OnceClosure draw_callback,
                   const WillDrawCallback& will_draw_callback);
@@ -147,11 +147,11 @@
   // Returns the most recent frame that is eligible to be rendered.
   // You must check whether HasActiveFrame() returns true before calling this
   // method.
-  const cc::CompositorFrame& GetActiveFrame() const;
+  const CompositorFrame& GetActiveFrame() const;
 
   // Returns the currently pending frame. You must check where HasPendingFrame()
   // returns true before calling this method.
-  const cc::CompositorFrame& GetPendingFrame();
+  const CompositorFrame& GetPendingFrame();
 
   // Returns a number that increments by 1 every time a new frame is enqueued.
   uint64_t GetActiveFrameIndex() const {
@@ -188,7 +188,7 @@
   }
 
   // Returns the set of activation dependencies that have been ignored because
-  // the last cc::CompositorFrame was activated due to a deadline. Late
+  // the last CompositorFrame was activated due to a deadline. Late
   // dependencies activate immediately when they arrive.
   const base::flat_set<SurfaceId>& late_activation_dependencies() const {
     return late_activation_dependencies_;
@@ -205,21 +205,21 @@
 
  private:
   struct FrameData {
-    FrameData(cc::CompositorFrame&& frame,
+    FrameData(CompositorFrame&& frame,
               uint64_t frame_index,
               base::OnceClosure draw_callback,
               const WillDrawCallback& will_draw_callback);
     FrameData(FrameData&& other);
     ~FrameData();
     FrameData& operator=(FrameData&& other);
-    cc::CompositorFrame frame;
+    CompositorFrame frame;
     uint64_t frame_index;
     base::OnceClosure draw_callback;
     WillDrawCallback will_draw_callback;
   };
 
   // Rejects CompositorFrames submitted to surfaces referenced from this
-  // cc::CompositorFrame as fallbacks. This saves some CPU cycles to allow
+  // CompositorFrame as fallbacks. This saves some CPU cycles to allow
   // children to catch up to the parent.
   void RejectCompositorFramesToFallbackSurfaces();
 
@@ -230,7 +230,7 @@
   void ActivatePendingFrame();
   // Called when all of the surface's dependencies have been resolved.
   void ActivateFrame(FrameData frame_data);
-  void UpdateActivationDependencies(const cc::CompositorFrame& current_frame);
+  void UpdateActivationDependencies(const CompositorFrame& current_frame);
   void ComputeChangeInDependencies(
       const base::flat_set<SurfaceId>& existing_dependencies,
       const base::flat_set<SurfaceId>& new_dependencies,
@@ -244,7 +244,7 @@
   void TakeLatencyInfoFromPendingFrame(
       std::vector<ui::LatencyInfo>* latency_info);
   static void TakeLatencyInfoFromFrame(
-      cc::CompositorFrame* frame,
+      CompositorFrame* frame,
       std::vector<ui::LatencyInfo>* latency_info);
 
   const SurfaceInfo surface_info_;
diff --git a/components/viz/service/surfaces/surface_dependency_tracker.cc b/components/viz/service/surfaces/surface_dependency_tracker.cc
index e07b22e..407ef6a6 100644
--- a/components/viz/service/surfaces/surface_dependency_tracker.cc
+++ b/components/viz/service/surfaces/surface_dependency_tracker.cc
@@ -23,7 +23,7 @@
 void SurfaceDependencyTracker::RequestSurfaceResolution(Surface* surface) {
   DCHECK(surface->HasPendingFrame());
 
-  const cc::CompositorFrame& pending_frame = surface->GetPendingFrame();
+  const CompositorFrame& pending_frame = surface->GetPendingFrame();
 
   if (IsSurfaceLate(surface)) {
     ActivateLateSurfaceSubtree(surface);
@@ -31,7 +31,7 @@
   }
 
   // Activation dependencies that aren't currently known to the surface manager
-  // or do not have an active cc::CompositorFrame block this frame.
+  // or do not have an active CompositorFrame block this frame.
   for (const SurfaceId& surface_id :
        pending_frame.metadata.activation_dependencies) {
     Surface* dependency = surface_manager_->GetSurfaceForId(surface_id);
@@ -80,7 +80,7 @@
   if (!surface->HasPendingFrame())
     return;
 
-  const cc::CompositorFrame& pending_frame = surface->GetPendingFrame();
+  const CompositorFrame& pending_frame = surface->GetPendingFrame();
 
   DCHECK(!pending_frame.metadata.activation_dependencies.empty());
 
@@ -110,7 +110,7 @@
 void SurfaceDependencyTracker::ActivateLateSurfaceSubtree(Surface* surface) {
   DCHECK(surface->HasPendingFrame());
 
-  const cc::CompositorFrame& pending_frame = surface->GetPendingFrame();
+  const CompositorFrame& pending_frame = surface->GetPendingFrame();
 
   for (const SurfaceId& surface_id :
        pending_frame.metadata.activation_dependencies) {
@@ -125,9 +125,9 @@
 void SurfaceDependencyTracker::UpdateSurfaceDeadline(Surface* surface) {
   DCHECK(surface->HasPendingFrame());
 
-  const cc::CompositorFrame& pending_frame = surface->GetPendingFrame();
+  const CompositorFrame& pending_frame = surface->GetPendingFrame();
 
-  // Determine an activation deadline for the pending cc::CompositorFrame.
+  // Determine an activation deadline for the pending CompositorFrame.
   bool needs_deadline = pending_frame.metadata.can_activate_before_dependencies;
   if (!needs_deadline)
     return;
diff --git a/components/viz/service/surfaces/surface_dependency_tracker.h b/components/viz/service/surfaces/surface_dependency_tracker.h
index 8f7a0324..df47a823 100644
--- a/components/viz/service/surfaces/surface_dependency_tracker.h
+++ b/components/viz/service/surfaces/surface_dependency_tracker.h
@@ -18,7 +18,7 @@
 // blocked on that surface ID. SurfaceDependencyTracker observes when
 // dependent frames activate, and informs blocked surfaces.
 //
-// When a blocking cc::CompositorFrame is first submitted,
+// When a blocking CompositorFrame is first submitted,
 // SurfaceDependencyTracker will begin listening for BeginFrames, setting a
 // deadline some number of BeginFrames in the future. If there are unresolved
 // dependencies when the deadline hits, then SurfaceDependencyTracker will clear
@@ -30,7 +30,7 @@
   explicit SurfaceDependencyTracker(SurfaceManager* surface_manager);
   ~SurfaceDependencyTracker();
 
-  // Called when |surface| has a pending cc::CompositorFrame and it wishes to be
+  // Called when |surface| has a pending CompositorFrame and it wishes to be
   // informed when that surface's dependencies are resolved.
   void RequestSurfaceResolution(Surface* surface);
 
@@ -51,7 +51,7 @@
 
   // Indicates whether |surface| is late. A surface is late if it hasn't had its
   // first activation before a embedder is forced to activate its own
-  // cc::CompositorFrame. A surface may no longer be considered late if the set
+  // CompositorFrame. A surface may no longer be considered late if the set
   // of activation dependencies for dependent surfaces change.
   bool IsSurfaceLate(Surface* surface);
 
diff --git a/components/viz/service/surfaces/surface_hittest.cc b/components/viz/service/surfaces/surface_hittest.cc
index a3baa28..404c836 100644
--- a/components/viz/service/surfaces/surface_hittest.cc
+++ b/components/viz/service/surfaces/surface_hittest.cc
@@ -4,7 +4,7 @@
 
 #include "components/viz/service/surfaces/surface_hittest.h"
 
-#include "cc/output/compositor_frame.h"
+#include "components/viz/common/quads/compositor_frame.h"
 #include "components/viz/common/quads/draw_quad.h"
 #include "components/viz/common/quads/render_pass_draw_quad.h"
 #include "components/viz/common/quads/surface_draw_quad.h"
@@ -257,7 +257,7 @@
     return nullptr;
   if (!surface->HasActiveFrame())
     return nullptr;
-  const cc::CompositorFrame& surface_frame = surface->GetActiveFrame();
+  const CompositorFrame& surface_frame = surface->GetActiveFrame();
 
   if (!render_pass_id)
     return surface_frame.render_pass_list.back().get();
diff --git a/components/viz/service/surfaces/surface_hittest_unittest.cc b/components/viz/service/surfaces/surface_hittest_unittest.cc
index 2b999c4..76f4825 100644
--- a/components/viz/service/surfaces/surface_hittest_unittest.cc
+++ b/components/viz/service/surfaces/surface_hittest_unittest.cc
@@ -4,7 +4,7 @@
 
 #include <stddef.h>
 
-#include "cc/output/compositor_frame.h"
+#include "components/viz/common/quads/compositor_frame.h"
 #include "components/viz/common/surfaces/local_surface_id_allocator.h"
 #include "components/viz/service/frame_sinks/compositor_frame_sink_support.h"
 #include "components/viz/service/frame_sinks/frame_sink_manager_impl.h"
@@ -106,7 +106,7 @@
   // Creates a root surface.
   gfx::Rect root_rect(300, 300);
   RenderPass* root_pass = nullptr;
-  cc::CompositorFrame root_frame = CreateCompositorFrame(root_rect, &root_pass);
+  CompositorFrame root_frame = CreateCompositorFrame(root_rect, &root_pass);
 
   // Add a reference to a non-existant child surface on the root surface.
   SurfaceId child_surface_id(
@@ -139,7 +139,7 @@
   // Creates a root surface.
   gfx::Rect root_rect(300, 300);
   RenderPass* root_pass = nullptr;
-  cc::CompositorFrame root_frame = CreateCompositorFrame(root_rect, &root_pass);
+  CompositorFrame root_frame = CreateCompositorFrame(root_rect, &root_pass);
 
   // Submit the root frame.
   LocalSurfaceIdAllocator root_allocator;
@@ -161,7 +161,7 @@
   // Creates a root surface.
   gfx::Rect root_rect(300, 300);
   RenderPass* root_pass = nullptr;
-  cc::CompositorFrame root_frame = CreateCompositorFrame(root_rect, &root_pass);
+  CompositorFrame root_frame = CreateCompositorFrame(root_rect, &root_pass);
 
   // Add a reference to the child surface on the root surface.
   LocalSurfaceIdAllocator child_allocator;
@@ -183,8 +183,7 @@
 
   // Creates a child surface.
   RenderPass* child_pass = nullptr;
-  cc::CompositorFrame child_frame =
-      CreateCompositorFrame(child_rect, &child_pass);
+  CompositorFrame child_frame = CreateCompositorFrame(child_rect, &child_pass);
 
   // Add a solid quad in the child surface.
   gfx::Rect child_solid_quad_rect(100, 100);
@@ -254,7 +253,7 @@
   // Creates a root surface.
   gfx::Rect root_rect(300, 300);
   RenderPass* root_pass = nullptr;
-  cc::CompositorFrame root_frame = CreateCompositorFrame(root_rect, &root_pass);
+  CompositorFrame root_frame = CreateCompositorFrame(root_rect, &root_pass);
 
   // Create a RenderPassDrawQuad to a non-existant RenderPass.
   int invalid_render_pass_id = 1337;
@@ -281,8 +280,7 @@
 
   // Creates a child surface.
   RenderPass* child_pass = nullptr;
-  cc::CompositorFrame child_frame =
-      CreateCompositorFrame(child_rect, &child_pass);
+  CompositorFrame child_frame = CreateCompositorFrame(child_rect, &child_pass);
 
   // Add a solid quad in the child surface.
   gfx::Rect child_solid_quad_rect(100, 100);
@@ -318,7 +316,7 @@
 TEST_F(SurfaceHittestTest, Hittest_RenderPassDrawQuad) {
   // Create a CompositorFrame with two RenderPasses.
   gfx::Rect root_rect(300, 300);
-  cc::CompositorFrame root_frame = test::MakeCompositorFrame();
+  CompositorFrame root_frame = test::MakeCompositorFrame();
   RenderPassList& render_pass_list = root_frame.render_pass_list;
 
   // Create a child RenderPass.
@@ -382,7 +380,7 @@
   // Creates a root surface.
   gfx::Rect root_rect(300, 300);
   RenderPass* root_pass = nullptr;
-  cc::CompositorFrame root_frame = CreateCompositorFrame(root_rect, &root_pass);
+  CompositorFrame root_frame = CreateCompositorFrame(root_rect, &root_pass);
 
   // Add a reference to the child surface on the root surface.
   LocalSurfaceIdAllocator child_allocator;
@@ -404,8 +402,7 @@
 
   // Creates a child surface.
   RenderPass* child_pass = nullptr;
-  cc::CompositorFrame child_frame =
-      CreateCompositorFrame(child_rect, &child_pass);
+  CompositorFrame child_frame = CreateCompositorFrame(child_rect, &child_pass);
 
   // Add a solid quad in the child surface.
   gfx::Rect child_solid_quad_rect(190, 190);
diff --git a/components/viz/service/surfaces/surface_manager.cc b/components/viz/service/surfaces/surface_manager.cc
index 0bb2813..7690ce2 100644
--- a/components/viz/service/surfaces/surface_manager.cc
+++ b/components/viz/service/surfaces/surface_manager.cc
@@ -523,7 +523,7 @@
 
 void SurfaceManager::SurfaceActivated(Surface* surface) {
   // Trigger a display frame if necessary.
-  const cc::CompositorFrame& frame = surface->GetActiveFrame();
+  const CompositorFrame& frame = surface->GetActiveFrame();
   if (!SurfaceModified(surface->surface_id(), frame.metadata.begin_frame_ack)) {
     TRACE_EVENT_INSTANT0("cc", "Damage not visible.", TRACE_EVENT_SCOPE_THREAD);
     surface->RunDrawCallback();
@@ -591,13 +591,13 @@
 
     if (surface->HasPendingFrame()) {
       // This provides the surface size from the root render pass.
-      const cc::CompositorFrame& frame = surface->GetPendingFrame();
+      const CompositorFrame& frame = surface->GetPendingFrame();
       *str << " pending " << frame.size_in_pixels().ToString();
     }
 
     if (surface->HasActiveFrame()) {
       // This provides the surface size from the root render pass.
-      const cc::CompositorFrame& frame = surface->GetActiveFrame();
+      const CompositorFrame& frame = surface->GetActiveFrame();
       *str << " active " << frame.size_in_pixels().ToString();
     }
   } else {
diff --git a/components/viz/service/surfaces/surface_manager.h b/components/viz/service/surfaces/surface_manager.h
index a7129416..02a87d1 100644
--- a/components/viz/service/surfaces/surface_manager.h
+++ b/components/viz/service/surfaces/surface_manager.h
@@ -33,10 +33,6 @@
 #include <string>
 #endif
 
-namespace cc {
-class CompositorFrame;
-}
-
 namespace viz {
 
 namespace test {
diff --git a/components/viz/service/surfaces/surface_unittest.cc b/components/viz/service/surfaces/surface_unittest.cc
index 51de2c42..239c9f4 100644
--- a/components/viz/service/surfaces/surface_unittest.cc
+++ b/components/viz/service/surfaces/surface_unittest.cc
@@ -65,7 +65,7 @@
 
   LocalSurfaceId local_surface_id(6, base::UnguessableToken::Create());
   SurfaceId surface_id(kArbitraryFrameSinkId, local_surface_id);
-  cc::CompositorFrame frame = test::MakeCompositorFrame();
+  CompositorFrame frame = test::MakeCompositorFrame();
   support->SubmitCompositorFrame(local_surface_id, std::move(frame));
   Surface* surface = surface_manager->GetSurfaceForId(surface_id);
   ASSERT_TRUE(!!surface);
@@ -79,7 +79,7 @@
 
   int max_frame = 3, start_id = 200;
   for (int i = 0; i < max_frame; ++i) {
-    cc::CompositorFrame frame = test::MakeEmptyCompositorFrame();
+    CompositorFrame frame = test::MakeEmptyCompositorFrame();
     frame.render_pass_list.push_back(RenderPass::Create());
     frame.render_pass_list.back()->id = i * 3 + start_id;
     frame.render_pass_list.push_back(RenderPass::Create());
diff --git a/components/viz/test/compositor_frame_helpers.cc b/components/viz/test/compositor_frame_helpers.cc
index 7d00b06..20b89f5 100644
--- a/components/viz/test/compositor_frame_helpers.cc
+++ b/components/viz/test/compositor_frame_helpers.cc
@@ -4,21 +4,21 @@
 
 #include "components/viz/test/compositor_frame_helpers.h"
 
-#include "cc/output/compositor_frame.h"
+#include "components/viz/common/quads/compositor_frame.h"
 
 namespace viz {
 namespace test {
 
-cc::CompositorFrame MakeCompositorFrame() {
-  cc::CompositorFrame frame = MakeEmptyCompositorFrame();
+CompositorFrame MakeCompositorFrame() {
+  CompositorFrame frame = MakeEmptyCompositorFrame();
   std::unique_ptr<RenderPass> pass = RenderPass::Create();
   pass->SetNew(1, gfx::Rect(0, 0, 20, 20), gfx::Rect(), gfx::Transform());
   frame.render_pass_list.push_back(std::move(pass));
   return frame;
 }
 
-cc::CompositorFrame MakeEmptyCompositorFrame() {
-  cc::CompositorFrame frame;
+CompositorFrame MakeEmptyCompositorFrame() {
+  CompositorFrame frame;
   frame.metadata.begin_frame_ack.source_id = BeginFrameArgs::kManualSourceId;
   frame.metadata.begin_frame_ack.sequence_number =
       BeginFrameArgs::kStartingFrameNumber;
@@ -27,11 +27,11 @@
   return frame;
 }
 
-cc::CompositorFrame MakeCompositorFrame(
+CompositorFrame MakeCompositorFrame(
     std::vector<SurfaceId> activation_dependencies,
     std::vector<SurfaceId> referenced_surfaces,
     std::vector<TransferableResource> resource_list) {
-  cc::CompositorFrame compositor_frame = test::MakeCompositorFrame();
+  CompositorFrame compositor_frame = test::MakeCompositorFrame();
   compositor_frame.metadata.begin_frame_ack = BeginFrameAck(0, 1, true);
   compositor_frame.metadata.activation_dependencies =
       std::move(activation_dependencies);
diff --git a/components/viz/test/compositor_frame_helpers.h b/components/viz/test/compositor_frame_helpers.h
index b73ffcc..7c7300d77 100644
--- a/components/viz/test/compositor_frame_helpers.h
+++ b/components/viz/test/compositor_frame_helpers.h
@@ -10,21 +10,19 @@
 #include "components/viz/common/resources/transferable_resource.h"
 #include "components/viz/common/surfaces/surface_id.h"
 
-namespace cc {
-class CompositorFrame;
-}
-
 namespace viz {
+class CompositorFrame;
+
 namespace test {
 
-// Creates a valid cc::CompositorFrame.
-cc::CompositorFrame MakeCompositorFrame();
+// Creates a valid CompositorFrame.
+CompositorFrame MakeCompositorFrame();
 
-// Creates a cc::CompositorFrame that will be valid once its render_pass_list is
+// Creates a CompositorFrame that will be valid once its render_pass_list is
 // initialized.
-cc::CompositorFrame MakeEmptyCompositorFrame();
+CompositorFrame MakeEmptyCompositorFrame();
 
-cc::CompositorFrame MakeCompositorFrame(
+CompositorFrame MakeCompositorFrame(
     std::vector<SurfaceId> activation_dependencies,
     std::vector<SurfaceId> referenced_surfaces,
     std::vector<TransferableResource> resource_list);
diff --git a/components/viz/test/surface_hittest_test_helpers.cc b/components/viz/test/surface_hittest_test_helpers.cc
index c47889e..cf2b901 100644
--- a/components/viz/test/surface_hittest_test_helpers.cc
+++ b/components/viz/test/surface_hittest_test_helpers.cc
@@ -4,7 +4,7 @@
 
 #include "components/viz/test/surface_hittest_test_helpers.h"
 
-#include "cc/output/compositor_frame.h"
+#include "components/viz/common/quads/compositor_frame.h"
 #include "components/viz/common/quads/render_pass_draw_quad.h"
 #include "components/viz/common/quads/shared_quad_state.h"
 #include "components/viz/common/quads/solid_color_draw_quad.h"
@@ -69,9 +69,9 @@
   render_pass_list->push_back(std::move(render_pass));
 }
 
-cc::CompositorFrame CreateCompositorFrame(const gfx::Rect& root_rect,
-                                          RenderPass** render_pass) {
-  cc::CompositorFrame root_frame = MakeCompositorFrame();
+CompositorFrame CreateCompositorFrame(const gfx::Rect& root_rect,
+                                      RenderPass** render_pass) {
+  CompositorFrame root_frame = MakeCompositorFrame();
   int root_id = 1;
   CreateRenderPass(root_id, root_rect, gfx::Transform(),
                    &root_frame.render_pass_list);
diff --git a/components/viz/test/surface_hittest_test_helpers.h b/components/viz/test/surface_hittest_test_helpers.h
index 7952d29..838cb75 100644
--- a/components/viz/test/surface_hittest_test_helpers.h
+++ b/components/viz/test/surface_hittest_test_helpers.h
@@ -18,11 +18,9 @@
 class Transform;
 }
 
-namespace cc {
-class CompositorFrame;
-}
-
 namespace viz {
+class CompositorFrame;
+
 namespace test {
 
 void CreateSharedQuadState(RenderPass* pass,
@@ -51,11 +49,11 @@
                       const gfx::Transform& transform_to_root_target,
                       RenderPassList* render_pass_list);
 
-cc::CompositorFrame CreateCompositorFrameWithRenderPassList(
+CompositorFrame CreateCompositorFrameWithRenderPassList(
     RenderPassList* render_pass_list);
 
-cc::CompositorFrame CreateCompositorFrame(const gfx::Rect& root_rect,
-                                          RenderPass** render_pass);
+CompositorFrame CreateCompositorFrame(const gfx::Rect& root_rect,
+                                      RenderPass** render_pass);
 
 class TestSurfaceHittestDelegate : public SurfaceHittestDelegate {
  public:
diff --git a/components/viz/test/test_layer_tree_frame_sink.cc b/components/viz/test/test_layer_tree_frame_sink.cc
index 65ca0e5..e668cf3 100644
--- a/components/viz/test/test_layer_tree_frame_sink.cc
+++ b/components/viz/test/test_layer_tree_frame_sink.cc
@@ -142,7 +142,7 @@
   test_client_->DisplayReceivedLocalSurfaceId(local_surface_id);
 }
 
-void TestLayerTreeFrameSink::SubmitCompositorFrame(cc::CompositorFrame frame) {
+void TestLayerTreeFrameSink::SubmitCompositorFrame(CompositorFrame frame) {
   DCHECK(frame.metadata.begin_frame_ack.has_damage);
   DCHECK_LE(BeginFrameArgs::kStartingFrameNumber,
             frame.metadata.begin_frame_ack.sequence_number);
diff --git a/components/viz/test/test_layer_tree_frame_sink.h b/components/viz/test/test_layer_tree_frame_sink.h
index 3d0b97a..0f6898b 100644
--- a/components/viz/test/test_layer_tree_frame_sink.h
+++ b/components/viz/test/test_layer_tree_frame_sink.h
@@ -39,8 +39,7 @@
 
   virtual void DisplayReceivedLocalSurfaceId(
       const LocalSurfaceId& local_surface_id) = 0;
-  virtual void DisplayReceivedCompositorFrame(
-      const cc::CompositorFrame& frame) = 0;
+  virtual void DisplayReceivedCompositorFrame(const CompositorFrame& frame) = 0;
   virtual void DisplayWillDrawAndSwap(bool will_draw_and_swap,
                                       const RenderPassList& render_passes) = 0;
   virtual void DisplayDidDrawAndSwap() = 0;
@@ -88,7 +87,7 @@
   bool BindToClient(cc::LayerTreeFrameSinkClient* client) override;
   void DetachFromClient() override;
   void SetLocalSurfaceId(const LocalSurfaceId& local_surface_id) override;
-  void SubmitCompositorFrame(cc::CompositorFrame frame) override;
+  void SubmitCompositorFrame(CompositorFrame frame) override;
   void DidNotProduceFrame(const BeginFrameAck& ack) override;
 
   // mojom::CompositorFrameSinkClient implementation.
diff --git a/content/browser/android/overscroll_controller_android.cc b/content/browser/android/overscroll_controller_android.cc
index 2a3201d..939d5e2 100644
--- a/content/browser/android/overscroll_controller_android.cc
+++ b/content/browser/android/overscroll_controller_android.cc
@@ -8,7 +8,7 @@
 #include "base/command_line.h"
 #include "base/memory/ptr_util.h"
 #include "cc/layers/layer.h"
-#include "cc/output/compositor_frame_metadata.h"
+#include "components/viz/common/quads/compositor_frame_metadata.h"
 #include "content/common/content_switches_internal.h"
 #include "content/public/browser/navigation_controller.h"
 #include "content/public/common/content_switches.h"
@@ -289,7 +289,7 @@
 }
 
 void OverscrollControllerAndroid::OnFrameMetadataUpdated(
-    const cc::CompositorFrameMetadata& frame_metadata) {
+    const viz::CompositorFrameMetadata& frame_metadata) {
   if (!refresh_effect_ && !glow_effect_)
     return;
 
diff --git a/content/browser/android/overscroll_controller_android.h b/content/browser/android/overscroll_controller_android.h
index b905156..f620c5f 100644
--- a/content/browser/android/overscroll_controller_android.h
+++ b/content/browser/android/overscroll_controller_android.h
@@ -21,7 +21,6 @@
 }
 
 namespace cc {
-class CompositorFrameMetadata;
 class Layer;
 }
 
@@ -30,6 +29,10 @@
 struct DidOverscrollParams;
 }
 
+namespace viz {
+class CompositorFrameMetadata;
+}
+
 namespace content {
 
 // Glue class for handling all inputs into Android-specific overscroll effects,
@@ -67,7 +70,7 @@
   bool Animate(base::TimeTicks current_time, cc::Layer* parent_layer);
 
   // To be called whenever the content frame has been updated.
-  void OnFrameMetadataUpdated(const cc::CompositorFrameMetadata& metadata);
+  void OnFrameMetadataUpdated(const viz::CompositorFrameMetadata& metadata);
 
   // Toggle activity of any overscroll effects. When disabled, events will be
   // ignored until the controller is re-enabled.
diff --git a/content/browser/android/synchronous_compositor_browser_filter.cc b/content/browser/android/synchronous_compositor_browser_filter.cc
index 74c4dc12..3352a64d 100644
--- a/content/browser/android/synchronous_compositor_browser_filter.cc
+++ b/content/browser/android/synchronous_compositor_browser_filter.cc
@@ -86,7 +86,7 @@
 
   auto frame_ptr = base::MakeUnique<SynchronousCompositor::Frame>();
   frame_ptr->layer_tree_frame_sink_id = std::get<0>(param);
-  base::Optional<cc::CompositorFrame>& compositor_frame = std::get<1>(param);
+  base::Optional<viz::CompositorFrame>& compositor_frame = std::get<1>(param);
   if (compositor_frame) {
     BrowserThread::PostTask(
         BrowserThread::UI, FROM_HERE,
@@ -94,7 +94,7 @@
             &SynchronousCompositorBrowserFilter::ProcessFrameMetadataOnUIThread,
             this, routing_id,
             base::Passed(compositor_frame->metadata.Clone())));
-    frame_ptr->frame.reset(new cc::CompositorFrame);
+    frame_ptr->frame.reset(new viz::CompositorFrame);
     *frame_ptr->frame = std::move(*compositor_frame);
   }
   future->SetFrame(std::move(frame_ptr));
@@ -103,7 +103,7 @@
 
 void SynchronousCompositorBrowserFilter::ProcessFrameMetadataOnUIThread(
     int routing_id,
-    cc::CompositorFrameMetadata metadata) {
+    viz::CompositorFrameMetadata metadata) {
   DCHECK_CURRENTLY_ON(BrowserThread::UI);
   auto itr = hosts_.find(routing_id);
   if (itr == hosts_.end())
diff --git a/content/browser/android/synchronous_compositor_browser_filter.h b/content/browser/android/synchronous_compositor_browser_filter.h
index fd40185..d605d68 100644
--- a/content/browser/android/synchronous_compositor_browser_filter.h
+++ b/content/browser/android/synchronous_compositor_browser_filter.h
@@ -11,7 +11,7 @@
 #include "base/containers/circular_deque.h"
 #include "base/macros.h"
 #include "base/synchronization/lock.h"
-#include "cc/output/compositor_frame_metadata.h"
+#include "components/viz/common/quads/compositor_frame_metadata.h"
 #include "content/public/browser/android/synchronous_compositor.h"
 #include "content/public/browser/browser_message_filter.h"
 #include "ui/android/window_android_observer.h"
@@ -53,7 +53,7 @@
 
   bool ReceiveFrame(const IPC::Message& message);
   void ProcessFrameMetadataOnUIThread(int routing_id,
-                                      cc::CompositorFrameMetadata metadata);
+                                      viz::CompositorFrameMetadata metadata);
   void SignalAllFutures();
 
   RenderProcessHost* const render_process_host_;
diff --git a/content/browser/android/synchronous_compositor_host.cc b/content/browser/android/synchronous_compositor_host.cc
index 00ad2f48..a9f615f 100644
--- a/content/browser/android/synchronous_compositor_host.cc
+++ b/content/browser/android/synchronous_compositor_host.cc
@@ -120,7 +120,7 @@
                                           viewport_rect_for_tile_priority,
                                           transform_for_tile_priority);
   uint32_t layer_tree_frame_sink_id;
-  base::Optional<cc::CompositorFrame> compositor_frame;
+  base::Optional<viz::CompositorFrame> compositor_frame;
   SyncCompositorCommonRendererParams common_renderer_params;
 
   {
@@ -138,7 +138,7 @@
     return SynchronousCompositor::Frame();
 
   SynchronousCompositor::Frame frame;
-  frame.frame.reset(new cc::CompositorFrame);
+  frame.frame.reset(new viz::CompositorFrame);
   frame.layer_tree_frame_sink_id = layer_tree_frame_sink_id;
   *frame.frame = std::move(*compositor_frame);
   UpdateFrameMetaData(frame.frame->metadata.Clone());
@@ -146,7 +146,7 @@
 }
 
 void SynchronousCompositorHost::UpdateFrameMetaData(
-    cc::CompositorFrameMetadata frame_metadata) {
+    viz::CompositorFrameMetadata frame_metadata) {
   rwhva_->SynchronousFrameMetadata(std::move(frame_metadata));
 }
 
@@ -176,7 +176,7 @@
 
 bool SynchronousCompositorHost::DemandDrawSwInProc(SkCanvas* canvas) {
   SyncCompositorCommonRendererParams common_renderer_params;
-  base::Optional<cc::CompositorFrameMetadata> metadata;
+  base::Optional<viz::CompositorFrameMetadata> metadata;
   ScopedSetSkCanvas set_sk_canvas(canvas);
   SyncCompositorDemandDrawSwParams params;  // Unused.
   {
@@ -241,7 +241,7 @@
   if (!software_draw_shm_)
     return false;
 
-  base::Optional<cc::CompositorFrameMetadata> metadata;
+  base::Optional<viz::CompositorFrameMetadata> metadata;
   SyncCompositorCommonRendererParams common_renderer_params;
   {
     base::ThreadRestrictions::ScopedAllowWait wait;
diff --git a/content/browser/android/synchronous_compositor_host.h b/content/browser/android/synchronous_compositor_host.h
index 12dfc9f..45a4071 100644
--- a/content/browser/android/synchronous_compositor_host.h
+++ b/content/browser/android/synchronous_compositor_host.h
@@ -14,7 +14,7 @@
 #include "base/memory/ref_counted.h"
 #include "base/memory/weak_ptr.h"
 #include "base/single_thread_task_runner.h"
-#include "cc/output/compositor_frame.h"
+#include "components/viz/common/quads/compositor_frame.h"
 #include "content/common/input/input_event_ack_state.h"
 #include "content/public/browser/android/synchronous_compositor.h"
 #include "ui/gfx/geometry/scroll_offset.h"
@@ -69,7 +69,7 @@
 
   // Called by SynchronousCompositorBrowserFilter.
   int routing_id() const { return routing_id_; }
-  void UpdateFrameMetaData(cc::CompositorFrameMetadata frame_metadata);
+  void UpdateFrameMetaData(viz::CompositorFrameMetadata frame_metadata);
   void ProcessCommonParams(const SyncCompositorCommonRendererParams& params);
 
   SynchronousCompositorClient* client() { return client_; }
diff --git a/content/browser/child_process_launcher_helper_fuchsia.cc b/content/browser/child_process_launcher_helper_fuchsia.cc
index e714128b..33acb2c 100644
--- a/content/browser/child_process_launcher_helper_fuchsia.cc
+++ b/content/browser/child_process_launcher_helper_fuchsia.cc
@@ -7,6 +7,8 @@
 #include "base/command_line.h"
 #include "base/process/launch.h"
 #include "content/browser/child_process_launcher.h"
+#include "content/common/sandbox_policy_fuchsia.h"
+#include "content/public/common/sandboxed_process_launcher_delegate.h"
 #include "mojo/edk/embedder/platform_channel_pair.h"
 
 namespace content {
@@ -74,6 +76,8 @@
 
   mojo::edk::PlatformChannelPair::PrepareToPassHandleToChildProcess(
       mojo_client_handle(), command_line(), &options->handles_to_transfer);
+
+  UpdateLaunchOptionsForSandbox(delegate_->GetSandboxType(), options);
 }
 
 ChildProcessLauncherHelper::Process
diff --git a/content/browser/devtools/devtools_frame_trace_recorder.cc b/content/browser/devtools/devtools_frame_trace_recorder.cc
index 8d7eb962..524e4db3 100644
--- a/content/browser/devtools/devtools_frame_trace_recorder.cc
+++ b/content/browser/devtools/devtools_frame_trace_recorder.cc
@@ -14,7 +14,7 @@
 #include "base/bind.h"
 #include "base/memory/ref_counted.h"
 #include "base/trace_event/trace_event_impl.h"
-#include "cc/output/compositor_frame_metadata.h"
+#include "components/viz/common/quads/compositor_frame_metadata.h"
 #include "content/browser/frame_host/render_frame_host_impl.h"
 #include "content/browser/renderer_host/render_widget_host_view_base.h"
 #include "content/public/browser/readback_types.h"
@@ -78,7 +78,7 @@
 }
 
 void CaptureFrame(RenderFrameHostImpl* host,
-                  const cc::CompositorFrameMetadata& metadata) {
+                  const viz::CompositorFrameMetadata& metadata) {
   RenderWidgetHostViewBase* view =
       static_cast<RenderWidgetHostViewBase*>(host->GetView());
   if (!view)
@@ -118,7 +118,7 @@
 
 void DevToolsFrameTraceRecorder::OnSwapCompositorFrame(
     RenderFrameHostImpl* host,
-    const cc::CompositorFrameMetadata& frame_metadata) {
+    const viz::CompositorFrameMetadata& frame_metadata) {
   if (!host || !ScreenshotCategoryEnabled())
     return;
   CaptureFrame(host, frame_metadata);
@@ -126,7 +126,7 @@
 
 void DevToolsFrameTraceRecorder::OnSynchronousSwapCompositorFrame(
     RenderFrameHostImpl* host,
-    const cc::CompositorFrameMetadata& frame_metadata) {
+    const viz::CompositorFrameMetadata& frame_metadata) {
   if (!host || !ScreenshotCategoryEnabled()) {
     last_metadata_.reset();
     return;
@@ -136,7 +136,7 @@
   TRACE_EVENT_IS_NEW_TRACE(&is_new_trace);
   if (!is_new_trace && last_metadata_)
     CaptureFrame(host, *last_metadata_);
-  last_metadata_.reset(new cc::CompositorFrameMetadata);
+  last_metadata_.reset(new viz::CompositorFrameMetadata);
   *last_metadata_ = frame_metadata.Clone();
 }
 
diff --git a/content/browser/devtools/devtools_frame_trace_recorder.h b/content/browser/devtools/devtools_frame_trace_recorder.h
index 236e14d..9c480d1b5 100644
--- a/content/browser/devtools/devtools_frame_trace_recorder.h
+++ b/content/browser/devtools/devtools_frame_trace_recorder.h
@@ -11,7 +11,7 @@
 #include "base/macros.h"
 #include "base/memory/weak_ptr.h"
 
-namespace cc {
+namespace viz {
 class CompositorFrameMetadata;
 }
 
@@ -26,15 +26,15 @@
 
   void OnSwapCompositorFrame(
       RenderFrameHostImpl* host,
-      const cc::CompositorFrameMetadata& frame_metadata);
+      const viz::CompositorFrameMetadata& frame_metadata);
 
   void OnSynchronousSwapCompositorFrame(
       RenderFrameHostImpl* host,
-      const cc::CompositorFrameMetadata& frame_metadata);
+      const viz::CompositorFrameMetadata& frame_metadata);
 
  private:
   DISALLOW_COPY_AND_ASSIGN(DevToolsFrameTraceRecorder);
-  std::unique_ptr<cc::CompositorFrameMetadata> last_metadata_;
+  std::unique_ptr<viz::CompositorFrameMetadata> last_metadata_;
 };
 
 }  // namespace content
diff --git a/content/browser/devtools/protocol/input_handler.cc b/content/browser/devtools/protocol/input_handler.cc
index ac7905688..be9dd99a 100644
--- a/content/browser/devtools/protocol/input_handler.cc
+++ b/content/browser/devtools/protocol/input_handler.cc
@@ -10,7 +10,7 @@
 #include "base/strings/utf_string_conversions.h"
 #include "base/threading/thread_task_runner_handle.h"
 #include "base/trace_event/trace_event.h"
-#include "cc/output/compositor_frame_metadata.h"
+#include "components/viz/common/quads/compositor_frame_metadata.h"
 #include "content/browser/devtools/devtools_session.h"
 #include "content/browser/devtools/protocol/native_input_event_builder.h"
 #include "content/browser/frame_host/render_frame_host_impl.h"
@@ -302,7 +302,7 @@
 }
 
 void InputHandler::OnSwapCompositorFrame(
-    const cc::CompositorFrameMetadata& frame_metadata) {
+    const viz::CompositorFrameMetadata& frame_metadata) {
   page_scale_factor_ = frame_metadata.page_scale_factor;
   scrollable_viewport_size_ = frame_metadata.scrollable_viewport_size;
 }
diff --git a/content/browser/devtools/protocol/input_handler.h b/content/browser/devtools/protocol/input_handler.h
index 5e7cd42..0327459 100644
--- a/content/browser/devtools/protocol/input_handler.h
+++ b/content/browser/devtools/protocol/input_handler.h
@@ -17,12 +17,11 @@
 #include "third_party/WebKit/public/platform/WebInputEvent.h"
 #include "ui/gfx/geometry/size_f.h"
 
-namespace cc {
+namespace viz {
 class CompositorFrameMetadata;
 }
 
 namespace content {
-
 class DevToolsAgentHostImpl;
 class RenderFrameHostImpl;
 
@@ -39,7 +38,8 @@
 
   void Wire(UberDispatcher* dispatcher) override;
   void SetRenderFrameHost(RenderFrameHostImpl* host) override;
-  void OnSwapCompositorFrame(const cc::CompositorFrameMetadata& frame_metadata);
+  void OnSwapCompositorFrame(
+      const viz::CompositorFrameMetadata& frame_metadata);
   Response Disable() override;
 
   void DispatchKeyEvent(
diff --git a/content/browser/devtools/protocol/page_handler.cc b/content/browser/devtools/protocol/page_handler.cc
index 5875a861..45fec53 100644
--- a/content/browser/devtools/protocol/page_handler.cc
+++ b/content/browser/devtools/protocol/page_handler.cc
@@ -171,7 +171,7 @@
 }
 
 void PageHandler::OnSwapCompositorFrame(
-    cc::CompositorFrameMetadata frame_metadata) {
+    viz::CompositorFrameMetadata frame_metadata) {
   last_compositor_frame_metadata_ = std::move(frame_metadata);
   has_compositor_frame_metadata_ = true;
 
@@ -180,7 +180,7 @@
 }
 
 void PageHandler::OnSynchronousSwapCompositorFrame(
-    cc::CompositorFrameMetadata frame_metadata) {
+    viz::CompositorFrameMetadata frame_metadata) {
   if (has_compositor_frame_metadata_) {
     last_compositor_frame_metadata_ =
         std::move(next_compositor_frame_metadata_);
@@ -690,7 +690,7 @@
   // TODO(vkuzkokov): do not use previous frame metadata.
   // TODO(miu): RWHV to provide an API to provide actual rendering size.
   // http://crbug.com/73362
-  cc::CompositorFrameMetadata& metadata = last_compositor_frame_metadata_;
+  viz::CompositorFrameMetadata& metadata = last_compositor_frame_metadata_;
 
   gfx::SizeF viewport_size_dip = gfx::ScaleSize(
       metadata.scrollable_viewport_size, metadata.page_scale_factor);
@@ -729,7 +729,7 @@
   }
 }
 
-void PageHandler::ScreencastFrameCaptured(cc::CompositorFrameMetadata metadata,
+void PageHandler::ScreencastFrameCaptured(viz::CompositorFrameMetadata metadata,
                                           const SkBitmap& bitmap,
                                           ReadbackResponse response) {
   if (response != READBACK_SUCCESS) {
@@ -753,7 +753,7 @@
                  base::Time::Now()));
 }
 
-void PageHandler::ScreencastFrameEncoded(cc::CompositorFrameMetadata metadata,
+void PageHandler::ScreencastFrameEncoded(viz::CompositorFrameMetadata metadata,
                                          const base::Time& timestamp,
                                          const std::string& data) {
   // Consider metadata empty in case it has no device scale factor.
diff --git a/content/browser/devtools/protocol/page_handler.h b/content/browser/devtools/protocol/page_handler.h
index b3602785..f0bd294 100644
--- a/content/browser/devtools/protocol/page_handler.h
+++ b/content/browser/devtools/protocol/page_handler.h
@@ -16,7 +16,7 @@
 #include "base/macros.h"
 #include "base/memory/weak_ptr.h"
 #include "base/time/time.h"
-#include "cc/output/compositor_frame_metadata.h"
+#include "components/viz/common/quads/compositor_frame_metadata.h"
 #include "content/browser/devtools/protocol/devtools_domain_handler.h"
 #include "content/browser/devtools/protocol/devtools_download_manager_delegate.h"
 #include "content/browser/devtools/protocol/page.h"
@@ -59,9 +59,9 @@
 
   void Wire(UberDispatcher* dispatcher) override;
   void SetRenderFrameHost(RenderFrameHostImpl* host) override;
-  void OnSwapCompositorFrame(cc::CompositorFrameMetadata frame_metadata);
+  void OnSwapCompositorFrame(viz::CompositorFrameMetadata frame_metadata);
   void OnSynchronousSwapCompositorFrame(
-      cc::CompositorFrameMetadata frame_metadata);
+      viz::CompositorFrameMetadata frame_metadata);
   void DidAttachInterstitialPage();
   void DidDetachInterstitialPage();
   bool screencast_enabled() const { return enabled_ && screencast_enabled_; }
@@ -136,10 +136,10 @@
   WebContentsImpl* GetWebContents();
   void NotifyScreencastVisibility(bool visible);
   void InnerSwapCompositorFrame();
-  void ScreencastFrameCaptured(cc::CompositorFrameMetadata metadata,
+  void ScreencastFrameCaptured(viz::CompositorFrameMetadata metadata,
                                const SkBitmap& bitmap,
                                ReadbackResponse response);
-  void ScreencastFrameEncoded(cc::CompositorFrameMetadata metadata,
+  void ScreencastFrameEncoded(viz::CompositorFrameMetadata metadata,
                               const base::Time& timestamp,
                               const std::string& data);
 
@@ -166,8 +166,8 @@
   int capture_every_nth_frame_;
   int capture_retry_count_;
   bool has_compositor_frame_metadata_;
-  cc::CompositorFrameMetadata next_compositor_frame_metadata_;
-  cc::CompositorFrameMetadata last_compositor_frame_metadata_;
+  viz::CompositorFrameMetadata next_compositor_frame_metadata_;
+  viz::CompositorFrameMetadata last_compositor_frame_metadata_;
   int session_id_;
   int frame_counter_;
   int frames_in_flight_;
diff --git a/content/browser/devtools/render_frame_devtools_agent_host.cc b/content/browser/devtools/render_frame_devtools_agent_host.cc
index 536f0b9..4c00a4d 100644
--- a/content/browser/devtools/render_frame_devtools_agent_host.cc
+++ b/content/browser/devtools/render_frame_devtools_agent_host.cc
@@ -1063,7 +1063,7 @@
 }
 
 void RenderFrameDevToolsAgentHost::DidReceiveCompositorFrame() {
-  const cc::CompositorFrameMetadata& metadata =
+  const viz::CompositorFrameMetadata& metadata =
       RenderWidgetHostImpl::From(
           web_contents()->GetRenderViewHost()->GetWidget())
           ->last_frame_metadata();
@@ -1274,7 +1274,7 @@
 
 void RenderFrameDevToolsAgentHost::SignalSynchronousSwapCompositorFrame(
     RenderFrameHost* frame_host,
-    cc::CompositorFrameMetadata frame_metadata) {
+    viz::CompositorFrameMetadata frame_metadata) {
   scoped_refptr<RenderFrameDevToolsAgentHost> dtah(FindAgentHost(
       static_cast<RenderFrameHostImpl*>(frame_host)->frame_tree_node()));
   if (dtah) {
@@ -1288,7 +1288,7 @@
 }
 
 void RenderFrameDevToolsAgentHost::SynchronousSwapCompositorFrame(
-    cc::CompositorFrameMetadata frame_metadata) {
+    viz::CompositorFrameMetadata frame_metadata) {
   for (auto* page : protocol::PageHandler::ForAgentHost(this))
     page->OnSynchronousSwapCompositorFrame(frame_metadata.Clone());
   for (auto* input : protocol::InputHandler::ForAgentHost(this))
diff --git a/content/browser/devtools/render_frame_devtools_agent_host.h b/content/browser/devtools/render_frame_devtools_agent_host.h
index eb785be..d9e3a210 100644
--- a/content/browser/devtools/render_frame_devtools_agent_host.h
+++ b/content/browser/devtools/render_frame_devtools_agent_host.h
@@ -19,20 +19,17 @@
 #include "net/base/net_errors.h"
 
 #if defined(OS_ANDROID)
+#include "services/device/public/interfaces/wake_lock.mojom.h"
 #include "ui/android/view_android.h"
 #endif  // OS_ANDROID
 
-namespace cc {
-class CompositorFrameMetadata;
-}
-
 namespace net {
 class HttpRequestHeaders;
 }
 
-#if defined(OS_ANDROID)
-#include "services/device/public/interfaces/wake_lock.mojom.h"
-#endif
+namespace viz {
+class CompositorFrameMetadata;
+}
 
 namespace content {
 
@@ -71,7 +68,7 @@
 
   static void SignalSynchronousSwapCompositorFrame(
       RenderFrameHost* frame_host,
-      cc::CompositorFrameMetadata frame_metadata);
+      viz::CompositorFrameMetadata frame_metadata);
 
   FrameTreeNode* frame_tree_node() { return frame_tree_node_; }
 
@@ -154,7 +151,7 @@
 #endif
 
   void SynchronousSwapCompositorFrame(
-      cc::CompositorFrameMetadata frame_metadata);
+      viz::CompositorFrameMetadata frame_metadata);
 
   class FrameHostHolder;
 
diff --git a/content/browser/frame_host/cross_process_frame_connector.h b/content/browser/frame_host/cross_process_frame_connector.h
index 43468081..b687a2c 100644
--- a/content/browser/frame_host/cross_process_frame_connector.h
+++ b/content/browser/frame_host/cross_process_frame_connector.h
@@ -7,7 +7,7 @@
 
 #include <stdint.h>
 
-#include "cc/output/compositor_frame.h"
+#include "components/viz/common/quads/compositor_frame.h"
 #include "components/viz/common/surfaces/local_surface_id.h"
 #include "content/browser/renderer_host/frame_connector_delegate.h"
 #include "content/common/content_export.h"
diff --git a/content/browser/frame_host/render_widget_host_view_guest.cc b/content/browser/frame_host/render_widget_host_view_guest.cc
index 9cc00d7..e3a968df 100644
--- a/content/browser/frame_host/render_widget_host_view_guest.cc
+++ b/content/browser/frame_host/render_widget_host_view_guest.cc
@@ -294,7 +294,7 @@
 
 void RenderWidgetHostViewGuest::SubmitCompositorFrame(
     const viz::LocalSurfaceId& local_surface_id,
-    cc::CompositorFrame frame) {
+    viz::CompositorFrame frame) {
   TRACE_EVENT0("content", "RenderWidgetHostViewGuest::OnSwapCompositorFrame");
 
   last_scroll_offset_ = frame.metadata.root_scroll_offset;
diff --git a/content/browser/frame_host/render_widget_host_view_guest.h b/content/browser/frame_host/render_widget_host_view_guest.h
index b5b77f5..8d5b939 100644
--- a/content/browser/frame_host/render_widget_host_view_guest.h
+++ b/content/browser/frame_host/render_widget_host_view_guest.h
@@ -95,7 +95,7 @@
   void SelectionBoundsChanged(
       const ViewHostMsg_SelectionBounds_Params& params) override;
   void SubmitCompositorFrame(const viz::LocalSurfaceId& local_surface_id,
-                             cc::CompositorFrame frame) override;
+                             viz::CompositorFrame frame) override;
 #if defined(USE_AURA)
   void ProcessAckedTouchEvent(const TouchEventWithLatencyInfo& touch,
                               InputEventAckState ack_result) override;
diff --git a/content/browser/frame_host/render_widget_host_view_guest_unittest.cc b/content/browser/frame_host/render_widget_host_view_guest_unittest.cc
index eee37d7..d67584ba 100644
--- a/content/browser/frame_host/render_widget_host_view_guest_unittest.cc
+++ b/content/browser/frame_host/render_widget_host_view_guest_unittest.cc
@@ -224,10 +224,10 @@
 };
 
 namespace {
-cc::CompositorFrame CreateDelegatedFrame(float scale_factor,
-                                         gfx::Size size,
-                                         const gfx::Rect& damage) {
-  cc::CompositorFrame frame;
+viz::CompositorFrame CreateDelegatedFrame(float scale_factor,
+                                          gfx::Size size,
+                                          const gfx::Rect& damage) {
+  viz::CompositorFrame frame;
   frame.metadata.device_scale_factor = scale_factor;
   frame.metadata.begin_frame_ack = viz::BeginFrameAck(0, 1, true);
 
diff --git a/content/browser/media/capture/web_contents_audio_input_stream.cc b/content/browser/media/capture/web_contents_audio_input_stream.cc
index ecc4b24..303d910 100644
--- a/content/browser/media/capture/web_contents_audio_input_stream.cc
+++ b/content/browser/media/capture/web_contents_audio_input_stream.cc
@@ -253,9 +253,7 @@
 void WebContentsAudioInputStream::Impl::ReportError() {
   DCHECK(thread_checker_.CalledOnValidThread());
 
-  // TODO(miu): Need clean-up of AudioInputCallback interface in a future
-  // change, since its only implementation ignores the first argument entirely
-  callback_->OnError(NULL);
+  callback_->OnError();
 }
 
 void WebContentsAudioInputStream::Impl::StartMirroring() {
diff --git a/content/browser/media/capture/web_contents_audio_input_stream_unittest.cc b/content/browser/media/capture/web_contents_audio_input_stream_unittest.cc
index 715e302..bdff30f 100644
--- a/content/browser/media/capture/web_contents_audio_input_stream_unittest.cc
+++ b/content/browser/media/capture/web_contents_audio_input_stream_unittest.cc
@@ -168,12 +168,11 @@
  public:
   MockAudioInputCallback() {}
 
-  MOCK_METHOD4(OnData,
-               void(AudioInputStream* stream,
-                    const media::AudioBus* src,
+  MOCK_METHOD3(OnData,
+               void(const media::AudioBus* src,
                     base::TimeTicks capture_time,
                     double volume));
-  MOCK_METHOD1(OnError, void(AudioInputStream* stream));
+  MOCK_METHOD0(OnError, void());
 
  private:
   DISALLOW_COPY_AND_ASSIGN(MockAudioInputCallback);
@@ -254,7 +253,7 @@
             static_cast<AudioMirroringManager::MirroringDestination*>(NULL)))
         .RetiresOnSaturation();
 
-    EXPECT_CALL(mock_input_callback_, OnData(NotNull(), NotNull(), _, _))
+    EXPECT_CALL(mock_input_callback_, OnData(NotNull(), _, _))
         .WillRepeatedly(
             InvokeWithoutArgs(&on_data_event_, &base::WaitableEvent::Signal));
 
@@ -364,7 +363,7 @@
   }
 
   void LoseMirroringTarget() {
-    EXPECT_CALL(mock_input_callback_, OnError(_));
+    EXPECT_CALL(mock_input_callback_, OnError());
 
     SimulateChangeCallback(-1, -1);
   }
diff --git a/content/browser/renderer_host/browser_compositor_view_mac.h b/content/browser/renderer_host/browser_compositor_view_mac.h
index f77dfd9..0a91a40 100644
--- a/content/browser/renderer_host/browser_compositor_view_mac.h
+++ b/content/browser/renderer_host/browser_compositor_view_mac.h
@@ -62,7 +62,7 @@
   void DidCreateNewRendererCompositorFrameSink(
       viz::mojom::CompositorFrameSinkClient* renderer_compositor_frame_sink);
   void SubmitCompositorFrame(const viz::LocalSurfaceId& local_surface_id,
-                             cc::CompositorFrame frame);
+                             viz::CompositorFrame frame);
   void OnDidNotProduceFrame(const viz::BeginFrameAck& ack);
   void SetBackgroundColor(SkColor background_color);
   void SetDisplayColorSpace(const gfx::ColorSpace& color_space);
diff --git a/content/browser/renderer_host/browser_compositor_view_mac.mm b/content/browser/renderer_host/browser_compositor_view_mac.mm
index 7eb3be2..d705141 100644
--- a/content/browser/renderer_host/browser_compositor_view_mac.mm
+++ b/content/browser/renderer_host/browser_compositor_view_mac.mm
@@ -294,7 +294,7 @@
 
 void BrowserCompositorMac::SubmitCompositorFrame(
     const viz::LocalSurfaceId& local_surface_id,
-    cc::CompositorFrame frame) {
+    viz::CompositorFrame frame) {
   // Compute the frame size based on the root render pass rect size.
   viz::RenderPass* root_pass = frame.render_pass_list.back().get();
   float scale_factor = frame.metadata.device_scale_factor;
diff --git a/content/browser/renderer_host/compositor_impl_android.cc b/content/browser/renderer_host/compositor_impl_android.cc
index 1d6207f..6275dd33 100644
--- a/content/browser/renderer_host/compositor_impl_android.cc
+++ b/content/browser/renderer_host/compositor_impl_android.cc
@@ -31,7 +31,6 @@
 #include "cc/base/switches.h"
 #include "cc/input/input_handler.h"
 #include "cc/layers/layer.h"
-#include "cc/output/compositor_frame.h"
 #include "cc/raster/single_thread_task_graph_runner.h"
 #include "cc/resources/ui_resource_manager.h"
 #include "cc/trees/layer_tree_host.h"
@@ -39,6 +38,7 @@
 #include "components/viz/common/gl_helper.h"
 #include "components/viz/common/gpu/context_provider.h"
 #include "components/viz/common/gpu/vulkan_in_process_context_provider.h"
+#include "components/viz/common/quads/compositor_frame.h"
 #include "components/viz/common/surfaces/frame_sink_id_allocator.h"
 #include "components/viz/common/switches.h"
 #include "components/viz/host/host_frame_sink_manager.h"
@@ -389,7 +389,7 @@
     return true;
   }
 
-  void SwapBuffers(cc::CompositorFrame frame) override {
+  void SwapBuffers(viz::CompositorFrame frame) override {
     surface_->SwapBuffers();
     task_runner_->PostTask(FROM_HERE,
                            base::Bind(&VulkanOutputSurface::SwapBuffersAck,
diff --git a/content/browser/renderer_host/delegated_frame_host.cc b/content/browser/renderer_host/delegated_frame_host.cc
index 632c4e7..64944ce 100644
--- a/content/browser/renderer_host/delegated_frame_host.cc
+++ b/content/browser/renderer_host/delegated_frame_host.cc
@@ -14,8 +14,8 @@
 #include "base/memory/ptr_util.h"
 #include "base/time/default_tick_clock.h"
 #include "cc/base/switches.h"
-#include "cc/output/compositor_frame.h"
 #include "components/viz/common/gl_helper.h"
+#include "components/viz/common/quads/compositor_frame.h"
 #include "components/viz/common/quads/copy_output_request.h"
 #include "components/viz/common/quads/single_release_callback.h"
 #include "components/viz/common/quads/texture_mailbox.h"
@@ -400,7 +400,7 @@
 
 void DelegatedFrameHost::SubmitCompositorFrame(
     const viz::LocalSurfaceId& local_surface_id,
-    cc::CompositorFrame frame) {
+    viz::CompositorFrame frame) {
 #if defined(OS_CHROMEOS)
   DCHECK(!resize_lock_ || !client_->IsAutoResizeEnabled());
 #endif
diff --git a/content/browser/renderer_host/delegated_frame_host.h b/content/browser/renderer_host/delegated_frame_host.h
index a457ea4..58a72b70 100644
--- a/content/browser/renderer_host/delegated_frame_host.h
+++ b/content/browser/renderer_host/delegated_frame_host.h
@@ -124,7 +124,7 @@
   void DidCreateNewRendererCompositorFrameSink(
       viz::mojom::CompositorFrameSinkClient* renderer_compositor_frame_sink);
   void SubmitCompositorFrame(const viz::LocalSurfaceId& local_surface_id,
-                             cc::CompositorFrame frame);
+                             viz::CompositorFrame frame);
   void ClearDelegatedFrame();
   void WasHidden();
   void WasShown(const ui::LatencyInfo& latency_info);
diff --git a/content/browser/renderer_host/frame_metadata_util.cc b/content/browser/renderer_host/frame_metadata_util.cc
index 11cf5d2..de9edeb 100644
--- a/content/browser/renderer_host/frame_metadata_util.cc
+++ b/content/browser/renderer_host/frame_metadata_util.cc
@@ -4,7 +4,7 @@
 
 #include "content/browser/renderer_host/frame_metadata_util.h"
 
-#include "cc/output/compositor_frame_metadata.h"
+#include "components/viz/common/quads/compositor_frame_metadata.h"
 
 namespace {
 
@@ -13,12 +13,12 @@
 // V1 saw errors of ~0.065 between computed window and content widths.
 const float kMobileViewportWidthEpsilon = 0.15f;
 
-bool HasFixedPageScale(const cc::CompositorFrameMetadata& frame_metadata) {
+bool HasFixedPageScale(const viz::CompositorFrameMetadata& frame_metadata) {
   return frame_metadata.min_page_scale_factor ==
          frame_metadata.max_page_scale_factor;
 }
 
-bool HasMobileViewport(const cc::CompositorFrameMetadata& frame_metadata) {
+bool HasMobileViewport(const viz::CompositorFrameMetadata& frame_metadata) {
   float window_width_dip =
       frame_metadata.page_scale_factor *
           frame_metadata.scrollable_viewport_size.width();
@@ -30,7 +30,8 @@
 
 namespace content {
 
-bool IsMobileOptimizedFrame(const cc::CompositorFrameMetadata& frame_metadata) {
+bool IsMobileOptimizedFrame(
+    const viz::CompositorFrameMetadata& frame_metadata) {
   bool has_mobile_viewport = HasMobileViewport(frame_metadata);
   bool has_fixed_page_scale = HasFixedPageScale(frame_metadata);
   return has_fixed_page_scale || has_mobile_viewport;
diff --git a/content/browser/renderer_host/frame_metadata_util.h b/content/browser/renderer_host/frame_metadata_util.h
index 54b97b8..50de6fb 100644
--- a/content/browser/renderer_host/frame_metadata_util.h
+++ b/content/browser/renderer_host/frame_metadata_util.h
@@ -7,7 +7,7 @@
 
 #include "content/common/content_export.h"
 
-namespace cc {
+namespace viz {
 class CompositorFrameMetadata;
 }
 
@@ -19,7 +19,7 @@
 //   (indicating that this is a mobile-optimized or responsive web design);
 // - page that prevents zooming in or out.
 CONTENT_EXPORT bool IsMobileOptimizedFrame(
-    const cc::CompositorFrameMetadata& frame_metadata);
+    const viz::CompositorFrameMetadata& frame_metadata);
 
 }  // namespace content
 
diff --git a/content/browser/renderer_host/input/touch_selection_controller_client_child_frame.cc b/content/browser/renderer_host/input/touch_selection_controller_client_child_frame.cc
index 884a3c0..b4a3bbff 100644
--- a/content/browser/renderer_host/input/touch_selection_controller_client_child_frame.cc
+++ b/content/browser/renderer_host/input/touch_selection_controller_client_child_frame.cc
@@ -36,7 +36,7 @@
 }
 
 void TouchSelectionControllerClientChildFrame::UpdateSelectionBoundsIfNeeded(
-    const cc::Selection<gfx::SelectionBound>& selection,
+    const viz::Selection<gfx::SelectionBound>& selection,
     float device_scale_factor) {
   gfx::PointF start_edge_top = selection.start.edge_top();
   gfx::PointF start_edge_bottom = selection.start.edge_bottom();
@@ -59,7 +59,7 @@
   end_edge_top += offset_v;
   end_edge_bottom += offset_v;
 
-  cc::Selection<gfx::SelectionBound> transformed_selection(selection);
+  viz::Selection<gfx::SelectionBound> transformed_selection(selection);
   transformed_selection.start.SetEdge(start_edge_top, start_edge_bottom);
   transformed_selection.end.SetEdge(end_edge_top, end_edge_bottom);
 
diff --git a/content/browser/renderer_host/input/touch_selection_controller_client_child_frame.h b/content/browser/renderer_host/input/touch_selection_controller_client_child_frame.h
index 9a9af966..c398f6b 100644
--- a/content/browser/renderer_host/input/touch_selection_controller_client_child_frame.h
+++ b/content/browser/renderer_host/input/touch_selection_controller_client_child_frame.h
@@ -6,7 +6,7 @@
 #define CONTENT_BROWSER_RENDERER_HOST_INPUT_TOUCH_SELECTION_CONTROLLER_CLIENT_CHILD_FRAME_H_
 
 #include "base/macros.h"
-#include "cc/input/selection.h"
+#include "components/viz/common/quads/selection.h"
 #include "content/common/content_export.h"
 #include "ui/touch_selection/touch_selection_controller.h"
 #include "ui/touch_selection/touch_selection_menu_runner.h"
@@ -33,7 +33,7 @@
 
   void DidStopFlinging();
   void UpdateSelectionBoundsIfNeeded(
-      const cc::Selection<gfx::SelectionBound>& selection,
+      const viz::Selection<gfx::SelectionBound>& selection,
       float device_scale_factor);
 
  private:
diff --git a/content/browser/renderer_host/offscreen_canvas_provider_impl_unittest.cc b/content/browser/renderer_host/offscreen_canvas_provider_impl_unittest.cc
index 21868c0..cad865e4 100644
--- a/content/browser/renderer_host/offscreen_canvas_provider_impl_unittest.cc
+++ b/content/browser/renderer_host/offscreen_canvas_provider_impl_unittest.cc
@@ -11,7 +11,7 @@
 #include "base/memory/ptr_util.h"
 #include "base/message_loop/message_loop.h"
 #include "base/run_loop.h"
-#include "cc/output/compositor_frame.h"
+#include "components/viz/common/quads/compositor_frame.h"
 #include "content/browser/compositor/surface_utils.h"
 #include "content/browser/compositor/test/no_transport_image_transport_factory.h"
 #include "content/browser/renderer_host/offscreen_canvas_surface_impl.h"
@@ -93,8 +93,8 @@
 };
 
 // Create a CompositorFrame suitable to send over IPC.
-cc::CompositorFrame MakeCompositorFrame() {
-  cc::CompositorFrame frame;
+viz::CompositorFrame MakeCompositorFrame() {
+  viz::CompositorFrame frame;
   frame.metadata.begin_frame_ack.source_id =
       viz::BeginFrameArgs::kManualSourceId;
   frame.metadata.begin_frame_ack.sequence_number =
diff --git a/content/browser/renderer_host/render_widget_host_impl.cc b/content/browser/renderer_host/render_widget_host_impl.cc
index fa13aa7..8ddb922 100644
--- a/content/browser/renderer_host/render_widget_host_impl.cc
+++ b/content/browser/renderer_host/render_widget_host_impl.cc
@@ -30,7 +30,7 @@
 #include "base/trace_event/trace_event.h"
 #include "build/build_config.h"
 #include "cc/base/switches.h"
-#include "cc/output/compositor_frame.h"
+#include "components/viz/common/quads/compositor_frame.h"
 #include "components/viz/common/switches.h"
 #include "components/viz/service/display_embedder/server_shared_bitmap_manager.h"
 #include "content/browser/accessibility/browser_accessibility_state_impl.h"
@@ -2620,7 +2620,7 @@
 
 void RenderWidgetHostImpl::SubmitCompositorFrame(
     const viz::LocalSurfaceId& local_surface_id,
-    cc::CompositorFrame frame,
+    viz::CompositorFrame frame,
     viz::mojom::HitTestRegionListPtr hit_test_region_list,
     uint64_t submit_time) {
   // TODO(gklassen): Route hit-test data to appropriate HitTestAggregator.
diff --git a/content/browser/renderer_host/render_widget_host_impl.h b/content/browser/renderer_host/render_widget_host_impl.h
index 7c5f7d8..f7f7f5f 100644
--- a/content/browser/renderer_host/render_widget_host_impl.h
+++ b/content/browser/renderer_host/render_widget_host_impl.h
@@ -583,7 +583,7 @@
       viz::mojom::CompositorFrameSinkRequest request,
       viz::mojom::CompositorFrameSinkClientPtr client);
 
-  const cc::CompositorFrameMetadata& last_frame_metadata() {
+  const viz::CompositorFrameMetadata& last_frame_metadata() {
     return last_frame_metadata_;
   }
 
@@ -593,7 +593,7 @@
   void SetNeedsBeginFrame(bool needs_begin_frame) override;
   void SubmitCompositorFrame(
       const viz::LocalSurfaceId& local_surface_id,
-      cc::CompositorFrame frame,
+      viz::CompositorFrame frame,
       viz::mojom::HitTestRegionListPtr hit_test_region_list,
       uint64_t submit_time) override;
   void DidNotProduceFrame(const viz::BeginFrameAck& ack) override;
@@ -1008,7 +1008,7 @@
   mojo::Binding<viz::mojom::CompositorFrameSink> compositor_frame_sink_binding_;
   viz::mojom::CompositorFrameSinkClientPtr renderer_compositor_frame_sink_;
 
-  cc::CompositorFrameMetadata last_frame_metadata_;
+  viz::CompositorFrameMetadata last_frame_metadata_;
 
   // Last non-zero frame token received from the renderer. Any swap messsages
   // having a token less than or equal to this value will be processed.
@@ -1022,7 +1022,7 @@
   // exist yet, we keep it here until they are available.
   struct {
     viz::LocalSurfaceId local_surface_id;
-    cc::CompositorFrame frame;
+    viz::CompositorFrame frame;
     uint32_t max_shared_bitmap_sequence_number = 0;
     viz::mojom::HitTestRegionListPtr hit_test_region_list;
   } saved_frame_;
diff --git a/content/browser/renderer_host/render_widget_host_unittest.cc b/content/browser/renderer_host/render_widget_host_unittest.cc
index f287eb0..963ca3d0 100644
--- a/content/browser/renderer_host/render_widget_host_unittest.cc
+++ b/content/browser/renderer_host/render_widget_host_unittest.cc
@@ -257,8 +257,8 @@
 
 namespace  {
 
-cc::CompositorFrame MakeCompositorFrame(float scale_factor, gfx::Size size) {
-  cc::CompositorFrame frame;
+viz::CompositorFrame MakeCompositorFrame(float scale_factor, gfx::Size size) {
+  viz::CompositorFrame frame;
   frame.metadata.device_scale_factor = scale_factor;
   frame.metadata.begin_frame_ack = viz::BeginFrameAck(0, 1, true);
 
@@ -1737,7 +1737,7 @@
   // Start the timer and immediately send a CompositorFrame with the
   // content_source_id of the new page. The timeout shouldn't fire.
   host_->StartNewContentRenderingTimeout(5);
-  cc::CompositorFrame frame = MakeCompositorFrame(1.f, frame_size);
+  viz::CompositorFrame frame = MakeCompositorFrame(1.f, frame_size);
   frame.metadata.content_source_id = 5;
   host_->SubmitCompositorFrame(local_surface_id, std::move(frame), nullptr, 0);
   base::ThreadTaskRunnerHandle::Get()->PostDelayedTask(
@@ -1799,7 +1799,7 @@
 
   {
     // First swap a frame with an invalid ID.
-    cc::CompositorFrame frame = MakeCompositorFrame(1.f, frame_size);
+    viz::CompositorFrame frame = MakeCompositorFrame(1.f, frame_size);
     frame.metadata.begin_frame_ack = viz::BeginFrameAck(0, 1, true);
     frame.metadata.content_source_id = 99;
     host_->SubmitCompositorFrame(local_surface_id, std::move(frame), nullptr,
@@ -1811,7 +1811,7 @@
 
   {
     // Test with a valid content ID as a control.
-    cc::CompositorFrame frame = MakeCompositorFrame(1.f, frame_size);
+    viz::CompositorFrame frame = MakeCompositorFrame(1.f, frame_size);
     frame.metadata.content_source_id = 100;
     host_->SubmitCompositorFrame(local_surface_id, std::move(frame), nullptr,
                                  0);
@@ -1824,7 +1824,7 @@
     // We also accept frames with higher content IDs, to cover the case where
     // the browser process receives a compositor frame for a new page before
     // the corresponding DidCommitProvisionalLoad (it's a race).
-    cc::CompositorFrame frame = MakeCompositorFrame(1.f, frame_size);
+    viz::CompositorFrame frame = MakeCompositorFrame(1.f, frame_size);
     frame.metadata.content_source_id = 101;
     host_->SubmitCompositorFrame(local_surface_id, std::move(frame), nullptr,
                                  0);
@@ -2699,7 +2699,7 @@
   EXPECT_EQ(1u, host_->queued_messages_.size());
   EXPECT_EQ(0u, host_->processed_frame_messages_count());
 
-  cc::CompositorFrame frame = MakeCompositorFrame(1.f, frame_size);
+  viz::CompositorFrame frame = MakeCompositorFrame(1.f, frame_size);
   frame.metadata.frame_token = frame_token;
   host_->SubmitCompositorFrame(local_surface_id, std::move(frame), nullptr, 0);
   EXPECT_EQ(0u, host_->queued_messages_.size());
@@ -2719,7 +2719,7 @@
   EXPECT_EQ(0u, host_->queued_messages_.size());
   EXPECT_EQ(0u, host_->processed_frame_messages_count());
 
-  cc::CompositorFrame frame = MakeCompositorFrame(1.f, frame_size);
+  viz::CompositorFrame frame = MakeCompositorFrame(1.f, frame_size);
   frame.metadata.frame_token = frame_token;
   host_->SubmitCompositorFrame(local_surface_id, std::move(frame), nullptr, 0);
   EXPECT_EQ(0u, host_->queued_messages_.size());
@@ -2757,7 +2757,7 @@
   EXPECT_EQ(2u, host_->queued_messages_.size());
   EXPECT_EQ(0u, host_->processed_frame_messages_count());
 
-  cc::CompositorFrame frame = MakeCompositorFrame(1.f, frame_size);
+  viz::CompositorFrame frame = MakeCompositorFrame(1.f, frame_size);
   frame.metadata.frame_token = frame_token1;
   host_->SubmitCompositorFrame(local_surface_id, std::move(frame), nullptr, 0);
   EXPECT_EQ(1u, host_->queued_messages_.size());
@@ -2786,7 +2786,7 @@
   EXPECT_EQ(0u, host_->queued_messages_.size());
   EXPECT_EQ(0u, host_->processed_frame_messages_count());
 
-  cc::CompositorFrame frame = MakeCompositorFrame(1.f, frame_size);
+  viz::CompositorFrame frame = MakeCompositorFrame(1.f, frame_size);
   frame.metadata.frame_token = frame_token1;
   host_->SubmitCompositorFrame(local_surface_id, std::move(frame), nullptr, 0);
   EXPECT_EQ(0u, host_->queued_messages_.size());
@@ -2835,7 +2835,7 @@
   EXPECT_EQ(2u, host_->queued_messages_.size());
   EXPECT_EQ(0u, host_->processed_frame_messages_count());
 
-  cc::CompositorFrame frame = MakeCompositorFrame(1.f, frame_size);
+  viz::CompositorFrame frame = MakeCompositorFrame(1.f, frame_size);
   frame.metadata.frame_token = frame_token2;
   host_->SubmitCompositorFrame(local_surface_id, std::move(frame), nullptr, 0);
   EXPECT_EQ(0u, host_->queued_messages_.size());
@@ -2870,7 +2870,7 @@
   EXPECT_EQ(0u, host_->processed_frame_messages_count());
   host_->Init();
 
-  cc::CompositorFrame frame = MakeCompositorFrame(1.f, frame_size);
+  viz::CompositorFrame frame = MakeCompositorFrame(1.f, frame_size);
   frame.metadata.frame_token = frame_token2;
   host_->SubmitCompositorFrame(local_surface_id, std::move(frame), nullptr, 0);
   EXPECT_EQ(0u, host_->queued_messages_.size());
diff --git a/content/browser/renderer_host/render_widget_host_view_android.cc b/content/browser/renderer_host/render_widget_host_view_android.cc
index 2c8af9bf..d57cc79 100644
--- a/content/browser/renderer_host/render_widget_host_view_android.cc
+++ b/content/browser/renderer_host/render_widget_host_view_android.cc
@@ -25,10 +25,10 @@
 #include "base/threading/thread_task_runner_handle.h"
 #include "cc/layers/layer.h"
 #include "cc/layers/surface_layer.h"
-#include "cc/output/compositor_frame.h"
 #include "cc/trees/latency_info_swap_promise.h"
 #include "cc/trees/layer_tree_host.h"
 #include "components/viz/common/gl_helper.h"
+#include "components/viz/common/quads/compositor_frame.h"
 #include "components/viz/common/quads/copy_output_request.h"
 #include "components/viz/common/quads/copy_output_result.h"
 #include "components/viz/common/quads/single_release_callback.h"
@@ -1237,7 +1237,7 @@
 
 void RenderWidgetHostViewAndroid::SubmitCompositorFrame(
     const viz::LocalSurfaceId& local_surface_id,
-    cc::CompositorFrame frame) {
+    viz::CompositorFrame frame) {
   if (!delegated_frame_host_) {
     DCHECK(!using_browser_compositor_);
     return;
@@ -1250,7 +1250,7 @@
   current_surface_size_ = root_pass->output_rect.size();
   bool is_transparent = root_pass->has_transparent_background;
 
-  cc::CompositorFrameMetadata metadata = frame.metadata.Clone();
+  viz::CompositorFrameMetadata metadata = frame.metadata.Clone();
 
   bool has_content = !current_surface_size_.IsEmpty();
 
@@ -1321,7 +1321,7 @@
 }
 
 void RenderWidgetHostViewAndroid::SynchronousFrameMetadata(
-    cc::CompositorFrameMetadata frame_metadata) {
+    viz::CompositorFrameMetadata frame_metadata) {
   if (!content_view_core_)
     return;
 
@@ -1473,7 +1473,7 @@
 }
 
 void RenderWidgetHostViewAndroid::OnFrameMetadataUpdated(
-    const cc::CompositorFrameMetadata& frame_metadata,
+    const viz::CompositorFrameMetadata& frame_metadata,
     bool is_transparent) {
   bool is_mobile_optimized = IsMobileOptimizedFrame(frame_metadata);
   gesture_provider_.SetDoubleTapSupportForPageEnabled(!is_mobile_optimized);
diff --git a/content/browser/renderer_host/render_widget_host_view_android.h b/content/browser/renderer_host/render_widget_host_view_android.h
index 09679af..e8ed068 100644
--- a/content/browser/renderer_host/render_widget_host_view_android.h
+++ b/content/browser/renderer_host/render_widget_host_view_android.h
@@ -18,9 +18,9 @@
 #include "base/macros.h"
 #include "base/memory/weak_ptr.h"
 #include "base/process/process.h"
-#include "cc/input/selection.h"
 #include "components/viz/common/frame_sinks/begin_frame_args.h"
 #include "components/viz/common/frame_sinks/begin_frame_source.h"
+#include "components/viz/common/quads/selection.h"
 #include "components/viz/service/frame_sinks/frame_evictor.h"
 #include "content/browser/renderer_host/input/mouse_wheel_phase_handler.h"
 #include "content/browser/renderer_host/input/stylus_text_selector.h"
@@ -156,7 +156,7 @@
       viz::mojom::CompositorFrameSinkClient* renderer_compositor_frame_sink)
       override;
   void SubmitCompositorFrame(const viz::LocalSurfaceId& local_surface_id,
-                             cc::CompositorFrame frame) override;
+                             viz::CompositorFrame frame) override;
   void OnDidNotProduceFrame(const viz::BeginFrameAck& ack) override;
   void ClearCompositorFrame() override;
   void SetIsInVR(bool is_in_vr) override;
@@ -290,7 +290,7 @@
                                   int start_adjust,
                                   int end_adjust);
 
-  void SynchronousFrameMetadata(cc::CompositorFrameMetadata frame_metadata);
+  void SynchronousFrameMetadata(viz::CompositorFrameMetadata frame_metadata);
 
   void SetSynchronousCompositorClient(SynchronousCompositorClient* client);
 
@@ -335,8 +335,9 @@
 
   void SendReclaimCompositorResources(bool is_swap_ack);
 
-  void OnFrameMetadataUpdated(const cc::CompositorFrameMetadata& frame_metadata,
-                              bool is_transparent);
+  void OnFrameMetadataUpdated(
+      const viz::CompositorFrameMetadata& frame_metadata,
+      bool is_transparent);
 
   void ShowInternal();
   void HideInternal();
diff --git a/content/browser/renderer_host/render_widget_host_view_aura.cc b/content/browser/renderer_host/render_widget_host_view_aura.cc
index 5c9776c..8da9863 100644
--- a/content/browser/renderer_host/render_widget_host_view_aura.cc
+++ b/content/browser/renderer_host/render_widget_host_view_aura.cc
@@ -913,7 +913,7 @@
 
 void RenderWidgetHostViewAura::SubmitCompositorFrame(
     const viz::LocalSurfaceId& local_surface_id,
-    cc::CompositorFrame frame) {
+    viz::CompositorFrame frame) {
   TRACE_EVENT0("content", "RenderWidgetHostViewAura::OnSwapCompositorFrame");
 
   // Override the background color to the current compositor background.
diff --git a/content/browser/renderer_host/render_widget_host_view_aura.h b/content/browser/renderer_host/render_widget_host_view_aura.h
index 3c130049..df01ab2 100644
--- a/content/browser/renderer_host/render_widget_host_view_aura.h
+++ b/content/browser/renderer_host/render_widget_host_view_aura.h
@@ -174,7 +174,7 @@
       viz::mojom::CompositorFrameSinkClient* renderer_compositor_frame_sink)
       override;
   void SubmitCompositorFrame(const viz::LocalSurfaceId& local_surface_id,
-                             cc::CompositorFrame frame) override;
+                             viz::CompositorFrame frame) override;
   void OnDidNotProduceFrame(const viz::BeginFrameAck& ack) override;
   void ClearCompositorFrame() override;
   void DidStopFlinging() override;
diff --git a/content/browser/renderer_host/render_widget_host_view_aura_unittest.cc b/content/browser/renderer_host/render_widget_host_view_aura_unittest.cc
index f8def17..eddc1f3 100644
--- a/content/browser/renderer_host/render_widget_host_view_aura_unittest.cc
+++ b/content/browser/renderer_host/render_widget_host_view_aura_unittest.cc
@@ -23,10 +23,10 @@
 #include "base/test/simple_test_tick_clock.h"
 #include "base/threading/thread_task_runner_handle.h"
 #include "build/build_config.h"
-#include "cc/output/compositor_frame.h"
-#include "cc/output/compositor_frame_metadata.h"
 #include "components/viz/common/frame_sinks/begin_frame_args.h"
 #include "components/viz/common/gl_helper.h"
+#include "components/viz/common/quads/compositor_frame.h"
+#include "components/viz/common/quads/compositor_frame_metadata.h"
 #include "components/viz/common/quads/copy_output_request.h"
 #include "components/viz/common/surfaces/local_surface_id_allocator.h"
 #include "components/viz/service/display_embedder/server_shared_bitmap_manager.h"
@@ -2428,10 +2428,10 @@
   EXPECT_EQ(0, cursor_client.calls_to_set_cursor());
 }
 
-cc::CompositorFrame MakeDelegatedFrame(float scale_factor,
-                                       gfx::Size size,
-                                       gfx::Rect damage) {
-  cc::CompositorFrame frame;
+viz::CompositorFrame MakeDelegatedFrame(float scale_factor,
+                                        gfx::Size size,
+                                        gfx::Rect damage) {
+  viz::CompositorFrame frame;
   frame.metadata.device_scale_factor = scale_factor;
   frame.metadata.begin_frame_ack = viz::BeginFrameAck(0, 1, true);
 
@@ -2495,7 +2495,7 @@
   sink_->ClearMessages();
 
   // Submit a frame with resources.
-  cc::CompositorFrame frame = MakeDelegatedFrame(1.f, view_size, view_rect);
+  viz::CompositorFrame frame = MakeDelegatedFrame(1.f, view_size, view_rect);
   viz::TransferableResource resource;
   resource.id = 1;
   frame.resource_list.push_back(resource);
@@ -2629,7 +2629,7 @@
       gfx::Rect());
   view_->SetSize(large_size);
   view_->Show();
-  cc::CompositorFrame frame =
+  viz::CompositorFrame frame =
       MakeDelegatedFrame(1.f, small_size, gfx::Rect(small_size));
   frame.metadata.root_background_color = SK_ColorRED;
   view_->SubmitCompositorFrame(small_id, std::move(frame));
@@ -3453,7 +3453,7 @@
   {
     // Ack from CompositorFrame is forwarded.
     viz::BeginFrameAck ack(source_id, 5, true);
-    cc::CompositorFrame frame = MakeDelegatedFrame(1.f, frame_size, view_rect);
+    viz::CompositorFrame frame = MakeDelegatedFrame(1.f, frame_size, view_rect);
     frame.metadata.begin_frame_ack = ack;
     view_->SubmitCompositorFrame(local_surface_id, std::move(frame));
     view_->RunOnCompositingDidCommit();
diff --git a/content/browser/renderer_host/render_widget_host_view_base.h b/content/browser/renderer_host/render_widget_host_view_base.h
index faec1e5..e259ebeb 100644
--- a/content/browser/renderer_host/render_widget_host_view_base.h
+++ b/content/browser/renderer_host/render_widget_host_view_base.h
@@ -18,7 +18,7 @@
 #include "base/process/kill.h"
 #include "base/strings/string16.h"
 #include "build/build_config.h"
-#include "cc/output/compositor_frame.h"
+#include "components/viz/common/quads/compositor_frame.h"
 #include "components/viz/common/surfaces/surface_id.h"
 #include "content/browser/renderer_host/event_with_latency_info.h"
 #include "content/common/content_export.h"
@@ -232,7 +232,7 @@
 
   virtual void SubmitCompositorFrame(
       const viz::LocalSurfaceId& local_surface_id,
-      cc::CompositorFrame frame) = 0;
+      viz::CompositorFrame frame) = 0;
 
   virtual void OnDidNotProduceFrame(const viz::BeginFrameAck& ack) {}
   virtual void OnFirstSurfaceActivation(const viz::SurfaceInfo& surface_info) {}
diff --git a/content/browser/renderer_host/render_widget_host_view_child_frame.cc b/content/browser/renderer_host/render_widget_host_view_child_frame.cc
index 75841f7d..d804f197 100644
--- a/content/browser/renderer_host/render_widget_host_view_child_frame.cc
+++ b/content/browser/renderer_host/render_widget_host_view_child_frame.cc
@@ -511,7 +511,7 @@
 
 void RenderWidgetHostViewChildFrame::ProcessCompositorFrame(
     const viz::LocalSurfaceId& local_surface_id,
-    cc::CompositorFrame frame) {
+    viz::CompositorFrame frame) {
   current_surface_size_ = frame.size_in_pixels();
   current_surface_scale_factor_ = frame.device_scale_factor();
 
@@ -562,7 +562,7 @@
 
 void RenderWidgetHostViewChildFrame::SubmitCompositorFrame(
     const viz::LocalSurfaceId& local_surface_id,
-    cc::CompositorFrame frame) {
+    viz::CompositorFrame frame) {
   TRACE_EVENT0("content",
                "RenderWidgetHostViewChildFrame::OnSwapCompositorFrame");
   last_scroll_offset_ = frame.metadata.root_scroll_offset;
diff --git a/content/browser/renderer_host/render_widget_host_view_child_frame.h b/content/browser/renderer_host/render_widget_host_view_child_frame.h
index 324d3903..1f899e9 100644
--- a/content/browser/renderer_host/render_widget_host_view_child_frame.h
+++ b/content/browser/renderer_host/render_widget_host_view_child_frame.h
@@ -119,7 +119,7 @@
       viz::mojom::CompositorFrameSinkClient* renderer_compositor_frame_sink)
       override;
   void SubmitCompositorFrame(const viz::LocalSurfaceId& local_surface_id,
-                             cc::CompositorFrame frame) override;
+                             viz::CompositorFrame frame) override;
   void OnDidNotProduceFrame(const viz::BeginFrameAck& ack) override;
   // Since the URL of content rendered by this class is not displayed in
   // the URL bar, this method does not need an implementation.
@@ -230,7 +230,7 @@
   void SetParentFrameSinkId(const viz::FrameSinkId& parent_frame_sink_id);
 
   void ProcessCompositorFrame(const viz::LocalSurfaceId& local_surface_id,
-                              cc::CompositorFrame frame);
+                              viz::CompositorFrame frame);
 
   void SendSurfaceInfoToEmbedder();
 
diff --git a/content/browser/renderer_host/render_widget_host_view_child_frame_unittest.cc b/content/browser/renderer_host/render_widget_host_view_child_frame_unittest.cc
index d824432b..ad2f2622 100644
--- a/content/browser/renderer_host/render_widget_host_view_child_frame_unittest.cc
+++ b/content/browser/renderer_host/render_widget_host_view_child_frame_unittest.cc
@@ -156,10 +156,10 @@
   DISALLOW_COPY_AND_ASSIGN(RenderWidgetHostViewChildFrameTest);
 };
 
-cc::CompositorFrame CreateDelegatedFrame(float scale_factor,
-                                         gfx::Size size,
-                                         const gfx::Rect& damage) {
-  cc::CompositorFrame frame;
+viz::CompositorFrame CreateDelegatedFrame(float scale_factor,
+                                          gfx::Size size,
+                                          const gfx::Rect& damage) {
+  viz::CompositorFrame frame;
   frame.metadata.device_scale_factor = scale_factor;
   frame.metadata.begin_frame_ack = viz::BeginFrameAck(0, 1, true);
 
diff --git a/content/browser/renderer_host/render_widget_host_view_mac.h b/content/browser/renderer_host/render_widget_host_view_mac.h
index 72664cd..5ec3c06 100644
--- a/content/browser/renderer_host/render_widget_host_view_mac.h
+++ b/content/browser/renderer_host/render_widget_host_view_mac.h
@@ -330,7 +330,7 @@
       viz::mojom::CompositorFrameSinkClient* renderer_compositor_frame_sink)
       override;
   void SubmitCompositorFrame(const viz::LocalSurfaceId& local_surface_id,
-                             cc::CompositorFrame frame) override;
+                             viz::CompositorFrame frame) override;
   void OnDidNotProduceFrame(const viz::BeginFrameAck& ack) override;
   void ClearCompositorFrame() override;
   BrowserAccessibilityManager* CreateBrowserAccessibilityManager(
diff --git a/content/browser/renderer_host/render_widget_host_view_mac.mm b/content/browser/renderer_host/render_widget_host_view_mac.mm
index 09ddcbf10..98ebe86c 100644
--- a/content/browser/renderer_host/render_widget_host_view_mac.mm
+++ b/content/browser/renderer_host/render_widget_host_view_mac.mm
@@ -1426,7 +1426,7 @@
 
 void RenderWidgetHostViewMac::SubmitCompositorFrame(
     const viz::LocalSurfaceId& local_surface_id,
-    cc::CompositorFrame frame) {
+    viz::CompositorFrame frame) {
   TRACE_EVENT0("browser", "RenderWidgetHostViewMac::OnSwapCompositorFrame");
 
   last_frame_root_background_color_ = frame.metadata.root_background_color;
diff --git a/content/child/blink_platform_impl.cc b/content/child/blink_platform_impl.cc
index 33d93604..3d59b28 100644
--- a/content/child/blink_platform_impl.cc
+++ b/content/child/blink_platform_impl.cc
@@ -559,7 +559,7 @@
     {"svg.css", IDR_UASTYLE_SVG_CSS, ui::SCALE_FACTOR_NONE, true},
     {"mathml.css", IDR_UASTYLE_MATHML_CSS, ui::SCALE_FACTOR_NONE, true},
     {"mediaControls.css", IDR_UASTYLE_MEDIA_CONTROLS_CSS, ui::SCALE_FACTOR_NONE,
-     true},
+     false},
     {"fullscreen.css", IDR_UASTYLE_FULLSCREEN_CSS, ui::SCALE_FACTOR_NONE, true},
     {"xhtmlmp.css", IDR_UASTYLE_XHTMLMP_CSS, ui::SCALE_FACTOR_NONE, true},
     {"viewportAndroid.css", IDR_UASTYLE_VIEWPORT_ANDROID_CSS,
diff --git a/content/common/BUILD.gn b/content/common/BUILD.gn
index c2ba47f0..78cbed9 100644
--- a/content/common/BUILD.gn
+++ b/content/common/BUILD.gn
@@ -604,7 +604,11 @@
   }
 
   if (is_fuchsia) {
-    sources += [ "font_list_fuchsia.cc" ]
+    sources += [
+      "font_list_fuchsia.cc",
+      "sandbox_policy_fuchsia.cc",
+      "sandbox_policy_fuchsia.h",
+    ]
   }
 }
 
diff --git a/content/common/android/sync_compositor_messages.h b/content/common/android/sync_compositor_messages.h
index e692af0..2367f72 100644
--- a/content/common/android/sync_compositor_messages.h
+++ b/content/common/android/sync_compositor_messages.h
@@ -9,8 +9,8 @@
 
 #include "base/memory/shared_memory_handle.h"
 #include "base/optional.h"
-#include "cc/output/compositor_frame.h"
 #include "components/viz/common/frame_sinks/begin_frame_args.h"
+#include "components/viz/common/quads/compositor_frame.h"
 #include "content/common/content_export.h"
 #include "content/common/content_param_traits.h"
 #include "content/common/input/input_event_ack_state.h"
@@ -133,7 +133,7 @@
                            content::SyncCompositorDemandDrawHwParams,
                            content::SyncCompositorCommonRendererParams,
                            uint32_t /* layer_tree_frame_sink_id */,
-                           base::Optional<cc::CompositorFrame>);
+                           base::Optional<viz::CompositorFrame>);
 
 IPC_SYNC_MESSAGE_ROUTED1_2(SyncCompositorMsg_SetSharedMemory,
                            content::SyncCompositorSetSharedMemoryParams,
@@ -145,7 +145,7 @@
 IPC_SYNC_MESSAGE_ROUTED1_2(SyncCompositorMsg_DemandDrawSw,
                            content::SyncCompositorDemandDrawSwParams,
                            content::SyncCompositorCommonRendererParams,
-                           base::Optional<cc::CompositorFrameMetadata>)
+                           base::Optional<viz::CompositorFrameMetadata>)
 
 IPC_SYNC_MESSAGE_ROUTED2_1(SyncCompositorMsg_ZoomBy,
                            float /* delta */,
@@ -171,6 +171,6 @@
 
 IPC_MESSAGE_ROUTED2(SyncCompositorHostMsg_ReturnFrame,
                     uint32_t /* layer_tree_frame_sink_id */,
-                    base::Optional<cc::CompositorFrame>);
+                    base::Optional<viz::CompositorFrame>);
 
 #endif  // CONTENT_COMMON_ANDROID_SYNC_COMPOSITOR_MESSAGES_H_
diff --git a/content/common/render_widget_surface_properties.cc b/content/common/render_widget_surface_properties.cc
index 254da958..3650911 100644
--- a/content/common/render_widget_surface_properties.cc
+++ b/content/common/render_widget_surface_properties.cc
@@ -9,7 +9,7 @@
 // static
 RenderWidgetSurfaceProperties
 RenderWidgetSurfaceProperties::FromCompositorFrame(
-    const cc::CompositorFrame& frame) {
+    const viz::CompositorFrame& frame) {
   RenderWidgetSurfaceProperties properties;
   properties.size = frame.size_in_pixels();
   properties.device_scale_factor = frame.device_scale_factor();
diff --git a/content/common/render_widget_surface_properties.h b/content/common/render_widget_surface_properties.h
index 4fcbd9e..f35294d 100644
--- a/content/common/render_widget_surface_properties.h
+++ b/content/common/render_widget_surface_properties.h
@@ -5,7 +5,7 @@
 #ifndef CONTENT_COMMON_RENDER_WIDGET_SURFACE_PROPERTIES_H_
 #define CONTENT_COMMON_RENDER_WIDGET_SURFACE_PROPERTIES_H_
 
-#include "cc/output/compositor_frame.h"
+#include "components/viz/common/quads/compositor_frame.h"
 #include "content/common/content_export.h"
 
 namespace content {
@@ -14,7 +14,7 @@
 // CompositorFrames that the renderer submits to the same surface.
 struct CONTENT_EXPORT RenderWidgetSurfaceProperties {
   static RenderWidgetSurfaceProperties FromCompositorFrame(
-      const cc::CompositorFrame& frame);
+      const viz::CompositorFrame& frame);
 
   RenderWidgetSurfaceProperties();
   RenderWidgetSurfaceProperties(const RenderWidgetSurfaceProperties& other);
@@ -33,7 +33,7 @@
   float top_controls_shown_ratio = 0;
   float bottom_controls_height = 0;
   float bottom_controls_shown_ratio = 0;
-  cc::Selection<gfx::SelectionBound> selection;
+  viz::Selection<gfx::SelectionBound> selection;
   bool has_transparent_background = false;
 #endif
 };
diff --git a/content/common/sandbox_policy_fuchsia.cc b/content/common/sandbox_policy_fuchsia.cc
new file mode 100644
index 0000000..fedcbc9
--- /dev/null
+++ b/content/common/sandbox_policy_fuchsia.cc
@@ -0,0 +1,30 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "content/common/sandbox_policy_fuchsia.h"
+
+#include <launchpad/launchpad.h>
+#include <zircon/processargs.h>
+
+#include "base/command_line.h"
+#include "base/process/launch.h"
+#include "content/public/common/content_switches.h"
+
+namespace content {
+
+void UpdateLaunchOptionsForSandbox(content::SandboxType type,
+                                   base::LaunchOptions* options) {
+  if (base::CommandLine::ForCurrentProcess()->HasSwitch(switches::kNoSandbox)) {
+    type = SANDBOX_TYPE_NO_SANDBOX;
+  }
+
+  if (type != SANDBOX_TYPE_NO_SANDBOX) {
+    options->clone_flags = LP_CLONE_FDIO_STDIO;
+  } else {
+    options->clone_flags = LP_CLONE_FDIO_NAMESPACE | LP_CLONE_DEFAULT_JOB |
+                           LP_CLONE_FDIO_CWD | LP_CLONE_FDIO_STDIO;
+  }
+}
+
+}  // namespace content
diff --git a/content/common/sandbox_policy_fuchsia.h b/content/common/sandbox_policy_fuchsia.h
new file mode 100644
index 0000000..1207856
--- /dev/null
+++ b/content/common/sandbox_policy_fuchsia.h
@@ -0,0 +1,25 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CONTENT_COMMON_SANDBOX_POLICY_FUCHSIA_H_
+#define CONTENT_COMMON_SANDBOX_POLICY_FUCHSIA_H_
+
+#include "content/public/common/sandbox_type.h"
+
+namespace base {
+struct LaunchOptions;
+}  // namespace base
+
+namespace content {
+
+// Modifies the process launch |options| to achieve the level of isolation
+// appropriate for the sandbox |type|. The caller may then add any
+// descriptors or handles afterward to grant additional capabiltiies to the new
+// process.
+void UpdateLaunchOptionsForSandbox(content::SandboxType type,
+                                   base::LaunchOptions* options);
+
+}  // namespace content
+
+#endif  // CONTENT_COMMON_SANDBOX_POLICY_FUCHSIA_H_
diff --git a/content/common/view_messages.h b/content/common/view_messages.h
index 5fa19a1..ad536d4 100644
--- a/content/common/view_messages.h
+++ b/content/common/view_messages.h
@@ -15,8 +15,8 @@
 #include "base/strings/string16.h"
 #include "build/build_config.h"
 #include "cc/ipc/cc_param_traits.h"
-#include "cc/output/compositor_frame.h"
 #include "components/viz/common/frame_sinks/begin_frame_args.h"
+#include "components/viz/common/quads/compositor_frame.h"
 #include "components/viz/common/quads/shared_bitmap.h"
 #include "content/common/content_export.h"
 #include "content/common/content_param_traits.h"
diff --git a/content/public/browser/android/synchronous_compositor.cc b/content/public/browser/android/synchronous_compositor.cc
index 76c820d5..2d7e555e 100644
--- a/content/public/browser/android/synchronous_compositor.cc
+++ b/content/public/browser/android/synchronous_compositor.cc
@@ -7,7 +7,7 @@
 #include <utility>
 
 #include "base/threading/thread_restrictions.h"
-#include "cc/output/compositor_frame.h"
+#include "components/viz/common/quads/compositor_frame.h"
 
 namespace content {
 
diff --git a/content/public/browser/android/synchronous_compositor.h b/content/public/browser/android/synchronous_compositor.h
index 76497f96..5b795163 100644
--- a/content/public/browser/android/synchronous_compositor.h
+++ b/content/public/browser/android/synchronous_compositor.h
@@ -19,18 +19,17 @@
 
 class SkCanvas;
 
-namespace cc {
-class CompositorFrame;
-}
-
 namespace gfx {
 class Point;
 class ScrollOffset;
 class Transform;
-};
+}  // namespace gfx
+
+namespace viz {
+class CompositorFrame;
+}
 
 namespace content {
-
 class SynchronousCompositorClient;
 class WebContents;
 
@@ -53,7 +52,7 @@
     Frame& operator=(Frame&& rhs);
 
     uint32_t layer_tree_frame_sink_id;
-    std::unique_ptr<cc::CompositorFrame> frame;
+    std::unique_ptr<viz::CompositorFrame> frame;
 
    private:
     DISALLOW_COPY_AND_ASSIGN(Frame);
diff --git a/content/public/test/DEPS b/content/public/test/DEPS
index a093d9c..18c7e4b 100644
--- a/content/public/test/DEPS
+++ b/content/public/test/DEPS
@@ -1,6 +1,7 @@
 include_rules = [
   "-content",
   "+content/public",
+  "+components/viz/common",
   "+components/viz/service",
   "+device/geolocation/android/geolocation_jni_registrar.h",
   "+mojo/android/system/mojo_jni_registrar.h",
diff --git a/content/public/test/browser_test_utils.cc b/content/public/test/browser_test_utils.cc
index d76493bc..dabfd33 100644
--- a/content/public/test/browser_test_utils.cc
+++ b/content/public/test/browser_test_utils.cc
@@ -1754,7 +1754,7 @@
   run_loop.Run();
 }
 
-const cc::CompositorFrameMetadata& FrameWatcher::LastMetadata() {
+const viz::CompositorFrameMetadata& FrameWatcher::LastMetadata() {
   return RenderWidgetHostImpl::From(
              web_contents()->GetRenderViewHost()->GetWidget())
       ->last_frame_metadata();
diff --git a/content/public/test/browser_test_utils.h b/content/public/test/browser_test_utils.h
index 68cf1a9..ce5d4c55 100644
--- a/content/public/test/browser_test_utils.h
+++ b/content/public/test/browser_test_utils.h
@@ -19,7 +19,7 @@
 #include "base/run_loop.h"
 #include "base/strings/string16.h"
 #include "build/build_config.h"
-#include "cc/output/compositor_frame.h"
+#include "components/viz/common/quads/compositor_frame.h"
 #include "content/public/browser/browser_message_filter.h"
 #include "content/public/browser/notification_observer.h"
 #include "content/public/browser/notification_registrar.h"
@@ -652,7 +652,7 @@
   void WaitFrames(int frames_to_wait);
 
   // Return the last received CompositorFrame's metadata.
-  const cc::CompositorFrameMetadata& LastMetadata();
+  const viz::CompositorFrameMetadata& LastMetadata();
 
   // Call this method to start observing a WebContents for CompositorFrames.
   using WebContentsObserver::Observe;
diff --git a/content/public/test/test_synchronous_compositor_android.cc b/content/public/test/test_synchronous_compositor_android.cc
index 9deb781f..51b091e 100644
--- a/content/public/test/test_synchronous_compositor_android.cc
+++ b/content/public/test/test_synchronous_compositor_android.cc
@@ -6,7 +6,7 @@
 
 #include <utility>
 
-#include "cc/output/compositor_frame.h"
+#include "components/viz/common/quads/compositor_frame.h"
 
 namespace content {
 
@@ -62,7 +62,7 @@
 
 void TestSynchronousCompositor::SetHardwareFrame(
     uint32_t layer_tree_frame_sink_id,
-    std::unique_ptr<cc::CompositorFrame> frame) {
+    std::unique_ptr<viz::CompositorFrame> frame) {
   hardware_frame_.layer_tree_frame_sink_id = layer_tree_frame_sink_id;
   hardware_frame_.frame = std::move(frame);
 }
diff --git a/content/public/test/test_synchronous_compositor_android.h b/content/public/test/test_synchronous_compositor_android.h
index 519e59f..cd57123 100644
--- a/content/public/test/test_synchronous_compositor_android.h
+++ b/content/public/test/test_synchronous_compositor_android.h
@@ -44,7 +44,7 @@
   void OnComputeScroll(base::TimeTicks animate_time) override {}
 
   void SetHardwareFrame(uint32_t layer_tree_frame_sink_id,
-                        std::unique_ptr<cc::CompositorFrame> frame);
+                        std::unique_ptr<viz::CompositorFrame> frame);
 
   struct ReturnedResources {
     ReturnedResources();
diff --git a/content/renderer/android/synchronous_compositor_proxy.cc b/content/renderer/android/synchronous_compositor_proxy.cc
index 091ec0f..d03e827 100644
--- a/content/renderer/android/synchronous_compositor_proxy.cc
+++ b/content/renderer/android/synchronous_compositor_proxy.cc
@@ -198,7 +198,7 @@
 
 void SynchronousCompositorProxy::SubmitCompositorFrameHwAsync(
     uint32_t layer_tree_frame_sink_id,
-    cc::CompositorFrame frame) {
+    viz::CompositorFrame frame) {
   DCHECK(inside_receive_);
   DCHECK(hardware_draw_reply_async_);
   SendDemandDrawHwReplyAsync(std::move(frame), layer_tree_frame_sink_id);
@@ -207,7 +207,7 @@
 
 void SynchronousCompositorProxy::SubmitCompositorFrameHw(
     uint32_t layer_tree_frame_sink_id,
-    cc::CompositorFrame frame) {
+    viz::CompositorFrame frame) {
   DCHECK(inside_receive_);
   DCHECK(hardware_draw_reply_);
   SendDemandDrawHwReply(std::move(frame), layer_tree_frame_sink_id,
@@ -216,14 +216,14 @@
 }
 
 void SynchronousCompositorProxy::SendDemandDrawHwReplyAsync(
-    base::Optional<cc::CompositorFrame> frame,
+    base::Optional<viz::CompositorFrame> frame,
     uint32_t layer_tree_frame_sink_id) {
   Send(new SyncCompositorHostMsg_ReturnFrame(routing_id_,
                                              layer_tree_frame_sink_id, frame));
 }
 
 void SynchronousCompositorProxy::SendDemandDrawHwReply(
-    base::Optional<cc::CompositorFrame> frame,
+    base::Optional<viz::CompositorFrame> frame,
     uint32_t layer_tree_frame_sink_id,
     IPC::Message* reply_message) {
   SyncCompositorCommonRendererParams common_renderer_params;
@@ -320,7 +320,7 @@
 }
 
 void SynchronousCompositorProxy::SubmitCompositorFrameSw(
-    cc::CompositorFrame frame) {
+    viz::CompositorFrame frame) {
   DCHECK(inside_receive_);
   DCHECK(software_draw_reply_);
   SendDemandDrawSwReply(std::move(frame.metadata), software_draw_reply_);
@@ -328,7 +328,7 @@
 }
 
 void SynchronousCompositorProxy::SendDemandDrawSwReply(
-    base::Optional<cc::CompositorFrameMetadata> metadata,
+    base::Optional<viz::CompositorFrameMetadata> metadata,
     IPC::Message* reply_message) {
   SyncCompositorCommonRendererParams common_renderer_params;
   PopulateCommonParams(&common_renderer_params);
@@ -339,7 +339,7 @@
 
 void SynchronousCompositorProxy::SubmitCompositorFrame(
     uint32_t layer_tree_frame_sink_id,
-    cc::CompositorFrame frame) {
+    viz::CompositorFrame frame) {
   // Verify that exactly one of these is true.
   DCHECK(hardware_draw_reply_async_ || hardware_draw_reply_ ||
          software_draw_reply_);
diff --git a/content/renderer/android/synchronous_compositor_proxy.h b/content/renderer/android/synchronous_compositor_proxy.h
index 2036a5af..6e2c123 100644
--- a/content/renderer/android/synchronous_compositor_proxy.h
+++ b/content/renderer/android/synchronous_compositor_proxy.h
@@ -21,7 +21,7 @@
 class Sender;
 }  // namespace IPC
 
-namespace cc {
+namespace viz {
 class CompositorFrame;
 }  // namespace cc
 
@@ -55,7 +55,7 @@
   void DidActivatePendingTree() override;
   void Invalidate() override;
   void SubmitCompositorFrame(uint32_t layer_tree_frame_sink_id,
-                             cc::CompositorFrame frame) override;
+                             viz::CompositorFrame frame) override;
 
   void SetLayerTreeFrameSink(
       SynchronousLayerTreeFrameSink* layer_tree_frame_sink);
@@ -85,18 +85,18 @@
   void SetScroll(const gfx::ScrollOffset& total_scroll_offset);
 
   void SubmitCompositorFrameHwAsync(uint32_t layer_tree_frame_sink_id,
-                                    cc::CompositorFrame frame);
+                                    viz::CompositorFrame frame);
   void SubmitCompositorFrameHw(uint32_t layer_tree_frame_sink_id,
-                               cc::CompositorFrame frame);
-  void SendDemandDrawHwReply(base::Optional<cc::CompositorFrame> frame,
+                               viz::CompositorFrame frame);
+  void SendDemandDrawHwReply(base::Optional<viz::CompositorFrame> frame,
                              uint32_t layer_tree_frame_sink_id,
                              IPC::Message* reply_message);
-  void SendDemandDrawHwReplyAsync(base::Optional<cc::CompositorFrame> frame,
+  void SendDemandDrawHwReplyAsync(base::Optional<viz::CompositorFrame> frame,
                                   uint32_t layer_tree_frame_sink_id);
   void DoDemandDrawSw(const SyncCompositorDemandDrawSwParams& params);
-  void SubmitCompositorFrameSw(cc::CompositorFrame frame);
+  void SubmitCompositorFrameSw(viz::CompositorFrame frame);
   void SendDemandDrawSwReply(
-      base::Optional<cc::CompositorFrameMetadata> metadata,
+      base::Optional<viz::CompositorFrameMetadata> metadata,
       IPC::Message* reply_message);
   void SendAsyncRendererStateIfNeeded();
   void DoDemandDrawHw(const SyncCompositorDemandDrawHwParams& params,
diff --git a/content/renderer/android/synchronous_layer_tree_frame_sink.cc b/content/renderer/android/synchronous_layer_tree_frame_sink.cc
index f1052dfe..742d80f 100644
--- a/content/renderer/android/synchronous_layer_tree_frame_sink.cc
+++ b/content/renderer/android/synchronous_layer_tree_frame_sink.cc
@@ -13,10 +13,10 @@
 #include "base/memory/ptr_util.h"
 #include "base/single_thread_task_runner.h"
 #include "base/threading/thread_task_runner_handle.h"
-#include "cc/output/compositor_frame.h"
 #include "cc/trees/layer_tree_frame_sink_client.h"
 #include "components/viz/common/display/renderer_settings.h"
 #include "components/viz/common/gpu/context_provider.h"
+#include "components/viz/common/quads/compositor_frame.h"
 #include "components/viz/common/quads/render_pass.h"
 #include "components/viz/common/quads/surface_draw_quad.h"
 #include "components/viz/common/surfaces/local_surface_id_allocator.h"
@@ -229,7 +229,7 @@
 }
 
 void SynchronousLayerTreeFrameSink::SubmitCompositorFrame(
-    cc::CompositorFrame frame) {
+    viz::CompositorFrame frame) {
   DCHECK(CalledOnValidThread());
   DCHECK(sync_client_);
 
@@ -241,7 +241,7 @@
     return;
   }
 
-  cc::CompositorFrame submit_frame;
+  viz::CompositorFrame submit_frame;
 
   if (in_software_draw_) {
     // The frame we send to the client is actually just the metadata. Preserve
@@ -287,7 +287,7 @@
     // TODO(danakj): We could apply the transform here instead of passing it to
     // the LayerTreeFrameSink client too? (We'd have to do the same for
     // hardware frames in SurfacesInstance?)
-    cc::CompositorFrame embed_frame;
+    viz::CompositorFrame embed_frame;
     embed_frame.metadata.begin_frame_ack = frame.metadata.begin_frame_ack;
     embed_frame.metadata.device_scale_factor =
         frame.metadata.device_scale_factor;
diff --git a/content/renderer/android/synchronous_layer_tree_frame_sink.h b/content/renderer/android/synchronous_layer_tree_frame_sink.h
index b350182..acfb959 100644
--- a/content/renderer/android/synchronous_layer_tree_frame_sink.h
+++ b/content/renderer/android/synchronous_layer_tree_frame_sink.h
@@ -15,9 +15,9 @@
 #include "base/macros.h"
 #include "base/memory/ref_counted.h"
 #include "base/threading/thread_checker.h"
-#include "cc/output/compositor_frame.h"
 #include "cc/trees/layer_tree_frame_sink.h"
 #include "cc/trees/managed_memory_policy.h"
+#include "components/viz/common/quads/compositor_frame.h"
 #include "components/viz/service/display/display_client.h"
 #include "ipc/ipc_message.h"
 #include "services/viz/public/interfaces/compositing/compositor_frame_sink.mojom.h"
@@ -49,7 +49,7 @@
   virtual void DidActivatePendingTree() = 0;
   virtual void Invalidate() = 0;
   virtual void SubmitCompositorFrame(uint32_t layer_tree_frame_sink_id,
-                                     cc::CompositorFrame frame) = 0;
+                                     viz::CompositorFrame frame) = 0;
 
  protected:
   virtual ~SynchronousLayerTreeFrameSinkClient() {}
@@ -85,7 +85,7 @@
   // cc::LayerTreeFrameSink implementation.
   bool BindToClient(cc::LayerTreeFrameSinkClient* sink_client) override;
   void DetachFromClient() override;
-  void SubmitCompositorFrame(cc::CompositorFrame frame) override;
+  void SubmitCompositorFrame(viz::CompositorFrame frame) override;
   void DidNotProduceFrame(const viz::BeginFrameAck& ack) override;
   void Invalidate() override;
 
diff --git a/content/renderer/gpu/queue_message_swap_promise.cc b/content/renderer/gpu/queue_message_swap_promise.cc
index ad4b91e..4d4fa13 100644
--- a/content/renderer/gpu/queue_message_swap_promise.cc
+++ b/content/renderer/gpu/queue_message_swap_promise.cc
@@ -44,7 +44,7 @@
   // The OutputSurface will take care of the Drain+Send.
 }
 
-void QueueMessageSwapPromise::WillSwap(cc::CompositorFrameMetadata* metadata) {
+void QueueMessageSwapPromise::WillSwap(viz::CompositorFrameMetadata* metadata) {
 #if DCHECK_IS_ON()
   DCHECK(!completed_);
 #endif
diff --git a/content/renderer/gpu/queue_message_swap_promise.h b/content/renderer/gpu/queue_message_swap_promise.h
index abd55c50..f888f2f 100644
--- a/content/renderer/gpu/queue_message_swap_promise.h
+++ b/content/renderer/gpu/queue_message_swap_promise.h
@@ -27,7 +27,7 @@
   ~QueueMessageSwapPromise() override;
 
   void DidActivate() override;
-  void WillSwap(cc::CompositorFrameMetadata* metadata) override;
+  void WillSwap(viz::CompositorFrameMetadata* metadata) override;
   void DidSwap() override;
   DidNotSwapAction DidNotSwap(DidNotSwapReason reason) override;
 
diff --git a/content/renderer/gpu/queue_message_swap_promise_unittest.cc b/content/renderer/gpu/queue_message_swap_promise_unittest.cc
index f2c9ebc..d61780b8 100644
--- a/content/renderer/gpu/queue_message_swap_promise_unittest.cc
+++ b/content/renderer/gpu/queue_message_swap_promise_unittest.cc
@@ -160,7 +160,7 @@
   scoped_refptr<TestSyncMessageFilter> sync_message_filter_;
   std::vector<IPC::Message> messages_;
   std::vector<std::unique_ptr<cc::SwapPromise>> promises_;
-  cc::CompositorFrameMetadata dummy_metadata_;
+  viz::CompositorFrameMetadata dummy_metadata_;
 
  private:
   std::vector<std::unique_ptr<IPC::Message>> next_swap_messages_;
diff --git a/content/renderer/gpu/render_widget_compositor.cc b/content/renderer/gpu/render_widget_compositor.cc
index fbd0f388..15b5d57 100644
--- a/content/renderer/gpu/render_widget_compositor.cc
+++ b/content/renderer/gpu/render_widget_compositor.cc
@@ -112,7 +112,7 @@
   ~ReportTimeSwapPromise() override;
 
   void DidActivate() override {}
-  void WillSwap(cc::CompositorFrameMetadata* metadata) override {}
+  void WillSwap(viz::CompositorFrameMetadata* metadata) override {}
   void DidSwap() override;
   DidNotSwapAction DidNotSwap(DidNotSwapReason reason) override;
 
diff --git a/content/renderer/render_thread_impl.cc b/content/renderer/render_thread_impl.cc
index 08eab73c..1f51cbf 100644
--- a/content/renderer/render_thread_impl.cc
+++ b/content/renderer/render_thread_impl.cc
@@ -427,7 +427,7 @@
 class RendererLocalSurfaceIdProvider : public viz::LocalSurfaceIdProvider {
  public:
   const viz::LocalSurfaceId& GetLocalSurfaceIdForFrame(
-      const cc::CompositorFrame& frame) override {
+      const viz::CompositorFrame& frame) override {
     auto new_surface_properties =
         RenderWidgetSurfaceProperties::FromCompositorFrame(frame);
     if (!local_surface_id_.is_valid() ||
diff --git a/content/renderer/render_view_impl.cc b/content/renderer/render_view_impl.cc
index 9e4eae8..b95c910 100644
--- a/content/renderer/render_view_impl.cc
+++ b/content/renderer/render_view_impl.cc
@@ -483,7 +483,7 @@
 
   void DidActivate() override {}
 
-  void WillSwap(cc::CompositorFrameMetadata* metadata) override {
+  void WillSwap(viz::CompositorFrameMetadata* metadata) override {
     DCHECK(!latency_info_.terminated());
     metadata->latency_info.push_back(latency_info_);
   }
diff --git a/content/renderer/renderer_main_platform_delegate_fuchsia.cc b/content/renderer/renderer_main_platform_delegate_fuchsia.cc
index 0be745ef5..376b47f 100644
--- a/content/renderer/renderer_main_platform_delegate_fuchsia.cc
+++ b/content/renderer/renderer_main_platform_delegate_fuchsia.cc
@@ -16,10 +16,7 @@
 void RendererMainPlatformDelegate::PlatformUninitialize() {}
 
 bool RendererMainPlatformDelegate::EnableSandbox() {
-  // TODO(fuchsia): Implement this for Fuchsia.
-  NOTREACHED() << "Sandbox support is currently unavailable. Run with "
-                  "--no-sandbox for now.";
-  return false;
+  return true;
 }
 
 }  // namespace content
diff --git a/content/shell/BUILD.gn b/content/shell/BUILD.gn
index 012838c..afe5698 100644
--- a/content/shell/BUILD.gn
+++ b/content/shell/BUILD.gn
@@ -827,17 +827,17 @@
   }
   if (is_posix && !is_android) {
     data_deps += [
-      "//breakpad:dump_syms($host_toolchain)",
-      "//breakpad:minidump_stackwalk($host_toolchain)",
+      "//third_party/breakpad:dump_syms($host_toolchain)",
+      "//third_party/breakpad:minidump_stackwalk($host_toolchain)",
     ]
   }
   if (is_android) {
     data_deps += [
-      "//breakpad:dump_syms",
-      "//breakpad:microdump_stackwalk",
-      "//breakpad:minidump_dump",
-      "//breakpad:minidump_stackwalk",
-      "//breakpad:symupload",
+      "//third_party/breakpad:dump_syms",
+      "//third_party/breakpad:microdump_stackwalk",
+      "//third_party/breakpad:minidump_dump",
+      "//third_party/breakpad:minidump_stackwalk",
+      "//third_party/breakpad:symupload",
       "//tools/android/forwarder2",
     ]
   }
diff --git a/content/test/data/device_sensors/device_orientation_test.html b/content/test/data/device_sensors/device_orientation_test.html
index 95c68f5..f28bffbc 100644
--- a/content/test/data/device_sensors/device_orientation_test.html
+++ b/content/test/data/device_sensors/device_orientation_test.html
@@ -2,13 +2,12 @@
   <head>
     <title>DeviceOrientation test</title>
     <script type="text/javascript">
-      var eventCount = 0;
-
       function checkOrientationEvent(event) {
         // Return true iff the orientation is close enough to (1, 2, 3).
         return Math.abs(event.alpha - 1) < 0.01 &&
                Math.abs(event.beta  - 2) < 0.01 &&
-               Math.abs(event.gamma - 3) < 0.01;
+               Math.abs(event.gamma - 3) < 0.01 &&
+               event.absolute == false;
       }
 
       function onOrientation(event) {
diff --git a/content/test/layouttest_support.cc b/content/test/layouttest_support.cc
index 2f58cd00..8727d98 100644
--- a/content/test/layouttest_support.cc
+++ b/content/test/layouttest_support.cc
@@ -308,7 +308,7 @@
     DCHECK(layer_tree_frame_sink_from_commit_);
   }
   void DidActivate() override {}
-  void WillSwap(cc::CompositorFrameMetadata*) override {
+  void WillSwap(viz::CompositorFrameMetadata*) override {
     layer_tree_frame_sink_from_commit_->RequestCopyOfOutput(
         std::move(copy_request_));
   }
@@ -419,7 +419,7 @@
   void DisplayReceivedLocalSurfaceId(
       const viz::LocalSurfaceId& local_surface_id) override {}
   void DisplayReceivedCompositorFrame(
-      const cc::CompositorFrame& frame) override {}
+      const viz::CompositorFrame& frame) override {}
   void DisplayWillDrawAndSwap(
       bool will_draw_and_swap,
       const viz::RenderPassList& render_passes) override {}
diff --git a/content/test/test_render_view_host.cc b/content/test/test_render_view_host.cc
index 20b84876..4b57bcc 100644
--- a/content/test/test_render_view_host.cc
+++ b/content/test/test_render_view_host.cc
@@ -207,7 +207,7 @@
 
 void TestRenderWidgetHostView::SubmitCompositorFrame(
     const viz::LocalSurfaceId& local_surface_id,
-    cc::CompositorFrame frame) {
+    viz::CompositorFrame frame) {
   did_swap_compositor_frame_ = true;
 }
 
diff --git a/content/test/test_render_view_host.h b/content/test/test_render_view_host.h
index 66c0710d..0cef417a 100644
--- a/content/test/test_render_view_host.h
+++ b/content/test/test_render_view_host.h
@@ -98,7 +98,7 @@
       viz::mojom::CompositorFrameSinkClient* renderer_compositor_frame_sink)
       override;
   void SubmitCompositorFrame(const viz::LocalSurfaceId& local_surface_id,
-                             cc::CompositorFrame frame) override;
+                             viz::CompositorFrame frame) override;
   void ClearCompositorFrame() override {}
   void SetNeedsBeginFrames(bool needs_begin_frames) override {}
 
diff --git a/docs/linux_crash_dumping.md b/docs/linux_crash_dumping.md
index 47533c9..8bc0aa8 100644
--- a/docs/linux_crash_dumping.md
+++ b/docs/linux_crash_dumping.md
@@ -11,8 +11,8 @@
 three platforms (Linux, Mac and Windows). For Linux, a substantial amount of
 work was required to support cross-process dumping. At the time of writing this
 code is currently forked from the upstream breakpad repo. While this situation
-remains, the forked code lives in `breakpad/linux`. The upstream repo is
-mirrored in `breakpad/src`.
+remains, the forked code lives in `third_party/breakpad/linux`. The upstream
+repo is mirrored in `third_party/breakpad/breakpad`.
 
 The code currently supports i386 only. Getting x86-64 to work should only be a
 minor amount of work.
@@ -22,13 +22,13 @@
 Breakpad deals in a file format called 'minidumps'. This is a Microsoft format
 and thus is defined by in-memory structures which are dumped, raw, to disk. The
 main header file for this file format is
-`breakpad/src/google_breakpad/common/minidump_format.h`.
+`third_party/breakpad/breakpad/src/google_breakpad/common/minidump_format.h`.
 
 At the top level, the minidump file format is a list of key-value pairs. Many of
 the keys are defined by the minidump format and contain cross-platform
 representations of stacks, threads etc. For Linux we also define a number of
 custom keys containing `/proc/cpuinfo`, `lsb-release` etc. These are defined in
-`breakpad/linux/minidump_format_linux.h`.
+`third_party/breakpad/breakpad/linux/minidump_format_linux.h`.
 
 ### Catching exceptions
 
diff --git a/ios/chrome/app/DEPS b/ios/chrome/app/DEPS
index e35b827..19695943 100644
--- a/ios/chrome/app/DEPS
+++ b/ios/chrome/app/DEPS
@@ -1,5 +1,4 @@
 include_rules = [
-  "+breakpad/src/client/ios",
   "+components/bookmarks/browser",
   "+components/bookmarks/test",
   "+components/browser_sync",
@@ -27,6 +26,7 @@
   "+ios/net",
   "+ios/public/provider/chrome",
   "+mojo/edk/embedder/embedder.h",
+  "+third_party/breakpad/breakpad/src/client/ios",
 
   # Strings and resources.
   "+components/grit",
diff --git a/ios/chrome/app/application_delegate/BUILD.gn b/ios/chrome/app/application_delegate/BUILD.gn
index 47dccef..f9f9ff8 100644
--- a/ios/chrome/app/application_delegate/BUILD.gn
+++ b/ios/chrome/app/application_delegate/BUILD.gn
@@ -34,7 +34,6 @@
     ":test_support",
     "//base",
     "//base/test:test_support",
-    "//breakpad:client",
     "//components/handoff",
     "//components/metrics",
     "//ios/chrome/app",
@@ -65,6 +64,7 @@
     "//ios/web/public/test",
     "//net:test_support",
     "//testing/gtest",
+    "//third_party/breakpad:client",
     "//third_party/ocmock",
     "//ui/base",
     "//url",
diff --git a/ios/chrome/app/application_delegate/metrics_mediator_unittest.mm b/ios/chrome/app/application_delegate/metrics_mediator_unittest.mm
index 8c03bd4c..a010802 100644
--- a/ios/chrome/app/application_delegate/metrics_mediator_unittest.mm
+++ b/ios/chrome/app/application_delegate/metrics_mediator_unittest.mm
@@ -8,7 +8,6 @@
 #import <Foundation/Foundation.h>
 
 #include "base/mac/scoped_block.h"
-#import "breakpad/src/client/ios/BreakpadController.h"
 #include "components/metrics/metrics_service.h"
 #import "ios/chrome/app/application_delegate/startup_information.h"
 #include "ios/chrome/browser/application_context.h"
@@ -20,6 +19,7 @@
 #import "ios/chrome/test/ocmock/OCMockObject+BreakpadControllerTesting.h"
 #include "net/base/network_change_notifier.h"
 #include "testing/platform_test.h"
+#import "third_party/breakpad/breakpad/src/client/ios/BreakpadController.h"
 #import "third_party/ocmock/OCMock/OCMock.h"
 #include "third_party/ocmock/gtest_support.h"
 
diff --git a/ios/chrome/browser/DEPS b/ios/chrome/browser/DEPS
index 7ed4da5..3adadcc 100644
--- a/ios/chrome/browser/DEPS
+++ b/ios/chrome/browser/DEPS
@@ -1,6 +1,4 @@
 include_rules = [
-  "+breakpad/src/client/ios",
-  "+breakpad/src/common",
   "+components/about_handler",
   "+components/autofill/core/browser",
   "+components/autofill/core/common",
@@ -105,6 +103,8 @@
   "+net",
   "+rlz/features",
   "+services/metrics",
+  "+third_party/breakpad/breakpad/src/client/ios",
+  "+third_party/breakpad/breakpad/src/common",
   "+third_party/brotli",
   "+third_party/google_toolbox_for_mac",
   "+third_party/libaddressinput",
diff --git a/ios/chrome/browser/crash_report/BUILD.gn b/ios/chrome/browser/crash_report/BUILD.gn
index 2c295328..1b3c3752 100644
--- a/ios/chrome/browser/crash_report/BUILD.gn
+++ b/ios/chrome/browser/crash_report/BUILD.gn
@@ -22,11 +22,11 @@
 
   deps = [
     "//base",
-    "//breakpad:client",
     "//components/crash/core/common",
     "//components/upload_list",
     "//ios/chrome/browser",
     "//ios/web",
+    "//third_party/breakpad:client",
   ]
 }
 
@@ -70,7 +70,6 @@
     ":crash_report",
     ":crash_report_internal",
     "//base",
-    "//breakpad:client",
     "//ios/chrome/browser/browser_state",
     "//ios/chrome/browser/browser_state:test_support",
     "//ios/chrome/browser/sessions:serialisation",
@@ -79,6 +78,7 @@
     "//ios/web/public/test",
     "//testing/gmock",
     "//testing/gtest",
+    "//third_party/breakpad:client",
     "//third_party/ocmock",
   ]
 }
diff --git a/ios/chrome/browser/crash_report/breakpad_helper.mm b/ios/chrome/browser/crash_report/breakpad_helper.mm
index ce51472..df3af19 100644
--- a/ios/chrome/browser/crash_report/breakpad_helper.mm
+++ b/ios/chrome/browser/crash_report/breakpad_helper.mm
@@ -22,9 +22,9 @@
 #import "ios/chrome/browser/crash_report/crash_report_user_application_state.h"
 
 // TODO(stuartmorgan): Move this up where it belongs once
-// http://code.google.com/p/google-breakpad/issues/detail?id=487
-// is fixed. For now, put it at the end to avoid compiler errors.
-#import "breakpad/src/client/ios/BreakpadController.h"
+// https://crbug.com/google-breakpad/487 is fixed. For now, put it at the end to
+// avoid compiler errors.
+#import "third_party/breakpad/breakpad/src/client/ios/BreakpadController.h"
 
 #if !defined(__has_feature) || !__has_feature(objc_arc)
 #error "This file requires ARC support."
diff --git a/ios/chrome/browser/crash_report/breakpad_helper_unittest.mm b/ios/chrome/browser/crash_report/breakpad_helper_unittest.mm
index c2f17ec..7fd3766 100644
--- a/ios/chrome/browser/crash_report/breakpad_helper_unittest.mm
+++ b/ios/chrome/browser/crash_report/breakpad_helper_unittest.mm
@@ -2,12 +2,12 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#import "breakpad/src/client/ios/BreakpadController.h"
 #import "ios/chrome/browser/crash_report/breakpad_helper.h"
 #import "ios/chrome/test/base/scoped_block_swizzler.h"
 #import "ios/chrome/test/ocmock/OCMockObject+BreakpadControllerTesting.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "testing/platform_test.h"
+#import "third_party/breakpad/breakpad/src/client/ios/BreakpadController.h"
 #import "third_party/ocmock/OCMock/OCMock.h"
 #include "third_party/ocmock/gtest_support.h"
 
diff --git a/ios/chrome/browser/crash_report/crash_report_background_uploader.mm b/ios/chrome/browser/crash_report/crash_report_background_uploader.mm
index 19525ab4..9258c76 100644
--- a/ios/chrome/browser/crash_report/crash_report_background_uploader.mm
+++ b/ios/chrome/browser/crash_report/crash_report_background_uploader.mm
@@ -13,8 +13,8 @@
 #include "base/metrics/user_metrics.h"
 #include "base/metrics/user_metrics_action.h"
 #include "base/time/time.h"
-#import "breakpad/src/client/ios/BreakpadController.h"
 #include "ios/chrome/browser/experimental_flags.h"
+#import "third_party/breakpad/breakpad/src/client/ios/BreakpadController.h"
 
 #if !defined(__has_feature) || !__has_feature(objc_arc)
 #error "This file requires ARC support."
diff --git a/ios/chrome/browser/ui/bookmarks/bookmark_home_view_controller.mm b/ios/chrome/browser/ui/bookmarks/bookmark_home_view_controller.mm
index 97de915..b6dcd41 100644
--- a/ios/chrome/browser/ui/bookmarks/bookmark_home_view_controller.mm
+++ b/ios/chrome/browser/ui/bookmarks/bookmark_home_view_controller.mm
@@ -171,6 +171,10 @@
     if (self.isReconstructingFromCache) {
       [self setupUIStackCacheIfApplicable];
     }
+    // Set the delegate here to make sure it is working when navigating in the
+    // ViewController hierarchy (as each view controller is setting itself as
+    // delegate).
+    self.navigationController.interactivePopGestureRecognizer.delegate = self;
   }
 }
 
@@ -1041,8 +1045,6 @@
 - (void)setupNavigationBar {
   self.navigationController.navigationBarHidden = YES;
 
-  self.navigationController.interactivePopGestureRecognizer.delegate = self;
-
   self.appBar = [[MDCAppBar alloc] init];
   [self addChildViewController:_appBar.headerViewController];
   ConfigureAppBarWithCardStyle(self.appBar);
diff --git a/ios/chrome/browser/ui/bookmarks/bookmarks_new_generation_egtest.mm b/ios/chrome/browser/ui/bookmarks/bookmarks_new_generation_egtest.mm
index a8b8565..0fb0206 100644
--- a/ios/chrome/browser/ui/bookmarks/bookmarks_new_generation_egtest.mm
+++ b/ios/chrome/browser/ui/bookmarks/bookmarks_new_generation_egtest.mm
@@ -159,6 +159,14 @@
     EARL_GREY_TEST_SKIPPED(@"Test not applicable for iPad");
   }
 
+// TODO(crbug.com/768339): This test is faling on devices with iOS > 9 because
+// grey_swipeFastInDirectionWithStartPoint does not work.
+#if !TARGET_IPHONE_SIMULATOR
+  if (@available(iOS 10.0, *)) {
+    EARL_GREY_TEST_DISABLED(@"Test disabled on iOS 10+ devices.");
+  }
+#endif
+
   base::test::ScopedFeatureList scoped_feature_list;
   scoped_feature_list.InitAndEnableFeature(kBookmarkNewGeneration);
 
@@ -170,7 +178,16 @@
   [[EarlGrey selectElementWithMatcher:grey_accessibilityID(@"Mobile Bookmarks")]
       assertWithMatcher:grey_nil()];
 
-  // Back using swipe left gesture.
+  // Open the first folder, to be able to go back twice on the bookmarks.
+  [[EarlGrey
+      selectElementWithMatcher:TappableBookmarkNodeWithLabel(@"Folder 1")]
+      performAction:grey_tap()];
+
+  // Back twice using swipe left gesture.
+  [[EarlGrey
+      selectElementWithMatcher:grey_accessibilityID(@"bookmarksTableView")]
+      performAction:grey_swipeFastInDirectionWithStartPoint(kGREYDirectionRight,
+                                                            0.01, 0.5)];
   [[EarlGrey
       selectElementWithMatcher:grey_accessibilityID(@"bookmarksTableView")]
       performAction:grey_swipeFastInDirectionWithStartPoint(kGREYDirectionRight,
diff --git a/ios/chrome/browser/ui/safe_mode/BUILD.gn b/ios/chrome/browser/ui/safe_mode/BUILD.gn
index 5e36aed..e95e853 100644
--- a/ios/chrome/browser/ui/safe_mode/BUILD.gn
+++ b/ios/chrome/browser/ui/safe_mode/BUILD.gn
@@ -55,11 +55,11 @@
   deps = [
     ":safe_mode",
     "//base",
-    "//breakpad:client",
     "//ios/chrome/browser/crash_report",
     "//ios/chrome/test/base",
     "//ios/chrome/test/ocmock",
     "//testing/gtest",
+    "//third_party/breakpad:client",
     "//third_party/ocmock",
   ]
   libs = [ "UIKit.framework" ]
diff --git a/ios/chrome/browser/ui/safe_mode/safe_mode_view_controller_unittest.mm b/ios/chrome/browser/ui/safe_mode/safe_mode_view_controller_unittest.mm
index 1f16ee7f..335cceb 100644
--- a/ios/chrome/browser/ui/safe_mode/safe_mode_view_controller_unittest.mm
+++ b/ios/chrome/browser/ui/safe_mode/safe_mode_view_controller_unittest.mm
@@ -3,12 +3,12 @@
 // found in the LICENSE file.
 
 #import "ios/chrome/browser/ui/safe_mode/safe_mode_view_controller.h"
-#import "breakpad/src/client/ios/BreakpadController.h"
 #import "ios/chrome/browser/crash_report/breakpad_helper.h"
 #import "ios/chrome/test/base/scoped_block_swizzler.h"
 #import "ios/chrome/test/ocmock/OCMockObject+BreakpadControllerTesting.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "testing/platform_test.h"
+#import "third_party/breakpad/breakpad/src/client/ios/BreakpadController.h"
 #import "third_party/ocmock/OCMock/OCMock.h"
 #include "third_party/ocmock/gtest_support.h"
 
diff --git a/ios/chrome/test/DEPS b/ios/chrome/test/DEPS
index 651885c3..77affed59 100644
--- a/ios/chrome/test/DEPS
+++ b/ios/chrome/test/DEPS
@@ -1,5 +1,4 @@
 include_rules = [
-  "+breakpad/src/client/ios",
   "+components/autofill/core/browser",
   "+components/bookmarks",
   "+components/browser_sync",
@@ -21,6 +20,7 @@
   "+ios/public/provider/chrome",
   "+ios/public/test",
   "+net/url_request",
+  "+third_party/breakpad/breakpad/src/client/ios",
   "+third_party/google_toolbox_for_mac",
   "+ui",
 
diff --git a/ios/chrome/test/app/BUILD.gn b/ios/chrome/test/app/BUILD.gn
index 9420398b..69651ea 100644
--- a/ios/chrome/test/app/BUILD.gn
+++ b/ios/chrome/test/app/BUILD.gn
@@ -36,7 +36,6 @@
   deps = [
     "//base",
     "//base/test:test_support",
-    "//breakpad:client",
     "//components/autofill/core/browser",
     "//components/bookmarks/browser",
     "//components/browser_sync",
@@ -87,6 +86,7 @@
     "//ios/web/public/test",
     "//net",
     "//net:test_support",
+    "//third_party/breakpad:client",
     "//url",
   ]
 }
diff --git a/ios/chrome/test/app/chrome_test_util.mm b/ios/chrome/test/app/chrome_test_util.mm
index f8d85a5..1c44cbe 100644
--- a/ios/chrome/test/app/chrome_test_util.mm
+++ b/ios/chrome/test/app/chrome_test_util.mm
@@ -5,7 +5,6 @@
 #import "ios/chrome/test/app/chrome_test_util.h"
 
 #include "base/mac/foundation_util.h"
-#import "breakpad/src/client/ios/BreakpadController.h"
 #include "components/metrics/metrics_pref_names.h"
 #include "components/metrics/metrics_service.h"
 #import "ios/chrome/app/application_delegate/metrics_mediator.h"
@@ -28,6 +27,7 @@
 #import "ios/chrome/browser/ui/ntp/new_tab_page_controller.h"
 #import "ios/chrome/browser/ui/tab_switcher/tab_switcher.h"
 #import "ios/web/public/test/native_controller_test_util.h"
+#import "third_party/breakpad/breakpad/src/client/ios/BreakpadController.h"
 
 #if !defined(__has_feature) || !__has_feature(objc_arc)
 #error "This file requires ARC support."
diff --git a/ios/chrome/test/ocmock/BUILD.gn b/ios/chrome/test/ocmock/BUILD.gn
index cc3ebdf3..ed27b7c 100644
--- a/ios/chrome/test/ocmock/BUILD.gn
+++ b/ios/chrome/test/ocmock/BUILD.gn
@@ -11,8 +11,8 @@
   ]
   deps = [
     "//base",
-    "//breakpad:client",
     "//testing/gtest",
+    "//third_party/breakpad:client",
     "//third_party/ocmock",
   ]
 }
diff --git a/ios/chrome/test/ocmock/OCMockObject+BreakpadControllerTesting.mm b/ios/chrome/test/ocmock/OCMockObject+BreakpadControllerTesting.mm
index ba86516..6a9be75 100644
--- a/ios/chrome/test/ocmock/OCMockObject+BreakpadControllerTesting.mm
+++ b/ios/chrome/test/ocmock/OCMockObject+BreakpadControllerTesting.mm
@@ -4,8 +4,8 @@
 
 #import "ios/chrome/test/ocmock/OCMockObject+BreakpadControllerTesting.h"
 
-#import "breakpad/src/client/ios/BreakpadController.h"
 #include "testing/gtest/include/gtest/gtest.h"
+#import "third_party/breakpad/breakpad/src/client/ios/BreakpadController.h"
 #import "third_party/ocmock/OCMock/OCMock.h"
 
 #if !defined(__has_feature) || !__has_feature(objc_arc)
diff --git a/ios/clean/chrome/app/DEPS b/ios/clean/chrome/app/DEPS
index 3338758..d893f68 100644
--- a/ios/clean/chrome/app/DEPS
+++ b/ios/clean/chrome/app/DEPS
@@ -1,9 +1,9 @@
 include_rules = [
-  "+breakpad/src/client/ios",
   "+components/content_settings",
   "+components/crash/core/common",
   "+ios/chrome/browser",
   "+ios/net",
   "+ios/public/provider/chrome",
   "+ios/web/public",
+  "+third_party/breakpad/breakpad/src/client/ios",
 ]
diff --git a/ios/clean/chrome/app/steps/BUILD.gn b/ios/clean/chrome/app/steps/BUILD.gn
index 351dbdff..92053f05 100644
--- a/ios/clean/chrome/app/steps/BUILD.gn
+++ b/ios/clean/chrome/app/steps/BUILD.gn
@@ -50,7 +50,6 @@
   deps = [
     ":step_runner",
     "//base",
-    "//breakpad:client",
     "//components/content_settings/core/browser",
     "//ios/chrome/app:app_internal",
     "//ios/chrome/app/startup",
@@ -69,6 +68,7 @@
     "//ios/clean/chrome/browser/ui/root",
     "//ios/net",
     "//ios/web",
+    "//third_party/breakpad:client",
   ]
 }
 
diff --git a/ios/clean/chrome/app/steps/breakpad_initializer.mm b/ios/clean/chrome/app/steps/breakpad_initializer.mm
index 3590f55..bfb5f2a 100644
--- a/ios/clean/chrome/app/steps/breakpad_initializer.mm
+++ b/ios/clean/chrome/app/steps/breakpad_initializer.mm
@@ -5,10 +5,10 @@
 #import "ios/clean/chrome/app/steps/breakpad_initializer.h"
 
 #include "base/logging.h"
-#import "breakpad/src/client/ios/BreakpadController.h"
 #include "ios/chrome/browser/application_context.h"
 #import "ios/clean/chrome/app/steps/step_context.h"
 #import "ios/clean/chrome/app/steps/step_features.h"
+#import "third_party/breakpad/breakpad/src/client/ios/BreakpadController.h"
 
 #if !defined(__has_feature) || !__has_feature(objc_arc)
 #error "This file requires ARC support."
diff --git a/media/audio/alsa/alsa_input.cc b/media/audio/alsa/alsa_input.cc
index f8e0a18c..3b910ed 100644
--- a/media/audio/alsa/alsa_input.cc
+++ b/media/audio/alsa/alsa_input.cc
@@ -210,7 +210,7 @@
       base::TimeDelta hardware_delay = base::TimeDelta::FromSecondsD(
           avail_frames / static_cast<double>(params_.sample_rate()));
 
-      callback_->OnData(this, audio_bus_.get(),
+      callback_->OnData(audio_bus_.get(),
                         base::TimeTicks::Now() - hardware_delay,
                         normalized_volume);
     } else if (frames_read < 0) {
@@ -345,7 +345,7 @@
 
 void AlsaPcmInputStream::HandleError(const char* method, int error) {
   LOG(WARNING) << method << ": " << wrapper_->StrError(error);
-  callback_->OnError(this);
+  callback_->OnError();
 }
 
 }  // namespace media
diff --git a/media/audio/android/audio_android_unittest.cc b/media/audio/android/audio_android_unittest.cc
index 7005dc8..f358b38 100644
--- a/media/audio/android/audio_android_unittest.cc
+++ b/media/audio/android/audio_android_unittest.cc
@@ -160,12 +160,11 @@
 // Gmock implementation of AudioInputStream::AudioInputCallback.
 class MockAudioInputCallback : public AudioInputStream::AudioInputCallback {
  public:
-  MOCK_METHOD4(OnData,
-               void(AudioInputStream* stream,
-                    const AudioBus* src,
+  MOCK_METHOD3(OnData,
+               void(const AudioBus* src,
                     base::TimeTicks capture_time,
                     double volume));
-  MOCK_METHOD1(OnError, void(AudioInputStream* stream));
+  MOCK_METHOD0(OnError, void());
 };
 
 // Implements AudioOutputStream::AudioSourceCallback and provides audio data
@@ -275,8 +274,7 @@
   }
 
   // AudioInputStream::AudioInputCallback implementation.
-  void OnData(AudioInputStream* stream,
-              const AudioBus* src,
+  void OnData(const AudioBus* src,
               base::TimeTicks capture_time,
               double volume) override {
     const int num_samples = src->frames() * src->channels();
@@ -292,7 +290,7 @@
       event_->Signal();
   }
 
-  void OnError(AudioInputStream* stream) override {}
+  void OnError() override {}
 
  private:
   base::WaitableEvent* event_;
@@ -323,8 +321,7 @@
   ~FullDuplexAudioSinkSource() override {}
 
   // AudioInputStream::AudioInputCallback implementation
-  void OnData(AudioInputStream* stream,
-              const AudioBus* src,
+  void OnData(const AudioBus* src,
               base::TimeTicks capture_time,
               double volume) override {
     const base::TimeTicks now_time = base::TimeTicks::Now();
@@ -363,7 +360,7 @@
     }
   }
 
-  void OnError(AudioInputStream* stream) override {}
+  void OnError() override {}
 
   // AudioOutputStream::AudioSourceCallback implementation
   int OnMoreData(base::TimeDelta /* delay */,
@@ -397,8 +394,6 @@
     return dest->frames();
   }
 
-  void OnError() override {}
-
  private:
   // Converts from bytes to milliseconds given number of bytes and existing
   // audio parameters.
@@ -665,12 +660,12 @@
     MockAudioInputCallback sink;
 
     base::RunLoop run_loop;
-    EXPECT_CALL(sink, OnData(audio_input_stream_, NotNull(), _, _))
+    EXPECT_CALL(sink, OnData(NotNull(), _, _))
         .Times(AtLeast(num_callbacks))
         .WillRepeatedly(CheckCountAndPostQuitTask(
             &count, num_callbacks, base::ThreadTaskRunnerHandle::Get(),
             run_loop.QuitWhenIdleClosure()));
-    EXPECT_CALL(sink, OnError(audio_input_stream_)).Times(0);
+    EXPECT_CALL(sink, OnError()).Times(0);
 
     OpenAndStartAudioInputStreamOnAudioThread(&sink);
 
diff --git a/media/audio/android/audio_record_input.cc b/media/audio/android/audio_record_input.cc
index 521676a..657a1982 100644
--- a/media/audio/android/audio_record_input.cc
+++ b/media/audio/android/audio_record_input.cc
@@ -59,7 +59,7 @@
   // hardware volume slider.
   audio_bus_->FromInterleaved(direct_buffer_address_, audio_bus_->frames(),
                               bytes_per_sample_);
-  callback_->OnData(this, audio_bus_.get(),
+  callback_->OnData(audio_bus_.get(),
                     base::TimeTicks::Now() -
                         base::TimeDelta::FromMilliseconds(hardware_delay_ms),
                     0.0);
diff --git a/media/audio/android/opensles_input.cc b/media/audio/android/opensles_input.cc
index bccda08be..22d9384c 100644
--- a/media/audio/android/opensles_input.cc
+++ b/media/audio/android/opensles_input.cc
@@ -308,8 +308,8 @@
 
   // TODO(henrika): Investigate if it is possible to get an accurate
   // delay estimation.
-  callback_->OnData(this, audio_bus_.get(),
-                    base::TimeTicks::Now() - hardware_delay_, 0.0);
+  callback_->OnData(audio_bus_.get(), base::TimeTicks::Now() - hardware_delay_,
+                    0.0);
 
   // Done with this buffer. Send it to device for recording.
   SLresult err =
@@ -343,7 +343,7 @@
 void OpenSLESInputStream::HandleError(SLresult error) {
   DLOG(ERROR) << "OpenSLES Input error " << error;
   if (callback_)
-    callback_->OnError(this);
+    callback_->OnError();
 }
 
 }  // namespace media
diff --git a/media/audio/audio_input_controller.cc b/media/audio/audio_input_controller.cc
index d101eb86..e38ed0c6 100644
--- a/media/audio/audio_input_controller.cc
+++ b/media/audio/audio_input_controller.cc
@@ -115,8 +115,7 @@
   bool error_during_callback() const { return error_during_callback_; }
 
  private:
-  void OnData(AudioInputStream* stream,
-              const AudioBus* source,
+  void OnData(const AudioBus* source,
               base::TimeTicks capture_time,
               double volume) override {
     TRACE_EVENT0("audio", "AC::OnData");
@@ -130,7 +129,7 @@
 #endif
   }
 
-  void OnError(AudioInputStream* stream) override {
+  void OnError() override {
     error_during_callback_ = true;
     controller_->task_runner_->PostTask(
         FROM_HERE,
diff --git a/media/audio/audio_input_unittest.cc b/media/audio/audio_input_unittest.cc
index 232354e7..7327200 100644
--- a/media/audio/audio_input_unittest.cc
+++ b/media/audio/audio_input_unittest.cc
@@ -28,13 +28,12 @@
 class TestInputCallback : public AudioInputStream::AudioInputCallback {
  public:
   TestInputCallback() : callback_count_(0), had_error_(0) {}
-  void OnData(AudioInputStream* stream,
-              const AudioBus* source,
+  void OnData(const AudioBus* source,
               base::TimeTicks capture_time,
               double volume) override {
     ++callback_count_;
   }
-  void OnError(AudioInputStream* stream) override { ++had_error_; }
+  void OnError() override { ++had_error_; }
   // Returns how many times OnData() has been called.
   int callback_count() const {
     return callback_count_;
diff --git a/media/audio/audio_io.h b/media/audio/audio_io.h
index 7ac43cc3c..45ec5d88 100644
--- a/media/audio/audio_io.h
+++ b/media/audio/audio_io.h
@@ -125,8 +125,7 @@
     // received. The age of the audio data may be calculated by subtracting
     // |capture_time| from base::TimeTicks::Now(). |capture_time| is always
     // monotonically increasing.
-    virtual void OnData(AudioInputStream* stream,
-                        const AudioBus* source,
+    virtual void OnData(const AudioBus* source,
                         base::TimeTicks capture_time,
                         double volume) = 0;
 
@@ -134,7 +133,7 @@
     // destroyed yet. No direct action needed by the AudioInputStream, but it
     // is a good place to stop accumulating sound data since is is likely that
     // recording will not continue.
-    virtual void OnError(AudioInputStream* stream) = 0;
+    virtual void OnError() = 0;
 
    protected:
     virtual ~AudioInputCallback() {}
diff --git a/media/audio/audio_low_latency_input_output_unittest.cc b/media/audio/audio_low_latency_input_output_unittest.cc
index 4b2fa7f8..e8754da9 100644
--- a/media/audio/audio_low_latency_input_output_unittest.cc
+++ b/media/audio/audio_low_latency_input_output_unittest.cc
@@ -151,8 +151,7 @@
   }
 
   // AudioInputStream::AudioInputCallback.
-  void OnData(AudioInputStream* stream,
-              const AudioBus* src,
+  void OnData(const AudioBus* src,
               base::TimeTicks capture_time,
               double volume) override {
     base::AutoLock lock(lock_);
@@ -182,7 +181,7 @@
     // }
   }
 
-  void OnError(AudioInputStream* stream) override {}
+  void OnError() override {}
 
   // AudioOutputStream::AudioSourceCallback.
   int OnMoreData(base::TimeDelta delay,
@@ -216,8 +215,6 @@
     return 0;
   }
 
-  void OnError() override {}
-
  protected:
   // Converts from bytes to milliseconds taking the sample rate and size
   // of an audio frame into account.
diff --git a/media/audio/cras/cras_input.cc b/media/audio/cras/cras_input.cc
index 5243a57..038f30b0 100644
--- a/media/audio/cras/cras_input.cc
+++ b/media/audio/cras/cras_input.cc
@@ -168,7 +168,7 @@
       params_.channels());
   if (!audio_format) {
     DLOG(WARNING) << "Error setting up audio parameters.";
-    callback_->OnError(this);
+    callback_->OnError();
     callback_ = NULL;
     return;
   }
@@ -187,7 +187,7 @@
   }
   if (cras_audio_format_set_channel_layout(audio_format, layout) != 0) {
     DLOG(WARNING) << "Error setting channel layout.";
-    callback->OnError(this);
+    callback->OnError();
     return;
   }
 
@@ -209,7 +209,7 @@
       audio_format);
   if (!stream_params) {
     DLOG(WARNING) << "Error setting up stream parameters.";
-    callback_->OnError(this);
+    callback_->OnError();
     callback_ = NULL;
     cras_audio_format_destroy(audio_format);
     return;
@@ -223,7 +223,7 @@
   if (cras_client_add_pinned_stream(client_, pin_device_, &stream_id_,
                                     stream_params)) {
     DLOG(WARNING) << "Failed to add the stream.";
-    callback_->OnError(this);
+    callback_->OnError();
     callback_ = NULL;
   }
 
@@ -304,12 +304,12 @@
 
   audio_bus_->FromInterleaved(buffer, audio_bus_->frames(),
                               params_.bits_per_sample() / 8);
-  callback_->OnData(this, audio_bus_.get(), capture_time, normalized_volume);
+  callback_->OnData(audio_bus_.get(), capture_time, normalized_volume);
 }
 
 void CrasInputStream::NotifyStreamError(int err) {
   if (callback_)
-    callback_->OnError(this);
+    callback_->OnError();
 }
 
 double CrasInputStream::GetMaxVolume() {
diff --git a/media/audio/cras/cras_input_unittest.cc b/media/audio/cras/cras_input_unittest.cc
index 4015b7f0..63d0f0f8 100644
--- a/media/audio/cras/cras_input_unittest.cc
+++ b/media/audio/cras/cras_input_unittest.cc
@@ -38,10 +38,8 @@
 
 class MockAudioInputCallback : public AudioInputStream::AudioInputCallback {
  public:
-  MOCK_METHOD4(
-      OnData,
-      void(AudioInputStream*, const AudioBus*, base::TimeTicks, double));
-  MOCK_METHOD1(OnError, void(AudioInputStream*));
+  MOCK_METHOD3(OnData, void(const AudioBus*, base::TimeTicks, double));
+  MOCK_METHOD0(OnError, void());
 };
 
 class MockAudioManagerCrasInput : public AudioManagerCras {
@@ -111,7 +109,7 @@
     base::WaitableEvent event(base::WaitableEvent::ResetPolicy::AUTOMATIC,
                               base::WaitableEvent::InitialState::NOT_SIGNALED);
 
-    EXPECT_CALL(mock_callback, OnData(test_stream, _, _, _))
+    EXPECT_CALL(mock_callback, OnData(_, _, _))
         .WillOnce(InvokeWithoutArgs(&event, &base::WaitableEvent::Signal));
 
     test_stream->Start(&mock_callback);
diff --git a/media/audio/fake_audio_input_stream.cc b/media/audio/fake_audio_input_stream.cc
index acf2561c..edca251 100644
--- a/media/audio/fake_audio_input_stream.cc
+++ b/media/audio/fake_audio_input_stream.cc
@@ -106,7 +106,7 @@
 
   audio_source_->OnMoreData(base::TimeDelta(), base::TimeTicks::Now(), 0,
                             audio_bus_.get());
-  callback_->OnData(this, audio_bus_.get(), base::TimeTicks::Now(), 1.0);
+  callback_->OnData(audio_bus_.get(), base::TimeTicks::Now(), 1.0);
 }
 
 using AudioSourceCallback = AudioOutputStream::AudioSourceCallback;
diff --git a/media/audio/mac/audio_input_mac.cc b/media/audio/mac/audio_input_mac.cc
index 106b03e82..b7b341e 100644
--- a/media/audio/mac/audio_input_mac.cc
+++ b/media/audio/mac/audio_input_mac.cc
@@ -182,7 +182,7 @@
 
 void PCMQueueInAudioInputStream::HandleError(OSStatus err) {
   if (callback_)
-    callback_->OnError(this);
+    callback_->OnError();
   // This point should never be reached.
   OSSTATUS_DCHECK(0, err);
 }
@@ -274,7 +274,7 @@
     uint8_t* audio_data = reinterpret_cast<uint8_t*>(audio_buffer->mAudioData);
     audio_bus_->FromInterleaved(audio_data, audio_bus_->frames(),
                                 format_.mBitsPerChannel / 8);
-    callback_->OnData(this, audio_bus_.get(), capture_time, 0.0);
+    callback_->OnData(audio_bus_.get(), capture_time, 0.0);
 
     last_fill_ = base::TimeTicks::Now();
   }
diff --git a/media/audio/mac/audio_low_latency_input_mac.cc b/media/audio/mac/audio_low_latency_input_mac.cc
index c112138..aa98666 100644
--- a/media/audio/mac/audio_low_latency_input_mac.cc
+++ b/media/audio/mac/audio_low_latency_input_mac.cc
@@ -945,7 +945,7 @@
     const AudioBus* audio_bus = fifo_.Consume();
     DCHECK_EQ(audio_bus->frames(), static_cast<int>(number_of_frames_));
 
-    sink_->OnData(this, audio_bus, capture_time, normalized_volume);
+    sink_->OnData(audio_bus, capture_time, normalized_volume);
 
     // Move the capture time forward for each vended block.
     capture_time += AudioTimestampHelper::FramesToTime(audio_bus->frames(),
@@ -1142,7 +1142,7 @@
   NOTREACHED() << "error " << logging::DescriptionFromOSStatus(err) << " ("
                << err << ")";
   if (sink_)
-    sink_->OnError(this);
+    sink_->OnError();
 }
 
 bool AUAudioInputStream::IsVolumeSettableOnChannel(int channel) {
diff --git a/media/audio/mac/audio_low_latency_input_mac_unittest.cc b/media/audio/mac/audio_low_latency_input_mac_unittest.cc
index e54af7c..64d6c05 100644
--- a/media/audio/mac/audio_low_latency_input_mac_unittest.cc
+++ b/media/audio/mac/audio_low_latency_input_mac_unittest.cc
@@ -40,12 +40,11 @@
 
 class MockAudioInputCallback : public AudioInputStream::AudioInputCallback {
  public:
-  MOCK_METHOD4(OnData,
-               void(AudioInputStream* stream,
-                    const AudioBus* src,
+  MOCK_METHOD3(OnData,
+               void(const AudioBus* src,
                     base::TimeTicks capture_time,
                     double volume));
-  MOCK_METHOD1(OnError, void(AudioInputStream* stream));
+  MOCK_METHOD0(OnError, void());
 };
 
 // This audio sink implementation should be used for manual tests only since
@@ -84,8 +83,7 @@
   }
 
   // AudioInputStream::AudioInputCallback implementation.
-  void OnData(AudioInputStream* stream,
-              const AudioBus* src,
+  void OnData(const AudioBus* src,
               base::TimeTicks capture_time,
               double volume) override {
     const int num_samples = src->frames() * src->channels();
@@ -102,7 +100,7 @@
     }
   }
 
-  void OnError(AudioInputStream* stream) override {}
+  void OnError() override {}
 
  private:
   media::SeekableBuffer buffer_;
@@ -215,7 +213,7 @@
   // All should contain valid packets of the same size and a valid delay
   // estimate.
   base::RunLoop run_loop;
-  EXPECT_CALL(sink, OnData(ais, NotNull(), _, _))
+  EXPECT_CALL(sink, OnData(NotNull(), _, _))
       .Times(AtLeast(10))
       .WillRepeatedly(CheckCountAndPostQuitTask(&count, 10, &message_loop_,
                                                 run_loop.QuitClosure()));
@@ -250,7 +248,7 @@
   // ensure that we can land the patch but will revisit this test again when
   // more analysis of the delay estimates are done.
   base::RunLoop run_loop;
-  EXPECT_CALL(sink, OnData(ais, NotNull(), _, _))
+  EXPECT_CALL(sink, OnData(NotNull(), _, _))
       .Times(AtLeast(10))
       .WillRepeatedly(CheckCountAndPostQuitTask(&count, 10, &message_loop_,
                                                 run_loop.QuitClosure()));
diff --git a/media/audio/pulse/pulse_input.cc b/media/audio/pulse/pulse_input.cc
index 8bf943f..3a0aa4d 100644
--- a/media/audio/pulse/pulse_input.cc
+++ b/media/audio/pulse/pulse_input.cc
@@ -264,7 +264,7 @@
 
   if (s && stream->callback_ &&
       pa_stream_get_state(s) == PA_STREAM_FAILED) {
-    stream->callback_->OnError(stream);
+    stream->callback_->OnError();
   }
 
   pa_threaded_mainloop_signal(stream->pa_mainloop_, 0);
@@ -314,7 +314,7 @@
   while (fifo_.available_blocks()) {
     const AudioBus* audio_bus = fifo_.Consume();
 
-    callback_->OnData(this, audio_bus, capture_time, normalized_volume);
+    callback_->OnData(audio_bus, capture_time, normalized_volume);
 
     // Move the capture time forward for each vended block.
     capture_time += AudioTimestampHelper::FramesToTime(audio_bus->frames(),
diff --git a/media/audio/virtual_audio_input_stream.cc b/media/audio/virtual_audio_input_stream.cc
index fbe90bb..f885e9fd 100644
--- a/media/audio/virtual_audio_input_stream.cc
+++ b/media/audio/virtual_audio_input_stream.cc
@@ -111,7 +111,7 @@
   }
   // Because the audio is being looped-back, the delay since since it was
   // recorded is zero.
-  callback_->OnData(this, audio_bus_.get(), base::TimeTicks::Now(), 1.0);
+  callback_->OnData(audio_bus_.get(), base::TimeTicks::Now(), 1.0);
 }
 
 void VirtualAudioInputStream::Close() {
diff --git a/media/audio/virtual_audio_input_stream_unittest.cc b/media/audio/virtual_audio_input_stream_unittest.cc
index 8adcffbf..0ee9168 100644
--- a/media/audio/virtual_audio_input_stream_unittest.cc
+++ b/media/audio/virtual_audio_input_stream_unittest.cc
@@ -37,19 +37,18 @@
   MockInputCallback()
       : data_pushed_(base::WaitableEvent::ResetPolicy::AUTOMATIC,
                      base::WaitableEvent::InitialState::NOT_SIGNALED) {
-    ON_CALL(*this, OnData(_, _, _, _))
+    ON_CALL(*this, OnData(_, _, _))
         .WillByDefault(
             InvokeWithoutArgs(&data_pushed_, &base::WaitableEvent::Signal));
   }
 
   virtual ~MockInputCallback() {}
 
-  MOCK_METHOD4(OnData,
-               void(AudioInputStream* stream,
-                    const AudioBus* source,
+  MOCK_METHOD3(OnData,
+               void(const AudioBus* source,
                     base::TimeTicks capture_time,
                     double volume));
-  MOCK_METHOD1(OnError, void(AudioInputStream* stream));
+  MOCK_METHOD0(OnError, void());
 
   void WaitForDataPushes() {
     for (int i = 0; i < 3; ++i) {
@@ -126,7 +125,7 @@
   }
 
   void Start() {
-    EXPECT_CALL(input_callback_, OnData(_, NotNull(), _, _)).Times(AtLeast(1));
+    EXPECT_CALL(input_callback_, OnData(NotNull(), _, _)).Times(AtLeast(1));
 
     ASSERT_TRUE(stream_);
     stream_->Start(&input_callback_);
diff --git a/media/audio/win/audio_low_latency_input_win.cc b/media/audio/win/audio_low_latency_input_win.cc
index 5d6fc41d..c516586b 100644
--- a/media/audio/win/audio_low_latency_input_win.cc
+++ b/media/audio/win/audio_low_latency_input_win.cc
@@ -462,13 +462,13 @@
               break;
             }
             converter_->Convert(convert_bus_.get());
-            sink_->OnData(this, convert_bus_.get(), capture_time, volume);
+            sink_->OnData(convert_bus_.get(), capture_time, volume);
 
             // Move the capture time forward for each vended block.
             capture_time += AudioTimestampHelper::FramesToTime(
                 convert_bus_->frames(), format_.nSamplesPerSec);
           } else {
-            sink_->OnData(this, fifo_->Consume(), capture_time, volume);
+            sink_->OnData(fifo_->Consume(), capture_time, volume);
 
             // Move the capture time forward for each vended block.
             capture_time += AudioTimestampHelper::FramesToTime(
@@ -500,7 +500,7 @@
 void WASAPIAudioInputStream::HandleError(HRESULT err) {
   NOTREACHED() << "Error code: " << err;
   if (sink_)
-    sink_->OnError(this);
+    sink_->OnError();
 }
 
 HRESULT WASAPIAudioInputStream::SetCaptureDevice() {
diff --git a/media/audio/win/audio_low_latency_input_win_unittest.cc b/media/audio/win/audio_low_latency_input_win_unittest.cc
index e86476b2..9c92225 100644
--- a/media/audio/win/audio_low_latency_input_win_unittest.cc
+++ b/media/audio/win/audio_low_latency_input_win_unittest.cc
@@ -48,12 +48,11 @@
 
 class MockAudioInputCallback : public AudioInputStream::AudioInputCallback {
  public:
-  MOCK_METHOD4(OnData,
-               void(AudioInputStream* stream,
-                    const AudioBus* src,
+  MOCK_METHOD3(OnData,
+               void(const AudioBus* src,
                     base::TimeTicks capture_time,
                     double volume));
-  MOCK_METHOD1(OnError, void(AudioInputStream* stream));
+  MOCK_METHOD0(OnError, void());
 };
 
 class FakeAudioInputCallback : public AudioInputStream::AudioInputCallback {
@@ -70,8 +69,7 @@
   // Waits until OnData() is called on another thread.
   void WaitForData() { data_event_.Wait(); }
 
-  void OnData(AudioInputStream* stream,
-              const AudioBus* src,
+  void OnData(const AudioBus* src,
               base::TimeTicks capture_time,
               double volume) override {
     EXPECT_GE(capture_time, base::TimeTicks());
@@ -79,7 +77,7 @@
     data_event_.Signal();
   }
 
-  void OnError(AudioInputStream* stream) override { error_ = true; }
+  void OnError() override { error_ = true; }
 
  private:
   int num_received_audio_frames_;
@@ -129,8 +127,7 @@
   }
 
   // AudioInputStream::AudioInputCallback implementation.
-  void OnData(AudioInputStream* stream,
-              const AudioBus* src,
+  void OnData(const AudioBus* src,
               base::TimeTicks capture_time,
               double volume) override {
     EXPECT_EQ(bits_per_sample_, 16);
@@ -148,7 +145,7 @@
     }
   }
 
-  void OnError(AudioInputStream* stream) override {}
+  void OnError() override {}
 
  private:
   int bits_per_sample_;
@@ -384,7 +381,7 @@
     // All should contain valid packets of the same size and a valid delay
     // estimate.
     base::RunLoop run_loop;
-    EXPECT_CALL(sink, OnData(ais.get(), NotNull(), _, _))
+    EXPECT_CALL(sink, OnData(NotNull(), _, _))
         .Times(AtLeast(10))
         .WillRepeatedly(
             CheckCountAndPostQuitTask(&count, 10, message_loop_.task_runner(),
@@ -409,7 +406,7 @@
 
   {
     base::RunLoop run_loop;
-    EXPECT_CALL(sink, OnData(ais.get(), NotNull(), _, _))
+    EXPECT_CALL(sink, OnData(NotNull(), _, _))
         .Times(AtLeast(10))
         .WillRepeatedly(
             CheckCountAndPostQuitTask(&count, 10, message_loop_.task_runner(),
@@ -430,7 +427,7 @@
 
   {
     base::RunLoop run_loop;
-    EXPECT_CALL(sink, OnData(ais.get(), NotNull(), _, _))
+    EXPECT_CALL(sink, OnData(NotNull(), _, _))
         .Times(AtLeast(10))
         .WillRepeatedly(
             CheckCountAndPostQuitTask(&count, 10, message_loop_.task_runner(),
diff --git a/native_client_sdk/src/BUILD.gn b/native_client_sdk/src/BUILD.gn
index 9b33bed..5c9fa1215 100644
--- a/native_client_sdk/src/BUILD.gn
+++ b/native_client_sdk/src/BUILD.gn
@@ -56,9 +56,9 @@
     # http://crbug.com/245456
     if (!is_win && target_cpu == "x64") {
       deps += [
-        "//breakpad:dump_syms($host_toolchain)",
-        "//breakpad:minidump_dump($host_toolchain)",
-        "//breakpad:minidump_stackwalk($host_toolchain)",
+        "//third_party/breakpad:dump_syms($host_toolchain)",
+        "//third_party/breakpad:minidump_dump($host_toolchain)",
+        "//third_party/breakpad:minidump_stackwalk($host_toolchain)",
       ]
     }
   }
diff --git a/net/quic/chromium/quic_stream_factory.cc b/net/quic/chromium/quic_stream_factory.cc
index 8dcff8a..23dbbee 100644
--- a/net/quic/chromium/quic_stream_factory.cc
+++ b/net/quic/chromium/quic_stream_factory.cc
@@ -442,7 +442,8 @@
 QuicStreamFactory::Job::~Job() {
   net_log_.EndEvent(NetLogEventType::QUIC_STREAM_FACTORY_JOB);
   CHECK(!in_loop_);
-  CHECK(callback_.is_null());
+  // If |this| is destroyed in QuicStreamFactory's destructor, |callback_| is
+  // non-null.
 }
 
 int QuicStreamFactory::Job::Run(const CompletionCallback& callback) {
diff --git a/remoting/base/BUILD.gn b/remoting/base/BUILD.gn
index 7f5a8b9..3cc1e9b 100644
--- a/remoting/base/BUILD.gn
+++ b/remoting/base/BUILD.gn
@@ -118,9 +118,9 @@
   ]
 
   if (is_mac) {
-    deps += [ "//breakpad" ]
+    deps += [ "//third_party/breakpad" ]
   } else if (is_win) {
-    deps += [ "//breakpad:breakpad_handler" ]
+    deps += [ "//third_party/breakpad:breakpad_handler" ]
   }
 }
 
@@ -178,7 +178,7 @@
   ]
 
   if (is_win || is_mac || is_chromeos) {
-    deps += [ "//breakpad:client" ]
+    deps += [ "//third_party/breakpad:client" ]
   }
 
   if (is_win) {
diff --git a/remoting/base/DEPS b/remoting/base/DEPS
index ecd7993..54b8b42c 100644
--- a/remoting/base/DEPS
+++ b/remoting/base/DEPS
@@ -1,9 +1,9 @@
 include_rules = [
-  "+breakpad",
   "+google/protobuf",
   "+google_apis",
   "+mojo/edk/embedder",
   "+net",
+  "+third_party/breakpad",
   "+third_party/zlib",
   "+ui/base",
 ]
diff --git a/remoting/base/breakpad_mac.mm b/remoting/base/breakpad_mac.mm
index 1dbd11f..3cd6ef3 100644
--- a/remoting/base/breakpad_mac.mm
+++ b/remoting/base/breakpad_mac.mm
@@ -8,7 +8,7 @@
 
 #include "base/logging.h"
 #import "base/mac/scoped_nsautorelease_pool.h"
-#import "breakpad/src/client/mac/Framework/Breakpad.h"
+#import "third_party/breakpad/breakpad/src/client/mac/Framework/Breakpad.h"
 
 namespace remoting {
 
diff --git a/remoting/base/breakpad_win.cc b/remoting/base/breakpad_win.cc
index 58d95c3..bc11449 100644
--- a/remoting/base/breakpad_win.cc
+++ b/remoting/base/breakpad_win.cc
@@ -22,7 +22,7 @@
 #include "base/strings/utf_string_conversions.h"
 #include "base/win/current_module.h"
 #include "base/win/wrapped_window_proc.h"
-#include "breakpad/src/client/windows/handler/exception_handler.h"
+#include "third_party/breakpad/breakpad/src/client/windows/handler/exception_handler.h"
 
 namespace remoting {
 void InitializeCrashReportingForTest(const wchar_t* pipe_name);
diff --git a/remoting/base/breakpad_win_unittest.cc b/remoting/base/breakpad_win_unittest.cc
index 38c368b30..b6ad481 100644
--- a/remoting/base/breakpad_win_unittest.cc
+++ b/remoting/base/breakpad_win_unittest.cc
@@ -12,10 +12,10 @@
 #include "base/logging.h"
 #include "base/strings/stringprintf.h"
 #include "base/strings/utf_string_conversions.h"
-#include "breakpad/src/client/windows/crash_generation/client_info.h"
-#include "breakpad/src/client/windows/crash_generation/crash_generation_server.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
+#include "third_party/breakpad/breakpad/src/client/windows/crash_generation/client_info.h"
+#include "third_party/breakpad/breakpad/src/client/windows/crash_generation/crash_generation_server.h"
 
 namespace {
 
diff --git a/remoting/scripts/mac/dump_product_syms b/remoting/scripts/mac/dump_product_syms
index 7c53948..f73a16a0 100755
--- a/remoting/scripts/mac/dump_product_syms
+++ b/remoting/scripts/mac/dump_product_syms
@@ -28,8 +28,7 @@
 
 for ARCH in ${ARCHS}; do
   # Use -c to avoid dumping CFI, because the Breakpad stackwalk is incompatible
-  # with CFI produced by clang.
-  # http://code.google.com/p/google-breakpad/issues/detail?id=443
+  # with CFI produced by clang. https://crbug.com/google-breakpad/443
   "${DUMP_SYMS_TOOL}" -a "${ARCH}" -c "${DWARF_PATH}" > \
       "${SOURCE_BUNDLE}-${VERSION}-${ARCH}.breakpad"
 done
diff --git a/services/ui/ws/compositor_frame_sink_client_binding.cc b/services/ui/ws/compositor_frame_sink_client_binding.cc
index 23ea8ed7..8694148 100644
--- a/services/ui/ws/compositor_frame_sink_client_binding.cc
+++ b/services/ui/ws/compositor_frame_sink_client_binding.cc
@@ -25,7 +25,7 @@
 
 void CompositorFrameSinkClientBinding::SubmitCompositorFrame(
     const viz::LocalSurfaceId& local_surface_id,
-    cc::CompositorFrame frame,
+    viz::CompositorFrame frame,
     viz::mojom::HitTestRegionListPtr hit_test_region_list,
     uint64_t submit_time) {
   if (local_surface_id != local_surface_id_) {
diff --git a/services/ui/ws/compositor_frame_sink_client_binding.h b/services/ui/ws/compositor_frame_sink_client_binding.h
index 4291d57..a552698 100644
--- a/services/ui/ws/compositor_frame_sink_client_binding.h
+++ b/services/ui/ws/compositor_frame_sink_client_binding.h
@@ -32,7 +32,7 @@
   // viz::mojom::CompositorFrameSink implementation:
   void SubmitCompositorFrame(
       const viz::LocalSurfaceId& local_surface_id,
-      cc::CompositorFrame frame,
+      viz::CompositorFrame frame,
       viz::mojom::HitTestRegionListPtr hit_test_region_list,
       uint64_t submit_time) override;
   void SetNeedsBeginFrame(bool needs_begin_frame) override;
diff --git a/services/ui/ws/frame_generator.cc b/services/ui/ws/frame_generator.cc
index 362546a..ae3ff74 100644
--- a/services/ui/ws/frame_generator.cc
+++ b/services/ui/ws/frame_generator.cc
@@ -7,7 +7,7 @@
 #include <utility>
 #include <vector>
 
-#include "cc/output/compositor_frame.h"
+#include "components/viz/common/quads/compositor_frame.h"
 #include "components/viz/common/quads/render_pass.h"
 #include "components/viz/common/quads/render_pass_draw_quad.h"
 #include "components/viz/common/quads/shared_quad_state.h"
@@ -99,7 +99,7 @@
   last_begin_frame_args_ = begin_frame_args;
 
   // TODO(fsamuel): We should add a trace for generating a top level frame.
-  cc::CompositorFrame frame(GenerateCompositorFrame());
+  viz::CompositorFrame frame(GenerateCompositorFrame());
   if (!local_surface_id_.is_valid() ||
       frame.size_in_pixels() != last_submitted_frame_size_ ||
       frame.device_scale_factor() != last_device_scale_factor_) {
@@ -114,7 +114,7 @@
   SetNeedsBeginFrame(false);
 }
 
-cc::CompositorFrame FrameGenerator::GenerateCompositorFrame() {
+viz::CompositorFrame FrameGenerator::GenerateCompositorFrame() {
   const int render_pass_id = 1;
   const gfx::Rect bounds(pixel_size_);
   std::unique_ptr<viz::RenderPass> render_pass = viz::RenderPass::Create();
@@ -122,7 +122,7 @@
 
   DrawWindow(render_pass.get());
 
-  cc::CompositorFrame frame;
+  viz::CompositorFrame frame;
   frame.render_pass_list.push_back(std::move(render_pass));
   if (high_contrast_mode_enabled_) {
     std::unique_ptr<viz::RenderPass> invert_pass = viz::RenderPass::Create();
diff --git a/services/ui/ws/frame_generator.h b/services/ui/ws/frame_generator.h
index 1ff10b8..a3fc7e4 100644
--- a/services/ui/ws/frame_generator.h
+++ b/services/ui/ws/frame_generator.h
@@ -53,7 +53,7 @@
   void ReclaimResources(
       const std::vector<viz::ReturnedResource>& resources) override;
 
-  cc::CompositorFrame GenerateCompositorFrame();
+  viz::CompositorFrame GenerateCompositorFrame();
 
   viz::mojom::HitTestRegionListPtr GenerateHitTestRegionList() const;
 
diff --git a/services/ui/ws/frame_generator_unittest.cc b/services/ui/ws/frame_generator_unittest.cc
index 4ee4620..28ed28b 100644
--- a/services/ui/ws/frame_generator_unittest.cc
+++ b/services/ui/ws/frame_generator_unittest.cc
@@ -43,7 +43,7 @@
   // viz::mojom::CompositorFrameSink implementation:
   void SubmitCompositorFrame(
       const viz::LocalSurfaceId& local_surface_id,
-      cc::CompositorFrame frame,
+      viz::CompositorFrame frame,
       viz::mojom::HitTestRegionListPtr hit_test_region_list,
       uint64_t submit_time) override {
     ++frames_submitted_;
@@ -86,7 +86,7 @@
     return last_frame_.render_pass_list;
   }
 
-  const cc::CompositorFrameMetadata& last_metadata() const {
+  const viz::CompositorFrameMetadata& last_metadata() const {
     return last_frame_.metadata;
   }
 
@@ -99,7 +99,7 @@
  private:
   viz::mojom::CompositorFrameSinkClient* sink_client_;
   viz::BeginFrameArgs last_begin_frame_args_;
-  cc::CompositorFrame last_frame_;
+  viz::CompositorFrame last_frame_;
   viz::BeginFrameSource* begin_frame_source_ = nullptr;
   bool observing_begin_frames_ = false;
   int frames_submitted_ = 0;
@@ -156,7 +156,7 @@
     return binding_->last_begin_frame_ack();
   }
 
-  const cc::CompositorFrameMetadata& LastMetadata() const {
+  const viz::CompositorFrameMetadata& LastMetadata() const {
     return binding_->last_metadata();
   }
 
@@ -193,7 +193,7 @@
 
   // Verify that the CompositorFrame refers to the window manager's surface via
   // referenced_surfaces.
-  const cc::CompositorFrameMetadata& last_metadata = LastMetadata();
+  const viz::CompositorFrameMetadata& last_metadata = LastMetadata();
   const std::vector<viz::SurfaceId>& referenced_surfaces =
       last_metadata.referenced_surfaces;
   EXPECT_EQ(1lu, referenced_surfaces.size());
@@ -217,13 +217,13 @@
   frame_generator()->SetDeviceScaleFactor(kDefaultScaleFactor);
   IssueBeginFrame();
   EXPECT_EQ(1, NumberOfFramesReceived());
-  const cc::CompositorFrameMetadata& last_metadata = LastMetadata();
+  const viz::CompositorFrameMetadata& last_metadata = LastMetadata();
   EXPECT_EQ(kDefaultScaleFactor, last_metadata.device_scale_factor);
 
   frame_generator()->SetDeviceScaleFactor(kArbitraryScaleFactor);
   IssueBeginFrame();
   EXPECT_EQ(2, NumberOfFramesReceived());
-  const cc::CompositorFrameMetadata& second_last_metadata = LastMetadata();
+  const viz::CompositorFrameMetadata& second_last_metadata = LastMetadata();
   EXPECT_EQ(kArbitraryScaleFactor, second_last_metadata.device_scale_factor);
 }
 
diff --git a/services/ui/ws/window_tree_client_unittest.cc b/services/ui/ws/window_tree_client_unittest.cc
index 28b2acb7..60401ee 100644
--- a/services/ui/ws/window_tree_client_unittest.cc
+++ b/services/ui/ws/window_tree_client_unittest.cc
@@ -2282,7 +2282,7 @@
     wt2()->AttachCompositorFrameSink(window_1_100_in_ws2,
                                      mojo::MakeRequest(&surface_ptr),
                                      std::move(surface_client_ptr));
-    cc::CompositorFrame compositor_frame;
+    viz::CompositorFrame compositor_frame;
     std::unique_ptr<viz::RenderPass> render_pass = viz::RenderPass::Create();
     gfx::Rect frame_rect(0, 0, 100, 100);
     render_pass->SetNew(1, frame_rect, frame_rect, gfx::Transform());
@@ -2322,7 +2322,7 @@
     wt2()->AttachCompositorFrameSink(window_2_101,
                                      mojo::MakeRequest(&surface_ptr),
                                      std::move(surface_client_ptr));
-    cc::CompositorFrame compositor_frame;
+    viz::CompositorFrame compositor_frame;
     std::unique_ptr<viz::RenderPass> render_pass = viz::RenderPass::Create();
     gfx::Rect frame_rect(0, 0, 100, 100);
     render_pass->SetNew(1, frame_rect, frame_rect, gfx::Transform());
diff --git a/services/viz/public/cpp/compositing/compositor_frame.typemap b/services/viz/public/cpp/compositing/compositor_frame.typemap
index 353a7af..1f865796 100644
--- a/services/viz/public/cpp/compositing/compositor_frame.typemap
+++ b/services/viz/public/cpp/compositing/compositor_frame.typemap
@@ -3,7 +3,7 @@
 # found in the LICENSE file.
 
 mojom = "//services/viz/public/interfaces/compositing/compositor_frame.mojom"
-public_headers = [ "//cc/output/compositor_frame.h" ]
+public_headers = [ "//components/viz/common/quads/compositor_frame.h" ]
 traits_headers =
     [ "//services/viz/public/cpp/compositing/compositor_frame_struct_traits.h" ]
 sources = [
@@ -12,4 +12,4 @@
 deps = [
   "//cc",
 ]
-type_mappings = [ "viz.mojom.CompositorFrame=cc::CompositorFrame[move_only]" ]
+type_mappings = [ "viz.mojom.CompositorFrame=viz::CompositorFrame[move_only]" ]
diff --git a/services/viz/public/cpp/compositing/compositor_frame_for_blink.typemap b/services/viz/public/cpp/compositing/compositor_frame_for_blink.typemap
index 01522616..bd7a79b 100644
--- a/services/viz/public/cpp/compositing/compositor_frame_for_blink.typemap
+++ b/services/viz/public/cpp/compositing/compositor_frame_for_blink.typemap
@@ -3,7 +3,7 @@
 # found in the LICENSE file.
 
 mojom = "//services/viz/public/interfaces/compositing/compositor_frame.mojom"
-public_headers = [ "//cc/output/compositor_frame.h" ]
+public_headers = [ "//components/viz/common/quads/compositor_frame.h" ]
 traits_headers = [
   "//gpu/ipc/common/mailbox_holder_struct_traits.h",
   "//gpu/ipc/common/mailbox_struct_traits.h",
@@ -34,4 +34,4 @@
   "//ui/gfx/mojo",
   "//ui/latency/mojo:interfaces",
 ]
-type_mappings = [ "viz.mojom.CompositorFrame=cc::CompositorFrame[move_only]" ]
+type_mappings = [ "viz.mojom.CompositorFrame=viz::CompositorFrame[move_only]" ]
diff --git a/services/viz/public/cpp/compositing/compositor_frame_metadata.typemap b/services/viz/public/cpp/compositing/compositor_frame_metadata.typemap
index 5fb4760a..1fc9a36 100644
--- a/services/viz/public/cpp/compositing/compositor_frame_metadata.typemap
+++ b/services/viz/public/cpp/compositing/compositor_frame_metadata.typemap
@@ -3,7 +3,7 @@
 # found in the LICENSE file.
 
 mojom = "//services/viz/public/interfaces/compositing/compositor_frame_metadata.mojom"
-public_headers = [ "//cc/output/compositor_frame_metadata.h" ]
+public_headers = [ "//components/viz/common/quads/compositor_frame_metadata.h" ]
 traits_headers = [ "//services/viz/public/cpp/compositing/compositor_frame_metadata_struct_traits.h" ]
 deps = [
   "//components/viz/common",
@@ -11,4 +11,4 @@
 sources = [
   "//services/viz/public/cpp/compositing/compositor_frame_metadata_struct_traits.cc",
 ]
-type_mappings = [ "viz.mojom.CompositorFrameMetadata=cc::CompositorFrameMetadata[move_only]" ]
+type_mappings = [ "viz.mojom.CompositorFrameMetadata=viz::CompositorFrameMetadata[move_only]" ]
diff --git a/services/viz/public/cpp/compositing/compositor_frame_metadata_struct_traits.cc b/services/viz/public/cpp/compositing/compositor_frame_metadata_struct_traits.cc
index 4294c5a6..713cfea1 100644
--- a/services/viz/public/cpp/compositing/compositor_frame_metadata_struct_traits.cc
+++ b/services/viz/public/cpp/compositing/compositor_frame_metadata_struct_traits.cc
@@ -14,9 +14,9 @@
 
 // static
 bool StructTraits<viz::mojom::CompositorFrameMetadataDataView,
-                  cc::CompositorFrameMetadata>::
+                  viz::CompositorFrameMetadata>::
     Read(viz::mojom::CompositorFrameMetadataDataView data,
-         cc::CompositorFrameMetadata* out) {
+         viz::CompositorFrameMetadata* out) {
   out->device_scale_factor = data.device_scale_factor();
   if (!data.ReadRootScrollOffset(&out->root_scroll_offset))
     return false;
diff --git a/services/viz/public/cpp/compositing/compositor_frame_metadata_struct_traits.h b/services/viz/public/cpp/compositing/compositor_frame_metadata_struct_traits.h
index 6b44627..9f7f0cad 100644
--- a/services/viz/public/cpp/compositing/compositor_frame_metadata_struct_traits.h
+++ b/services/viz/public/cpp/compositing/compositor_frame_metadata_struct_traits.h
@@ -7,7 +7,7 @@
 
 #include <vector>
 
-#include "cc/output/compositor_frame_metadata.h"
+#include "components/viz/common/quads/compositor_frame_metadata.h"
 #include "services/viz/public/cpp/compositing/begin_frame_args_struct_traits.h"
 #include "services/viz/public/interfaces/compositing/compositor_frame_metadata.mojom-shared.h"
 
@@ -15,126 +15,126 @@
 
 template <>
 struct StructTraits<viz::mojom::CompositorFrameMetadataDataView,
-                    cc::CompositorFrameMetadata> {
+                    viz::CompositorFrameMetadata> {
   static float device_scale_factor(
-      const cc::CompositorFrameMetadata& metadata) {
+      const viz::CompositorFrameMetadata& metadata) {
     return metadata.device_scale_factor;
   }
 
   static gfx::Vector2dF root_scroll_offset(
-      const cc::CompositorFrameMetadata& metadata) {
+      const viz::CompositorFrameMetadata& metadata) {
     return metadata.root_scroll_offset;
   }
 
-  static float page_scale_factor(const cc::CompositorFrameMetadata& metadata) {
+  static float page_scale_factor(const viz::CompositorFrameMetadata& metadata) {
     return metadata.page_scale_factor;
   }
 
   static gfx::SizeF scrollable_viewport_size(
-      const cc::CompositorFrameMetadata& metadata) {
+      const viz::CompositorFrameMetadata& metadata) {
     return metadata.scrollable_viewport_size;
   }
 
   static gfx::SizeF root_layer_size(
-      const cc::CompositorFrameMetadata& metadata) {
+      const viz::CompositorFrameMetadata& metadata) {
     return metadata.root_layer_size;
   }
 
   static float min_page_scale_factor(
-      const cc::CompositorFrameMetadata& metadata) {
+      const viz::CompositorFrameMetadata& metadata) {
     return metadata.min_page_scale_factor;
   }
 
   static float max_page_scale_factor(
-      const cc::CompositorFrameMetadata& metadata) {
+      const viz::CompositorFrameMetadata& metadata) {
     return metadata.max_page_scale_factor;
   }
 
   static bool root_overflow_x_hidden(
-      const cc::CompositorFrameMetadata& metadata) {
+      const viz::CompositorFrameMetadata& metadata) {
     return metadata.root_overflow_x_hidden;
   }
 
   static bool root_overflow_y_hidden(
-      const cc::CompositorFrameMetadata& metadata) {
+      const viz::CompositorFrameMetadata& metadata) {
     return metadata.root_overflow_y_hidden;
   }
 
-  static bool may_contain_video(const cc::CompositorFrameMetadata& metadata) {
+  static bool may_contain_video(const viz::CompositorFrameMetadata& metadata) {
     return metadata.may_contain_video;
   }
 
   static bool is_resourceless_software_draw_with_scroll_or_animation(
-      const cc::CompositorFrameMetadata& metadata) {
+      const viz::CompositorFrameMetadata& metadata) {
     return metadata.is_resourceless_software_draw_with_scroll_or_animation;
   }
 
   static float top_controls_height(
-      const cc::CompositorFrameMetadata& metadata) {
+      const viz::CompositorFrameMetadata& metadata) {
     return metadata.top_controls_height;
   }
 
   static float top_controls_shown_ratio(
-      const cc::CompositorFrameMetadata& metadata) {
+      const viz::CompositorFrameMetadata& metadata) {
     return metadata.top_controls_shown_ratio;
   }
 
   static float bottom_controls_height(
-      const cc::CompositorFrameMetadata& metadata) {
+      const viz::CompositorFrameMetadata& metadata) {
     return metadata.bottom_controls_height;
   }
 
   static float bottom_controls_shown_ratio(
-      const cc::CompositorFrameMetadata& metadata) {
+      const viz::CompositorFrameMetadata& metadata) {
     return metadata.bottom_controls_shown_ratio;
   }
 
   static uint32_t root_background_color(
-      const cc::CompositorFrameMetadata& metadata) {
+      const viz::CompositorFrameMetadata& metadata) {
     return metadata.root_background_color;
   }
 
-  static const cc::Selection<gfx::SelectionBound>& selection(
-      const cc::CompositorFrameMetadata& metadata) {
+  static const viz::Selection<gfx::SelectionBound>& selection(
+      const viz::CompositorFrameMetadata& metadata) {
     return metadata.selection;
   }
 
   static const std::vector<ui::LatencyInfo>& latency_info(
-      const cc::CompositorFrameMetadata& metadata) {
+      const viz::CompositorFrameMetadata& metadata) {
     return metadata.latency_info;
   }
 
   static const std::vector<viz::SurfaceId>& referenced_surfaces(
-      const cc::CompositorFrameMetadata& metadata) {
+      const viz::CompositorFrameMetadata& metadata) {
     return metadata.referenced_surfaces;
   }
 
   static const std::vector<viz::SurfaceId>& activation_dependencies(
-      const cc::CompositorFrameMetadata& metadata) {
+      const viz::CompositorFrameMetadata& metadata) {
     return metadata.activation_dependencies;
   }
 
   static bool can_activate_before_dependencies(
-      const cc::CompositorFrameMetadata& metadata) {
+      const viz::CompositorFrameMetadata& metadata) {
     return metadata.can_activate_before_dependencies;
   }
 
   static uint32_t content_source_id(
-      const cc::CompositorFrameMetadata& metadata) {
+      const viz::CompositorFrameMetadata& metadata) {
     return metadata.content_source_id;
   }
 
   static const viz::BeginFrameAck& begin_frame_ack(
-      const cc::CompositorFrameMetadata& metadata) {
+      const viz::CompositorFrameMetadata& metadata) {
     return metadata.begin_frame_ack;
   }
 
-  static uint32_t frame_token(const cc::CompositorFrameMetadata& metadata) {
+  static uint32_t frame_token(const viz::CompositorFrameMetadata& metadata) {
     return metadata.frame_token;
   }
 
   static bool Read(viz::mojom::CompositorFrameMetadataDataView data,
-                   cc::CompositorFrameMetadata* out);
+                   viz::CompositorFrameMetadata* out);
 };
 
 }  // namespace mojo
diff --git a/services/viz/public/cpp/compositing/compositor_frame_struct_traits.cc b/services/viz/public/cpp/compositing/compositor_frame_struct_traits.cc
index 6b855435..17cbe99 100644
--- a/services/viz/public/cpp/compositing/compositor_frame_struct_traits.cc
+++ b/services/viz/public/cpp/compositing/compositor_frame_struct_traits.cc
@@ -12,8 +12,8 @@
 namespace mojo {
 
 // static
-bool StructTraits<viz::mojom::CompositorFrameDataView, cc::CompositorFrame>::
-    Read(viz::mojom::CompositorFrameDataView data, cc::CompositorFrame* out) {
+bool StructTraits<viz::mojom::CompositorFrameDataView, viz::CompositorFrame>::
+    Read(viz::mojom::CompositorFrameDataView data, viz::CompositorFrame* out) {
   TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("cc.debug.ipc"),
                "StructTraits::CompositorFrame::Read");
   return data.ReadPasses(&out->render_pass_list) &&
diff --git a/services/viz/public/cpp/compositing/compositor_frame_struct_traits.h b/services/viz/public/cpp/compositing/compositor_frame_struct_traits.h
index 3eae0ef..596770c 100644
--- a/services/viz/public/cpp/compositing/compositor_frame_struct_traits.h
+++ b/services/viz/public/cpp/compositing/compositor_frame_struct_traits.h
@@ -7,30 +7,30 @@
 
 #include <vector>
 
-#include "cc/output/compositor_frame.h"
+#include "components/viz/common/quads/compositor_frame.h"
 #include "services/viz/public/cpp/compositing/transferable_resource_struct_traits.h"
 #include "services/viz/public/interfaces/compositing/compositor_frame.mojom-shared.h"
 
 namespace mojo {
 
 template <>
-struct StructTraits<viz::mojom::CompositorFrameDataView, cc::CompositorFrame> {
-  static const cc::CompositorFrameMetadata& metadata(
-      const cc::CompositorFrame& input) {
+struct StructTraits<viz::mojom::CompositorFrameDataView, viz::CompositorFrame> {
+  static const viz::CompositorFrameMetadata& metadata(
+      const viz::CompositorFrame& input) {
     return input.metadata;
   }
 
   static const std::vector<viz::TransferableResource>& resources(
-      const cc::CompositorFrame& input) {
+      const viz::CompositorFrame& input) {
     return input.resource_list;
   }
 
-  static const viz::RenderPassList& passes(const cc::CompositorFrame& input) {
+  static const viz::RenderPassList& passes(const viz::CompositorFrame& input) {
     return input.render_pass_list;
   }
 
   static bool Read(viz::mojom::CompositorFrameDataView data,
-                   cc::CompositorFrame* out);
+                   viz::CompositorFrame* out);
 };
 
 }  // namespace mojo
diff --git a/services/viz/public/cpp/compositing/selection.typemap b/services/viz/public/cpp/compositing/selection.typemap
index 9091481..61bef1ff 100644
--- a/services/viz/public/cpp/compositing/selection.typemap
+++ b/services/viz/public/cpp/compositing/selection.typemap
@@ -4,9 +4,9 @@
 
 mojom = "//services/viz/public/interfaces/compositing/selection.mojom"
 public_headers = [
-  "//cc/input/selection.h",
+  "//components/viz/common/quads/selection.h",
   "//ui/gfx/selection_bound.h",
 ]
 traits_headers =
     [ "//services/viz/public/cpp/compositing/selection_struct_traits.h" ]
-type_mappings = [ "viz.mojom.Selection=cc::Selection<gfx::SelectionBound>" ]
+type_mappings = [ "viz.mojom.Selection=viz::Selection<gfx::SelectionBound>" ]
diff --git a/services/viz/public/cpp/compositing/selection_struct_traits.h b/services/viz/public/cpp/compositing/selection_struct_traits.h
index 101092f..d02efb6 100644
--- a/services/viz/public/cpp/compositing/selection_struct_traits.h
+++ b/services/viz/public/cpp/compositing/selection_struct_traits.h
@@ -5,7 +5,7 @@
 #ifndef SERVICES_VIZ_PUBLIC_CPP_COMPOSITING_SELECTION_STRUCT_TRAITS_H_
 #define SERVICES_VIZ_PUBLIC_CPP_COMPOSITING_SELECTION_STRUCT_TRAITS_H_
 
-#include "cc/input/selection.h"
+#include "components/viz/common/quads/selection.h"
 #include "services/viz/public/interfaces/compositing/selection.mojom-shared.h"
 #include "ui/gfx/selection_bound.h"
 
@@ -13,19 +13,19 @@
 
 template <>
 struct StructTraits<viz::mojom::SelectionDataView,
-                    cc::Selection<gfx::SelectionBound>> {
+                    viz::Selection<gfx::SelectionBound>> {
   static const gfx::SelectionBound& start(
-      const cc::Selection<gfx::SelectionBound>& selection) {
+      const viz::Selection<gfx::SelectionBound>& selection) {
     return selection.start;
   }
 
   static const gfx::SelectionBound& end(
-      const cc::Selection<gfx::SelectionBound>& selection) {
+      const viz::Selection<gfx::SelectionBound>& selection) {
     return selection.end;
   }
 
   static bool Read(viz::mojom::SelectionDataView data,
-                   cc::Selection<gfx::SelectionBound>* out) {
+                   viz::Selection<gfx::SelectionBound>* out) {
     return data.ReadStart(&out->start) && data.ReadEnd(&out->end);
   }
 };
diff --git a/services/viz/public/cpp/compositing/struct_traits_unittest.cc b/services/viz/public/cpp/compositing/struct_traits_unittest.cc
index 619dfb4f..5f6ceb6 100644
--- a/services/viz/public/cpp/compositing/struct_traits_unittest.cc
+++ b/services/viz/public/cpp/compositing/struct_traits_unittest.cc
@@ -8,8 +8,8 @@
 #include "base/run_loop.h"
 #include "base/test/scoped_task_environment.h"
 #include "build/build_config.h"
-#include "cc/output/compositor_frame.h"
 #include "components/viz/common/frame_sinks/begin_frame_args.h"
+#include "components/viz/common/quads/compositor_frame.h"
 #include "components/viz/common/quads/debug_border_draw_quad.h"
 #include "components/viz/common/quads/render_pass.h"
 #include "components/viz/common/quads/solid_color_draw_quad.h"
@@ -406,10 +406,10 @@
   end.SetEdge(gfx::PointF(1337.5f, 52124.f), gfx::PointF(1234.3f, 8765.6f));
   end.set_visible(false);
   end.set_type(gfx::SelectionBound::RIGHT);
-  cc::Selection<gfx::SelectionBound> input;
+  Selection<gfx::SelectionBound> input;
   input.start = start;
   input.end = end;
-  cc::Selection<gfx::SelectionBound> output;
+  Selection<gfx::SelectionBound> output;
   SerializeAndDeserialize<mojom::Selection>(input, &output);
   EXPECT_EQ(start, output.start);
   EXPECT_EQ(end, output.end);
@@ -518,7 +518,7 @@
   const uint32_t content_source_id = 3;
   const BeginFrameAck begin_frame_ack(5, 10, false);
 
-  cc::CompositorFrame input;
+  CompositorFrame input;
   input.metadata.device_scale_factor = device_scale_factor;
   input.metadata.root_scroll_offset = root_scroll_offset;
   input.metadata.page_scale_factor = page_scale_factor;
@@ -528,7 +528,7 @@
   input.metadata.content_source_id = content_source_id;
   input.metadata.begin_frame_ack = begin_frame_ack;
 
-  cc::CompositorFrame output;
+  CompositorFrame output;
   SerializeAndDeserialize<mojom::CompositorFrame>(input, &output);
 
   EXPECT_EQ(device_scale_factor, output.metadata.device_scale_factor);
@@ -641,7 +641,7 @@
   const float bottom_bar_height(1234.5f);
   const float bottom_bar_shown_ratio(1.0f);
   const uint32_t root_background_color = 1337;
-  cc::Selection<gfx::SelectionBound> selection;
+  Selection<gfx::SelectionBound> selection;
   selection.start.SetEdge(gfx::PointF(1234.5f, 67891.f),
                           gfx::PointF(5432.1f, 1987.6f));
   selection.start.set_visible(true);
@@ -666,7 +666,7 @@
   uint32_t frame_token = 0xdeadbeef;
   uint64_t begin_frame_ack_sequence_number = 0xdeadbeef;
 
-  cc::CompositorFrameMetadata input;
+  CompositorFrameMetadata input;
   input.device_scale_factor = device_scale_factor;
   input.root_scroll_offset = root_scroll_offset;
   input.page_scale_factor = page_scale_factor;
@@ -691,7 +691,7 @@
   input.frame_token = frame_token;
   input.begin_frame_ack.sequence_number = begin_frame_ack_sequence_number;
 
-  cc::CompositorFrameMetadata output;
+  CompositorFrameMetadata output;
   SerializeAndDeserialize<mojom::CompositorFrameMetadata>(input, &output);
   EXPECT_EQ(device_scale_factor, output.device_scale_factor);
   EXPECT_EQ(root_scroll_offset, output.root_scroll_offset);
diff --git a/services/viz/public/interfaces/compositing/compositor_frame.mojom b/services/viz/public/interfaces/compositing/compositor_frame.mojom
index a92717f..6b37fe6 100644
--- a/services/viz/public/interfaces/compositing/compositor_frame.mojom
+++ b/services/viz/public/interfaces/compositing/compositor_frame.mojom
@@ -8,7 +8,7 @@
 import "services/viz/public/interfaces/compositing/render_pass.mojom";
 import "services/viz/public/interfaces/compositing/transferable_resource.mojom";
 
-// See src/cc/output/compositor_frame.h.
+// See src/components/viz/common/quads/compositor_frame.h.
 struct CompositorFrame {
   CompositorFrameMetadata metadata;
   array<TransferableResource> resources;
diff --git a/services/viz/public/interfaces/compositing/compositor_frame_metadata.mojom b/services/viz/public/interfaces/compositing/compositor_frame_metadata.mojom
index 2946fe6f..38208470 100644
--- a/services/viz/public/interfaces/compositing/compositor_frame_metadata.mojom
+++ b/services/viz/public/interfaces/compositing/compositor_frame_metadata.mojom
@@ -10,7 +10,7 @@
 import "ui/latency/mojo/latency_info.mojom";
 import "ui/gfx/geometry/mojo/geometry.mojom";
 
-// See cc/output/compositor_frame_metadata.h.
+// See components/viz/service/quads/compositor_frame_metadata.h.
 struct CompositorFrameMetadata {
   float device_scale_factor;
   gfx.mojom.Vector2dF root_scroll_offset;
diff --git a/services/viz/public/interfaces/compositing/selection.mojom b/services/viz/public/interfaces/compositing/selection.mojom
index 4780ab3..590ca7f81 100644
--- a/services/viz/public/interfaces/compositing/selection.mojom
+++ b/services/viz/public/interfaces/compositing/selection.mojom
@@ -6,7 +6,7 @@
 
 import "ui/gfx/mojo/selection_bound.mojom";
 
-// See cc/input/selection.h.
+// See components/viz/common/quads/selection.h.
 struct Selection {
   gfx.mojom.SelectionBound start;
   gfx.mojom.SelectionBound end;
diff --git a/skia/config/SkUserConfig.h b/skia/config/SkUserConfig.h
index caca874..5e4fcf99 100644
--- a/skia/config/SkUserConfig.h
+++ b/skia/config/SkUserConfig.h
@@ -212,6 +212,10 @@
 #define SK_SUPPORT_LEGACY_DELTA_AA
 #endif
 
+#ifndef SK_SUPPORT_LEGACY_SMALLRECT_AA
+#define SK_SUPPORT_LEGACY_SMALLRECT_AA
+#endif
+
 #ifndef SK_SUPPORT_LEGACY_TILED_BITMAPS
 #define SK_SUPPORT_LEGACY_TILED_BITMAPS
 #endif
diff --git a/testing/buildbot/filters/ash_unittests_mash.filter b/testing/buildbot/filters/ash_unittests_mash.filter
index f82d04c..2f599ed7 100644
--- a/testing/buildbot/filters/ash_unittests_mash.filter
+++ b/testing/buildbot/filters/ash_unittests_mash.filter
@@ -6,6 +6,7 @@
 -FullscreenAppListPresenterDelegateTest.HalfToPeekingByClickOrTap/0
 -FullscreenAppListPresenterDelegateTest.HalfToPeekingByClickOrTap/1
 -FullscreenAppListPresenterDelegateTest.KeyPressEnablesSearchBox
+-FullscreenAppListPresenterDelegateTest.LongUpwardDragInFullscreenShouldNotClose/1
 -FullscreenAppListPresenterDelegateTest.TabletModeTextStateTransitions
 -FullscreenAppListPresenterDelegateTest.PeekingToFullscreenWhenTabletModeIsActive
 -FullscreenAppListPresenterDelegateTest.SideShelfAlignmentTextStateTransitions
diff --git a/testing/buildbot/gn_isolate_map.pyl b/testing/buildbot/gn_isolate_map.pyl
index 1d66062..516c104 100644
--- a/testing/buildbot/gn_isolate_map.pyl
+++ b/testing/buildbot/gn_isolate_map.pyl
@@ -205,7 +205,7 @@
     "type": "console_test_launcher",
   },
   "breakpad_unittests": {
-    "label": "//breakpad:breakpad_unittests",
+    "label": "//third_party/breakpad:breakpad_unittests",
     "type": "console_test_launcher",
   },
   "browser_tests": {
@@ -458,7 +458,7 @@
     "type": "console_test_launcher",
   },
   "dump_syms" : {
-    "label": "//breakpad:dump_syms",
+    "label": "//third_party/breakpad:dump_syms",
     "type": "additional_compile_target",
   },
   "events_unittests": {
@@ -724,7 +724,7 @@
     ],
   },
   "microdump_stackwalk" : {
-    "label": "//breakpad:microdump_stackwalk",
+    "label": "//third_party/breakpad:microdump_stackwalk",
     "type": "additional_compile_target",
   },
   "midi_unittests": {
diff --git a/third_party/.gitignore b/third_party/.gitignore
index e28b33b1..b6b1f611 100644
--- a/third_party/.gitignore
+++ b/third_party/.gitignore
@@ -29,6 +29,7 @@
 /bison
 /boringssl/src
 /bouncycastle/lib/*.jar
+/breakpad/breakpad
 /byte_buddy/lib/*.jar
 /cacheinvalidation/cacheinvalidation_unittests_run.xml
 /cardboard-java/src
diff --git a/third_party/WebKit/LayoutTests/external/WPT_BASE_MANIFEST.json b/third_party/WebKit/LayoutTests/external/WPT_BASE_MANIFEST.json
index 779a4e1..581bc89 100644
--- a/third_party/WebKit/LayoutTests/external/WPT_BASE_MANIFEST.json
+++ b/third_party/WebKit/LayoutTests/external/WPT_BASE_MANIFEST.json
@@ -191109,7 +191109,7 @@
    "support"
   ],
   "./lint.whitelist": [
-   "effe83f73fe9c0d350e646d2b0382b1de0d290cb",
+   "f8fa29a004917798404469476a598e1c37951ea4",
    "support"
   ],
   "./update-built-tests.sh": [
@@ -297973,7 +297973,7 @@
    "support"
   ],
   "webrtc/simplecall.html": [
-   "ce76df05d5866807a4b58c9509ce66efcddaf3d7",
+   "660ee6590039769adc1997679ba12c4995b5a3e6",
    "testharness"
   ],
   "websockets/Close-1000-reason.htm": [
diff --git a/third_party/WebKit/LayoutTests/external/wpt/lint.whitelist b/third_party/WebKit/LayoutTests/external/wpt/lint.whitelist
index bf98b7e..61ba1e3 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/lint.whitelist
+++ b/third_party/WebKit/LayoutTests/external/wpt/lint.whitelist
@@ -375,25 +375,10 @@
 NON-EXISTENT-REF: css/css-masking-1/clip-path-svg-content/clip-path-clip-rule-008.svg
 NON-EXISTENT-REF: css/css-masking-1/clip-path-svg-content/clip-path-precision-001.svg
 NON-EXISTENT-REF: css/css-shapes-1/spec-examples/shape-outside-012.html
-NON-EXISTENT-REF: css/css-text-3/line-breaking/line-breaking-001.html
-NON-EXISTENT-REF: css/css-text-3/line-breaking/line-breaking-002.html
-NON-EXISTENT-REF: css/css-text-3/line-breaking/line-breaking-003.html
-NON-EXISTENT-REF: css/css-text-3/line-breaking/line-breaking-004.html
-NON-EXISTENT-REF: css/css-text-3/line-breaking/line-breaking-005.html
-NON-EXISTENT-REF: css/css-text-3/line-breaking/line-breaking-006.html
-NON-EXISTENT-REF: css/css-text-3/line-breaking/line-breaking-007.html
-NON-EXISTENT-REF: css/css-text-3/line-breaking/line-breaking-008.html
-NON-EXISTENT-REF: css/css-text-3/line-breaking/line-breaking-009.html
-NON-EXISTENT-REF: css/css-text-3/line-breaking/line-breaking-010.html
-NON-EXISTENT-REF: css/css-text-3/line-breaking/line-breaking-011.html
-NON-EXISTENT-REF: css/css-text-3/line-breaking/line-breaking-ic-001.html
-NON-EXISTENT-REF: css/css-text-3/line-breaking/line-breaking-ic-002.html
-NON-EXISTENT-REF: css/css-text-3/line-breaking/line-breaking-ic-003.html
 NON-EXISTENT-REF: css/CSS2/tables/border-collapse-005.html
 NON-EXISTENT-REF: css/mediaqueries-3/relative-units-002.html
 NON-EXISTENT-REF: css/mediaqueries-3/relative-units-003.html
 NON-EXISTENT-REF: css/mediaqueries-3/relative-units-004.html
-SAME-FILE-REF: css/css-multicol-1/multicol-rule-shorthand-2.xht
 
 
 ## Whitespace rules that we can't enforce yet
diff --git a/third_party/WebKit/LayoutTests/external/wpt/webrtc/simplecall.html b/third_party/WebKit/LayoutTests/external/wpt/webrtc/simplecall.html
index bf12e5d..5eb676c 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/webrtc/simplecall.html
+++ b/third_party/WebKit/LayoutTests/external/wpt/webrtc/simplecall.html
@@ -108,15 +108,13 @@
 
   // Returns a suitable error callback.
   function failed(function_name) {
-    return test.step_func(function() {
-      assert_unreached('WebRTC called error callback for ' + function_name);
-    });
+    return test.unreached_func('WebRTC called error callback for ' + function_name);
   }
 
   // This function starts the test.
   test.step(function() {
     navigator.mediaDevices.getUserMedia({ video: true, audio: true })
-      .then(getUserMediaOkCallback, failed('getUserMedia'));
+      .then(test.step_func(getUserMediaOkCallback), failed('getUserMedia'));
   });
 </script>
 
diff --git a/third_party/WebKit/LayoutTests/media/controls/closed-captions-single-track.html b/third_party/WebKit/LayoutTests/media/controls/closed-captions-single-track.html
index 4c58267..554c76fb 100644
--- a/third_party/WebKit/LayoutTests/media/controls/closed-captions-single-track.html
+++ b/third_party/WebKit/LayoutTests/media/controls/closed-captions-single-track.html
@@ -36,6 +36,7 @@
 
       // Captions track should become visible after the closed caption button is pressed.
       checkCaptionsVisible(video, captions);
+      checkButtonHasClass(toggleClosedCaptionsButton(video), "visible");
 
       // Click the closed captions button again and make sure the menu does not appear.
       clickCaptionButton(video);
@@ -43,6 +44,7 @@
 
       // Captions track should become invisible after the closed caption button is pressed.
       checkCaptionsHidden(video);
+      checkButtonNotHasClass(toggleClosedCaptionsButton(video), "visible");
     }));
   });
 
diff --git a/third_party/WebKit/LayoutTests/media/controls/toggle-class-with-state-cast.html b/third_party/WebKit/LayoutTests/media/controls/toggle-class-with-state-cast.html
new file mode 100644
index 0000000..ee37a61
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/media/controls/toggle-class-with-state-cast.html
@@ -0,0 +1,27 @@
+<!DOCTYPE html>
+<html>
+<title>Test that player state is reflected in CSS classes on the cast button.</title>
+<script src="../../resources/testharness.js"></script>
+<script src="../../resources/testharnessreport.js"></script>
+<script src="../media-controls.js"></script>
+<script src="../media-file.js"></script>
+<video controls width=400></video>
+<script>
+async_test(t => {
+  var video = document.querySelector('video');
+
+  video.onloadedmetadata = t.step_func_done(function() {
+    // Pretend we have a cast device.
+    internals.mediaPlayerRemoteRouteAvailabilityChanged(video, true);
+    checkButtonNotHasClass(castButton(video), 'on');
+
+    // Pretend we are casting.
+    internals.mediaPlayerPlayingRemotelyChanged(video, true);
+    checkButtonHasClass(castButton(video), 'on');
+  });
+
+  video.src = findMediaFile("video", "../content/counting");
+  video.play();
+});
+</script>
+</html>
diff --git a/third_party/WebKit/LayoutTests/media/controls/toggle-class-with-state-fullscreen.html b/third_party/WebKit/LayoutTests/media/controls/toggle-class-with-state-fullscreen.html
new file mode 100644
index 0000000..ea43064
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/media/controls/toggle-class-with-state-fullscreen.html
@@ -0,0 +1,30 @@
+<!DOCTYPE html>
+<html>
+<title>Test that player state is reflected in CSS classes on the fullscreen button.</title>
+<script src="../../resources/testharness.js"></script>
+<script src="../../resources/testharnessreport.js"></script>
+<script src="../media-controls.js"></script>
+<script src="../media-file.js"></script>
+<video controls width=400></video>
+<script>
+async_test(t => {
+  var video = document.querySelector('video');
+
+  video.onwebkitfullscreenchange = t.step_func_done(_ => {
+    checkButtonHasClass(fullscreenButton(video), 'fullscreen');
+  });
+
+  document.onclick = t.step_func(_ => {
+    fullscreenButton(video).click();
+  });
+
+  video.onplay = t.step_func(_ => {
+    checkButtonNotHasClass(fullscreenButton(video), 'fullscreen');
+    clickAtCoordinates(1, 1);
+  });
+
+  video.src = findMediaFile("video", "../content/counting");
+  video.play();
+});
+</script>
+</html>
diff --git a/third_party/WebKit/LayoutTests/media/controls/toggle-class-with-state-mute.html b/third_party/WebKit/LayoutTests/media/controls/toggle-class-with-state-mute.html
new file mode 100644
index 0000000..368e445
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/media/controls/toggle-class-with-state-mute.html
@@ -0,0 +1,23 @@
+<!DOCTYPE html>
+<html>
+<title>Test that player state is reflected in CSS classes on the mute button.</title>
+<script src="../../resources/testharness.js"></script>
+<script src="../../resources/testharnessreport.js"></script>
+<script src="../media-controls.js"></script>
+<script src="../media-file.js"></script>
+<video controls width=400></video>
+<script>
+async_test(t => {
+  var video = document.querySelector('video');
+  checkButtonNotHasClass(muteButton(video), 'muted');
+
+  t.step_func(_ => {
+    video.muted = true;
+
+    setTimeout(t.step_func_done(_ => {
+      checkButtonHasClass(muteButton(video), 'muted');
+    }));
+  })();
+});
+</script>
+</html>
diff --git a/third_party/WebKit/LayoutTests/media/controls/toggle-class-with-state-overlay-cast.html b/third_party/WebKit/LayoutTests/media/controls/toggle-class-with-state-overlay-cast.html
new file mode 100644
index 0000000..4cebf33
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/media/controls/toggle-class-with-state-overlay-cast.html
@@ -0,0 +1,27 @@
+<!DOCTYPE html>
+<html>
+<title>Test that player state is reflected in CSS classes on the overlay cast button.</title>
+<script src="../../resources/testharness.js"></script>
+<script src="../../resources/testharnessreport.js"></script>
+<script src="../media-controls.js"></script>
+<script src="../media-file.js"></script>
+<video controls width=400></video>
+<script>
+async_test(t => {
+  var video = document.querySelector('video');
+
+  video.onloadedmetadata = t.step_func_done(function() {
+    // Pretend we have a cast device.
+    internals.mediaPlayerRemoteRouteAvailabilityChanged(video, true);
+    checkButtonNotHasClass(overlayCastButton(video), 'on');
+
+    // Pretend we are casting.
+    internals.mediaPlayerPlayingRemotelyChanged(video, true);
+    checkButtonHasClass(overlayCastButton(video), 'on');
+  });
+
+  video.src = findMediaFile("video", "../content/counting");
+  video.play();
+});
+</script>
+</html>
diff --git a/third_party/WebKit/LayoutTests/media/controls/toggle-class-with-state-pause.html b/third_party/WebKit/LayoutTests/media/controls/toggle-class-with-state-pause.html
new file mode 100644
index 0000000..903f2ab
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/media/controls/toggle-class-with-state-pause.html
@@ -0,0 +1,24 @@
+<!DOCTYPE html>
+<html>
+<title>Test that player state is reflected in CSS classes on the play button.</title>
+<script src="../../resources/testharness.js"></script>
+<script src="../../resources/testharnessreport.js"></script>
+<script src="../media-controls.js"></script>
+<script src="../media-file.js"></script>
+<video controls width=400></video>
+<script>
+async_test(t => {
+  var video = document.querySelector('video');
+
+  video.onplay = t.step_func(_ => {
+    checkButtonNotHasClass(playButton(video), 'pause');
+    video.pause();
+  });
+
+  video.src = findMediaFile("video", "../content/counting");
+  video.play().catch(t.step_func_done(_ => {
+    checkButtonHasClass(playButton(video), 'pause');
+  }));
+});
+</script>
+</html>
diff --git a/third_party/WebKit/LayoutTests/media/media-controls.js b/third_party/WebKit/LayoutTests/media/media-controls.js
index 31c02c6..99c14193 100644
--- a/third_party/WebKit/LayoutTests/media/media-controls.js
+++ b/third_party/WebKit/LayoutTests/media/media-controls.js
@@ -163,6 +163,18 @@
     return false;
 }
 
+function toggleClosedCaptionsButton(videoElement) {
+    return mediaControlsButton(videoElement, 'toggle-closed-captions-button');
+}
+
+function playButton(videoElement) {
+    return mediaControlsButton(videoElement, 'play-button');
+}
+
+function muteButton(videoElement) {
+    return mediaControlsButton(videoElement, 'mute-button');
+}
+
 function clickAtCoordinates(x, y)
 {
     eventSender.mouseMoveTo(x, y);
diff --git a/third_party/WebKit/LayoutTests/platform/linux/media/controls/paint-controls-webkit-appearance-none-custom-bg-expected.png b/third_party/WebKit/LayoutTests/platform/linux/media/controls/paint-controls-webkit-appearance-none-custom-bg-expected.png
index c0d1ed9..3b83dc5 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/media/controls/paint-controls-webkit-appearance-none-custom-bg-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/media/controls/paint-controls-webkit-appearance-none-custom-bg-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/new-remote-playback-pipeline/media/controls/paint-controls-webkit-appearance-none-custom-bg-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/new-remote-playback-pipeline/media/controls/paint-controls-webkit-appearance-none-custom-bg-expected.png
index c0d1ed9..3b83dc5 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/new-remote-playback-pipeline/media/controls/paint-controls-webkit-appearance-none-custom-bg-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/new-remote-playback-pipeline/media/controls/paint-controls-webkit-appearance-none-custom-bg-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/media/video-zoom-controls-expected.png b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/media/video-zoom-controls-expected.png
index f4549b6b..d144fd2 100644
--- a/third_party/WebKit/LayoutTests/platform/mac-mac10.11/media/video-zoom-controls-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac-mac10.11/media/video-zoom-controls-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac-retina/media/video-zoom-controls-expected.png b/third_party/WebKit/LayoutTests/platform/mac-retina/media/video-zoom-controls-expected.png
index f4549b6b..d144fd2 100644
--- a/third_party/WebKit/LayoutTests/platform/mac-retina/media/video-zoom-controls-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac-retina/media/video-zoom-controls-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/media/controls/paint-controls-webkit-appearance-none-custom-bg-expected.png b/third_party/WebKit/LayoutTests/platform/mac/media/controls/paint-controls-webkit-appearance-none-custom-bg-expected.png
index 1ac4141..4b22eea3 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/media/controls/paint-controls-webkit-appearance-none-custom-bg-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac/media/controls/paint-controls-webkit-appearance-none-custom-bg-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/media/controls/video-overlay-cast-dark-rendering-expected.png b/third_party/WebKit/LayoutTests/platform/mac/media/controls/video-overlay-cast-dark-rendering-expected.png
index 65da69a..0e8c2bd 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/media/controls/video-overlay-cast-dark-rendering-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac/media/controls/video-overlay-cast-dark-rendering-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/media/controls/video-overlay-cast-light-rendering-expected.png b/third_party/WebKit/LayoutTests/platform/mac/media/controls/video-overlay-cast-light-rendering-expected.png
index 23d7968..360ea7a 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/media/controls/video-overlay-cast-light-rendering-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac/media/controls/video-overlay-cast-light-rendering-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/video-mute-repaint-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/video-mute-repaint-expected.txt
index d081c42..008c26f 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/video-mute-repaint-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/video-mute-repaint-expected.txt
@@ -61,7 +61,7 @@
           "reason": "full"
         },
         {
-          "object": "LayoutButton INPUT",
+          "object": "LayoutButton INPUT class='muted'",
           "rect": [530, 493, 32, 32],
           "reason": "full"
         }
@@ -86,7 +86,7 @@
       "reason": "geometry"
     },
     {
-      "object": "LayoutButton INPUT",
+      "object": "LayoutButton INPUT class='muted'",
       "reason": "full"
     },
     {
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/new-remote-playback-pipeline/media/controls/paint-controls-webkit-appearance-none-custom-bg-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/new-remote-playback-pipeline/media/controls/paint-controls-webkit-appearance-none-custom-bg-expected.png
index 1ac4141..4b22eea3 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/new-remote-playback-pipeline/media/controls/paint-controls-webkit-appearance-none-custom-bg-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac/virtual/new-remote-playback-pipeline/media/controls/paint-controls-webkit-appearance-none-custom-bg-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/new-remote-playback-pipeline/media/controls/video-overlay-cast-dark-rendering-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/new-remote-playback-pipeline/media/controls/video-overlay-cast-dark-rendering-expected.png
index 65da69a..0e8c2bd 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/new-remote-playback-pipeline/media/controls/video-overlay-cast-dark-rendering-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac/virtual/new-remote-playback-pipeline/media/controls/video-overlay-cast-dark-rendering-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/new-remote-playback-pipeline/media/controls/video-overlay-cast-light-rendering-expected.png b/third_party/WebKit/LayoutTests/platform/mac/virtual/new-remote-playback-pipeline/media/controls/video-overlay-cast-light-rendering-expected.png
index 23d7968..360ea7a 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/new-remote-playback-pipeline/media/controls/video-overlay-cast-light-rendering-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac/virtual/new-remote-playback-pipeline/media/controls/video-overlay-cast-light-rendering-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/media/controls/paint-controls-webkit-appearance-none-custom-bg-expected.png b/third_party/WebKit/LayoutTests/platform/win/media/controls/paint-controls-webkit-appearance-none-custom-bg-expected.png
index c93bd88..a4ebdcf 100644
--- a/third_party/WebKit/LayoutTests/platform/win/media/controls/paint-controls-webkit-appearance-none-custom-bg-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/media/controls/paint-controls-webkit-appearance-none-custom-bg-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/video-mute-repaint-expected.txt b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/video-mute-repaint-expected.txt
index fae52f9..06017f8 100644
--- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/video-mute-repaint-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/video-mute-repaint-expected.txt
@@ -61,7 +61,7 @@
           "reason": "full"
         },
         {
-          "object": "LayoutButton INPUT",
+          "object": "LayoutButton INPUT class='muted'",
           "rect": [530, 493, 32, 32],
           "reason": "full"
         }
@@ -86,7 +86,7 @@
       "reason": "geometry"
     },
     {
-      "object": "LayoutButton INPUT",
+      "object": "LayoutButton INPUT class='muted'",
       "reason": "full"
     },
     {
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/new-remote-playback-pipeline/media/controls/paint-controls-webkit-appearance-none-custom-bg-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/new-remote-playback-pipeline/media/controls/paint-controls-webkit-appearance-none-custom-bg-expected.png
index c93bd88..a4ebdcf 100644
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/new-remote-playback-pipeline/media/controls/paint-controls-webkit-appearance-none-custom-bg-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/virtual/new-remote-playback-pipeline/media/controls/paint-controls-webkit-appearance-none-custom-bg-expected.png
Binary files differ
diff --git a/third_party/WebKit/Source/core/core.gni b/third_party/WebKit/Source/core/core.gni
index 55a7de8..f1f7963 100644
--- a/third_party/WebKit/Source/core/core.gni
+++ b/third_party/WebKit/Source/core/core.gni
@@ -52,7 +52,7 @@
 # "core". This will either be a source_set (component build), a static library
 # (split_count undefined) or a split static library (split_count defined).
 #
-# Special values. All unlisted values are forwarded to the underlying library.
+# Special values (all unlisted values are forwarded to the underlying library):
 #
 #   configs
 #      Normal meaning. The set_defaults call below will make the default value
@@ -69,7 +69,7 @@
 #
 #   deps
 #      Normal meaning but "core:prerequisites" target is always added. Callers
-#      shouldn'y list prerequisites as a dependency.
+#      shouldn't list prerequisites as a dependency.
 #
 #   visibility
 #      Normal meaning if defined. If undefined, defaults to everything in core.
diff --git a/third_party/WebKit/Source/core/layout/ng/layout_ng_block_flow.cc b/third_party/WebKit/Source/core/layout/ng/layout_ng_block_flow.cc
index 8b638e93..435f5f1 100644
--- a/third_party/WebKit/Source/core/layout/ng/layout_ng_block_flow.cc
+++ b/third_party/WebKit/Source/core/layout/ng/layout_ng_block_flow.cc
@@ -130,6 +130,36 @@
   ng_inline_node_data_ = WTF::MakeUnique<NGInlineNodeData>();
 }
 
+// The current fragment from the last layout cycle for this box.
+// When pre-NG layout calls functions of this block flow, fragment and/or
+// LayoutResult are required to compute the result.
+// TODO(kojii): Use the cached result for now, we may need to reconsider as the
+// cache evolves.
+const NGPhysicalFragment* LayoutNGBlockFlow::CurrentFragment() const {
+  if (cached_result_)
+    return cached_result_->PhysicalFragment().Get();
+  return nullptr;
+}
+
+void LayoutNGBlockFlow::AddOverflowFromChildren() {
+  // |ComputeOverflow()| calls this, which is called from
+  // |CopyFragmentDataToLayoutBox()| and |RecalcOverflowAfterStyleChange()|.
+  // Add overflow from the last layout cycle.
+  if (ChildrenInline()) {
+    if (const NGPhysicalFragment* physical_fragment = CurrentFragment()) {
+      // TODO(kojii): If |RecalcOverflowAfterStyleChange()|, we need to
+      // re-compute glyph bounding box. How to detect it and how to re-compute
+      // is TBD.
+      LayoutRect visual_rect = physical_fragment->VisualRect();
+      AddContentsVisualOverflow(visual_rect);
+      // TODO(kojii): The above code computes visual overflow only, we fallback
+      // to LayoutBlock for AddLayoutOverflow() for now. It doesn't compute
+      // correctly without RootInlineBox though.
+    }
+  }
+  LayoutBlockFlow::AddOverflowFromChildren();
+}
+
 LayoutUnit LayoutNGBlockFlow::FirstLineBoxBaseline() const {
   // TODO(kojii): Implement. This will stop working once we stop creating line
   // boxes.
@@ -146,6 +176,8 @@
 RefPtr<NGLayoutResult> LayoutNGBlockFlow::CachedLayoutResult(
     const NGConstraintSpace& constraint_space,
     NGBreakToken* break_token) const {
+  if (!RuntimeEnabledFeatures::LayoutNGFragmentCachingEnabled())
+    return nullptr;
   if (!cached_result_ || break_token || NeedsLayout())
     return nullptr;
   if (constraint_space != *cached_constraint_space_)
@@ -157,8 +189,6 @@
     const NGConstraintSpace& constraint_space,
     NGBreakToken* break_token,
     RefPtr<NGLayoutResult> layout_result) {
-  if (!RuntimeEnabledFeatures::LayoutNGFragmentCachingEnabled())
-    return;
   if (break_token || constraint_space.UnpositionedFloats().size() ||
       layout_result->UnpositionedFloats().size() ||
       layout_result->Status() != NGLayoutResult::kSuccess) {
diff --git a/third_party/WebKit/Source/core/layout/ng/layout_ng_block_flow.h b/third_party/WebKit/Source/core/layout/ng/layout_ng_block_flow.h
index 1498ea8..faad722 100644
--- a/third_party/WebKit/Source/core/layout/ng/layout_ng_block_flow.h
+++ b/third_party/WebKit/Source/core/layout/ng/layout_ng_block_flow.h
@@ -49,9 +49,14 @@
     return physical_root_fragment_;
   }
 
+ protected:
+  void AddOverflowFromChildren() override;
+
  private:
   bool IsOfType(LayoutObjectType) const override;
 
+  const NGPhysicalFragment* CurrentFragment() const;
+
   void UpdateMargins(const NGConstraintSpace&);
 
   std::unique_ptr<NGInlineNodeData> ng_inline_node_data_;
diff --git a/third_party/WebKit/Source/core/layout/ng/ng_block_node.cc b/third_party/WebKit/Source/core/layout/ng/ng_block_node.cc
index cc1c620..2b7eb5b 100644
--- a/third_party/WebKit/Source/core/layout/ng/ng_block_node.cc
+++ b/third_party/WebKit/Source/core/layout/ng/ng_block_node.cc
@@ -302,6 +302,8 @@
           PreviouslyUsedBlockSpace(constraint_space, physical_fragment);
     }
     block->LayoutPositionedObjects(true);
+    // |ComputeOverflow()| below calls |AddOverflowFromChildren()|, which
+    // computes visual overflow from |RootInlineBox| if |ChildrenInline()|.
     block->ComputeOverflow(overflow_size - border_scrollbar_padding.block_end);
   }
 
diff --git a/third_party/WebKit/Source/modules/media_controls/elements/MediaControlCastButtonElement.cpp b/third_party/WebKit/Source/modules/media_controls/elements/MediaControlCastButtonElement.cpp
index 59ab136..36567a5 100644
--- a/third_party/WebKit/Source/modules/media_controls/elements/MediaControlCastButtonElement.cpp
+++ b/third_party/WebKit/Source/modules/media_controls/elements/MediaControlCastButtonElement.cpp
@@ -68,6 +68,7 @@
     }
   }
   UpdateOverflowString();
+  SetClass("on", IsPlayingRemotely());
 }
 
 bool MediaControlCastButtonElement::WillRespondToMouseClickEvents() {
diff --git a/third_party/WebKit/Source/modules/media_controls/elements/MediaControlFullscreenButtonElement.cpp b/third_party/WebKit/Source/modules/media_controls/elements/MediaControlFullscreenButtonElement.cpp
index 8cc17ed..9d2f95e 100644
--- a/third_party/WebKit/Source/modules/media_controls/elements/MediaControlFullscreenButtonElement.cpp
+++ b/third_party/WebKit/Source/modules/media_controls/elements/MediaControlFullscreenButtonElement.cpp
@@ -26,6 +26,7 @@
 void MediaControlFullscreenButtonElement::SetIsFullscreen(bool is_fullscreen) {
   SetDisplayType(is_fullscreen ? kMediaExitFullscreenButton
                                : kMediaEnterFullscreenButton);
+  SetClass("fullscreen", is_fullscreen);
 }
 
 bool MediaControlFullscreenButtonElement::WillRespondToMouseClickEvents() {
diff --git a/third_party/WebKit/Source/modules/media_controls/elements/MediaControlInputElement.cpp b/third_party/WebKit/Source/modules/media_controls/elements/MediaControlInputElement.cpp
index e01431c..198a0e9 100644
--- a/third_party/WebKit/Source/modules/media_controls/elements/MediaControlInputElement.cpp
+++ b/third_party/WebKit/Source/modules/media_controls/elements/MediaControlInputElement.cpp
@@ -4,6 +4,7 @@
 
 #include "modules/media_controls/elements/MediaControlInputElement.h"
 
+#include "core/dom/DOMTokenList.h"
 #include "core/dom/events/Event.h"
 #include "core/html/HTMLLabelElement.h"
 #include "core/html/HTMLMediaElement.h"
@@ -178,6 +179,14 @@
   ctr_histogram.Count(static_cast<int>(event));
 }
 
+void MediaControlInputElement::SetClass(const AtomicString& class_name,
+                                        bool should_have_class) {
+  if (should_have_class)
+    classList().Add(class_name);
+  else
+    classList().Remove(class_name);
+}
+
 DEFINE_TRACE(MediaControlInputElement) {
   HTMLInputElement::Trace(visitor);
   MediaControlElementBase::Trace(visitor);
diff --git a/third_party/WebKit/Source/modules/media_controls/elements/MediaControlInputElement.h b/third_party/WebKit/Source/modules/media_controls/elements/MediaControlInputElement.h
index 9dca441..528035a3 100644
--- a/third_party/WebKit/Source/modules/media_controls/elements/MediaControlInputElement.h
+++ b/third_party/WebKit/Source/modules/media_controls/elements/MediaControlInputElement.h
@@ -59,6 +59,9 @@
   // Returns whether this element is used for the overflow menu.
   bool IsOverflowElement() const;
 
+  // Sets/removes a CSS class from this element based on |should_have_class|.
+  void SetClass(const AtomicString& class_name, bool should_have_class);
+
  private:
   friend class MediaControlInputElementTest;
 
diff --git a/third_party/WebKit/Source/modules/media_controls/elements/MediaControlMuteButtonElement.cpp b/third_party/WebKit/Source/modules/media_controls/elements/MediaControlMuteButtonElement.cpp
index c12eaeb..d9890ec8 100644
--- a/third_party/WebKit/Source/modules/media_controls/elements/MediaControlMuteButtonElement.cpp
+++ b/third_party/WebKit/Source/modules/media_controls/elements/MediaControlMuteButtonElement.cpp
@@ -28,9 +28,9 @@
   // TODO(mlamouri): checking for volume == 0 because the mute button will look
   // 'muted' when the volume is 0 even if the element is not muted. This allows
   // the painting and the display type to actually match.
-  SetDisplayType((MediaElement().muted() || MediaElement().volume() == 0)
-                     ? kMediaUnMuteButton
-                     : kMediaMuteButton);
+  bool muted = MediaElement().muted() || MediaElement().volume() == 0;
+  SetDisplayType(muted ? kMediaUnMuteButton : kMediaMuteButton);
+  SetClass("muted", muted);
   UpdateOverflowString();
 }
 
diff --git a/third_party/WebKit/Source/modules/media_controls/elements/MediaControlPlayButtonElement.cpp b/third_party/WebKit/Source/modules/media_controls/elements/MediaControlPlayButtonElement.cpp
index 6bd48224..fa96c1b 100644
--- a/third_party/WebKit/Source/modules/media_controls/elements/MediaControlPlayButtonElement.cpp
+++ b/third_party/WebKit/Source/modules/media_controls/elements/MediaControlPlayButtonElement.cpp
@@ -28,6 +28,7 @@
 void MediaControlPlayButtonElement::UpdateDisplayType() {
   SetDisplayType(MediaElement().paused() ? kMediaPlayButton
                                          : kMediaPauseButton);
+  SetClass("pause", MediaElement().paused());
   UpdateOverflowString();
 }
 
diff --git a/third_party/WebKit/Source/modules/media_controls/elements/MediaControlToggleClosedCaptionsButtonElement.cpp b/third_party/WebKit/Source/modules/media_controls/elements/MediaControlToggleClosedCaptionsButtonElement.cpp
index 6d17362a..1a8b828 100644
--- a/third_party/WebKit/Source/modules/media_controls/elements/MediaControlToggleClosedCaptionsButtonElement.cpp
+++ b/third_party/WebKit/Source/modules/media_controls/elements/MediaControlToggleClosedCaptionsButtonElement.cpp
@@ -31,6 +31,7 @@
   bool captions_visible = MediaElement().TextTracksVisible();
   SetDisplayType(captions_visible ? kMediaHideClosedCaptionsButton
                                   : kMediaShowClosedCaptionsButton);
+  SetClass("visible", captions_visible);
 }
 
 WebLocalizedString::Name
diff --git a/third_party/WebKit/Source/modules/media_controls/resources/mediaControls.css b/third_party/WebKit/Source/modules/media_controls/resources/mediaControls.css
index b42970b..f1e9beb 100644
--- a/third_party/WebKit/Source/modules/media_controls/resources/mediaControls.css
+++ b/third_party/WebKit/Source/modules/media_controls/resources/mediaControls.css
@@ -107,7 +107,12 @@
 }
 
 audio::-webkit-media-controls-mute-button, video::-webkit-media-controls-mute-button {
-    -webkit-appearance: media-mute-button;
+    -webkit-appearance: -internal-media-control;
+    background-image: -webkit-image-set(
+      url(default_100_percent/mediaplayer_sound_not_muted.png) 1x);
+    background-size: 32px;
+    background-repeat: no-repeat;
+    background-position: center center;
     display: flex;
     flex: none;
     box-sizing: border-box;
@@ -119,6 +124,12 @@
     color: inherit;
 }
 
+audio::-webkit-media-controls-mute-button.muted,
+video::-webkit-media-controls-mute-button.muted {
+    background-image: -webkit-image-set(
+      url(default_100_percent/mediaplayer_sound_muted.png) 1x);
+}
+
 audio::-webkit-media-controls-overlay-enclosure {
     display: none;
 }
@@ -141,7 +152,12 @@
 }
 
 video::-webkit-media-controls-overlay-play-button {
-    -webkit-appearance: media-overlay-play-button;
+    -webkit-appearance: -internal-media-control;
+    background-image: -webkit-image-set(
+      url(default_100_percent/mediaplayer_overlay_play.png) 1x);
+    background-size: 48px;
+    background-repeat: no-repeat;
+    background-position: center center;
     display: flex;
     position: absolute;
     top: 0;
@@ -186,7 +202,13 @@
 }
 
 video::-internal-media-remoting-cast-icon {
-    -webkit-appearance: -internal-media-remoting-cast-icon;
+    -webkit-appearance: none;
+    background-image: -webkit-image-set(
+      url(default_100_percent/mediaremoting_cast.png) 1x,
+      url(default_200_percent/mediaremoting_cast.png) 2x);
+    background-size: 32px;
+    background-repeat: no-repeat;
+    background-position: center center;
     display: flex;
     position: absolute;
     margin: 0px;
@@ -243,7 +265,12 @@
 }
 
 video::-internal-media-controls-overlay-cast-button {
-    -webkit-appearance: -internal-media-overlay-cast-off-button;
+    -webkit-appearance: none;
+    background-image: -webkit-image-set(
+      url(default_100_percent/mediaplayer_overlay_cast_off.png) 1x);
+    background-size: cover;
+    background-repeat: no-repeat;
+    background-position: center center;
     display: flex;
     position: absolute;
     top: 8px;
@@ -258,8 +285,18 @@
     transition: opacity 0.3s;
 }
 
+video::-internal-media-controls-overlay-cast-button.on {
+    background-image: -webkit-image-set(
+      url(default_100_percent/mediaplayer_overlay_cast_on.png) 1x);
+}
+
 audio::-webkit-media-controls-play-button, video::-webkit-media-controls-play-button {
-    -webkit-appearance: media-play-button;
+    -webkit-appearance: -internal-media-control;
+    background-image: -webkit-image-set(
+      url(default_100_percent/mediaplayer_pause.png) 1x);
+    background-size: 32px;
+    background-repeat: no-repeat;
+    background-position: center center;
     display: flex;
     flex: none;
     box-sizing: border-box;
@@ -271,6 +308,12 @@
     color: inherit;
 }
 
+audio::-webkit-media-controls-play-button.pause,
+video::-webkit-media-controls-play-button.pause {
+  background-image: -webkit-image-set(
+      url(default_100_percent/mediaplayer_play.png) 1x);
+}
+
 audio::-webkit-media-controls-timeline-container, video::-webkit-media-controls-timeline-container {
     -webkit-appearance: media-controls-background;
     display: flex;
@@ -398,7 +441,12 @@
 }
 
 audio::-webkit-media-controls-fullscreen-button, video::-webkit-media-controls-fullscreen-button {
-    -webkit-appearance: media-enter-fullscreen-button;
+    -webkit-appearance: -internal-media-control;
+    background-image: -webkit-image-set(
+      url(default_100_percent/mediaplayer_enter_fullscreen.png) 1x);
+    background-size: 32px;
+    background-repeat: no-repeat;
+    background-position: center center;
     display: flex;
     flex: none;
     overflow: hidden;
@@ -411,8 +459,19 @@
     color: inherit;
 }
 
+audio::-webkit-media-controls-fullscreen-button.fullscreen,
+video::-webkit-media-controls-fullscreen-button.fullscreen {
+    background-image: -webkit-image-set(
+      url(default_100_percent/mediaplayer_exit_fullscreen.png) 1x);
+}
+
 audio::-internal-media-controls-cast-button, video::-internal-media-controls-cast-button {
-    -webkit-appearance: -internal-media-cast-off-button;
+    -webkit-appearance: none;
+    background-image: -webkit-image-set(
+      url(default_100_percent/mediaplayer_cast_off.png) 1x);
+    background-size: 32px;
+    background-repeat: no-repeat;
+    background-position: center center;
     display: flex;
     flex: none;
     box-sizing: border-box;
@@ -426,12 +485,23 @@
     color: inherit;
 }
 
+audio::-internal-media-controls-cast-button.on,
+video::-internal-media-controls-cast-button.on {
+    background-image: -webkit-image-set(
+      url(default_100_percent/mediaplayer_cast_on.png) 1x);
+}
+
 audio::-webkit-media-controls-toggle-closed-captions-button {
     display: none;
 }
 
 video::-webkit-media-controls-toggle-closed-captions-button {
-    -webkit-appearance: media-toggle-closed-captions-button;
+    -webkit-appearance: -internal-media-control;
+    background-image: -webkit-image-set(
+      url(default_100_percent/mediaplayer_closedcaption_disabled.png) 1x);
+    background-size: 32px;
+    background-repeat: no-repeat;
+    background-position: center center;
     display: flex;
     flex: none;
     box-sizing: border-box;
@@ -445,6 +515,11 @@
     color: inherit;
 }
 
+video::-webkit-media-controls-toggle-closed-captions-button.visible {
+    background-image: -webkit-image-set(
+      url(default_100_percent/mediaplayer_closedcaption.png) 1x);
+}
+
 video::-internal-media-controls-text-track-list, video::-internal-media-controls-overflow-menu-list, audio::-internal-media-controls-overflow-menu-list {
     position: fixed;
     background-color: #fafafa;
@@ -475,7 +550,12 @@
 }
 
 video::-internal-media-controls-text-track-list-item-input {
-    -webkit-appearance: -internal-media-track-selection-checkmark;
+    -webkit-appearance: none;
+    background-image: -webkit-image-set(
+      url(default_100_percent/mediaplayer_trackselection_checkmark.png) 1x);
+    background-size: 32px;
+    background-repeat: no-repeat;
+    background-position: center center;
     visibility: hidden;
     left: 0;
     vertical-align: middle;
@@ -490,7 +570,12 @@
 }
 
 video::-internal-media-controls-text-track-list-kind-captions {
-    -webkit-appearance: -internal-media-closed-captions-icon;
+    -webkit-appearance: none;
+    background-image: -webkit-image-set(
+      url(default_100_percent/mediaplayer_closedcaptions_icon.png) 1x);
+    background-size: 32px;
+    background-repeat: no-repeat;
+    background-position: center center;
     height: 20px;
     width: 20px;
     margin-left: 10px;
@@ -498,7 +583,12 @@
 }
 
 video::-internal-media-controls-text-track-list-kind-subtitles {
-    -webkit-appearance: -internal-media-subtitles-icon;
+    -webkit-appearance: none;
+    background-image: -webkit-image-set(
+      url(default_100_percent/mediaplayer_subtitles_icon.png) 1x);
+    background-size: 32px;
+    background-repeat: no-repeat;
+    background-position: center center;
     height: 20px;
     width: 20px;
     margin-left: 10px;
@@ -506,7 +596,12 @@
 }
 
 video::-internal-media-controls-overflow-button, audio::-internal-media-controls-overflow-button {
-    -webkit-appearance: -internal-media-overflow-button;
+    -webkit-appearance: none;
+    background-image: -webkit-image-set(
+      url(default_100_percent/mediaplayer_overflow_menu.png) 1x);
+    background-size: 32px;
+    background-repeat: no-repeat;
+    background-position: center center;
     display: flex;
     flex: none;
     box-sizing: border-box;
@@ -521,7 +616,12 @@
 }
 
 video::-internal-media-controls-download-button, audio::-internal-media-controls-download-button {
-    -webkit-appearance: -internal-media-download-button;
+    -webkit-appearance: none;
+    background-image: -webkit-image-set(
+      url(default_100_percent/mediaplayer_download.png) 1x);
+    background-size: 32px;
+    background-repeat: no-repeat;
+    background-position: center center;
     display: flex;
     flex: none;
     box-sizing: border-box;
@@ -624,3 +724,11 @@
 video::cue(i) {
     font-style: italic;
 }
+
+.state-no-source input[pseudo="-webkit-media-controls-play-button"],
+.state-no-source input[pseudo="-webkit-media-controls-mute-button"],
+.state-no-source input[pseudo="-webkit-media-controls-overlay-play-button"],
+.state-no-source input[pseudo="-webkit-media-controls-fullscreen-button"],
+.state-no-source input[pseudo="-internal-media-controls-download-button"] {
+    opacity: 0.4;
+}
diff --git a/third_party/WebKit/Source/modules/media_controls/resources/media_controls_resources.grd b/third_party/WebKit/Source/modules/media_controls/resources/media_controls_resources.grd
index ec3c11b..c0e1c82 100644
--- a/third_party/WebKit/Source/modules/media_controls/resources/media_controls_resources.grd
+++ b/third_party/WebKit/Source/modules/media_controls/resources/media_controls_resources.grd
@@ -30,10 +30,10 @@
       <structure type="chrome_scaled_image" name="IDR_MEDIAPLAYER_OVERFLOW_MENU_ICON" file="mediaplayer_overflow_menu.png" />
       <structure type="chrome_scaled_image" name="IDR_MEDIAPLAYER_DOWNLOAD_ICON" file="mediaplayer_download.png" />
       <structure type="chrome_scaled_image" name="IDR_MEDIAPLAYER_SUBTITLES_ICON" file="mediaplayer_subtitles_icon.png" />
+      <structure type="chrome_html" name="IDR_UASTYLE_MEDIA_CONTROLS_CSS" file="mediaControls.css" flattenhtml="true" />
     </structures>
     <includes>
-      <include name="IDR_UASTYLE_MEDIA_CONTROLS_ANDROID_CSS" file="mediaControlsAndroid.css" type="chrome_html" compress="gzip" />
-      <include name="IDR_UASTYLE_MEDIA_CONTROLS_CSS" file="mediaControls.css" type="chrome_html" compress="gzip" />
+      <include name="IDR_UASTYLE_MEDIA_CONTROLS_ANDROID_CSS" file="mediaControlsAndroid.css" type="BINDATA" compress="gzip" />
     </includes>
   </release>
 </grit>
diff --git a/third_party/WebKit/Source/platform/graphics/Canvas2DLayerBridge.cpp b/third_party/WebKit/Source/platform/graphics/Canvas2DLayerBridge.cpp
index 9045a23..0fbf455 100644
--- a/third_party/WebKit/Source/platform/graphics/Canvas2DLayerBridge.cpp
+++ b/third_party/WebKit/Source/platform/graphics/Canvas2DLayerBridge.cpp
@@ -258,15 +258,16 @@
 
 bool Canvas2DLayerBridge::ShouldAccelerate(AccelerationHint hint) const {
   bool accelerate;
-  if (software_rendering_while_hidden_)
+  if (software_rendering_while_hidden_) {
     accelerate = false;
-  else if (acceleration_mode_ == kForceAccelerationForTesting)
+  } else if (acceleration_mode_ == kForceAccelerationForTesting) {
     accelerate = true;
-  else if (acceleration_mode_ == kDisableAcceleration)
+  } else if (acceleration_mode_ == kDisableAcceleration) {
     accelerate = false;
-  else
+  } else {
     accelerate = hint == kPreferAcceleration ||
                  hint == kPreferAccelerationAfterVisibilityChange;
+  }
 
   if (accelerate && (!context_provider_wrapper_ ||
                      context_provider_wrapper_->ContextProvider()
@@ -634,11 +635,12 @@
     if (surface_is_accelerated) {
       logger_->ReportHibernationEvent(kHibernationEndedNormally);
     } else {
-      if (IsHidden())
+      if (IsHidden()) {
         logger_->ReportHibernationEvent(
             kHibernationEndedWithSwitchToBackgroundRendering);
-      else
+      } else {
         logger_->ReportHibernationEvent(kHibernationEndedWithFallbackToSW);
+      }
     }
 
     SkPaint copy_paint;
@@ -1037,9 +1039,9 @@
   }
 
   if (RuntimeEnabledFeatures::Canvas2dImageChromiumEnabled()) {
-    RefPtr<ImageInfo> info = released_mailbox_info->image_info_;
-    if (info && !lost_resource) {
-      if (context_or_layer_bridge_lost) {
+    RefPtr<ImageInfo>& info = released_mailbox_info->image_info_;
+    if (info) {
+      if (lost_resource || context_or_layer_bridge_lost) {
         DeleteCHROMIUMImage(context_provider_wrapper,
                             std::move(info->gpu_memory_buffer_),
                             info->image_id_, info->texture_id_);
diff --git a/third_party/WebKit/Source/platform/graphics/OffscreenCanvasFrameDispatcherImpl.cpp b/third_party/WebKit/Source/platform/graphics/OffscreenCanvasFrameDispatcherImpl.cpp
index f7ab0ae..0cb0bd1 100644
--- a/third_party/WebKit/Source/platform/graphics/OffscreenCanvasFrameDispatcherImpl.cpp
+++ b/third_party/WebKit/Source/platform/graphics/OffscreenCanvasFrameDispatcherImpl.cpp
@@ -4,7 +4,7 @@
 
 #include "platform/graphics/OffscreenCanvasFrameDispatcherImpl.h"
 
-#include "cc/output/compositor_frame.h"
+#include "components/viz/common/quads/compositor_frame.h"
 #include "components/viz/common/quads/texture_draw_quad.h"
 #include "components/viz/common/resources/resource_format.h"
 #include "platform/CrossThreadFunctional.h"
@@ -119,7 +119,7 @@
     PostImageToPlaceholder(std::move(image));
     return;
   }
-  cc::CompositorFrame frame;
+  viz::CompositorFrame frame;
   // TODO(crbug.com/652931): update the device_scale_factor
   frame.metadata.device_scale_factor = 1.0f;
   if (current_begin_frame_ack_.sequence_number ==
diff --git a/third_party/WebKit/Source/platform/graphics/VideoFrameSubmitter.cpp b/third_party/WebKit/Source/platform/graphics/VideoFrameSubmitter.cpp
index 61bb473..15d8f89a 100644
--- a/third_party/WebKit/Source/platform/graphics/VideoFrameSubmitter.cpp
+++ b/third_party/WebKit/Source/platform/graphics/VideoFrameSubmitter.cpp
@@ -70,7 +70,7 @@
   if (!provider_)
     return;
 
-  cc::CompositorFrame compositor_frame;
+  viz::CompositorFrame compositor_frame;
   scoped_refptr<media::VideoFrame> video_frame = provider_->GetCurrentFrame();
 
   std::unique_ptr<viz::RenderPass> render_pass = viz::RenderPass::Create();
diff --git a/third_party/WebKit/Source/platform/graphics/VideoFrameSubmitterTest.cpp b/third_party/WebKit/Source/platform/graphics/VideoFrameSubmitterTest.cpp
index 4546b367a..2ac0bf78 100644
--- a/third_party/WebKit/Source/platform/graphics/VideoFrameSubmitterTest.cpp
+++ b/third_party/WebKit/Source/platform/graphics/VideoFrameSubmitterTest.cpp
@@ -48,13 +48,13 @@
 
   void SubmitCompositorFrame(
       const viz::LocalSurfaceId& id,
-      cc::CompositorFrame frame,
+      viz::CompositorFrame frame,
       ::viz::mojom::blink::HitTestRegionListPtr hit_test_region_list,
       uint64_t submit_time) {
     DoSubmitCompositorFrame(id, &frame);
   }
   MOCK_METHOD2(DoSubmitCompositorFrame,
-               void(const viz::LocalSurfaceId&, cc::CompositorFrame*));
+               void(const viz::LocalSurfaceId&, viz::CompositorFrame*));
   MOCK_METHOD1(DidNotProduceFrame, void(const viz::BeginFrameAck&));
 
  private:
diff --git a/third_party/breakpad/BUILD.gn b/third_party/breakpad/BUILD.gn
new file mode 100644
index 0000000..6d77030
--- /dev/null
+++ b/third_party/breakpad/BUILD.gn
@@ -0,0 +1,988 @@
+# Copyright 2014 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+import("//build/symlink.gni")
+import("//testing/libfuzzer/fuzzer_test.gni")
+import("//testing/test.gni")
+
+if (is_win) {
+  import("//build/config/win/visual_studio_version.gni")
+}
+
+config("tools_config") {
+  include_dirs = [
+    "breakpad/src",
+    "breakpad/src/third_party",
+  ]
+  if (is_android) {
+    defines = [ "__ANDROID__" ]
+  }
+  if (is_clang) {
+    cflags = [ "-Wno-tautological-constant-out-of-range-compare" ]
+  }
+}
+
+config("internal_config") {
+  include_dirs = [ "breakpad/src" ]
+  defines = []
+  if (is_debug) {
+    # This is needed for GTMLogger to work correctly.
+    defines += [ "DEBUG" ]
+  }
+  if (is_android) {
+    defines += [ "__ANDROID__" ]
+  }
+}
+
+config("client_config") {
+  include_dirs = [ "breakpad/src" ]
+  if (is_android) {
+    include_dirs += [ "breakpad/src/common/android/include" ]
+  }
+  if (is_chromeos) {
+    defines = [ "__CHROMEOS__" ]
+  }
+}
+
+config("handler_config") {
+  include_dirs = [ "breakpad/src" ]
+}
+
+config("sender_config") {
+  include_dirs = [ "breakpad/src" ]
+}
+
+config("breakpad_unittest_config") {
+  # One of the breakpad unit tests test that we can detect the proper build-id.
+  # We must override the build-id for this one target.
+  ldflags = [ "-Wl,--build-id=0x000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f" ]
+}
+
+# {micro,mini}dump_stackwalk and minidump_dump are tool-type executables
+# that do not build on Windows.
+if (!is_win) {
+  if (current_toolchain == host_toolchain) {
+    # Contains the code shared by both {micro,mini}dump_stackwalk.
+    static_library("stackwalk_common") {
+      # Always want these files included regardless of platform.
+      set_sources_assignment_filter([])
+      sources = [
+        "breakpad/src/processor/basic_code_module.h",
+        "breakpad/src/processor/basic_code_modules.cc",
+        "breakpad/src/processor/basic_code_modules.h",
+        "breakpad/src/processor/basic_source_line_resolver.cc",
+        "breakpad/src/processor/call_stack.cc",
+        "breakpad/src/processor/cfi_frame_info.cc",
+        "breakpad/src/processor/cfi_frame_info.h",
+        "breakpad/src/processor/disassembler_x86.cc",
+        "breakpad/src/processor/disassembler_x86.h",
+        "breakpad/src/processor/dump_context.cc",
+        "breakpad/src/processor/dump_object.cc",
+        "breakpad/src/processor/logging.cc",
+        "breakpad/src/processor/logging.h",
+        "breakpad/src/processor/pathname_stripper.cc",
+        "breakpad/src/processor/pathname_stripper.h",
+        "breakpad/src/processor/proc_maps_linux.cc",
+        "breakpad/src/processor/process_state.cc",
+        "breakpad/src/processor/simple_symbol_supplier.cc",
+        "breakpad/src/processor/simple_symbol_supplier.h",
+        "breakpad/src/processor/source_line_resolver_base.cc",
+        "breakpad/src/processor/stack_frame_cpu.cc",
+        "breakpad/src/processor/stack_frame_symbolizer.cc",
+        "breakpad/src/processor/stackwalk_common.cc",
+        "breakpad/src/processor/stackwalker.cc",
+        "breakpad/src/processor/stackwalker_amd64.cc",
+        "breakpad/src/processor/stackwalker_amd64.h",
+        "breakpad/src/processor/stackwalker_arm.cc",
+        "breakpad/src/processor/stackwalker_arm.h",
+        "breakpad/src/processor/stackwalker_arm64.cc",
+        "breakpad/src/processor/stackwalker_arm64.h",
+        "breakpad/src/processor/stackwalker_mips.cc",
+        "breakpad/src/processor/stackwalker_mips.h",
+        "breakpad/src/processor/stackwalker_ppc.cc",
+        "breakpad/src/processor/stackwalker_ppc.h",
+        "breakpad/src/processor/stackwalker_ppc64.cc",
+        "breakpad/src/processor/stackwalker_ppc64.h",
+        "breakpad/src/processor/stackwalker_sparc.cc",
+        "breakpad/src/processor/stackwalker_sparc.h",
+        "breakpad/src/processor/stackwalker_x86.cc",
+        "breakpad/src/processor/stackwalker_x86.h",
+        "breakpad/src/processor/tokenize.cc",
+        "breakpad/src/processor/tokenize.h",
+
+        # libdisasm
+        "breakpad/src/third_party/libdisasm/ia32_implicit.c",
+        "breakpad/src/third_party/libdisasm/ia32_implicit.h",
+        "breakpad/src/third_party/libdisasm/ia32_insn.c",
+        "breakpad/src/third_party/libdisasm/ia32_insn.h",
+        "breakpad/src/third_party/libdisasm/ia32_invariant.c",
+        "breakpad/src/third_party/libdisasm/ia32_invariant.h",
+        "breakpad/src/third_party/libdisasm/ia32_modrm.c",
+        "breakpad/src/third_party/libdisasm/ia32_modrm.h",
+        "breakpad/src/third_party/libdisasm/ia32_opcode_tables.c",
+        "breakpad/src/third_party/libdisasm/ia32_opcode_tables.h",
+        "breakpad/src/third_party/libdisasm/ia32_operand.c",
+        "breakpad/src/third_party/libdisasm/ia32_operand.h",
+        "breakpad/src/third_party/libdisasm/ia32_reg.c",
+        "breakpad/src/third_party/libdisasm/ia32_reg.h",
+        "breakpad/src/third_party/libdisasm/ia32_settings.c",
+        "breakpad/src/third_party/libdisasm/ia32_settings.h",
+        "breakpad/src/third_party/libdisasm/libdis.h",
+        "breakpad/src/third_party/libdisasm/qword.h",
+        "breakpad/src/third_party/libdisasm/x86_disasm.c",
+        "breakpad/src/third_party/libdisasm/x86_format.c",
+        "breakpad/src/third_party/libdisasm/x86_imm.c",
+        "breakpad/src/third_party/libdisasm/x86_imm.h",
+        "breakpad/src/third_party/libdisasm/x86_insn.c",
+        "breakpad/src/third_party/libdisasm/x86_misc.c",
+        "breakpad/src/third_party/libdisasm/x86_operand_list.c",
+        "breakpad/src/third_party/libdisasm/x86_operand_list.h",
+      ]
+
+      defines = [ "BPLOG_MINIMUM_SEVERITY=SEVERITY_ERROR" ]
+
+      configs -= [ "//build/config/compiler:chromium_code" ]
+      configs += [ "//build/config/compiler:no_chromium_code" ]
+      configs += [ ":tools_config" ]
+    }
+
+    fuzzer_test("minidump_fuzzer") {
+      sources = [
+        "breakpad/src/processor/exploitability.cc",
+        "breakpad/src/processor/minidump.cc",
+        "breakpad/src/processor/minidump_processor.cc",
+        "minidump_fuzzer.cc",
+      ]
+
+      deps = [
+        ":stackwalk_common",
+        "//base",
+      ]
+
+      defines = [ "BPLOG_MINIMUM_SEVERITY=SEVERITY_ERROR" ]
+      include_dirs = [ "breakpad/src" ]
+      dict = "minidump_fuzzer.dict"
+
+      libfuzzer_options = [
+        "close_fd_mask=3",
+        "max_len=128000",
+      ]
+
+      # Always want these files included regardless of platform.
+      set_sources_assignment_filter([])
+      sources += [
+        "breakpad/src/processor/exploitability_linux.cc",
+        "breakpad/src/processor/exploitability_linux.h",
+        "breakpad/src/processor/exploitability_win.cc",
+        "breakpad/src/processor/exploitability_win.h",
+        "breakpad/src/processor/symbolic_constants_win.cc",
+        "breakpad/src/processor/symbolic_constants_win.h",
+      ]
+    }
+
+    executable("microdump_stackwalk") {
+      sources = [
+        "breakpad/src/processor/microdump.cc",
+        "breakpad/src/processor/microdump_processor.cc",
+        "breakpad/src/processor/microdump_stackwalk.cc",
+      ]
+
+      deps = [
+        ":stackwalk_common",
+        "//build/config:exe_and_shlib_deps",
+      ]
+
+      defines = [ "BPLOG_MINIMUM_SEVERITY=SEVERITY_ERROR" ]
+
+      configs -= [ "//build/config/compiler:chromium_code" ]
+      configs += [ "//build/config/compiler:no_chromium_code" ]
+      configs += [ ":tools_config" ]
+    }
+
+    executable("minidump_stackwalk") {
+      sources = [
+        "breakpad/src/processor/exploitability.cc",
+        "breakpad/src/processor/minidump.cc",
+        "breakpad/src/processor/minidump_processor.cc",
+        "breakpad/src/processor/minidump_stackwalk.cc",
+      ]
+
+      deps = [
+        ":stackwalk_common",
+        "//build/config:exe_and_shlib_deps",
+      ]
+
+      defines = [ "BPLOG_MINIMUM_SEVERITY=SEVERITY_ERROR" ]
+
+      configs -= [ "//build/config/compiler:chromium_code" ]
+      configs += [ "//build/config/compiler:no_chromium_code" ]
+      configs += [ ":tools_config" ]
+
+      # Always want these files included regardless of platform.
+      set_sources_assignment_filter([])
+      sources += [
+        "breakpad/src/processor/exploitability_linux.cc",
+        "breakpad/src/processor/exploitability_linux.h",
+        "breakpad/src/processor/exploitability_win.cc",
+        "breakpad/src/processor/exploitability_win.h",
+        "breakpad/src/processor/symbolic_constants_win.cc",
+        "breakpad/src/processor/symbolic_constants_win.h",
+      ]
+    }
+
+    executable("minidump_dump") {
+      set_sources_assignment_filter([])
+      sources = [
+        "breakpad/src/processor/basic_code_module.h",
+        "breakpad/src/processor/basic_code_modules.cc",
+        "breakpad/src/processor/basic_code_modules.h",
+        "breakpad/src/processor/dump_context.cc",
+        "breakpad/src/processor/dump_object.cc",
+        "breakpad/src/processor/logging.cc",
+        "breakpad/src/processor/logging.h",
+        "breakpad/src/processor/minidump.cc",
+        "breakpad/src/processor/minidump_dump.cc",
+        "breakpad/src/processor/pathname_stripper.cc",
+        "breakpad/src/processor/pathname_stripper.h",
+        "breakpad/src/processor/proc_maps_linux.cc",
+      ]
+
+      configs += [ ":tools_config" ]
+
+      # There are some warnings in this code.
+      configs -= [ "//build/config/compiler:chromium_code" ]
+      configs += [ "//build/config/compiler:no_chromium_code" ]
+
+      deps = [
+        "//build/config:exe_and_shlib_deps",
+      ]
+    }
+  } else {
+    # Aliases for convenience.
+    binary_symlink("microdump_stackwalk") {
+      binary_label = ":$target_name($host_toolchain)"
+    }
+    binary_symlink("minidump_stackwalk") {
+      binary_label = ":$target_name($host_toolchain)"
+    }
+    binary_symlink("minidump_dump") {
+      binary_label = ":$target_name($host_toolchain)"
+    }
+  }
+}
+
+# Mac --------------------------------------------------------------------------
+
+if (is_mac) {
+  if (current_toolchain == host_toolchain) {
+    executable("dump_syms") {
+      sources = [
+        "breakpad/src/common/dwarf/bytereader.cc",
+        "breakpad/src/common/dwarf/dwarf2diehandler.cc",
+        "breakpad/src/common/dwarf/dwarf2reader.cc",
+        "breakpad/src/common/dwarf/elf_reader.cc",
+        "breakpad/src/common/dwarf/elf_reader.h",
+        "breakpad/src/common/dwarf_cfi_to_module.cc",
+        "breakpad/src/common/dwarf_cu_to_module.cc",
+        "breakpad/src/common/dwarf_line_to_module.cc",
+        "breakpad/src/common/language.cc",
+        "breakpad/src/common/mac/arch_utilities.cc",
+        "breakpad/src/common/mac/arch_utilities.h",
+        "breakpad/src/common/mac/dump_syms.cc",
+        "breakpad/src/common/mac/file_id.cc",
+        "breakpad/src/common/mac/macho_id.cc",
+        "breakpad/src/common/mac/macho_reader.cc",
+        "breakpad/src/common/mac/macho_utilities.cc",
+        "breakpad/src/common/mac/macho_walker.cc",
+        "breakpad/src/common/md5.cc",
+        "breakpad/src/common/module.cc",
+        "breakpad/src/common/stabs_reader.cc",
+        "breakpad/src/common/stabs_to_module.cc",
+        "breakpad/src/tools/mac/dump_syms/dump_syms_tool.cc",
+      ]
+
+      # For breakpad/src/common/stabs_reader.h.
+      defines = [ "HAVE_MACH_O_NLIST_H" ]
+      include_dirs = [ "breakpad/src/common/mac" ]
+
+      # The DWARF utilities require -funsigned-char.
+      cflags = [ "-funsigned-char" ]
+
+      configs += [ ":internal_config" ]
+
+      configs -= [ "//build/config/compiler:chromium_code" ]
+      configs += [ "//build/config/compiler:no_chromium_code" ]
+
+      # dwarf2reader.cc uses dynamic_cast.
+      configs -= [ "//build/config/compiler:no_rtti" ]
+      configs += [ "//build/config/compiler:rtti" ]
+
+      libs = [ "Foundation.framework" ]
+
+      if (!is_debug) {
+        # dump_syms crashes when built at -O1, -O2, and -O3.  It does
+        # not crash at -Os.  To play it safe, dump_syms is always built
+        # at -O0 until this can be sorted out.
+        # https://crbug.com/google-breakpad/329
+        configs -= [ "//build/config/compiler:default_optimization" ]
+        cflags += [ "-O0" ]
+      }
+
+      deps = [
+        "//build/config:exe_and_shlib_deps",
+      ]
+    }
+
+    executable("symupload") {
+      sources = [
+        "breakpad/src/common/mac/HTTPMultipartUpload.m",
+        "breakpad/src/tools/mac/symupload/symupload.m",
+      ]
+
+      include_dirs = [ "breakpad/src/common/mac" ]
+
+      libs = [ "Foundation.framework" ]
+
+      configs -= [ "//build/config/compiler:chromium_code" ]
+      configs += [ "//build/config/compiler:no_chromium_code" ]
+
+      deps = [
+        "//build/config:exe_and_shlib_deps",
+      ]
+    }
+  } else {
+    binary_symlink("dump_syms") {
+      binary_label = ":$target_name($host_toolchain)"
+    }
+    binary_symlink("symupload") {
+      binary_label = ":$target_name($host_toolchain)"
+    }
+  }
+}
+
+if (is_ios) {
+  binary_symlink("dump_syms") {
+    binary_label = ":$target_name($host_toolchain)"
+  }
+  binary_symlink("symupload") {
+    binary_label = ":$target_name($host_toolchain)"
+  }
+}
+
+if (is_mac) {
+  static_library("utilities") {
+    sources = [
+      "breakpad/src/client/mac/crash_generation/ConfigFile.mm",
+      "breakpad/src/client/mac/handler/breakpad_nlist_64.cc",
+      "breakpad/src/client/mac/handler/dynamic_images.cc",
+      "breakpad/src/client/mac/handler/minidump_generator.cc",
+      "breakpad/src/client/minidump_file_writer.cc",
+      "breakpad/src/common/convert_UTF.c",
+      "breakpad/src/common/mac/MachIPC.mm",
+      "breakpad/src/common/mac/arch_utilities.cc",
+      "breakpad/src/common/mac/bootstrap_compat.cc",
+      "breakpad/src/common/mac/file_id.cc",
+      "breakpad/src/common/mac/launch_reporter.cc",
+      "breakpad/src/common/mac/macho_id.cc",
+      "breakpad/src/common/mac/macho_utilities.cc",
+      "breakpad/src/common/mac/macho_walker.cc",
+      "breakpad/src/common/mac/string_utilities.cc",
+      "breakpad/src/common/md5.cc",
+      "breakpad/src/common/simple_string_dictionary.cc",
+      "breakpad/src/common/string_conversion.cc",
+    ]
+
+    configs += [ ":internal_config" ]
+
+    # There are some warnings in this code.
+    configs -= [ "//build/config/compiler:chromium_code" ]
+    configs += [ "//build/config/compiler:no_chromium_code" ]
+  }
+
+  executable("crash_inspector") {
+    sources = [
+      "breakpad/src/client/mac/crash_generation/Inspector.mm",
+      "breakpad/src/client/mac/crash_generation/InspectorMain.mm",
+    ]
+
+    # TODO(GYP): 'mac_real_dsym': 1,
+
+    include_dirs = [
+      "breakpad/src/client/apple/Framework",
+      "breakpad/src/common/mac",
+      "breakpad/src",
+    ]
+    libs = [
+      "CoreServices.framework",
+      "Foundation.framework",
+    ]
+
+    deps = [
+      ":utilities",
+      "//build/config:exe_and_shlib_deps",
+    ]
+  }
+
+  # TODO(GYP) this target has some mac_bundle_resources stuff.
+  # executable("crash_report_sender") {
+  # }
+  group("crash_report_sender") {
+  }
+
+  config("breakpad_config") {
+    include_dirs = [ "breakpad/src/client/apple/Framework" ]
+  }
+
+  static_library("breakpad") {
+    sources = [
+      "breakpad/src/client/mac/Framework/Breakpad.mm",
+      "breakpad/src/client/mac/Framework/OnDemandServer.mm",
+      "breakpad/src/client/mac/crash_generation/crash_generation_client.cc",
+      "breakpad/src/client/mac/crash_generation/crash_generation_client.h",
+      "breakpad/src/client/mac/handler/exception_handler.cc",
+      "breakpad/src/client/mac/handler/protected_memory_allocator.cc",
+    ]
+
+    configs += [ ":internal_config" ]
+    public_configs = [ ":breakpad_config" ]
+
+    defines = [ "USE_PROTECTED_ALLOCATIONS=1" ]
+    include_dirs = [ "breakpad/src/client/apple/Framework" ]
+
+    deps = [
+      ":crash_inspector",
+      ":crash_report_sender",
+      ":utilities",
+    ]
+  }
+
+  group("client") {
+    public_configs = [ ":client_config" ]
+  }
+}
+
+if (is_linux || is_android) {
+  if (current_toolchain == host_toolchain) {
+    executable("symupload") {
+      sources = [
+        "breakpad/src/common/linux/http_upload.cc",
+        "breakpad/src/common/linux/http_upload.h",
+        "breakpad/src/common/linux/symbol_upload.cc",
+        "breakpad/src/common/linux/symbol_upload.h",
+        "breakpad/src/tools/linux/symupload/sym_upload.cc",
+      ]
+
+      include_dirs = [
+        "breakpad/src",
+        "breakpad/src/third_party",
+      ]
+
+      configs += [ ":tools_config" ]
+
+      libs = [ "dl" ]
+
+      deps = [
+        "//build/config:exe_and_shlib_deps",
+      ]
+    }
+
+    # dump_syms is a host tool, so only compile it for the host system.
+    executable("dump_syms") {
+      sources = [
+        "breakpad/src/common/dwarf/bytereader.cc",
+        "breakpad/src/common/dwarf/dwarf2diehandler.cc",
+        "breakpad/src/common/dwarf/dwarf2reader.cc",
+        "breakpad/src/common/dwarf/elf_reader.cc",
+        "breakpad/src/common/dwarf/elf_reader.h",
+        "breakpad/src/common/dwarf_cfi_to_module.cc",
+        "breakpad/src/common/dwarf_cfi_to_module.h",
+        "breakpad/src/common/dwarf_cu_to_module.cc",
+        "breakpad/src/common/dwarf_cu_to_module.h",
+        "breakpad/src/common/dwarf_line_to_module.cc",
+        "breakpad/src/common/dwarf_line_to_module.h",
+        "breakpad/src/common/language.cc",
+        "breakpad/src/common/language.h",
+        "breakpad/src/common/linux/crc32.cc",
+        "breakpad/src/common/linux/crc32.h",
+        "breakpad/src/common/linux/dump_symbols.cc",
+        "breakpad/src/common/linux/dump_symbols.h",
+        "breakpad/src/common/linux/elf_symbols_to_module.cc",
+        "breakpad/src/common/linux/elf_symbols_to_module.h",
+        "breakpad/src/common/linux/elfutils.cc",
+        "breakpad/src/common/linux/elfutils.h",
+        "breakpad/src/common/linux/file_id.cc",
+        "breakpad/src/common/linux/file_id.h",
+        "breakpad/src/common/linux/guid_creator.h",
+        "breakpad/src/common/linux/linux_libc_support.cc",
+        "breakpad/src/common/linux/linux_libc_support.h",
+        "breakpad/src/common/linux/memory_mapped_file.cc",
+        "breakpad/src/common/linux/memory_mapped_file.h",
+        "breakpad/src/common/module.cc",
+        "breakpad/src/common/module.h",
+        "breakpad/src/common/stabs_reader.cc",
+        "breakpad/src/common/stabs_reader.h",
+        "breakpad/src/common/stabs_to_module.cc",
+        "breakpad/src/common/stabs_to_module.h",
+        "breakpad/src/tools/linux/dump_syms/dump_syms.cc",
+      ]
+
+      # There are some warnings in this code.
+      configs -= [ "//build/config/compiler:chromium_code" ]
+      configs += [ "//build/config/compiler:no_chromium_code" ]
+
+      # dwarf2reader.cc uses dynamic_cast. Because we don't typically
+      # don't support RTTI, we enable it for this single target. Since
+      # dump_syms doesn't share any object files with anything else,
+      # this doesn't end up polluting Chrome itself.
+      configs -= [ "//build/config/compiler:no_rtti" ]
+      configs += [ "//build/config/compiler:rtti" ]
+
+      # Breakpad rev 583 introduced this flag.
+      # Using this define, stabs_reader.h will include a.out.h to
+      # build on Linux.
+      defines = [ "HAVE_A_OUT_H" ]
+
+      include_dirs = [ "breakpad/src" ]
+
+      deps = [
+        "//build/config:exe_and_shlib_deps",
+      ]
+    }
+  } else {
+    # Aliases for convenience.
+    binary_symlink("dump_syms") {
+      binary_label = ":dump_syms($host_toolchain)"
+    }
+    binary_symlink("symupload") {
+      binary_label = ":symupload($host_toolchain)"
+    }
+  }
+
+  static_library("client") {
+    # Want all these sources for both Linux and Android.
+    set_sources_assignment_filter([])
+    sources = [
+      "breakpad/src/client/linux/crash_generation/crash_generation_client.cc",
+      "breakpad/src/client/linux/crash_generation/crash_generation_client.h",
+      "breakpad/src/client/linux/dump_writer_common/mapping_info.h",
+      "breakpad/src/client/linux/dump_writer_common/thread_info.cc",
+      "breakpad/src/client/linux/dump_writer_common/thread_info.h",
+      "breakpad/src/client/linux/dump_writer_common/ucontext_reader.cc",
+      "breakpad/src/client/linux/dump_writer_common/ucontext_reader.h",
+      "breakpad/src/client/linux/handler/exception_handler.cc",
+      "breakpad/src/client/linux/handler/exception_handler.h",
+      "breakpad/src/client/linux/handler/minidump_descriptor.cc",
+      "breakpad/src/client/linux/handler/minidump_descriptor.h",
+      "breakpad/src/client/linux/log/log.cc",
+      "breakpad/src/client/linux/log/log.h",
+      "breakpad/src/client/linux/microdump_writer/microdump_writer.cc",
+      "breakpad/src/client/linux/microdump_writer/microdump_writer.h",
+      "breakpad/src/client/linux/minidump_writer/cpu_set.h",
+      "breakpad/src/client/linux/minidump_writer/directory_reader.h",
+      "breakpad/src/client/linux/minidump_writer/line_reader.h",
+      "breakpad/src/client/linux/minidump_writer/linux_core_dumper.cc",
+      "breakpad/src/client/linux/minidump_writer/linux_core_dumper.h",
+      "breakpad/src/client/linux/minidump_writer/linux_dumper.cc",
+      "breakpad/src/client/linux/minidump_writer/linux_dumper.h",
+      "breakpad/src/client/linux/minidump_writer/linux_ptrace_dumper.cc",
+      "breakpad/src/client/linux/minidump_writer/linux_ptrace_dumper.h",
+      "breakpad/src/client/linux/minidump_writer/minidump_writer.cc",
+      "breakpad/src/client/linux/minidump_writer/minidump_writer.h",
+      "breakpad/src/client/linux/minidump_writer/proc_cpuinfo_reader.h",
+      "breakpad/src/client/minidump_file_writer-inl.h",
+      "breakpad/src/client/minidump_file_writer.cc",
+      "breakpad/src/client/minidump_file_writer.h",
+      "breakpad/src/common/convert_UTF.c",
+      "breakpad/src/common/convert_UTF.h",
+      "breakpad/src/common/linux/elf_core_dump.cc",
+      "breakpad/src/common/linux/elf_core_dump.h",
+      "breakpad/src/common/linux/elfutils.cc",
+      "breakpad/src/common/linux/elfutils.h",
+      "breakpad/src/common/linux/file_id.cc",
+      "breakpad/src/common/linux/file_id.h",
+      "breakpad/src/common/linux/google_crashdump_uploader.cc",
+      "breakpad/src/common/linux/google_crashdump_uploader.h",
+      "breakpad/src/common/linux/guid_creator.cc",
+      "breakpad/src/common/linux/guid_creator.h",
+      "breakpad/src/common/linux/libcurl_wrapper.cc",
+      "breakpad/src/common/linux/libcurl_wrapper.h",
+      "breakpad/src/common/linux/linux_libc_support.cc",
+      "breakpad/src/common/linux/linux_libc_support.h",
+      "breakpad/src/common/linux/memory_mapped_file.cc",
+      "breakpad/src/common/linux/memory_mapped_file.h",
+      "breakpad/src/common/linux/safe_readlink.cc",
+      "breakpad/src/common/linux/safe_readlink.h",
+      "breakpad/src/common/memory.h",
+      "breakpad/src/common/simple_string_dictionary.cc",
+      "breakpad/src/common/simple_string_dictionary.h",
+      "breakpad/src/common/string_conversion.cc",
+      "breakpad/src/common/string_conversion.h",
+    ]
+
+    configs -= [ "//build/config/compiler:chromium_code" ]
+    configs += [ "//build/config/compiler:no_chromium_code" ]
+    public_configs = [ ":client_config" ]
+
+    if (current_cpu == "arm" && is_chromeos) {
+      # Avoid running out of registers in
+      # linux_syscall_support.h:sys_clone()'s inline assembly.
+      cflags = [ "-marm" ]
+    }
+
+    # Clang's -mstackrealign doesn't work well with
+    # linux_syscall_support.h hand written asm syscalls.
+    # See https://crbug.com/556393
+    configs -= [ "//build/config/compiler:clang_stackrealign" ]
+
+    if (is_android) {
+      sources += [ "breakpad/src/common/android/breakpad_getcontext.S" ]
+    }
+
+    libs = [ "dl" ]
+
+    include_dirs = [
+      ".",
+      "breakpad/src",
+      "breakpad/src/client",
+      "breakpad/src/third_party/linux/include",
+    ]
+  }
+
+  static_library("processor_support") {
+    set_sources_assignment_filter([])
+    sources = [
+      "breakpad/src/common/scoped_ptr.h",
+      "breakpad/src/processor/basic_code_modules.cc",
+      "breakpad/src/processor/basic_code_modules.h",
+      "breakpad/src/processor/dump_context.cc",
+      "breakpad/src/processor/dump_object.cc",
+      "breakpad/src/processor/logging.cc",
+      "breakpad/src/processor/logging.h",
+      "breakpad/src/processor/minidump.cc",
+      "breakpad/src/processor/pathname_stripper.cc",
+      "breakpad/src/processor/pathname_stripper.h",
+      "breakpad/src/processor/proc_maps_linux.cc",
+    ]
+
+    include_dirs = [
+      "breakpad/src",
+      "breakpad/src/client",
+      "breakpad/src/third_party/linux/include",
+      ".",
+    ]
+
+    # There are some warnings in this code.
+    configs -= [ "//build/config/compiler:chromium_code" ]
+    configs += [ "//build/config/compiler:no_chromium_code" ]
+  }
+
+  test("breakpad_unittests") {
+    set_sources_assignment_filter([])
+    sources = [
+      "breakpad/src/client/linux/handler/exception_handler_unittest.cc",
+      "breakpad/src/client/linux/minidump_writer/cpu_set_unittest.cc",
+      "breakpad/src/client/linux/minidump_writer/directory_reader_unittest.cc",
+      "breakpad/src/client/linux/minidump_writer/line_reader_unittest.cc",
+      "breakpad/src/client/linux/minidump_writer/linux_core_dumper_unittest.cc",
+      "breakpad/src/client/linux/minidump_writer/linux_ptrace_dumper_unittest.cc",
+      "breakpad/src/client/linux/minidump_writer/minidump_writer_unittest.cc",
+      "breakpad/src/client/linux/minidump_writer/minidump_writer_unittest_utils.cc",
+      "breakpad/src/client/linux/minidump_writer/proc_cpuinfo_reader_unittest.cc",
+      "breakpad/src/common/linux/elf_core_dump_unittest.cc",
+      "breakpad/src/common/linux/file_id_unittest.cc",
+      "breakpad/src/common/linux/linux_libc_support_unittest.cc",
+      "breakpad/src/common/linux/synth_elf.cc",
+      "breakpad/src/common/linux/tests/auto_testfile.h",
+      "breakpad/src/common/linux/tests/crash_generator.cc",
+      "breakpad/src/common/linux/tests/crash_generator.h",
+      "breakpad/src/common/memory_range.h",
+      "breakpad/src/common/memory_unittest.cc",
+      "breakpad/src/common/simple_string_dictionary_unittest.cc",
+      "breakpad/src/common/test_assembler.cc",
+      "breakpad/src/common/tests/file_utils.cc",
+      "breakpad/src/common/tests/file_utils.h",
+      "breakpad/src/tools/linux/md2core/minidump_memory_range.h",
+      "breakpad/src/tools/linux/md2core/minidump_memory_range_unittest.cc",
+      "linux/breakpad_googletest_includes.h",
+    ]
+
+    deps = [
+      ":client",
+      ":linux_dumper_unittest_helper",
+      ":processor_support",
+      "//build/config:exe_and_shlib_deps",
+      "//testing/gmock",
+      "//testing/gtest",
+      "//testing/gtest:gtest_main",
+    ]
+
+    include_dirs = [
+      "linux",  # Use our copy of breakpad_googletest_includes.h
+      ".",
+    ]
+
+    # There are some warnings in this code.
+    configs -= [ "//build/config/compiler:chromium_code" ]
+    configs += [
+      ":client_config",
+      "//build/config/compiler:no_chromium_code",
+    ]
+
+    if (is_clang) {
+      # See https://crbug.com/138571#c18
+      cflags = [ "-Wno-unused-value" ]
+    }
+
+    if (is_android) {
+      use_raw_android_executable = true
+      sources +=
+          [ "breakpad/src/common/android/breakpad_getcontext_unittest.cc" ]
+      libs = [ "log" ]
+      extra_dist_files = [ "$root_out_dir/linux_dumper_unittest_helper" ]
+    }
+
+    # Clang's -mstackrealign doesn't work well with
+    # linux_syscall_support.h hand written asm syscalls.
+    # See https://crbug.com/556393
+    configs -= [ "//build/config/compiler:clang_stackrealign" ]
+
+    # Add the breakpad unittest config at the end to override all configs.
+    configs += [ ":breakpad_unittest_config" ]
+  }
+
+  executable("linux_dumper_unittest_helper") {
+    set_sources_assignment_filter([])
+    testonly = true
+    sources = [
+      "breakpad/src/client/linux/minidump_writer/linux_dumper_unittest_helper.cc",
+    ]
+    deps = [
+      ":processor_support",
+      "//build/config:exe_and_shlib_deps",
+    ]
+
+    configs += [ ":client_config" ]
+
+    if (is_component_build) {
+      ldflags = [
+        "-Wl,-rpath,",
+        rebase_path(root_build_dir),
+      ]
+    }
+  }
+
+  executable("generate_test_dump") {
+    set_sources_assignment_filter([])
+    testonly = true
+    sources = [
+      "linux/generate-test-dump.cc",
+    ]
+
+    # This file has an unused variable warning.
+    configs -= [ "//build/config/compiler:chromium_code" ]
+    configs += [
+      ":client_config",
+      "//build/config/compiler:no_chromium_code",
+    ]
+
+    deps = [
+      ":client",
+      "//build/config:exe_and_shlib_deps",
+    ]
+
+    if (is_android) {
+      libs = [ "log" ]
+    }
+  }
+
+  executable("minidump-2-core") {
+    set_sources_assignment_filter([])
+    sources = [
+      "breakpad/src/tools/linux/md2core/minidump-2-core.cc",
+    ]
+
+    include_dirs = [ "breakpad/src" ]
+
+    deps = [
+      ":client",
+      "//build/config:exe_and_shlib_deps",
+    ]
+  }
+
+  executable("core-2-minidump") {
+    set_sources_assignment_filter([])
+    sources = [
+      "breakpad/src/tools/linux/core2md/core2md.cc",
+    ]
+
+    deps = [
+      ":client",
+      "//build/config:exe_and_shlib_deps",
+    ]
+
+    include_dirs = [ "breakpad/src" ]
+  }
+}
+
+if (is_win) {
+  executable("dump_syms") {
+    # TODO(scottmg) using this with VS2015 may break the crash server.
+    # https://crbug.com/696671
+    include_dirs = [
+      "$visual_studio_path/DIA SDK/include",
+      "breakpad/src",
+    ]
+
+    sources = [
+      "breakpad/src/common/windows/dia_util.cc",
+      "breakpad/src/common/windows/dia_util.h",
+      "breakpad/src/common/windows/guid_string.cc",
+      "breakpad/src/common/windows/guid_string.h",
+      "breakpad/src/common/windows/omap.cc",
+      "breakpad/src/common/windows/omap.h",
+      "breakpad/src/common/windows/pdb_source_line_writer.cc",
+      "breakpad/src/common/windows/pdb_source_line_writer.h",
+      "breakpad/src/common/windows/string_utils-inl.h",
+      "breakpad/src/common/windows/string_utils.cc",
+      "breakpad/src/tools/windows/dump_syms/dump_syms.cc",
+    ]
+
+    lib_dirs = []
+    if (target_cpu == "x64") {
+      lib_dirs += [ "$visual_studio_path/DIA SDK/lib/amd64" ]
+    } else {
+      lib_dirs += [ "$visual_studio_path/DIA SDK/lib" ]
+    }
+
+    libs = [
+      "diaguids.lib",
+      "imagehlp.lib",
+    ]
+    if (is_clang) {
+      # clang complains about microsoft-specific goto extensions. Instead of
+      # rewriting decade-old, goto-ridden code, disable the warning.
+      cflags = [ "-Wno-microsoft-goto" ]
+    }
+  }
+}
+
+if (is_ios) {
+  static_library("client") {
+    set_sources_assignment_filter([])
+    sources = [
+      "breakpad/src/client/ios/Breakpad.h",
+      "breakpad/src/client/ios/Breakpad.mm",
+      "breakpad/src/client/ios/BreakpadController.h",
+      "breakpad/src/client/ios/BreakpadController.mm",
+      "breakpad/src/client/ios/handler/ios_exception_minidump_generator.h",
+      "breakpad/src/client/ios/handler/ios_exception_minidump_generator.mm",
+      "breakpad/src/client/mac/crash_generation/ConfigFile.h",
+      "breakpad/src/client/mac/crash_generation/ConfigFile.mm",
+      "breakpad/src/client/mac/handler/breakpad_nlist_64.cc",
+      "breakpad/src/client/mac/handler/breakpad_nlist_64.h",
+      "breakpad/src/client/mac/handler/dynamic_images.cc",
+      "breakpad/src/client/mac/handler/dynamic_images.h",
+      "breakpad/src/client/mac/handler/exception_handler.cc",
+      "breakpad/src/client/mac/handler/exception_handler.h",
+      "breakpad/src/client/mac/handler/minidump_generator.cc",
+      "breakpad/src/client/mac/handler/minidump_generator.h",
+      "breakpad/src/client/mac/handler/protected_memory_allocator.cc",
+      "breakpad/src/client/mac/handler/protected_memory_allocator.h",
+      "breakpad/src/client/mac/sender/uploader.h",
+      "breakpad/src/client/mac/sender/uploader.mm",
+      "breakpad/src/client/minidump_file_writer-inl.h",
+      "breakpad/src/client/minidump_file_writer.cc",
+      "breakpad/src/client/minidump_file_writer.h",
+      "breakpad/src/common/convert_UTF.c",
+      "breakpad/src/common/convert_UTF.h",
+      "breakpad/src/common/mac/HTTPMultipartUpload.m",
+      "breakpad/src/common/mac/file_id.cc",
+      "breakpad/src/common/mac/file_id.h",
+      "breakpad/src/common/mac/macho_id.cc",
+      "breakpad/src/common/mac/macho_id.h",
+      "breakpad/src/common/mac/macho_utilities.cc",
+      "breakpad/src/common/mac/macho_utilities.h",
+      "breakpad/src/common/mac/macho_walker.cc",
+      "breakpad/src/common/mac/macho_walker.h",
+      "breakpad/src/common/mac/string_utilities.cc",
+      "breakpad/src/common/mac/string_utilities.h",
+      "breakpad/src/common/md5.cc",
+      "breakpad/src/common/md5.h",
+      "breakpad/src/common/simple_string_dictionary.cc",
+      "breakpad/src/common/simple_string_dictionary.h",
+      "breakpad/src/common/string_conversion.cc",
+      "breakpad/src/common/string_conversion.h",
+      "breakpad/src/google_breakpad/common/minidump_format.h",
+    ]
+    set_sources_assignment_filter(sources_assignment_filter)
+
+    include_dirs = [
+      "breakpad/src",
+      "breakpad/src/client/mac/Framework",
+      "breakpad/src/common/mac",
+    ]
+
+    deps = [
+      "//third_party/google_toolbox_for_mac",
+    ]
+
+    public_configs = [ ":client_config" ]
+
+    if (is_clang) {
+      # See https://crbug.com/google-breakpad/675.
+      cflags = [ "-Wno-deprecated-declarations" ]
+    }
+  }
+}
+
+if (is_win) {
+  group("client") {
+    public_configs = [ ":client_config" ]
+  }
+
+  config("breakpad_handler_warnings") {
+    if (is_clang) {
+      # See https://crbug.com/google-breakpad/658.
+      cflags = [ "-Wno-reorder" ]
+    }
+  }
+
+  static_library("breakpad_handler") {
+    configs += [ ":handler_config" ]
+    if (is_win) {
+      public_configs = [ ":handler_config" ]
+    }
+
+    defines = [ "BREAKPAD_NO_TERMINATE_THREAD" ]
+
+    sources = [
+      "breakpad/src/client/windows/crash_generation/client_info.cc",
+      "breakpad/src/client/windows/crash_generation/client_info.h",
+      "breakpad/src/client/windows/crash_generation/crash_generation_client.cc",
+      "breakpad/src/client/windows/crash_generation/crash_generation_client.h",
+      "breakpad/src/client/windows/crash_generation/crash_generation_server.cc",
+      "breakpad/src/client/windows/crash_generation/crash_generation_server.h",
+      "breakpad/src/client/windows/crash_generation/minidump_generator.cc",
+      "breakpad/src/client/windows/crash_generation/minidump_generator.h",
+      "breakpad/src/client/windows/handler/exception_handler.cc",
+      "breakpad/src/client/windows/handler/exception_handler.h",
+      "breakpad/src/common/windows/guid_string.cc",
+      "breakpad/src/common/windows/guid_string.h",
+      "breakpad/src/common/windows/string_utils-inl.h",
+      "breakpad/src/google_breakpad/common/minidump_format.h",
+    ]
+    configs += [ ":breakpad_handler_warnings" ]
+  }
+
+  source_set("breakpad_sender") {
+    sources = [
+      "breakpad/src/client/windows/sender/crash_report_sender.cc",
+      "breakpad/src/client/windows/sender/crash_report_sender.h",
+      "breakpad/src/common/windows/http_upload.cc",
+      "breakpad/src/common/windows/http_upload.h",
+    ]
+    configs += [ ":sender_config" ]
+    public_configs = [ ":sender_config" ]
+  }
+}
diff --git a/third_party/breakpad/DEPS b/third_party/breakpad/DEPS
new file mode 100644
index 0000000..3d23004
--- /dev/null
+++ b/third_party/breakpad/DEPS
@@ -0,0 +1,12 @@
+skip_child_includes = [
+  'linux',
+]
+
+specific_include_rules = {
+  '^minidump_fuzzer\.cc$': [
+    '+base',
+    '+google_breakpad',
+    '+processor',
+    '+testing',
+  ],
+}
diff --git a/breakpad/LICENSE b/third_party/breakpad/LICENSE
similarity index 100%
rename from breakpad/LICENSE
rename to third_party/breakpad/LICENSE
diff --git a/breakpad/OWNERS b/third_party/breakpad/OWNERS
similarity index 100%
rename from breakpad/OWNERS
rename to third_party/breakpad/OWNERS
diff --git a/third_party/breakpad/README.chromium b/third_party/breakpad/README.chromium
new file mode 100644
index 0000000..4c8913b
--- /dev/null
+++ b/third_party/breakpad/README.chromium
@@ -0,0 +1,9 @@
+Name: Breakpad, An open-source multi-platform crash reporting system
+Short Name: breakpad
+URL: https://chromium.googlesource.com/breakpad/breakpad
+Version: unknown
+License: New BSD, Apple PSL 2.0 and Apache 2.0
+Security Critical: yes
+
+The upstream Breakpad project is pulled into the breakpad/ subdirectory via
+DEPS.
diff --git a/breakpad/linux/breakpad_googletest_includes.h b/third_party/breakpad/linux/breakpad_googletest_includes.h
similarity index 99%
rename from breakpad/linux/breakpad_googletest_includes.h
rename to third_party/breakpad/linux/breakpad_googletest_includes.h
index aeab3156..ae55dffeb 100644
--- a/breakpad/linux/breakpad_googletest_includes.h
+++ b/third_party/breakpad/linux/breakpad_googletest_includes.h
@@ -30,7 +30,7 @@
 #ifndef BREAKPAD_GOOGLETEST_INCLUDES_H__
 #define BREAKPAD_GOOGLETEST_INCLUDES_H__
 
-#include "testing/gtest/include/gtest/gtest.h"
 #include "testing/gmock/include/gmock/gmock.h"
+#include "testing/gtest/include/gtest/gtest.h"
 
 #endif  // BREAKPAD_GOOGLETEST_INCLUDES_H__
diff --git a/breakpad/linux/generate-test-dump.cc b/third_party/breakpad/linux/generate-test-dump.cc
similarity index 90%
rename from breakpad/linux/generate-test-dump.cc
rename to third_party/breakpad/linux/generate-test-dump.cc
index b0dca00..a23af38 100644
--- a/breakpad/linux/generate-test-dump.cc
+++ b/third_party/breakpad/linux/generate-test-dump.cc
@@ -33,12 +33,13 @@
 
 #include <unistd.h>
 
-#include "breakpad/src/client/linux/handler/exception_handler.h"
-#include "breakpad/src/common/linux/linux_libc_support.h"
+#include "third_party/breakpad/breakpad/src/client/linux/handler/exception_handler.h"
+#include "third_party/breakpad/breakpad/src/common/linux/linux_libc_support.h"
 #include "third_party/lss/linux_syscall_support.h"
 
 static bool DumpCallback(const google_breakpad::MinidumpDescriptor& descriptor,
-                         void* context, bool success) {
+                         void* context,
+                         bool success) {
   if (!success) {
     static const char msg[] = "Failed to write minidump\n";
     sys_write(2, msg, sizeof(msg) - 1);
diff --git a/breakpad/minidump_fuzzer.cc b/third_party/breakpad/minidump_fuzzer.cc
similarity index 99%
rename from breakpad/minidump_fuzzer.cc
rename to third_party/breakpad/minidump_fuzzer.cc
index 8af4532..0854af7 100644
--- a/breakpad/minidump_fuzzer.cc
+++ b/third_party/breakpad/minidump_fuzzer.cc
@@ -6,9 +6,9 @@
 #include <stdint.h>
 #include <string.h>
 
-#include <streambuf>
 #include <istream>
 #include <memory>
+#include <streambuf>
 
 #include "base/memory/free_deleter.h"
 #include "google_breakpad/processor/basic_source_line_resolver.h"
diff --git a/breakpad/minidump_fuzzer.dict b/third_party/breakpad/minidump_fuzzer.dict
similarity index 100%
rename from breakpad/minidump_fuzzer.dict
rename to third_party/breakpad/minidump_fuzzer.dict
diff --git a/breakpad/symupload.exe b/third_party/breakpad/symupload.exe
similarity index 100%
rename from breakpad/symupload.exe
rename to third_party/breakpad/symupload.exe
Binary files differ
diff --git a/breakpad/using_breakpad.vsprops b/third_party/breakpad/using_breakpad.vsprops
similarity index 68%
rename from breakpad/using_breakpad.vsprops
rename to third_party/breakpad/using_breakpad.vsprops
index 7d7ab92..cb3bb42 100644
--- a/breakpad/using_breakpad.vsprops
+++ b/third_party/breakpad/using_breakpad.vsprops
@@ -6,6 +6,6 @@
 	>
 	<Tool
 		Name="VCCLCompilerTool"
-		AdditionalIncludeDirectories="&quot;$(SolutionDir)..\breakpad\src&quot;"
+		AdditionalIncludeDirectories="&quot;$(SolutionDir)..\third_party\breakpad\breakpad\src&quot;"
 	/>
 </VisualStudioPropertySheet>
diff --git a/tools/checklicenses/checklicenses.py b/tools/checklicenses/checklicenses.py
index ecd2a15..3c84c26 100755
--- a/tools/checklicenses/checklicenses.py
+++ b/tools/checklicenses/checklicenses.py
@@ -119,11 +119,6 @@
         'UNKNOWN',
     ],
 
-    # http://code.google.com/p/google-breakpad/issues/detail?id=450
-    'breakpad/src': [
-        'UNKNOWN',
-    ],
-
     'buildtools/third_party/libc++/trunk/test': [
         # http://llvm.org/bugs/show_bug.cgi?id=25980
         'UNKNOWN',
@@ -186,6 +181,11 @@
         'UNKNOWN',
     ],
 
+    # https://crbug.com/google-breakpad/450
+    'third_party/breakpad/breakpad': [
+        'UNKNOWN',
+    ],
+
     # http://crbug.com/603946
     # https://github.com/google/oauth2client/issues/331
     # Just imports googleapiclient. Chromite is not shipped.
diff --git a/tools/ipc_fuzzer/fuzzer/fuzzer.cc b/tools/ipc_fuzzer/fuzzer/fuzzer.cc
index 395eab1..6d93640 100644
--- a/tools/ipc_fuzzer/fuzzer/fuzzer.cc
+++ b/tools/ipc_fuzzer/fuzzer/fuzzer.cc
@@ -642,8 +642,8 @@
 };
 
 template <>
-struct FuzzTraits<cc::CompositorFrame> {
-  static bool Fuzz(cc::CompositorFrame* p, Fuzzer* fuzzer) {
+struct FuzzTraits<viz::CompositorFrame> {
+  static bool Fuzz(viz::CompositorFrame* p, Fuzzer* fuzzer) {
     // TODO(mbarbella): Support mutation.
     if (!fuzzer->ShouldGenerate())
       return true;
diff --git a/tools/metrics/histograms/enums.xml b/tools/metrics/histograms/enums.xml
index 8641f36..bf2f3dd 100644
--- a/tools/metrics/histograms/enums.xml
+++ b/tools/metrics/histograms/enums.xml
@@ -11431,6 +11431,7 @@
   <int value="387" label="DeviceNativePrintersAccessMode"/>
   <int value="388" label="DeviceNativePrintersBlacklist"/>
   <int value="389" label="DeviceNativePrintersWhitelist"/>
+  <int value="390" label="DeviceTPMFirmwareUpdateSettings"/>
 </enum>
 
 <enum name="EnterprisePolicyInvalidations">
diff --git a/tools/msan/blacklist.txt b/tools/msan/blacklist.txt
index 40ea4b8..feada5c1 100644
--- a/tools/msan/blacklist.txt
+++ b/tools/msan/blacklist.txt
@@ -20,5 +20,5 @@
 fun:unpack_RGB888
 
 # False positives due to use of linux_syscall_support. http://crbug.com/394028
-src:*/breakpad/src/*
+src:*/third_party/breakpad/breakpad/src/*
 src:*/components/crash/content/app/breakpad_linux.cc
diff --git a/tools/perf/chrome_telemetry_build/BUILD.gn b/tools/perf/chrome_telemetry_build/BUILD.gn
index 54a039c..850be94 100644
--- a/tools/perf/chrome_telemetry_build/BUILD.gn
+++ b/tools/perf/chrome_telemetry_build/BUILD.gn
@@ -38,14 +38,14 @@
   }
 
   if (is_linux) {
-    data_deps += [ "//breakpad:dump_syms($host_toolchain)" ]
+    data_deps += [ "//third_party/breakpad:dump_syms($host_toolchain)" ]
   }
 
   if (is_mac) {
     data_deps += [
-      "//breakpad:dump_syms",
       "//chrome:chrome_framework",
       "//chrome:chrome_helper_app",
+      "//third_party/breakpad:dump_syms",
       "//third_party/crashpad/crashpad/tools:crashpad_database_util",
     ]
   }
diff --git a/ui/android/delegated_frame_host_android.cc b/ui/android/delegated_frame_host_android.cc
index 3eb10c7..b71c875c 100644
--- a/ui/android/delegated_frame_host_android.cc
+++ b/ui/android/delegated_frame_host_android.cc
@@ -9,7 +9,7 @@
 #include "base/memory/ptr_util.h"
 #include "cc/layers/solid_color_layer.h"
 #include "cc/layers/surface_layer.h"
-#include "cc/output/compositor_frame.h"
+#include "components/viz/common/quads/compositor_frame.h"
 #include "components/viz/common/quads/copy_output_result.h"
 #include "components/viz/common/surfaces/surface_id.h"
 #include "components/viz/host/host_frame_sink_manager.h"
@@ -82,7 +82,7 @@
 
 void DelegatedFrameHostAndroid::SubmitCompositorFrame(
     const viz::LocalSurfaceId& local_surface_id,
-    cc::CompositorFrame frame) {
+    viz::CompositorFrame frame) {
   if (local_surface_id != surface_info_.id().local_surface_id()) {
     DestroyDelegatedContent();
     DCHECK(!content_layer_);
diff --git a/ui/android/delegated_frame_host_android.h b/ui/android/delegated_frame_host_android.h
index 8d57796..bf0783e4 100644
--- a/ui/android/delegated_frame_host_android.h
+++ b/ui/android/delegated_frame_host_android.h
@@ -16,14 +16,12 @@
 #include "ui/android/ui_android_export.h"
 
 namespace cc {
-
-class CompositorFrame;
 class SurfaceLayer;
 enum class SurfaceDrawStatus;
-
 }  // namespace cc
 
 namespace viz {
+class CompositorFrame;
 class FrameSinkManagerImpl;
 class HostFrameSinkManager;
 }  // namespace viz
@@ -55,7 +53,7 @@
   ~DelegatedFrameHostAndroid() override;
 
   void SubmitCompositorFrame(const viz::LocalSurfaceId& local_surface_id,
-                             cc::CompositorFrame frame);
+                             viz::CompositorFrame frame);
   void DidNotProduceFrame(const viz::BeginFrameAck& ack);
 
   void DestroyDelegatedContent();
diff --git a/ui/app_list/views/app_list_view.cc b/ui/app_list/views/app_list_view.cc
index cd6494a0..c041c896 100644
--- a/ui/app_list/views/app_list_view.cc
+++ b/ui/app_list/views/app_list_view.cc
@@ -681,30 +681,26 @@
         }
         break;
       case FULLSCREEN_SEARCH:
-        if (std::abs(drag_delta) > app_list_threshold)
+        if (drag_delta < -app_list_threshold)
           Dismiss();
         else
           SetState(app_list_state_);
         break;
       case HALF:
-        if (std::abs(drag_delta) > app_list_threshold) {
-          if (drag_delta > 0)
-            SetState(FULLSCREEN_SEARCH);
-          else
-            Dismiss();
-        } else {
+        if (drag_delta > app_list_threshold)
+          SetState(FULLSCREEN_SEARCH);
+        else if (drag_delta < -app_list_threshold)
+          Dismiss();
+        else
           SetState(app_list_state_);
-        }
         break;
       case PEEKING:
-        if (std::abs(drag_delta) > app_list_threshold) {
-          if (drag_delta > 0) {
-            SetState(FULLSCREEN_ALL_APPS);
-            UMA_HISTOGRAM_ENUMERATION(kAppListPeekingToFullscreenHistogram,
-                                      kSwipe, kMaxPeekingToFullscreen);
-          } else {
-            Dismiss();
-          }
+        if (drag_delta > app_list_threshold) {
+          SetState(FULLSCREEN_ALL_APPS);
+          UMA_HISTOGRAM_ENUMERATION(kAppListPeekingToFullscreenHistogram,
+                                    kSwipe, kMaxPeekingToFullscreen);
+        } else if (drag_delta < -app_list_threshold) {
+          Dismiss();
         } else {
           SetState(app_list_state_);
         }
diff --git a/ui/aura/local/layer_tree_frame_sink_local.cc b/ui/aura/local/layer_tree_frame_sink_local.cc
index bbf4d59..edfc67b 100644
--- a/ui/aura/local/layer_tree_frame_sink_local.cc
+++ b/ui/aura/local/layer_tree_frame_sink_local.cc
@@ -77,7 +77,8 @@
   local_surface_id_ = local_surface_id;
 }
 
-void LayerTreeFrameSinkLocal::SubmitCompositorFrame(cc::CompositorFrame frame) {
+void LayerTreeFrameSinkLocal::SubmitCompositorFrame(
+    viz::CompositorFrame frame) {
   DCHECK(thread_checker_);
   DCHECK(thread_checker_->CalledOnValidThread());
   DCHECK(frame.metadata.begin_frame_ack.has_damage);
diff --git a/ui/aura/local/layer_tree_frame_sink_local.h b/ui/aura/local/layer_tree_frame_sink_local.h
index 8a12f5be..75cbc07ce 100644
--- a/ui/aura/local/layer_tree_frame_sink_local.h
+++ b/ui/aura/local/layer_tree_frame_sink_local.h
@@ -48,7 +48,7 @@
   bool BindToClient(cc::LayerTreeFrameSinkClient* client) override;
   void DetachFromClient() override;
   void SetLocalSurfaceId(const viz::LocalSurfaceId& local_surface_id) override;
-  void SubmitCompositorFrame(cc::CompositorFrame frame) override;
+  void SubmitCompositorFrame(viz::CompositorFrame frame) override;
   void DidNotProduceFrame(const viz::BeginFrameAck& ack) override;
 
   // viz::mojom::CompositorFrameSinkClient:
diff --git a/ui/compositor/test/fake_context_factory.cc b/ui/compositor/test/fake_context_factory.cc
index 8d59985..4061d83 100644
--- a/ui/compositor/test/fake_context_factory.cc
+++ b/ui/compositor/test/fake_context_factory.cc
@@ -7,11 +7,11 @@
 #include "base/command_line.h"
 #include "base/threading/thread_task_runner_handle.h"
 #include "cc/base/switches.h"
-#include "cc/output/compositor_frame.h"
 #include "cc/test/fake_layer_tree_frame_sink.h"
 #include "cc/trees/layer_tree_frame_sink_client.h"
 #include "components/viz/common/frame_sinks/begin_frame_source.h"
 #include "components/viz/common/frame_sinks/delay_based_time_source.h"
+#include "components/viz/common/quads/compositor_frame.h"
 #include "ui/compositor/compositor_switches.h"
 #include "ui/display/display_switches.h"
 #include "ui/gfx/switches.h"
@@ -41,7 +41,7 @@
 
 FakeContextFactory::~FakeContextFactory() = default;
 
-const cc::CompositorFrame& FakeContextFactory::GetLastCompositorFrame() const {
+const viz::CompositorFrame& FakeContextFactory::GetLastCompositorFrame() const {
   return *frame_sink_->last_sent_frame();
 }
 
diff --git a/ui/compositor/test/fake_context_factory.h b/ui/compositor/test/fake_context_factory.h
index bccb2fb6..ee06a8e 100644
--- a/ui/compositor/test/fake_context_factory.h
+++ b/ui/compositor/test/fake_context_factory.h
@@ -11,7 +11,6 @@
 #include "ui/compositor/compositor.h"
 
 namespace cc {
-class CompositorFrame;
 class FakeLayerTreeFrameSink;
 class ResourceSettings;
 class TestTaskGraphRunner;
@@ -19,6 +18,7 @@
 }
 
 namespace viz {
+class CompositorFrame;
 class ContextProvider;
 }
 
@@ -29,7 +29,7 @@
   FakeContextFactory();
   ~FakeContextFactory() override;
 
-  const cc::CompositorFrame& GetLastCompositorFrame() const;
+  const viz::CompositorFrame& GetLastCompositorFrame() const;
 
   // ui::ContextFactory:
   void CreateLayerTreeFrameSink(
diff --git a/ui/ozone/platform/drm/gpu/hardware_display_controller.cc b/ui/ozone/platform/drm/gpu/hardware_display_controller.cc
index cb97347c..3674836 100644
--- a/ui/ozone/platform/drm/gpu/hardware_display_controller.cc
+++ b/ui/ozone/platform/drm/gpu/hardware_display_controller.cc
@@ -69,6 +69,12 @@
 
 void HardwareDisplayController::Disable() {
   TRACE_EVENT0("drm", "HDC::Disable");
+  // Disable all the planes by scheduling a pageflip with an empty plane_list.
+  // This is necessary since drmModeSetCrtc, that is called by
+  // controller->Disable(), will not disable overlays.
+  const OverlayPlaneList plane_list;
+  ActualSchedulePageFlip(plane_list, false, base::BindOnce(&EmptyFlipCallback));
+
   for (const auto& controller : crtc_controllers_)
     controller->Disable();
 
@@ -96,18 +102,12 @@
 
   DCHECK(!is_disabled_);
 
-  // Ignore requests with no planes to schedule.
-  if (plane_list.empty()) {
-    std::move(callback).Run(gfx::SwapResult::SWAP_ACK);
-    return true;
-  }
-
   OverlayPlaneList pending_planes = plane_list;
   std::sort(pending_planes.begin(), pending_planes.end(),
             [](const OverlayPlane& l, const OverlayPlane& r) {
               return l.z_order < r.z_order;
             });
-  if (pending_planes.front().z_order < 0) {
+  if (pending_planes.size() && pending_planes.front().z_order < 0) {
     std::move(callback).Run(gfx::SwapResult::SWAP_FAILED);
     return false;
   }
diff --git a/ui/ozone/platform/drm/gpu/hardware_display_controller_unittest.cc b/ui/ozone/platform/drm/gpu/hardware_display_controller_unittest.cc
index 615aa37..64f46e8 100644
--- a/ui/ozone/platform/drm/gpu/hardware_display_controller_unittest.cc
+++ b/ui/ozone/platform/drm/gpu/hardware_display_controller_unittest.cc
@@ -452,3 +452,43 @@
   EXPECT_EQ(gfx::SwapResult::SWAP_ACK, last_swap_result_);
   EXPECT_EQ(1, page_flips_);
 }
+
+TEST_F(HardwareDisplayControllerTest, EmptyPageFlip) {
+  ui::OverlayPlane plane1(new ui::MockScanoutBuffer(kDefaultModeSize));
+  EXPECT_TRUE(controller_->Modeset(plane1, kDefaultMode));
+  std::vector<ui::OverlayPlane> planes(1, plane1);
+  controller_->SchedulePageFlip(
+      planes, base::Bind(&HardwareDisplayControllerTest::PageFlipCallback,
+                         base::Unretained(this)));
+  drm_->RunCallbacks();
+  EXPECT_EQ(gfx::SwapResult::SWAP_ACK, last_swap_result_);
+  EXPECT_EQ(1, page_flips_);
+}
+
+TEST_F(HardwareDisplayControllerTest, Disable) {
+  ui::OverlayPlane plane1(scoped_refptr<ui::ScanoutBuffer>(
+      new ui::MockScanoutBuffer(kDefaultModeSize)));
+  EXPECT_TRUE(controller_->Modeset(plane1, kDefaultMode));
+
+  ui::OverlayPlane plane2(new ui::MockScanoutBuffer(kOverlaySize), 1,
+                          gfx::OVERLAY_TRANSFORM_NONE, gfx::Rect(kOverlaySize),
+                          gfx::RectF(kDefaultModeSizeF));
+  std::vector<ui::OverlayPlane> planes;
+  planes.push_back(plane1);
+  planes.push_back(plane2);
+
+  controller_->SchedulePageFlip(
+      planes, base::Bind(&HardwareDisplayControllerTest::PageFlipCallback,
+                         base::Unretained(this)));
+  drm_->RunCallbacks();
+  EXPECT_EQ(gfx::SwapResult::SWAP_ACK, last_swap_result_);
+  EXPECT_EQ(1, page_flips_);
+
+  controller_->Disable();
+
+  const ui::HardwareDisplayPlane* owned_plane = nullptr;
+  for (const auto& plane : drm_->plane_manager()->planes())
+    if (plane->in_use())
+      owned_plane = plane.get();
+  ASSERT_FALSE(owned_plane);
+}
diff --git a/ui/views/controls/scroll_view.cc b/ui/views/controls/scroll_view.cc
index 95f4acc..d7d05ad 100644
--- a/ui/views/controls/scroll_view.cc
+++ b/ui/views/controls/scroll_view.cc
@@ -14,6 +14,7 @@
 #include "ui/views/background.h"
 #include "ui/views/border.h"
 #include "ui/views/controls/focus_ring.h"
+#include "ui/views/controls/separator.h"
 #include "ui/views/style/platform_style.h"
 #include "ui/views/widget/widget.h"
 
@@ -179,6 +180,10 @@
       horiz_sb_(PlatformStyle::CreateScrollBar(true).release()),
       vert_sb_(PlatformStyle::CreateScrollBar(false).release()),
       corner_view_(new ScrollCornerView()),
+      more_content_left_(base::MakeUnique<Separator>()),
+      more_content_top_(base::MakeUnique<Separator>()),
+      more_content_right_(base::MakeUnique<Separator>()),
+      more_content_bottom_(base::MakeUnique<Separator>()),
       min_height_(-1),
       max_height_(-1),
       hide_horizontal_scrollbar_(false),
@@ -197,8 +202,24 @@
   vert_sb_->set_controller(this);
   corner_view_->SetVisible(false);
 
+  // Just make sure the more_content indicators aren't visible for now. They'll
+  // be added as child controls and appropriately made visible depending on
+  // |show_edges_with_hidden_content_|.
+  more_content_left_->SetVisible(false);
+  more_content_top_->SetVisible(false);
+  more_content_right_->SetVisible(false);
+  more_content_bottom_->SetVisible(false);
+
   if (scroll_with_layers_enabled_)
     EnableViewPortLayer();
+
+  // If we're scrolling with layers, paint the overflow indicators to the layer.
+  if (ScrollsWithLayers()) {
+    more_content_left_->SetPaintToLayer();
+    more_content_top_->SetPaintToLayer();
+    more_content_right_->SetPaintToLayer();
+    more_content_bottom_->SetPaintToLayer();
+  }
   UpdateBackground();
 }
 
@@ -363,6 +384,10 @@
     contents_->SetSize(gfx::Size(content_width, content_height));
   }
 
+  // Place an overflow indicator on each of the four edges of the content
+  // bounds.
+  PositionOverflowIndicators();
+
   // Most views will want to auto-fit the available space. Most of them want to
   // use all available width (without overflowing) and only overflow in
   // height. Examples are HistoryView, MostVisitedView, DownloadTabView, etc.
@@ -488,6 +513,8 @@
                           scroll_with_layers_enabled_);
   SchedulePaint();
   UpdateScrollBarPositions();
+  if (contents_)
+    UpdateOverflowIndicatorVisibility(CurrentOffset());
 }
 
 bool ScrollView::OnKeyPressed(const ui::KeyEvent& event) {
@@ -768,6 +795,7 @@
     contents_->SetPosition(gfx::Point(-offset.x(), -offset.y()));
     ScrollHeader();
   }
+  UpdateOverflowIndicatorVisibility(offset);
 }
 
 bool ScrollView::ScrollsWithLayers() const {
@@ -784,6 +812,10 @@
 
   contents_viewport_->SetPaintToLayer();
   contents_viewport_->layer()->SetMasksToBounds(true);
+  more_content_left_->SetPaintToLayer();
+  more_content_top_->SetPaintToLayer();
+  more_content_right_->SetPaintToLayer();
+  more_content_bottom_->SetPaintToLayer();
   UpdateBackground();
 }
 
@@ -844,6 +876,37 @@
              : background_color_data_.color;
 }
 
+void ScrollView::PositionOverflowIndicators() {
+  const gfx::Rect bounds = GetContentsBounds();
+  const int x = bounds.x();
+  const int y = bounds.y();
+  const int w = bounds.width();
+  const int h = bounds.height();
+  const int t = Separator::kThickness;
+  more_content_left_->SetBounds(x, y, t, h);
+  more_content_top_->SetBounds(x, y, w, t);
+  more_content_right_->SetBounds(bounds.right() - t, y, t, h);
+  more_content_bottom_->SetBounds(x, bounds.bottom() - t, w, t);
+}
+
+void ScrollView::UpdateOverflowIndicatorVisibility(
+    const gfx::ScrollOffset& offset) {
+  SetControlVisibility(more_content_top_.get(),
+                       !draw_border_ && !header_ && vert_sb_->visible() &&
+                           offset.y() > vert_sb_->GetMinPosition());
+  SetControlVisibility(more_content_bottom_.get(),
+                       !draw_border_ && vert_sb_->visible() &&
+                           !horiz_sb_->visible() &&
+                           offset.y() < vert_sb_->GetMaxPosition());
+  SetControlVisibility(more_content_left_.get(),
+                       !draw_border_ && horiz_sb_->visible() &&
+                           offset.x() > horiz_sb_->GetMinPosition());
+  SetControlVisibility(more_content_right_.get(),
+                       !draw_border_ && horiz_sb_->visible() &&
+                           !vert_sb_->visible() &&
+                           offset.x() < horiz_sb_->GetMaxPosition());
+}
+
 // VariableRowHeightScrollHelper ----------------------------------------------
 
 VariableRowHeightScrollHelper::VariableRowHeightScrollHelper(
diff --git a/ui/views/controls/scroll_view.h b/ui/views/controls/scroll_view.h
index dfb8f1e..08d2b0e 100644
--- a/ui/views/controls/scroll_view.h
+++ b/ui/views/controls/scroll_view.h
@@ -22,6 +22,8 @@
 class ScrollViewTestApi;
 }
 
+class Separator;
+
 /////////////////////////////////////////////////////////////////////////////
 //
 // ScrollView class
@@ -183,6 +185,13 @@
   void UpdateBackground();
   SkColor GetBackgroundColor() const;
 
+  // Positions each overflow indicator against their respective content edge.
+  void PositionOverflowIndicators();
+
+  // Shows/hides the overflow indicators depending on the position of the
+  // scrolling content within the viewport.
+  void UpdateOverflowIndicatorVisibility(const gfx::ScrollOffset& offset);
+
   // The current contents and its viewport. |contents_| is contained in
   // |contents_viewport_|.
   View* contents_;
@@ -202,6 +211,12 @@
   // Corner view.
   View* corner_view_;
 
+  // Hidden content indicators
+  std::unique_ptr<Separator> more_content_left_;
+  std::unique_ptr<Separator> more_content_top_;
+  std::unique_ptr<Separator> more_content_right_;
+  std::unique_ptr<Separator> more_content_bottom_;
+
   // The min and max height for the bounded scroll view. These are negative
   // values if the view is not bounded.
   int min_height_;
diff --git a/ui/views/controls/scroll_view_unittest.cc b/ui/views/controls/scroll_view_unittest.cc
index cc0a318..9fafe98 100644
--- a/ui/views/controls/scroll_view_unittest.cc
+++ b/ui/views/controls/scroll_view_unittest.cc
@@ -16,6 +16,7 @@
 #include "ui/views/controls/scrollbar/base_scroll_bar_thumb.h"
 #include "ui/views/controls/scrollbar/overlay_scroll_bar.h"
 #include "ui/views/controls/scrollbar/scroll_bar_views.h"
+#include "ui/views/controls/separator.h"
 #include "ui/views/test/test_views.h"
 #include "ui/views/test/views_test_base.h"
 #include "ui/views/test/widget_test.h"
@@ -61,6 +62,19 @@
   View* corner_view() { return scroll_view_->corner_view_; }
   View* contents_viewport() { return scroll_view_->contents_viewport_; }
 
+  Separator* more_content_left() {
+    return scroll_view_->more_content_left_.get();
+  }
+  Separator* more_content_top() {
+    return scroll_view_->more_content_top_.get();
+  }
+  Separator* more_content_right() {
+    return scroll_view_->more_content_right_.get();
+  }
+  Separator* more_content_bottom() {
+    return scroll_view_->more_content_bottom_.get();
+  }
+
  private:
   ScrollView* scroll_view_;
 
@@ -75,6 +89,20 @@
 const int kMinHeight = 50;
 const int kMaxHeight = 100;
 
+class FixedView : public View {
+ public:
+  FixedView() {}
+  ~FixedView() override {}
+
+  void Layout() override {
+    gfx::Size pref = GetPreferredSize();
+    SetBounds(x(), y(), pref.width(), pref.height());
+  }
+
+ private:
+  DISALLOW_COPY_AND_ASSIGN(FixedView);
+};
+
 class CustomView : public View {
  public:
   CustomView() {}
@@ -954,6 +982,331 @@
   EXPECT_EQ(0, test_api.CurrentOffset().y());
 }
 
+// Test that overflow indicators turn on appropriately.
+TEST_F(ScrollViewTest, VerticalOverflowIndicators) {
+  const int kWidth = 100;
+
+  ScrollViewTestApi test_api(&scroll_view_);
+
+  // Set up with vertical scrollbar.
+  FixedView* contents = new FixedView;
+  contents->SetPreferredSize(gfx::Size(kWidth, kMaxHeight * 5));
+  scroll_view_.SetContents(contents);
+  scroll_view_.ClipHeightTo(0, kMaxHeight);
+
+  // Make sure the size is set such that no horizontal scrollbar gets shown.
+  scroll_view_.SetSize(
+      gfx::Size(kWidth + test_api.GetBaseScrollBar(VERTICAL)->GetThickness(),
+                kMaxHeight));
+
+  // Make sure the initial origin is 0,0
+  EXPECT_EQ(gfx::ScrollOffset(0, 0), test_api.CurrentOffset());
+
+  // The vertical scroll bar should be visible and the horizontal scroll bar
+  // should not.
+  CheckScrollbarVisibility(scroll_view_, VERTICAL, true);
+  CheckScrollbarVisibility(scroll_view_, HORIZONTAL, false);
+
+  // The overflow indicator on the bottom should be visible.
+  EXPECT_TRUE(test_api.more_content_bottom()->visible());
+
+  // The overflow indicator on the top should not be visible.
+  EXPECT_FALSE(test_api.more_content_top()->visible());
+
+  // No other overflow indicators should be visible.
+  EXPECT_FALSE(test_api.more_content_left()->visible());
+  EXPECT_FALSE(test_api.more_content_right()->visible());
+
+  // Now scroll the view to someplace in the middle of the scrollable region.
+  int offset = kMaxHeight * 2;
+  scroll_view_.ScrollToPosition(test_api.GetBaseScrollBar(VERTICAL), offset);
+  EXPECT_EQ(gfx::ScrollOffset(0, offset), test_api.CurrentOffset());
+
+  // At this point, both overflow indicators on the top and bottom should be
+  // visible.
+  EXPECT_TRUE(test_api.more_content_top()->visible());
+  EXPECT_TRUE(test_api.more_content_bottom()->visible());
+
+  // The left and right overflow indicators should still not be visible.
+  EXPECT_FALSE(test_api.more_content_left()->visible());
+  EXPECT_FALSE(test_api.more_content_right()->visible());
+
+  // Finally scroll the view to end of the scrollable region.
+  offset = kMaxHeight * 4;
+  scroll_view_.ScrollToPosition(test_api.GetBaseScrollBar(VERTICAL), offset);
+  EXPECT_EQ(gfx::ScrollOffset(0, offset), test_api.CurrentOffset());
+
+  // The overflow indicator on the bottom should not be visible.
+  EXPECT_FALSE(test_api.more_content_bottom()->visible());
+
+  // The overflow indicator on the top should be visible.
+  EXPECT_TRUE(test_api.more_content_top()->visible());
+
+  // As above, no other overflow indicators should be visible.
+  EXPECT_FALSE(test_api.more_content_left()->visible());
+  EXPECT_FALSE(test_api.more_content_right()->visible());
+}
+
+TEST_F(ScrollViewTest, HorizontalOverflowIndicators) {
+  const int kWidth = 100;
+  const int kHeight = 100;
+
+  ScrollViewTestApi test_api(&scroll_view_);
+
+  // Set up with horizontal scrollbar.
+  FixedView* contents = new FixedView;
+  contents->SetPreferredSize(gfx::Size(kWidth * 5, kHeight));
+  scroll_view_.SetContents(contents);
+
+  // Make sure the size is set such that no vertical scrollbar gets shown.
+  scroll_view_.SetSize(gfx::Size(
+      kWidth, kHeight + test_api.GetBaseScrollBar(HORIZONTAL)->GetThickness()));
+
+  contents->SetBounds(0, 0, kWidth * 5, kHeight);
+
+  // Make sure the initial origin is 0,0
+  EXPECT_EQ(gfx::ScrollOffset(0, 0), test_api.CurrentOffset());
+
+  // The horizontal scroll bar should be visible and the vertical scroll bar
+  // should not.
+  CheckScrollbarVisibility(scroll_view_, HORIZONTAL, true);
+  CheckScrollbarVisibility(scroll_view_, VERTICAL, false);
+
+  // The overflow indicator on the right should be visible.
+  EXPECT_TRUE(test_api.more_content_right()->visible());
+
+  // The overflow indicator on the left should not be visible.
+  EXPECT_FALSE(test_api.more_content_left()->visible());
+
+  // No other overflow indicators should be visible.
+  EXPECT_FALSE(test_api.more_content_top()->visible());
+  EXPECT_FALSE(test_api.more_content_bottom()->visible());
+
+  // Now scroll the view to someplace in the middle of the scrollable region.
+  int offset = kWidth * 2;
+  scroll_view_.ScrollToPosition(test_api.GetBaseScrollBar(HORIZONTAL), offset);
+  EXPECT_EQ(gfx::ScrollOffset(offset, 0), test_api.CurrentOffset());
+
+  // At this point, both overflow indicators on the left and right should be
+  // visible.
+  EXPECT_TRUE(test_api.more_content_left()->visible());
+  EXPECT_TRUE(test_api.more_content_right()->visible());
+
+  // The top and bottom overflow indicators should still not be visible.
+  EXPECT_FALSE(test_api.more_content_top()->visible());
+  EXPECT_FALSE(test_api.more_content_bottom()->visible());
+
+  // Finally scroll the view to end of the scrollable region.
+  offset = kWidth * 4;
+  scroll_view_.ScrollToPosition(test_api.GetBaseScrollBar(HORIZONTAL), offset);
+  EXPECT_EQ(gfx::ScrollOffset(offset, 0), test_api.CurrentOffset());
+
+  // The overflow indicator on the right should not be visible.
+  EXPECT_FALSE(test_api.more_content_right()->visible());
+
+  // The overflow indicator on the left should be visible.
+  EXPECT_TRUE(test_api.more_content_left()->visible());
+
+  // As above, no other overflow indicators should be visible.
+  EXPECT_FALSE(test_api.more_content_top()->visible());
+  EXPECT_FALSE(test_api.more_content_bottom()->visible());
+}
+
+TEST_F(ScrollViewTest, HorizontalVerticalOverflowIndicators) {
+  const int kWidth = 100;
+  const int kHeight = 100;
+
+  ScrollViewTestApi test_api(&scroll_view_);
+
+  // Set up with both horizontal and vertical scrollbars.
+  FixedView* contents = new FixedView;
+  contents->SetPreferredSize(gfx::Size(kWidth * 5, kHeight * 5));
+  scroll_view_.SetContents(contents);
+
+  // Make sure the size is set such that both scrollbars are shown.
+  scroll_view_.SetSize(gfx::Size(kWidth, kHeight));
+
+  // Make sure the initial origin is 0,0
+  EXPECT_EQ(gfx::ScrollOffset(0, 0), test_api.CurrentOffset());
+
+  // The horizontal and vertical scroll bars should be visible.
+  CheckScrollbarVisibility(scroll_view_, HORIZONTAL, true);
+  CheckScrollbarVisibility(scroll_view_, VERTICAL, true);
+
+  // The overflow indicators on the right and bottom should not be visible since
+  // they are against the scrollbars.
+  EXPECT_FALSE(test_api.more_content_right()->visible());
+  EXPECT_FALSE(test_api.more_content_bottom()->visible());
+
+  // The overflow indicators on the left and top should not be visible.
+  EXPECT_FALSE(test_api.more_content_left()->visible());
+  EXPECT_FALSE(test_api.more_content_top()->visible());
+
+  // Now scroll the view to someplace in the middle of the horizontal scrollable
+  // region.
+  int offset_x = kWidth * 2;
+  scroll_view_.ScrollToPosition(test_api.GetBaseScrollBar(HORIZONTAL),
+                                offset_x);
+  EXPECT_EQ(gfx::ScrollOffset(offset_x, 0), test_api.CurrentOffset());
+
+  // Since there is a vertical scrollbar only the overflow indicator on the left
+  // should be visible and the one on the right should still not be visible.
+  EXPECT_TRUE(test_api.more_content_left()->visible());
+  EXPECT_FALSE(test_api.more_content_right()->visible());
+
+  // The top and bottom overflow indicators should still not be visible.
+  EXPECT_FALSE(test_api.more_content_top()->visible());
+  EXPECT_FALSE(test_api.more_content_bottom()->visible());
+
+  // Next, scroll the view to end of the scrollable region.
+  offset_x = kWidth * 4;
+  scroll_view_.ScrollToPosition(test_api.GetBaseScrollBar(HORIZONTAL),
+                                offset_x);
+  EXPECT_EQ(gfx::ScrollOffset(offset_x, 0), test_api.CurrentOffset());
+
+  // The overflow indicator on the right should still not be visible.
+  EXPECT_FALSE(test_api.more_content_right()->visible());
+
+  // The overflow indicator on the left should be visible.
+  EXPECT_TRUE(test_api.more_content_left()->visible());
+
+  // As above, the other overflow indicators should not be visible because the
+  // view hasn't scrolled vertically and the bottom indicator is against the
+  // horizontal scrollbar.
+  EXPECT_FALSE(test_api.more_content_top()->visible());
+  EXPECT_FALSE(test_api.more_content_bottom()->visible());
+
+  // Return the view back to the horizontal origin.
+  scroll_view_.ScrollToPosition(test_api.GetBaseScrollBar(HORIZONTAL), 0);
+  EXPECT_EQ(gfx::ScrollOffset(0, 0), test_api.CurrentOffset());
+
+  // The overflow indicators on the right and bottom should not be visible since
+  // they are against the scrollbars.
+  EXPECT_FALSE(test_api.more_content_right()->visible());
+  EXPECT_FALSE(test_api.more_content_bottom()->visible());
+
+  // The overflow indicators on the left and top should not be visible since the
+  // is at the origin.
+  EXPECT_FALSE(test_api.more_content_left()->visible());
+  EXPECT_FALSE(test_api.more_content_top()->visible());
+
+  // Now scroll the view to somplace in the middle of the vertical scrollable
+  // region.
+  int offset_y = kHeight * 2;
+  scroll_view_.ScrollToPosition(test_api.GetBaseScrollBar(VERTICAL), offset_y);
+  EXPECT_EQ(gfx::ScrollOffset(0, offset_y), test_api.CurrentOffset());
+
+  // Similar to the above, since there is a horizontal scrollbar only the
+  // overflow indicator on the top should be visible and the one on the bottom
+  // should still not be visible.
+  EXPECT_TRUE(test_api.more_content_top()->visible());
+  EXPECT_FALSE(test_api.more_content_bottom()->visible());
+
+  // The left and right overflow indicators should still not be visible.
+  EXPECT_FALSE(test_api.more_content_left()->visible());
+  EXPECT_FALSE(test_api.more_content_right()->visible());
+
+  // Finally, for the vertical test scroll the region all the way to the end.
+  offset_y = kHeight * 4;
+  scroll_view_.ScrollToPosition(test_api.GetBaseScrollBar(VERTICAL), offset_y);
+  EXPECT_EQ(gfx::ScrollOffset(0, offset_y), test_api.CurrentOffset());
+
+  // The overflow indicator on the bottom should still not be visible.
+  EXPECT_FALSE(test_api.more_content_bottom()->visible());
+
+  // The overflow indicator on the top should still be visible.
+  EXPECT_TRUE(test_api.more_content_top()->visible());
+
+  // As above, the other overflow indicators should not be visible because the
+  // view hasn't scrolled horizontally and the right indicator is against the
+  // vertical scrollbar.
+  EXPECT_FALSE(test_api.more_content_left()->visible());
+  EXPECT_FALSE(test_api.more_content_right()->visible());
+
+  // Back to the horizontal. Scroll all the way to the end in the horizontal
+  // direction.
+  offset_x = kWidth * 4;
+  scroll_view_.ScrollToPosition(test_api.GetBaseScrollBar(HORIZONTAL),
+                                offset_x);
+  EXPECT_EQ(gfx::ScrollOffset(offset_x, offset_y), test_api.CurrentOffset());
+
+  // The overflow indicator on the bottom and right should still not be visible.
+  EXPECT_FALSE(test_api.more_content_bottom()->visible());
+  EXPECT_FALSE(test_api.more_content_right()->visible());
+
+  // The overflow indicators on the top and left should now be visible.
+  EXPECT_TRUE(test_api.more_content_top()->visible());
+  EXPECT_TRUE(test_api.more_content_left()->visible());
+}
+
+TEST_F(ScrollViewTest, VerticalWithHeaderOverflowIndicators) {
+  const int kWidth = 100;
+
+  ScrollViewTestApi test_api(&scroll_view_);
+
+  // Set up with vertical scrollbar and a header.
+  FixedView* contents = new FixedView;
+  CustomView* header = new CustomView;
+  contents->SetPreferredSize(gfx::Size(kWidth, kMaxHeight * 5));
+  scroll_view_.SetContents(contents);
+  header->SetPreferredSize(gfx::Size(10, 20));
+  scroll_view_.SetHeader(header);
+  scroll_view_.ClipHeightTo(0, kMaxHeight + header->height());
+
+  // Make sure the size is set such that no horizontal scrollbar gets shown.
+  scroll_view_.SetSize(
+      gfx::Size(kWidth + test_api.GetBaseScrollBar(VERTICAL)->GetThickness(),
+                kMaxHeight + header->height()));
+
+  // Make sure the initial origin is 0,0
+  EXPECT_EQ(gfx::ScrollOffset(0, 0), test_api.CurrentOffset());
+
+  // The vertical scroll bar should be visible and the horizontal scroll bar
+  // should not.
+  CheckScrollbarVisibility(scroll_view_, VERTICAL, true);
+  CheckScrollbarVisibility(scroll_view_, HORIZONTAL, false);
+
+  // The overflow indicator on the bottom should be visible.
+  EXPECT_TRUE(test_api.more_content_bottom()->visible());
+
+  // The overflow indicator on the top should not be visible.
+  EXPECT_FALSE(test_api.more_content_top()->visible());
+
+  // No other overflow indicators should be visible.
+  EXPECT_FALSE(test_api.more_content_left()->visible());
+  EXPECT_FALSE(test_api.more_content_right()->visible());
+
+  // Now scroll the view to someplace in the middle of the scrollable region.
+  int offset = kMaxHeight * 2;
+  scroll_view_.ScrollToPosition(test_api.GetBaseScrollBar(VERTICAL), offset);
+  EXPECT_EQ(gfx::ScrollOffset(0, offset), test_api.CurrentOffset());
+
+  // At this point, only the overflow indicator on the bottom should be visible
+  // because the top indicator never comes on because of the presence of the
+  // header.
+  EXPECT_FALSE(test_api.more_content_top()->visible());
+  EXPECT_TRUE(test_api.more_content_bottom()->visible());
+
+  // The left and right overflow indicators should still not be visible.
+  EXPECT_FALSE(test_api.more_content_left()->visible());
+  EXPECT_FALSE(test_api.more_content_right()->visible());
+
+  // Finally scroll the view to end of the scrollable region.
+  offset = test_api.GetBaseScrollBar(VERTICAL)->GetMaxPosition();
+  scroll_view_.ScrollToPosition(test_api.GetBaseScrollBar(VERTICAL), offset);
+  EXPECT_EQ(gfx::ScrollOffset(0, offset), test_api.CurrentOffset());
+
+  // The overflow indicator on the bottom should not be visible now.
+  EXPECT_FALSE(test_api.more_content_bottom()->visible());
+
+  // The overflow indicator on the top should still not be visible.
+  EXPECT_FALSE(test_api.more_content_top()->visible());
+
+  // As above, no other overflow indicators should be visible.
+  EXPECT_FALSE(test_api.more_content_left()->visible());
+  EXPECT_FALSE(test_api.more_content_right()->visible());
+}
+
 // Test scrolling behavior when clicking on the scroll track.
 TEST_F(WidgetScrollViewTest, ScrollTrackScrolling) {
   // Set up with a vertical scroller.