diff --git a/DEPS b/DEPS
index 0c5fa908..2cf6c5a 100644
--- a/DEPS
+++ b/DEPS
@@ -44,7 +44,7 @@
   # 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': '1c7f221317ca99e415b23c0202d41bb986c6c69a',
+  'v8_revision': 'b906454a392b00c0e0550e71542466d697a0e7fc',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling swarming_client
   # and whatever else without interference from each other.
@@ -64,7 +64,7 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling PDFium
   # and whatever else without interference from each other.
-  'pdfium_revision': '61a3cb81a298640ec65fc019926a3a46b8cf8617',
+  'pdfium_revision': 'fe1c8e61668079b873922acb1e56d0ea55a3c375',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling openmax_dl
   # and whatever else without interference from each other.
@@ -157,7 +157,7 @@
     Var('chromium_git') + '/external/github.com/google/googletest.git' + '@' + '42bc671f47b122fad36db5eccbc06868afdf7862',
 
   'src/third_party/icu':
-    Var('chromium_git') + '/chromium/deps/icu.git' + '@' + 'dfa798fe694702b43a3debc3290761f22b1acaf8',
+    Var('chromium_git') + '/chromium/deps/icu.git' + '@' + 'b971435d43d012e9c49ef5e99c0c3047640d53be',
 
   'src/third_party/hunspell_dictionaries':
     Var('chromium_git') + '/chromium/deps/hunspell_dictionaries.git' + '@' + 'dc6e7c25bf47cbfb466e0701fd2728b4a12e79d5',
diff --git a/ash/BUILD.gn b/ash/BUILD.gn
index e37dfa12..36adbfb1 100644
--- a/ash/BUILD.gn
+++ b/ash/BUILD.gn
@@ -681,6 +681,8 @@
     "wm/overview/cleanup_animation_observer.cc",
     "wm/overview/cleanup_animation_observer.h",
     "wm/overview/overview_animation_type.h",
+    "wm/overview/overview_window_drag_controller.cc",
+    "wm/overview/overview_window_drag_controller.h",
     "wm/overview/scoped_overview_animation_settings.cc",
     "wm/overview/scoped_overview_animation_settings.h",
     "wm/overview/scoped_transform_overview_window.cc",
diff --git a/ash/mus/ash_window_tree_host_mus.cc b/ash/mus/ash_window_tree_host_mus.cc
index bb50ae2a..635e3ac2 100644
--- a/ash/mus/ash_window_tree_host_mus.cc
+++ b/ash/mus/ash_window_tree_host_mus.cc
@@ -74,6 +74,7 @@
   NOTIMPLEMENTED();
 }
 
+#if defined(USE_OZONE)
 void AshWindowTreeHostMus::SetCursorConfig(
     const display::Display& display,
     display::Display::Rotation rotation) {
@@ -83,6 +84,7 @@
 void AshWindowTreeHostMus::ClearCursorConfig() {
   // Nothing to do here, mus takes care of this.
 }
+#endif
 
 void AshWindowTreeHostMus::SetRootTransform(const gfx::Transform& transform) {
   transformer_helper_->SetTransform(transform);
diff --git a/ash/wm/maximize_mode/maximize_mode_window_state.cc b/ash/wm/maximize_mode/maximize_mode_window_state.cc
index 260ad80..4b9e6eb 100644
--- a/ash/wm/maximize_mode/maximize_mode_window_state.cc
+++ b/ash/wm/maximize_mode/maximize_mode_window_state.cc
@@ -87,7 +87,7 @@
     return Shell::Get()
         ->split_view_controller()
         ->GetSnappedWindowBoundsInParent(state_object->window(),
-                                         SplitViewController::LEFT_SNAPPED);
+                                         SplitViewController::LEFT);
   }
 
   if (state_object->GetStateType() == wm::WINDOW_STATE_TYPE_RIGHT_SNAPPED) {
@@ -95,7 +95,7 @@
     return Shell::Get()
         ->split_view_controller()
         ->GetSnappedWindowBoundsInParent(state_object->window(),
-                                         SplitViewController::RIGHT_SNAPPED);
+                                         SplitViewController::RIGHT);
   }
 
   gfx::Rect bounds_in_parent;
@@ -338,11 +338,11 @@
   } else if (target_state == wm::WINDOW_STATE_TYPE_LEFT_SNAPPED) {
     window_state->SetBoundsDirectAnimated(
         Shell::Get()->split_view_controller()->GetSnappedWindowBoundsInParent(
-            window_state->window(), SplitViewController::LEFT_SNAPPED));
+            window_state->window(), SplitViewController::LEFT));
   } else if (target_state == wm::WINDOW_STATE_TYPE_RIGHT_SNAPPED) {
     window_state->SetBoundsDirectAnimated(
         Shell::Get()->split_view_controller()->GetSnappedWindowBoundsInParent(
-            window_state->window(), SplitViewController::RIGHT_SNAPPED));
+            window_state->window(), SplitViewController::RIGHT));
   } else {
     UpdateBounds(window_state, animated);
   }
diff --git a/ash/wm/overview/overview_animation_type.h b/ash/wm/overview/overview_animation_type.h
index 089277e..294f0297 100644
--- a/ash/wm/overview/overview_animation_type.h
+++ b/ash/wm/overview/overview_animation_type.h
@@ -27,7 +27,10 @@
   OVERVIEW_ANIMATION_CLOSING_SELECTOR_ITEM,
   // Used to animate hiding of a window that is closed while overview mode is
   // active.
-  OVERVIEW_ANIMATION_CLOSE_SELECTOR_ITEM
+  OVERVIEW_ANIMATION_CLOSE_SELECTOR_ITEM,
+  // Used to animate scaling up of a window that is about to get dragged while
+  // overview mode is active.
+  OVERVIEW_ANIMATION_DRAGGING_SELECTOR_ITEM,
 };
 
 }  // namespace ash
diff --git a/ash/wm/overview/overview_window_drag_controller.cc b/ash/wm/overview/overview_window_drag_controller.cc
new file mode 100644
index 0000000..5f6f394
--- /dev/null
+++ b/ash/wm/overview/overview_window_drag_controller.cc
@@ -0,0 +1,152 @@
+// 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 "ash/wm/overview/overview_window_drag_controller.h"
+
+#include "ash/screen_util.h"
+#include "ash/shell.h"
+#include "ash/wm/overview/scoped_transform_overview_window.h"
+#include "ash/wm/overview/window_selector.h"
+#include "ash/wm/overview/window_selector_item.h"
+#include "ash/wm/window_positioning_utils.h"
+#include "ash/wm/window_state.h"
+#include "ash/wm/wm_event.h"
+#include "ash/wm/workspace/phantom_window_controller.h"
+#include "ui/aura/window.h"
+#include "ui/wm/core/coordinate_conversion.h"
+
+namespace ash {
+
+namespace {
+
+// The minimum offset that will be considered as a drag event.
+constexpr int kMinimiumDragOffset = 5;
+
+// Snapping distance between the dragged window with the screen edge. It's
+// useful especially for touch events.
+constexpr int kScreenEdgeInsetForDrag = 200;
+
+}  // namespace
+
+OverviewWindowDragController::OverviewWindowDragController(
+    WindowSelector* window_selector)
+    : window_selector_(window_selector),
+      split_view_controller_(Shell::Get()->split_view_controller()) {}
+
+OverviewWindowDragController::~OverviewWindowDragController() {}
+
+void OverviewWindowDragController::InitiateDrag(
+    WindowSelectorItem* item,
+    const gfx::Point& location_in_screen) {
+  previous_event_location_ = location_in_screen;
+  item_ = item;
+}
+
+void OverviewWindowDragController::Drag(const gfx::Point& location_in_screen) {
+  if (!did_move_ &&
+      (std::abs(location_in_screen.x() - previous_event_location_.x()) <
+           kMinimiumDragOffset ||
+       std::abs(location_in_screen.y() - previous_event_location_.y()) <
+           kMinimiumDragOffset)) {
+    return;
+  }
+  did_move_ = true;
+
+  // Update the dragged |item_|'s bounds accordingly.
+  gfx::Rect bounds(item_->target_bounds());
+  bounds.Offset(location_in_screen.x() - previous_event_location_.x(),
+                location_in_screen.y() - previous_event_location_.y());
+  item_->SetBounds(bounds, OverviewAnimationType::OVERVIEW_ANIMATION_NONE);
+  previous_event_location_ = location_in_screen;
+
+  UpdatePhantomWindow(location_in_screen);
+}
+
+void OverviewWindowDragController::CompleteDrag() {
+  phantom_window_controller_.reset();
+
+  if (!did_move_) {
+    // If no drag was initiated (e.g., a click/tap on the overview window),
+    // activate the window. If the split view is active and has a left window,
+    // snap the current window to right. If the split view is active and has a
+    // right window, snap the current window to left.
+    SplitViewController::State split_state = split_view_controller_->state();
+    if (split_state == SplitViewController::NO_SNAP) {
+      window_selector_->SelectWindow(item_);
+    } else {
+      SnapWindow(split_state == SplitViewController::LEFT_SNAPPED
+                     ? SplitViewController::RIGHT
+                     : SplitViewController::LEFT);
+    }
+  } else {
+    // If the window was dragged around but should not be snapped, move it back
+    // to overview window grid.
+    if (snap_position_ == SplitViewController::NONE)
+      window_selector_->PositionWindows(true /* animate */);
+    else
+      SnapWindow(snap_position_);
+    did_move_ = false;
+  }
+}
+
+void OverviewWindowDragController::UpdatePhantomWindow(
+    const gfx::Point& location_in_screen) {
+  SplitViewController::SnapPosition last_snap_position = snap_position_;
+  snap_position_ = GetSnapPosition(location_in_screen);
+  if (snap_position_ == SplitViewController::NONE ||
+      snap_position_ != last_snap_position) {
+    phantom_window_controller_.reset();
+    if (snap_position_ == SplitViewController::NONE)
+      return;
+  }
+
+  const bool can_snap = snap_position_ != SplitViewController::NONE &&
+                        wm::GetWindowState(item_->GetWindow())->CanSnap();
+  if (!can_snap) {
+    snap_position_ = SplitViewController::NONE;
+    phantom_window_controller_.reset();
+    return;
+  }
+
+  aura::Window* target_window = item_->GetWindow();
+  gfx::Rect phantom_bounds_in_screen =
+      split_view_controller_->GetSnappedWindowBoundsInScreen(target_window,
+                                                             snap_position_);
+
+  if (!phantom_window_controller_) {
+    phantom_window_controller_ =
+        base::MakeUnique<PhantomWindowController>(target_window);
+  }
+  phantom_window_controller_->Show(phantom_bounds_in_screen);
+}
+
+SplitViewController::SnapPosition OverviewWindowDragController::GetSnapPosition(
+    const gfx::Point& location_in_screen) const {
+  gfx::Rect area(
+      ScreenUtil::GetDisplayWorkAreaBoundsInParent(item_->GetWindow()));
+  ::wm::ConvertRectToScreen(item_->GetWindow()->GetRootWindow(), &area);
+  area.Inset(kScreenEdgeInsetForDrag, 0);
+
+  if (location_in_screen.x() <= area.x())
+    return SplitViewController::LEFT;
+  if (location_in_screen.x() >= area.right() - 1)
+    return SplitViewController::RIGHT;
+  return SplitViewController::NONE;
+}
+
+void OverviewWindowDragController::SnapWindow(
+    SplitViewController::SnapPosition snap_position) {
+  DCHECK_NE(snap_position, SplitViewController::NONE);
+
+  item_->EnsureVisible();
+  item_->RestoreWindow();
+
+  // |item_| will be deleted after RemoveWindowSelectorItem().
+  aura::Window* window = item_->GetWindow();
+  window_selector_->RemoveWindowSelectorItem(item_);
+  split_view_controller_->SnapWindow(window, snap_position);
+  item_ = nullptr;
+}
+
+}  // namespace ash
diff --git a/ash/wm/overview/overview_window_drag_controller.h b/ash/wm/overview/overview_window_drag_controller.h
new file mode 100644
index 0000000..c12fee4
--- /dev/null
+++ b/ash/wm/overview/overview_window_drag_controller.h
@@ -0,0 +1,67 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef ASH_WM_OVERVIEW_OVERVIEW_WINDOW_DRAG_CONTROLLER_H_
+#define ASH_WM_OVERVIEW_OVERVIEW_WINDOW_DRAG_CONTROLLER_H_
+
+#include <memory>
+
+#include "ash/ash_export.h"
+#include "ash/wm/splitview/split_view_controller.h"
+#include "base/macros.h"
+#include "ui/gfx/geometry/point.h"
+
+namespace ash {
+
+class PhantomWindowController;
+class WindowSelector;
+class WindowSelectorItem;
+
+// The drag controller for an overview window item in overview mode. It updates
+// the position of the corresponding window item using transform while dragging
+// and shows/hides the phantom window accordingly.
+class ASH_EXPORT OverviewWindowDragController {
+ public:
+  explicit OverviewWindowDragController(WindowSelector* window_selector);
+  ~OverviewWindowDragController();
+
+  void InitiateDrag(WindowSelectorItem* item,
+                    const gfx::Point& location_in_screen);
+  void Drag(const gfx::Point& location_in_screen);
+  void CompleteDrag();
+
+  WindowSelectorItem* item() { return item_; }
+
+ private:
+  void UpdatePhantomWindow(const gfx::Point& location_in_screen);
+
+  SplitViewController::SnapPosition GetSnapPosition(
+      const gfx::Point& location_in_screen) const;
+
+  void SnapWindow(SplitViewController::SnapPosition snap_position);
+
+  WindowSelector* window_selector_;
+
+  SplitViewController* split_view_controller_;
+
+  // Shows a highlight of where the dragged window will end up.
+  std::unique_ptr<PhantomWindowController> phantom_window_controller_;
+
+  // The drag target window in the overview mode.
+  WindowSelectorItem* item_ = nullptr;
+
+  // The location of the previous mouse/touch/gesture event in screen.
+  gfx::Point previous_event_location_;
+
+  // Set to true once the bounds of |item_| change.
+  bool did_move_ = false;
+
+  SplitViewController::SnapPosition snap_position_ = SplitViewController::NONE;
+
+  DISALLOW_COPY_AND_ASSIGN(OverviewWindowDragController);
+};
+
+}  // namespace ash
+
+#endif  // ASH_WM_OVERVIEW_OVERVIEW_WINDOW_DRAG_CONTROLLER_H_
diff --git a/ash/wm/overview/scoped_overview_animation_settings.cc b/ash/wm/overview/scoped_overview_animation_settings.cc
index f4c44f7..bd73707 100644
--- a/ash/wm/overview/scoped_overview_animation_settings.cc
+++ b/ash/wm/overview/scoped_overview_animation_settings.cc
@@ -48,6 +48,8 @@
       return base::TimeDelta::FromMilliseconds(kCloseScaleMilliseconds);
     case OVERVIEW_ANIMATION_CLOSE_SELECTOR_ITEM:
       return base::TimeDelta::FromMilliseconds(kCloseFadeOutMilliseconds);
+    case OVERVIEW_ANIMATION_DRAGGING_SELECTOR_ITEM:
+      return base::TimeDelta::FromMilliseconds(kTransitionMilliseconds);
   }
   NOTREACHED();
   return base::TimeDelta();
@@ -106,6 +108,7 @@
     OverviewAnimationType animation_type) {
   switch (animation_type) {
     case OVERVIEW_ANIMATION_NONE:
+    case OVERVIEW_ANIMATION_DRAGGING_SELECTOR_ITEM:
       return nullptr;
     case OVERVIEW_ANIMATION_ENTER_OVERVIEW_MODE_FADE_IN:
     case OVERVIEW_ANIMATION_LAY_OUT_SELECTOR_ITEMS:
@@ -154,6 +157,7 @@
       break;
     case OVERVIEW_ANIMATION_CLOSING_SELECTOR_ITEM:
     case OVERVIEW_ANIMATION_CLOSE_SELECTOR_ITEM:
+    case OVERVIEW_ANIMATION_DRAGGING_SELECTOR_ITEM:
       animation_settings_->SetPreemptionStrategy(
           ui::LayerAnimator::ENQUEUE_NEW_ANIMATION);
       animation_settings_->SetTweenType(gfx::Tween::EASE_OUT);
diff --git a/ash/wm/overview/scoped_transform_overview_window.cc b/ash/wm/overview/scoped_transform_overview_window.cc
index 9e5cbde..47cd5825 100644
--- a/ash/wm/overview/scoped_transform_overview_window.cc
+++ b/ash/wm/overview/scoped_transform_overview_window.cc
@@ -9,6 +9,7 @@
 
 #include "ash/wm/overview/scoped_overview_animation_settings.h"
 #include "ash/wm/overview/window_selector_item.h"
+#include "ash/wm/splitview/split_view_controller.h"
 #include "ash/wm/window_mirror_view.h"
 #include "ash/wm/window_state.h"
 #include "ash/wm/window_util.h"
@@ -164,8 +165,10 @@
 }  // namespace
 
 ScopedTransformOverviewWindow::ScopedTransformOverviewWindow(
+    WindowSelectorItem* selector_item,
     aura::Window* window)
-    : window_(window),
+    : selector_item_(selector_item),
+      window_(window),
       determined_original_window_shape_(false),
       ignored_by_shelf_(wm::GetWindowState(window)->ignored_by_shelf()),
       overview_started_(false),
@@ -456,7 +459,25 @@
 }
 
 void ScopedTransformOverviewWindow::OnGestureEvent(ui::GestureEvent* event) {
-  if (event->type() == ui::ET_GESTURE_TAP) {
+  if (minimized_widget_ && SplitViewController::ShouldAllowSplitView()) {
+    gfx::Point location(event->location());
+    ::wm::ConvertPointToScreen(minimized_widget_->GetNativeWindow(), &location);
+    switch (event->type()) {
+      case ui::ET_GESTURE_SCROLL_BEGIN:
+      case ui::ET_GESTURE_TAP_DOWN:
+        selector_item_->HandlePressEvent(location);
+        break;
+      case ui::ET_GESTURE_SCROLL_UPDATE:
+        selector_item_->HandleDragEvent(location);
+        break;
+      case ui::ET_GESTURE_END:
+        selector_item_->HandleReleaseEvent(location);
+        break;
+      default:
+        break;
+    }
+    event->SetHandled();
+  } else if (event->type() == ui::ET_GESTURE_TAP) {
     EnsureVisible();
     window_->Show();
     wm::ActivateWindow(window_);
@@ -464,7 +485,25 @@
 }
 
 void ScopedTransformOverviewWindow::OnMouseEvent(ui::MouseEvent* event) {
-  if (event->type() == ui::ET_MOUSE_PRESSED && event->IsOnlyLeftMouseButton()) {
+  if (minimized_widget_ && SplitViewController::ShouldAllowSplitView()) {
+    gfx::Point location(event->location());
+    ::wm::ConvertPointToScreen(minimized_widget_->GetNativeWindow(), &location);
+    switch (event->type()) {
+      case ui::ET_MOUSE_PRESSED:
+        selector_item_->HandlePressEvent(location);
+        break;
+      case ui::ET_MOUSE_DRAGGED:
+        selector_item_->HandleDragEvent(location);
+        break;
+      case ui::ET_MOUSE_RELEASED:
+        selector_item_->HandleReleaseEvent(location);
+        break;
+      default:
+        break;
+    }
+    event->SetHandled();
+  } else if (event->type() == ui::ET_MOUSE_PRESSED &&
+             event->IsOnlyLeftMouseButton()) {
     EnsureVisible();
     window_->Show();
     wm::ActivateWindow(window_);
diff --git a/ash/wm/overview/scoped_transform_overview_window.h b/ash/wm/overview/scoped_transform_overview_window.h
index 56b12cf9..83d1812 100644
--- a/ash/wm/overview/scoped_transform_overview_window.h
+++ b/ash/wm/overview/scoped_transform_overview_window.h
@@ -34,6 +34,7 @@
 namespace ash {
 
 class ScopedOverviewAnimationSettings;
+class WindowSelectorItem;
 
 // Manages a window, and its transient children, in the overview mode. This
 // class allows transforming the windows with a helper to determine the best
@@ -65,7 +66,8 @@
   static gfx::Transform GetTransformForRect(const gfx::Rect& src_rect,
                                             const gfx::Rect& dst_rect);
 
-  explicit ScopedTransformOverviewWindow(aura::Window* window);
+  ScopedTransformOverviewWindow(WindowSelectorItem* selector_item,
+                                aura::Window* window);
   ~ScopedTransformOverviewWindow() override;
 
   // Starts an animation sequence which will use animation settings specified by
@@ -165,6 +167,9 @@
   // Makes Close() execute synchronously when used in tests.
   static void SetImmediateCloseForTests();
 
+  // A weak pointer to the window selector item that owns the transform window.
+  WindowSelectorItem* selector_item_;
+
   // A weak pointer to the real window in the overview.
   aura::Window* window_;
 
diff --git a/ash/wm/overview/window_grid.cc b/ash/wm/overview/window_grid.cc
index e8d26c2..acb22d7 100644
--- a/ash/wm/overview/window_grid.cc
+++ b/ash/wm/overview/window_grid.cc
@@ -257,14 +257,16 @@
 
 WindowGrid::WindowGrid(aura::Window* root_window,
                        const std::vector<aura::Window*>& windows,
-                       WindowSelector* window_selector)
+                       WindowSelector* window_selector,
+                       const gfx::Rect& bounds_in_screen)
     : root_window_(root_window),
       window_selector_(window_selector),
       window_observer_(this),
       window_state_observer_(this),
       selected_index_(0),
       num_columns_(0),
-      prepared_for_overview_(false) {
+      prepared_for_overview_(false),
+      bounds_(bounds_in_screen) {
   aura::Window::Windows windows_in_root;
   for (auto* window : windows) {
     if (window->GetRootWindow() == root_window)
@@ -275,7 +277,7 @@
     window_observer_.Add(window);
     window_state_observer_.Add(wm::GetWindowState(window));
     window_list_.push_back(
-        base::MakeUnique<WindowSelectorItem>(window, window_selector_));
+        base::MakeUnique<WindowSelectorItem>(window, window_selector_, this));
   }
 }
 
@@ -326,9 +328,8 @@
   aura::Window* widget_window = shield_widget_->GetNativeWindow();
   const gfx::Rect bounds = widget_window->parent()->bounds();
   widget_window->SetBounds(bounds);
-  gfx::Rect total_bounds = ScreenUtil::GetDisplayWorkAreaBoundsInParent(
-      root_window_->GetChildById(kShellWindowId_DefaultContainer));
-  ::wm::ConvertRectToScreen(root_window_, &total_bounds);
+
+  gfx::Rect total_bounds = bounds_;
   // Windows occupy vertically centered area with additional vertical insets.
   int horizontal_inset =
       gfx::ToFlooredInt(std::min(kOverviewInsetRatio * total_bounds.width(),
@@ -518,6 +519,20 @@
   return false;
 }
 
+void WindowGrid::RemoveItem(WindowSelectorItem* selector_item) {
+  auto iter =
+      std::find_if(window_list_.begin(), window_list_.end(),
+                   [selector_item](std::unique_ptr<WindowSelectorItem>& item) {
+                     return (item.get() == selector_item);
+                   });
+  if (iter != window_list_.end()) {
+    window_observer_.Remove(selector_item->GetWindow());
+    window_state_observer_.Remove(
+        wm::GetWindowState(selector_item->GetWindow()));
+    window_list_.erase(iter);
+  }
+}
+
 void WindowGrid::FilterItems(const base::string16& pattern) {
   base::i18n::FixedPatternStringSearchIgnoringCaseAndAccents finder(pattern);
   for (const auto& window : window_list_) {
@@ -544,6 +559,11 @@
   selection_widget_->SetOpacity(0.f);
 }
 
+void WindowGrid::SetBoundsAndUpdatePositions(const gfx::Rect& bounds) {
+  bounds_ = bounds;
+  PositionWindows(true /* animate */);
+}
+
 void WindowGrid::OnWindowDestroying(aura::Window* window) {
   window_observer_.Remove(window);
   window_state_observer_.Remove(wm::GetWindowState(window));
diff --git a/ash/wm/overview/window_grid.h b/ash/wm/overview/window_grid.h
index a0352d9..7164cfd 100644
--- a/ash/wm/overview/window_grid.h
+++ b/ash/wm/overview/window_grid.h
@@ -16,6 +16,7 @@
 #include "base/macros.h"
 #include "base/scoped_observer.h"
 #include "ui/aura/window_observer.h"
+#include "ui/gfx/geometry/rect.h"
 
 namespace views {
 class Widget;
@@ -52,7 +53,8 @@
  public:
   WindowGrid(aura::Window* root_window,
              const std::vector<aura::Window*>& window_list,
-             WindowSelector* window_selector);
+             WindowSelector* window_selector,
+             const gfx::Rect& bounds_in_screen);
   ~WindowGrid() override;
 
   // Exits overview mode, fading out the |shield_widget_| if necessary.
@@ -88,6 +90,9 @@
   // this grid owns.
   bool Contains(const aura::Window* window) const;
 
+  // Removes |selector_item| from the grid.
+  void RemoveItem(WindowSelectorItem* selector_item);
+
   // Dims the items whose titles do not contain |pattern| and prevents their
   // selection. The pattern has its accents removed and is converted to
   // lowercase in a l10n sensitive context.
@@ -99,6 +104,9 @@
   // opacity, effectively hiding the selector widget.
   void WindowClosing(WindowSelectorItem* window);
 
+  // Sets bounds for the window grid and positions all windows in the grid.
+  void SetBoundsAndUpdatePositions(const gfx::Rect& bounds_in_screen);
+
   // Returns true if the grid has no more windows.
   bool empty() const { return window_list_.empty(); }
 
@@ -190,6 +198,9 @@
   // True only after all windows have been prepared for overview.
   bool prepared_for_overview_;
 
+  // This WindowGrid's total bounds in screen coordinates.
+  gfx::Rect bounds_;
+
   DISALLOW_COPY_AND_ASSIGN(WindowGrid);
 };
 
diff --git a/ash/wm/overview/window_selector.cc b/ash/wm/overview/window_selector.cc
index 7e50d44..a38bd9e 100644
--- a/ash/wm/overview/window_selector.cc
+++ b/ash/wm/overview/window_selector.cc
@@ -19,6 +19,7 @@
 #include "ash/shelf/shelf.h"
 #include "ash/shell.h"
 #include "ash/wm/mru_window_tracker.h"
+#include "ash/wm/overview/overview_window_drag_controller.h"
 #include "ash/wm/overview/window_grid.h"
 #include "ash/wm/overview/window_selector_delegate.h"
 #include "ash/wm/overview/window_selector_item.h"
@@ -137,13 +138,31 @@
     Shelf::ForWindow(root)->UpdateVisibilityState();
 }
 
+// Returns the bounds for the overview window grid according to the split view
+// state. If split view mode is active, the overview window should open on the
+// opposite side of the default snap window.
+gfx::Rect GetGridBoundsInScreen(aura::Window* root_window) {
+  SplitViewController* split_view_controller =
+      Shell::Get()->split_view_controller();
+  if (split_view_controller->IsSplitViewModeActive()) {
+    SplitViewController::SnapPosition oppsite_position =
+        (split_view_controller->default_snap_position() ==
+         SplitViewController::LEFT)
+            ? SplitViewController::RIGHT
+            : SplitViewController::LEFT;
+    return split_view_controller->GetSnappedWindowBoundsInScreen(
+        root_window, oppsite_position);
+  } else {
+    return split_view_controller->GetDisplayWorkAreaBoundsInScreen(root_window);
+  }
+}
+
 gfx::Rect GetTextFilterPosition(aura::Window* root_window) {
-  gfx::Rect total_bounds = ScreenUtil::GetDisplayWorkAreaBoundsInParent(
-      root_window->GetChildById(kShellWindowId_DefaultContainer));
-  ::wm::ConvertRectToScreen(root_window, &total_bounds);
+  const gfx::Rect total_bounds = GetGridBoundsInScreen(root_window);
   return gfx::Rect(
-      0.5 * (total_bounds.width() -
-             std::min(kTextFilterWidth, total_bounds.width())),
+      total_bounds.x() +
+          0.5 * (total_bounds.width() -
+                 std::min(kTextFilterWidth, total_bounds.width())),
       total_bounds.y() + total_bounds.height() * kTextFilterTopScreenProportion,
       std::min(kTextFilterWidth, total_bounds.width()), kTextFilterHeight);
 }
@@ -268,7 +287,8 @@
     // root windows that don't contain any panel windows.
     PanelLayoutManager::Get(root)->SetShowCalloutWidgets(false);
 
-    std::unique_ptr<WindowGrid> grid(new WindowGrid(root, windows, this));
+    std::unique_ptr<WindowGrid> grid(
+        new WindowGrid(root, windows, this, GetGridBoundsInScreen(root)));
     if (grid->empty())
       continue;
     num_items_ += grid->size();
@@ -305,6 +325,7 @@
   UMA_HISTOGRAM_COUNTS_100("Ash.WindowSelector.Items", num_items_);
 
   Shell::Get()->activation_client()->AddObserver(this);
+  Shell::Get()->split_view_controller()->AddObserver(this);
 
   display::Screen::GetScreen()->AddObserver(this);
   Shell::Get()->metrics()->RecordUserMetricsAction(UMA_WINDOW_OVERVIEW);
@@ -324,6 +345,11 @@
   // windows in response to work area changes from window activation.
   display::Screen::GetScreen()->RemoveObserver(this);
 
+  // Stop observing split view state changes before restoring window focus.
+  // Otherwise the activation of the window triggers OnSplitViewStateChanged()
+  // that will call into this function again.
+  Shell::Get()->split_view_controller()->RemoveObserver(this);
+
   size_t remaining_items = 0;
   for (std::unique_ptr<WindowGrid>& window_grid : grid_list_) {
     for (const auto& window_selector_item : window_grid->window_list())
@@ -443,6 +469,52 @@
   grid_list_[selected_grid_index_]->WindowClosing(window);
 }
 
+void WindowSelector::SetBoundsForWindowGridsInScreen(const gfx::Rect& bounds) {
+  for (std::unique_ptr<WindowGrid>& grid : grid_list_)
+    grid->SetBoundsAndUpdatePositions(bounds);
+}
+
+void WindowSelector::RemoveWindowSelectorItem(WindowSelectorItem* item) {
+  if (item->GetWindow()->HasObserver(this)) {
+    item->GetWindow()->RemoveObserver(this);
+    observed_windows_.erase(item->GetWindow());
+    if (item->GetWindow() == restore_focus_window_)
+      restore_focus_window_ = nullptr;
+  }
+
+  // Remove |item| from the corresponding grid.
+  for (std::unique_ptr<WindowGrid>& grid : grid_list_) {
+    if (grid->Contains(item->GetWindow())) {
+      grid->RemoveItem(item);
+      break;
+    }
+  }
+}
+
+void WindowSelector::InitiateDrag(WindowSelectorItem* item,
+                                  const gfx::Point& location_in_screen) {
+  window_drag_controller_.reset(new OverviewWindowDragController(this));
+  window_drag_controller_->InitiateDrag(item, location_in_screen);
+}
+
+void WindowSelector::Drag(WindowSelectorItem* item,
+                          const gfx::Point& location_in_screen) {
+  DCHECK(window_drag_controller_.get());
+  DCHECK_EQ(item, window_drag_controller_->item());
+  window_drag_controller_->Drag(location_in_screen);
+}
+
+void WindowSelector::CompleteDrag(WindowSelectorItem* item) {
+  DCHECK(window_drag_controller_.get());
+  DCHECK_EQ(item, window_drag_controller_->item());
+  window_drag_controller_->CompleteDrag();
+}
+
+void WindowSelector::PositionWindows(bool animate) {
+  for (std::unique_ptr<WindowGrid>& grid : grid_list_)
+    grid->PositionWindows(animate);
+}
+
 bool WindowSelector::HandleKeyEvent(views::Textfield* sender,
                                     const ui::KeyEvent& key_event) {
   if (key_event.type() != ui::ET_KEY_PRESSED)
@@ -511,6 +583,11 @@
 
 void WindowSelector::OnDisplayMetricsChanged(const display::Display& display,
                                              uint32_t metrics) {
+  // Re-calculate the bounds for the window grids and position all the windows.
+  for (std::unique_ptr<WindowGrid>& grid : grid_list_) {
+    SetBoundsForWindowGridsInScreen(
+        GetGridBoundsInScreen(const_cast<aura::Window*>(grid->root_window())));
+  }
   PositionWindows(/* animate */ false);
   RepositionTextFilterOnDisplayMetricsChange();
 }
@@ -573,6 +650,11 @@
     return;
   }
 
+  // Do not cancel the overview mode if the window activation was caused by
+  // snapping window to one side of the screen.
+  if (Shell::Get()->IsSplitViewModeActive())
+    return;
+
   // Don't restore focus on exit if a window was just activated.
   ResetFocusRestoreWindow(false);
   CancelSelection();
@@ -623,13 +705,41 @@
   Move(WindowSelector::RIGHT, false);
 }
 
-aura::Window* WindowSelector::GetTextFilterWidgetWindow() {
-  return text_filter_widget_->GetNativeWindow();
+void WindowSelector::OnSplitViewStateChanged(
+    SplitViewController::State previous_state,
+    SplitViewController::State state) {
+  if (state != SplitViewController::NO_SNAP) {
+    // Do not restore focus if a window was just snapped and activated.
+    ResetFocusRestoreWindow(false);
+  }
+
+  if (state == SplitViewController::LEFT_SNAPPED) {
+    aura::Window* snapped_window =
+        Shell::Get()->split_view_controller()->left_window();
+    const gfx::Rect bounds_in_screen =
+        Shell::Get()->split_view_controller()->GetSnappedWindowBoundsInScreen(
+            snapped_window, SplitViewController::RIGHT);
+    SetBoundsForWindowGridsInScreen(bounds_in_screen);
+  } else if (state == SplitViewController::RIGHT_SNAPPED) {
+    aura::Window* snapped_window =
+        Shell::Get()->split_view_controller()->right_window();
+    const gfx::Rect bounds_in_screen =
+        Shell::Get()->split_view_controller()->GetSnappedWindowBoundsInScreen(
+            snapped_window, SplitViewController::LEFT);
+    SetBoundsForWindowGridsInScreen(bounds_in_screen);
+  } else {
+    DCHECK(state == SplitViewController::BOTH_SNAPPED ||
+           state == SplitViewController::NO_SNAP);
+    // If two windows were snapped to both sides of the screen, end overview
+    // mode. If split view mode was ended (e.g., one of the snapped window was
+    // closed or minimized / fullscreened / maximized), also end overview mode
+    // if overview mode is active.
+    CancelSelection();
+  }
 }
 
-void WindowSelector::PositionWindows(bool animate) {
-  for (std::unique_ptr<WindowGrid>& grid : grid_list_)
-    grid->PositionWindows(animate);
+aura::Window* WindowSelector::GetTextFilterWidgetWindow() {
+  return text_filter_widget_->GetNativeWindow();
 }
 
 void WindowSelector::RepositionTextFilterOnDisplayMetricsChange() {
diff --git a/ash/wm/overview/window_selector.h b/ash/wm/overview/window_selector.h
index 72913ff..8e99394 100644
--- a/ash/wm/overview/window_selector.h
+++ b/ash/wm/overview/window_selector.h
@@ -13,6 +13,7 @@
 #include <vector>
 
 #include "ash/ash_export.h"
+#include "ash/wm/splitview/split_view_controller.h"
 #include "base/macros.h"
 #include "base/time/time.h"
 #include "ui/aura/window_observer.h"
@@ -21,6 +22,11 @@
 #include "ui/views/controls/textfield/textfield_controller.h"
 #include "ui/wm/public/activation_change_observer.h"
 
+namespace gfx {
+class Point;
+class Rect;
+}  // namespace gfx
+
 namespace views {
 class Textfield;
 class Widget;
@@ -31,13 +37,15 @@
 class WindowSelectorItem;
 class WindowSelectorTest;
 class WindowGrid;
+class OverviewWindowDragController;
 
 // The WindowSelector shows a grid of all of your windows, allowing to select
 // one by clicking or tapping on it.
 class ASH_EXPORT WindowSelector : public display::DisplayObserver,
                                   public aura::WindowObserver,
                                   public ::wm::ActivationChangeObserver,
-                                  public views::TextfieldController {
+                                  public views::TextfieldController,
+                                  public SplitViewController::Observer {
  public:
   // Returns true if the window can be selected in overview mode.
   static bool IsSelectable(aura::Window* window);
@@ -75,6 +83,20 @@
   // Called when |window| is about to get closed.
   void WindowClosing(WindowSelectorItem* window);
 
+  // Called to set bounds for window grids. Used for split view.
+  void SetBoundsForWindowGridsInScreen(const gfx::Rect& bounds);
+
+  // Removes the window selector item from the overview window grid.
+  void RemoveWindowSelectorItem(WindowSelectorItem* item);
+
+  void InitiateDrag(WindowSelectorItem* item,
+                    const gfx::Point& location_in_screen);
+  void Drag(WindowSelectorItem* item, const gfx::Point& location_in_screen);
+  void CompleteDrag(WindowSelectorItem* item);
+
+  // Positions all of the windows in the overview.
+  void PositionWindows(bool animate);
+
   WindowSelectorDelegate* delegate() { return delegate_; }
 
   bool restoring_minimized_windows() const {
@@ -85,6 +107,11 @@
 
   bool is_shut_down() const { return is_shut_down_; }
 
+  const std::vector<std::unique_ptr<WindowGrid>>& grid_list_for_testing()
+      const {
+    return grid_list_;
+  }
+
   // display::DisplayObserver:
   void OnDisplayAdded(const display::Display& display) override;
   void OnDisplayRemoved(const display::Display& display) override;
@@ -108,15 +135,16 @@
   bool HandleKeyEvent(views::Textfield* sender,
                       const ui::KeyEvent& key_event) override;
 
+  // SplitViewController::Observer:
+  void OnSplitViewStateChanged(SplitViewController::State previous_state,
+                               SplitViewController::State state) override;
+
  private:
   friend class WindowSelectorTest;
 
   // Returns the aura::Window for |text_filter_widget_|.
   aura::Window* GetTextFilterWidgetWindow();
 
-  // Position all of the windows in the overview.
-  void PositionWindows(bool animate);
-
   // Repositions and resizes |text_filter_widget_| on
   // DisplayMetricsChanged event.
   void RepositionTextFilterOnDisplayMetricsChange();
@@ -193,6 +221,9 @@
 
   bool is_shut_down_ = false;
 
+  // The drag controller for a window in the overview mode.
+  std::unique_ptr<OverviewWindowDragController> window_drag_controller_;
+
   DISALLOW_COPY_AND_ASSIGN(WindowSelector);
 };
 
diff --git a/ash/wm/overview/window_selector_controller.cc b/ash/wm/overview/window_selector_controller.cc
index 19b12afa..e35229f1 100644
--- a/ash/wm/overview/window_selector_controller.cc
+++ b/ash/wm/overview/window_selector_controller.cc
@@ -10,8 +10,11 @@
 #include "ash/shell.h"
 #include "ash/shell_port.h"
 #include "ash/wm/mru_window_tracker.h"
+#include "ash/wm/overview/window_grid.h"
 #include "ash/wm/overview/window_selector.h"
+#include "ash/wm/overview/window_selector_item.h"
 #include "ash/wm/screen_pinning_controller.h"
+#include "ash/wm/splitview/split_view_controller.h"
 #include "ash/wm/window_state.h"
 #include "base/metrics/histogram_macros.h"
 
@@ -54,9 +57,28 @@
                        std::not1(std::ptr_fun(&WindowSelector::IsSelectable)));
     windows.resize(end - windows.begin());
 
-    // Don't enter overview mode with no windows.
-    if (windows.empty())
-      return false;
+    if (!Shell::Get()->IsSplitViewModeActive()) {
+      // Don't enter overview with no window if the split view mode is inactive.
+      if (windows.empty())
+        return false;
+    } else {
+      // Don't enter overview with less than 1 window if the split view mode is
+      // active.
+      if (windows.size() <= 1)
+        return false;
+
+      // Remove the default snapped window from the window list. The default
+      // snapped window occupies one side of the screen, while the other windows
+      // occupy the other side of the screen in overview mode. The default snap
+      // position is the position where the window was first snapped. See
+      // |default_snap_position_| in SplitViewController for more detail.
+      aura::Window* default_snapped_window =
+          Shell::Get()->split_view_controller()->GetDefaultSnappedWindow();
+      auto iter =
+          std::find(windows.begin(), windows.end(), default_snapped_window);
+      DCHECK(iter != windows.end());
+      windows.erase(iter);
+    }
 
     Shell::Get()->NotifyOverviewModeStarting();
     window_selector_.reset(new WindowSelector(this));
@@ -85,6 +107,17 @@
          window_selector_->restoring_minimized_windows();
 }
 
+std::vector<aura::Window*>
+WindowSelectorController::GetWindowsListInOverviewGridsForTesting() {
+  std::vector<aura::Window*> windows;
+  for (const std::unique_ptr<WindowGrid>& grid :
+       window_selector_->grid_list_for_testing()) {
+    for (const auto& window_selector_item : grid->window_list())
+      windows.push_back(window_selector_item->GetWindow());
+  }
+  return windows;
+}
+
 // TODO(flackr): Make WindowSelectorController observe the activation of
 // windows, so we can remove WindowSelectorDelegate.
 void WindowSelectorController::OnSelectionEnded() {
diff --git a/ash/wm/overview/window_selector_controller.h b/ash/wm/overview/window_selector_controller.h
index 83dcdb3..dfd6556 100644
--- a/ash/wm/overview/window_selector_controller.h
+++ b/ash/wm/overview/window_selector_controller.h
@@ -49,6 +49,10 @@
   // are visible during overview mode.
   bool IsRestoringMinimizedWindows() const;
 
+  // Gets the windows list that are shown in the overview windows grids if the
+  // overview mode is active for testing.
+  std::vector<aura::Window*> GetWindowsListInOverviewGridsForTesting();
+
   // WindowSelectorDelegate:
   void OnSelectionEnded() override;
   void AddDelayedAnimationObserver(
diff --git a/ash/wm/overview/window_selector_item.cc b/ash/wm/overview/window_selector_item.cc
index 8889005..e207b2de 100644
--- a/ash/wm/overview/window_selector_item.cc
+++ b/ash/wm/overview/window_selector_item.cc
@@ -17,6 +17,7 @@
 #include "ash/wm/overview/overview_animation_type.h"
 #include "ash/wm/overview/scoped_overview_animation_settings.h"
 #include "ash/wm/overview/scoped_transform_overview_window.h"
+#include "ash/wm/overview/window_grid.h"
 #include "ash/wm/overview/window_selector.h"
 #include "ash/wm/overview/window_selector_controller.h"
 #include "ash/wm/window_state.h"
@@ -100,6 +101,10 @@
 // this fraction of size.
 static const float kPreCloseScale = 0.02f;
 
+// Before dragging an overview window, the window will scale up |kPreDragScale|
+// to indicate its selection.
+static const float kDragWindowScale = 0.04f;
+
 // Convenience method to fade in a Window with predefined animation settings.
 // Note: The fade in animation will occur after a delay where the delay is how
 // long the lay out animations take.
@@ -112,8 +117,9 @@
   window->layer()->SetOpacity(1.0f);
 }
 
-// A Button that has a listener and listens to mouse clicks on the visible part
-// of an overview window.
+// A Button that has a listener and listens to mouse / gesture events on the
+// visible part of an overview window. Note that the drag events are only
+// handled in maximized mode.
 class ShieldButton : public views::CustomButton {
  public:
   ShieldButton(views::ButtonListener* listener, const base::string16& name)
@@ -129,6 +135,65 @@
   // after the WindowSelectorItem has been destroyed.
   void ResetListener() { listener_ = nullptr; }
 
+  // views::CustomButton:
+  bool OnMousePressed(const ui::MouseEvent& event) override {
+    if (listener() && SplitViewController::ShouldAllowSplitView()) {
+      gfx::Point location(event.location());
+      views::View::ConvertPointToScreen(this, &location);
+      listener()->HandlePressEvent(location);
+      return true;
+    }
+    return views::CustomButton::OnMousePressed(event);
+  }
+
+  void OnMouseReleased(const ui::MouseEvent& event) override {
+    if (listener() && SplitViewController::ShouldAllowSplitView()) {
+      gfx::Point location(event.location());
+      views::View::ConvertPointToScreen(this, &location);
+      listener()->HandleReleaseEvent(location);
+      return;
+    }
+    views::CustomButton::OnMouseReleased(event);
+  }
+
+  bool OnMouseDragged(const ui::MouseEvent& event) override {
+    if (listener() && SplitViewController::ShouldAllowSplitView()) {
+      gfx::Point location(event.location());
+      views::View::ConvertPointToScreen(this, &location);
+      listener()->HandleDragEvent(location);
+      return true;
+    }
+    return views::CustomButton::OnMouseDragged(event);
+  }
+
+  void OnGestureEvent(ui::GestureEvent* event) override {
+    if (listener() && SplitViewController::ShouldAllowSplitView()) {
+      gfx::Point location(event->location());
+      views::View::ConvertPointToScreen(this, &location);
+      switch (event->type()) {
+        case ui::ET_GESTURE_SCROLL_BEGIN:
+        case ui::ET_GESTURE_TAP_DOWN:
+          listener()->HandlePressEvent(location);
+          break;
+        case ui::ET_GESTURE_SCROLL_UPDATE:
+          listener()->HandleDragEvent(location);
+          break;
+        case ui::ET_GESTURE_END:
+          listener()->HandleReleaseEvent(location);
+          break;
+        default:
+          break;
+      }
+      event->SetHandled();
+      return;
+    }
+    views::CustomButton::OnGestureEvent(event);
+  }
+
+  WindowSelectorItem* listener() {
+    return static_cast<WindowSelectorItem*>(listener_);
+  }
+
  protected:
   // views::View:
   const char* GetClassName() const override { return "ShieldButton"; }
@@ -396,17 +461,19 @@
 };
 
 WindowSelectorItem::WindowSelectorItem(aura::Window* window,
-                                       WindowSelector* window_selector)
+                                       WindowSelector* window_selector,
+                                       WindowGrid* window_grid)
     : dimmed_(false),
       root_window_(window->GetRootWindow()),
-      transform_window_(window),
+      transform_window_(this, window),
       in_bounds_update_(false),
       selected_(false),
       caption_container_view_(nullptr),
       label_view_(nullptr),
       close_button_(new OverviewCloseButton(this)),
       window_selector_(window_selector),
-      background_view_(nullptr) {
+      background_view_(nullptr),
+      window_grid_(window_grid) {
   CreateWindowLabel(window->GetTitle());
   GetWindow()->AddObserver(this);
 }
@@ -542,7 +609,10 @@
     return;
   }
   CHECK(sender == caption_container_view_->listener_button());
-  window_selector_->SelectWindow(this);
+
+  // For other cases, the event is handled in OverviewWindowDragController.
+  if (!SplitViewController::ShouldAllowSplitView())
+    window_selector_->SelectWindow(this);
 }
 
 void WindowSelectorItem::OnWindowDestroying(aura::Window* window) {
@@ -565,6 +635,22 @@
       close_button_->GetPreferredSize().height());
 }
 
+void WindowSelectorItem::HandlePressEvent(
+    const gfx::Point& location_in_screen) {
+  StartDrag();
+  window_selector_->InitiateDrag(this, location_in_screen);
+}
+
+void WindowSelectorItem::HandleReleaseEvent(
+    const gfx::Point& location_in_screen) {
+  EndDrag();
+  window_selector_->CompleteDrag(this);
+}
+
+void WindowSelectorItem::HandleDragEvent(const gfx::Point& location_in_screen) {
+  window_selector_->Drag(this, location_in_screen);
+}
+
 gfx::Rect WindowSelectorItem::GetTargetBoundsInScreen() const {
   return transform_window_.GetTargetBoundsInScreen();
 }
@@ -752,4 +838,58 @@
   return transform_window_.GetOverviewWindowForMinimizedState();
 }
 
+void WindowSelectorItem::StartDrag() {
+  gfx::Rect scaled_bounds(target_bounds_);
+  scaled_bounds.Inset(-target_bounds_.width() * kDragWindowScale,
+                      -target_bounds_.height() * kDragWindowScale);
+  OverviewAnimationType animation_type =
+      OverviewAnimationType::OVERVIEW_ANIMATION_DRAGGING_SELECTOR_ITEM;
+  SetBounds(scaled_bounds, animation_type);
+
+  aura::Window* widget_window = item_widget_->GetNativeWindow();
+  if (widget_window && widget_window->parent() == GetWindow()->parent()) {
+    // TODO(xdai): This might not work if there is an always on top window.
+    // See crbug.com/733760.
+    widget_window->parent()->StackChildAtTop(widget_window);
+    widget_window->parent()->StackChildBelow(GetWindow(), widget_window);
+  }
+}
+
+void WindowSelectorItem::EndDrag() {
+  // First stack this item's window below the snapped window if split view mode
+  // is active.
+  aura::Window* dragged_window = GetWindow();
+  aura::Window* dragged_widget_window = item_widget_->GetNativeWindow();
+  aura::Window* parent_window = dragged_widget_window->parent();
+  if (Shell::Get()->IsSplitViewModeActive()) {
+    aura::Window* snapped_window =
+        Shell::Get()->split_view_controller()->GetDefaultSnappedWindow();
+    if (snapped_window->parent() == parent_window &&
+        dragged_window->parent() == parent_window) {
+      parent_window->StackChildBelow(dragged_widget_window, snapped_window);
+      parent_window->StackChildBelow(dragged_window, dragged_widget_window);
+    }
+  }
+
+  // Then find the window which was stacked right above this selector item's
+  // window before dragging and stack this selector item's window below it.
+  const std::vector<std::unique_ptr<WindowSelectorItem>>& selector_items =
+      window_grid_->window_list();
+  aura::Window* stacking_target = nullptr;
+  for (size_t index = 0; index < selector_items.size(); index++) {
+    if (index > 0) {
+      aura::Window* window = selector_items[index - 1].get()->GetWindow();
+      if (window->parent() == parent_window &&
+          dragged_window->parent() == parent_window) {
+        stacking_target = window;
+      }
+    }
+    if (selector_items[index].get() == this && stacking_target) {
+      parent_window->StackChildBelow(dragged_widget_window, stacking_target);
+      parent_window->StackChildBelow(dragged_window, dragged_widget_window);
+      break;
+    }
+  }
+}
+
 }  // namespace ash
diff --git a/ash/wm/overview/window_selector_item.h b/ash/wm/overview/window_selector_item.h
index 6e77d73..4e7f00e4 100644
--- a/ash/wm/overview/window_selector_item.h
+++ b/ash/wm/overview/window_selector_item.h
@@ -29,6 +29,7 @@
 namespace ash {
 
 class WindowSelector;
+class WindowGrid;
 
 // This class represents an item in overview mode.
 class ASH_EXPORT WindowSelectorItem : public views::ButtonListener,
@@ -47,7 +48,9 @@
     DISALLOW_COPY_AND_ASSIGN(OverviewCloseButton);
   };
 
-  WindowSelectorItem(aura::Window* window, WindowSelector* window_selector);
+  WindowSelectorItem(aura::Window* window,
+                     WindowSelector* window_selector,
+                     WindowGrid* window_grid);
   ~WindowSelectorItem() override;
 
   aura::Window* GetWindow();
@@ -120,6 +123,11 @@
   void OnWindowDestroying(aura::Window* window) override;
   void OnWindowTitleChanged(aura::Window* window) override;
 
+  // Handle the mouse/gesture event and facilitate dragging the item.
+  void HandlePressEvent(const gfx::Point& location_in_screen);
+  void HandleReleaseEvent(const gfx::Point& location_in_screen);
+  void HandleDragEvent(const gfx::Point& location_in_screen);
+
  private:
   class CaptionContainerView;
   class RoundedContainerView;
@@ -166,6 +174,15 @@
 
   aura::Window* GetOverviewWindowForMinimizedStateForTest();
 
+  // Called before dragging. Scales up the window a little bit to indicate its
+  // selection and stacks the window at the top of the Z order in order to keep
+  // it visible while dragging around.
+  void StartDrag();
+
+  // Called after dragging. Inserts the window back to its original stacking
+  // order so that the order of windows is the same as when entering overview.
+  void EndDrag();
+
   // True if the item is being shown in the overview, false if it's being
   // filtered.
   bool dimmed_;
@@ -215,6 +232,10 @@
   // which is the only textured layer used by the |item_widget_|.
   RoundedContainerView* background_view_;
 
+  // Pointer to the WindowGrid that contains |this|. Guaranteed to be non-null
+  // for the lifetime of |this|.
+  WindowGrid* window_grid_;
+
   DISALLOW_COPY_AND_ASSIGN(WindowSelectorItem);
 };
 
diff --git a/ash/wm/overview/window_selector_unittest.cc b/ash/wm/overview/window_selector_unittest.cc
index e40d566..35b22883 100644
--- a/ash/wm/overview/window_selector_unittest.cc
+++ b/ash/wm/overview/window_selector_unittest.cc
@@ -23,6 +23,7 @@
 #include "ash/wm/overview/window_selector_controller.h"
 #include "ash/wm/overview/window_selector_item.h"
 #include "ash/wm/panels/panel_layout_manager.h"
+#include "ash/wm/splitview/split_view_controller.h"
 #include "ash/wm/window_state.h"
 #include "ash/wm/window_util.h"
 #include "ash/wm/wm_event.h"
@@ -165,6 +166,10 @@
     return window_selector_controller()->window_selector_.get();
   }
 
+  SplitViewController* split_view_controller() {
+    return Shell::Get()->split_view_controller();
+  }
+
   void ToggleOverview() { window_selector_controller()->ToggleOverview(); }
 
   aura::Window* GetOverviewWindowForMinimizedState(int index,
@@ -1891,4 +1896,68 @@
   resizer->RevertDrag();
 }
 
+// Tests that dragging a overview window selector item to the edge of the screen
+// snaps the window. If two windows are snapped to left and right side of the
+// screen, exit the overview mode.
+TEST_F(WindowSelectorTest, DragOverviewWindowToSnap) {
+  const gfx::Rect bounds(0, 0, 400, 400);
+  std::unique_ptr<aura::Window> window1(CreateWindow(bounds));
+  std::unique_ptr<aura::Window> window2(CreateWindow(bounds));
+  std::unique_ptr<aura::Window> window3(CreateWindow(bounds));
+
+  ToggleOverview();
+  EXPECT_TRUE(window_selector_controller()->IsSelecting());
+  EXPECT_EQ(split_view_controller()->IsSplitViewModeActive(), false);
+
+  // Drag |window1| selector item to snap to left.
+  const int grid_index = 0;
+  WindowSelectorItem* selector_item1 =
+      GetWindowItemForWindow(grid_index, window1.get());
+  const gfx::Rect selector_item_bounds1 = selector_item1->target_bounds();
+  // Start drag in the middle of the seletor item.
+  const gfx::Point start_location1(selector_item_bounds1.CenterPoint());
+  window_selector()->InitiateDrag(selector_item1, start_location1);
+  const gfx::Point end_location1(0, 0);
+  window_selector()->Drag(selector_item1, end_location1);
+  window_selector()->CompleteDrag(selector_item1);
+
+  EXPECT_EQ(split_view_controller()->IsSplitViewModeActive(), true);
+  EXPECT_EQ(split_view_controller()->state(),
+            SplitViewController::LEFT_SNAPPED);
+  EXPECT_EQ(split_view_controller()->left_window(), window1.get());
+
+  // Drag |window2| selector item to snap to left.
+  WindowSelectorItem* selector_item2 =
+      GetWindowItemForWindow(grid_index, window2.get());
+  const gfx::Rect selector_item_bounds2 = selector_item2->target_bounds();
+  // Start drag in the middle of the seletor item.
+  const gfx::Point start_location2(selector_item_bounds2.CenterPoint());
+  window_selector()->InitiateDrag(selector_item2, start_location2);
+  const gfx::Point end_location2(0, 0);
+  window_selector()->Drag(selector_item2, end_location2);
+  window_selector()->CompleteDrag(selector_item2);
+
+  EXPECT_EQ(split_view_controller()->state(),
+            SplitViewController::LEFT_SNAPPED);
+  EXPECT_EQ(split_view_controller()->left_window(), window2.get());
+
+  // Drag |window3| selector item to snap to right.
+  WindowSelectorItem* selector_item3 =
+      GetWindowItemForWindow(grid_index, window3.get());
+  const gfx::Rect selector_item_bounds3 = selector_item3->target_bounds();
+  // Start drag in the middle of the seletor item.
+  const gfx::Point start_location3(selector_item_bounds3.CenterPoint());
+  window_selector()->InitiateDrag(selector_item3, start_location3);
+  const gfx::Rect work_area_rect =
+      split_view_controller()->GetDisplayWorkAreaBoundsInScreen(window2.get());
+  const gfx::Point end_location3(work_area_rect.width(), 0);
+  window_selector()->Drag(selector_item3, end_location3);
+  window_selector()->CompleteDrag(selector_item3);
+
+  EXPECT_EQ(split_view_controller()->state(),
+            SplitViewController::BOTH_SNAPPED);
+  EXPECT_EQ(split_view_controller()->right_window(), window3.get());
+  EXPECT_FALSE(window_selector_controller()->IsSelecting());
+}
+
 }  // namespace ash
diff --git a/ash/wm/splitview/split_view_controller.cc b/ash/wm/splitview/split_view_controller.cc
index b86b3d5a..699c26a 100644
--- a/ash/wm/splitview/split_view_controller.cc
+++ b/ash/wm/splitview/split_view_controller.cc
@@ -128,10 +128,10 @@
 
 gfx::Rect SplitViewController::GetSnappedWindowBoundsInParent(
     aura::Window* window,
-    State snap_state) {
-  if (snap_state == LEFT_SNAPPED)
+    SnapPosition snap_position) {
+  if (snap_position == LEFT)
     return GetLeftWindowBoundsInParent(window);
-  else if (snap_state == RIGHT_SNAPPED)
+  else if (snap_position == RIGHT)
     return GetRightWindowBoundsInParent(window);
 
   NOTREACHED();
@@ -140,10 +140,10 @@
 
 gfx::Rect SplitViewController::GetSnappedWindowBoundsInScreen(
     aura::Window* window,
-    State snap_state) {
-  if (snap_state == LEFT_SNAPPED)
+    SnapPosition snap_position) {
+  if (snap_position == LEFT)
     return GetLeftWindowBoundsInScreen(window);
-  else if (snap_state == RIGHT_SNAPPED)
+  else if (snap_position == RIGHT)
     return GetRightWindowBoundsInScreen(window);
 
   NOTREACHED();
@@ -220,7 +220,7 @@
   // is active.
   if (default_snap_position_ == LEFT)
     SnapWindow(gained_active, SplitViewController::RIGHT);
-  else
+  else if (default_snap_position_ == RIGHT)
     SnapWindow(gained_active, SplitViewController::LEFT);
 }
 
@@ -232,7 +232,7 @@
     if (default_snap_position_ == LEFT) {
       StopObserving(right_window_);
       state_ = LEFT_SNAPPED;
-    } else {
+    } else if (default_snap_position_ == RIGHT) {
       StopObserving(left_window_);
       state_ = RIGHT_SNAPPED;
     }
@@ -250,7 +250,7 @@
       if (CanSnap(window) && window != GetDefaultSnappedWindow()) {
         if (default_snap_position_ == LEFT)
           SnapWindow(window, SplitViewController::RIGHT);
-        else
+        else if (default_snap_position_ == RIGHT)
           SnapWindow(window, SplitViewController::LEFT);
         break;
       }
@@ -263,7 +263,7 @@
   StopObserving(right_window_);
   left_window_ = nullptr;
   right_window_ = nullptr;
-  default_snap_position_ = LEFT;
+  default_snap_position_ = NONE;
   divider_position_ = -1;
 
   State previous_state = state_;
diff --git a/ash/wm/splitview/split_view_controller.h b/ash/wm/splitview/split_view_controller.h
index cab2c67..7178a53b 100644
--- a/ash/wm/splitview/split_view_controller.h
+++ b/ash/wm/splitview/split_view_controller.h
@@ -26,7 +26,7 @@
                                        public ShellObserver {
  public:
   enum State { NO_SNAP, LEFT_SNAPPED, RIGHT_SNAPPED, BOTH_SNAPPED };
-  enum SnapPosition { LEFT, RIGHT };
+  enum SnapPosition { NONE, LEFT, RIGHT };
 
   class Observer {
    public:
@@ -58,9 +58,9 @@
   // Gets the window bounds according to the snap state |snap_state| and the
   // separator position |separator_position_|.
   gfx::Rect GetSnappedWindowBoundsInParent(aura::Window* window,
-                                           State snap_state);
+                                           SnapPosition snap_position);
   gfx::Rect GetSnappedWindowBoundsInScreen(aura::Window* window,
-                                           State snap_state);
+                                           SnapPosition snap_position);
   gfx::Rect GetDisplayWorkAreaBoundsInParent(aura::Window* window);
   gfx::Rect GetDisplayWorkAreaBoundsInScreen(aura::Window* window);
 
@@ -87,6 +87,7 @@
   aura::Window* right_window() { return right_window_; }
   int divider_position() const { return divider_position_; }
   State state() const { return state_; }
+  SnapPosition default_snap_position() const { return default_snap_position_; }
 
  private:
   friend class SplitViewControllerTest;
@@ -122,7 +123,7 @@
   // first window was snapped left, then |default_snap_position_| equals LEFT,
   // i.e., all the other windows will open snapped on the right side - and vice
   // versa.
-  SnapPosition default_snap_position_ = LEFT;
+  SnapPosition default_snap_position_ = NONE;
 
   base::ObserverList<Observer> observers_;
 
diff --git a/ash/wm/splitview/split_view_controller_unittest.cc b/ash/wm/splitview/split_view_controller_unittest.cc
index 2f1a196e..a726183 100644
--- a/ash/wm/splitview/split_view_controller_unittest.cc
+++ b/ash/wm/splitview/split_view_controller_unittest.cc
@@ -6,6 +6,7 @@
 
 #include "ash/shell.h"
 #include "ash/test/ash_test_base.h"
+#include "ash/wm/overview/window_selector_controller.h"
 #include "ash/wm/window_state.h"
 #include "ash/wm/window_util.h"
 #include "ash/wm/wm_event.h"
@@ -26,6 +27,16 @@
 
   void EndSplitView() { split_view_controller()->EndSplitView(); }
 
+  void ToggleOverview() {
+    Shell::Get()->window_selector_controller()->ToggleOverview();
+  }
+
+  std::vector<aura::Window*> GetWindowsInOverviewGrids() {
+    return Shell::Get()
+        ->window_selector_controller()
+        ->GetWindowsListInOverviewGridsForTesting();
+  }
+
   SplitViewController* split_view_controller() {
     return Shell::Get()->split_view_controller();
   }
@@ -53,7 +64,7 @@
   EXPECT_EQ(split_view_controller()->IsSplitViewModeActive(), true);
   EXPECT_EQ(window1->GetBoundsInScreen(),
             split_view_controller()->GetSnappedWindowBoundsInScreen(
-                window1.get(), SplitViewController::LEFT_SNAPPED));
+                window1.get(), SplitViewController::LEFT));
 
   split_view_controller()->SnapWindow(window2.get(),
                                       SplitViewController::RIGHT);
@@ -64,7 +75,7 @@
   EXPECT_EQ(split_view_controller()->IsSplitViewModeActive(), true);
   EXPECT_EQ(window2->GetBoundsInScreen(),
             split_view_controller()->GetSnappedWindowBoundsInScreen(
-                window2.get(), SplitViewController::RIGHT_SNAPPED));
+                window2.get(), SplitViewController::RIGHT));
 
   EndSplitView();
   EXPECT_EQ(split_view_controller()->state(), SplitViewController::NO_SNAP);
@@ -160,4 +171,53 @@
             SplitViewController::BOTH_SNAPPED);
 }
 
+// Tests that if split view mode and overview mode are active at the same time,
+// i.e., half of the screen is occupied by a snapped window and half of the
+// screen is occupied by the overview windows grid, the next activatable window
+// will be picked to snap when exiting the overview mode.
+TEST_F(SplitViewControllerTest, ExitOverviewTest) {
+  const gfx::Rect bounds(0, 0, 400, 400);
+  std::unique_ptr<aura::Window> window1(CreateWindow(bounds));
+  std::unique_ptr<aura::Window> window2(CreateWindow(bounds));
+  std::unique_ptr<aura::Window> window3(CreateWindow(bounds));
+  EXPECT_EQ(split_view_controller()->IsSplitViewModeActive(), false);
+
+  ToggleOverview();
+  split_view_controller()->SnapWindow(window1.get(), SplitViewController::LEFT);
+  EXPECT_EQ(split_view_controller()->IsSplitViewModeActive(), true);
+  EXPECT_EQ(split_view_controller()->state(),
+            SplitViewController::LEFT_SNAPPED);
+  EXPECT_EQ(split_view_controller()->left_window(), window1.get());
+
+  ToggleOverview();
+  EXPECT_EQ(split_view_controller()->state(),
+            SplitViewController::BOTH_SNAPPED);
+  EXPECT_EQ(split_view_controller()->right_window(), window3.get());
+}
+
+// Tests that if split view mode is active when entering overview, the overview
+// windows grid should show in the non-default side of the screen, and the
+// default snapped window should not be shown in the overview window grid.
+TEST_F(SplitViewControllerTest, EnterOverviewTest) {
+  const gfx::Rect bounds(0, 0, 400, 400);
+  std::unique_ptr<aura::Window> window1(CreateWindow(bounds));
+  std::unique_ptr<aura::Window> window2(CreateWindow(bounds));
+  std::unique_ptr<aura::Window> window3(CreateWindow(bounds));
+
+  split_view_controller()->SnapWindow(window1.get(), SplitViewController::LEFT);
+  split_view_controller()->SnapWindow(window2.get(),
+                                      SplitViewController::RIGHT);
+  EXPECT_EQ(split_view_controller()->state(),
+            SplitViewController::BOTH_SNAPPED);
+  EXPECT_EQ(split_view_controller()->GetDefaultSnappedWindow(), window1.get());
+
+  ToggleOverview();
+  EXPECT_EQ(split_view_controller()->state(),
+            SplitViewController::LEFT_SNAPPED);
+  std::vector<aura::Window*> windows = GetWindowsInOverviewGrids();
+  auto iter = std::find(windows.begin(), windows.end(),
+                        split_view_controller()->GetDefaultSnappedWindow());
+  EXPECT_TRUE(iter == windows.end());
+}
+
 }  // namespace ash
diff --git a/base/i18n/rtl.cc b/base/i18n/rtl.cc
index 2b6bf37..e7e0006 100644
--- a/base/i18n/rtl.cc
+++ b/base/i18n/rtl.cc
@@ -156,12 +156,14 @@
 void SetICUDefaultLocale(const std::string& locale_string) {
   icu::Locale locale(ICULocaleName(locale_string).c_str());
   UErrorCode error_code = U_ZERO_ERROR;
-  icu::Locale::setDefault(locale, error_code);
-  // This return value is actually bogus because Locale object is
-  // an ID and setDefault seems to always succeed (regardless of the
-  // presence of actual locale data). However,
-  // it does not hurt to have it as a sanity check.
-  DCHECK(U_SUCCESS(error_code));
+  const char* lang = locale.getLanguage();
+  if (lang != nullptr && *lang != '\0') {
+    icu::Locale::setDefault(locale, error_code);
+  } else {
+    LOG(ERROR) << "Failed to set the ICU default locale to " << locale_string
+               << ". Falling back to en-US.";
+    icu::Locale::setDefault(icu::Locale::getUS(), error_code);
+  }
   g_icu_text_direction = UNKNOWN_DIRECTION;
 }
 
diff --git a/base/i18n/rtl_unittest.cc b/base/i18n/rtl_unittest.cc
index c040670..62d8b88f 100644
--- a/base/i18n/rtl_unittest.cc
+++ b/base/i18n/rtl_unittest.cc
@@ -17,6 +17,7 @@
 #include "build/build_config.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "testing/platform_test.h"
+#include "third_party/icu/source/common/unicode/locid.h"
 #include "third_party/icu/source/i18n/unicode/usearch.h"
 
 namespace base {
@@ -467,5 +468,19 @@
   EXPECT_EQ(was_rtl, IsRTL());
 }
 
+class SetICULocaleTest : public PlatformTest {};
+
+TEST_F(SetICULocaleTest, OverlongLocaleId) {
+  test::ScopedRestoreICUDefaultLocale restore_locale;
+  std::string id("fr-ca-x-foo");
+  while (id.length() < 152)
+    id.append("-x-foo");
+  SetICUDefaultLocale(id);
+  EXPECT_STRNE("en_US", icu::Locale::getDefault().getName());
+  id.append("zzz");
+  SetICUDefaultLocale(id);
+  EXPECT_STREQ("en_US", icu::Locale::getDefault().getName());
+}
+
 }  // namespace i18n
 }  // namespace base
diff --git a/base/message_loop/message_loop_test.cc b/base/message_loop/message_loop_test.cc
index b764596..9ed24342 100644
--- a/base/message_loop/message_loop_test.cc
+++ b/base/message_loop/message_loop_test.cc
@@ -81,12 +81,12 @@
 // This function records the time when Run was called in a Time object, which is
 // useful for building a variety of MessageLoop tests.
 // TODO(sky): remove?
-void RecordRunTimeFunc(Time* run_time, int* quit_counter) {
-  *run_time = Time::Now();
+void RecordRunTimeFunc(TimeTicks* run_time, int* quit_counter) {
+  *run_time = TimeTicks::Now();
 
-    // Cause our Run function to take some time to execute.  As a result we can
-    // count on subsequent RecordRunTimeFunc()s running at a future time,
-    // without worry about the resolution of our system clock being an issue.
+  // Cause our Run function to take some time to execute.  As a result we can
+  // count on subsequent RecordRunTimeFunc()s running at a future time,
+  // without worry about the resolution of our system clock being an issue.
   SlowFunc(TimeDelta::FromMilliseconds(10), quit_counter);
 }
 
@@ -131,14 +131,14 @@
   const TimeDelta kDelay = TimeDelta::FromMilliseconds(100);
 
   int num_tasks = 1;
-  Time run_time;
+  TimeTicks run_time;
 
   loop.task_runner()->PostDelayedTask(
       FROM_HERE, BindOnce(&RecordRunTimeFunc, &run_time, &num_tasks), kDelay);
 
-  Time time_before_run = Time::Now();
+  TimeTicks time_before_run = TimeTicks::Now();
   RunLoop().Run();
-  Time time_after_run = Time::Now();
+  TimeTicks time_after_run = TimeTicks::Now();
 
   EXPECT_EQ(0, num_tasks);
   EXPECT_LT(kDelay, time_after_run - time_before_run);
@@ -150,7 +150,7 @@
 
   // Test that two tasks with different delays run in the right order.
   int num_tasks = 2;
-  Time run_time1, run_time2;
+  TimeTicks run_time1, run_time2;
 
   loop.task_runner()->PostDelayedTask(
       FROM_HERE, BindOnce(&RecordRunTimeFunc, &run_time1, &num_tasks),
@@ -182,7 +182,7 @@
   const TimeDelta kDelay = TimeDelta::FromMilliseconds(100);
 
   int num_tasks = 2;
-  Time run_time1, run_time2;
+  TimeTicks run_time1, run_time2;
 
   loop.task_runner()->PostDelayedTask(
       FROM_HERE, BindOnce(&RecordRunTimeFunc, &run_time1, &num_tasks), kDelay);
@@ -205,7 +205,7 @@
   const TimeDelta kPause = TimeDelta::FromMilliseconds(50);
 
   int num_tasks = 2;
-  Time run_time;
+  TimeTicks run_time;
 
   loop.task_runner()->PostTask(FROM_HERE,
                                BindOnce(&SlowFunc, kPause, &num_tasks));
@@ -213,9 +213,9 @@
       FROM_HERE, BindOnce(&RecordRunTimeFunc, &run_time, &num_tasks),
       TimeDelta::FromMilliseconds(10));
 
-  Time time_before_run = Time::Now();
+  TimeTicks time_before_run = TimeTicks::Now();
   RunLoop().Run();
-  Time time_after_run = Time::Now();
+  TimeTicks time_after_run = TimeTicks::Now();
 
   EXPECT_EQ(0, num_tasks);
 
@@ -233,7 +233,7 @@
   // delayed task's delay has passed.
 
   int num_tasks = 11;
-  Time run_time1, run_time2;
+  TimeTicks run_time1, run_time2;
 
   // Clutter the ML with tasks.
   for (int i = 1; i < num_tasks; ++i)
@@ -260,7 +260,7 @@
   // By setting num_tasks to 1, we ensure that the first task to run causes the
   // run loop to exit.
   int num_tasks = 1;
-  Time run_time1, run_time2;
+  TimeTicks run_time1, run_time2;
 
   loop.task_runner()->PostDelayedTask(
       FROM_HERE, BindOnce(&RecordRunTimeFunc, &run_time1, &num_tasks),
@@ -269,13 +269,13 @@
       FROM_HERE, BindOnce(&RecordRunTimeFunc, &run_time2, &num_tasks),
       TimeDelta::FromMilliseconds(10));
 
-  Time start_time = Time::Now();
+  TimeTicks start_time = TimeTicks::Now();
 
   RunLoop().Run();
   EXPECT_EQ(0, num_tasks);
 
   // Ensure that we ran in far less time than the slower timer.
-  TimeDelta total_time = Time::Now() - start_time;
+  TimeDelta total_time = TimeTicks::Now() - start_time;
   EXPECT_GT(5000, total_time.InMilliseconds());
 
   // In case both timers somehow run at nearly the same time, sleep a little
diff --git a/base/message_loop/message_pump_fuchsia.cc b/base/message_loop/message_pump_fuchsia.cc
index f3ff253..aaac845 100644
--- a/base/message_loop/message_pump_fuchsia.cc
+++ b/base/message_loop/message_pump_fuchsia.cc
@@ -28,6 +28,8 @@
 }
 
 bool MessagePumpFuchsia::FileDescriptorWatcher::StopWatchingFileDescriptor() {
+  // If our pump is gone, or we do not have a wait operation active, then there
+  // is nothing to do here.
   if (!weak_pump_ || handle_ == MX_HANDLE_INVALID)
     return true;
 
@@ -42,7 +44,7 @@
 
 MessagePumpFuchsia::MessagePumpFuchsia()
     : keep_running_(true), weak_factory_(this) {
-  CHECK_EQ(0, mx_port_create(0, &port_));
+  CHECK_EQ(MX_OK, mx_port_create(0, &port_));
 }
 
 MessagePumpFuchsia::~MessagePumpFuchsia() {
@@ -150,10 +152,10 @@
     if (did_work)
       continue;
 
-    mx_time_t deadline = delayed_work_time_.is_null()
-                             ? MX_TIME_INFINITE
-                             : mx_time_get(MX_CLOCK_MONOTONIC) +
-                                   delayed_work_time_.ToInternalValue();
+    mx_time_t deadline =
+        delayed_work_time_.is_null()
+            ? MX_TIME_INFINITE
+            : mx_deadline_after(delayed_work_time_.ToInternalValue());
     mx_port_packet_t packet;
     const mx_status_t wait_status = mx_port_wait(port_, deadline, &packet, 0);
     if (wait_status != MX_OK && wait_status != MX_ERR_TIMED_OUT) {
diff --git a/base/task_runner.h b/base/task_runner.h
index ac11791..e198f96 100644
--- a/base/task_runner.h
+++ b/base/task_runner.h
@@ -63,11 +63,9 @@
   // Equivalent to PostDelayedTask(from_here, task, 0).
   bool PostTask(const tracked_objects::Location& from_here, OnceClosure task);
 
-  // Like PostTask, but tries to run the posted task only after
-  // |delay_ms| has passed.
-  //
-  // It is valid for an implementation to ignore |delay_ms|; that is,
-  // to have PostDelayedTask behave the same as PostTask.
+  // Like PostTask, but tries to run the posted task only after |delay_ms|
+  // has passed. Implementations should use a tick clock, rather than wall-
+  // clock time, to implement |delay|.
   virtual bool PostDelayedTask(const tracked_objects::Location& from_here,
                                OnceClosure task,
                                base::TimeDelta delay) = 0;
diff --git a/cc/animation/transform_operation.cc b/cc/animation/transform_operation.cc
index 84156241..846f85e 100644
--- a/cc/animation/transform_operation.cc
+++ b/cc/animation/transform_operation.cc
@@ -116,6 +116,38 @@
   }
 }
 
+bool TransformOperation::operator==(const TransformOperation& other) const {
+  if (type != other.type)
+    return false;
+  switch (type) {
+    case TransformOperation::TRANSFORM_OPERATION_TRANSLATE:
+      return translate.x == other.translate.x &&
+             translate.y == other.translate.y &&
+             translate.z == other.translate.z;
+    case TransformOperation::TRANSFORM_OPERATION_ROTATE:
+      return rotate.axis.x == other.rotate.axis.x &&
+             rotate.axis.y == other.rotate.axis.y &&
+             rotate.axis.z == other.rotate.axis.z &&
+             rotate.angle == other.rotate.angle;
+    case TransformOperation::TRANSFORM_OPERATION_SCALE:
+      return scale.x == other.scale.x && scale.y == other.scale.y &&
+             scale.z == other.scale.z;
+    case TransformOperation::TRANSFORM_OPERATION_SKEW:
+      return skew.x == other.skew.x && skew.y == other.skew.y;
+    case TransformOperation::TRANSFORM_OPERATION_PERSPECTIVE:
+      return perspective_depth == other.perspective_depth;
+    case TransformOperation::TRANSFORM_OPERATION_MATRIX:
+    case TransformOperation::TRANSFORM_OPERATION_IDENTITY:
+      return matrix == other.matrix;
+  }
+  NOTREACHED();
+  return false;
+}
+
+bool TransformOperation::operator!=(const TransformOperation& other) const {
+  return !(*this == other);
+}
+
 bool TransformOperation::BlendTransformOperations(
     const TransformOperation* from,
     const TransformOperation* to,
diff --git a/cc/animation/transform_operation.h b/cc/animation/transform_operation.h
index 1a6a816..477e6493 100644
--- a/cc/animation/transform_operation.h
+++ b/cc/animation/transform_operation.h
@@ -5,6 +5,7 @@
 #ifndef CC_ANIMATION_TRANSFORM_OPERATION_H_
 #define CC_ANIMATION_TRANSFORM_OPERATION_H_
 
+#include "cc/animation/animation_export.h"
 #include "ui/gfx/transform.h"
 
 namespace gfx {
@@ -13,7 +14,7 @@
 
 namespace cc {
 
-struct TransformOperation {
+struct CC_ANIMATION_EXPORT TransformOperation {
   enum Type {
     TRANSFORM_OPERATION_TRANSLATE,
     TRANSFORM_OPERATION_ROTATE,
@@ -58,6 +59,9 @@
   // Sets |matrix| based on type and the union values.
   void Bake();
 
+  bool operator==(const TransformOperation& other) const;
+  bool operator!=(const TransformOperation& other) const;
+
   static bool BlendTransformOperations(const TransformOperation* from,
                                        const TransformOperation* to,
                                        SkMScalar progress,
diff --git a/cc/animation/transform_operations.cc b/cc/animation/transform_operations.cc
index 616c31a..65027f6 100644
--- a/cc/animation/transform_operations.cc
+++ b/cc/animation/transform_operations.cc
@@ -277,6 +277,10 @@
   operations_.push_back(TransformOperation());
 }
 
+void TransformOperations::Append(const TransformOperation& operation) {
+  operations_.push_back(operation);
+}
+
 bool TransformOperations::IsIdentity() const {
   for (size_t i = 0; i < operations_.size(); ++i) {
     if (!operations_[i].IsIdentity())
@@ -285,8 +289,18 @@
   return true;
 }
 
-void TransformOperations::Append(const TransformOperation& operation) {
-  operations_.push_back(operation);
+bool TransformOperations::operator==(const TransformOperations& other) const {
+  if (size() != other.size())
+    return false;
+  for (size_t i = 0; i < operations_.size(); ++i) {
+    if (operations_[i] != other.operations_[i])
+      return false;
+  }
+  return true;
+}
+
+bool TransformOperations::operator!=(const TransformOperations& other) const {
+  return !(*this == other);
 }
 
 bool TransformOperations::BlendInternal(const TransformOperations& from,
diff --git a/cc/animation/transform_operations.h b/cc/animation/transform_operations.h
index 0b91d87..ce618be 100644
--- a/cc/animation/transform_operations.h
+++ b/cc/animation/transform_operations.h
@@ -97,6 +97,13 @@
     DCHECK_LT(index, size());
     return operations_[index];
   }
+  TransformOperation& at(size_t index) {
+    DCHECK_LT(index, size());
+    return operations_[index];
+  }
+
+  bool operator==(const TransformOperations& other) const;
+  bool operator!=(const TransformOperations& other) const;
 
  private:
   bool BlendInternal(const TransformOperations& from,
diff --git a/cc/animation/transform_operations_unittest.cc b/cc/animation/transform_operations_unittest.cc
index 33576a5..24e7118 100644
--- a/cc/animation/transform_operations_unittest.cc
+++ b/cc/animation/transform_operations_unittest.cc
@@ -1589,5 +1589,57 @@
   EXPECT_EQ(2.f, scale);
 }
 
+TEST(TransformOperationsTest, Equality) {
+  TransformOperations lhs;
+  TransformOperations rhs;
+
+  // Empty lists of operations are trivially equal.
+  EXPECT_EQ(lhs, rhs);
+
+  rhs.AppendIdentity();
+  rhs.AppendTranslate(0, 0, 0);
+  rhs.AppendRotate(1, 0, 0, 0);
+  rhs.AppendScale(1, 1, 1);
+  rhs.AppendSkew(0, 0);
+  rhs.AppendMatrix(gfx::Transform());
+
+  // Even though both lists operations are effectively the identity matrix, rhs
+  // has a different number of operations and is therefore different.
+  EXPECT_NE(lhs, rhs);
+
+  rhs.AppendPerspective(800);
+
+  // Assignment should produce equal lists of operations.
+  lhs = rhs;
+  EXPECT_EQ(lhs, rhs);
+
+  // Cannot affect identity operations.
+  lhs.at(0).translate.x = 1;
+  EXPECT_EQ(lhs, rhs);
+
+  lhs.at(1).translate.x = 1;
+  EXPECT_NE(lhs, rhs);
+
+  lhs = rhs;
+  lhs.at(2).rotate.angle = 1;
+  EXPECT_NE(lhs, rhs);
+
+  lhs = rhs;
+  lhs.at(3).scale.x = 2;
+  EXPECT_NE(lhs, rhs);
+
+  lhs = rhs;
+  lhs.at(4).skew.x = 2;
+  EXPECT_NE(lhs, rhs);
+
+  lhs = rhs;
+  lhs.at(5).matrix.Translate3d(1, 1, 1);
+  EXPECT_NE(lhs, rhs);
+
+  lhs = rhs;
+  lhs.at(6).perspective_depth = 801;
+  EXPECT_NE(lhs, rhs);
+}
+
 }  // namespace
 }  // namespace cc
diff --git a/cc/input/browser_controls_offset_manager.cc b/cc/input/browser_controls_offset_manager.cc
index ad61f21..6f31b424 100644
--- a/cc/input/browser_controls_offset_manager.cc
+++ b/cc/input/browser_controls_offset_manager.cc
@@ -223,7 +223,7 @@
   if (has_animation() && animation_direction_ == direction)
     return;
 
-  if (!TopControlsHeight()) {
+  if (!TopControlsHeight() && !BottomControlsHeight()) {
     client_->SetCurrentBrowserControlsShownRatio(
         direction == HIDING_CONTROLS ? 0.f : 1.f);
     return;
diff --git a/cc/input/browser_controls_offset_manager_unittest.cc b/cc/input/browser_controls_offset_manager_unittest.cc
index b053b0b..c141b83 100644
--- a/cc/input/browser_controls_offset_manager_unittest.cc
+++ b/cc/input/browser_controls_offset_manager_unittest.cc
@@ -180,6 +180,38 @@
   EXPECT_FLOAT_EQ(0.f, manager->ContentTopOffset());
 }
 
+TEST(BrowserControlsOffsetManagerTest,
+     BottomControlsPartialShownHideAnimation) {
+  MockBrowserControlsOffsetManagerClient client(0.f, 0.5f, 0.5f);
+  client.SetBottomControlsHeight(100.f);
+  BrowserControlsOffsetManager* manager = client.manager();
+  manager->ScrollBegin();
+  manager->ScrollBy(gfx::Vector2dF(0.f, 300.f));
+  EXPECT_FLOAT_EQ(0.f, manager->BottomControlsShownRatio());
+  EXPECT_FLOAT_EQ(0.f, manager->ContentTopOffset());
+  manager->ScrollEnd();
+
+  manager->ScrollBegin();
+  manager->ScrollBy(gfx::Vector2dF(0.f, -20.f));
+  EXPECT_FLOAT_EQ(0.2f, manager->BottomControlsShownRatio());
+  EXPECT_FLOAT_EQ(0.f, manager->ContentTopOffset());
+  manager->ScrollEnd();
+
+  EXPECT_TRUE(manager->has_animation());
+
+  base::TimeTicks time = base::TimeTicks::Now();
+  float previous;
+  while (manager->has_animation()) {
+    previous = manager->BottomControlsShownRatio();
+    time = base::TimeDelta::FromMicroseconds(100) + time;
+    manager->Animate(time);
+    EXPECT_LT(manager->BottomControlsShownRatio(), previous);
+  }
+  EXPECT_FALSE(manager->has_animation());
+  EXPECT_FLOAT_EQ(0.f, manager->BottomControlsShownRatio());
+  EXPECT_FLOAT_EQ(0.f, manager->ContentTopOffset());
+}
+
 TEST(BrowserControlsOffsetManagerTest, PartialShownShowAnimation) {
   MockBrowserControlsOffsetManagerClient client(100.f, 0.5f, 0.5f);
   BrowserControlsOffsetManager* manager = client.manager();
@@ -211,6 +243,33 @@
 }
 
 TEST(BrowserControlsOffsetManagerTest,
+     BottomControlsPartialShownShowAnimation) {
+  MockBrowserControlsOffsetManagerClient client(0.f, 0.5f, 0.5f);
+  client.SetBottomControlsHeight(100.f);
+  BrowserControlsOffsetManager* manager = client.manager();
+
+  manager->ScrollBegin();
+  manager->ScrollBy(gfx::Vector2dF(0.f, 20.f));
+  EXPECT_FLOAT_EQ(0.8f, manager->BottomControlsShownRatio());
+  EXPECT_FLOAT_EQ(0.f, manager->ContentTopOffset());
+  manager->ScrollEnd();
+
+  EXPECT_TRUE(manager->has_animation());
+
+  base::TimeTicks time = base::TimeTicks::Now();
+  float previous;
+  while (manager->has_animation()) {
+    previous = manager->BottomControlsShownRatio();
+    time = base::TimeDelta::FromMicroseconds(100) + time;
+    manager->Animate(time);
+    EXPECT_GT(manager->BottomControlsShownRatio(), previous);
+  }
+  EXPECT_FALSE(manager->has_animation());
+  EXPECT_FLOAT_EQ(1.f, manager->BottomControlsShownRatio());
+  EXPECT_FLOAT_EQ(0.f, manager->ContentTopOffset());
+}
+
+TEST(BrowserControlsOffsetManagerTest,
      PartialHiddenWithAmbiguousThresholdShows) {
   MockBrowserControlsOffsetManagerClient client(100.f, 0.25f, 0.25f);
   BrowserControlsOffsetManager* manager = client.manager();
diff --git a/chrome/android/java/res/layout/bottom_control_container.xml b/chrome/android/java/res/layout/bottom_control_container.xml
index 34b469a..3b2d02b 100644
--- a/chrome/android/java/res/layout/bottom_control_container.xml
+++ b/chrome/android/java/res/layout/bottom_control_container.xml
@@ -9,6 +9,13 @@
     android:layout_width="match_parent"
     android:layout_height="wrap_content" >
 
+    <FrameLayout
+        android:id="@+id/bottom_sheet_content"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:paddingBottom="@dimen/bottom_nav_height"
+        android:background="@color/default_primary_color" />
+
     <org.chromium.chrome.browser.toolbar.ToolbarControlContainer
         android:id="@+id/control_container"
         android:layout_width="match_parent"
@@ -62,13 +69,6 @@
         </view>
     </org.chromium.chrome.browser.toolbar.ToolbarControlContainer>
 
-    <FrameLayout
-        android:id="@+id/bottom_sheet_content"
-        android:layout_width="match_parent"
-        android:layout_height="match_parent"
-        android:paddingBottom="@dimen/bottom_nav_height"
-        android:background="@color/default_primary_color" />
-
     <ViewStub
         android:id="@+id/bottom_omnibox_results_container_stub"
         android:layout_width="match_parent"
diff --git a/chrome/android/java/res/layout/connection_info.xml b/chrome/android/java/res/layout/connection_info.xml
index e360ea1..888f104 100644
--- a/chrome/android/java/res/layout/connection_info.xml
+++ b/chrome/android/java/res/layout/connection_info.xml
@@ -29,13 +29,14 @@
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:paddingBottom="@dimen/connection_info_padding_thin"
-            android:textStyle="bold"
+            style="@style/RobotoMediumStyle"
             android:textColor="@color/connection_info_popup_text" />
 
         <TextView
             android:id="@+id/connection_info_description"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
+            android:lineSpacingExtra="6dp"
             android:textColor="@color/connection_info_popup_text" />
     </LinearLayout>
 
diff --git a/chrome/android/java/res/layout/item_chooser_dialog.xml b/chrome/android/java/res/layout/item_chooser_dialog.xml
index 3806426..ffce6fd 100644
--- a/chrome/android/java/res/layout/item_chooser_dialog.xml
+++ b/chrome/android/java/res/layout/item_chooser_dialog.xml
@@ -9,7 +9,7 @@
     android:layout_width="fill_parent"
     android:layout_height="fill_parent"
     android:orientation="vertical"
-    android:paddingBottom="8dp"
+    android:paddingBottom="12dp"
     android:paddingTop="20dp" >
 
     <!-- The title at the top. -->
diff --git a/chrome/android/java/res/layout/suggestions_bottom_sheet_content.xml b/chrome/android/java/res/layout/suggestions_bottom_sheet_content.xml
index 78d8cda..73dc38d 100644
--- a/chrome/android/java/res/layout/suggestions_bottom_sheet_content.xml
+++ b/chrome/android/java/res/layout/suggestions_bottom_sheet_content.xml
@@ -6,8 +6,11 @@
 <FrameLayout
     xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="match_parent"
-    android:layout_height="match_parent">
+    android:layout_height="match_parent"
+    android:paddingTop="@dimen/bottom_control_container_height" >
 
+    <!-- TODO(twellington): move padding to the recycler view and set
+         android:cliptoPadding="false" to draw beneath the toolbar. -->
     <org.chromium.chrome.browser.suggestions.SuggestionsRecyclerView
         android:id="@+id/recycler_view"
         android:layout_width="match_parent"
diff --git a/chrome/android/java/res/values/colors.xml b/chrome/android/java/res/values/colors.xml
index 4acbc943..d1e9c0a 100644
--- a/chrome/android/java/res/values/colors.xml
+++ b/chrome/android/java/res/values/colors.xml
@@ -44,7 +44,7 @@
 
     <!-- Infobar colors -->
     <color name="infobar_accent_blue">#4285f4</color>
-    <color name="infobar_descriptive_text_color">#646464</color>
+    <color name="infobar_descriptive_text_color">@color/black_alpha_54</color>
 
     <!-- Snackbar colors -->
     <color name="snackbar_background_color">#282C32</color>
@@ -61,11 +61,11 @@
 
     <!-- Connection Info Popup colors -->
     <color name="connection_info_popup_reset_cert_decisions_button">#000000</color>
-    <color name="connection_info_popup_text">#444444</color>
+    <color name="connection_info_popup_text">@color/black_alpha_87</color>
 
     <!-- Page Info Popup colors -->
-    <color name="page_info_popup_text">#444444</color>
-    <color name="page_info_popup_text_link">#4285f4</color>
+    <color name="page_info_popup_text">@color/black_alpha_87</color>
+    <color name="page_info_popup_text_link">@color/google_blue_700</color>
 
     <!-- URL Emphasizer colors -->
     <color name="url_emphasis_non_emphasized_text">#80333333</color>
diff --git a/chrome/android/java/res/values/dimens.xml b/chrome/android/java/res/values/dimens.xml
index b9d45ba..12e50b9 100644
--- a/chrome/android/java/res/values/dimens.xml
+++ b/chrome/android/java/res/values/dimens.xml
@@ -64,7 +64,7 @@
     <!-- Text size of the infobar message and other controls. -->
     <dimen name="infobar_text_size">16sp</dimen>
     <!-- Text size of the infobar message when a big icon is shown. -->
-    <dimen name="infobar_big_icon_message_size">18sp</dimen>
+    <dimen name="infobar_big_icon_message_size">20sp</dimen>
     <!-- Text size of descriptive controls on an infobar. -->
     <dimen name="infobar_descriptive_text_size">14sp</dimen>
     <!-- Padding surrounding the infobar. -->
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/BluetoothChooserDialog.java b/chrome/android/java/src/org/chromium/chrome/browser/BluetoothChooserDialog.java
index 58ac779..dc24794 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/BluetoothChooserDialog.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/BluetoothChooserDialog.java
@@ -17,6 +17,7 @@
 import android.support.graphics.drawable.VectorDrawableCompat;
 import android.support.v4.graphics.drawable.DrawableCompat;
 import android.text.SpannableString;
+import android.text.TextPaint;
 import android.text.TextUtils;
 import android.view.View;
 
@@ -310,6 +311,13 @@
         }
 
         @Override
+        public void updateDrawState(TextPaint textPaint) {
+            super.updateDrawState(textPaint);
+            textPaint.setColor(ApiCompatibilityUtils.getColor(
+                    mContext.getResources(), R.color.google_blue_700));
+        }
+
+        @Override
         public void onClick(View view) {
             if (mNativeBluetoothChooserDialogPtr == 0) {
                 return;
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkSheetContent.java b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkSheetContent.java
index 5113024..2b0985a 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkSheetContent.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkSheetContent.java
@@ -13,13 +13,14 @@
 import org.chromium.chrome.browser.widget.bottomsheet.BottomSheet.BottomSheetContent;
 import org.chromium.chrome.browser.widget.bottomsheet.BottomSheetContentController;
 import org.chromium.chrome.browser.widget.selection.SelectableListToolbar;
+import org.chromium.components.bookmarks.BookmarkId;
 
 /**
  * A {@link BottomSheetContent} holding a {@link BookmarkManager} for display in the BottomSheet.
  */
 public class BookmarkSheetContent implements BottomSheetContent {
     private final View mContentView;
-    private final SelectableListToolbar mToolbarView;
+    private final SelectableListToolbar<BookmarkId> mToolbarView;
     private BookmarkManager mBookmarkManager;
 
     /**
@@ -83,4 +84,9 @@
     public int getType() {
         return BottomSheetContentController.TYPE_BOOKMARKS;
     }
+
+    @Override
+    public boolean applyDefaultTopPadding() {
+        return true;
+    }
 }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/download/DownloadSheetContent.java b/chrome/android/java/src/org/chromium/chrome/browser/download/DownloadSheetContent.java
index 6408a27fa..69aef96 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/download/DownloadSheetContent.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/download/DownloadSheetContent.java
@@ -12,6 +12,7 @@
 import org.chromium.base.ApplicationStatus.ActivityStateListener;
 import org.chromium.base.ThreadUtils;
 import org.chromium.chrome.browser.ChromeActivity;
+import org.chromium.chrome.browser.download.ui.DownloadHistoryItemWrapper;
 import org.chromium.chrome.browser.download.ui.DownloadManagerUi;
 import org.chromium.chrome.browser.snackbar.SnackbarManager;
 import org.chromium.chrome.browser.toolbar.BottomToolbarPhone;
@@ -25,7 +26,7 @@
  */
 public class DownloadSheetContent implements BottomSheetContent {
     private final View mContentView;
-    private final SelectableListToolbar mToolbarView;
+    private final SelectableListToolbar<DownloadHistoryItemWrapper> mToolbarView;
     private final ActivityStateListener mActivityStateListener;
     private DownloadManagerUi mDownloadManager;
 
@@ -111,4 +112,9 @@
     public int getType() {
         return BottomSheetContentController.TYPE_DOWNLOADS;
     }
+
+    @Override
+    public boolean applyDefaultTopPadding() {
+        return true;
+    }
 }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/download/OWNERS b/chrome/android/java/src/org/chromium/chrome/browser/download/OWNERS
index c86b971..d12dbdd6 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/download/OWNERS
+++ b/chrome/android/java/src/org/chromium/chrome/browser/download/OWNERS
@@ -1,3 +1,4 @@
 qinmin@chromium.org
 
 per-file DownloadActivity.java=twellington@chromium.org
+per-file DownloadSheetContent.java=twellington@chromium.org
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/history/HistorySheetContent.java b/chrome/android/java/src/org/chromium/chrome/browser/history/HistorySheetContent.java
index e96940c..fec7ffd3 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/history/HistorySheetContent.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/history/HistorySheetContent.java
@@ -19,7 +19,7 @@
  */
 public class HistorySheetContent implements BottomSheetContent {
     private final View mContentView;
-    private final SelectableListToolbar mToolbarView;
+    private final SelectableListToolbar<HistoryItem> mToolbarView;
     private HistoryManager mHistoryManager;
 
     /**
@@ -83,4 +83,9 @@
     public int getType() {
         return BottomSheetContentController.TYPE_HISTORY;
     }
+
+    @Override
+    public boolean applyDefaultTopPadding() {
+        return true;
+    }
 }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ntp/IncognitoBottomSheetContent.java b/chrome/android/java/src/org/chromium/chrome/browser/ntp/IncognitoBottomSheetContent.java
index 1550780..999eb3c 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/ntp/IncognitoBottomSheetContent.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/ntp/IncognitoBottomSheetContent.java
@@ -92,4 +92,9 @@
     public int getType() {
         return BottomSheetContentController.TYPE_INCOGNITO_HOME;
     }
+
+    @Override
+    public boolean applyDefaultTopPadding() {
+        return true;
+    }
 }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/omnibox/OWNERS b/chrome/android/java/src/org/chromium/chrome/browser/omnibox/OWNERS
index 915949f..bb7ed84d 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/omnibox/OWNERS
+++ b/chrome/android/java/src/org/chromium/chrome/browser/omnibox/OWNERS
@@ -1,4 +1,5 @@
 mariakhomenko@chromium.org
 tedchoc@chromium.org
+yusufo@chromium.org
 
 # COMPONENT: UI>Browser>Omnibox
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/page_info/PageInfoPopup.java b/chrome/android/java/src/org/chromium/chrome/browser/page_info/PageInfoPopup.java
index e2ce4b8..a4e4caa 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/page_info/PageInfoPopup.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/page_info/PageInfoPopup.java
@@ -68,6 +68,7 @@
 import org.chromium.chrome.browser.tab.Tab;
 import org.chromium.chrome.browser.util.UrlUtilities;
 import org.chromium.components.location.LocationUtils;
+import org.chromium.components.security_state.ConnectionSecurityLevel;
 import org.chromium.content_public.browser.WebContents;
 import org.chromium.content_public.browser.WebContentsObserver;
 import org.chromium.ui.base.DeviceFormFactor;
@@ -409,6 +410,13 @@
         SpannableStringBuilder urlBuilder = new SpannableStringBuilder(mFullUrl);
         OmniboxUrlEmphasizer.emphasizeUrl(urlBuilder, mContext.getResources(), mTab.getProfile(),
                 mSecurityLevel, mIsInternalPage, true, true);
+        if (mSecurityLevel == ConnectionSecurityLevel.SECURE) {
+            OmniboxUrlEmphasizer.EmphasizeComponentsResponse emphasizeResponse =
+                    OmniboxUrlEmphasizer.parseForEmphasizeComponents(
+                            mTab.getProfile(), urlBuilder.toString());
+            urlBuilder.setSpan(new StyleSpan(R.style.RobotoMediumStyle), 0,
+                    emphasizeResponse.schemeLength, Spannable.SPAN_EXCLUSIVE_INCLUSIVE);
+        }
         mUrlTitle.setText(urlBuilder);
 
         if (mParsedUrl == null || mParsedUrl.getScheme() == null
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/suggestions/SuggestionsBinder.java b/chrome/android/java/src/org/chromium/chrome/browser/suggestions/SuggestionsBinder.java
index d43e09d7..9a0e481 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/suggestions/SuggestionsBinder.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/suggestions/SuggestionsBinder.java
@@ -362,7 +362,10 @@
             // This approach allows us to save the thumbnail in its corresponding SnippetArticle
             // regardless of whether a new suggestion has been bound to the view holder. This way we
             // don't have to cancel fetches and can use the retrieved thumbnail later on.
-            if (!TextUtils.equals(mCapturedSuggestion.getUrl(), mSuggestion.getUrl())) return;
+            if (mSuggestion == null
+                    || !TextUtils.equals(mCapturedSuggestion.getUrl(), mSuggestion.getUrl())) {
+                return;
+            }
 
             fadeThumbnailIn(thumbnail);
         }
@@ -376,5 +379,7 @@
         // Clear the thumbnail and favicon drawables to allow the bitmap memory to be reclaimed.
         mThumbnailView.setImageDrawable(null);
         mPublisherTextView.setCompoundDrawables(null, null, null, null);
+
+        mSuggestion = null;
     }
 }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/suggestions/SuggestionsBottomSheetContent.java b/chrome/android/java/src/org/chromium/chrome/browser/suggestions/SuggestionsBottomSheetContent.java
index d47a6b8..b6444d8 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/suggestions/SuggestionsBottomSheetContent.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/suggestions/SuggestionsBottomSheetContent.java
@@ -30,6 +30,7 @@
 import org.chromium.chrome.browser.widget.FadingShadowView;
 import org.chromium.chrome.browser.widget.bottomsheet.BottomSheet;
 import org.chromium.chrome.browser.widget.bottomsheet.BottomSheetContentController;
+import org.chromium.chrome.browser.widget.bottomsheet.BottomSheetNewTabController;
 import org.chromium.chrome.browser.widget.displaystyle.UiConfig;
 import org.chromium.ui.widget.Toast;
 
@@ -39,7 +40,8 @@
 /**
  * Provides content to be displayed inside of the Home tab of bottom sheet.
  */
-public class SuggestionsBottomSheetContent implements BottomSheet.BottomSheetContent {
+public class SuggestionsBottomSheetContent
+        implements BottomSheet.BottomSheetContent, BottomSheetNewTabController.Observer {
     private final View mView;
     private final FadingShadowView mShadowView;
     private final SuggestionsRecyclerView mRecyclerView;
@@ -161,6 +163,8 @@
                 return false;
             }
         });
+
+        sheet.getNewTabController().addObserver(this);
     }
 
     @Override
@@ -200,6 +204,17 @@
         return BottomSheetContentController.TYPE_SUGGESTIONS;
     }
 
+    @Override
+    public boolean applyDefaultTopPadding() {
+        return false;
+    }
+
+    @Override
+    public void onNewTabShown() {}
+
+    @Override
+    public void onNewTabHidden() {}
+
     private void updateContextualSuggestions(String url) {
         mSuggestionsUiDelegate.getSuggestionsSource().fetchContextualSuggestions(
                 url, new Callback<List<SnippetArticle>>() {
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/widget/bottomsheet/BottomSheet.java b/chrome/android/java/src/org/chromium/chrome/browser/widget/bottomsheet/BottomSheet.java
index bc75575..7a38263 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/widget/bottomsheet/BottomSheet.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/widget/bottomsheet/BottomSheet.java
@@ -295,6 +295,11 @@
          */
         @ContentType
         int getType();
+
+        /**
+         * @return Whether the default top padding should be applied to the content view.
+         */
+        boolean applyDefaultTopPadding();
     }
 
     /**
@@ -902,6 +907,13 @@
     }
 
     /**
+     * @return The {@link BottomSheetNewTabController} used to present the new tab UI.
+     */
+    public BottomSheetNewTabController getNewTabController() {
+        return mNtpController;
+    }
+
+    /**
      * Show content in the bottom sheet's content area.
      * @param content The {@link BottomSheetContent} to show.
      */
@@ -936,11 +948,17 @@
             }
         });
 
+        View contentView = content.getContentView();
+        if (content.applyDefaultTopPadding()) {
+            contentView.setPadding(contentView.getPaddingLeft(), mToolbarHolder.getHeight(),
+                    contentView.getPaddingRight(), contentView.getPaddingBottom());
+        }
+
         // For the toolbar transition, make sure we don't detach the default toolbar view.
         animators.add(getViewTransitionAnimator(
                 newToolbar, oldToolbar, mToolbarHolder, mDefaultToolbarView != oldToolbar));
         animators.add(getViewTransitionAnimator(
-                content.getContentView(), oldContent, mBottomSheetContentContainer, true));
+                contentView, oldContent, mBottomSheetContentContainer, true));
 
         // Temporarily make the background of the toolbar holder a solid color so the transition
         // doesn't appear to show a hole in the toolbar.
@@ -1081,14 +1099,11 @@
         // The max height ratio will be greater than 1 to account for the toolbar shadow.
         mStateRatios[2] = (mContainerHeight + mToolbarShadowHeight) / mContainerHeight;
 
-        // Compute the height that the content section of the bottom sheet.
-        float contentHeight = (mContainerHeight * getFullRatio()) - mToolbarHeight;
-
         MarginLayoutParams sheetContentParams =
                 (MarginLayoutParams) mBottomSheetContentContainer.getLayoutParams();
         sheetContentParams.width = (int) mContainerWidth;
-        sheetContentParams.height = (int) contentHeight;
-        sheetContentParams.topMargin = (int) mToolbarHeight;
+        sheetContentParams.height = (int) mContainerHeight;
+        sheetContentParams.topMargin = mToolbarShadowHeight;
 
         MarginLayoutParams toolbarShadowParams =
                 (MarginLayoutParams) findViewById(R.id.toolbar_shadow).getLayoutParams();
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/widget/bottomsheet/BottomSheetNewTabController.java b/chrome/android/java/src/org/chromium/chrome/browser/widget/bottomsheet/BottomSheetNewTabController.java
index c324efd..04e7cbb 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/widget/bottomsheet/BottomSheetNewTabController.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/widget/bottomsheet/BottomSheetNewTabController.java
@@ -13,13 +13,26 @@
 import org.chromium.chrome.browser.tabmodel.TabModelSelector;
 import org.chromium.chrome.browser.toolbar.BottomToolbarPhone;
 
+import java.util.ArrayList;
+import java.util.List;
+
 /**
- * A class that handles showing and hiding the Chrome Home new tab UI.
+ * A class that handles showing and hiding the bottom sheet new tab UI.
  */
 public class BottomSheetNewTabController extends EmptyBottomSheetObserver {
+    /** Observe events related to the bottom sheet new tab UI. **/
+    public interface Observer {
+        /** Called when the bottom sheet NTP UI is shown. */
+        void onNewTabShown();
+
+        /** Called when the bottom sheet NTP UI is hidden. */
+        void onNewTabHidden();
+    }
+
     private final BottomSheet mBottomSheet;
     private final BottomToolbarPhone mToolbar;
     private final ChromeActivity mActivity;
+    private final List<Observer> mObservers = new ArrayList<>();
 
     private LayoutManagerChrome mLayoutManager;
     private OverviewModeObserver mOverviewModeObserver;
@@ -46,6 +59,20 @@
     }
 
     /**
+     * @param observer An {@link Observer} to be notified of events related to the new tab UI.
+     */
+    public void addObserver(Observer observer) {
+        mObservers.add(observer);
+    }
+
+    /**
+     * @param observer The {@link Observer} to remove.
+     */
+    public void removeObserver(Observer observer) {
+        mObservers.remove(observer);
+    }
+
+    /**
      * @param tabModelSelector A TabModelSelector for getting the current tab and activity.
      */
     public void setTabModelSelector(TabModelSelector tabModelSelector) {
@@ -118,6 +145,8 @@
             mBottomSheet.getBottomSheetMetrics().recordSheetOpenReason(
                     BottomSheetMetrics.OPENED_BY_NEW_TAB_CREATION);
         }
+
+        for (Observer observer : mObservers) observer.onNewTabShown();
     }
 
     /**
@@ -195,6 +224,8 @@
         }
 
         mHideOverviewOnClose = false;
+
+        for (Observer observer : mObservers) observer.onNewTabHidden();
     }
 
     private void showTabSwitcherToolbarIfNecessary() {
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/widget/bottomsheet/PlaceholderSheetContent.java b/chrome/android/java/src/org/chromium/chrome/browser/widget/bottomsheet/PlaceholderSheetContent.java
index 7a20a78..a5f83c5 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/widget/bottomsheet/PlaceholderSheetContent.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/widget/bottomsheet/PlaceholderSheetContent.java
@@ -78,4 +78,9 @@
     public int getType() {
         return BottomSheetContentController.TYPE_PLACEHOLDER;
     }
+
+    @Override
+    public boolean applyDefaultTopPadding() {
+        return true;
+    }
 }
diff --git a/chrome/browser/chromeos/arc/accessibility/ax_tree_source_arc.cc b/chrome/browser/chromeos/arc/accessibility/ax_tree_source_arc.cc
index 58f8803..50b50bbe 100644
--- a/chrome/browser/chromeos/arc/accessibility/ax_tree_source_arc.cc
+++ b/chrome/browser/chromeos/arc/accessibility/ax_tree_source_arc.cc
@@ -290,14 +290,16 @@
       CHECK_EQ(-1, root_id_) << "Duplicated root";
       root_id_ = id;
     }
+
+    if (GetBooleanProperty(event_data->node_data[i].get(),
+                           arc::mojom::AccessibilityBooleanProperty::FOCUSED)) {
+      focused_node_id_ = id;
+    }
   }
 
   ExtensionMsg_AccessibilityEventParams params;
   params.event_type = ToAXEvent(event_data->event_type);
 
-  if (params.event_type == ui::AX_EVENT_FOCUS)
-    focused_node_id_ = event_data->source_id;
-
   params.tree_id = tree_id();
   params.id = event_data->source_id;
 
diff --git a/chrome/browser/chromeos/arc/arc_service_launcher.cc b/chrome/browser/chromeos/arc/arc_service_launcher.cc
index 551ccd75b..91e2224 100644
--- a/chrome/browser/chromeos/arc/arc_service_launcher.cc
+++ b/chrome/browser/chromeos/arc/arc_service_launcher.cc
@@ -113,6 +113,8 @@
 
   arc_session_manager_->SetProfile(profile);
   arc_service_manager_->set_browser_context(profile);
+  arc_service_manager_->set_account_id(
+      multi_user_util::GetAccountIdFromProfile(profile));
 }
 
 void ArcServiceLauncher::OnPrimaryUserProfilePrepared(Profile* profile) {
@@ -146,6 +148,7 @@
   ArcIntentHelperBridge::GetForBrowserContext(profile);
   ArcMetricsService::GetForBrowserContext(profile);
   ArcNetHostImpl::GetForBrowserContext(profile);
+  ArcNotificationManager::GetForBrowserContext(profile);
   ArcObbMounterBridge::GetForBrowserContext(profile);
   ArcPolicyBridge::GetForBrowserContext(profile);
   ArcPowerBridge::GetForBrowserContext(profile);
@@ -165,9 +168,6 @@
   arc_service_manager_->AddService(
       base::MakeUnique<ArcFileSystemOperationRunner>(
           arc_service_manager_->arc_bridge_service(), profile));
-  arc_service_manager_->AddService(base::MakeUnique<ArcNotificationManager>(
-      arc_service_manager_->arc_bridge_service(),
-      multi_user_util::GetAccountIdFromProfile(profile)));
 
   // Kiosk apps should be run only for kiosk sessions.
   if (user_manager::UserManager::Get()->IsLoggedInAsArcKioskApp()) {
diff --git a/chrome/browser/downgrade/user_data_downgrade_browsertest.cc b/chrome/browser/downgrade/user_data_downgrade_browsertest.cc
index dbab5a47..dd01ede 100644
--- a/chrome/browser/downgrade/user_data_downgrade_browsertest.cc
+++ b/chrome/browser/downgrade/user_data_downgrade_browsertest.cc
@@ -7,8 +7,8 @@
 #include "base/files/file_util.h"
 #include "base/path_service.h"
 #include "base/strings/utf_string_conversions.h"
+#include "base/task_scheduler/task_scheduler.h"
 #include "base/test/test_reg_util_win.h"
-#include "base/threading/sequenced_worker_pool.h"
 #include "base/threading/thread_restrictions.h"
 #include "base/version.h"
 #include "base/win/registry.h"
@@ -117,7 +117,7 @@
 // downgrade.
 IN_PROC_BROWSER_TEST_F(UserDataDowngradeBrowserCopyAndCleanTest, Test) {
   base::ThreadRestrictions::ScopedAllowIO allow_io;
-  content::BrowserThread::GetBlockingPool()->FlushForTesting();
+  base::TaskScheduler::GetInstance()->FlushForTesting();
   EXPECT_EQ(chrome::kChromeVersion, GetLastVersion(user_data_dir_).GetString());
   ASSERT_FALSE(base::PathExists(other_file_));
 }
diff --git a/chrome/browser/resources/media_router/elements/media_router_container/media_router_container.css b/chrome/browser/resources/media_router/elements/media_router_container/media_router_container.css
index c6939f6..ea21fbd4 100644
--- a/chrome/browser/resources/media_router/elements/media_router_container/media_router_container.css
+++ b/chrome/browser/resources/media_router/elements/media_router_container/media_router_container.css
@@ -142,7 +142,7 @@
   color: rgba(0, 0, 0, 0.87);
   overflow-x: hidden;
   overflow-y: auto;
-  padding-bottom: 12px;
+  padding-bottom: 0;
   padding-top: 4px;
 }
 
@@ -196,15 +196,16 @@
   /* TODO(crbug/589697): Handle overflow of very long domain names. */
 }
 
-#sink-list-view {
-  position: relative;
-}
-
 #sink-list {
   overflow-x: hidden;
   overflow-y: auto;
 }
 
+#sink-list-view {
+  margin-bottom: 12px;
+  position: relative;
+}
+
 .sink-name {
   min-width: 10%;
 }
@@ -218,11 +219,6 @@
   z-index: 1;
 }
 
-:host([search-use-bottom-padding]) #sink-search {
-  padding-bottom: 16px;
-  padding-top: 0;
-}
-
 /* Separate icon class is a consequence of box-sizing: border-box set by
  * paper-icon-button. This should achieve the same dimensions as .sink-icon. */
 #sink-search-icon {
diff --git a/chrome/browser/resources/media_router/elements/media_router_container/media_router_container.js b/chrome/browser/resources/media_router/elements/media_router_container/media_router_container.js
index 6f6fcf01..f670eff 100644
--- a/chrome/browser/resources/media_router/elements/media_router_container/media_router_container.js
+++ b/chrome/browser/resources/media_router/elements/media_router_container/media_router_container.js
@@ -300,17 +300,6 @@
     },
 
     /**
-     * Whether the search input should be padded as if it were at the bottom of
-     * the dialog.
-     * @type {boolean}
-     */
-    searchUseBottomPadding: {
-      type: Boolean,
-      reflectToAttribute: true,
-      value: true,
-    },
-
-    /**
      * The selected cast mode menu item. The item with this index is bolded in
      * the cast mode menu.
      * @private {number|undefined}
@@ -1472,7 +1461,6 @@
         this.getElementVerticalPadding_(search);
     var searchPadding = searchInitialPaddingBottom + searchInitialPaddingTop;
     var searchHeight = search.offsetHeight - searchPadding;
-    this.searchUseBottomPadding = true;
     var searchFinalPaddingBottom, searchFinalPaddingTop;
     [searchFinalPaddingBottom, searchFinalPaddingTop] =
         this.getElementVerticalPadding_(search);
@@ -1591,6 +1579,9 @@
     var search = this.$$('#sink-search');
     var view = this.$['sink-list-view'];
 
+    // Set the max height for the results list before it's shown.
+    results.style.maxHeight = this.sinkListMaxHeight_ + 'px';
+
     // Saves current search container |offsetHeight| which includes bottom
     // padding.
     var searchInitialOffsetHeight = search.offsetHeight;
@@ -1604,8 +1595,6 @@
         this.getElementVerticalPadding_(search);
     var searchPadding = searchInitialPaddingBottom + searchInitialPaddingTop;
     var searchHeight = search.offsetHeight - searchPadding;
-    this.searchUseBottomPadding =
-        this.shouldSearchUseBottomPadding_(deviceMissing);
     var searchFinalPaddingBottom, searchFinalPaddingTop;
     [searchFinalPaddingBottom, searchFinalPaddingTop] =
         this.getElementVerticalPadding_(search);
@@ -1972,7 +1961,6 @@
     var list = this.$$('#sink-list');
     var resultsContainer = this.$$('#search-results-container');
     var view = this.$['sink-list-view'];
-    this.searchUseBottomPadding = true;
     search.style['top'] = '';
     if (resultsContainer) {
       resultsContainer.style['position'] = '';
@@ -1986,7 +1974,9 @@
       view.style['padding-bottom'] = search.offsetHeight + 'px';
       list.style['opacity'] = '';
     } else {
-      deviceMissing.style['margin-bottom'] = search.offsetHeight + 'px';
+      var bottomMargin = 12;
+      deviceMissing.style['margin-bottom'] =
+          (search.offsetHeight + bottomMargin) + 'px';
       search.style['margin-top'] = '';
       view.style['padding-bottom'] = '';
     }
@@ -2016,11 +2006,12 @@
     var search = this.$$('#sink-search');
     var view = this.$['sink-list-view'];
 
+    // Set the max height for the results list before it's shown.
+    results.style.maxHeight = this.sinkListMaxHeight_ + 'px';
+
     // If there is a height mismatch between where the animation calculated the
     // height should be and where it is now because the search results changed
     // during the animation, correct it with... another animation.
-    this.searchUseBottomPadding =
-        this.shouldSearchUseBottomPadding_(deviceMissing);
     var resultsPadding = this.computeElementVerticalPadding_(results);
     var finalHeight = this.computeTotalSearchHeight_(
         deviceMissing, noMatches, results, search.offsetHeight,
@@ -2401,16 +2392,6 @@
   },
 
   /**
-   * @param {?Element} deviceMissing Device missing message element.
-   * @return {boolean} Whether the search input should use vertical padding as
-   *     if it were the lowest (at the very bottom) item in the dialog.
-   * @private
-   */
-  shouldSearchUseBottomPadding_: function(deviceMissing) {
-    return !deviceMissing.hasAttribute('hidden');
-  },
-
-  /**
    * Shows the cast mode list.
    *
    * @private
@@ -2575,23 +2556,20 @@
           firstRunFlowHeight + headerHeight + 'px';
 
       var sinkList = this.$$('#sink-list');
-      if (hasSearch && sinkList) {
-        // This would need to be reset to '' if search could be disabled again,
-        // but once it's enabled it can't be disabled again.
-        this.$$('#sink-list-paper-menu').style.paddingBottom = '0';
-      }
       var sinkListPadding =
           sinkList ? this.computeElementVerticalPadding_(sinkList) : 0;
 
       this.sinkListMaxHeight_ = this.dialogHeight_ - headerHeight -
           firstRunFlowHeight - issueHeight - searchHeight + searchPadding -
           sinkListPadding;
-      if (sinkList) {
+
+      // Limit the height of the dialog to five items, including search.
+      var sinkItemHeight = 41;
+      var maxSinkItems = hasSearch ? 4 : 5;
+      this.sinkListMaxHeight_ =
+          Math.min(sinkItemHeight * maxSinkItems, this.sinkListMaxHeight_);
+      if (sinkList)
         sinkList.style.maxHeight = this.sinkListMaxHeight_ + 'px';
-        var searchResults = this.$$('#search-results');
-        if (searchResults)
-          searchResults.style.maxHeight = this.sinkListMaxHeight_ + 'px';
-      }
     });
   },
 
diff --git a/chrome/browser/resources/settings/passwords_and_forms_page/password_list_item.html b/chrome/browser/resources/settings/passwords_and_forms_page/password_list_item.html
index 5301e5b..e7dd128 100644
--- a/chrome/browser/resources/settings/passwords_and_forms_page/password_list_item.html
+++ b/chrome/browser/resources/settings/passwords_and_forms_page/password_list_item.html
@@ -33,9 +33,9 @@
       <div class="password-column">
         <template is="dom-if" if="[[!item.federationText]]">
           <!-- Password type and disabled in order to match mock. -->
-          <input id="password" type="password" class="password-field text-elide"
-               disabled value=
-               "[[getEmptyPassword_(item.numCharactersInPassword)]]">
+          <input id="password" aria-label=$i18n{editPasswordPasswordLabel}
+              type="password" class="password-field text-elide" disabled
+              value="[[getEmptyPassword_(item.numCharactersInPassword)]]">
           </input>
         </template>
         <template is="dom-if" if="[[item.federationText]]">
diff --git a/chrome/browser/resources/settings/settings_page/settings_subpage_search.html b/chrome/browser/resources/settings/settings_page/settings_subpage_search.html
index a6203965..106131e 100644
--- a/chrome/browser/resources/settings/settings_page/settings_subpage_search.html
+++ b/chrome/browser/resources/settings/settings_page/settings_subpage_search.html
@@ -72,7 +72,7 @@
     <iron-icon id="searchIcon" icon="cr:search"></iron-icon>
     <paper-input-container no-label-float>
       <input id="searchInput" type="search" on-search="onSearchTermSearch"
-          on-input="onSearchTermInput" aria-labelledby="prompt" incremental
+          on-input="onSearchTermInput" aria-label$="[[label]]" incremental
           autofocus$="[[autofocus]]" placeholder="[[label]]">
       <button suffix is="paper-icon-button-light" id="clearSearch"
           class="icon-cancel" on-tap="onTapClear_" title="[[clearLabel]]"
diff --git a/chrome/browser/vr/BUILD.gn b/chrome/browser/vr/BUILD.gn
index c1b6aa0..0e2959fc 100644
--- a/chrome/browser/vr/BUILD.gn
+++ b/chrome/browser/vr/BUILD.gn
@@ -84,6 +84,8 @@
     "toolbar_helper.h",
     "toolbar_state.cc",
     "toolbar_state.h",
+    "transition.cc",
+    "transition.h",
     "ui_browser_interface.h",
     "ui_element_renderer.h",
     "ui_input_manager.cc",
diff --git a/chrome/browser/vr/animation_player.cc b/chrome/browser/vr/animation_player.cc
index 26cbacab..225e45f 100644
--- a/chrome/browser/vr/animation_player.cc
+++ b/chrome/browser/vr/animation_player.cc
@@ -10,13 +10,77 @@
 #include "cc/animation/animation_curve.h"
 #include "cc/animation/animation_player.h"
 #include "cc/animation/animation_target.h"
+#include "cc/animation/keyframed_animation_curve.h"
 #include "cc/base/math_util.h"
 #include "chrome/browser/vr/elements/ui_element.h"
 
 namespace vr {
+
+namespace {
+
+static int s_next_animation_id = 1;
+static int s_next_group_id = 1;
+
+void ReverseAnimation(base::TimeTicks monotonic_time,
+                      cc::Animation* animation) {
+  animation->set_direction(animation->direction() ==
+                                   cc::Animation::Direction::NORMAL
+                               ? cc::Animation::Direction::REVERSE
+                               : cc::Animation::Direction::NORMAL);
+  // Our goal here is to reverse the given animation. That is, if
+  // we're 20% of the way through the animation in the forward direction, we'd
+  // like to be 80% of the way of the reversed animation (so it will end
+  // quickly).
+  //
+  // We can modify our "progress" through an animation by modifying the "time
+  // offset", a value added to the current time by the animation system before
+  // applying any other adjustments.
+  //
+  // Let our start time be s, our current time be t, and our final time (or
+  // duration) be d. After reversing the animation, we would like to start
+  // sampling from d - t as depicted below.
+  //
+  //  Forward:
+  //  s    t                         d
+  //  |----|-------------------------|
+  //
+  //  Reversed:
+  //  s                         t    d
+  //  |----|--------------------|----|
+  //       -----time-offset----->
+  //
+  // Now, if we let o represent our desired offset, we need to ensure that
+  //   t = d - (o + t)
+  //
+  // That is, sampling at the current time in either the forward or reverse
+  // curves must result in the same value, otherwise we'll get jank.
+  //
+  // This implies that,
+  //   0 = d - o - 2t
+  //   o = d - 2t
+  animation->set_time_offset(animation->curve()->Duration() -
+                             (2 * (monotonic_time - animation->start_time())));
+}
+
+std::unique_ptr<cc::CubicBezierTimingFunction>
+CreateTransitionTimingFunction() {
+  return cc::CubicBezierTimingFunction::CreatePreset(
+      cc::CubicBezierTimingFunction::EaseType::EASE);
+}
+
+}  // namespace
+
 AnimationPlayer::AnimationPlayer() {}
 AnimationPlayer::~AnimationPlayer() {}
 
+int AnimationPlayer::GetNextAnimationId() {
+  return s_next_animation_id++;
+}
+
+int AnimationPlayer::GetNextGroupId() {
+  return s_next_group_id++;
+}
+
 void AnimationPlayer::AddAnimation(std::unique_ptr<cc::Animation> animation) {
   animations_.push_back(std::move(animation));
 }
@@ -42,8 +106,7 @@
   // TODO(vollick): support groups. crbug.com/742358
   cc::TargetProperties animated_properties;
   for (auto& animation : animations_) {
-    if (animation->run_state() == cc::Animation::STARTING ||
-        animation->run_state() == cc::Animation::RUNNING ||
+    if (animation->run_state() == cc::Animation::RUNNING ||
         animation->run_state() == cc::Animation::PAUSED) {
       animated_properties[animation->target_property()] = true;
     }
@@ -53,7 +116,8 @@
         animation->run_state() ==
             cc::Animation::WAITING_FOR_TARGET_AVAILABILITY) {
       animated_properties[animation->target_property()] = true;
-      animation->SetRunState(cc::Animation::STARTING, monotonic_time);
+      animation->SetRunState(cc::Animation::RUNNING, monotonic_time);
+      animation->set_start_time(monotonic_time);
     }
   }
 }
@@ -66,8 +130,6 @@
   for (auto& animation : animations_) {
     cc::AnimationPlayer::TickAnimation(monotonic_time, animation.get(),
                                        target_);
-    if (animation->run_state() == cc::Animation::STARTING)
-      animation->SetRunState(cc::Animation::RUNNING, monotonic_time);
   }
 
   // Remove finished animations.
@@ -77,6 +139,134 @@
         return !animation->is_finished() &&
                animation->IsFinishedAt(monotonic_time);
       });
+
+  StartAnimations(monotonic_time);
+}
+
+void AnimationPlayer::TransitionOpacityTo(base::TimeTicks monotonic_time,
+                                          float current,
+                                          float target) {
+  DCHECK(target_);
+
+  if (!transition_.target_properties[cc::TargetProperty::OPACITY]) {
+    target_->NotifyClientOpacityAnimated(target, nullptr);
+    return;
+  }
+
+  cc::Animation* running_animation =
+      GetRunningAnimationForProperty(cc::TargetProperty::OPACITY);
+
+  if (running_animation &&
+      target == running_animation->curve()->ToFloatAnimationCurve()->GetValue(
+                    base::TimeDelta())) {
+    ReverseAnimation(monotonic_time, running_animation);
+    return;
+  }
+
+  RemoveAnimations(cc::TargetProperty::OPACITY);
+
+  std::unique_ptr<cc::KeyframedFloatAnimationCurve> curve(
+      cc::KeyframedFloatAnimationCurve::Create());
+
+  curve->AddKeyframe(cc::FloatKeyframe::Create(
+      base::TimeDelta(), current, CreateTransitionTimingFunction()));
+
+  curve->AddKeyframe(cc::FloatKeyframe::Create(
+      transition_.duration, target, CreateTransitionTimingFunction()));
+
+  std::unique_ptr<cc::Animation> animation(
+      cc::Animation::Create(std::move(curve), GetNextAnimationId(),
+                            GetNextGroupId(), cc::TargetProperty::OPACITY));
+
+  AddAnimation(std::move(animation));
+}
+
+void AnimationPlayer::TransitionTransformOperationsTo(
+    base::TimeTicks monotonic_time,
+    const cc::TransformOperations& current,
+    const cc::TransformOperations& target) {
+  DCHECK(target_);
+
+  if (!transition_.target_properties[cc::TargetProperty::TRANSFORM]) {
+    target_->NotifyClientTransformOperationsAnimated(target, nullptr);
+    return;
+  }
+
+  cc::Animation* running_animation =
+      GetRunningAnimationForProperty(cc::TargetProperty::TRANSFORM);
+
+  if (running_animation &&
+      target ==
+          running_animation->curve()->ToTransformAnimationCurve()->GetValue(
+              base::TimeDelta())) {
+    ReverseAnimation(monotonic_time, running_animation);
+    return;
+  }
+
+  RemoveAnimations(cc::TargetProperty::TRANSFORM);
+
+  std::unique_ptr<cc::KeyframedTransformAnimationCurve> curve(
+      cc::KeyframedTransformAnimationCurve::Create());
+
+  curve->AddKeyframe(cc::TransformKeyframe::Create(
+      base::TimeDelta(), current, CreateTransitionTimingFunction()));
+
+  curve->AddKeyframe(cc::TransformKeyframe::Create(
+      transition_.duration, target, CreateTransitionTimingFunction()));
+
+  AddAnimation(cc::Animation::Create(std::move(curve), GetNextAnimationId(),
+                                     GetNextGroupId(),
+                                     cc::TargetProperty::TRANSFORM));
+}
+
+void AnimationPlayer::TransitionBoundsTo(base::TimeTicks monotonic_time,
+                                         const gfx::SizeF& current,
+                                         const gfx::SizeF& target) {
+  DCHECK(target_);
+
+  if (!transition_.target_properties[cc::TargetProperty::BOUNDS]) {
+    target_->NotifyClientBoundsAnimated(target, nullptr);
+    return;
+  }
+
+  cc::Animation* running_animation =
+      GetRunningAnimationForProperty(cc::TargetProperty::BOUNDS);
+
+  if (running_animation &&
+      target == running_animation->curve()->ToSizeAnimationCurve()->GetValue(
+                    base::TimeDelta())) {
+    ReverseAnimation(monotonic_time, running_animation);
+    return;
+  }
+
+  RemoveAnimations(cc::TargetProperty::BOUNDS);
+
+  std::unique_ptr<cc::KeyframedSizeAnimationCurve> curve(
+      cc::KeyframedSizeAnimationCurve::Create());
+
+  curve->AddKeyframe(cc::SizeKeyframe::Create(
+      base::TimeDelta(), current, CreateTransitionTimingFunction()));
+
+  curve->AddKeyframe(cc::SizeKeyframe::Create(
+      transition_.duration, target, CreateTransitionTimingFunction()));
+
+  AddAnimation(cc::Animation::Create(std::move(curve), GetNextAnimationId(),
+                                     GetNextGroupId(),
+                                     cc::TargetProperty::BOUNDS));
+}
+
+cc::Animation* AnimationPlayer::GetRunningAnimationForProperty(
+    cc::TargetProperty::Type target_property) {
+  auto it = std::find_if(
+      animations_.begin(), animations_.end(),
+      [target_property](const std::unique_ptr<cc::Animation>& animation) {
+        if (animation->run_state() != cc::Animation::RUNNING &&
+            animation->run_state() != cc::Animation::PAUSED) {
+          return false;
+        }
+        return animation->target_property() == target_property;
+      });
+  return it == animations_.end() ? nullptr : it->get();
 }
 
 }  // namespace vr
diff --git a/chrome/browser/vr/animation_player.h b/chrome/browser/vr/animation_player.h
index 097b929..fa20e855 100644
--- a/chrome/browser/vr/animation_player.h
+++ b/chrome/browser/vr/animation_player.h
@@ -10,11 +10,17 @@
 #include "base/macros.h"
 #include "cc/animation/animation.h"
 #include "cc/trees/target_property.h"
+#include "chrome/browser/vr/transition.h"
 
 namespace cc {
 class AnimationTarget;
+class TransformOperations;
 }  // namespace cc
 
+namespace gfx {
+class SizeF;
+}  // namespace gfx
+
 namespace vr {
 
 // This is a simplified version of the cc::AnimationPlayer. Its sole purpose is
@@ -29,6 +35,9 @@
   AnimationPlayer();
   ~AnimationPlayer();
 
+  static int GetNextAnimationId();
+  static int GetNextGroupId();
+
   cc::AnimationTarget* target() const { return target_; }
   void set_target(cc::AnimationTarget* target) { target_ = target; }
 
@@ -43,11 +52,32 @@
   using Animations = std::vector<std::unique_ptr<cc::Animation>>;
   const Animations& animations() { return animations_; }
 
+  // The transition is analogous to CSS transitions. When configured, the
+  // transition object will cause subsequent calls the corresponding
+  // TransitionXXXTo functions to induce transition animations.
+  const Transition& transition() const { return transition_; }
+  void set_transition(const Transition& transition) {
+    transition_ = transition;
+  }
+
+  void TransitionOpacityTo(base::TimeTicks monotonic_time,
+                           float current,
+                           float target);
+  void TransitionTransformOperationsTo(base::TimeTicks monotonic_time,
+                                       const cc::TransformOperations& current,
+                                       const cc::TransformOperations& target);
+  void TransitionBoundsTo(base::TimeTicks monotonic_time,
+                          const gfx::SizeF& current,
+                          const gfx::SizeF& target);
+
  private:
   void StartAnimations(base::TimeTicks monotonic_time);
+  cc::Animation* GetRunningAnimationForProperty(
+      cc::TargetProperty::Type target_property);
 
   cc::AnimationTarget* target_ = nullptr;
   Animations animations_;
+  Transition transition_;
 
   DISALLOW_COPY_AND_ASSIGN(AnimationPlayer);
 };
diff --git a/chrome/browser/vr/animation_player_unittest.cc b/chrome/browser/vr/animation_player_unittest.cc
index 34d17ff..977dc3d 100644
--- a/chrome/browser/vr/animation_player_unittest.cc
+++ b/chrome/browser/vr/animation_player_unittest.cc
@@ -5,7 +5,9 @@
 #include "chrome/browser/vr/animation_player.h"
 
 #include "cc/animation/animation_target.h"
+#include "cc/test/geometry_test_utils.h"
 #include "chrome/browser/vr/test/animation_utils.h"
+#include "chrome/browser/vr/transition.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "ui/gfx/test/gfx_util.h"
 
@@ -13,12 +15,16 @@
 
 class TestAnimationTarget : public cc::AnimationTarget {
  public:
-  TestAnimationTarget() {}
+  TestAnimationTarget() {
+    operations_.AppendTranslate(0, 0, 0);
+    operations_.AppendRotate(1, 0, 0, 0);
+    operations_.AppendScale(1, 1, 1);
+  }
 
   const gfx::SizeF& size() const { return size_; }
   const cc::TransformOperations& operations() const { return operations_; }
+  float opacity() const { return opacity_; }
 
- private:
   void NotifyClientBoundsAnimated(const gfx::SizeF& size,
                                   cc::Animation* animation) override {
     size_ = size;
@@ -30,8 +36,15 @@
     operations_ = operations;
   }
 
+  void NotifyClientOpacityAnimated(float opacity,
+                                   cc::Animation* animation) override {
+    opacity_ = opacity;
+  }
+
+ private:
   cc::TransformOperations operations_;
-  gfx::SizeF size_;
+  gfx::SizeF size_ = {10.0f, 10.0f};
+  float opacity_ = 1.0f;
 };
 
 TEST(AnimationPlayerTest, AddRemoveAnimations) {
@@ -151,8 +164,7 @@
   player.Tick(start_time + UsToDelta(15000));
 
   EXPECT_EQ(1ul, player.animations().size());
-  EXPECT_EQ(cc::Animation::WAITING_FOR_TARGET_AVAILABILITY,
-            player.animations()[0]->run_state());
+  EXPECT_EQ(cc::Animation::RUNNING, player.animations()[0]->run_state());
   EXPECT_EQ(id1, player.animations()[0]->id());
 
   // Tick beyond all animations. There should be none remaining.
@@ -160,4 +172,195 @@
   EXPECT_TRUE(player.animations().empty());
 }
 
+TEST(AnimationPlayerTest, OpacityTransitions) {
+  TestAnimationTarget target;
+  AnimationPlayer player;
+  player.set_target(&target);
+  Transition transition;
+  transition.target_properties[cc::TargetProperty::OPACITY] = true;
+  transition.duration = UsToDelta(10000);
+  player.set_transition(transition);
+
+  base::TimeTicks start_time = UsToTicks(1000000);
+  player.Tick(start_time);
+
+  float from = 1.0f;
+  float to = 0.5f;
+  player.TransitionOpacityTo(start_time, from, to);
+
+  EXPECT_EQ(from, target.opacity());
+  player.Tick(start_time);
+
+  player.Tick(start_time + UsToDelta(5000));
+  EXPECT_GT(from, target.opacity());
+  EXPECT_LT(to, target.opacity());
+
+  player.Tick(start_time + UsToDelta(10000));
+  EXPECT_EQ(to, target.opacity());
+}
+
+TEST(AnimationPlayerTest, ReversedOpacityTransitions) {
+  TestAnimationTarget target;
+  AnimationPlayer player;
+  player.set_target(&target);
+  Transition transition;
+  transition.target_properties[cc::TargetProperty::OPACITY] = true;
+  transition.duration = UsToDelta(10000);
+  player.set_transition(transition);
+
+  base::TimeTicks start_time = UsToTicks(1000000);
+  player.Tick(start_time);
+
+  float from = 1.0f;
+  float to = 0.5f;
+  player.TransitionOpacityTo(start_time, from, to);
+
+  EXPECT_EQ(from, target.opacity());
+  player.Tick(start_time);
+
+  player.Tick(start_time + UsToDelta(1000));
+  float value_before_reversing = target.opacity();
+  EXPECT_GT(from, value_before_reversing);
+  EXPECT_LT(to, value_before_reversing);
+
+  player.TransitionOpacityTo(start_time + UsToDelta(1000), target.opacity(),
+                             from);
+  player.Tick(start_time + UsToDelta(1000));
+  EXPECT_FLOAT_EQ(value_before_reversing, target.opacity());
+
+  player.Tick(start_time + UsToDelta(2000));
+  EXPECT_EQ(from, target.opacity());
+}
+
+TEST(AnimationPlayerTest, TransformTransitions) {
+  TestAnimationTarget target;
+  AnimationPlayer player;
+  player.set_target(&target);
+  Transition transition;
+  transition.target_properties[cc::TargetProperty::TRANSFORM] = true;
+  transition.duration = UsToDelta(10000);
+  player.set_transition(transition);
+  base::TimeTicks start_time = UsToTicks(1000000);
+  player.Tick(start_time);
+
+  cc::TransformOperations from = target.operations();
+
+  cc::TransformOperations to;
+  to.AppendTranslate(8, 0, 0);
+  to.AppendRotate(1, 0, 0, 0);
+  to.AppendScale(1, 1, 1);
+
+  player.TransitionTransformOperationsTo(start_time, from, to);
+
+  EXPECT_EQ(from, target.operations());
+  player.Tick(start_time);
+
+  player.Tick(start_time + UsToDelta(5000));
+  EXPECT_LT(from.at(0).translate.x, target.operations().at(0).translate.x);
+  EXPECT_GT(to.at(0).translate.x, target.operations().at(0).translate.x);
+
+  player.Tick(start_time + UsToDelta(10000));
+  EXPECT_EQ(to, target.operations());
+}
+
+TEST(AnimationPlayerTest, ReversedTransformTransitions) {
+  TestAnimationTarget target;
+  AnimationPlayer player;
+  player.set_target(&target);
+  Transition transition;
+  transition.target_properties[cc::TargetProperty::TRANSFORM] = true;
+  transition.duration = UsToDelta(10000);
+  player.set_transition(transition);
+  base::TimeTicks start_time = UsToTicks(1000000);
+  player.Tick(start_time);
+
+  cc::TransformOperations from = target.operations();
+
+  cc::TransformOperations to;
+  to.AppendTranslate(8, 0, 0);
+  to.AppendRotate(1, 0, 0, 0);
+  to.AppendScale(1, 1, 1);
+
+  player.TransitionTransformOperationsTo(start_time, from, to);
+
+  EXPECT_EQ(from, target.operations());
+  player.Tick(start_time);
+
+  player.Tick(start_time + UsToDelta(1000));
+  cc::TransformOperations value_before_reversing = target.operations();
+  EXPECT_LT(from.at(0).translate.x, target.operations().at(0).translate.x);
+  EXPECT_GT(to.at(0).translate.x, target.operations().at(0).translate.x);
+
+  player.TransitionTransformOperationsTo(start_time + UsToDelta(1000),
+                                         target.operations(), from);
+  player.Tick(start_time + UsToDelta(1000));
+  EXPECT_EQ(value_before_reversing, target.operations());
+
+  player.Tick(start_time + UsToDelta(2000));
+  EXPECT_EQ(from, target.operations());
+}
+
+TEST(AnimationPlayerTest, BoundsTransitions) {
+  TestAnimationTarget target;
+  AnimationPlayer player;
+  player.set_target(&target);
+  Transition transition;
+  transition.target_properties[cc::TargetProperty::BOUNDS] = true;
+  transition.duration = UsToDelta(10000);
+  player.set_transition(transition);
+  base::TimeTicks start_time = UsToTicks(1000000);
+  player.Tick(start_time);
+
+  gfx::SizeF from = target.size();
+  gfx::SizeF to(20.0f, 20.0f);
+
+  player.TransitionBoundsTo(start_time, from, to);
+
+  EXPECT_FLOAT_SIZE_EQ(from, target.size());
+  player.Tick(start_time);
+
+  player.Tick(start_time + UsToDelta(5000));
+  EXPECT_LT(from.width(), target.size().width());
+  EXPECT_GT(to.width(), target.size().width());
+  EXPECT_LT(from.height(), target.size().height());
+  EXPECT_GT(to.height(), target.size().height());
+
+  player.Tick(start_time + UsToDelta(10000));
+  EXPECT_FLOAT_SIZE_EQ(to, target.size());
+}
+
+TEST(AnimationPlayerTest, ReversedBoundsTransitions) {
+  TestAnimationTarget target;
+  AnimationPlayer player;
+  player.set_target(&target);
+  Transition transition;
+  transition.target_properties[cc::TargetProperty::BOUNDS] = true;
+  transition.duration = UsToDelta(10000);
+  player.set_transition(transition);
+  base::TimeTicks start_time = UsToTicks(1000000);
+  player.Tick(start_time);
+
+  gfx::SizeF from = target.size();
+  gfx::SizeF to(20.0f, 20.0f);
+
+  player.TransitionBoundsTo(start_time, from, to);
+
+  EXPECT_FLOAT_SIZE_EQ(from, target.size());
+  player.Tick(start_time);
+
+  player.Tick(start_time + UsToDelta(1000));
+  gfx::SizeF value_before_reversing = target.size();
+  EXPECT_LT(from.width(), target.size().width());
+  EXPECT_GT(to.width(), target.size().width());
+  EXPECT_LT(from.height(), target.size().height());
+  EXPECT_GT(to.height(), target.size().height());
+
+  player.TransitionBoundsTo(start_time + UsToDelta(1000), target.size(), from);
+  player.Tick(start_time + UsToDelta(1000));
+  EXPECT_FLOAT_SIZE_EQ(value_before_reversing, target.size());
+
+  player.Tick(start_time + UsToDelta(2000));
+  EXPECT_FLOAT_SIZE_EQ(from, target.size());
+}
+
 }  // namespace vr
diff --git a/chrome/browser/vr/elements/exclusive_screen_toast.cc b/chrome/browser/vr/elements/exclusive_screen_toast.cc
index 374de5e..0bfe5fd 100644
--- a/chrome/browser/vr/elements/exclusive_screen_toast.cc
+++ b/chrome/browser/vr/elements/exclusive_screen_toast.cc
@@ -19,8 +19,8 @@
   // Adjust the width of this element according to the texture. The width is
   // decided by the length of the text to show.
   gfx::SizeF drawn_size = GetTexture()->GetDrawnSize();
-  float width = drawn_size.width() / drawn_size.height() * size().y();
-  set_size({width, size().y(), 1});
+  float width = drawn_size.width() / drawn_size.height() * size().height();
+  SetSize(width, size().height());
 }
 
 }  // namespace vr
diff --git a/chrome/browser/vr/elements/system_indicator.cc b/chrome/browser/vr/elements/system_indicator.cc
index d5691dc..42c0a2c3 100644
--- a/chrome/browser/vr/elements/system_indicator.cc
+++ b/chrome/browser/vr/elements/system_indicator.cc
@@ -24,7 +24,7 @@
 void SystemIndicator::UpdateElementSize() {
   gfx::SizeF drawn_size = GetTexture()->GetDrawnSize();
   float width = height_meters_ * drawn_size.width() / drawn_size.height();
-  set_size({width, height_meters_, 1});
+  SetSize(width, height_meters_);
 }
 
 SystemIndicator::~SystemIndicator() = default;
diff --git a/chrome/browser/vr/elements/textured_element.cc b/chrome/browser/vr/elements/textured_element.cc
index c7640b2..d2c3fcf 100644
--- a/chrome/browser/vr/elements/textured_element.cc
+++ b/chrome/browser/vr/elements/textured_element.cc
@@ -42,8 +42,8 @@
 void TexturedElement::UpdateElementSize() {
   // Updating the height according to width is a hack.  This may be overridden.
   gfx::SizeF drawn_size = GetTexture()->GetDrawnSize();
-  float y = drawn_size.height() / drawn_size.width() * size().x();
-  set_size({size().x(), y, 1});
+  float height = drawn_size.height() / drawn_size.width() * size().width();
+  SetSize(size().width(), height);
 }
 
 void TexturedElement::Render(UiElementRenderer* renderer,
diff --git a/chrome/browser/vr/elements/ui_element.cc b/chrome/browser/vr/elements/ui_element.cc
index 8e4d1ca..2dbe4523 100644
--- a/chrome/browser/vr/elements/ui_element.cc
+++ b/chrome/browser/vr/elements/ui_element.cc
@@ -8,11 +8,16 @@
 
 #include "base/logging.h"
 #include "base/time/time.h"
+#include "cc/base/math_util.h"
 
 namespace vr {
 
 namespace {
 
+static constexpr size_t kTranslateIndex = 0;
+static constexpr size_t kRotateIndex = 1;
+static constexpr size_t kScaleIndex = 2;
+
 bool GetRayPlaneDistance(const gfx::Point3F& ray_origin,
                          const gfx::Vector3dF& ray_vector,
                          const gfx::Point3F& plane_origin,
@@ -31,6 +36,9 @@
 
 UiElement::UiElement() {
   animation_player_.set_target(this);
+  transform_operations_.AppendTranslate(0, 0, 0);
+  transform_operations_.AppendRotate(1, 0, 0, 0);
+  transform_operations_.AppendScale(1, 1, 1);
 }
 
 UiElement::~UiElement() {
@@ -58,6 +66,7 @@
 
 void UiElement::Animate(const base::TimeTicks& time) {
   animation_player_.Tick(time);
+  last_frame_time_ = time;
 }
 
 bool UiElement::IsVisible() const {
@@ -72,6 +81,56 @@
   visible_ = enabled;
 }
 
+void UiElement::SetSize(float width, float height) {
+  animation_player_.TransitionBoundsTo(last_frame_time_, size_,
+                                       gfx::SizeF(width, height));
+}
+
+void UiElement::SetTransformOperations(
+    const cc::TransformOperations& operations) {
+  DCHECK_EQ(3ul, operations.size());
+  DCHECK_EQ(cc::TransformOperation::TRANSFORM_OPERATION_TRANSLATE,
+            operations.at(kTranslateIndex).type);
+  DCHECK_EQ(cc::TransformOperation::TRANSFORM_OPERATION_ROTATE,
+            operations.at(kRotateIndex).type);
+  DCHECK_EQ(cc::TransformOperation::TRANSFORM_OPERATION_SCALE,
+            operations.at(kScaleIndex).type);
+  animation_player_.TransitionTransformOperationsTo(
+      last_frame_time_, transform_operations_, operations);
+}
+
+void UiElement::SetTranslate(float x, float y, float z) {
+  cc::TransformOperations operations = transform_operations_;
+  cc::TransformOperation& op = operations.at(kTranslateIndex);
+  op.translate = {x, y, z};
+  op.Bake();
+  animation_player_.TransitionTransformOperationsTo(
+      last_frame_time_, transform_operations_, operations);
+}
+
+void UiElement::SetRotate(float x, float y, float z, float radians) {
+  cc::TransformOperations operations = transform_operations_;
+  cc::TransformOperation& op = operations.at(kRotateIndex);
+  op.rotate.axis = {x, y, z};
+  op.rotate.angle = cc::MathUtil::Rad2Deg(radians);
+  op.Bake();
+  animation_player_.TransitionTransformOperationsTo(
+      last_frame_time_, transform_operations_, operations);
+}
+
+void UiElement::SetScale(float x, float y, float z) {
+  cc::TransformOperations operations = transform_operations_;
+  cc::TransformOperation& op = operations.at(kScaleIndex);
+  op.scale = {x, y, z};
+  op.Bake();
+  animation_player_.TransitionTransformOperationsTo(
+      last_frame_time_, transform_operations_, operations);
+}
+
+void UiElement::SetOpacity(float opacity) {
+  animation_player_.TransitionOpacityTo(last_frame_time_, opacity_, opacity);
+}
+
 bool UiElement::HitTest(const gfx::PointF& point) const {
   return point.x() >= 0.0f && point.x() <= 1.0f && point.y() >= 0.0f &&
          point.y() <= 1.0f;
@@ -139,7 +198,7 @@
 
 void UiElement::NotifyClientBoundsAnimated(const gfx::SizeF& size,
                                            cc::Animation* animation) {
-  set_size({size.width(), size.height(), 1});
+  size_ = size;
 }
 
 }  // namespace vr
diff --git a/chrome/browser/vr/elements/ui_element.h b/chrome/browser/vr/elements/ui_element.h
index a03b449..4f50be8 100644
--- a/chrome/browser/vr/elements/ui_element.h
+++ b/chrome/browser/vr/elements/ui_element.h
@@ -125,23 +125,30 @@
   }
 
   // The size of the object.  This does not affect children.
-  gfx::Vector3dF size() const { return size_; }
-  void set_size(const gfx::Vector3dF& size) { size_ = size; }
+  gfx::SizeF size() const { return size_; }
+  void SetSize(float width, float hight);
 
   // This is the local transform. It is inherited by descendants.
   const cc::TransformOperations& transform_operations() const {
     return transform_operations_;
   }
+  // It is assumed that operations is of size 3 with a component for
+  // translation, rotation and scale, in that order (see constructor and the
+  // DCHECKs in the implementation of this function).
+  void SetTransformOperations(const cc::TransformOperations& operations);
 
-  void set_transform_operations(const cc::TransformOperations& operations) {
-    transform_operations_ = operations;
-  }
+  // These are convenience functions for setting the transform operations. They
+  // will animate if you've set a transition. If you need to animate more than
+  // one operation simultaneously, please use |SetTransformOperations| below.
+  void SetTranslate(float x, float y, float z);
+  void SetRotate(float x, float y, float z, float radians);
+  void SetScale(float x, float y, float z);
 
   AnimationPlayer& animation_player() { return animation_player_; }
 
   // The opacity of the object (between 0.0 and 1.0).
   float opacity() const { return opacity_; }
-  void set_opacity(float opacity) { opacity_ = opacity; }
+  void SetOpacity(float opacity);
 
   // The corner radius of the object. Analogous to CSS's border-radius. This is
   // in meters (same units as |size|).
@@ -273,7 +280,7 @@
   bool is_overlay_ = false;
 
   // The size of the object.  This does not affect children.
-  gfx::Vector3dF size_ = {1.0f, 1.0f, 1.0f};
+  gfx::SizeF size_ = {1.0f, 1.0f};
 
   // The opacity of the object (between 0.0 and 1.0).
   float opacity_ = 1.0f;
@@ -301,6 +308,10 @@
 
   int draw_phase_ = 1;
 
+  // This is the time as of the last call to |Animate|. It is needed when
+  // reversing transitions.
+  base::TimeTicks last_frame_time_;
+
   // This transform can be used by children to derive position of its parent.
   gfx::Transform inheritable_transform_;
 
diff --git a/chrome/browser/vr/elements/ui_element_unittest.cc b/chrome/browser/vr/elements/ui_element_unittest.cc
index 04f05a9..b75dc002 100644
--- a/chrome/browser/vr/elements/ui_element_unittest.cc
+++ b/chrome/browser/vr/elements/ui_element_unittest.cc
@@ -17,14 +17,14 @@
 
 TEST(UiElements, AnimateSize) {
   UiElement rect;
-  rect.set_size({10, 100, 1});
+  rect.SetSize(10, 100);
   rect.animation_player().AddAnimation(CreateBoundsAnimation(
       1, 1, gfx::SizeF(10, 100), gfx::SizeF(20, 200), UsToDelta(10000)));
   base::TimeTicks start_time = UsToTicks(1);
   rect.Animate(start_time);
-  EXPECT_VECTOR3DF_EQ(gfx::Vector3dF(10, 100, 1), rect.size());
+  EXPECT_FLOAT_SIZE_EQ(gfx::SizeF(10, 100), rect.size());
   rect.Animate(start_time + UsToDelta(10000));
-  EXPECT_VECTOR3DF_EQ(gfx::Vector3dF(20, 200, 1), rect.size());
+  EXPECT_FLOAT_SIZE_EQ(gfx::SizeF(20, 200), rect.size());
 }
 
 TEST(UiElements, AnimationAffectsInheritableTransform) {
diff --git a/chrome/browser/vr/transition.cc b/chrome/browser/vr/transition.cc
new file mode 100644
index 0000000..5c2398c
--- /dev/null
+++ b/chrome/browser/vr/transition.cc
@@ -0,0 +1,12 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/vr/transition.h"
+
+namespace vr {
+
+Transition::Transition() {}
+Transition::~Transition() {}
+
+}  // namespace vr
diff --git a/chrome/browser/vr/transition.h b/chrome/browser/vr/transition.h
new file mode 100644
index 0000000..0557792
--- /dev/null
+++ b/chrome/browser/vr/transition.h
@@ -0,0 +1,23 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROME_BROWSER_VR_TRANSITION_H_
+#define CHROME_BROWSER_VR_TRANSITION_H_
+
+#include "base/time/time.h"
+#include "cc/trees/target_property.h"
+
+namespace vr {
+
+struct Transition {
+  Transition();
+  ~Transition();
+
+  base::TimeDelta duration;
+  cc::TargetProperties target_properties;
+};
+
+}  // namespace vr
+
+#endif  // CHROME_BROWSER_VR_TRANSITION_H_
diff --git a/chrome/browser/vr/ui_renderer.cc b/chrome/browser/vr/ui_renderer.cc
index 0e8b7c4e..f9e8dc40 100644
--- a/chrome/browser/vr/ui_renderer.cc
+++ b/chrome/browser/vr/ui_renderer.cc
@@ -185,7 +185,7 @@
     case Fill::CONTENT: {
       vr_shell_renderer_->GetExternalTexturedQuadRenderer()->Draw(
           content_texture_id_, transform, content_texture_size,
-          gfx::SizeF(element.size().x(), element.size().y()),
+          gfx::SizeF(element.size().width(), element.size().height()),
           element.computed_opacity(), element.corner_radius());
       break;
     }
diff --git a/chrome/browser/vr/ui_scene.cc b/chrome/browser/vr/ui_scene.cc
index 98b6bd2..eff0576 100644
--- a/chrome/browser/vr/ui_scene.cc
+++ b/chrome/browser/vr/ui_scene.cc
@@ -24,10 +24,10 @@
   float x_offset;
   switch (x_anchoring) {
     case XLEFT:
-      x_offset = -0.5f * parent.size().x();
+      x_offset = -0.5f * parent.size().width();
       break;
     case XRIGHT:
-      x_offset = 0.5f * parent.size().x();
+      x_offset = 0.5f * parent.size().width();
       break;
     case XNONE:
       x_offset = 0.0f;
@@ -36,10 +36,10 @@
   float y_offset;
   switch (y_anchoring) {
     case YTOP:
-      y_offset = 0.5f * parent.size().y();
+      y_offset = 0.5f * parent.size().height();
       break;
     case YBOTTOM:
-      y_offset = -0.5f * parent.size().y();
+      y_offset = -0.5f * parent.size().height();
       break;
     case YNONE:
       y_offset = 0.0f;
@@ -228,8 +228,7 @@
   }
 
   gfx::Transform transform;
-  transform.Scale3d(element->size().x(), element->size().y(),
-                    element->size().z());
+  transform.Scale(element->size().width(), element->size().height());
   element->set_computed_opacity(element->opacity());
   element->set_computed_lock_to_fov(element->lock_to_fov());
 
diff --git a/chrome/browser/vr/ui_scene_manager.cc b/chrome/browser/vr/ui_scene_manager.cc
index 42e30ad..e9fc0ee 100644
--- a/chrome/browser/vr/ui_scene_manager.cc
+++ b/chrome/browser/vr/ui_scene_manager.cc
@@ -183,15 +183,11 @@
   element->set_debug_id(kWebVrPermanentHttpSecurityWarning);
   element->set_id(AllocateId());
   element->set_fill(vr::Fill::NONE);
-  element->set_size({kPermanentWarningWidth, kPermanentWarningHeight, 1});
-
-  cc::TransformOperations operations;
-  operations.AppendTranslate(0, kWarningDistance * sin(kWarningAngleRadians),
-                             -kWarningDistance * cos(kWarningAngleRadians));
-  operations.AppendRotate(1, 0, 0, cc::MathUtil::Rad2Deg(kWarningAngleRadians));
-  operations.AppendScale(kWarningDistance, kWarningDistance, 1);
-  element->set_transform_operations(operations);
-
+  element->SetSize(kPermanentWarningWidth, kPermanentWarningHeight);
+  element->SetTranslate(0, kWarningDistance * sin(kWarningAngleRadians),
+                        -kWarningDistance * cos(kWarningAngleRadians));
+  element->SetRotate(1, 0, 0, kWarningAngleRadians);
+  element->SetScale(kWarningDistance, kWarningDistance, 1);
   element->set_visible(false);
   element->set_hit_testable(false);
   element->set_lock_to_fov(true);
@@ -205,10 +201,8 @@
   element->set_debug_id(kWebVrTransientHttpSecurityWarning);
   element->set_id(AllocateId());
   element->set_fill(vr::Fill::NONE);
-  element->set_size({kTransientWarningWidth, kTransientWarningHeight, 1});
-  operations = cc::TransformOperations();
-  operations.AppendTranslate(0, 0, -kWarningDistance);
-  element->set_transform_operations(operations);
+  element->SetSize(kTransientWarningWidth, kTransientWarningHeight);
+  element->SetTranslate(0, 0, -kWarningDistance);
   element->set_visible(false);
   element->set_hit_testable(false);
   element->set_lock_to_fov(true);
@@ -218,12 +212,9 @@
   element->set_debug_id(kExitWarning);
   element->set_id(AllocateId());
   element->set_fill(vr::Fill::NONE);
-  element->set_size({kExitWarningWidth, kExitWarningHeight, 1});
-
-  operations = cc::TransformOperations();
-  operations.AppendTranslate(0, 0, -kExitWarningDistance);
-  operations.AppendScale(kExitWarningDistance, kExitWarningDistance, 1);
-  element->set_transform_operations(operations);
+  element->SetSize(kExitWarningWidth, kExitWarningHeight);
+  element->SetTranslate(0, 0, -kExitWarningDistance);
+  element->SetScale(kExitWarningDistance, kExitWarningDistance, 1);
   element->set_visible(false);
   element->set_hit_testable(false);
   element->set_lock_to_fov(true);
@@ -276,10 +267,8 @@
   element->set_debug_id(kContentQuad);
   element->set_id(AllocateId());
   element->set_fill(vr::Fill::CONTENT);
-  element->set_size({kContentWidth, kContentHeight, 1});
-  cc::TransformOperations operations;
-  operations.AppendTranslate(0, kContentVerticalOffset, -kContentDistance);
-  element->set_transform_operations(operations);
+  element->SetSize(kContentWidth, kContentHeight);
+  element->SetTranslate(0, kContentVerticalOffset, -kContentDistance);
   element->set_visible(false);
   element->set_corner_radius(kContentCornerRadius);
   main_content_ = element.get();
@@ -292,10 +281,8 @@
   element->set_debug_id(kBackplane);
   element->set_id(AllocateId());
   element->set_fill(vr::Fill::NONE);
-  element->set_size({kBackplaneSize, kBackplaneSize, 1.0});
-  operations = cc::TransformOperations();
-  operations.AppendTranslate(0, 0, -kTextureOffset);
-  element->set_transform_operations(operations);
+  element->SetSize(kBackplaneSize, kBackplaneSize);
+  element->SetTranslate(0, 0, -kTextureOffset);
   element->set_parent_id(main_content_->id());
   content_elements_.push_back(element.get());
   scene_->AddUiElement(std::move(element));
@@ -313,11 +300,9 @@
   icon->set_debug_id(kSplashScreenIcon);
   icon->set_id(AllocateId());
   icon->set_hit_testable(false);
-  icon->set_size({kSplashScreenIconWidth, kSplashScreenIconHeight, 1.0});
-  cc::TransformOperations operations;
-  operations.AppendTranslate(0, kSplashScreenIconVerticalOffset,
-                             -kSplashScreenDistance);
-  icon->set_transform_operations(operations);
+  icon->SetSize(kSplashScreenIconWidth, kSplashScreenIconHeight);
+  icon->SetTranslate(0, kSplashScreenIconVerticalOffset,
+                     -kSplashScreenDistance);
   splash_screen_icon_ = icon.get();
   scene_->AddUiElement(std::move(icon));
 }
@@ -329,11 +314,9 @@
   element = base::MakeUnique<UiElement>();
   element->set_debug_id(kFloor);
   element->set_id(AllocateId());
-  element->set_size({kSceneSize, kSceneSize, 1.0});
-  cc::TransformOperations operations;
-  operations.AppendTranslate(0.0, -kSceneHeight / 2, 0.0);
-  operations.AppendRotate(1, 0, 0, -90);
-  element->set_transform_operations(operations);
+  element->SetSize(kSceneSize, kSceneSize);
+  element->SetTranslate(0.0, -kSceneHeight / 2, 0.0);
+  element->SetRotate(1, 0, 0, -M_PI_2);
   element->set_fill(vr::Fill::GRID_GRADIENT);
   element->set_draw_phase(0);
   element->set_gridline_count(kFloorGridlineCount);
@@ -345,11 +328,9 @@
   element = base::MakeUnique<UiElement>();
   element->set_debug_id(kCeiling);
   element->set_id(AllocateId());
-  element->set_size({kSceneSize, kSceneSize, 1.0});
-  operations = cc::TransformOperations();
-  operations.AppendTranslate(0.0, kSceneHeight / 2, 0.0);
-  operations.AppendRotate(1, 0, 0, 90);
-  element->set_transform_operations(operations);
+  element->SetSize(kSceneSize, kSceneSize);
+  element->SetTranslate(0.0, kSceneHeight / 2, 0.0);
+  element->SetRotate(1, 0, 0, M_PI_2);
   element->set_fill(vr::Fill::OPAQUE_GRADIENT);
   element->set_draw_phase(0);
   ceiling_ = element.get();
@@ -369,11 +350,9 @@
       base::Bind(&UiSceneManager::OnUnsupportedMode, base::Unretained(this)));
   url_bar->set_debug_id(kUrlBar);
   url_bar->set_id(AllocateId());
-  cc::TransformOperations operations;
-  operations.AppendTranslate(0, kUrlBarVerticalOffset, -kUrlBarDistance);
-  operations.AppendRotate(1, 0, 0, cc::MathUtil::Rad2Deg(kUrlBarRotationRad));
-  url_bar->set_transform_operations(operations);
-  url_bar->set_size({kUrlBarWidth, kUrlBarHeight, 1});
+  url_bar->SetTranslate(0, kUrlBarVerticalOffset, -kUrlBarDistance);
+  url_bar->SetRotate(1, 0, 0, kUrlBarRotationRad);
+  url_bar->SetSize(kUrlBarWidth, kUrlBarHeight);
   url_bar_ = url_bar.get();
   control_elements_.push_back(url_bar.get());
   scene_->AddUiElement(std::move(url_bar));
@@ -381,11 +360,9 @@
   auto indicator = base::MakeUnique<LoadingIndicator>(256);
   indicator->set_debug_id(kLoadingIndicator);
   indicator->set_id(AllocateId());
-  operations = cc::TransformOperations();
-  operations.AppendTranslate(0, kLoadingIndicatorVerticalOffset,
-                             kLoadingIndicatorDepthOffset);
-  indicator->set_transform_operations(operations);
-  indicator->set_size({kLoadingIndicatorWidth, kLoadingIndicatorHeight, 1});
+  indicator->SetTranslate(0, kLoadingIndicatorVerticalOffset,
+                          kLoadingIndicatorDepthOffset);
+  indicator->SetSize(kLoadingIndicatorWidth, kLoadingIndicatorHeight);
   indicator->set_parent_id(url_bar_->id());
   indicator->set_y_anchoring(YAnchoring::YTOP);
   loading_indicator_ = indicator.get();
@@ -402,12 +379,10 @@
   url_bar->set_lock_to_fov(true);
   url_bar->set_visible(false);
   url_bar->set_hit_testable(false);
-  cc::TransformOperations operations;
-  operations.AppendTranslate(0, kTransientUrlBarVerticalOffset,
-                             -kTransientUrlBarDistance);
-  operations.AppendRotate(1, 0, 0, cc::MathUtil::Rad2Deg(kUrlBarRotationRad));
-  url_bar->set_transform_operations(operations);
-  url_bar->set_size({kTransientUrlBarWidth, kTransientUrlBarHeight, 1});
+  url_bar->SetTranslate(0, kTransientUrlBarVerticalOffset,
+                        -kTransientUrlBarDistance);
+  url_bar->SetRotate(1, 0, 0, kUrlBarRotationRad);
+  url_bar->SetSize(kTransientUrlBarWidth, kTransientUrlBarHeight);
   transient_url_bar_ = url_bar.get();
   scene_->AddUiElement(std::move(url_bar));
 }
@@ -419,12 +394,9 @@
   element->set_debug_id(kCloseButton);
   element->set_id(AllocateId());
   element->set_fill(vr::Fill::NONE);
-  cc::TransformOperations operations;
-  operations.AppendTranslate(
-      0, kContentVerticalOffset - (kContentHeight / 2) - 0.3,
-      -kCloseButtonDistance);
-  element->set_transform_operations(operations);
-  element->set_size(gfx::Vector3dF(kCloseButtonWidth, kCloseButtonHeight, 1));
+  element->SetTranslate(0, kContentVerticalOffset - (kContentHeight / 2) - 0.3,
+                        -kCloseButtonDistance);
+  element->SetSize(kCloseButtonWidth, kCloseButtonHeight);
   close_button_ = element.get();
   scene_->AddUiElement(std::move(element));
 }
@@ -439,10 +411,8 @@
   element->set_debug_id(kExitPrompt);
   element->set_id(AllocateId());
   element->set_fill(vr::Fill::NONE);
-  element->set_size({kExitPromptWidth, kExitPromptHeight, 1});
-  cc::TransformOperations operations;
-  operations.AppendTranslate(0.0, kExitPromptVerticalOffset, kTextureOffset);
-  element->set_transform_operations(operations);
+  element->SetSize(kExitPromptWidth, kExitPromptHeight);
+  element->SetTranslate(0.0, kExitPromptVerticalOffset, kTextureOffset);
   element->set_parent_id(main_content_->id());
   element->set_visible(false);
   exit_prompt_ = element.get();
@@ -455,10 +425,8 @@
   element->set_debug_id(kExitPromptBackplane);
   element->set_id(AllocateId());
   element->set_fill(vr::Fill::NONE);
-  element->set_size({kExitPromptBackplaneSize, kExitPromptBackplaneSize, 1.0});
-  operations = cc::TransformOperations();
-  operations.AppendTranslate(0.0, 0.0, -kTextureOffset);
-  element->set_transform_operations(operations);
+  element->SetSize(kExitPromptBackplaneSize, kExitPromptBackplaneSize);
+  element->SetTranslate(0.0, 0.0, -kTextureOffset);
   element->set_parent_id(exit_prompt_->id());
   exit_prompt_backplane_ = element.get();
   content_elements_.push_back(element.get());
@@ -471,7 +439,7 @@
   element->set_debug_id(kExclusiveScreenToast);
   element->set_id(AllocateId());
   element->set_fill(vr::Fill::NONE);
-  element->set_size({kToastWidthDMM, kToastHeightDMM, 1});
+  element->SetSize(kToastWidthDMM, kToastHeightDMM);
   element->set_visible(false);
   element->set_hit_testable(false);
   exclusive_screen_toast_ = element.get();
@@ -555,32 +523,22 @@
   // Update content quad parameters depending on fullscreen.
   // TODO(http://crbug.com/642937): Animate fullscreen transitions.
   if (fullscreen_) {
-    cc::TransformOperations operations;
-    operations.AppendTranslate(0, kFullscreenVerticalOffset,
-                               -kFullscreenDistance);
-    main_content_->set_transform_operations(operations);
-    main_content_->set_size({kFullscreenWidth, kFullscreenHeight, 1});
-
-    operations = cc::TransformOperations();
-    operations.AppendTranslate(
+    main_content_->SetTranslate(0, kFullscreenVerticalOffset,
+                                -kFullscreenDistance);
+    main_content_->SetSize(kFullscreenWidth, kFullscreenHeight);
+    close_button_->SetTranslate(
         0, kFullscreenVerticalOffset - (kFullscreenHeight / 2) - 0.35,
         -kCloseButtonFullscreenDistance);
-    close_button_->set_transform_operations(operations);
-    close_button_->set_size(gfx::Vector3dF(kCloseButtonFullscreenWidth,
-                                           kCloseButtonFullscreenHeight, 1));
+    close_button_->SetSize(kCloseButtonFullscreenWidth,
+                           kCloseButtonFullscreenHeight);
   } else {
     // Note that main_content_ is already visible in this case.
-    cc::TransformOperations operations;
-    operations.AppendTranslate(0, kContentVerticalOffset, -kContentDistance);
-    main_content_->set_transform_operations(operations);
-    main_content_->set_size({kContentWidth, kContentHeight, 1});
-    operations = cc::TransformOperations();
-    operations.AppendTranslate(
+    main_content_->SetTranslate(0, kContentVerticalOffset, -kContentDistance);
+    main_content_->SetSize(kContentWidth, kContentHeight);
+    close_button_->SetTranslate(
         0, kContentVerticalOffset - (kContentHeight / 2) - 0.3,
         -kCloseButtonDistance);
-    close_button_->set_transform_operations(operations);
-    close_button_->set_size(
-        gfx::Vector3dF(kCloseButtonWidth, kCloseButtonHeight, 1));
+    close_button_->SetSize(kCloseButtonWidth, kCloseButtonHeight);
   }
 
   scene_->SetMode(mode());
@@ -698,18 +656,16 @@
     if (indicator->visible()) {
       if (total_width > 0)
         total_width += kIndicatorGap;
-      total_width += indicator->size().x();
+      total_width += indicator->size().width();
     }
   }
   float x_position = -total_width / 2;
   for (UiElement* indicator : system_indicators_) {
     if (!indicator->visible())
       continue;
-    float width = indicator->size().x();
-    cc::TransformOperations operations;
-    operations.AppendTranslate(x_position + width / 2, kIndicatorVerticalOffset,
-                               kIndicatorDistanceOffset);
-    indicator->set_transform_operations(operations);
+    float width = indicator->size().width();
+    indicator->SetTranslate(x_position + width / 2, kIndicatorVerticalOffset,
+                            kIndicatorDistanceOffset);
     x_position += width + kIndicatorGap;
   }
 }
@@ -727,9 +683,10 @@
         kFullscreenVerticalOffset + kFullscreenHeight / 2 +
             (kToastOffsetDMM + kToastHeightDMM) * kFullscreenToastDistance,
         -kFullscreenToastDistance);
+    operations.AppendRotate(1, 0, 0, 0);
     operations.AppendScale(kFullscreenToastDistance, kFullscreenToastDistance,
                            1);
-    exclusive_screen_toast_->set_transform_operations(operations);
+    exclusive_screen_toast_->SetTransformOperations(operations);
     exclusive_screen_toast_->set_lock_to_fov(false);
   } else if (web_vr_mode_ && web_vr_show_toast_) {
     cc::TransformOperations operations;
@@ -737,7 +694,7 @@
                                -kWebVrToastDistance * cos(kWebVrAngleRadians));
     operations.AppendRotate(1, 0, 0, cc::MathUtil::Rad2Deg(kWebVrAngleRadians));
     operations.AppendScale(kWebVrToastDistance, kWebVrToastDistance, 1);
-    exclusive_screen_toast_->set_transform_operations(operations);
+    exclusive_screen_toast_->SetTransformOperations(operations);
     exclusive_screen_toast_->set_lock_to_fov(true);
   }
 }
diff --git a/chrome/browser/vr/ui_scene_unittest.cc b/chrome/browser/vr/ui_scene_unittest.cc
index d106e90..1cb3bb3 100644
--- a/chrome/browser/vr/ui_scene_unittest.cc
+++ b/chrome/browser/vr/ui_scene_unittest.cc
@@ -73,13 +73,13 @@
   // Size of the parent should be ignored by the child.
   auto element = base::MakeUnique<UiElement>();
   element->set_id(0);
-  element->set_size({1000, 1000, 1});
+  element->SetSize(1000, 1000);
 
   cc::TransformOperations operations;
   operations.AppendTranslate(6, 1, 0);
   operations.AppendRotate(0, 0, 1, 180 / 2);
   operations.AppendScale(3, 3, 1);
-  element->set_transform_operations(operations);
+  element->SetTransformOperations(operations);
   scene.AddUiElement(std::move(element));
 
   // Add a child to the parent, with different transformations.
@@ -90,7 +90,7 @@
   child_operations.AppendTranslate(3, 0, 0);
   child_operations.AppendRotate(0, 0, 1, 180 / 2);
   child_operations.AppendScale(2, 2, 1);
-  element->set_transform_operations(child_operations);
+  element->SetTransformOperations(child_operations);
   scene.AddUiElement(std::move(element));
   const UiElement* child = scene.GetUiElementById(1);
 
@@ -109,13 +109,13 @@
 
   auto element = base::MakeUnique<UiElement>();
   element->set_id(0);
-  element->set_opacity(0.5);
+  element->SetOpacity(0.5);
   scene.AddUiElement(std::move(element));
 
   element = base::MakeUnique<UiElement>();
   element->set_id(1);
   element->set_parent_id(0);
-  element->set_opacity(0.5);
+  element->SetOpacity(0.5);
   scene.AddUiElement(std::move(element));
 
   scene.OnBeginFrame(usToTicks(0));
@@ -157,10 +157,8 @@
   // Create a parent element with non-unity size and scale.
   auto element = base::MakeUnique<UiElement>();
   element->set_id(0);
-  element->set_size({2, 2, 1});
-  cc::TransformOperations operations;
-  operations.AppendScale(2, 2, 1);
-  element->set_transform_operations(operations);
+  element->SetSize(2, 2);
+  element->SetScale(2, 2, 1);
   scene.AddUiElement(std::move(element));
 
   // Add a child to the parent, with anchoring.
diff --git a/components/arc/BUILD.gn b/components/arc/BUILD.gn
index 5e2bad5..2414bb9 100644
--- a/components/arc/BUILD.gn
+++ b/components/arc/BUILD.gn
@@ -122,6 +122,7 @@
     "//base",
     "//chromeos",
     "//components/keyed_service/content",
+    "//components/signin/core/account_id",
     "//components/user_manager",
     "//mojo/edk/system",
   ]
diff --git a/components/arc/arc_service_manager.h b/components/arc/arc_service_manager.h
index c015b16..f918bb2 100644
--- a/components/arc/arc_service_manager.h
+++ b/components/arc/arc_service_manager.h
@@ -16,6 +16,7 @@
 #include "base/memory/ref_counted.h"
 #include "base/threading/thread_checker.h"
 #include "components/arc/arc_service.h"
+#include "components/signin/core/account_id/account_id.h"
 
 namespace content {
 class BrowserContext;
@@ -78,6 +79,16 @@
     browser_context_ = browser_context;
   }
 
+  // Returns the current AccountID which ARC is allowed.
+  // This is workaround to split the dependency from chrome/.
+  // TODO(hidehiko): Remove this when we move IsArcAllowedForProfile() to
+  // components/arc.
+  const AccountId& account_id() const { return account_id_; }
+
+  // TODO(hidehiko): Remove this when we move IsArcAllowedForProfile() to
+  // components/arc.
+  void set_account_id(const AccountId& account_id) { account_id_ = account_id; }
+
   // |arc_bridge_service| can only be accessed on the thread that this
   // class was created on.
   ArcBridgeService* arc_bridge_service();
@@ -137,6 +148,11 @@
   // components/arc. See browser_context() for details.
   content::BrowserContext* browser_context_ = nullptr;
 
+  // This holds the AccountId corresponding to the |browser_context_|.
+  // TODO(hidehiko): Remove this when we move IsArcAllowedForProfile() to
+  // components/arc. See browser_context() for details.
+  AccountId account_id_;
+
   DISALLOW_COPY_AND_ASSIGN(ArcServiceManager);
 };
 
diff --git a/components/payments/core/payments_profile_comparator.cc b/components/payments/core/payments_profile_comparator.cc
index 3190bac..faeab2d7 100644
--- a/components/payments/core/payments_profile_comparator.cc
+++ b/components/payments/core/payments_profile_comparator.cc
@@ -56,8 +56,10 @@
   // Stable sort, since profiles are expected to be passed in frecency order.
   std::stable_sort(
       processed.begin(), processed.end(),
-      std::bind(&PaymentsProfileComparator::IsContactMoreComplete, this,
-                std::placeholders::_1, std::placeholders::_2));
+      [this](autofill::AutofillProfile* p1, autofill::AutofillProfile* p2) {
+        return GetContactCompletenessScore(p1) >
+               GetContactCompletenessScore(p2);
+      });
 
   auto it = processed.begin();
   while (it != processed.end()) {
@@ -149,8 +151,10 @@
 
   std::stable_sort(
       processed.begin(), processed.end(),
-      std::bind(&PaymentsProfileComparator::IsShippingMoreComplete, this,
-                std::placeholders::_1, std::placeholders::_2));
+      [this](autofill::AutofillProfile* p1, autofill::AutofillProfile* p2) {
+        return GetShippingCompletenessScore(p1) >
+               GetShippingCompletenessScore(p2);
+      });
 
   // TODO(crbug.com/722949): Remove profiles with no relevant information, or
   // which are subsets of more-complete profiles.
@@ -271,16 +275,4 @@
   return autofill::addressinput::HasAllRequiredFields(*data);
 }
 
-bool PaymentsProfileComparator::IsContactMoreComplete(
-    const autofill::AutofillProfile* p1,
-    const autofill::AutofillProfile* p2) const {
-  return GetContactCompletenessScore(p1) > GetContactCompletenessScore(p2);
-}
-
-bool PaymentsProfileComparator::IsShippingMoreComplete(
-    const autofill::AutofillProfile* p1,
-    const autofill::AutofillProfile* p2) const {
-  return GetShippingCompletenessScore(p1) > GetShippingCompletenessScore(p2);
-}
-
 }  // namespace payments
diff --git a/components/payments/core/payments_profile_comparator.h b/components/payments/core/payments_profile_comparator.h
index dfb3005..61e7609 100644
--- a/components/payments/core/payments_profile_comparator.h
+++ b/components/payments/core/payments_profile_comparator.h
@@ -108,13 +108,6 @@
   bool AreRequiredAddressFieldsPresent(
       const autofill::AutofillProfile& profile) const;
 
-  // Comparison functions suitable for sorting profiles by completeness
-  // score with std::sort.
-  bool IsContactMoreComplete(const autofill::AutofillProfile* p1,
-                             const autofill::AutofillProfile* p2) const;
-  bool IsShippingMoreComplete(const autofill::AutofillProfile* p1,
-                              const autofill::AutofillProfile* p2) const;
-
   mutable std::map<std::string, ProfileFields> cache_;
   const PaymentOptionsProvider& options_;
 };
diff --git a/components/policy/core/common/cloud/cloud_policy_client.cc b/components/policy/core/common/cloud/cloud_policy_client.cc
index 89d5849..cb2741018 100644
--- a/components/policy/core/common/cloud/cloud_policy_client.cc
+++ b/components/policy/core/common/cloud/cloud_policy_client.cc
@@ -46,17 +46,19 @@
 }
 
 LicenseType TranslateLicenseType(em::LicenseType type) {
-  switch (type) {
-    case em::CDM_PERPETUAL:
-      return LicenseType::PERPETUAL;
-    case em::CDM_ANNUAL:
-      return LicenseType::ANNUAL;
-    case em::KIOSK:
-      return LicenseType::KIOSK;
-    default:
-      LOG(ERROR) << "Unknown License type: " << type;
+  switch (type.license_type()) {
+    case em::LicenseType::UNDEFINED:
+      LOG(ERROR) << "Unknown License type: " << type.license_type();
       return LicenseType::UNKNOWN;
+    case em::LicenseType::CDM_PERPETUAL:
+      return LicenseType::PERPETUAL;
+    case em::LicenseType::CDM_ANNUAL:
+      return LicenseType::ANNUAL;
+    case em::LicenseType::KIOSK:
+      return LicenseType::KIOSK;
   }
+  NOTREACHED();
+  return LicenseType::UNKNOWN;
 }
 
 void ExtractLicenseMap(const em::CheckDeviceLicenseResponse& license_response,
diff --git a/components/policy/core/common/cloud/cloud_policy_client_unittest.cc b/components/policy/core/common/cloud/cloud_policy_client_unittest.cc
index eb08c617..de61890 100644
--- a/components/policy/core/common/cloud/cloud_policy_client_unittest.cc
+++ b/components/policy/core/common/cloud/cloud_policy_client_unittest.cc
@@ -189,11 +189,13 @@
         em::CheckDeviceLicenseResponse_LicenseSelectionMode_USER_SELECTION);
     em::LicenseAvailability* license_one =
         device_license_response->add_license_availability();
-    license_one->set_license_type(em::CDM_PERPETUAL);
+    license_one->mutable_license_type()->set_license_type(
+        em::LicenseType_LicenseTypeEnum_CDM_PERPETUAL);
     license_one->set_available_licenses(10);
     em::LicenseAvailability* license_two =
         device_license_response->add_license_availability();
-    license_two->set_license_type(em::KIOSK);
+    license_two->mutable_license_type()->set_license_type(
+        em::LicenseType_LicenseTypeEnum_KIOSK);
     license_two->set_available_licenses(0);
   }
 
diff --git a/components/policy/proto/device_management_backend.proto b/components/policy/proto/device_management_backend.proto
index d30bfe39..5023986 100644
--- a/components/policy/proto/device_management_backend.proto
+++ b/components/policy/proto/device_management_backend.proto
@@ -8,17 +8,24 @@
 
 package enterprise_management;
 
-// Enumerates different license types.
-enum LicenseType {
-  // Unknown/undefined
-  UNDEFINED = 0;
-  // Chrome Device Management Perpetual
-  CDM_PERPETUAL = 1;
-  // Chrome Device Management Annual
-  CDM_ANNUAL = 2;
-  // Chrome Kiosk
-  KIOSK = 3;
-};
+// This enum needs to be shared between DeviceRegisterRequest and
+// LicenseAvailability protos. With java_api_version 1, this means that enum
+// needs to be wrapped into a message.
+message LicenseType {
+  // Enumerates different license types.
+  enum LicenseTypeEnum {
+    // Unknown/undefined
+    UNDEFINED = 0;
+    // Chrome Device Management Perpetual
+    CDM_PERPETUAL = 1;
+    // Chrome Device Management Annual
+    CDM_ANNUAL = 2;
+    // Chrome Kiosk
+    KIOSK = 3;
+  }
+
+  optional LicenseTypeEnum license_type = 1;
+}
 
 // Data along with a cryptographic signature verifying their authenticity.
 message SignedData {
diff --git a/components/security_interstitials/core/common/resources/interstitial_common.css b/components/security_interstitials/core/common/resources/interstitial_common.css
index d868ff32..764d5f7c 100644
--- a/components/security_interstitials/core/common/resources/interstitial_common.css
+++ b/components/security_interstitials/core/common/resources/interstitial_common.css
@@ -3,7 +3,6 @@
    found in the LICENSE file. */
 
 button {
-  background: rgb(66, 133, 244);
   border: 0;
   border-radius: 2px;
   box-sizing: border-box;
@@ -21,6 +20,15 @@
   float: left;
 }
 
+.bad-clock button,
+.captive-portal button,
+.main-frame-blocked button,
+.neterror button,
+.offline button,
+.ssl button {
+  background: rgb(66, 133, 244);
+}
+
 button:active {
   background: rgb(50, 102, 213);
   outline: 0;
diff --git a/components/storage_monitor/OWNERS b/components/storage_monitor/OWNERS
index 4cbc8a4..ed5b39e3 100644
--- a/components/storage_monitor/OWNERS
+++ b/components/storage_monitor/OWNERS
@@ -1,3 +1,2 @@
 thestig@chromium.org
-vandebo@chromium.org
-gbillock@chromium.org
+tommycli@chromium.org
diff --git a/components/viz/service/frame_sinks/gpu_root_compositor_frame_sink.cc b/components/viz/service/frame_sinks/gpu_root_compositor_frame_sink.cc
index 41bde869..01bbb95 100644
--- a/components/viz/service/frame_sinks/gpu_root_compositor_frame_sink.cc
+++ b/components/viz/service/frame_sinks/gpu_root_compositor_frame_sink.cc
@@ -6,6 +6,7 @@
 
 #include <utility>
 
+#include "base/command_line.h"
 #include "components/viz/service/display/display.h"
 #include "components/viz/service/frame_sinks/compositor_frame_sink_support.h"
 #include "components/viz/service/frame_sinks/frame_sink_manager.h"
@@ -118,7 +119,9 @@
 
 void GpuRootCompositorFrameSink::DisplayWillDrawAndSwap(
     bool will_draw_and_swap,
-    const cc::RenderPassList& render_pass) {}
+    const cc::RenderPassList& render_pass) {
+  hit_test_aggregator_.PostTaskAggregate(display_->CurrentSurfaceId());
+}
 
 void GpuRootCompositorFrameSink::DisplayDidDrawAndSwap() {}
 
@@ -129,6 +132,7 @@
 }
 
 void GpuRootCompositorFrameSink::OnBeginFrame(const cc::BeginFrameArgs& args) {
+  hit_test_aggregator_.Swap();
   if (client_)
     client_->OnBeginFrame(args);
 }
diff --git a/components/viz/service/frame_sinks/gpu_root_compositor_frame_sink.h b/components/viz/service/frame_sinks/gpu_root_compositor_frame_sink.h
index 2defc9d..10fdac6 100644
--- a/components/viz/service/frame_sinks/gpu_root_compositor_frame_sink.h
+++ b/components/viz/service/frame_sinks/gpu_root_compositor_frame_sink.h
@@ -14,6 +14,7 @@
 #include "components/viz/service/display/display_client.h"
 #include "components/viz/service/frame_sinks/compositor_frame_sink_support_client.h"
 #include "components/viz/service/frame_sinks/gpu_compositor_frame_sink_delegate.h"
+#include "components/viz/service/hit_test/hit_test_aggregator.h"
 #include "mojo/public/cpp/bindings/associated_binding.h"
 #include "mojo/public/cpp/bindings/binding.h"
 
@@ -101,6 +102,8 @@
       compositor_frame_sink_private_binding_;
   mojo::AssociatedBinding<cc::mojom::DisplayPrivate> display_private_binding_;
 
+  HitTestAggregator hit_test_aggregator_;
+
   DISALLOW_COPY_AND_ASSIGN(GpuRootCompositorFrameSink);
 };
 
diff --git a/components/viz/service/hit_test/hit_test_aggregator.cc b/components/viz/service/hit_test/hit_test_aggregator.cc
index 8477669..72845f5 100644
--- a/components/viz/service/hit_test/hit_test_aggregator.cc
+++ b/components/viz/service/hit_test/hit_test_aggregator.cc
@@ -133,7 +133,8 @@
 
 void HitTestAggregator::AppendRoot(const SurfaceId& surface_id) {
   auto search = active_.find(surface_id);
-  DCHECK(search != active_.end());
+  if (search == active_.end())
+    return;
 
   mojom::HitTestRegionList* hit_test_region_list = search->second.get();
 
diff --git a/content/shell/common/layout_test/layout_test_content_client.cc b/content/shell/common/layout_test/layout_test_content_client.cc
index ea15811a..f57535ae 100644
--- a/content/shell/common/layout_test/layout_test_content_client.cc
+++ b/content/shell/common/layout_test/layout_test_content_client.cc
@@ -21,11 +21,7 @@
 }
 
 bool LayoutTestContentClient::IsSupplementarySiteIsolationModeEnabled() {
-#if defined(OS_ANDROID)
-  return false;
-#else
   return true;
-#endif
 }
 
 }  // namespace content
diff --git a/content/test/gpu/generate_buildbot_json.py b/content/test/gpu/generate_buildbot_json.py
index 9d6ba7f..cc9ba22 100755
--- a/content/test/gpu/generate_buildbot_json.py
+++ b/content/test/gpu/generate_buildbot_json.py
@@ -1843,28 +1843,6 @@
     ],
     'asan_args': ['--is-asan'],
   },
-  'webgl_conformance_angle_tests': {
-    'tester_configs': [
-      {
-        # Run this on the FYI waterfall and optional tryservers.
-        'predicate': Predicates.FYI_AND_OPTIONAL,
-        'os_types': ['linux'],
-        'disabled_instrumentation_types': ['tsan'],
-      }
-    ],
-    'disabled_tester_configs': [
-      {
-        'names': [
-          'Linux ChromiumOS Ozone (Intel)',
-        ],
-      },
-    ],
-    'target_name': 'webgl_conformance',
-    'extra_browser_args': [
-      '--use-gl=angle',
-    ],
-    'asan_args': ['--is-asan'],
-  },
   'webgl_conformance_d3d11_passthrough': {
     'tester_configs': [
       {
@@ -1952,7 +1930,7 @@
       'shards': 15,
     },
   },
-  'webgl2_conformance_angle_tests': {
+  'webgl2_conformance_gl_passthrough_tests': {
     'tester_configs': [
       {
          # The WebGL 2.0 conformance tests take over an hour to run on
@@ -1987,6 +1965,8 @@
     'target_name': 'webgl_conformance',
     'extra_browser_args': [
       '--use-gl=angle',
+      '--use-angle=gl',
+      '--use-passthrough-cmd-decoder',
     ],
     'args': [
       '--webgl-conformance-version=2.0.1',
diff --git a/content/test/gpu/gpu_tests/webgl2_conformance_expectations.py b/content/test/gpu/gpu_tests/webgl2_conformance_expectations.py
index d9e0dfd..6ae125f1 100644
--- a/content/test/gpu/gpu_tests/webgl2_conformance_expectations.py
+++ b/content/test/gpu/gpu_tests/webgl2_conformance_expectations.py
@@ -175,7 +175,7 @@
 
     # Intel HD 530
     self.Fail('conformance2/textures/misc/angle-stuck-depth-textures.html',
-        ['win', 'intel', 'd3d11'], bug=680797)
+        ['win', 'intel', 'no_passthrough', 'd3d11'], bug=680797)
     self.Fail('deqp/functional/gles3/fboinvalidate/format_00.html',
         ['win', 'intel', 'd3d11'], bug=680797)
     self.Fail('deqp/functional/gles3/fboinvalidate/format_01.html',
@@ -203,6 +203,82 @@
     self.Fail('deqp/functional/gles3/shaderstruct.html',
         ['win', 'passthrough', 'd3d11'], bug=602688)
 
+    # Passthrough command decoder / OpenGL
+    self.Fail('conformance/extensions/webgl-compressed-texture-s3tc.html',
+        ['passthrough', 'opengl'], bug=602688)
+    self.Fail('conformance/glsl/misc/shader-with-non-reserved-words.html',
+        ['passthrough', 'opengl'], bug=602688)
+    self.Fail('conformance/textures/canvas/*', ['passthrough', 'opengl'],
+        bug=602688)
+    self.Fail('conformance/textures/canvas_sub_rectangle/*',
+        ['passthrough', 'opengl'], bug=602688)
+    self.Fail('conformance/textures/image_bitmap_from_blob/*',
+        ['passthrough', 'opengl'], bug=602688)
+    self.Fail('conformance/textures/image_bitmap_from_canvas/*',
+        ['passthrough', 'opengl'], bug=602688)
+    self.Fail('conformance/textures/image_bitmap_from_image/*',
+        ['passthrough', 'opengl'], bug=602688)
+    self.Fail('conformance/textures/image_bitmap_from_image_bitmap/*',
+        ['passthrough', 'opengl'], bug=602688)
+    self.Fail('conformance/textures/image_bitmap_from_image_data/*',
+        ['passthrough', 'opengl'], bug=602688)
+    self.Fail('conformance/textures/misc/' +
+        'copytexsubimage2d-large-partial-copy-corruption.html',
+        ['passthrough', 'opengl'], bug=602688)
+    self.Fail('conformance/textures/misc/copytexsubimage2d-subrects.html',
+        ['passthrough', 'opengl'], bug=602688)
+    self.Fail('conformance/textures/misc/gl-teximage.html',
+        ['passthrough', 'opengl'], bug=602688)
+    self.Fail('conformance/textures/misc/texture-mips.html',
+        ['passthrough', 'opengl'], bug=602688)
+    self.Fail('conformance/textures/webgl_canvas/*', ['passthrough', 'opengl'],
+        bug=602688)
+    self.Fail('conformance1/textures/image_bitmap_from_image/*',
+        ['passthrough', 'opengl'], bug=602688)
+    self.Fail('conformance2/misc/uninitialized-test-2.html',
+        ['passthrough', 'opengl'], bug=602688)
+    self.Fail('conformance2/reading/format-r11f-g11f-b10f.html',
+        ['passthrough', 'opengl'], bug=602688)
+    self.Fail('conformance2/rendering/blitframebuffer-filter-outofbounds.html',
+        ['passthrough', 'opengl'], bug=602688)
+    self.Fail('conformance2/rendering/draw-buffers-dirty-state-bug.html',
+        ['passthrough', 'opengl'], bug=602688)
+    self.Fail('conformance2/rendering/framebuffer-unsupported.html',
+        ['passthrough', 'opengl'], bug=602688)
+    self.Fail('conformance2/state/gl-get-calls.html', ['passthrough', 'opengl'],
+        bug=602688)
+    self.Fail('conformance2/textures/canvas/*', ['passthrough', 'opengl'],
+        bug=602688)
+    self.Fail('conformance2/textures/canvas_sub_rectangle/*',
+        ['passthrough', 'opengl'], bug=602688)
+    self.Fail('conformance2/textures/image_bitmap_from_blob/*',
+        ['passthrough', 'opengl'], bug=602688)
+    self.Fail('conformance2/textures/image_bitmap_from_canvas/*',
+        ['passthrough', 'opengl'], bug=602688)
+    self.Fail('conformance2/textures/image_bitmap_from_image/*',
+        ['passthrough', 'opengl'], bug=602688)
+    self.Fail('conformance2/textures/image_bitmap_from_image_bitmap/*',
+        ['passthrough', 'opengl'], bug=602688)
+    self.Fail('conformance2/textures/image_bitmap_from_image_data/*',
+        ['passthrough', 'opengl'], bug=602688)
+    self.Fail('conformance2/textures/image_bitmap_from_video/*',
+        ['passthrough', 'opengl'], bug=602688)
+    self.Fail('conformance2/textures/misc/angle-stuck-depth-textures.html',
+        ['passthrough', 'opengl'], bug=602688)
+    self.Fail('conformance2/textures/misc/' +
+        'tex-image-with-bad-args-from-dom-elements.html',
+        ['passthrough', 'opengl'], bug=602688)
+    self.Fail('conformance2/textures/misc/tex-storage-2d.html',
+        ['passthrough', 'opengl'], bug=602688)
+    self.Fail('conformance2/textures/video/tex-2d-rgb9_e5-rgb-float.html',
+        ['passthrough', 'opengl'], bug=602688)
+    self.Fail('conformance2/textures/video/tex-2d-rgb9_e5-rgb-half_float.html',
+        ['passthrough', 'opengl'], bug=602688)
+    self.Fail('conformance2/textures/webgl_canvas/*',
+        ['passthrough', 'opengl'], bug=602688)
+    self.Fail('deqp/functional/gles3/integerstatequery.html',
+        ['passthrough', 'opengl'], bug=602688)
+
     # Mac only.
     self.Fail('conformance2/renderbuffers/' +
         'multisampled-depth-renderbuffer-initialization.html',
@@ -484,7 +560,7 @@
     self.Fail('conformance2/rendering/framebuffer-texture-level1.html',
         ['mac', 'intel'], bug=680278)
     self.Fail('conformance2/textures/misc/angle-stuck-depth-textures.html',
-        ['mac', 'intel'], bug=679692)
+        ['mac', 'no_passthrough', 'intel'], bug=679692)
     self.Fail('deqp/functional/gles3/fbomultisample*',
         ['mac', 'intel'], bug=641209)
     self.Fail('deqp/functional/gles3/texturefiltering/2d_combinations_01.html',
@@ -597,7 +673,7 @@
         ['linux', ('nvidia', 0xf02)], bug=680282)
     self.Flaky('conformance2/textures/image_bitmap_from_image_data/' +
         'tex-2d-srgb8-rgb-unsigned_byte.html',
-        ['linux', 'nvidia'], bug=694354)
+        ['linux', 'no_passthrough', 'nvidia'], bug=694354)
 
     # Linux NVIDIA Quadro P400
     # This test causes a lost device and then the next test fails.
@@ -642,7 +718,7 @@
     self.Fail('conformance/extensions/webgl-compressed-texture-astc.html',
         ['linux', 'intel'], bug=680720)
     self.Fail('conformance2/rendering/blitframebuffer-filter-outofbounds.html',
-        ['linux', 'intel'], bug=680720)
+        ['linux', 'no_passthrough', 'intel'], bug=680720)
     self.Fail('conformance2/rendering/blitframebuffer-filter-srgb.html',
         ['linux', 'intel', 'no_angle'], bug=680720)
     self.Fail('conformance2/rendering/blitframebuffer-outside-readbuffer.html',
@@ -685,6 +761,10 @@
         'vector-dynamic-indexing-swizzled-lvalue.html',
         ['linux', 'intel'], bug=709874)
 
+    # Linux Intel HD 630
+    self.Fail('conformance/textures/misc/texture-size-limit.html',
+        ['linux', ('intel', 0x5912)], bug=745888)
+
     # Linux AMD only.
     # It looks like AMD shader compiler rejects many valid ES3 semantics.
     self.Fail('conformance/glsl/misc/shaders-with-invariance.html',
@@ -726,7 +806,7 @@
         ['linux', 'amd'], bug=483282)
 
     self.Fail('conformance2/misc/uninitialized-test-2.html',
-        ['linux', 'amd'], bug=483282)
+        ['linux', 'no_passthrough', 'amd'], bug=483282)
     self.Fail('conformance2/reading/read-pixels-from-fbo-test.html',
         ['linux', 'amd'], bug=483282)
     self.Fail('conformance2/rendering/blitframebuffer-filter-srgb.html',
@@ -880,7 +960,7 @@
     # self.Fail('conformance2/extensions/ext-color-buffer-float.html',
     #     ['linux', 'amd'], bug=633022)
     self.Fail('conformance2/rendering/blitframebuffer-filter-outofbounds.html',
-        ['linux', 'amd'], bug=655147)
+        ['linux', 'no_passthrough', 'amd'], bug=655147)
 
     self.Fail('conformance2/textures/misc/tex-base-level-bug.html',
         ['linux', 'amd'], bug=705865)
diff --git a/content/test/gpu/gpu_tests/webgl_conformance_expectations.py b/content/test/gpu/gpu_tests/webgl_conformance_expectations.py
index 42810c9..72d3bd1c 100644
--- a/content/test/gpu/gpu_tests/webgl_conformance_expectations.py
+++ b/content/test/gpu/gpu_tests/webgl_conformance_expectations.py
@@ -444,6 +444,10 @@
     self.Fail('WebglExtension_EXT_disjoint_timer_query',
         ['linux', 'intel'], bug=687210)
 
+    # Linux Intel HD 630
+    self.Fail('conformance/textures/misc/texture-size-limit.html',
+        ['linux', ('intel', 0x5912)], bug=745888)
+
     ####################
     # Android failures #
     ####################
diff --git a/gpu/ipc/service/gpu_channel_manager.cc b/gpu/ipc/service/gpu_channel_manager.cc
index 6da1483..d49971f 100644
--- a/gpu/ipc/service/gpu_channel_manager.cc
+++ b/gpu/ipc/service/gpu_channel_manager.cc
@@ -78,6 +78,7 @@
           base::Bind(&GpuChannelManager::OnApplicationStateChange,
                      base::Unretained(this))),
       is_running_on_low_end_mode_(base::SysInfo::IsLowEndDevice()),
+      is_backgrounded_for_testing_(false),
 #endif
       exiting_for_lost_context_(false),
       activity_flags_(std::move(activity_flags)),
@@ -258,13 +259,31 @@
     return;
   }
 
-  if (!task_runner_->BelongsToCurrentThread()) {
-    task_runner_->PostTask(
-        FROM_HERE, base::Bind(&GpuChannelManager::OnApplicationStateChange,
-                              weak_factory_.GetWeakPtr(), state));
+  // Clear the GL context on low-end devices after a 5 second delay, so that we
+  // don't clear in case the user pressed the home or recents button by mistake
+  // and got back to Chrome quickly.
+  const int64_t kDelayToClearContextMs = 5000;
+
+  task_runner_->PostDelayedTask(
+      FROM_HERE,
+      base::Bind(&GpuChannelManager::OnApplicationBackgrounded,
+                 weak_factory_.GetWeakPtr()),
+      base::TimeDelta::FromMilliseconds(kDelayToClearContextMs));
+  return;
+}
+
+void GpuChannelManager::OnApplicationBackgrounded() {
+  // Check if the app is still in background after the delay.
+  auto state = base::android::ApplicationStatusListener::GetState();
+  if (state != base::android::APPLICATION_STATE_HAS_STOPPED_ACTIVITIES &&
+      state != base::android::APPLICATION_STATE_HAS_DESTROYED_ACTIVITIES &&
+      !is_backgrounded_for_testing_) {
     return;
   }
 
+  if (!is_running_on_low_end_mode_)
+    return;
+
   // Delete all the GL contexts when the channel does not use WebGL and Chrome
   // goes to background on low-end devices.
   std::vector<int> channels_to_clear;
diff --git a/gpu/ipc/service/gpu_channel_manager.h b/gpu/ipc/service/gpu_channel_manager.h
index 6ec72c1..da6075b 100644
--- a/gpu/ipc/service/gpu_channel_manager.h
+++ b/gpu/ipc/service/gpu_channel_manager.h
@@ -145,12 +145,16 @@
   SyncPointManager* sync_point_manager() const { return sync_point_manager_; }
 
  private:
+  friend class GpuChannelManagerTest;
+
   void InternalDestroyGpuMemoryBuffer(gfx::GpuMemoryBufferId id, int client_id);
   void InternalDestroyGpuMemoryBufferOnIO(gfx::GpuMemoryBufferId id,
                                           int client_id);
 #if defined(OS_ANDROID)
   void ScheduleWakeUpGpu();
   void DoWakeUpGpu();
+
+  void OnApplicationBackgrounded();
 #endif
 
   void HandleMemoryPressure(
@@ -195,6 +199,7 @@
 
   base::android::ApplicationStatusListener application_status_listener_;
   bool is_running_on_low_end_mode_;
+  bool is_backgrounded_for_testing_;
 #endif
 
   // Set during intentional GPU process shutdown.
diff --git a/gpu/ipc/service/gpu_channel_manager_unittest.cc b/gpu/ipc/service/gpu_channel_manager_unittest.cc
index f67f1a15..1700c27 100644
--- a/gpu/ipc/service/gpu_channel_manager_unittest.cc
+++ b/gpu/ipc/service/gpu_channel_manager_unittest.cc
@@ -47,8 +47,8 @@
     GpuCommandBufferStub* stub = channel->LookupCommandBuffer(kRouteId);
     EXPECT_TRUE(stub);
 
-    channel_manager()->OnApplicationStateChange(
-        base::android::APPLICATION_STATE_HAS_STOPPED_ACTIVITIES);
+    channel_manager()->is_backgrounded_for_testing_ = true;
+    channel_manager()->OnApplicationBackgrounded();
     stub = channel->LookupCommandBuffer(kRouteId);
     if (should_clear_stub) {
       EXPECT_FALSE(stub);
diff --git a/ios/chrome/browser/ui/authentication/signin_interaction_controller_egtest.mm b/ios/chrome/browser/ui/authentication/signin_interaction_controller_egtest.mm
index 12345ca6..20526ac4 100644
--- a/ios/chrome/browser/ui/authentication/signin_interaction_controller_egtest.mm
+++ b/ios/chrome/browser/ui/authentication/signin_interaction_controller_egtest.mm
@@ -24,6 +24,7 @@
 #import "ios/chrome/test/earl_grey/chrome_test_case.h"
 #import "ios/public/provider/chrome/browser/signin/fake_chrome_identity.h"
 #import "ios/public/provider/chrome/browser/signin/fake_chrome_identity_service.h"
+#import "ios/testing/earl_grey/disabled_test_macros.h"
 #import "ios/testing/wait_util.h"
 
 #if !defined(__has_feature) || !__has_feature(objc_arc)
@@ -130,6 +131,11 @@
 // Tests that opening the sign-in screen from the Settings and signing in works
 // correctly when there is already an identity on the device.
 - (void)testSignInOneUser {
+  // TODO(crbug.com/745798): this test fails consistently on iPad, disabled.
+  if (IsIPadIdiom()) {
+    EARL_GREY_TEST_DISABLED(@"Disabled on iPad due to crbug.com/745798");
+  }
+
   // Set up a fake identity.
   ChromeIdentity* identity = GetFakeIdentity1();
   ios::FakeChromeIdentityService::GetInstanceFromChromeProvider()->AddIdentity(
@@ -155,6 +161,11 @@
 // Tests signing in with one account, switching sync account to a second and
 // choosing to keep the browsing data separate during the switch.
 - (void)testSignInSwitchAccountsAndKeepDataSeparate {
+  // TODO(crbug.com/745798): this test fails consistently on iPad, disabled.
+  if (IsIPadIdiom()) {
+    EARL_GREY_TEST_DISABLED(@"Disabled on iPad due to crbug.com/745798");
+  }
+
   // Set up the fake identities.
   ios::FakeChromeIdentityService* identity_service =
       ios::FakeChromeIdentityService::GetInstanceFromChromeProvider();
@@ -194,6 +205,11 @@
 // Tests signing in with one account, switching sync account to a second and
 // choosing to import the browsing data during the switch.
 - (void)testSignInSwitchAccountsAndImportData {
+  // TODO(crbug.com/745798): this test fails consistently on iPad, disabled.
+  if (IsIPadIdiom()) {
+    EARL_GREY_TEST_DISABLED(@"Disabled on iPad due to crbug.com/745798");
+  }
+
   // Set up the fake identities.
   ios::FakeChromeIdentityService* identity_service =
       ios::FakeChromeIdentityService::GetInstanceFromChromeProvider();
@@ -233,6 +249,11 @@
 // Tests that switching from a managed account to a non-managed account works
 // correctly and displays the expected warnings.
 - (void)testSignInSwitchManagedAccount {
+  // TODO(crbug.com/745798): this test fails consistently on iPad, disabled.
+  if (IsIPadIdiom()) {
+    EARL_GREY_TEST_DISABLED(@"Disabled on iPad due to crbug.com/745798");
+  }
+
   if (!experimental_flags::IsMDMIntegrationEnabled()) {
     EARL_GREY_TEST_SKIPPED(@"Only enabled with MDM integration.");
   }
@@ -282,6 +303,11 @@
 
 // Tests that signing out from the Settings works correctly.
 - (void)testSignInDisconnectFromChrome {
+  // TODO(crbug.com/745798): this test fails consistently on iPad, disabled.
+  if (IsIPadIdiom()) {
+    EARL_GREY_TEST_DISABLED(@"Disabled on iPad due to crbug.com/745798");
+  }
+
   ChromeIdentity* identity = GetFakeIdentity1();
   ios::FakeChromeIdentityService::GetInstanceFromChromeProvider()->AddIdentity(
       identity);
@@ -317,6 +343,11 @@
 // Tests that signing out of a managed account from the Settings works
 // correctly.
 - (void)testSignInDisconnectFromChromeManaged {
+  // TODO(crbug.com/745798): this test fails consistently on iPad, disabled.
+  if (IsIPadIdiom()) {
+    EARL_GREY_TEST_DISABLED(@"Disabled on iPad due to crbug.com/745798");
+  }
+
   if (!experimental_flags::IsMDMIntegrationEnabled()) {
     EARL_GREY_TEST_SKIPPED(@"Only enabled with MDM integration.");
   }
@@ -363,6 +394,11 @@
 // and closing the Settings correctly leaves the user signed in without any
 // Settings shown.
 - (void)testSignInOpenSettings {
+  // TODO(crbug.com/745798): this test fails consistently on iPad, disabled.
+  if (IsIPadIdiom()) {
+    EARL_GREY_TEST_DISABLED(@"Disabled on iPad due to crbug.com/745798");
+  }
+
   ChromeIdentity* identity = GetFakeIdentity1();
   ios::FakeChromeIdentityService::GetInstanceFromChromeProvider()->AddIdentity(
       identity);
@@ -467,6 +503,11 @@
 // that the authentication flow is correctly canceled and dismissed.
 // crbug.com/462202
 - (void)testSignInCancelAuthenticationFlow {
+  // TODO(crbug.com/745798): this test fails consistently on iPad, disabled.
+  if (IsIPadIdiom()) {
+    EARL_GREY_TEST_DISABLED(@"Disabled on iPad due to crbug.com/745798");
+  }
+
   // Set up the fake identities.
   ios::FakeChromeIdentityService* identity_service =
       ios::FakeChromeIdentityService::GetInstanceFromChromeProvider();
diff --git a/ios/chrome/browser/ui/authentication/signin_promo_view_mediator.mm b/ios/chrome/browser/ui/authentication/signin_promo_view_mediator.mm
index 8b2f647..cc329b5 100644
--- a/ios/chrome/browser/ui/authentication/signin_promo_view_mediator.mm
+++ b/ios/chrome/browser/ui/authentication/signin_promo_view_mediator.mm
@@ -34,7 +34,6 @@
 namespace {
 const int kAutomaticSigninPromoViewDismissCount = 20;
 
-#if DCHECK_IS_ON()
 bool IsSupportedAccessPoint(signin_metrics::AccessPoint access_point) {
   switch (access_point) {
     case signin_metrics::AccessPoint::ACCESS_POINT_SETTINGS:
@@ -46,7 +45,6 @@
       return false;
   }
 }
-#endif  // DCHECK_IS_ON()
 
 void RecordSigninUserActionForAccessPoint(
     signin_metrics::AccessPoint access_point) {
@@ -208,9 +206,7 @@
                          accessPoint:(signin_metrics::AccessPoint)accessPoint {
   self = [super init];
   if (self) {
-#if DCHECK_IS_ON()
     DCHECK(IsSupportedAccessPoint(accessPoint));
-#endif  // DCHECK_IS_ON()
     _accessPoint = accessPoint;
     _browserState = browserState;
     NSArray* identities = ios::GetChromeBrowserProvider()
diff --git a/ios/chrome/browser/ui/settings/BUILD.gn b/ios/chrome/browser/ui/settings/BUILD.gn
index f714b59c..808d5f0f 100644
--- a/ios/chrome/browser/ui/settings/BUILD.gn
+++ b/ios/chrome/browser/ui/settings/BUILD.gn
@@ -94,6 +94,7 @@
     "//components/browsing_data/core",
     "//components/content_settings/core/browser",
     "//components/content_settings/core/common",
+    "//components/feature_engagement_tracker",
     "//components/google/core/browser",
     "//components/handoff",
     "//components/history/core/browser",
@@ -124,6 +125,7 @@
     "//ios/chrome/browser/browser_state:browser_state_impl",
     "//ios/chrome/browser/browsing_data",
     "//ios/chrome/browser/content_settings",
+    "//ios/chrome/browser/feature_engagement_tracker",
     "//ios/chrome/browser/history",
     "//ios/chrome/browser/passwords",
     "//ios/chrome/browser/physical_web",
diff --git a/ios/chrome/browser/ui/settings/clear_browsing_data_collection_view_controller.mm b/ios/chrome/browser/ui/settings/clear_browsing_data_collection_view_controller.mm
index 496206a..998fce47 100644
--- a/ios/chrome/browser/ui/settings/clear_browsing_data_collection_view_controller.mm
+++ b/ios/chrome/browser/ui/settings/clear_browsing_data_collection_view_controller.mm
@@ -20,6 +20,8 @@
 #include "components/browsing_data/core/counters/browsing_data_counter.h"
 #include "components/browsing_data/core/history_notice_utils.h"
 #include "components/browsing_data/core/pref_names.h"
+#include "components/feature_engagement_tracker/public/event_constants.h"
+#include "components/feature_engagement_tracker/public/feature_engagement_tracker.h"
 #include "components/google/core/browser/google_util.h"
 #include "components/history/core/browser/web_history_service.h"
 #include "components/prefs/pref_service.h"
@@ -32,6 +34,7 @@
 #include "ios/chrome/browser/browsing_data/ios_chrome_browsing_data_remover.h"
 #include "ios/chrome/browser/chrome_url_constants.h"
 #include "ios/chrome/browser/experimental_flags.h"
+#include "ios/chrome/browser/feature_engagement_tracker/feature_engagement_tracker_factory.h"
 #include "ios/chrome/browser/history/web_history_service_factory.h"
 #include "ios/chrome/browser/signin/signin_manager_factory.h"
 #include "ios/chrome/browser/sync/ios_chrome_profile_sync_service_factory.h"
@@ -636,6 +639,12 @@
                                                   timePeriod:_timePeriod];
   [self chromeExecuteCommand:command];
 
+  // Send the "Cleared Browsing Data" event to the FeatureEngagementTracker
+  // when the user initiates a clear browsing data action. No event is sent if
+  // the browsing data is cleared without the user's input.
+  FeatureEngagementTrackerFactory::GetForBrowserState(_browserState)
+      ->NotifyEvent(feature_engagement_tracker::events::kClearedBrowsingData);
+
   if (!!(dataTypeMask && IOSChromeBrowsingDataRemover::REMOVE_HISTORY)) {
     [self showBrowsingHistoryRemovedDialog];
   }
diff --git a/ios/clean/chrome/browser/ui/ntp/ntp_coordinator.mm b/ios/clean/chrome/browser/ui/ntp/ntp_coordinator.mm
index bcfe9259..3380b4e 100644
--- a/ios/clean/chrome/browser/ui/ntp/ntp_coordinator.mm
+++ b/ios/clean/chrome/browser/ui/ntp/ntp_coordinator.mm
@@ -83,16 +83,35 @@
 }
 
 - (void)showNTPBookmarksPanel {
-  BookmarksCoordinator* panelCoordinator = [[BookmarksCoordinator alloc] init];
-  [self addChildCoordinator:panelCoordinator];
-  [panelCoordinator start];
+  // TODO(crbug.com/740793): Remove alert once this feature is implemented.
+  UIAlertController* alertController =
+      [UIAlertController alertControllerWithTitle:@"Bookmarks"
+                                          message:nil
+                                   preferredStyle:UIAlertControllerStyleAlert];
+  UIAlertAction* action =
+      [UIAlertAction actionWithTitle:@"Done"
+                               style:UIAlertActionStyleCancel
+                             handler:nil];
+  [alertController addAction:action];
+  [self.viewController presentViewController:alertController
+                                    animated:YES
+                                  completion:nil];
 }
 
 - (void)showNTPRecentTabsPanel {
-  RecentTabsCoordinator* panelCoordinator =
-      [[RecentTabsCoordinator alloc] init];
-  [self addChildCoordinator:panelCoordinator];
-  [panelCoordinator start];
+  // TODO(crbug.com/740793): Remove alert once this feature is implemented.
+  UIAlertController* alertController =
+      [UIAlertController alertControllerWithTitle:@"Recent Sites"
+                                          message:nil
+                                   preferredStyle:UIAlertControllerStyleAlert];
+  UIAlertAction* action =
+      [UIAlertAction actionWithTitle:@"Done"
+                               style:UIAlertActionStyleCancel
+                             handler:nil];
+  [alertController addAction:action];
+  [self.viewController presentViewController:alertController
+                                    animated:YES
+                                  completion:nil];
 }
 
 @end
diff --git a/ios/clean/chrome/browser/ui/toolbar/toolbar_view_controller.mm b/ios/clean/chrome/browser/ui/toolbar/toolbar_view_controller.mm
index 8d967fb1..974c7e5 100644
--- a/ios/clean/chrome/browser/ui/toolbar/toolbar_view_controller.mm
+++ b/ios/clean/chrome/browser/ui/toolbar/toolbar_view_controller.mm
@@ -207,7 +207,11 @@
   [buttonConstraints
       addObject:[self.shareButton.widthAnchor
                     constraintEqualToConstant:kToolbarButtonWidth]];
-  // TODO(crbug.com/683793):Dispatch command once someone is handling it.
+  // TODO(crbug.com/740793): Remove alert once share is implemented.
+  self.shareButton.titleLabel.text = @"Share";
+  [self.shareButton addTarget:self
+                       action:@selector(showAlert:)
+             forControlEvents:UIControlEventTouchUpInside];
 
   // Reload button.
   self.reloadButton = [ToolbarButton reloadToolbarButton];
@@ -402,4 +406,20 @@
   [NSLayoutConstraint activateConstraints:constraintsArray];
 }
 
+// TODO(crbug.com/740793): Remove this method once no item is using it.
+- (void)showAlert:(UIButton*)sender {
+  UIAlertController* alertController =
+      [UIAlertController alertControllerWithTitle:sender.titleLabel.text
+                                          message:nil
+                                   preferredStyle:UIAlertControllerStyleAlert];
+  UIAlertAction* action =
+      [UIAlertAction actionWithTitle:@"Done"
+                               style:UIAlertActionStyleCancel
+                             handler:nil];
+  [alertController addAction:action];
+  [self.parentViewController presentViewController:alertController
+                                          animated:YES
+                                        completion:nil];
+}
+
 @end
diff --git a/ios/clean/chrome/browser/ui/tools/menu_view_controller.mm b/ios/clean/chrome/browser/ui/tools/menu_view_controller.mm
index e27b6a7..8c48ca9 100644
--- a/ios/clean/chrome/browser/ui/tools/menu_view_controller.mm
+++ b/ios/clean/chrome/browser/ui/tools/menu_view_controller.mm
@@ -141,6 +141,11 @@
       [menuButton addTarget:self.dispatcher
                      action:item.action
            forControlEvents:UIControlEventTouchUpInside];
+    } else {
+      // TODO(crbug.com/740793): Remove alert once all menu items have actions.
+      [menuButton addTarget:self
+                     action:@selector(showAlert:)
+           forControlEvents:UIControlEventTouchUpInside];
     }
     [buttons addObject:menuButton];
   }
@@ -195,6 +200,20 @@
                 action:@selector(stopLoadingPage)
       forControlEvents:UIControlEventTouchUpInside];
 
+  // TODO(crbug.com/740793): Remove alert once share is implemented.
+  self.toolbarOverflowStackView.shareButton.titleLabel.text = @"Share";
+  [self.toolbarOverflowStackView.shareButton
+             addTarget:self
+                action:@selector(showAlert:)
+      forControlEvents:UIControlEventTouchUpInside];
+
+  // TODO(crbug.com/740793): Remove alert once bookmarking is implemented.
+  self.toolbarOverflowStackView.starButton.titleLabel.text = @"Bookmark";
+  [self.toolbarOverflowStackView.starButton
+             addTarget:self
+                action:@selector(showAlert:)
+      forControlEvents:UIControlEventTouchUpInside];
+
   [self.menuStackView insertArrangedSubview:self.toolbarOverflowStackView
                                     atIndex:0];
   NSLayoutConstraint* leadingConstraint =
@@ -265,4 +284,22 @@
   }
 }
 
+#pragma mark - Private Methods
+
+// TODO(crbug.com/740793): Remove this method once no item is using it.
+- (void)showAlert:(UIButton*)sender {
+  UIAlertController* alertController =
+      [UIAlertController alertControllerWithTitle:sender.titleLabel.text
+                                          message:nil
+                                   preferredStyle:UIAlertControllerStyleAlert];
+  UIAlertAction* action =
+      [UIAlertAction actionWithTitle:@"Done"
+                               style:UIAlertActionStyleCancel
+                             handler:nil];
+  [alertController addAction:action];
+  [self.presentingViewController presentViewController:alertController
+                                              animated:YES
+                                            completion:nil];
+}
+
 @end
diff --git a/ios/web_view/OWNERS b/ios/web_view/OWNERS
index b97ca5d..d0087512 100644
--- a/ios/web_view/OWNERS
+++ b/ios/web_view/OWNERS
@@ -1,4 +1,5 @@
 eugenebut@chromium.org
+ichikawa@chromium.org
 michaeldo@chromium.org
 rohitrao@chromium.org
 
diff --git a/net/http/http_cache_transaction.cc b/net/http/http_cache_transaction.cc
index 203439e4..f0f2e762 100644
--- a/net/http/http_cache_transaction.cc
+++ b/net/http/http_cache_transaction.cc
@@ -1900,6 +1900,8 @@
   if (network_trans_)
     network_trans_.reset();
 
+  new_response_ = nullptr;
+
   SetRequest(net_log_);
 
   entry_ = nullptr;
diff --git a/net/nqe/effective_connection_type_observer.h b/net/nqe/effective_connection_type_observer.h
index ba42b33..0fa73bf7 100644
--- a/net/nqe/effective_connection_type_observer.h
+++ b/net/nqe/effective_connection_type_observer.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 NET_NQE_NETWORK_QUALITY_EFFECTIVE_CONNECTION_TYPE_OBSERVER_H_
-#define NET_NQE_NETWORK_QUALITY_EFFECTIVE_CONNECTION_TYPE_OBSERVER_H_
+#ifndef NET_NQE_EFFECTIVE_CONNECTION_TYPE_OBSERVER_H_
+#define NET_NQE_EFFECTIVE_CONNECTION_TYPE_OBSERVER_H_
 
 #include "base/compiler_specific.h"
 #include "base/macros.h"
@@ -38,4 +38,4 @@
 
 }  // namespace net
 
-#endif  // NET_NQE_NETWORK_QUALITY_EFFECTIVE_CONNECTION_TYPE_OBSERVER_H_
\ No newline at end of file
+#endif  // NET_NQE_EFFECTIVE_CONNECTION_TYPE_OBSERVER_H_
diff --git a/net/nqe/rtt_throughput_estimates_observer.h b/net/nqe/rtt_throughput_estimates_observer.h
index 26c77bc..00a96ea 100644
--- a/net/nqe/rtt_throughput_estimates_observer.h
+++ b/net/nqe/rtt_throughput_estimates_observer.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 NET_NQE_NETWORK_QUALITY_RTT_THROUGHPUT_ESTIMATES_OBSERVER_H_
-#define NET_NQE_NETWORK_QUALITY_RTT_THROUGHPUT_ESTIMATES_OBSERVER_H_
+#ifndef NET_NQE_RTT_THROUGHPUT_ESTIMATES_OBSERVER_H_
+#define NET_NQE_RTT_THROUGHPUT_ESTIMATES_OBSERVER_H_
 
 #include <stdint.h>
 
@@ -45,4 +45,4 @@
 
 }  // namespace net
 
-#endif  // NET_NQE_NETWORK_QUALITY_RTT_THROUGHPUT_ESTIMATES_OBSERVER_H_
\ No newline at end of file
+#endif  // NET_NQE_RTT_THROUGHPUT_ESTIMATES_OBSERVER_H_
diff --git a/net/reporting/reporting_feature.h b/net/reporting/reporting_feature.h
index eae3cfb..4bd3d39 100644
--- a/net/reporting/reporting_feature.h
+++ b/net/reporting/reporting_feature.h
@@ -14,4 +14,4 @@
 
 }  // namespace features
 
-#endif
+#endif  // NET_REPORTING_REPORTING_FEATURE_H_
diff --git a/net/reporting/reporting_test_util.h b/net/reporting/reporting_test_util.h
index a6752aba..488284e 100644
--- a/net/reporting/reporting_test_util.h
+++ b/net/reporting/reporting_test_util.h
@@ -195,4 +195,4 @@
 
 }  // namespace net
 
-#endif  // NET_REPORING_REPORTING_TEST_UTIL_H_
+#endif  // NET_REPORTING_REPORTING_TEST_UTIL_H_
diff --git a/net/spdy/chromium/spdy_session_pool_unittest.cc b/net/spdy/chromium/spdy_session_pool_unittest.cc
index c561e5a..d2a967ca 100644
--- a/net/spdy/chromium/spdy_session_pool_unittest.cc
+++ b/net/spdy/chromium/spdy_session_pool_unittest.cc
@@ -668,7 +668,7 @@
   // It should be possible to open a new SpdySession, even if a previous call to
   // FindAvailableSession() linked the second key to the first connection in the
   // IP pooled bucket of SpdySessionPool::available_session_map_.
-  session1 = CreateSecureSpdySessionWithIpBasedPoolingDisabled(
+  session1 = CreateSpdySessionWithIpBasedPoolingDisabled(
       http_session_.get(), test_hosts[1].key, NetLogWithSource());
   EXPECT_TRUE(session1);
   EXPECT_NE(session0.get(), session1.get());
diff --git a/net/spdy/chromium/spdy_test_util_common.cc b/net/spdy/chromium/spdy_test_util_common.cc
index fa88cec..1024f3e5d 100644
--- a/net/spdy/chromium/spdy_test_util_common.cc
+++ b/net/spdy/chromium/spdy_test_util_common.cc
@@ -554,7 +554,7 @@
                                  /* enable_ip_based_pooling = */ true);
 }
 
-base::WeakPtr<SpdySession> CreateSecureSpdySessionWithIpBasedPoolingDisabled(
+base::WeakPtr<SpdySession> CreateSpdySessionWithIpBasedPoolingDisabled(
     HttpNetworkSession* http_session,
     const SpdySessionKey& key,
     const NetLogWithSource& net_log) {
diff --git a/net/spdy/chromium/spdy_test_util_common.h b/net/spdy/chromium/spdy_test_util_common.h
index 6937c4e..98ecd92 100644
--- a/net/spdy/chromium/spdy_test_util_common.h
+++ b/net/spdy/chromium/spdy_test_util_common.h
@@ -253,7 +253,7 @@
 
 // Like CreateSpdySession(), but does not fail if there is already an IP
 // pooled session for |key|.
-base::WeakPtr<SpdySession> CreateSecureSpdySessionWithIpBasedPoolingDisabled(
+base::WeakPtr<SpdySession> CreateSpdySessionWithIpBasedPoolingDisabled(
     HttpNetworkSession* http_session,
     const SpdySessionKey& key,
     const NetLogWithSource& net_log);
diff --git a/net/ssl/client_cert_identity.h b/net/ssl/client_cert_identity.h
index 20d65a2f..1f8e4cb7 100644
--- a/net/ssl/client_cert_identity.h
+++ b/net/ssl/client_cert_identity.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 NET_SSL_SSL_CLIENT_CERT_IDENTITY_H_
-#define NET_SSL_SSL_CLIENT_CERT_IDENTITY_H_
+#ifndef NET_SSL_CLIENT_CERT_IDENTITY_H_
+#define NET_SSL_CLIENT_CERT_IDENTITY_H_
 
 #include "base/callback.h"
 #include "net/base/net_export.h"
@@ -87,4 +87,4 @@
 
 }  // namespace net
 
-#endif  // NET_SSL_SSL_CLIENT_CERT_IDENTITY_H_
+#endif  // NET_SSL_CLIENT_CERT_IDENTITY_H_
diff --git a/net/ssl/client_cert_identity_mac.h b/net/ssl/client_cert_identity_mac.h
index 268676e..8ae543f 100644
--- a/net/ssl/client_cert_identity_mac.h
+++ b/net/ssl/client_cert_identity_mac.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 NET_SSL_SSL_CLIENT_CERT_IDENTITY_MAC_H_
-#define NET_SSL_SSL_CLIENT_CERT_IDENTITY_MAC_H_
+#ifndef NET_SSL_CLIENT_CERT_IDENTITY_MAC_H_
+#define NET_SSL_CLIENT_CERT_IDENTITY_MAC_H_
 
 #include "net/ssl/client_cert_identity.h"
 
@@ -31,4 +31,4 @@
 
 }  // namespace net
 
-#endif  // NET_SSL_SSL_CLIENT_CERT_IDENTITY_MAC_H_
+#endif  // NET_SSL_CLIENT_CERT_IDENTITY_MAC_H_
diff --git a/net/ssl/client_cert_identity_test_util.h b/net/ssl/client_cert_identity_test_util.h
index 90c09f6..5b5e4276 100644
--- a/net/ssl/client_cert_identity_test_util.h
+++ b/net/ssl/client_cert_identity_test_util.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 NET_SSL_SSL_CLIENT_CERT_IDENTITY_TEST_UTIL_H_
-#define NET_SSL_SSL_CLIENT_CERT_IDENTITY_TEST_UTIL_H_
+#ifndef NET_SSL_CLIENT_CERT_IDENTITY_TEST_UTIL_H_
+#define NET_SSL_CLIENT_CERT_IDENTITY_TEST_UTIL_H_
 
 #include "net/ssl/client_cert_identity.h"
 
@@ -54,4 +54,4 @@
 
 }  // namespace net
 
-#endif  // NET_SSL_SSL_CLIENT_CERT_IDENTITY_TEST_UTIL_H_
+#endif  // NET_SSL_CLIENT_CERT_IDENTITY_TEST_UTIL_H_
diff --git a/net/tools/transport_security_state_generator/huffman/huffman_builder.h b/net/tools/transport_security_state_generator/huffman/huffman_builder.h
index 5e66ae4..ecd2a2c 100644
--- a/net/tools/transport_security_state_generator/huffman/huffman_builder.h
+++ b/net/tools/transport_security_state_generator/huffman/huffman_builder.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 NET_TOOLS_TRANSPORT_SECURITY_STATE_GENERATOR_HUFFMAN_BUILDER_H_
-#define NET_TOOLS_TRANSPORT_SECURITY_STATE_GENERATOR_HUFFMAN_BUILDER_H_
+#ifndef NET_TOOLS_TRANSPORT_SECURITY_STATE_GENERATOR_HUFFMAN_HUFFMAN_BUILDER_H_
+#define NET_TOOLS_TRANSPORT_SECURITY_STATE_GENERATOR_HUFFMAN_HUFFMAN_BUILDER_H_
 
 #include <stdint.h>
 
@@ -82,4 +82,4 @@
 
 }  // namespace net
 
-#endif  // NET_TOOLS_TRANSPORT_SECURITY_STATE_GENERATOR_HUFFMAN_BUILDER_H_
\ No newline at end of file
+#endif  // NET_TOOLS_TRANSPORT_SECURITY_STATE_GENERATOR_HUFFMAN_HUFFMAN_BUILDER_H_
diff --git a/net/tools/transport_security_state_generator/input_file_parsers.h b/net/tools/transport_security_state_generator/input_file_parsers.h
index fd4e827..9a21b61 100644
--- a/net/tools/transport_security_state_generator/input_file_parsers.h
+++ b/net/tools/transport_security_state_generator/input_file_parsers.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 NET_TOOLS_TRANSPORT_SECURITY_STATE_INPUT_FILE_PARSERS_H_
-#define NET_TOOLS_TRANSPORT_SECURITY_STATE_INPUT_FILE_PARSERS_H_
+#ifndef NET_TOOLS_TRANSPORT_SECURITY_STATE_GENERATOR_INPUT_FILE_PARSERS_H_
+#define NET_TOOLS_TRANSPORT_SECURITY_STATE_GENERATOR_INPUT_FILE_PARSERS_H_
 
 #include <string>
 
@@ -36,4 +36,4 @@
 
 }  // namespace net
 
-#endif  // NET_TOOLS_TRANSPORT_SECURITY_STATE_INPUT_FILE_PARSERS_H_
+#endif  // NET_TOOLS_TRANSPORT_SECURITY_STATE_GENERATOR_INPUT_FILE_PARSERS_H_
diff --git a/net/tools/transport_security_state_generator/transport_security_state_entry.h b/net/tools/transport_security_state_generator/transport_security_state_entry.h
index 5bfaddc..c3177dd 100644
--- a/net/tools/transport_security_state_generator/transport_security_state_entry.h
+++ b/net/tools/transport_security_state_generator/transport_security_state_entry.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 NET_TOOLS_TRANSPORT_SECURITY_STATE_GENERATOR_DOMAIN_SECURITY_ENTRY_H_
-#define NET_TOOLS_TRANSPORT_SECURITY_STATE_GENERATOR_DOMAIN_SECURITY_ENTRY_H_
+#ifndef NET_TOOLS_TRANSPORT_SECURITY_STATE_GENERATOR_TRANSPORT_SECURITY_STATE_ENTRY_H_
+#define NET_TOOLS_TRANSPORT_SECURITY_STATE_GENERATOR_TRANSPORT_SECURITY_STATE_ENTRY_H_
 
 #include <memory>
 #include <string>
@@ -54,4 +54,4 @@
 
 }  // namespace net
 
-#endif  // NET_TOOLS_TRANSPORT_SECURITY_STATE_GENERATOR_DOMAIN_SECURITY_ENTRY_H_
+#endif  // NET_TOOLS_TRANSPORT_SECURITY_STATE_GENERATOR_TRANSPORT_SECURITY_STATE_ENTRY_H_
diff --git a/skia/config/SkUserConfig.h b/skia/config/SkUserConfig.h
index a3ca099..e9b2e9e 100644
--- a/skia/config/SkUserConfig.h
+++ b/skia/config/SkUserConfig.h
@@ -195,10 +195,6 @@
 #define SK_SUPPORT_LEGACY_HQ_SCALER
 #endif
 
-#ifndef SK_SUPPORT_LEGACY_BILERP
-#define SK_SUPPORT_LEGACY_BILERP
-#endif
-
 // Workaround for poor anisotropic mipmap quality,
 // pending Skia ripmap support.
 // (https://bugs.chromium.org/p/skia/issues/detail?id=4863)
@@ -220,10 +216,6 @@
 #define SK_SUPPORT_LEGACY_TILED_BITMAPS
 #endif
 
-#ifndef SK_SUPPORT_LEGACY_WIN32_JUMPER
-#define SK_SUPPORT_LEGACY_WIN32_JUMPER
-#endif
-
 #ifndef SK_SUPPORT_NONSTD_BLENDMODES
 #define SK_SUPPORT_NONSTD_BLENDMODES
 #endif
diff --git a/testing/buildbot/chromium.gpu.fyi.json b/testing/buildbot/chromium.gpu.fyi.json
index ffb4eaef..98280264 100644
--- a/testing/buildbot/chromium.gpu.fyi.json
+++ b/testing/buildbot/chromium.gpu.fyi.json
@@ -2754,30 +2754,6 @@
           "--browser=debug",
           "--passthrough",
           "-v",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --use-gl=angle"
-        ],
-        "isolate_name": "telemetry_gpu_integration_test",
-        "name": "webgl_conformance_angle_tests",
-        "override_compile_targets": [
-          "telemetry_gpu_integration_test"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": false,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1912",
-              "os": "Ubuntu"
-            }
-          ]
-        }
-      },
-      {
-        "args": [
-          "webgl_conformance",
-          "--show-stdout",
-          "--browser=debug",
-          "--passthrough",
-          "-v",
           "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --use-gl=angle --use-angle=gl --use-passthrough-cmd-decoder"
         ],
         "isolate_name": "telemetry_gpu_integration_test",
@@ -3185,30 +3161,6 @@
           "--browser=debug",
           "--passthrough",
           "-v",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --use-gl=angle"
-        ],
-        "isolate_name": "telemetry_gpu_integration_test",
-        "name": "webgl_conformance_angle_tests",
-        "override_compile_targets": [
-          "telemetry_gpu_integration_test"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "10de:104a",
-              "os": "Ubuntu"
-            }
-          ]
-        }
-      },
-      {
-        "args": [
-          "webgl_conformance",
-          "--show-stdout",
-          "--browser=debug",
-          "--passthrough",
-          "-v",
           "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --use-gl=angle --use-angle=gl --use-passthrough-cmd-decoder"
         ],
         "isolate_name": "telemetry_gpu_integration_test",
@@ -3849,30 +3801,6 @@
           "--browser=release",
           "--passthrough",
           "-v",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --use-gl=angle"
-        ],
-        "isolate_name": "telemetry_gpu_integration_test",
-        "name": "webgl_conformance_angle_tests",
-        "override_compile_targets": [
-          "telemetry_gpu_integration_test"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": false,
-          "dimension_sets": [
-            {
-              "gpu": "1002:6613",
-              "os": "Ubuntu"
-            }
-          ]
-        }
-      },
-      {
-        "args": [
-          "webgl_conformance",
-          "--show-stdout",
-          "--browser=release",
-          "--passthrough",
-          "-v",
           "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --use-gl=angle --use-angle=gl --use-passthrough-cmd-decoder"
         ],
         "isolate_name": "telemetry_gpu_integration_test",
@@ -4294,12 +4222,12 @@
           "--browser=release",
           "--passthrough",
           "-v",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --use-gl=angle",
+          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --use-gl=angle --use-angle=gl --use-passthrough-cmd-decoder",
           "--webgl-conformance-version=2.0.1",
           "--read-abbreviated-json-results-from=../../content/test/data/gpu/webgl2_conformance_tests_output.json"
         ],
         "isolate_name": "telemetry_gpu_integration_test",
-        "name": "webgl2_conformance_angle_tests",
+        "name": "webgl2_conformance_gl_passthrough_tests",
         "override_compile_targets": [
           "telemetry_gpu_integration_test"
         ],
@@ -4348,30 +4276,6 @@
           "--browser=release",
           "--passthrough",
           "-v",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --use-gl=angle"
-        ],
-        "isolate_name": "telemetry_gpu_integration_test",
-        "name": "webgl_conformance_angle_tests",
-        "override_compile_targets": [
-          "telemetry_gpu_integration_test"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": false,
-          "dimension_sets": [
-            {
-              "gpu": "8086:1912",
-              "os": "Ubuntu"
-            }
-          ]
-        }
-      },
-      {
-        "args": [
-          "webgl_conformance",
-          "--show-stdout",
-          "--browser=release",
-          "--passthrough",
-          "-v",
           "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --use-gl=angle --use-angle=gl --use-passthrough-cmd-decoder"
         ],
         "isolate_name": "telemetry_gpu_integration_test",
@@ -4820,30 +4724,6 @@
           "--browser=release",
           "--passthrough",
           "-v",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --use-gl=angle"
-        ],
-        "isolate_name": "telemetry_gpu_integration_test",
-        "name": "webgl_conformance_angle_tests",
-        "override_compile_targets": [
-          "telemetry_gpu_integration_test"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": false,
-          "dimension_sets": [
-            {
-              "gpu": "8086:5912",
-              "os": "Ubuntu"
-            }
-          ]
-        }
-      },
-      {
-        "args": [
-          "webgl_conformance",
-          "--show-stdout",
-          "--browser=release",
-          "--passthrough",
-          "-v",
           "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --use-gl=angle --use-angle=gl --use-passthrough-cmd-decoder"
         ],
         "isolate_name": "telemetry_gpu_integration_test",
@@ -5292,30 +5172,6 @@
           "--browser=release",
           "--passthrough",
           "-v",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --use-gl=angle"
-        ],
-        "isolate_name": "telemetry_gpu_integration_test",
-        "name": "webgl_conformance_angle_tests",
-        "override_compile_targets": [
-          "telemetry_gpu_integration_test"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": false,
-          "dimension_sets": [
-            {
-              "gpu": "10de:1cb3",
-              "os": "Ubuntu"
-            }
-          ]
-        }
-      },
-      {
-        "args": [
-          "webgl_conformance",
-          "--show-stdout",
-          "--browser=release",
-          "--passthrough",
-          "-v",
           "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --use-gl=angle --use-angle=gl --use-passthrough-cmd-decoder"
         ],
         "isolate_name": "telemetry_gpu_integration_test",
@@ -5817,12 +5673,12 @@
           "--browser=release",
           "--passthrough",
           "-v",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --use-gl=angle",
+          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --use-gl=angle --use-angle=gl --use-passthrough-cmd-decoder",
           "--webgl-conformance-version=2.0.1",
           "--read-abbreviated-json-results-from=../../content/test/data/gpu/webgl2_conformance_tests_output.json"
         ],
         "isolate_name": "telemetry_gpu_integration_test",
-        "name": "webgl2_conformance_angle_tests",
+        "name": "webgl2_conformance_gl_passthrough_tests",
         "override_compile_targets": [
           "telemetry_gpu_integration_test"
         ],
@@ -5871,30 +5727,6 @@
           "--browser=release",
           "--passthrough",
           "-v",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --use-gl=angle"
-        ],
-        "isolate_name": "telemetry_gpu_integration_test",
-        "name": "webgl_conformance_angle_tests",
-        "override_compile_targets": [
-          "telemetry_gpu_integration_test"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "10de:104a",
-              "os": "Ubuntu"
-            }
-          ]
-        }
-      },
-      {
-        "args": [
-          "webgl_conformance",
-          "--show-stdout",
-          "--browser=release",
-          "--passthrough",
-          "-v",
           "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --use-gl=angle --use-angle=gl --use-passthrough-cmd-decoder"
         ],
         "isolate_name": "telemetry_gpu_integration_test",
@@ -11324,30 +11156,6 @@
           "--browser=release",
           "--passthrough",
           "-v",
-          "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --use-gl=angle"
-        ],
-        "isolate_name": "telemetry_gpu_integration_test",
-        "name": "webgl_conformance_angle_tests",
-        "override_compile_targets": [
-          "telemetry_gpu_integration_test"
-        ],
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "gpu": "10de:104a",
-              "os": "Ubuntu"
-            }
-          ]
-        }
-      },
-      {
-        "args": [
-          "webgl_conformance",
-          "--show-stdout",
-          "--browser=release",
-          "--passthrough",
-          "-v",
           "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --use-gl=angle --use-angle=gl --use-passthrough-cmd-decoder"
         ],
         "isolate_name": "telemetry_gpu_integration_test",
diff --git a/third_party/WebKit/LayoutTests/FlagExpectations/enable-features=NetworkService b/third_party/WebKit/LayoutTests/FlagExpectations/enable-features=NetworkService
index 54d1719a..53dbc3f 100644
--- a/third_party/WebKit/LayoutTests/FlagExpectations/enable-features=NetworkService
+++ b/third_party/WebKit/LayoutTests/FlagExpectations/enable-features=NetworkService
@@ -294,7 +294,7 @@
 Bug(none) external/wpt/fullscreen/api/document-fullscreen-enabled-active-document.html [ Failure Timeout ]
 Bug(none) external/wpt/fullscreen/api/element-request-fullscreen-active-document.html [ Failure Timeout ]
 Bug(none) external/wpt/hr-time/test_cross_frame_start.html [ Failure Timeout ]
-Bug(none) external/wpt/hr-time/window-worker-time-origin.html [ Failure Timeout ]
+Bug(none) external/wpt/hr-time/window-worker-time-origin.html [ Timeout ]
 Bug(none) external/wpt/html/browsers/browsing-the-web/navigating-across-documents/012.html [ Failure Timeout ]
 Bug(none) external/wpt/html/browsers/browsing-the-web/read-media/pageload-video.html [ Crash Pass Failure Timeout ]
 Bug(none) external/wpt/html/browsers/browsing-the-web/unloading-documents/005.html [ Crash ]
diff --git a/third_party/WebKit/LayoutTests/TestExpectations b/third_party/WebKit/LayoutTests/TestExpectations
index e7fea2a3..b26ee07 100644
--- a/third_party/WebKit/LayoutTests/TestExpectations
+++ b/third_party/WebKit/LayoutTests/TestExpectations
@@ -95,7 +95,7 @@
 # Looks like a filuare to get a paint on time. Test could be changed to use runAfterLayoutAndPaint
 # instead of a timeout, which may fix things.
 crbug.com/713049 images/color-profile-reflection.html [ Failure Pass ]
-crbug.com/713049 virtual/gpu-rasterization/images/color-profile-reflection.html [ Failure Pass ]
+crbug.com/713049 virtual/gpu-rasterization/images/color-profile-reflection.html [ Failure Pass Timeout ]
 crbug.com/713049 virtual/exotic-color-space/images/color-profile-reflection.html [ Failure Pass ]
 
 crbug.com/717389 [ Linux Debug ] virtual/gpu/fast/canvas/canvas-clip-rule.html [ Crash ]
@@ -1240,7 +1240,6 @@
 # By about a quarter or less of a pixel.
 crbug.com/421412 [ Mac ] fast/text/international/bdo-bidi-width.html [ Failure ]
 
-crbug.com/417782 virtual/rootlayerscrolls/fast/scrolling/scrollable-area-frame-zero-size-and-border.html [ Failure ]
 crbug.com/417782 virtual/rootlayerscrolls/fast/scrolling/scrollbar-tickmarks-styled.html [ Failure ]
 crbug.com/417782 virtual/rootlayerscrolls/fast/scrolling/scrollbar-tickmarks-styled-after-onload.html [ Failure ]
 
@@ -1682,7 +1681,6 @@
 # numbers so a consistent baseline cannot be added. This test could be
 # imported if the test passed or if the results for testharness tests
 # were matched on pass/fail but not exact error messages.
-crbug.com/688854 external/wpt/hr-time/window-worker-time-origin.html [ Failure ]
 crbug.com/626703 external/wpt/resource-timing/resource_TAO_space.htm [ Pass Failure ]
 crbug.com/626703 [ Mac ] external/wpt/web-animations/interfaces/AnimationTimeline/document-timeline.html [ Failure ]
 
@@ -3093,8 +3091,15 @@
 # module script lacks XHTML support
 crbug.com/717643 external/wpt/html/semantics/scripting-1/the-script-element/module/module-in-xhtml.xhtml [ Failure ]
 
+# Ganesh dither changes
+crbug.com/745776 virtual/gpu/fast/canvas/canvas-text-alignment.html [ NeedsManualRebaseline ]
+crbug.com/745776 virtual/gpu/fast/canvas/fillrect_gradient.html [ NeedsManualRebaseline ]
+crbug.com/745776 virtual/gpu/fast/canvas/gradient-add-second-start-end-stop.html [ NeedsManualRebaseline ]
+
 # Sheriff failures 2017-07-03
 crbug.com/708994 http/tests/security/cross-frame-mouse-source-capabilities.html [ Timeout Pass ]
 crbug.com/708994 virtual/mojo-loading/http/tests/security/cross-frame-mouse-source-capabilities.html [ Timeout Pass ]
 
 crbug.com/626703 [ Win7 ] external/wpt/html/semantics/tabular-data/processing-model-1/span-limits.html [ Timeout ]
+
+crbug.com/745887 [ Mac Win ] fast/frames/sandboxed-iframe-plugins.html [ Failure Pass ]
diff --git a/third_party/WebKit/LayoutTests/platform/linux/css3/blending/background-blend-mode-crossfade-image-gradient-expected.png b/third_party/WebKit/LayoutTests/css3/blending/background-blend-mode-crossfade-image-gradient-expected.png
similarity index 100%
rename from third_party/WebKit/LayoutTests/platform/linux/css3/blending/background-blend-mode-crossfade-image-gradient-expected.png
rename to third_party/WebKit/LayoutTests/css3/blending/background-blend-mode-crossfade-image-gradient-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/css3/blending/background-blend-mode-image-image-expected.png b/third_party/WebKit/LayoutTests/css3/blending/background-blend-mode-image-image-expected.png
similarity index 100%
rename from third_party/WebKit/LayoutTests/platform/linux/css3/blending/background-blend-mode-image-image-expected.png
rename to third_party/WebKit/LayoutTests/css3/blending/background-blend-mode-image-image-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/css3/blending/background-blend-mode-image-svg-expected.png b/third_party/WebKit/LayoutTests/css3/blending/background-blend-mode-image-svg-expected.png
similarity index 100%
rename from third_party/WebKit/LayoutTests/platform/linux/css3/blending/background-blend-mode-image-svg-expected.png
rename to third_party/WebKit/LayoutTests/css3/blending/background-blend-mode-image-svg-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/css3/blending/background-blend-mode-multiple-background-layers-expected.png b/third_party/WebKit/LayoutTests/css3/blending/background-blend-mode-multiple-background-layers-expected.png
similarity index 100%
rename from third_party/WebKit/LayoutTests/platform/linux/css3/blending/background-blend-mode-multiple-background-layers-expected.png
rename to third_party/WebKit/LayoutTests/css3/blending/background-blend-mode-multiple-background-layers-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/css3/blending/background-blend-mode-tiled-gradient-expected.png b/third_party/WebKit/LayoutTests/css3/blending/background-blend-mode-tiled-gradient-expected.png
similarity index 100%
rename from third_party/WebKit/LayoutTests/platform/linux/css3/blending/background-blend-mode-tiled-gradient-expected.png
rename to third_party/WebKit/LayoutTests/css3/blending/background-blend-mode-tiled-gradient-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/css3/blending/mix-blend-mode-isolated-group-1-expected.png b/third_party/WebKit/LayoutTests/css3/blending/mix-blend-mode-isolated-group-1-expected.png
similarity index 100%
rename from third_party/WebKit/LayoutTests/platform/linux/css3/blending/mix-blend-mode-isolated-group-1-expected.png
rename to third_party/WebKit/LayoutTests/css3/blending/mix-blend-mode-isolated-group-1-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/css3/blending/mix-blend-mode-isolated-group-2-expected.png b/third_party/WebKit/LayoutTests/css3/blending/mix-blend-mode-isolated-group-2-expected.png
similarity index 100%
rename from third_party/WebKit/LayoutTests/platform/linux/css3/blending/mix-blend-mode-isolated-group-2-expected.png
rename to third_party/WebKit/LayoutTests/css3/blending/mix-blend-mode-isolated-group-2-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/css3/blending/mix-blend-mode-isolated-group-3-expected.png b/third_party/WebKit/LayoutTests/css3/blending/mix-blend-mode-isolated-group-3-expected.png
similarity index 100%
rename from third_party/WebKit/LayoutTests/platform/linux/css3/blending/mix-blend-mode-isolated-group-3-expected.png
rename to third_party/WebKit/LayoutTests/css3/blending/mix-blend-mode-isolated-group-3-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/css3/filters/regions-expanding-expected.png b/third_party/WebKit/LayoutTests/css3/filters/regions-expanding-expected.png
index 25b86c45..83d26a9 100644
--- a/third_party/WebKit/LayoutTests/css3/filters/regions-expanding-expected.png
+++ b/third_party/WebKit/LayoutTests/css3/filters/regions-expanding-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/external/wpt/clear-site-data/navigation-insecure.html b/third_party/WebKit/LayoutTests/external/wpt/clear-site-data/navigation-insecure.html
index c156aa10..9ccd712 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/clear-site-data/navigation-insecure.html
+++ b/third_party/WebKit/LayoutTests/external/wpt/clear-site-data/navigation-insecure.html
@@ -3,7 +3,7 @@
   <head>
     <script src="/resources/testharness.js"></script>
     <script src="/resources/testharnessreport.js"></script>
-    <script src="support/test_utils.js"></script>
+    <script src="support/test_utils.sub.js"></script>
   </head>
 
   <body>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/clear-site-data/navigation.https.html b/third_party/WebKit/LayoutTests/external/wpt/clear-site-data/navigation.https.html
index a8f83903e..dbddce3c 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/clear-site-data/navigation.https.html
+++ b/third_party/WebKit/LayoutTests/external/wpt/clear-site-data/navigation.https.html
@@ -3,7 +3,7 @@
   <head>
     <script src="/resources/testharness.js"></script>
     <script src="/resources/testharnessreport.js"></script>
-    <script src="support/test_utils.js"></script>
+    <script src="support/test_utils.sub.js"></script>
   </head>
 
   <body>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/clear-site-data/resource.html b/third_party/WebKit/LayoutTests/external/wpt/clear-site-data/resource.html
new file mode 100644
index 0000000..a966cb9
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/clear-site-data/resource.html
@@ -0,0 +1,74 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <script src="/resources/testharness.js"></script>
+    <script src="/resources/testharnessreport.js"></script>
+    <script src="support/test_utils.sub.js"></script>
+  </head>
+
+  <body>
+    <script>
+      /**
+       * @typedef{TestCase}
+       * @type{object}
+       * @property{string} frame The scheme of the url of the iframe.
+       * @property{string} resource The scheme of the resource in the iframe.
+       * @property{boolean} deleted Whether it is expected that Clear-Site-Data
+       *     will be respected when loading |resource| in |frame|.
+       */
+      var TestCase;
+
+      /** Array<TestCase> Test cases. */
+      var test_cases = [
+        { "frame": "https", "resource": "https", "deleted": true },
+        { "frame": "http", "resource": "https", "deleted": true },
+        { "frame": "https", "resource": "http", "deleted": false },
+        { "frame": "http", "resource": "http", "deleted": false },
+      ];
+
+      /**
+       * @param TestCase test_case The test case that is tested.
+       * @param Dict.<string, boolean> report A map between a datatype name and
+       *     whether it is empty.
+       */
+      function verifyDatatypes(test_case, report) {
+        if (test_case.deleted) {
+          assert_true(
+              report["storage"],
+              "Storage should have been cleared.");
+        } else {
+          assert_false(
+              report["storage"],
+              "Storage should NOT have been cleared.");
+        }
+      }
+
+      test_cases.forEach(function(test_case) {
+        var test_name =
+            test_case.resource + " resource on a " + test_case.frame + " page";
+
+        promise_test(function(test) {
+          return new Promise(function(resolve_test, reject_test) {
+            TestUtils.populateDatatypes()
+                .then(function() {
+                  // Navigate to a page with a resource that is loaded with
+                  // the Clear-Site-Data header, then verify that storage
+                  // has been deleted if and only if the resource was loaded
+                  // via HTTPS.
+                  return new Promise(function(resolve, reject) {
+                    window.addEventListener("message", resolve);
+                    var iframe = document.createElement("iframe");
+                    iframe.src = TestUtils.getPageWithResourceUrl(
+                        test_case.frame, test_case.resource);
+                    document.body.appendChild(iframe);
+                  }).then(function(messageEvent) {
+                    verifyDatatypes(test_case, messageEvent.data);
+                    resolve_test();
+                  });
+                });
+          });
+        }, test_name);
+      });
+    </script>
+  </body>
+</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/clear-site-data/support/echo-clear-site-data.py b/third_party/WebKit/LayoutTests/external/wpt/clear-site-data/support/echo-clear-site-data.py
index ab85002..f7c48bb 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/clear-site-data/support/echo-clear-site-data.py
+++ b/third_party/WebKit/LayoutTests/external/wpt/clear-site-data/support/echo-clear-site-data.py
@@ -5,7 +5,7 @@
 <html>
   <head>
     <title>Clear-Site-Data</title>
-    <script src="test_utils.js"></script>
+    <script src="test_utils.sub.js"></script>
   </head>
   <body>
     <script>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/clear-site-data/support/page_with_resource.sub.html b/third_party/WebKit/LayoutTests/external/wpt/clear-site-data/support/page_with_resource.sub.html
new file mode 100644
index 0000000..703519a
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/clear-site-data/support/page_with_resource.sub.html
@@ -0,0 +1,27 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <title>Clear-Site-Data</title>
+    <script src="test_utils.sub.js"></script>
+  </head>
+  <body>
+    <script>
+      var scheme = location.search.match("scheme=([^&$]+)")[1];
+
+      // TODO(@msramek): Move this logic to TestUtils.
+      var base_url = location.origin
+          .replace(/https?/, scheme)
+          .replace(/:[0-9]+/, ":" + (scheme == "https" ? {{ports[https][0]}}
+                                                       : {{ports[http][0]}})) +
+          "/clear-site-data/support/";
+
+      var image = new Image();
+      image.onload = image.onerror = function() {
+        location.href = base_url + "send_report.html";
+      }
+
+      // TODO(@msramek): Move this logic to TestUtils.
+      image.src = base_url + "echo-clear-site-data.py?storage";
+    </script>
+  </body>
+</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/clear-site-data/support/send_report.html b/third_party/WebKit/LayoutTests/external/wpt/clear-site-data/support/send_report.html
new file mode 100644
index 0000000..6e90c62
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/clear-site-data/support/send_report.html
@@ -0,0 +1,24 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <title>Clear-Site-Data</title>
+    <script src="test_utils.sub.js"></script>
+  </head>
+  <body>
+    <script>
+      /**
+       * A map between a datatype name and whether it is empty.
+       * @property Object.<string, boolean>
+       */
+      var report = {};
+
+      Promise.all(TestUtils.DATATYPES.map(function(datatype) {
+        return datatype.isEmpty().then(function(isEmpty) {
+          report[datatype.name] = isEmpty;
+        });
+      })).then(function() {
+        window.top.postMessage(report, "*");
+      });
+    </script>
+  </body>
+</html>
diff --git a/third_party/WebKit/LayoutTests/external/wpt/clear-site-data/support/test_utils.js b/third_party/WebKit/LayoutTests/external/wpt/clear-site-data/support/test_utils.sub.js
similarity index 78%
rename from third_party/WebKit/LayoutTests/external/wpt/clear-site-data/support/test_utils.js
rename to third_party/WebKit/LayoutTests/external/wpt/clear-site-data/support/test_utils.sub.js
index 35b0a01..742eef6 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/clear-site-data/support/test_utils.js
+++ b/third_party/WebKit/LayoutTests/external/wpt/clear-site-data/support/test_utils.sub.js
@@ -105,5 +105,22 @@
     return "support/echo-clear-site-data.py?" + names.join("&");
   }
 
+  /**
+   * @param{string} page_scheme Scheme of the page. "http" or "https".
+   * @param{string} resource_scheme Scheme of the resource. "http" or "https".
+   * @return The URL of a page that contains a resource requesting the deletion
+   *     of storage.
+   */
+  TestUtils.getPageWithResourceUrl = function(page_scheme, resource_scheme) {
+      if (page_scheme != "https" && page_scheme != "http")
+        throw "Unsupported scheme: " + page_scheme;
+      if (resource_scheme != "https" && resource_scheme != "http")
+        throw "Unsupported scheme: " + resource_scheme;
+      return page_scheme + "://web-platform.test:" +
+          (page_scheme == "https" ? {{ports[https][0]}} : {{ports[http][0]}}) +
+          "/clear-site-data/support/page_with_resource.sub.html?scheme=" +
+          resource_scheme;
+  }
+
   return TestUtils;
 })();
diff --git a/third_party/WebKit/LayoutTests/fast/canvas/canvas-createImageBitmap-drawImage-video.html b/third_party/WebKit/LayoutTests/fast/canvas/canvas-createImageBitmap-drawImage-video.html
index 0e8278a..502666b 100644
--- a/third_party/WebKit/LayoutTests/fast/canvas/canvas-createImageBitmap-drawImage-video.html
+++ b/third_party/WebKit/LayoutTests/fast/canvas/canvas-createImageBitmap-drawImage-video.html
@@ -57,16 +57,28 @@
 
 function videoLoaded() {
     var imageBitmaps = {};
-    var p1 = createImageBitmap(video).then(function (image) { imageBitmaps.noCrop = image });
-    var p2 = createImageBitmap(video, 0, 0, 100, 100).then(function (image) { imageBitmaps.crop = image });
-    var p3 = createImageBitmap(video, 50, 50, 100, 100).then(function (image) { imageBitmaps.cropRight = image });
-    var p4 = createImageBitmap(video, 100, 100, 100, 100).then(function (image) { imageBitmaps.cropCenter = image });
-    var p5 = createImageBitmap(video, -100, -100, 600, 600).then(function (image) { imageBitmaps.overCrop = image });
-    var p6 = createImageBitmap(video, 100, 100, 500, 500).then(function (image) { imageBitmaps.overCropRight = image });
-    var p7 = createImageBitmap(video, 100, 100, -100, -100).then(function (image) { imageBitmaps.negativeCrop = image });
-    var p8 = createImageBitmap(video, -300, -300, 300, 300).then(function (image) { imageBitmaps.empty = image });
-    var p9 = createImageBitmap(video, 400, 300, 300, 300).then(function (image) { imageBitmaps.emptyTwo = image });
-    var p10 = createImageBitmap(video, 0, 0, Math.pow(10, 6), Math.pow(10, 6)).then(function(image) { imageBitmaps.hugeCrop = image });
+    var p1 = createImageBitmap(video).then(
+        function (image) { imageBitmaps.noCrop = image });
+    var p2 = createImageBitmap(video, 0, 0, 100, 100).then(
+        function (image) { imageBitmaps.crop = image });
+    var p3 = createImageBitmap(video, 50, 50, 100, 100).then(
+        function (image) { imageBitmaps.cropRight = image });
+    var p4 = createImageBitmap(video, 100, 100, 100, 100).then(
+        function (image) { imageBitmaps.cropCenter = image });
+    var p5 = createImageBitmap(video, -100, -100, 600, 600).then(
+        function (image) { imageBitmaps.overCrop = image });
+    var p6 = createImageBitmap(video, 100, 100, 500, 500).then(
+        function (image) { imageBitmaps.overCropRight = image });
+    var p7 = createImageBitmap(video, 100, 100, -100, -100).then(
+        function (image) { imageBitmaps.negativeCrop = image });
+    var p8 = createImageBitmap(video, -300, -300, 300, 300).then(
+        function (image) { imageBitmaps.empty = image });
+    var p9 = createImageBitmap(video, 400, 300, 300, 300).then(
+        function (image) { imageBitmaps.emptyTwo = image });
+    var p10 = createImageBitmap(video, 0, 0, Math.pow(10, 6),
+                                Math.pow(10, 6)).then(
+        function(image) { imageBitmaps.hugeCrop = image });
+
     Promise.all([p1, p2, p3, p4, p5, p6, p7, p8, p9]).then(function() {
         checkNoCrop(imageBitmaps.noCrop);
         checkCrop(imageBitmaps.crop, 0, 0, 100, 100);
@@ -167,17 +179,11 @@
 
     var ctx = canvas.getContext("2d");
     var ctx1 = canvas1.getContext("2d");
-    // should be drawn to (100, 100), (452, 388)
+    // should be drawn to (0, 0), (352, 288)
     clearContext(ctx, ctx1);
     ctx.drawImage(imageBitmap, 0, 0);
-    ctx1.drawImage(video, 100, 100, 352, 288);
+    ctx1.drawImage(video, 0, 0, 352, 288);
     compareTwoCanvases(0, 0, 500, 500, ctx, ctx1);
-
-    // should be drawn to (50, 50), (226, 194)
-    clearContext(ctx, ctx1);
-    ctx.drawImage(imageBitmap, 0, 0, 300, 300);
-    ctx1.drawImage(video, 0, 0, 352, 288, 50, 50, 176, 144);
-    compareTwoCanvases(0, 0, 300, 300, ctx, ctx1);
 }
 
 function checkOverCropRight(imageBitmap) {
diff --git a/third_party/WebKit/LayoutTests/fast/canvas/webgl/resources/red-green-blue-white-2x2.ogv b/third_party/WebKit/LayoutTests/fast/canvas/webgl/resources/red-green-blue-white-2x2.ogv
new file mode 100644
index 0000000..f2c309e7
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/fast/canvas/webgl/resources/red-green-blue-white-2x2.ogv
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/fast/canvas/webgl/resources/red-green-semi-transparent-2x2.png b/third_party/WebKit/LayoutTests/fast/canvas/webgl/resources/red-green-semi-transparent-2x2.png
new file mode 100644
index 0000000..079e8aa
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/fast/canvas/webgl/resources/red-green-semi-transparent-2x2.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/fast/canvas/webgl/resources/tex-image-and-sub-image-image-bitmap-utils-resize-video.js b/third_party/WebKit/LayoutTests/fast/canvas/webgl/resources/tex-image-and-sub-image-image-bitmap-utils-resize-video.js
new file mode 100644
index 0000000..447461ff9
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/fast/canvas/webgl/resources/tex-image-and-sub-image-image-bitmap-utils-resize-video.js
@@ -0,0 +1,174 @@
+var refBufPremul = new Uint8Array([
+    255, 0, 0, 255,   192, 63, 0, 255,   61, 192, 0, 255,     0, 255, 2, 255,
+    192, 0, 60, 255,  157, 62, 62, 255,  96, 191, 67, 255,    62, 255, 70, 255,
+    62, 0, 184, 255,  93, 62, 187, 255,  160, 190, 191, 255,  192, 255, 194, 255,
+    0, 0, 252, 255,   58, 61, 255, 255,  195, 189, 255, 255,  255, 255, 255, 255]);
+
+var refBufUnpremul = new Uint8Array([
+    255, 0, 0, 255,   192, 63, 0, 255,   61, 192, 0, 255,     0, 255, 2, 255,
+    192, 0, 60, 255,  157, 62, 62, 255,  96, 191, 67, 255,    62, 255, 70, 255,
+    62, 0, 184, 255,  93, 62, 187, 255,  160, 190, 191, 255,  192, 255, 194, 255,
+    0, 0, 252, 255,   58, 61, 255, 255,  195, 189, 255, 255,  255, 255, 255, 255]);
+
+var refBufFlipY = new Uint8Array([
+    0, 0, 252, 255,   58, 61, 255, 255,  195, 189, 255, 255,  255, 255, 255, 255,
+    62, 0, 184, 255,  93, 62, 187, 255,  160, 190, 191, 255,  192, 255, 194, 255,
+    192, 0, 60, 255,  157, 62, 62, 255,  96, 191, 67, 255,    62, 255, 70, 255,
+    255, 0, 0, 255,   192, 63, 0, 255,   61, 192, 0, 255,     0, 255, 2, 255]);
+
+var refBufUnpremulFlipY = new Uint8Array([
+    0, 0, 252, 255,   58, 61, 255, 255,  195, 189, 255, 255,  255, 255, 255, 255,
+    62, 0, 184, 255,  93, 62, 187, 255,  160, 190, 191, 255,  192, 255, 194, 255,
+    192, 0, 60, 255,  157, 62, 62, 255,  96, 191, 67, 255,    62, 255, 70, 255,
+    255, 0, 0, 255,   192, 63, 0, 255,   61, 192, 0, 255,     0, 255, 2, 255]);
+
+function checkCanvas(buf, refBuf, tolerance, retVal)
+{
+    if (buf.length != refBuf.length) {
+        retVal.testPassed = false;
+        return;
+    }
+    for (var p = 0; p < buf.length; p++) {
+        if (Math.abs(buf[p] - refBuf[p]) > tolerance) {
+            retVal.testPassed = false;
+            return;
+        }
+    }
+}
+
+function runOneIteration(useTexSubImage2D, bindingTarget, program, bitmap,
+                         flipY, premultiplyAlpha, retVal, colorSpace = 'empty')
+{
+    gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);
+    // Enable writes to the RGBA channels
+    gl.colorMask(1, 1, 1, 1);
+    var texture = gl.createTexture();
+    // Bind the texture to texture unit 0
+    gl.bindTexture(bindingTarget, texture);
+    // Set up texture parameters
+    gl.texParameteri(bindingTarget, gl.TEXTURE_MIN_FILTER, gl.NEAREST);
+    gl.texParameteri(bindingTarget, gl.TEXTURE_MAG_FILTER, gl.NEAREST);
+
+    var targets = [gl.TEXTURE_2D];
+    if (bindingTarget == gl.TEXTURE_CUBE_MAP) {
+        targets = [gl.TEXTURE_CUBE_MAP_POSITIVE_X,
+                   gl.TEXTURE_CUBE_MAP_NEGATIVE_X,
+                   gl.TEXTURE_CUBE_MAP_POSITIVE_Y,
+                   gl.TEXTURE_CUBE_MAP_NEGATIVE_Y,
+                   gl.TEXTURE_CUBE_MAP_POSITIVE_Z,
+                   gl.TEXTURE_CUBE_MAP_NEGATIVE_Z];
+    }
+    // Upload the image into the texture
+    for (var tt = 0; tt < targets.length; ++tt) {
+        if (useTexSubImage2D) {
+            // Initialize the texture to black first
+            gl.texImage2D(targets[tt], 0, gl[internalFormat], bitmap.width,
+                          bitmap.height, 0, gl[pixelFormat], gl[pixelType], null);
+            gl.texSubImage2D(targets[tt], 0, 0, 0, gl[pixelFormat],
+                             gl[pixelType], bitmap);
+        } else {
+            gl.texImage2D(targets[tt], 0, gl[internalFormat], gl[pixelFormat],
+                          gl[pixelType], bitmap);
+        }
+    }
+
+    var width = gl.canvas.width;
+    var height = gl.canvas.height;
+
+    var loc;
+    if (bindingTarget == gl.TEXTURE_CUBE_MAP) {
+        loc = gl.getUniformLocation(program, "face");
+    }
+
+    var tolerance = (retVal.alpha == 0) ? 0 : 10;
+    for (var tt = 0; tt < targets.length; ++tt) {
+        if (bindingTarget == gl.TEXTURE_CUBE_MAP) {
+            gl.uniform1i(loc, targets[tt]);
+        }
+        // Draw the triangles
+        gl.clearColor(0, 0, 0, 1);
+        gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);
+        gl.drawArrays(gl.TRIANGLES, 0, 6);
+        // Select the proper reference buffer
+        var refBuf = refBufPremul;
+        if (flipY && !premultiplyAlpha)
+            refBuf = refBufUnpremulFlipY;
+        else if (!premultiplyAlpha)
+            refBuf = refBufUnpremul;
+        else if (flipY)
+            refBuf = refBufFlipY;
+        // Check the pixels
+        var buf = new Uint8Array(width * height * 4);
+        gl.readPixels(0, 0, width, height, gl.RGBA, gl.UNSIGNED_BYTE, buf);
+        checkCanvas(buf, refBuf, tolerance, retVal);
+    }
+}
+
+function runTestOnBindingTarget(bindingTarget, program, bitmaps, retVal) {
+    var cases = [
+        { sub: false, bitmap: bitmaps.defaultOption, flipY: false,
+            premultiply: true, colorSpace: 'empty' },
+        { sub: true, bitmap: bitmaps.defaultOption, flipY: false,
+            premultiply: true, colorSpace: 'empty' },
+        { sub: false, bitmap: bitmaps.noFlipYPremul, flipY: false,
+            premultiply: true, colorSpace: 'empty' },
+        { sub: true, bitmap: bitmaps.noFlipYPremul, flipY: false,
+            premultiply: true, colorSpace: 'empty' },
+        { sub: false, bitmap: bitmaps.noFlipYDefault, flipY: false,
+            premultiply: true, colorSpace: 'empty' },
+        { sub: true, bitmap: bitmaps.noFlipYDefault, flipY: false,
+            premultiply: true, colorSpace: 'empty' },
+        { sub: false, bitmap: bitmaps.noFlipYUnpremul, flipY: false,
+            premultiply: false, colorSpace: 'empty' },
+        { sub: true, bitmap: bitmaps.noFlipYUnpremul, flipY: false,
+            premultiply: false, colorSpace: 'empty' },
+        { sub: false, bitmap: bitmaps.flipYPremul, flipY: true,
+            premultiply: true, colorSpace: 'empty' },
+        { sub: true, bitmap: bitmaps.flipYPremul, flipY: true,
+            premultiply: true, colorSpace: 'empty' },
+        { sub: false, bitmap: bitmaps.flipYDefault, flipY: true,
+            premultiply: true, colorSpace: 'empty' },
+        { sub: true, bitmap: bitmaps.flipYDefault, flipY: true,
+            premultiply: true, colorSpace: 'empty' },
+        { sub: false, bitmap: bitmaps.flipYUnpremul, flipY: true,
+            premultiply: false, colorSpace: 'empty' },
+        { sub: true, bitmap: bitmaps.flipYUnpremul, flipY: true,
+            premultiply: false, colorSpace: 'empty' },
+        { sub: false, bitmap: bitmaps.colorSpaceDef, flipY: false,
+            premultiply: true,
+            colorSpace: retVal.colorSpaceEffect ? 'notprovided' : 'empty' },
+        { sub: true, bitmap: bitmaps.colorSpaceDef, flipY: false,
+            premultiply: true,
+            colorSpace: retVal.colorSpaceEffect ? 'notprovided' : 'empty' },
+        { sub: false, bitmap: bitmaps.colorSpaceNone, flipY: false,
+            premultiply: true,
+            colorSpace: retVal.colorSpaceEffect ? 'none' : 'empty' },
+        { sub: true, bitmap: bitmaps.colorSpaceNone, flipY: false,
+            premultiply: true,
+            colorSpace: retVal.colorSpaceEffect ? 'none' : 'empty' },
+        { sub: false, bitmap: bitmaps.colorSpaceDefault, flipY: false,
+            premultiply: true,
+            colorSpace: retVal.colorSpaceEffect ? 'default' : 'empty' },
+        { sub: true, bitmap: bitmaps.colorSpaceDefault, flipY: false,
+            premultiply: true,
+            colorSpace: retVal.colorSpaceEffect ? 'default' : 'empty' },
+    ];
+
+
+    for (var i in cases) {
+        runOneIteration(cases[i].sub, bindingTarget, program, cases[i].bitmap,
+                        cases[i].flipY, cases[i].premultiply, retVal,
+                        cases[i].colorSpace);
+    }
+}
+
+function runTest(bitmaps, alphaVal, colorSpaceEffective)
+{
+    var retVal = {testPassed: true, alpha: alphaVal,
+                  colorSpaceEffect: colorSpaceEffective};
+    var program = tiu.setupTexturedQuad(gl, internalFormat);
+    runTestOnBindingTarget(gl.TEXTURE_2D, program, bitmaps, retVal);
+    program = tiu.setupTexturedQuadWithCubeMap(gl, internalFormat);
+    runTestOnBindingTarget(gl.TEXTURE_CUBE_MAP, program, bitmaps, retVal);
+    return retVal.testPassed;
+}
diff --git a/third_party/WebKit/LayoutTests/fast/canvas/webgl/resources/tex-image-and-sub-image-image-bitmap-utils-resize.js b/third_party/WebKit/LayoutTests/fast/canvas/webgl/resources/tex-image-and-sub-image-image-bitmap-utils-resize.js
new file mode 100644
index 0000000..c004acbb
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/fast/canvas/webgl/resources/tex-image-and-sub-image-image-bitmap-utils-resize.js
@@ -0,0 +1,172 @@
+var refBufPremul = new Uint8Array([
+    255,0,0,255,    204,0,0,204,    84,0,0,84,      18,0,0,18,
+    192,62,0,255,   149,48,0,198,   61,20,0,82,     13,4,0,18,
+    62,192,0,255,   48,149,0,198,   20,61,0,82,     4,13,0,18,
+    0,255,0,255,    0,204,0,204,    0,84,0,84,      0,18,0,18]);
+
+var refBufUnpremul = new Uint8Array([
+    255,0,0,255,    255,0,0,204,    255,0,0,84,     255,0,0,18,
+    192,62,0,255,   192,62,0,198,   190,62,0,82,    184,57,0,18,
+    62,192,0,255,   62,192,0,198,   62,190,0,82,    57,184,0,18,
+    0,255,0,255,    0,255,0,204,    0,255,0,84,     0,255,0,18]);
+
+var refBufFlipY = new Uint8Array([
+    0,255,0,255,    0,204,0,204,    0,84,0,84,      0,18,0,18,
+    62,192,0,255,   48,149,0,198,   20,61,0,82,     4,13,0,18,
+    192,62,0,255,   149,48,0,198,   61,20,0,82,     13,4,0,18,
+    255,0,0,255,    204,0,0,204,    84,0,0,84,      18,0,0,18]);
+
+var refBufUnpremulFlipY = new Uint8Array([
+    0,255,0,255,    0,255,0,204,    0,255,0,84,     0,255,0,18,
+    62,192,0,255,   62,192,0,198,   62,190,0,82,    57,184,0,18,
+    192,62,0,255,   192,62,0,198,   190,62,0,82,    184,57,0,18,
+    255,0,0,255,    255,0,0,204,    255,0,0,84,     255,0,0,18]);
+
+function checkCanvas(buf, refBuf, tolerance, retVal)
+{
+    if (buf.length != refBuf.length) {
+        retVal.testPassed = false;
+        return;
+    }
+    for (var p = 0; p < buf.length; p++) {
+        if (Math.abs(buf[p] - refBuf[p]) > tolerance) {
+            retVal.testPassed = false;
+            return;
+        }
+    }
+}
+
+function runOneIteration(useTexSubImage2D, bindingTarget, program, bitmap,
+                         flipY, premultiplyAlpha, retVal, colorSpace = 'empty')
+{
+    gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);
+    // Enable writes to the RGBA channels
+    gl.colorMask(1, 1, 1, 1);
+    var texture = gl.createTexture();
+    // Bind the texture to texture unit 0
+    gl.bindTexture(bindingTarget, texture);
+    // Set up texture parameters
+    gl.texParameteri(bindingTarget, gl.TEXTURE_MIN_FILTER, gl.NEAREST);
+    gl.texParameteri(bindingTarget, gl.TEXTURE_MAG_FILTER, gl.NEAREST);
+
+    var targets = [gl.TEXTURE_2D];
+    if (bindingTarget == gl.TEXTURE_CUBE_MAP) {
+        targets = [gl.TEXTURE_CUBE_MAP_POSITIVE_X,
+                   gl.TEXTURE_CUBE_MAP_NEGATIVE_X,
+                   gl.TEXTURE_CUBE_MAP_POSITIVE_Y,
+                   gl.TEXTURE_CUBE_MAP_NEGATIVE_Y,
+                   gl.TEXTURE_CUBE_MAP_POSITIVE_Z,
+                   gl.TEXTURE_CUBE_MAP_NEGATIVE_Z];
+    }
+    // Upload the image into the texture
+    for (var tt = 0; tt < targets.length; ++tt) {
+        if (useTexSubImage2D) {
+            // Initialize the texture to black first
+            gl.texImage2D(targets[tt], 0, gl[internalFormat], bitmap.width,
+                bitmap.height, 0, gl[pixelFormat], gl[pixelType], null);
+            gl.texSubImage2D(targets[tt], 0, 0, 0, gl[pixelFormat],
+                gl[pixelType], bitmap);
+        } else {
+            gl.texImage2D(targets[tt], 0, gl[internalFormat], gl[pixelFormat],
+                gl[pixelType], bitmap);
+        }
+    }
+
+    var width = gl.canvas.width;
+    var height = gl.canvas.height;
+
+    var loc;
+    if (bindingTarget == gl.TEXTURE_CUBE_MAP) {
+        loc = gl.getUniformLocation(program, "face");
+    }
+
+    var tolerance = (retVal.alpha == 0) ? 0 : 10;
+    for (var tt = 0; tt < targets.length; ++tt) {
+        if (bindingTarget == gl.TEXTURE_CUBE_MAP) {
+            gl.uniform1i(loc, targets[tt]);
+        }
+        // Draw the triangles
+        gl.clearColor(0, 0, 0, 1);
+        gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);
+        gl.drawArrays(gl.TRIANGLES, 0, 6);
+        // Select the proper reference buffer
+        var refBuf = refBufPremul;
+        if (flipY && !premultiplyAlpha)
+            refBuf = refBufUnpremulFlipY;
+        else if (!premultiplyAlpha)
+            refBuf = refBufUnpremul;
+        else if (flipY)
+            refBuf = refBufFlipY;
+        // Check the pixels
+        var buf = new Uint8Array(width * height * 4);
+        gl.readPixels(0, 0, width, height, gl.RGBA, gl.UNSIGNED_BYTE, buf);
+        checkCanvas(buf, refBuf, tolerance, retVal);
+    }
+}
+
+function runTestOnBindingTarget(bindingTarget, program, bitmaps, retVal) {
+    var cases = [
+        { sub: false, bitmap: bitmaps.defaultOption, flipY: false,
+            premultiply: true, colorSpace: 'empty' },
+        { sub: true, bitmap: bitmaps.defaultOption, flipY: false,
+            premultiply: true, colorSpace: 'empty' },
+        { sub: false, bitmap: bitmaps.noFlipYPremul, flipY: false,
+            premultiply: true, colorSpace: 'empty' },
+        { sub: true, bitmap: bitmaps.noFlipYPremul, flipY: false,
+            premultiply: true, colorSpace: 'empty' },
+        { sub: false, bitmap: bitmaps.noFlipYDefault, flipY: false,
+            premultiply: true, colorSpace: 'empty' },
+        { sub: true, bitmap: bitmaps.noFlipYDefault, flipY: false,
+            premultiply: true, colorSpace: 'empty' },
+        { sub: false, bitmap: bitmaps.noFlipYUnpremul, flipY: false,
+            premultiply: false, colorSpace: 'empty' },
+        { sub: true, bitmap: bitmaps.noFlipYUnpremul, flipY: false,
+            premultiply: false, colorSpace: 'empty' },
+        { sub: false, bitmap: bitmaps.flipYPremul, flipY: true,
+            premultiply: true, colorSpace: 'empty' },
+        { sub: true, bitmap: bitmaps.flipYPremul, flipY: true,
+            premultiply: true, colorSpace: 'empty' },
+        { sub: false, bitmap: bitmaps.flipYDefault, flipY: true,
+            premultiply: true, colorSpace: 'empty' },
+        { sub: true, bitmap: bitmaps.flipYDefault, flipY: true,
+            premultiply: true, colorSpace: 'empty' },
+        { sub: false, bitmap: bitmaps.flipYUnpremul, flipY: true,
+            premultiply: false, colorSpace: 'empty' },
+        { sub: true, bitmap: bitmaps.flipYUnpremul, flipY: true,
+            premultiply: false, colorSpace: 'empty' },
+        { sub: false, bitmap: bitmaps.colorSpaceDef, flipY: false,
+            premultiply: true,
+            colorSpace: retVal.colorSpaceEffect ? 'notprovided' : 'empty' },
+        { sub: true, bitmap: bitmaps.colorSpaceDef, flipY: false,
+            premultiply: true,
+            colorSpace: retVal.colorSpaceEffect ? 'notprovided' : 'empty' },
+        { sub: false, bitmap: bitmaps.colorSpaceNone, flipY: false,
+            premultiply: true,
+            colorSpace: retVal.colorSpaceEffect ? 'none' : 'empty' },
+        { sub: true, bitmap: bitmaps.colorSpaceNone, flipY: false,
+            premultiply: true,
+            colorSpace: retVal.colorSpaceEffect ? 'none' : 'empty' },
+        { sub: false, bitmap: bitmaps.colorSpaceDefault, flipY: false,
+            premultiply: true,
+            colorSpace: retVal.colorSpaceEffect ? 'default' : 'empty' },
+        { sub: true, bitmap: bitmaps.colorSpaceDefault, flipY: false,
+            premultiply: true,
+            colorSpace: retVal.colorSpaceEffect ? 'default' : 'empty' },
+    ];
+
+    for (var i in cases) {
+        runOneIteration(cases[i].sub, bindingTarget, program, cases[i].bitmap,
+            cases[i].flipY, cases[i].premultiply, retVal, cases[i].colorSpace);
+    }
+}
+
+function runTest(bitmaps, alphaVal, colorSpaceEffective)
+{
+    var retVal = {testPassed: true, alpha: alphaVal,
+        colorSpaceEffect: colorSpaceEffective};
+    var program = tiu.setupTexturedQuad(gl, internalFormat);
+    runTestOnBindingTarget(gl.TEXTURE_2D, program, bitmaps, retVal);
+    program = tiu.setupTexturedQuadWithCubeMap(gl, internalFormat);
+    runTestOnBindingTarget(gl.TEXTURE_CUBE_MAP, program, bitmaps, retVal);
+    return retVal.testPassed;
+}
diff --git a/third_party/WebKit/LayoutTests/fast/canvas/webgl/texImage-imageBitmap-from-blob-resize.html b/third_party/WebKit/LayoutTests/fast/canvas/webgl/texImage-imageBitmap-from-blob-resize.html
index 9eca2f3..18a34d6c 100644
--- a/third_party/WebKit/LayoutTests/fast/canvas/webgl/texImage-imageBitmap-from-blob-resize.html
+++ b/third_party/WebKit/LayoutTests/fast/canvas/webgl/texImage-imageBitmap-from-blob-resize.html
@@ -3,7 +3,7 @@
 <head>
 <script src="./resources/webgl-test-utils-full.js"></script>
 <script src="./resources/tex-image-and-sub-image-utils.js"></script>
-<script src="./resources/tex-image-and-sub-image-image-bitmap-utils.js"></script>
+<script src="./resources/tex-image-and-sub-image-image-bitmap-utils-resize.js"></script>
 <script src="../../../resources/testharness.js"></script>
 <script src="../../../resources/testharnessreport.js"></script>
 <body>
@@ -14,13 +14,8 @@
 var internalFormat = "RGBA";
 var pixelFormat = "RGBA";
 var pixelType = "UNSIGNED_BYTE";
-var redColor = [255, 0, 0];
-var greenColor = [0, 255, 0];
-var blackColor = [0, 0, 0];
-var darkRed = [26, 0, 0];
-var darkGreen = [0, 26, 0];
 
-var blob1 = null;
+var blob = null;
 var blob2 = null;
 
 function generateTest()
@@ -28,50 +23,76 @@
     var bitmaps = [];
 
     var canvas = document.createElement('canvas');
-    canvas.width = 32;
-    canvas.height = 32;
+    canvas.width = 4;
+    canvas.height = 4;
     document.body.appendChild(canvas);
     gl = canvas.getContext("webgl");
 
     gl.clearColor(0,0,0,1);
     gl.clearDepth(1);
 
-    var p1 = createImageBitmap(blob1, {resizeWidth: 4, resizeHeight: 4, resizeQuality: "high"}).then(function(imageBitmap) { bitmaps.defaultOption = imageBitmap });
-    var p2 = createImageBitmap(blob1, {imageOrientation: "none", premultiplyAlpha: "premultiply", resizeWidth: 4, resizeHeight: 4, resizeQuality: "high"}).then(function(imageBitmap) { bitmaps.noFlipYPremul = imageBitmap });
-    var p3 = createImageBitmap(blob1, {imageOrientation: "none", premultiplyAlpha: "default", resizeWidth: 4, resizeHeight: 4, resizeQuality: "high"}).then(function(imageBitmap) { bitmaps.noFlipYDefault = imageBitmap });
-    var p4 = createImageBitmap(blob1, {imageOrientation: "none", premultiplyAlpha: "none", resizeWidth: 4, resizeHeight: 4, resizeQuality: "high"}).then(function(imageBitmap) { bitmaps.noFlipYUnpremul = imageBitmap });
-    var p5 = createImageBitmap(blob1, {imageOrientation: "flipY", premultiplyAlpha: "premultiply", resizeWidth: 4, resizeHeight: 4, resizeQuality: "high"}).then(function(imageBitmap) { bitmaps.flipYPremul = imageBitmap });
-    var p6 = createImageBitmap(blob1, {imageOrientation: "flipY", premultiplyAlpha: "default", resizeWidth: 4, resizeHeight: 4, resizeQuality: "high"}).then(function(imageBitmap) { bitmaps.flipYDefault = imageBitmap });
-    var p7 = createImageBitmap(blob1, {imageOrientation: "flipY", premultiplyAlpha: "none", resizeWidth: 4, resizeHeight: 4, resizeQuality: "high"}).then(function(imageBitmap) { bitmaps.flipYUnpremul = imageBitmap });
-    var p8 = createImageBitmap(blob2, {resizeWidth: 4, resizeHeight: 4, resizeQuality: "high"}).then(function(imageBitmap) { bitmaps.colorSpaceDef = imageBitmap });
-    var p9 = createImageBitmap(blob2, {colorSpaceConversion: "none", resizeWidth: 4, resizeHeight: 4, resizeQuality: "high"}).then(function(imageBitmap) { bitmaps.colorSpaceNone = imageBitmap });
-    var p10 = createImageBitmap(blob2, {colorSpaceConversion: "default", resizeWidth: 4, resizeHeight: 4, resizeQuality: "high"}).then(function(imageBitmap) { bitmaps.colorSpaceDefault = imageBitmap });
-    return Promise.all([p1, p2, p3, p4, p5, p6, p7, p8, p9, p10]).then(t.step_func_done(function() {
-        var alphaVal = 0.5;
-        var testPassed = runTest(bitmaps, alphaVal, true);
-        if (!testPassed)
-            assert_true(false, 'Test failed');
-    }), t.step_func_done(function() {
+    var options = {resizeWidth: 4, resizeHeight: 4, resizeQuality: "high"};
+    var p1 = createImageBitmap(blob, options).then(
+        function(imageBitmap) { bitmaps.defaultOption = imageBitmap });
+
+    options.imageOrientation = "none";
+    options.premultiplyAlpha = "premultiply";
+    var p2 = createImageBitmap(blob, options).then(
+        function(imageBitmap) { bitmaps.noFlipYPremul = imageBitmap });
+
+    options.premultiplyAlpha = "default";
+    var p3 = createImageBitmap(blob, options).then(
+        function(imageBitmap) { bitmaps.noFlipYDefault = imageBitmap });
+
+    options.premultiplyAlpha = "none";
+    var p4 = createImageBitmap(blob, options).then(
+        function(imageBitmap) { bitmaps.noFlipYUnpremul = imageBitmap });
+
+    options.imageOrientation = "flipY";
+    options.premultiplyAlpha = "premultiply";
+    var p5 = createImageBitmap(blob, options).then(
+        function(imageBitmap) { bitmaps.flipYPremul = imageBitmap });
+
+    options.premultiplyAlpha = "default";
+    var p6 = createImageBitmap(blob, options).then(
+        function(imageBitmap) { bitmaps.flipYDefault = imageBitmap });
+
+    options.premultiplyAlpha = "none";
+    var p7 = createImageBitmap(blob, options).then(
+        function(imageBitmap) { bitmaps.flipYUnpremul = imageBitmap });
+
+    options = {resizeWidth: 4, resizeHeight: 4, resizeQuality: "high"};
+    var p8 = createImageBitmap(blob, options).then(
+        function(imageBitmap) { bitmaps.colorSpaceDef = imageBitmap });
+
+    options.colorSpaceConversion = "none";
+    var p9 = createImageBitmap(blob, options).then(
+        function(imageBitmap) { bitmaps.colorSpaceNone = imageBitmap });
+
+    options.colorSpaceConversion = "default";
+    var p10 = createImageBitmap(blob, options).then(
+        function(imageBitmap) { bitmaps.colorSpaceDefault = imageBitmap });
+
+    return Promise.all([p1, p2, p3, p4, p5, p6, p7, p8, p9, p10]).then(
+        t.step_func_done(function() {
+            var alphaVal = 0.5;
+            var testPassed = runTest(bitmaps, alphaVal, true);
+            if (!testPassed)
+                assert_true(false, 'Test failed');
+        }), t.step_func_done(function() {
         assert_true(false, 'Promise rejected');
     }));
 }
 
 var t = async_test("createImageBitmap(Blob) with resize and other options");
 
-var xhr1 = new XMLHttpRequest();
-xhr1.open("GET", 'resources/red-green-semi-transparent.png');
-xhr1.responseType = 'blob';
-xhr1.send();
-xhr1.onload = t.step_func(function() {
-    blob1 = xhr1.response;
-    var xhr2 = new XMLHttpRequest();
-    xhr2.open("GET", 'resources/square-with-colorspin-profile.png');
-    xhr2.responseType = 'blob';
-    xhr2.send();
-    xhr2.onload = t.step_func(function() {
-        blob2 = xhr2.response;
-        generateTest();
-    })
+var xhr = new XMLHttpRequest();
+xhr.open("GET", 'resources/red-green-semi-transparent-2x2.png');
+xhr.responseType = 'blob';
+xhr.send();
+xhr.onload = t.step_func(function() {
+    blob = xhr.response;
+    generateTest();
 })
 </script>
 </body>
diff --git a/third_party/WebKit/LayoutTests/fast/canvas/webgl/texImage-imageBitmap-from-canvas-resize.html b/third_party/WebKit/LayoutTests/fast/canvas/webgl/texImage-imageBitmap-from-canvas-resize.html
index e99b3d0b..01c5647 100644
--- a/third_party/WebKit/LayoutTests/fast/canvas/webgl/texImage-imageBitmap-from-canvas-resize.html
+++ b/third_party/WebKit/LayoutTests/fast/canvas/webgl/texImage-imageBitmap-from-canvas-resize.html
@@ -3,7 +3,7 @@
 <head>
 <script src="./resources/webgl-test-utils-full.js"></script>
 <script src="./resources/tex-image-and-sub-image-utils.js"></script>
-<script src="./resources/tex-image-and-sub-image-image-bitmap-utils.js"></script>
+<script src="./resources/tex-image-and-sub-image-image-bitmap-utils-resize.js"></script>
 <script src="../../../resources/testharness.js"></script>
 <script src="../../../resources/testharnessreport.js"></script>
 <body>
@@ -14,15 +14,8 @@
 var internalFormat = "RGBA";
 var pixelFormat = "RGBA";
 var pixelType = "UNSIGNED_BYTE";
-var redColor = [255, 0, 0];
-var greenColor = [0, 255, 0];
-var blackColor = [0, 0, 0];
-var darkRed = [26, 0, 0];
-var darkGreen = [0, 26, 0];
 
 function setCanvasToRedGreen(ctx) {
-    ctx.canvas.width = 16;
-    ctx.canvas.height = 16;
     var width = ctx.canvas.width;
     var halfWidth = Math.floor(width / 2);
     var height = ctx.canvas.height;
@@ -41,8 +34,8 @@
     var bitmaps = [];
 
     var canvas = document.createElement('canvas');
-    canvas.width = 32;
-    canvas.height = 32;
+    canvas.width = 4;
+    canvas.height = 4;
     document.body.appendChild(canvas);
     gl = canvas.getContext("webgl");
 
@@ -50,19 +43,53 @@
     gl.clearDepth(1);
 
     var testCanvas = document.createElement('canvas');
+    testCanvas.width = 2;
+    testCanvas.height = 2;
     var ctx = testCanvas.getContext("2d");
     setCanvasToRedGreen(ctx);
 
-    var p1 = createImageBitmap(testCanvas, {resizeWidth: 4, resizeHeight: 4, resizeQuality: "high"}).then(function(imageBitmap) { bitmaps.defaultOption = imageBitmap });
-    var p2 = createImageBitmap(testCanvas, {imageOrientation: "none", premultiplyAlpha: "premultiply", resizeWidth: 4, resizeHeight: 4, resizeQuality: "high"}).then(function(imageBitmap) { bitmaps.noFlipYPremul = imageBitmap });
-    var p3 = createImageBitmap(testCanvas, {imageOrientation: "none", premultiplyAlpha: "default", resizeWidth: 4, resizeHeight: 4, resizeQuality: "high"}).then(function(imageBitmap) { bitmaps.noFlipYDefault = imageBitmap });
-    var p4 = createImageBitmap(testCanvas, {imageOrientation: "none", premultiplyAlpha: "none", resizeWidth: 4, resizeHeight: 4, resizeQuality: "high"}).then(function(imageBitmap) { bitmaps.noFlipYUnpremul = imageBitmap });
-    var p5 = createImageBitmap(testCanvas, {imageOrientation: "flipY", premultiplyAlpha: "premultiply", resizeWidth: 4, resizeHeight: 4, resizeQuality: "high"}).then(function(imageBitmap) { bitmaps.flipYPremul = imageBitmap });
-    var p6 = createImageBitmap(testCanvas, {imageOrientation: "flipY", premultiplyAlpha: "default", resizeWidth: 4, resizeHeight: 4, resizeQuality: "high"}).then(function(imageBitmap) { bitmaps.flipYDefault = imageBitmap });
-    var p7 = createImageBitmap(testCanvas, {imageOrientation: "flipY", premultiplyAlpha: "none", resizeWidth: 4, resizeHeight: 4, resizeQuality: "high"}).then(function(imageBitmap) { bitmaps.flipYUnpremul = imageBitmap });
-    var p8 = createImageBitmap(testCanvas, {resizeWidth: 4, resizeHeight: 4, resizeQuality: "high"}).then(function(imageBitmap) { bitmaps.colorSpaceDef = imageBitmap });
-    var p9 = createImageBitmap(testCanvas, {colorSpaceConversion: "none", resizeWidth: 4, resizeHeight: 4, resizeQuality: "high"}).then(function(imageBitmap) { bitmaps.colorSpaceNone = imageBitmap });
-    var p10 = createImageBitmap(testCanvas, {colorSpaceConversion: "default", resizeWidth: 4, resizeHeight: 4, resizeQuality: "high"}).then(function(imageBitmap) { bitmaps.colorSpaceDefault = imageBitmap });
+    var options = {resizeWidth: 4, resizeHeight: 4, resizeQuality: "high"};
+    var p1 = createImageBitmap(testCanvas, options).then(
+        function(imageBitmap) { bitmaps.defaultOption = imageBitmap });
+
+    options.imageOrientation = "none";
+    options.premultiplyAlpha = "premultiply";
+    var p2 = createImageBitmap(testCanvas, options).then(
+        function(imageBitmap) { bitmaps.noFlipYPremul = imageBitmap });
+
+    options.premultiplyAlpha = "default";
+    var p3 = createImageBitmap(testCanvas, options).then(
+        function(imageBitmap) { bitmaps.noFlipYDefault = imageBitmap });
+
+    options.premultiplyAlpha = "none";
+    var p4 = createImageBitmap(testCanvas, options).then(
+        function(imageBitmap) { bitmaps.noFlipYUnpremul = imageBitmap });
+
+    options.imageOrientation = "flipY";
+    options.premultiplyAlpha = "premultiply";
+    var p5 = createImageBitmap(testCanvas, options).then(
+        function(imageBitmap) { bitmaps.flipYPremul = imageBitmap });
+
+    options.premultiplyAlpha = "default";
+    var p6 = createImageBitmap(testCanvas, options).then(
+        function(imageBitmap) { bitmaps.flipYDefault = imageBitmap });
+
+    options.premultiplyAlpha = "none";
+    var p7 = createImageBitmap(testCanvas, options).then(
+        function(imageBitmap) { bitmaps.flipYUnpremul = imageBitmap });
+
+    options = {resizeWidth: 4, resizeHeight: 4, resizeQuality: "high"};
+    var p8 = createImageBitmap(testCanvas, options).then(
+        function(imageBitmap) { bitmaps.colorSpaceDef = imageBitmap });
+
+    options.colorSpaceConversion = "none";
+    var p9 = createImageBitmap(testCanvas, options).then(
+        function(imageBitmap) { bitmaps.colorSpaceNone = imageBitmap });
+
+    options.colorSpaceConversion = "default";
+    var p10 = createImageBitmap(testCanvas, options).then(
+        function(imageBitmap) { bitmaps.colorSpaceDefault = imageBitmap });
+
     return Promise.all([p1, p2, p3, p4, p5, p6, p7, p8, p9, p10]).then(function() {
         var alphaVal = 0.5;
         var testPassed = runTest(bitmaps, alphaVal, false);
@@ -73,5 +100,3 @@
     });
 }, 'createImageBitmap(HTMLCanvasElement) with resize and other options');
 </script>
-</body>
-</html>
diff --git a/third_party/WebKit/LayoutTests/fast/canvas/webgl/texImage-imageBitmap-from-image-resize.html b/third_party/WebKit/LayoutTests/fast/canvas/webgl/texImage-imageBitmap-from-image-resize.html
index ef478ea..0ca1588 100644
--- a/third_party/WebKit/LayoutTests/fast/canvas/webgl/texImage-imageBitmap-from-image-resize.html
+++ b/third_party/WebKit/LayoutTests/fast/canvas/webgl/texImage-imageBitmap-from-image-resize.html
@@ -1,9 +1,10 @@
+
 <!DOCTYPE html>
 <html>
 <head>
 <script src="./resources/webgl-test-utils-full.js"></script>
 <script src="./resources/tex-image-and-sub-image-utils.js"></script>
-<script src="./resources/tex-image-and-sub-image-image-bitmap-utils.js"></script>
+<script src="./resources/tex-image-and-sub-image-image-bitmap-utils-resize.js"></script>
 <script src="../../../resources/testharness.js"></script>
 <script src="../../../resources/testharnessreport.js"></script>
 </head>
@@ -15,56 +16,80 @@
 var internalFormat = "RGBA";
 var pixelFormat = "RGBA";
 var pixelType = "UNSIGNED_BYTE";
-var redColor = [255, 0, 0];
-var greenColor = [0, 255, 0];
-var blackColor = [0, 0, 0];
-var darkRed = [26, 0, 0];
-var darkGreen = [0, 26, 0];
 
 function generateTest()
 {
     var bitmaps = [];
 
     var canvas = document.createElement('canvas');
-    canvas.width = 32;
-    canvas.height = 32;
+    canvas.width = 4;
+    canvas.height = 4;
     document.body.appendChild(canvas);
     gl = canvas.getContext("webgl");
 
     gl.clearColor(0,0,0,1);
     gl.clearDepth(1);
 
-    var p1 = createImageBitmap(image1, {resizeWidth: 4, resizeHeight: 4, resizeQuality: "high"}).then(function(imageBitmap) { bitmaps.defaultOption = imageBitmap });
-    var p2 = createImageBitmap(image1, {imageOrientation: "none", premultiplyAlpha: "premultiply", resizeWidth: 4, resizeHeight: 4, resizeQuality: "high"}).then(function(imageBitmap) { bitmaps.noFlipYPremul = imageBitmap });
-    var p3 = createImageBitmap(image1, {imageOrientation: "none", premultiplyAlpha: "default", resizeWidth: 4, resizeHeight: 4, resizeQuality: "high"}).then(function(imageBitmap) { bitmaps.noFlipYDefault = imageBitmap });
-    var p4 = createImageBitmap(image1, {imageOrientation: "none", premultiplyAlpha: "none", resizeWidth: 4, resizeHeight: 4, resizeQuality: "high"}).then(function(imageBitmap) { bitmaps.noFlipYUnpremul = imageBitmap });
-    var p5 = createImageBitmap(image1, {imageOrientation: "flipY", premultiplyAlpha: "premultiply", resizeWidth: 4, resizeHeight: 4, resizeQuality: "high"}).then(function(imageBitmap) { bitmaps.flipYPremul = imageBitmap });
-    var p6 = createImageBitmap(image1, {imageOrientation: "flipY", premultiplyAlpha: "default", resizeWidth: 4, resizeHeight: 4, resizeQuality: "high"}).then(function(imageBitmap) { bitmaps.flipYDefault = imageBitmap });
-    var p7 = createImageBitmap(image1, {imageOrientation: "flipY", premultiplyAlpha: "none", resizeWidth: 4, resizeHeight: 4, resizeQuality: "high"}).then(function(imageBitmap) { bitmaps.flipYUnpremul = imageBitmap });
-    var p8 = createImageBitmap(image2, {resizeWidth: 4, resizeHeight: 4, resizeQuality: "high"}).then(function(imageBitmap) { bitmaps.colorSpaceDef = imageBitmap });
-    var p9 = createImageBitmap(image2, {colorSpaceConversion: "none", resizeWidth: 4, resizeHeight: 4, resizeQuality: "high"}).then(function(imageBitmap) { bitmaps.colorSpaceNone = imageBitmap });
-    var p10 = createImageBitmap(image2, {colorSpaceConversion: "default", resizeWidth: 4, resizeHeight: 4, resizeQuality: "high"}).then(function(imageBitmap) { bitmaps.colorSpaceDefault = imageBitmap });
-    return Promise.all([p1, p2, p3, p4, p5, p6, p7, p8, p9, p10]).then(t.step_func_done(function() {
-        var alphaVal = 0.5;
-        var testPassed = runTest(bitmaps, alphaVal, true);
-        if (!testPassed)
-            assert_true(false, 'Test failed');
-    }), t.step_func_done(function() {
-        assert_true(false, 'Promise rejected');
+    var options = {resizeWidth: 4, resizeHeight: 4, resizeQuality: "high"};
+    var p1 = createImageBitmap(image, options).then(
+        function(imageBitmap) { bitmaps.defaultOption = imageBitmap });
+
+    options.imageOrientation = "none";
+    options.premultiplyAlpha = "premultiply";
+    var p2 = createImageBitmap(image, options).then(
+        function(imageBitmap) { bitmaps.noFlipYPremul = imageBitmap });
+
+    options.premultiplyAlpha = "default";
+    var p3 = createImageBitmap(image, options).then(
+        function(imageBitmap) { bitmaps.noFlipYDefault = imageBitmap });
+
+    options.premultiplyAlpha = "none";
+    var p4 = createImageBitmap(image, options).then(
+        function(imageBitmap) { bitmaps.noFlipYUnpremul = imageBitmap });
+
+    options.imageOrientation = "flipY";
+    options.premultiplyAlpha = "premultiply";
+    var p5 = createImageBitmap(image, options).then(
+        function(imageBitmap) { bitmaps.flipYPremul = imageBitmap });
+
+    options.premultiplyAlpha = "default";
+    var p6 = createImageBitmap(image, options).then(
+        function(imageBitmap) { bitmaps.flipYDefault = imageBitmap });
+
+    options.premultiplyAlpha = "none";
+    var p7 = createImageBitmap(image, options).then(
+        function(imageBitmap) { bitmaps.flipYUnpremul = imageBitmap });
+
+    options = {resizeWidth: 4, resizeHeight: 4, resizeQuality: "high"};
+    var p8 = createImageBitmap(image, options).then(
+        function(imageBitmap) { bitmaps.colorSpaceDef = imageBitmap });
+
+    options.colorSpaceConversion = "none";
+    var p9 = createImageBitmap(image, options).then(
+        function(imageBitmap) { bitmaps.colorSpaceNone = imageBitmap });
+
+    options.colorSpaceConversion = "default";
+    var p10 = createImageBitmap(image, options).then(
+        function(imageBitmap) { bitmaps.colorSpaceDefault = imageBitmap });
+
+    return Promise.all([p1, p2, p3, p4, p5, p6, p7, p8, p9, p10]).then(
+        t.step_func_done(function() {
+            var alphaVal = 0.5;
+            var testPassed = runTest(bitmaps, alphaVal, true);
+            if (!testPassed)
+                assert_true(false, 'Test failed');
+        }), t.step_func_done(function() {
+            assert_true(false, 'Promise rejected');
     }));
 }
 
 var t = async_test("createImageBitmap(HTMLImageElement) with resize and other options");
 
-var image1 = new Image();
-var image2 = new Image();
-image1.onload = t.step_func(function() {
-    image2.onload = t.step_func(function() {
-        generateTest();
-    });
-    image2.src = 'resources/square-with-colorspin-profile.png';
+var image = new Image();
+image.onload = t.step_func(function() {
+    generateTest();
 });
-image1.src = 'resources/red-green-semi-transparent.png';
+image.src = 'resources/red-green-semi-transparent-2x2.png';
 </script>
 </body>
 </html>
diff --git a/third_party/WebKit/LayoutTests/fast/canvas/webgl/texImage-imageBitmap-from-imageData-resize.html b/third_party/WebKit/LayoutTests/fast/canvas/webgl/texImage-imageBitmap-from-imageData-resize.html
new file mode 100644
index 0000000..52ddefd
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/fast/canvas/webgl/texImage-imageBitmap-from-imageData-resize.html
@@ -0,0 +1,91 @@
+<!DOCTYPE html>
+<html>
+<head>
+<script src="./resources/webgl-test-utils-full.js"></script>
+<script src="./resources/tex-image-and-sub-image-utils.js"></script>
+<script src="./resources/tex-image-and-sub-image-image-bitmap-utils-resize.js"></script>
+<script src="../../../resources/testharness.js"></script>
+<script src="../../../resources/testharnessreport.js"></script>
+</head>
+<body>
+<script>
+var wtu = WebGLTestUtils;
+var tiu = TexImageUtils;
+var gl = null;
+var internalFormat = "RGBA";
+var pixelFormat = "RGBA";
+var pixelType = "UNSIGNED_BYTE";
+
+promise_test(function() {
+    var bitmaps = [];
+
+    var canvas = document.createElement('canvas');
+    canvas.width = 4;
+    canvas.height = 4;
+    gl = canvas.getContext("webgl");
+
+    gl.clearColor(0,0,0,1);
+    gl.clearDepth(1);
+
+    var imageData = new ImageData(new Uint8ClampedArray(
+                                  [255, 0, 0, 255,
+                                   255, 0, 0, 26,
+                                   0, 255, 0, 255,
+                                   0, 255, 0, 26]),
+                                   2, 2);
+
+    var options = {resizeWidth: 4, resizeHeight: 4, resizeQuality: "high"};
+    var p1 = createImageBitmap(imageData, options).then(
+        function(imageBitmap) { bitmaps.defaultOption = imageBitmap });
+
+    options.imageOrientation = "none";
+    options.premultiplyAlpha = "premultiply";
+    var p2 = createImageBitmap(imageData, options).then(
+        function(imageBitmap) { bitmaps.noFlipYPremul = imageBitmap });
+
+    options.premultiplyAlpha = "default";
+    var p3 = createImageBitmap(imageData, options).then(
+        function(imageBitmap) { bitmaps.noFlipYDefault = imageBitmap });
+
+    options.premultiplyAlpha = "none";
+    var p4 = createImageBitmap(imageData, options).then(
+        function(imageBitmap) { bitmaps.noFlipYUnpremul = imageBitmap });
+
+    options.imageOrientation = "flipY";
+    options.premultiplyAlpha = "premultiply";
+    var p5 = createImageBitmap(imageData, options).then(
+        function(imageBitmap) { bitmaps.flipYPremul = imageBitmap });
+
+    options.premultiplyAlpha = "default";
+    var p6 = createImageBitmap(imageData, options).then(
+        function(imageBitmap) { bitmaps.flipYDefault = imageBitmap });
+
+    options.premultiplyAlpha = "none";
+    var p7 = createImageBitmap(imageData, options).then(
+        function(imageBitmap) { bitmaps.flipYUnpremul = imageBitmap });
+
+    options = {resizeWidth: 4, resizeHeight: 4, resizeQuality: "high"};
+    var p8 = createImageBitmap(imageData, options).then(
+        function(imageBitmap) { bitmaps.colorSpaceDef = imageBitmap });
+
+    options.colorSpaceConversion = "none";
+    var p9 = createImageBitmap(imageData, options).then(
+        function(imageBitmap) { bitmaps.colorSpaceNone = imageBitmap });
+
+    options.colorSpaceConversion = "default";
+    var p10 = createImageBitmap(imageData, options).then(
+        function(imageBitmap) { bitmaps.colorSpaceDefault = imageBitmap });
+
+    return Promise.all([p1, p2, p3, p4, p5, p6, p7, p8, p9, p10]).then(
+        function() {
+            var alphaVal = 0.5;
+            var testPassed = runTest(bitmaps, alphaVal, false);
+            if (!testPassed)
+                assert_true(false, 'Test failed');
+        }, function() {
+            assert_true(false, 'Promise rejected');
+    });
+}, 'createImageBitmap(ImageData) with resize and other options');
+</script>
+</body>
+</html>
diff --git a/third_party/WebKit/LayoutTests/fast/canvas/webgl/texImage-imageBitmap-from-video-resize.html b/third_party/WebKit/LayoutTests/fast/canvas/webgl/texImage-imageBitmap-from-video-resize.html
index b35d9d6b..6f56c7eb 100644
--- a/third_party/WebKit/LayoutTests/fast/canvas/webgl/texImage-imageBitmap-from-video-resize.html
+++ b/third_party/WebKit/LayoutTests/fast/canvas/webgl/texImage-imageBitmap-from-video-resize.html
@@ -3,7 +3,7 @@
 <head>
 <script src="./resources/webgl-test-utils-full.js"></script>
 <script src="./resources/tex-image-and-sub-image-utils.js"></script>
-<script src="./resources/tex-image-and-sub-image-image-bitmap-utils.js"></script>
+<script src="./resources/tex-image-and-sub-image-image-bitmap-utils-resize-video.js"></script>
 <script src="../../../resources/testharness.js"></script>
 <script src="../../../resources/testharnessreport.js"></script>
 <body>
@@ -14,36 +14,64 @@
 var internalFormat = "RGBA";
 var pixelFormat = "RGBA";
 var pixelType = "UNSIGNED_BYTE";
-var redColor = [255, 0, 0];
-var greenColor = [0, 255, 0];
-var blackColor = [0, 0, 0];
-var darkRed = [128, 0, 0];
-var darkGreen = [0, 128, 0];
 
 function testImageBitmap()
 {
     var bitmaps = {};
 
     var canvas = document.createElement('canvas');
-    canvas.width = 32;
-    canvas.height = 32;
+    canvas.width = 4;
+    canvas.height = 4;
     document.body.appendChild(canvas);
     gl = canvas.getContext("webgl");
 
     gl.clearColor(0,0,0,1);
     gl.clearDepth(1);
 
-    var p1 = createImageBitmap(video, {resizeWidth: 4, resizeHeight: 4, resizeQuality: "high"}).then(function(imageBitmap) { bitmaps.defaultOption = imageBitmap });
-    var p2 = createImageBitmap(video, {imageOrientation: "none", premultiplyAlpha: "premultiply", resizeWidth: 4, resizeHeight: 4, resizeQuality: "high"}).then(function(imageBitmap) { bitmaps.noFlipYPremul = imageBitmap });
-    var p3 = createImageBitmap(video, {imageOrientation: "none", premultiplyAlpha: "default", resizeWidth: 4, resizeHeight: 4, resizeQuality: "high"}).then(function(imageBitmap) { bitmaps.noFlipYDefault = imageBitmap });
-    var p4 = createImageBitmap(video, {imageOrientation: "none", premultiplyAlpha: "none", resizeWidth: 4, resizeHeight: 4, resizeQuality: "high"}).then(function(imageBitmap) { bitmaps.noFlipYUnpremul = imageBitmap });
-    var p5 = createImageBitmap(video, {imageOrientation: "flipY", premultiplyAlpha: "premultiply", resizeWidth: 4, resizeHeight: 4, resizeQuality: "high"}).then(function(imageBitmap) { bitmaps.flipYPremul = imageBitmap });
-    var p6 = createImageBitmap(video, {imageOrientation: "flipY", premultiplyAlpha: "default", resizeWidth: 4, resizeHeight: 4, resizeQuality: "high"}).then(function(imageBitmap) { bitmaps.flipYDefault = imageBitmap });
-    var p7 = createImageBitmap(video, {imageOrientation: "flipY", premultiplyAlpha: "none", resizeWidth: 4, resizeHeight: 4, resizeQuality: "high"}).then(function(imageBitmap) { bitmaps.flipYUnpremul = imageBitmap });
-    var p8 = createImageBitmap(video, {resizeWidth: 4, resizeHeight: 4, resizeQuality: "high"}).then(function(imageBitmap) { bitmaps.colorSpaceDef = imageBitmap });
-    var p9 = createImageBitmap(video, {colorSpaceConversion: "none", resizeWidth: 4, resizeHeight: 4, resizeQuality: "high"}).then(function(imageBitmap) { bitmaps.colorSpaceNone = imageBitmap });
-    var p10 = createImageBitmap(video, {colorSpaceConversion: "default", resizeWidth: 4, resizeHeight: 4, resizeQuality: "high"}).then(function(imageBitmap) { bitmaps.colorSpaceDefault = imageBitmap });
-    return Promise.all([p1, p2, p3, p4, p5, p6, p7, p8, p9, p10]).then(t.step_func_done(function() {
+    var options = {resizeWidth: 4, resizeHeight: 4, resizeQuality: "high"};
+    var p1 = createImageBitmap(video, options).then(
+        function(imageBitmap) { bitmaps.defaultOption = imageBitmap });
+
+    options.imageOrientation = "none";
+    options.premultiplyAlpha = "premultiply";
+    var p2 = createImageBitmap(video, options).then(
+        function(imageBitmap) { bitmaps.noFlipYPremul = imageBitmap });
+
+    options.premultiplyAlpha = "default";
+    var p3 = createImageBitmap(video, options).then(
+        function(imageBitmap) { bitmaps.noFlipYDefault = imageBitmap });
+
+    options.premultiplyAlpha = "none";
+    var p4 = createImageBitmap(video, options).then(
+        function(imageBitmap) { bitmaps.noFlipYUnpremul = imageBitmap });
+
+    options.imageOrientation = "flipY";
+    options.premultiplyAlpha = "premultiply";
+    var p5 = createImageBitmap(video, options).then(
+        function(imageBitmap) { bitmaps.flipYPremul = imageBitmap });
+
+    options.premultiplyAlpha = "default";
+    var p6 = createImageBitmap(video, options).then(
+        function(imageBitmap) { bitmaps.flipYDefault = imageBitmap });
+
+    options.premultiplyAlpha = "none";
+    var p7 = createImageBitmap(video, options).then(
+        function(imageBitmap) { bitmaps.flipYUnpremul = imageBitmap });
+
+    options = {resizeWidth: 4, resizeHeight: 4, resizeQuality: "high"};
+    var p8 = createImageBitmap(video, options).then(
+        function(imageBitmap) { bitmaps.colorSpaceDef = imageBitmap });
+
+    options.colorSpaceConversion = "none";
+    var p9 = createImageBitmap(video, options).then(
+        function(imageBitmap) { bitmaps.colorSpaceNone = imageBitmap });
+
+    options.colorSpaceConversion = "default";
+    var p10 = createImageBitmap(video, options).then(
+        function(imageBitmap) { bitmaps.colorSpaceDefault = imageBitmap });
+
+    return Promise.all([p1, p2, p3, p4, p5, p6, p7, p8, p9, p10]).then(
+    t.step_func_done(function() {
         var alphaVal = 1;
         var testPassed = runTest(bitmaps, alphaVal, false);
         if (!testPassed)
@@ -59,7 +87,7 @@
 video.oncanplaythrough = t.step_func(function() {
     testImageBitmap();
 });
-video.src = "resources/red-green.ogv";
+video.src = "resources/red-green-blue-white-2x2.ogv";
 </script>
 </body>
 </html>
diff --git a/third_party/WebKit/LayoutTests/http/tests/w3c/webperf/submission/Google/HighResolutionTime/worker-dedicated-basic.html b/third_party/WebKit/LayoutTests/http/tests/w3c/webperf/submission/Google/HighResolutionTime/worker-dedicated-basic.html
index 22cf6ea9..9c1f1692 100644
--- a/third_party/WebKit/LayoutTests/http/tests/w3c/webperf/submission/Google/HighResolutionTime/worker-dedicated-basic.html
+++ b/third_party/WebKit/LayoutTests/http/tests/w3c/webperf/submission/Google/HighResolutionTime/worker-dedicated-basic.html
@@ -26,7 +26,7 @@
     assert_true(results.length == 3);
     test_true(results[0], "self.performance is defined");
     test_true(results[1], "self.performance.now is defined");
-    test_greater_than(results[2], startTime, "Time in the worker should be after the startTime in the main document");
+    test_greater_than(results[2], 0, "Time in the worker should be positive");
     test_greater_than(window.performance.now(), results[2], "Time in the worker should be before the current time in the main document");
     done();
 }
diff --git a/third_party/WebKit/LayoutTests/platform/linux/images/cHRM_color_spin-expected.png b/third_party/WebKit/LayoutTests/images/cHRM_color_spin-expected.png
similarity index 100%
rename from third_party/WebKit/LayoutTests/platform/linux/images/cHRM_color_spin-expected.png
rename to third_party/WebKit/LayoutTests/images/cHRM_color_spin-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/images/color-jpeg-with-color-profile-expected.png b/third_party/WebKit/LayoutTests/images/color-jpeg-with-color-profile-expected.png
similarity index 100%
rename from third_party/WebKit/LayoutTests/platform/linux/images/color-jpeg-with-color-profile-expected.png
rename to third_party/WebKit/LayoutTests/images/color-jpeg-with-color-profile-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/images/color-profile-animate-expected.png b/third_party/WebKit/LayoutTests/images/color-profile-animate-expected.png
similarity index 100%
rename from third_party/WebKit/LayoutTests/platform/linux/images/color-profile-animate-expected.png
rename to third_party/WebKit/LayoutTests/images/color-profile-animate-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/images/color-profile-animate-rotate-expected.png b/third_party/WebKit/LayoutTests/images/color-profile-animate-rotate-expected.png
similarity index 100%
rename from third_party/WebKit/LayoutTests/platform/linux/images/color-profile-animate-rotate-expected.png
rename to third_party/WebKit/LayoutTests/images/color-profile-animate-rotate-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/images/color-profile-background-clip-text-expected.png b/third_party/WebKit/LayoutTests/images/color-profile-background-clip-text-expected.png
similarity index 100%
rename from third_party/WebKit/LayoutTests/platform/linux/images/color-profile-background-clip-text-expected.png
rename to third_party/WebKit/LayoutTests/images/color-profile-background-clip-text-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/images/color-profile-background-image-cover-expected.png b/third_party/WebKit/LayoutTests/images/color-profile-background-image-cover-expected.png
similarity index 100%
rename from third_party/WebKit/LayoutTests/platform/linux/images/color-profile-background-image-cover-expected.png
rename to third_party/WebKit/LayoutTests/images/color-profile-background-image-cover-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/images/color-profile-background-image-repeat-expected.png b/third_party/WebKit/LayoutTests/images/color-profile-background-image-repeat-expected.png
similarity index 100%
rename from third_party/WebKit/LayoutTests/platform/linux/images/color-profile-background-image-repeat-expected.png
rename to third_party/WebKit/LayoutTests/images/color-profile-background-image-repeat-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/images/color-profile-background-image-space-expected.png b/third_party/WebKit/LayoutTests/images/color-profile-background-image-space-expected.png
similarity index 100%
rename from third_party/WebKit/LayoutTests/platform/linux/images/color-profile-background-image-space-expected.png
rename to third_party/WebKit/LayoutTests/images/color-profile-background-image-space-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/images/color-profile-border-fade-expected.png b/third_party/WebKit/LayoutTests/images/color-profile-border-fade-expected.png
similarity index 100%
rename from third_party/WebKit/LayoutTests/platform/linux/images/color-profile-border-fade-expected.png
rename to third_party/WebKit/LayoutTests/images/color-profile-border-fade-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/images/color-profile-border-image-expected.png b/third_party/WebKit/LayoutTests/images/color-profile-border-image-expected.png
similarity index 100%
rename from third_party/WebKit/LayoutTests/platform/linux/images/color-profile-border-image-expected.png
rename to third_party/WebKit/LayoutTests/images/color-profile-border-image-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/images/color-profile-clip-expected.png b/third_party/WebKit/LayoutTests/images/color-profile-clip-expected.png
similarity index 100%
rename from third_party/WebKit/LayoutTests/platform/linux/images/color-profile-clip-expected.png
rename to third_party/WebKit/LayoutTests/images/color-profile-clip-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/images/color-profile-iframe-expected.png b/third_party/WebKit/LayoutTests/images/color-profile-iframe-expected.png
similarity index 100%
rename from third_party/WebKit/LayoutTests/platform/linux/images/color-profile-iframe-expected.png
rename to third_party/WebKit/LayoutTests/images/color-profile-iframe-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/images/color-profile-image-canvas-expected.png b/third_party/WebKit/LayoutTests/images/color-profile-image-canvas-expected.png
similarity index 100%
rename from third_party/WebKit/LayoutTests/platform/linux/images/color-profile-image-canvas-expected.png
rename to third_party/WebKit/LayoutTests/images/color-profile-image-canvas-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/images/color-profile-image-canvas-pattern-expected.png b/third_party/WebKit/LayoutTests/images/color-profile-image-canvas-pattern-expected.png
similarity index 100%
rename from third_party/WebKit/LayoutTests/platform/linux/images/color-profile-image-canvas-pattern-expected.png
rename to third_party/WebKit/LayoutTests/images/color-profile-image-canvas-pattern-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/images/color-profile-image-object-fit-expected.png b/third_party/WebKit/LayoutTests/images/color-profile-image-object-fit-expected.png
similarity index 100%
rename from third_party/WebKit/LayoutTests/platform/linux/images/color-profile-image-object-fit-expected.png
rename to third_party/WebKit/LayoutTests/images/color-profile-image-object-fit-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/images/color-profile-image-pseudo-content-expected.png b/third_party/WebKit/LayoutTests/images/color-profile-image-pseudo-content-expected.png
similarity index 100%
rename from third_party/WebKit/LayoutTests/platform/linux/images/color-profile-image-pseudo-content-expected.png
rename to third_party/WebKit/LayoutTests/images/color-profile-image-pseudo-content-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/images/color-profile-image-svg-resource-url-expected.png b/third_party/WebKit/LayoutTests/images/color-profile-image-svg-resource-url-expected.png
similarity index 100%
rename from third_party/WebKit/LayoutTests/platform/linux/images/color-profile-image-svg-resource-url-expected.png
rename to third_party/WebKit/LayoutTests/images/color-profile-image-svg-resource-url-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/images/color-profile-mask-image-svg-expected.png b/third_party/WebKit/LayoutTests/images/color-profile-mask-image-svg-expected.png
similarity index 100%
rename from third_party/WebKit/LayoutTests/platform/linux/images/color-profile-mask-image-svg-expected.png
rename to third_party/WebKit/LayoutTests/images/color-profile-mask-image-svg-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/images/color-profile-munsell-adobe-to-srgb-expected.txt b/third_party/WebKit/LayoutTests/images/color-profile-munsell-adobe-to-srgb-expected.txt
similarity index 100%
rename from third_party/WebKit/LayoutTests/platform/linux/images/color-profile-munsell-adobe-to-srgb-expected.txt
rename to third_party/WebKit/LayoutTests/images/color-profile-munsell-adobe-to-srgb-expected.txt
diff --git a/third_party/WebKit/LayoutTests/platform/linux/images/color-profile-object-expected.png b/third_party/WebKit/LayoutTests/images/color-profile-object-expected.png
similarity index 100%
rename from third_party/WebKit/LayoutTests/platform/linux/images/color-profile-object-expected.png
rename to third_party/WebKit/LayoutTests/images/color-profile-object-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/images/color-profile-svg-expected.png b/third_party/WebKit/LayoutTests/images/color-profile-svg-expected.png
similarity index 100%
rename from third_party/WebKit/LayoutTests/platform/linux/images/color-profile-svg-expected.png
rename to third_party/WebKit/LayoutTests/images/color-profile-svg-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/images/color-profile-svg-foreign-object-expected.png b/third_party/WebKit/LayoutTests/images/color-profile-svg-foreign-object-expected.png
similarity index 100%
rename from third_party/WebKit/LayoutTests/platform/linux/images/color-profile-svg-foreign-object-expected.png
rename to third_party/WebKit/LayoutTests/images/color-profile-svg-foreign-object-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/images/webp-color-profile-lossless-expected.png b/third_party/WebKit/LayoutTests/images/webp-color-profile-lossless-expected.png
similarity index 100%
rename from third_party/WebKit/LayoutTests/platform/linux/images/webp-color-profile-lossless-expected.png
rename to third_party/WebKit/LayoutTests/images/webp-color-profile-lossless-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/images/webp-color-profile-lossy-alpha-expected.png b/third_party/WebKit/LayoutTests/images/webp-color-profile-lossy-alpha-expected.png
similarity index 100%
rename from third_party/WebKit/LayoutTests/platform/linux/images/webp-color-profile-lossy-alpha-expected.png
rename to third_party/WebKit/LayoutTests/images/webp-color-profile-lossy-alpha-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/images/webp-color-profile-lossy-expected.png b/third_party/WebKit/LayoutTests/images/webp-color-profile-lossy-expected.png
similarity index 100%
rename from third_party/WebKit/LayoutTests/platform/linux/images/webp-color-profile-lossy-expected.png
rename to third_party/WebKit/LayoutTests/images/webp-color-profile-lossy-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/media/color-profile-video-poster-image-expected.png b/third_party/WebKit/LayoutTests/media/color-profile-video-poster-image-expected.png
similarity index 100%
rename from third_party/WebKit/LayoutTests/platform/mac/media/color-profile-video-poster-image-expected.png
rename to third_party/WebKit/LayoutTests/media/color-profile-video-poster-image-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/svg/paintorder-filtered-expected.png b/third_party/WebKit/LayoutTests/paint/invalidation/svg/paintorder-filtered-expected.png
similarity index 100%
rename from third_party/WebKit/LayoutTests/platform/linux/paint/invalidation/svg/paintorder-filtered-expected.png
rename to third_party/WebKit/LayoutTests/paint/invalidation/svg/paintorder-filtered-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/css3/filters/effect-brightness-clamping-expected.png b/third_party/WebKit/LayoutTests/platform/linux/css3/filters/effect-brightness-clamping-expected.png
deleted file mode 100644
index ae7ad9fa..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/css3/filters/effect-brightness-clamping-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/css3/filters/effect-brightness-expected.png b/third_party/WebKit/LayoutTests/platform/linux/css3/filters/effect-brightness-expected.png
deleted file mode 100644
index bc170793..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/css3/filters/effect-brightness-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/css3/filters/effect-combined-expected.png b/third_party/WebKit/LayoutTests/platform/linux/css3/filters/effect-combined-expected.png
deleted file mode 100644
index 7770c75..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/css3/filters/effect-combined-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/css3/filters/effect-reference-subregion-nested-expected.png b/third_party/WebKit/LayoutTests/platform/linux/css3/filters/effect-reference-subregion-nested-expected.png
deleted file mode 100644
index 1add4b0..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/css3/filters/effect-reference-subregion-nested-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/css3/filters/regions-expanding-expected.png b/third_party/WebKit/LayoutTests/platform/linux/css3/filters/regions-expanding-expected.png
deleted file mode 100644
index 83d26a9..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/css3/filters/regions-expanding-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/css/object-fit-grow-landscape-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/css/object-fit-grow-landscape-expected.png
deleted file mode 100644
index e1a9ecf..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/css/object-fit-grow-landscape-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/css/object-fit-grow-portrait-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/css/object-fit-grow-portrait-expected.png
deleted file mode 100644
index a336166..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/css/object-fit-grow-portrait-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/gradients/conic-gradient-positioning-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/gradients/conic-gradient-positioning-expected.png
deleted file mode 100644
index ddc2248..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/gradients/conic-gradient-positioning-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/fast/gradients/css3-degenerate-color-stops-expected.png b/third_party/WebKit/LayoutTests/platform/linux/fast/gradients/css3-degenerate-color-stops-expected.png
deleted file mode 100644
index 0c7a95f..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/fast/gradients/css3-degenerate-color-stops-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/images/color-profile-background-image-cross-fade-expected.png b/third_party/WebKit/LayoutTests/platform/linux/images/color-profile-background-image-cross-fade-expected.png
deleted file mode 100644
index 3e8bf73..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/images/color-profile-background-image-cross-fade-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/images/color-profile-background-image-cross-fade-png-expected.png b/third_party/WebKit/LayoutTests/platform/linux/images/color-profile-background-image-cross-fade-png-expected.png
deleted file mode 100644
index 3e8bf73..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/images/color-profile-background-image-cross-fade-png-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/images/color-profile-border-radius-expected.png b/third_party/WebKit/LayoutTests/platform/linux/images/color-profile-border-radius-expected.png
deleted file mode 100644
index 6bd21bd4..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/images/color-profile-border-radius-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/images/color-profile-drag-image-expected.png b/third_party/WebKit/LayoutTests/platform/linux/images/color-profile-drag-image-expected.png
deleted file mode 100644
index 36809b99..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/images/color-profile-drag-image-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/images/color-profile-filter-expected.png b/third_party/WebKit/LayoutTests/platform/linux/images/color-profile-filter-expected.png
deleted file mode 100644
index 1dca3d54..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/images/color-profile-filter-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/images/color-profile-group-expected.png b/third_party/WebKit/LayoutTests/platform/linux/images/color-profile-group-expected.png
deleted file mode 100644
index 54df53f..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/images/color-profile-group-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/images/color-profile-image-canvas-svg-expected.png b/third_party/WebKit/LayoutTests/platform/linux/images/color-profile-image-canvas-svg-expected.png
deleted file mode 100644
index c6175ef..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/images/color-profile-image-canvas-svg-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/images/color-profile-image-expected.png b/third_party/WebKit/LayoutTests/platform/linux/images/color-profile-image-expected.png
deleted file mode 100644
index 41f18a4..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/images/color-profile-image-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/images/cross-fade-background-size-expected.png b/third_party/WebKit/LayoutTests/platform/linux/images/cross-fade-background-size-expected.png
deleted file mode 100644
index 82f03761..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/images/cross-fade-background-size-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/images/png-suite/test-expected.png b/third_party/WebKit/LayoutTests/platform/linux/images/png-suite/test-expected.png
deleted file mode 100644
index f28c076..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/images/png-suite/test-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/media/color-profile-video-poster-image-expected.png b/third_party/WebKit/LayoutTests/platform/linux/media/color-profile-video-poster-image-expected.png
deleted file mode 100644
index 6831dcc..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/media/color-profile-video-poster-image-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/paint/filters/clip-under-filter-expected.png b/third_party/WebKit/LayoutTests/platform/linux/paint/filters/clip-under-filter-expected.png
deleted file mode 100644
index e2a35b5..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/paint/filters/clip-under-filter-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/as-background-image/svg-as-background-with-relative-size-expected.png b/third_party/WebKit/LayoutTests/platform/linux/svg/as-background-image/svg-as-background-with-relative-size-expected.png
deleted file mode 100644
index 16870d12..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/svg/as-background-image/svg-as-background-with-relative-size-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/as-image/image-preserveAspectRatio-all-expected.png b/third_party/WebKit/LayoutTests/platform/linux/svg/as-image/image-preserveAspectRatio-all-expected.png
deleted file mode 100644
index 5e28f16..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/svg/as-image/image-preserveAspectRatio-all-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/custom/group-opacity-expected.png b/third_party/WebKit/LayoutTests/platform/linux/svg/custom/group-opacity-expected.png
deleted file mode 100644
index 6fd02437..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/svg/custom/group-opacity-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/dynamic-updates/SVGFEColorMatrixElement-dom-in-attr-expected.png b/third_party/WebKit/LayoutTests/platform/linux/svg/dynamic-updates/SVGFEColorMatrixElement-dom-in-attr-expected.png
deleted file mode 100644
index 2dc5313..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/svg/dynamic-updates/SVGFEColorMatrixElement-dom-in-attr-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/dynamic-updates/SVGFEColorMatrixElement-dom-type-attr-expected.png b/third_party/WebKit/LayoutTests/platform/linux/svg/dynamic-updates/SVGFEColorMatrixElement-dom-type-attr-expected.png
deleted file mode 100644
index 2dc5313..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/svg/dynamic-updates/SVGFEColorMatrixElement-dom-type-attr-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/dynamic-updates/SVGFEColorMatrixElement-dom-values-attr-expected.png b/third_party/WebKit/LayoutTests/platform/linux/svg/dynamic-updates/SVGFEColorMatrixElement-dom-values-attr-expected.png
deleted file mode 100644
index 2dc5313..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/svg/dynamic-updates/SVGFEColorMatrixElement-dom-values-attr-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/dynamic-updates/SVGFEColorMatrixElement-svgdom-in-prop-expected.png b/third_party/WebKit/LayoutTests/platform/linux/svg/dynamic-updates/SVGFEColorMatrixElement-svgdom-in-prop-expected.png
deleted file mode 100644
index 2dc5313..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/svg/dynamic-updates/SVGFEColorMatrixElement-svgdom-in-prop-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/dynamic-updates/SVGFEColorMatrixElement-svgdom-type-prop-expected.png b/third_party/WebKit/LayoutTests/platform/linux/svg/dynamic-updates/SVGFEColorMatrixElement-svgdom-type-prop-expected.png
deleted file mode 100644
index 2dc5313..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/svg/dynamic-updates/SVGFEColorMatrixElement-svgdom-type-prop-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/dynamic-updates/SVGFEColorMatrixElement-svgdom-values-prop-expected.png b/third_party/WebKit/LayoutTests/platform/linux/svg/dynamic-updates/SVGFEColorMatrixElement-svgdom-values-prop-expected.png
deleted file mode 100644
index 2dc5313..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/svg/dynamic-updates/SVGFEColorMatrixElement-svgdom-values-prop-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/dynamic-updates/SVGFECompositeElement-dom-in2-attr-expected.png b/third_party/WebKit/LayoutTests/platform/linux/svg/dynamic-updates/SVGFECompositeElement-dom-in2-attr-expected.png
deleted file mode 100644
index fc0573d5..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/svg/dynamic-updates/SVGFECompositeElement-dom-in2-attr-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/dynamic-updates/SVGFECompositeElement-dom-k1-attr-expected.png b/third_party/WebKit/LayoutTests/platform/linux/svg/dynamic-updates/SVGFECompositeElement-dom-k1-attr-expected.png
deleted file mode 100644
index fc0573d5..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/svg/dynamic-updates/SVGFECompositeElement-dom-k1-attr-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/dynamic-updates/SVGFECompositeElement-dom-k2-attr-expected.png b/third_party/WebKit/LayoutTests/platform/linux/svg/dynamic-updates/SVGFECompositeElement-dom-k2-attr-expected.png
deleted file mode 100644
index fc0573d5..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/svg/dynamic-updates/SVGFECompositeElement-dom-k2-attr-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/dynamic-updates/SVGFECompositeElement-dom-k3-attr-expected.png b/third_party/WebKit/LayoutTests/platform/linux/svg/dynamic-updates/SVGFECompositeElement-dom-k3-attr-expected.png
deleted file mode 100644
index 68d08bc1..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/svg/dynamic-updates/SVGFECompositeElement-dom-k3-attr-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/dynamic-updates/SVGFECompositeElement-dom-k4-attr-expected.png b/third_party/WebKit/LayoutTests/platform/linux/svg/dynamic-updates/SVGFECompositeElement-dom-k4-attr-expected.png
deleted file mode 100644
index fc0573d5..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/svg/dynamic-updates/SVGFECompositeElement-dom-k4-attr-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/dynamic-updates/SVGFECompositeElement-dom-operator-attr-expected.png b/third_party/WebKit/LayoutTests/platform/linux/svg/dynamic-updates/SVGFECompositeElement-dom-operator-attr-expected.png
deleted file mode 100644
index fc0573d5..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/svg/dynamic-updates/SVGFECompositeElement-dom-operator-attr-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/dynamic-updates/SVGFECompositeElement-svgdom-in2-prop-expected.png b/third_party/WebKit/LayoutTests/platform/linux/svg/dynamic-updates/SVGFECompositeElement-svgdom-in2-prop-expected.png
deleted file mode 100644
index fc0573d5..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/svg/dynamic-updates/SVGFECompositeElement-svgdom-in2-prop-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/dynamic-updates/SVGFECompositeElement-svgdom-k1-prop-expected.png b/third_party/WebKit/LayoutTests/platform/linux/svg/dynamic-updates/SVGFECompositeElement-svgdom-k1-prop-expected.png
deleted file mode 100644
index fc0573d5..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/svg/dynamic-updates/SVGFECompositeElement-svgdom-k1-prop-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/dynamic-updates/SVGFECompositeElement-svgdom-k2-prop-expected.png b/third_party/WebKit/LayoutTests/platform/linux/svg/dynamic-updates/SVGFECompositeElement-svgdom-k2-prop-expected.png
deleted file mode 100644
index fc0573d5..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/svg/dynamic-updates/SVGFECompositeElement-svgdom-k2-prop-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/dynamic-updates/SVGFECompositeElement-svgdom-k3-prop-expected.png b/third_party/WebKit/LayoutTests/platform/linux/svg/dynamic-updates/SVGFECompositeElement-svgdom-k3-prop-expected.png
deleted file mode 100644
index 68d08bc1..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/svg/dynamic-updates/SVGFECompositeElement-svgdom-k3-prop-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/dynamic-updates/SVGFECompositeElement-svgdom-k4-prop-expected.png b/third_party/WebKit/LayoutTests/platform/linux/svg/dynamic-updates/SVGFECompositeElement-svgdom-k4-prop-expected.png
deleted file mode 100644
index fc0573d5..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/svg/dynamic-updates/SVGFECompositeElement-svgdom-k4-prop-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/dynamic-updates/SVGFECompositeElement-svgdom-operator-prop-expected.png b/third_party/WebKit/LayoutTests/platform/linux/svg/dynamic-updates/SVGFECompositeElement-svgdom-operator-prop-expected.png
deleted file mode 100644
index fc0573d5..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/svg/dynamic-updates/SVGFECompositeElement-svgdom-operator-prop-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/dynamic-updates/SVGFEConvolveMatrixElement-dom-bias-attr-expected.png b/third_party/WebKit/LayoutTests/platform/linux/svg/dynamic-updates/SVGFEConvolveMatrixElement-dom-bias-attr-expected.png
deleted file mode 100644
index 801c1f1d8..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/svg/dynamic-updates/SVGFEConvolveMatrixElement-dom-bias-attr-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/dynamic-updates/SVGFEConvolveMatrixElement-dom-divisor-attr-expected.png b/third_party/WebKit/LayoutTests/platform/linux/svg/dynamic-updates/SVGFEConvolveMatrixElement-dom-divisor-attr-expected.png
deleted file mode 100644
index 801c1f1d8..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/svg/dynamic-updates/SVGFEConvolveMatrixElement-dom-divisor-attr-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/dynamic-updates/SVGFEConvolveMatrixElement-dom-edgeMode-attr-expected.png b/third_party/WebKit/LayoutTests/platform/linux/svg/dynamic-updates/SVGFEConvolveMatrixElement-dom-edgeMode-attr-expected.png
deleted file mode 100644
index 18837c9..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/svg/dynamic-updates/SVGFEConvolveMatrixElement-dom-edgeMode-attr-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/dynamic-updates/SVGFEConvolveMatrixElement-dom-in-attr-expected.png b/third_party/WebKit/LayoutTests/platform/linux/svg/dynamic-updates/SVGFEConvolveMatrixElement-dom-in-attr-expected.png
deleted file mode 100644
index 801c1f1d8..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/svg/dynamic-updates/SVGFEConvolveMatrixElement-dom-in-attr-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/dynamic-updates/SVGFEConvolveMatrixElement-dom-kernelMatrix-attr-expected.png b/third_party/WebKit/LayoutTests/platform/linux/svg/dynamic-updates/SVGFEConvolveMatrixElement-dom-kernelMatrix-attr-expected.png
deleted file mode 100644
index 801c1f1d8..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/svg/dynamic-updates/SVGFEConvolveMatrixElement-dom-kernelMatrix-attr-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/dynamic-updates/SVGFEConvolveMatrixElement-dom-order-attr-expected.png b/third_party/WebKit/LayoutTests/platform/linux/svg/dynamic-updates/SVGFEConvolveMatrixElement-dom-order-attr-expected.png
deleted file mode 100644
index 801c1f1d8..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/svg/dynamic-updates/SVGFEConvolveMatrixElement-dom-order-attr-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/dynamic-updates/SVGFEConvolveMatrixElement-dom-targetX-attr-expected.png b/third_party/WebKit/LayoutTests/platform/linux/svg/dynamic-updates/SVGFEConvolveMatrixElement-dom-targetX-attr-expected.png
deleted file mode 100644
index 18837c9..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/svg/dynamic-updates/SVGFEConvolveMatrixElement-dom-targetX-attr-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/dynamic-updates/SVGFEConvolveMatrixElement-dom-targetY-attr-expected.png b/third_party/WebKit/LayoutTests/platform/linux/svg/dynamic-updates/SVGFEConvolveMatrixElement-dom-targetY-attr-expected.png
deleted file mode 100644
index 5f1ea11..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/svg/dynamic-updates/SVGFEConvolveMatrixElement-dom-targetY-attr-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/dynamic-updates/SVGFEConvolveMatrixElement-svgdom-bias-prop-expected.png b/third_party/WebKit/LayoutTests/platform/linux/svg/dynamic-updates/SVGFEConvolveMatrixElement-svgdom-bias-prop-expected.png
deleted file mode 100644
index 801c1f1d8..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/svg/dynamic-updates/SVGFEConvolveMatrixElement-svgdom-bias-prop-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/dynamic-updates/SVGFEConvolveMatrixElement-svgdom-divisor-prop-expected.png b/third_party/WebKit/LayoutTests/platform/linux/svg/dynamic-updates/SVGFEConvolveMatrixElement-svgdom-divisor-prop-expected.png
deleted file mode 100644
index 801c1f1d8..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/svg/dynamic-updates/SVGFEConvolveMatrixElement-svgdom-divisor-prop-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/dynamic-updates/SVGFEConvolveMatrixElement-svgdom-edgeMode-prop-expected.png b/third_party/WebKit/LayoutTests/platform/linux/svg/dynamic-updates/SVGFEConvolveMatrixElement-svgdom-edgeMode-prop-expected.png
deleted file mode 100644
index 801c1f1d8..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/svg/dynamic-updates/SVGFEConvolveMatrixElement-svgdom-edgeMode-prop-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/dynamic-updates/SVGFEConvolveMatrixElement-svgdom-in-prop-expected.png b/third_party/WebKit/LayoutTests/platform/linux/svg/dynamic-updates/SVGFEConvolveMatrixElement-svgdom-in-prop-expected.png
deleted file mode 100644
index 801c1f1d8..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/svg/dynamic-updates/SVGFEConvolveMatrixElement-svgdom-in-prop-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/dynamic-updates/SVGFEConvolveMatrixElement-svgdom-kernelMatrix-prop-expected.png b/third_party/WebKit/LayoutTests/platform/linux/svg/dynamic-updates/SVGFEConvolveMatrixElement-svgdom-kernelMatrix-prop-expected.png
deleted file mode 100644
index 6a5711a6..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/svg/dynamic-updates/SVGFEConvolveMatrixElement-svgdom-kernelMatrix-prop-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/dynamic-updates/SVGFEConvolveMatrixElement-svgdom-order-prop-expected.png b/third_party/WebKit/LayoutTests/platform/linux/svg/dynamic-updates/SVGFEConvolveMatrixElement-svgdom-order-prop-expected.png
deleted file mode 100644
index 801c1f1d8..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/svg/dynamic-updates/SVGFEConvolveMatrixElement-svgdom-order-prop-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/dynamic-updates/SVGFEConvolveMatrixElement-svgdom-targetX-prop-expected.png b/third_party/WebKit/LayoutTests/platform/linux/svg/dynamic-updates/SVGFEConvolveMatrixElement-svgdom-targetX-prop-expected.png
deleted file mode 100644
index 18837c9..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/svg/dynamic-updates/SVGFEConvolveMatrixElement-svgdom-targetX-prop-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/dynamic-updates/SVGFEConvolveMatrixElement-svgdom-targetY-prop-expected.png b/third_party/WebKit/LayoutTests/platform/linux/svg/dynamic-updates/SVGFEConvolveMatrixElement-svgdom-targetY-prop-expected.png
deleted file mode 100644
index 5f1ea11..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/svg/dynamic-updates/SVGFEConvolveMatrixElement-svgdom-targetY-prop-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/dynamic-updates/SVGFEDropShadowElement-dom-dx-attr-expected.png b/third_party/WebKit/LayoutTests/platform/linux/svg/dynamic-updates/SVGFEDropShadowElement-dom-dx-attr-expected.png
deleted file mode 100644
index 58ce457..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/svg/dynamic-updates/SVGFEDropShadowElement-dom-dx-attr-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/dynamic-updates/SVGFEDropShadowElement-dom-dy-attr-expected.png b/third_party/WebKit/LayoutTests/platform/linux/svg/dynamic-updates/SVGFEDropShadowElement-dom-dy-attr-expected.png
deleted file mode 100644
index 58ce457..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/svg/dynamic-updates/SVGFEDropShadowElement-dom-dy-attr-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/dynamic-updates/SVGFEDropShadowElement-dom-in-attr-expected.png b/third_party/WebKit/LayoutTests/platform/linux/svg/dynamic-updates/SVGFEDropShadowElement-dom-in-attr-expected.png
deleted file mode 100644
index 58ce457..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/svg/dynamic-updates/SVGFEDropShadowElement-dom-in-attr-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/dynamic-updates/SVGFEDropShadowElement-svgdom-dx-prop-expected.png b/third_party/WebKit/LayoutTests/platform/linux/svg/dynamic-updates/SVGFEDropShadowElement-svgdom-dx-prop-expected.png
deleted file mode 100644
index 58ce457..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/svg/dynamic-updates/SVGFEDropShadowElement-svgdom-dx-prop-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/dynamic-updates/SVGFEDropShadowElement-svgdom-dy-prop-expected.png b/third_party/WebKit/LayoutTests/platform/linux/svg/dynamic-updates/SVGFEDropShadowElement-svgdom-dy-prop-expected.png
deleted file mode 100644
index 58ce457..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/svg/dynamic-updates/SVGFEDropShadowElement-svgdom-dy-prop-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/dynamic-updates/SVGFEDropShadowElement-svgdom-in-prop-expected.png b/third_party/WebKit/LayoutTests/platform/linux/svg/dynamic-updates/SVGFEDropShadowElement-svgdom-in-prop-expected.png
deleted file mode 100644
index 58ce457..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/svg/dynamic-updates/SVGFEDropShadowElement-svgdom-in-prop-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/dynamic-updates/SVGFEGaussianBlurElement-dom-in-attr-expected.png b/third_party/WebKit/LayoutTests/platform/linux/svg/dynamic-updates/SVGFEGaussianBlurElement-dom-in-attr-expected.png
deleted file mode 100644
index 0a42fb0..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/svg/dynamic-updates/SVGFEGaussianBlurElement-dom-in-attr-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/dynamic-updates/SVGFEGaussianBlurElement-dom-stdDeviation-attr-expected.png b/third_party/WebKit/LayoutTests/platform/linux/svg/dynamic-updates/SVGFEGaussianBlurElement-dom-stdDeviation-attr-expected.png
deleted file mode 100644
index 0a42fb0..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/svg/dynamic-updates/SVGFEGaussianBlurElement-dom-stdDeviation-attr-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/dynamic-updates/SVGFEGaussianBlurElement-dom-stdDeviation-call-expected.png b/third_party/WebKit/LayoutTests/platform/linux/svg/dynamic-updates/SVGFEGaussianBlurElement-dom-stdDeviation-call-expected.png
deleted file mode 100644
index 0a42fb0..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/svg/dynamic-updates/SVGFEGaussianBlurElement-dom-stdDeviation-call-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/dynamic-updates/SVGFEGaussianBlurElement-svgdom-in-prop-expected.png b/third_party/WebKit/LayoutTests/platform/linux/svg/dynamic-updates/SVGFEGaussianBlurElement-svgdom-in-prop-expected.png
deleted file mode 100644
index 0a42fb0..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/svg/dynamic-updates/SVGFEGaussianBlurElement-svgdom-in-prop-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/dynamic-updates/SVGFETurbulenceElement-dom-baseFrequency-attr-expected.png b/third_party/WebKit/LayoutTests/platform/linux/svg/dynamic-updates/SVGFETurbulenceElement-dom-baseFrequency-attr-expected.png
deleted file mode 100644
index 2e60925..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/svg/dynamic-updates/SVGFETurbulenceElement-dom-baseFrequency-attr-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/dynamic-updates/SVGFETurbulenceElement-dom-numOctaves-attr-expected.png b/third_party/WebKit/LayoutTests/platform/linux/svg/dynamic-updates/SVGFETurbulenceElement-dom-numOctaves-attr-expected.png
deleted file mode 100644
index 2e60925..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/svg/dynamic-updates/SVGFETurbulenceElement-dom-numOctaves-attr-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/dynamic-updates/SVGFETurbulenceElement-dom-seed-attr-expected.png b/third_party/WebKit/LayoutTests/platform/linux/svg/dynamic-updates/SVGFETurbulenceElement-dom-seed-attr-expected.png
deleted file mode 100644
index 2e60925..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/svg/dynamic-updates/SVGFETurbulenceElement-dom-seed-attr-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/dynamic-updates/SVGFETurbulenceElement-dom-stitchTiles-attr-expected.png b/third_party/WebKit/LayoutTests/platform/linux/svg/dynamic-updates/SVGFETurbulenceElement-dom-stitchTiles-attr-expected.png
deleted file mode 100644
index f93fa40..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/svg/dynamic-updates/SVGFETurbulenceElement-dom-stitchTiles-attr-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/dynamic-updates/SVGFETurbulenceElement-dom-type-attr-expected.png b/third_party/WebKit/LayoutTests/platform/linux/svg/dynamic-updates/SVGFETurbulenceElement-dom-type-attr-expected.png
deleted file mode 100644
index 2e60925..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/svg/dynamic-updates/SVGFETurbulenceElement-dom-type-attr-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/dynamic-updates/SVGFETurbulenceElement-svgdom-baseFrequency-prop-expected.png b/third_party/WebKit/LayoutTests/platform/linux/svg/dynamic-updates/SVGFETurbulenceElement-svgdom-baseFrequency-prop-expected.png
deleted file mode 100644
index 2e60925..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/svg/dynamic-updates/SVGFETurbulenceElement-svgdom-baseFrequency-prop-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/dynamic-updates/SVGFETurbulenceElement-svgdom-numOctaves-prop-expected.png b/third_party/WebKit/LayoutTests/platform/linux/svg/dynamic-updates/SVGFETurbulenceElement-svgdom-numOctaves-prop-expected.png
deleted file mode 100644
index 2e60925..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/svg/dynamic-updates/SVGFETurbulenceElement-svgdom-numOctaves-prop-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/dynamic-updates/SVGFETurbulenceElement-svgdom-seed-prop-expected.png b/third_party/WebKit/LayoutTests/platform/linux/svg/dynamic-updates/SVGFETurbulenceElement-svgdom-seed-prop-expected.png
deleted file mode 100644
index 85fb788..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/svg/dynamic-updates/SVGFETurbulenceElement-svgdom-seed-prop-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/dynamic-updates/SVGFETurbulenceElement-svgdom-stitchTiles-prop-expected.png b/third_party/WebKit/LayoutTests/platform/linux/svg/dynamic-updates/SVGFETurbulenceElement-svgdom-stitchTiles-prop-expected.png
deleted file mode 100644
index 2e60925..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/svg/dynamic-updates/SVGFETurbulenceElement-svgdom-stitchTiles-prop-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/dynamic-updates/SVGFETurbulenceElement-svgdom-type-prop-expected.png b/third_party/WebKit/LayoutTests/platform/linux/svg/dynamic-updates/SVGFETurbulenceElement-svgdom-type-prop-expected.png
deleted file mode 100644
index 2e60925..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/svg/dynamic-updates/SVGFETurbulenceElement-svgdom-type-prop-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/filters/color-interpolation-filters-expected.png b/third_party/WebKit/LayoutTests/platform/linux/svg/filters/color-interpolation-filters-expected.png
deleted file mode 100644
index 331d057..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/svg/filters/color-interpolation-filters-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/filters/feColorMatrix-offset-expected.png b/third_party/WebKit/LayoutTests/platform/linux/svg/filters/feColorMatrix-offset-expected.png
deleted file mode 100644
index ea21e78..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/svg/filters/feColorMatrix-offset-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/filters/feDropShadow-expected.png b/third_party/WebKit/LayoutTests/platform/linux/svg/filters/feDropShadow-expected.png
deleted file mode 100644
index ba0a4b6..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/svg/filters/feDropShadow-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/filters/feGaussianBlur-expected.png b/third_party/WebKit/LayoutTests/platform/linux/svg/filters/feGaussianBlur-expected.png
deleted file mode 100644
index e3bf080..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/svg/filters/feGaussianBlur-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/filters/feImage-preserveAspectRatio-all-expected.png b/third_party/WebKit/LayoutTests/platform/linux/svg/filters/feImage-preserveAspectRatio-all-expected.png
deleted file mode 100644
index 4a3d90e..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/svg/filters/feImage-preserveAspectRatio-all-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/filters/feImage-preserveAspectratio-expected.png b/third_party/WebKit/LayoutTests/platform/linux/svg/filters/feImage-preserveAspectratio-expected.png
deleted file mode 100644
index 6096a97..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/svg/filters/feImage-preserveAspectratio-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/filters/feTurbulence-scale-expected.png b/third_party/WebKit/LayoutTests/platform/linux/svg/filters/feTurbulence-scale-expected.png
deleted file mode 100644
index 98ad363..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/svg/filters/feTurbulence-scale-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/filters/feTurbulence-tiled-expected.png b/third_party/WebKit/LayoutTests/platform/linux/svg/filters/feTurbulence-tiled-expected.png
deleted file mode 100644
index b233f51f..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/svg/filters/feTurbulence-tiled-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/filters/filter-source-position-expected.png b/third_party/WebKit/LayoutTests/platform/linux/svg/filters/filter-source-position-expected.png
deleted file mode 100644
index 6586a47..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/svg/filters/filter-source-position-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/filters/filteredImage-expected.png b/third_party/WebKit/LayoutTests/platform/linux/svg/filters/filteredImage-expected.png
deleted file mode 100644
index 00d2f04..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/svg/filters/filteredImage-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/color-profile-drag-image-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/color-profile-drag-image-expected.png
deleted file mode 100644
index 36809b99..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/exotic-color-space/images/color-profile-drag-image-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/color-profile-drag-image-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/color-profile-drag-image-expected.png
deleted file mode 100644
index 36809b99..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/color-profile-drag-image-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/color-profile-munsell-adobe-to-srgb-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/color-profile-munsell-adobe-to-srgb-expected.txt
deleted file mode 100644
index 44eb3b02..0000000
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/gpu-rasterization/images/color-profile-munsell-adobe-to-srgb-expected.txt
+++ /dev/null
@@ -1,42 +0,0 @@
-
-Color         Actual        Expected      dE
---------------------------------------------
-Dark Skin     114,80,64     115,80,64     1
-Light Skin    195,150,130   195,151,130   1
-Blue Sky      94,123,156    94,123,156    0
-Foliage       88,108,65     88,108,65     0
-Blue Flower   130,129,177   130,129,177   0
-Bluish Green  100,190,171   100,190,171   0
---------------------------------------------
-Orange        217,121,37    217,122,37    1
-Purplish Blue 72,90,166     72,91,165     1
-Moderate Red  194,84,97     194,84,98     1
-Purple        90,60,106     91,59,107     2
-Yellow Green  160,188,60    160,188,60    0
-Orange Yellow 231,163,42    230,163,42    1
---------------------------------------------
-Blue          47,60,153     46,60,153     1
-Green         70,149,69     71,150,69     1
-Red           177,45,56     177,44,56     1
-Yellow        239,200,27    238,200,27    1
-Magenta       187,82,147    187,82,148    1
-Cyan (*)      0,135,166     0,135,166     0
---------------------------------------------
-White         243,242,236   243,242,237   1
-Neutral 8     202,202,200   201,201,201   2
-Neutral 6.5   160,161,160   161,161,161   1
-Neutral 5     123,121,120   122,122,121   2
-Neutral 3.5   83,83,83      83,83,83      0
-Black         50,50,50      50,49,50      1
---------------------------------------------
-
-Result: total RMS color error: 1.04
- * Munsell Cyan is outside 255 sRGB gamut
-
-  
-
-
-
-
-
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/css3/blending/background-blend-mode-crossfade-image-gradient-expected.png b/third_party/WebKit/LayoutTests/platform/mac/css3/blending/background-blend-mode-crossfade-image-gradient-expected.png
deleted file mode 100644
index c311df0..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/css3/blending/background-blend-mode-crossfade-image-gradient-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/css3/blending/background-blend-mode-image-image-expected.png b/third_party/WebKit/LayoutTests/platform/mac/css3/blending/background-blend-mode-image-image-expected.png
deleted file mode 100644
index 44f46896..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/css3/blending/background-blend-mode-image-image-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/css3/blending/background-blend-mode-image-svg-expected.png b/third_party/WebKit/LayoutTests/platform/mac/css3/blending/background-blend-mode-image-svg-expected.png
deleted file mode 100644
index e12a82d..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/css3/blending/background-blend-mode-image-svg-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/css3/blending/background-blend-mode-multiple-background-layers-expected.png b/third_party/WebKit/LayoutTests/platform/mac/css3/blending/background-blend-mode-multiple-background-layers-expected.png
deleted file mode 100644
index 0e12068..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/css3/blending/background-blend-mode-multiple-background-layers-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/css3/blending/background-blend-mode-tiled-gradient-expected.png b/third_party/WebKit/LayoutTests/platform/mac/css3/blending/background-blend-mode-tiled-gradient-expected.png
deleted file mode 100644
index 9544359..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/css3/blending/background-blend-mode-tiled-gradient-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/css3/blending/mix-blend-mode-isolated-group-1-expected.png b/third_party/WebKit/LayoutTests/platform/mac/css3/blending/mix-blend-mode-isolated-group-1-expected.png
deleted file mode 100644
index 11079957..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/css3/blending/mix-blend-mode-isolated-group-1-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/css3/blending/mix-blend-mode-isolated-group-2-expected.png b/third_party/WebKit/LayoutTests/platform/mac/css3/blending/mix-blend-mode-isolated-group-2-expected.png
deleted file mode 100644
index 158b093..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/css3/blending/mix-blend-mode-isolated-group-2-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/css3/blending/mix-blend-mode-isolated-group-3-expected.png b/third_party/WebKit/LayoutTests/platform/mac/css3/blending/mix-blend-mode-isolated-group-3-expected.png
deleted file mode 100644
index be5be67..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/css3/blending/mix-blend-mode-isolated-group-3-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/css3/filters/regions-expanding-expected.png b/third_party/WebKit/LayoutTests/platform/mac/css3/filters/regions-expanding-expected.png
deleted file mode 100644
index 83d26a9..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/css3/filters/regions-expanding-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/images/cHRM_color_spin-expected.png b/third_party/WebKit/LayoutTests/platform/mac/images/cHRM_color_spin-expected.png
deleted file mode 100644
index a05298a..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/images/cHRM_color_spin-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/images/color-jpeg-with-color-profile-expected.png b/third_party/WebKit/LayoutTests/platform/mac/images/color-jpeg-with-color-profile-expected.png
deleted file mode 100644
index 977c381c..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/images/color-jpeg-with-color-profile-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/images/color-profile-animate-expected.png b/third_party/WebKit/LayoutTests/platform/mac/images/color-profile-animate-expected.png
deleted file mode 100644
index c34bf0f7..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/images/color-profile-animate-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/images/color-profile-animate-rotate-expected.png b/third_party/WebKit/LayoutTests/platform/mac/images/color-profile-animate-rotate-expected.png
deleted file mode 100644
index cc3f2d5..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/images/color-profile-animate-rotate-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/images/color-profile-background-clip-text-expected.png b/third_party/WebKit/LayoutTests/platform/mac/images/color-profile-background-clip-text-expected.png
deleted file mode 100644
index 0854a6f..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/images/color-profile-background-clip-text-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/images/color-profile-background-image-cover-expected.png b/third_party/WebKit/LayoutTests/platform/mac/images/color-profile-background-image-cover-expected.png
deleted file mode 100644
index 04ef9c1..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/images/color-profile-background-image-cover-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/images/color-profile-background-image-repeat-expected.png b/third_party/WebKit/LayoutTests/platform/mac/images/color-profile-background-image-repeat-expected.png
deleted file mode 100644
index 7d888d9..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/images/color-profile-background-image-repeat-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/images/color-profile-background-image-space-expected.png b/third_party/WebKit/LayoutTests/platform/mac/images/color-profile-background-image-space-expected.png
deleted file mode 100644
index c1ba2de..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/images/color-profile-background-image-space-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/images/color-profile-border-fade-expected.png b/third_party/WebKit/LayoutTests/platform/mac/images/color-profile-border-fade-expected.png
deleted file mode 100644
index 5ae5650..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/images/color-profile-border-fade-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/images/color-profile-border-image-expected.png b/third_party/WebKit/LayoutTests/platform/mac/images/color-profile-border-image-expected.png
deleted file mode 100644
index e9925129..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/images/color-profile-border-image-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/images/color-profile-clip-expected.png b/third_party/WebKit/LayoutTests/platform/mac/images/color-profile-clip-expected.png
deleted file mode 100644
index 91aac89..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/images/color-profile-clip-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/images/color-profile-iframe-expected.png b/third_party/WebKit/LayoutTests/platform/mac/images/color-profile-iframe-expected.png
deleted file mode 100644
index 3c24c8e..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/images/color-profile-iframe-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/images/color-profile-image-canvas-expected.png b/third_party/WebKit/LayoutTests/platform/mac/images/color-profile-image-canvas-expected.png
deleted file mode 100644
index 218f124d..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/images/color-profile-image-canvas-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/images/color-profile-image-canvas-pattern-expected.png b/third_party/WebKit/LayoutTests/platform/mac/images/color-profile-image-canvas-pattern-expected.png
deleted file mode 100644
index 6f07c20..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/images/color-profile-image-canvas-pattern-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/images/color-profile-image-object-fit-expected.png b/third_party/WebKit/LayoutTests/platform/mac/images/color-profile-image-object-fit-expected.png
deleted file mode 100644
index ec2a82d..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/images/color-profile-image-object-fit-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/images/color-profile-image-pseudo-content-expected.png b/third_party/WebKit/LayoutTests/platform/mac/images/color-profile-image-pseudo-content-expected.png
deleted file mode 100644
index 385f12f..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/images/color-profile-image-pseudo-content-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/images/color-profile-image-svg-resource-url-expected.png b/third_party/WebKit/LayoutTests/platform/mac/images/color-profile-image-svg-resource-url-expected.png
deleted file mode 100644
index a7328d1d..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/images/color-profile-image-svg-resource-url-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/images/color-profile-mask-image-svg-expected.png b/third_party/WebKit/LayoutTests/platform/mac/images/color-profile-mask-image-svg-expected.png
deleted file mode 100644
index 5757dc6a..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/images/color-profile-mask-image-svg-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/images/color-profile-munsell-adobe-to-srgb-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/images/color-profile-munsell-adobe-to-srgb-expected.txt
deleted file mode 100644
index 44eb3b02..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/images/color-profile-munsell-adobe-to-srgb-expected.txt
+++ /dev/null
@@ -1,42 +0,0 @@
-
-Color         Actual        Expected      dE
---------------------------------------------
-Dark Skin     114,80,64     115,80,64     1
-Light Skin    195,150,130   195,151,130   1
-Blue Sky      94,123,156    94,123,156    0
-Foliage       88,108,65     88,108,65     0
-Blue Flower   130,129,177   130,129,177   0
-Bluish Green  100,190,171   100,190,171   0
---------------------------------------------
-Orange        217,121,37    217,122,37    1
-Purplish Blue 72,90,166     72,91,165     1
-Moderate Red  194,84,97     194,84,98     1
-Purple        90,60,106     91,59,107     2
-Yellow Green  160,188,60    160,188,60    0
-Orange Yellow 231,163,42    230,163,42    1
---------------------------------------------
-Blue          47,60,153     46,60,153     1
-Green         70,149,69     71,150,69     1
-Red           177,45,56     177,44,56     1
-Yellow        239,200,27    238,200,27    1
-Magenta       187,82,147    187,82,148    1
-Cyan (*)      0,135,166     0,135,166     0
---------------------------------------------
-White         243,242,236   243,242,237   1
-Neutral 8     202,202,200   201,201,201   2
-Neutral 6.5   160,161,160   161,161,161   1
-Neutral 5     123,121,120   122,122,121   2
-Neutral 3.5   83,83,83      83,83,83      0
-Black         50,50,50      50,49,50      1
---------------------------------------------
-
-Result: total RMS color error: 1.04
- * Munsell Cyan is outside 255 sRGB gamut
-
-  
-
-
-
-
-
-
diff --git a/third_party/WebKit/LayoutTests/platform/mac/images/color-profile-object-expected.png b/third_party/WebKit/LayoutTests/platform/mac/images/color-profile-object-expected.png
deleted file mode 100644
index 01bf3fd..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/images/color-profile-object-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/images/color-profile-svg-expected.png b/third_party/WebKit/LayoutTests/platform/mac/images/color-profile-svg-expected.png
deleted file mode 100644
index 2dabcc9..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/images/color-profile-svg-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/images/color-profile-svg-foreign-object-expected.png b/third_party/WebKit/LayoutTests/platform/mac/images/color-profile-svg-foreign-object-expected.png
deleted file mode 100644
index b9d0f32..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/images/color-profile-svg-foreign-object-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/images/webp-color-profile-lossless-expected.png b/third_party/WebKit/LayoutTests/platform/mac/images/webp-color-profile-lossless-expected.png
deleted file mode 100644
index b2eac244..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/images/webp-color-profile-lossless-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/images/webp-color-profile-lossy-alpha-expected.png b/third_party/WebKit/LayoutTests/platform/mac/images/webp-color-profile-lossy-alpha-expected.png
deleted file mode 100644
index 647765f..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/images/webp-color-profile-lossy-alpha-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/images/webp-color-profile-lossy-expected.png b/third_party/WebKit/LayoutTests/platform/mac/images/webp-color-profile-lossy-expected.png
deleted file mode 100644
index 340a356..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/images/webp-color-profile-lossy-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/paintorder-filtered-expected.png b/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/paintorder-filtered-expected.png
deleted file mode 100644
index 711e7f7..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/paint/invalidation/svg/paintorder-filtered-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/svg/filters/feColorMatrix-offset-expected.png b/third_party/WebKit/LayoutTests/platform/mac/svg/filters/feColorMatrix-offset-expected.png
deleted file mode 100644
index ea21e78..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/svg/filters/feColorMatrix-offset-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/gpu-rasterization/images/color-profile-munsell-adobe-to-srgb-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/gpu-rasterization/images/color-profile-munsell-adobe-to-srgb-expected.txt
deleted file mode 100644
index 44eb3b02..0000000
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/gpu-rasterization/images/color-profile-munsell-adobe-to-srgb-expected.txt
+++ /dev/null
@@ -1,42 +0,0 @@
-
-Color         Actual        Expected      dE
---------------------------------------------
-Dark Skin     114,80,64     115,80,64     1
-Light Skin    195,150,130   195,151,130   1
-Blue Sky      94,123,156    94,123,156    0
-Foliage       88,108,65     88,108,65     0
-Blue Flower   130,129,177   130,129,177   0
-Bluish Green  100,190,171   100,190,171   0
---------------------------------------------
-Orange        217,121,37    217,122,37    1
-Purplish Blue 72,90,166     72,91,165     1
-Moderate Red  194,84,97     194,84,98     1
-Purple        90,60,106     91,59,107     2
-Yellow Green  160,188,60    160,188,60    0
-Orange Yellow 231,163,42    230,163,42    1
---------------------------------------------
-Blue          47,60,153     46,60,153     1
-Green         70,149,69     71,150,69     1
-Red           177,45,56     177,44,56     1
-Yellow        239,200,27    238,200,27    1
-Magenta       187,82,147    187,82,148    1
-Cyan (*)      0,135,166     0,135,166     0
---------------------------------------------
-White         243,242,236   243,242,237   1
-Neutral 8     202,202,200   201,201,201   2
-Neutral 6.5   160,161,160   161,161,161   1
-Neutral 5     123,121,120   122,122,121   2
-Neutral 3.5   83,83,83      83,83,83      0
-Black         50,50,50      50,49,50      1
---------------------------------------------
-
-Result: total RMS color error: 1.04
- * Munsell Cyan is outside 255 sRGB gamut
-
-  
-
-
-
-
-
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/compositing/color-matching/image-color-matching-expected.png b/third_party/WebKit/LayoutTests/platform/win/compositing/color-matching/image-color-matching-expected.png
index 27d6eae..d7e99cae 100644
--- a/third_party/WebKit/LayoutTests/platform/win/compositing/color-matching/image-color-matching-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/compositing/color-matching/image-color-matching-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/css3/blending/background-blend-mode-crossfade-image-gradient-expected.png b/third_party/WebKit/LayoutTests/platform/win/css3/blending/background-blend-mode-crossfade-image-gradient-expected.png
deleted file mode 100644
index 0fe9b13..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/css3/blending/background-blend-mode-crossfade-image-gradient-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/css3/blending/background-blend-mode-image-image-expected.png b/third_party/WebKit/LayoutTests/platform/win/css3/blending/background-blend-mode-image-image-expected.png
deleted file mode 100644
index 67dacf44..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/css3/blending/background-blend-mode-image-image-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/css3/blending/background-blend-mode-image-svg-expected.png b/third_party/WebKit/LayoutTests/platform/win/css3/blending/background-blend-mode-image-svg-expected.png
deleted file mode 100644
index e917b24..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/css3/blending/background-blend-mode-image-svg-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/css3/blending/background-blend-mode-multiple-background-layers-expected.png b/third_party/WebKit/LayoutTests/platform/win/css3/blending/background-blend-mode-multiple-background-layers-expected.png
deleted file mode 100644
index a8659ea..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/css3/blending/background-blend-mode-multiple-background-layers-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/css3/blending/background-blend-mode-tiled-gradient-expected.png b/third_party/WebKit/LayoutTests/platform/win/css3/blending/background-blend-mode-tiled-gradient-expected.png
deleted file mode 100644
index 2a62565d..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/css3/blending/background-blend-mode-tiled-gradient-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/css3/blending/mix-blend-mode-isolated-group-1-expected.png b/third_party/WebKit/LayoutTests/platform/win/css3/blending/mix-blend-mode-isolated-group-1-expected.png
deleted file mode 100644
index 2b058d5..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/css3/blending/mix-blend-mode-isolated-group-1-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/css3/blending/mix-blend-mode-isolated-group-2-expected.png b/third_party/WebKit/LayoutTests/platform/win/css3/blending/mix-blend-mode-isolated-group-2-expected.png
deleted file mode 100644
index e88ebcf5d1..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/css3/blending/mix-blend-mode-isolated-group-2-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/css3/blending/mix-blend-mode-isolated-group-3-expected.png b/third_party/WebKit/LayoutTests/platform/win/css3/blending/mix-blend-mode-isolated-group-3-expected.png
deleted file mode 100644
index a347de2a..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/css3/blending/mix-blend-mode-isolated-group-3-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/css3/filters/effect-brightness-clamping-expected.png b/third_party/WebKit/LayoutTests/platform/win/css3/filters/effect-brightness-clamping-expected.png
index 20431fd36..ae7ad9fa 100644
--- a/third_party/WebKit/LayoutTests/platform/win/css3/filters/effect-brightness-clamping-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/css3/filters/effect-brightness-clamping-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/css3/filters/effect-brightness-expected.png b/third_party/WebKit/LayoutTests/platform/win/css3/filters/effect-brightness-expected.png
index 5188f1b..bc170793 100644
--- a/third_party/WebKit/LayoutTests/platform/win/css3/filters/effect-brightness-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/css3/filters/effect-brightness-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/css3/filters/effect-combined-expected.png b/third_party/WebKit/LayoutTests/platform/win/css3/filters/effect-combined-expected.png
index 49f5cdfc3..7770c75 100644
--- a/third_party/WebKit/LayoutTests/platform/win/css3/filters/effect-combined-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/css3/filters/effect-combined-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/css3/filters/effect-reference-subregion-nested-expected.png b/third_party/WebKit/LayoutTests/platform/win/css3/filters/effect-reference-subregion-nested-expected.png
index 2e1ee85..1add4b0 100644
--- a/third_party/WebKit/LayoutTests/platform/win/css3/filters/effect-reference-subregion-nested-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/css3/filters/effect-reference-subregion-nested-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/css3/filters/filter-repaint-turbulence-expected.png b/third_party/WebKit/LayoutTests/platform/win/css3/filters/filter-repaint-turbulence-expected.png
index 792627a..1810381 100644
--- a/third_party/WebKit/LayoutTests/platform/win/css3/filters/filter-repaint-turbulence-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/css3/filters/filter-repaint-turbulence-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/css/object-fit-grow-landscape-expected.png b/third_party/WebKit/LayoutTests/platform/win/fast/css/object-fit-grow-landscape-expected.png
index e4017e6..e1a9ecf 100644
--- a/third_party/WebKit/LayoutTests/platform/win/fast/css/object-fit-grow-landscape-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/fast/css/object-fit-grow-landscape-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/css/object-fit-grow-portrait-expected.png b/third_party/WebKit/LayoutTests/platform/win/fast/css/object-fit-grow-portrait-expected.png
index 450a897..a336166 100644
--- a/third_party/WebKit/LayoutTests/platform/win/fast/css/object-fit-grow-portrait-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/fast/css/object-fit-grow-portrait-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/gradients/conic-gradient-positioning-expected.png b/third_party/WebKit/LayoutTests/platform/win/fast/gradients/conic-gradient-positioning-expected.png
index 9c77bf4..ddc2248 100644
--- a/third_party/WebKit/LayoutTests/platform/win/fast/gradients/conic-gradient-positioning-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/fast/gradients/conic-gradient-positioning-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/fast/gradients/css3-degenerate-color-stops-expected.png b/third_party/WebKit/LayoutTests/platform/win/fast/gradients/css3-degenerate-color-stops-expected.png
index 0150080..0c7a95f 100644
--- a/third_party/WebKit/LayoutTests/platform/win/fast/gradients/css3-degenerate-color-stops-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/fast/gradients/css3-degenerate-color-stops-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/images/cHRM_color_spin-expected.png b/third_party/WebKit/LayoutTests/platform/win/images/cHRM_color_spin-expected.png
deleted file mode 100644
index c58d78c..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/images/cHRM_color_spin-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/images/color-jpeg-with-color-profile-expected.png b/third_party/WebKit/LayoutTests/platform/win/images/color-jpeg-with-color-profile-expected.png
deleted file mode 100644
index fffe3ce..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/images/color-jpeg-with-color-profile-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/images/color-profile-animate-expected.png b/third_party/WebKit/LayoutTests/platform/win/images/color-profile-animate-expected.png
deleted file mode 100644
index 1d3c5cf6..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/images/color-profile-animate-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/images/color-profile-animate-rotate-expected.png b/third_party/WebKit/LayoutTests/platform/win/images/color-profile-animate-rotate-expected.png
deleted file mode 100644
index 4b6946aa..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/images/color-profile-animate-rotate-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/images/color-profile-background-clip-text-expected.png b/third_party/WebKit/LayoutTests/platform/win/images/color-profile-background-clip-text-expected.png
deleted file mode 100644
index 7a9c6d30..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/images/color-profile-background-clip-text-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/images/color-profile-background-image-cover-expected.png b/third_party/WebKit/LayoutTests/platform/win/images/color-profile-background-image-cover-expected.png
deleted file mode 100644
index 9d54f38..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/images/color-profile-background-image-cover-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/images/color-profile-background-image-cross-fade-expected.png b/third_party/WebKit/LayoutTests/platform/win/images/color-profile-background-image-cross-fade-expected.png
index 9bb2f0e..3e8bf73 100644
--- a/third_party/WebKit/LayoutTests/platform/win/images/color-profile-background-image-cross-fade-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/images/color-profile-background-image-cross-fade-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/images/color-profile-background-image-cross-fade-png-expected.png b/third_party/WebKit/LayoutTests/platform/win/images/color-profile-background-image-cross-fade-png-expected.png
index 9bb2f0e..3e8bf73 100644
--- a/third_party/WebKit/LayoutTests/platform/win/images/color-profile-background-image-cross-fade-png-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/images/color-profile-background-image-cross-fade-png-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/images/color-profile-background-image-repeat-expected.png b/third_party/WebKit/LayoutTests/platform/win/images/color-profile-background-image-repeat-expected.png
deleted file mode 100644
index 17674ff..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/images/color-profile-background-image-repeat-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/images/color-profile-background-image-space-expected.png b/third_party/WebKit/LayoutTests/platform/win/images/color-profile-background-image-space-expected.png
deleted file mode 100644
index ff1c5e7e..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/images/color-profile-background-image-space-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/images/color-profile-border-fade-expected.png b/third_party/WebKit/LayoutTests/platform/win/images/color-profile-border-fade-expected.png
deleted file mode 100644
index 81f8e58..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/images/color-profile-border-fade-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/images/color-profile-border-image-expected.png b/third_party/WebKit/LayoutTests/platform/win/images/color-profile-border-image-expected.png
deleted file mode 100644
index 842b376..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/images/color-profile-border-image-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/images/color-profile-border-radius-expected.png b/third_party/WebKit/LayoutTests/platform/win/images/color-profile-border-radius-expected.png
index 6e35e92..6bd21bd4 100644
--- a/third_party/WebKit/LayoutTests/platform/win/images/color-profile-border-radius-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/images/color-profile-border-radius-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/images/color-profile-clip-expected.png b/third_party/WebKit/LayoutTests/platform/win/images/color-profile-clip-expected.png
deleted file mode 100644
index ae2c4fae..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/images/color-profile-clip-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/images/color-profile-drag-image-expected.png b/third_party/WebKit/LayoutTests/platform/win/images/color-profile-drag-image-expected.png
index 659899c1..36809b99 100644
--- a/third_party/WebKit/LayoutTests/platform/win/images/color-profile-drag-image-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/images/color-profile-drag-image-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/images/color-profile-filter-expected.png b/third_party/WebKit/LayoutTests/platform/win/images/color-profile-filter-expected.png
index 2aa3e7e..1dca3d54 100644
--- a/third_party/WebKit/LayoutTests/platform/win/images/color-profile-filter-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/images/color-profile-filter-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/images/color-profile-group-expected.png b/third_party/WebKit/LayoutTests/platform/win/images/color-profile-group-expected.png
index 986374b2..54df53f 100644
--- a/third_party/WebKit/LayoutTests/platform/win/images/color-profile-group-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/images/color-profile-group-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/images/color-profile-iframe-expected.png b/third_party/WebKit/LayoutTests/platform/win/images/color-profile-iframe-expected.png
deleted file mode 100644
index 56e40aa..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/images/color-profile-iframe-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/images/color-profile-image-canvas-expected.png b/third_party/WebKit/LayoutTests/platform/win/images/color-profile-image-canvas-expected.png
deleted file mode 100644
index 4184891..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/images/color-profile-image-canvas-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/images/color-profile-image-canvas-pattern-expected.png b/third_party/WebKit/LayoutTests/platform/win/images/color-profile-image-canvas-pattern-expected.png
deleted file mode 100644
index 3f6f4b8..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/images/color-profile-image-canvas-pattern-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/images/color-profile-image-canvas-svg-expected.png b/third_party/WebKit/LayoutTests/platform/win/images/color-profile-image-canvas-svg-expected.png
index 042f085..c6175ef 100644
--- a/third_party/WebKit/LayoutTests/platform/win/images/color-profile-image-canvas-svg-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/images/color-profile-image-canvas-svg-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/images/color-profile-image-expected.png b/third_party/WebKit/LayoutTests/platform/win/images/color-profile-image-expected.png
index 27af8d9..41f18a4 100644
--- a/third_party/WebKit/LayoutTests/platform/win/images/color-profile-image-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/images/color-profile-image-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/images/color-profile-image-filter-all-expected.png b/third_party/WebKit/LayoutTests/platform/win/images/color-profile-image-filter-all-expected.png
index 7f92261..49e5ce1 100644
--- a/third_party/WebKit/LayoutTests/platform/win/images/color-profile-image-filter-all-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/images/color-profile-image-filter-all-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/images/color-profile-image-object-fit-expected.png b/third_party/WebKit/LayoutTests/platform/win/images/color-profile-image-object-fit-expected.png
deleted file mode 100644
index 285a199f..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/images/color-profile-image-object-fit-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/images/color-profile-image-pseudo-content-expected.png b/third_party/WebKit/LayoutTests/platform/win/images/color-profile-image-pseudo-content-expected.png
deleted file mode 100644
index 92cebe7..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/images/color-profile-image-pseudo-content-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/images/color-profile-image-shape-expected.png b/third_party/WebKit/LayoutTests/platform/win/images/color-profile-image-shape-expected.png
index e5f9356c4..73bfa97 100644
--- a/third_party/WebKit/LayoutTests/platform/win/images/color-profile-image-shape-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/images/color-profile-image-shape-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/images/color-profile-image-svg-resource-url-expected.png b/third_party/WebKit/LayoutTests/platform/win/images/color-profile-image-svg-resource-url-expected.png
deleted file mode 100644
index 16d4a424..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/images/color-profile-image-svg-resource-url-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/images/color-profile-layer-expected.png b/third_party/WebKit/LayoutTests/platform/win/images/color-profile-layer-expected.png
index 3ffae8c..fa96a6c 100644
--- a/third_party/WebKit/LayoutTests/platform/win/images/color-profile-layer-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/images/color-profile-layer-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/images/color-profile-layer-filter-expected.png b/third_party/WebKit/LayoutTests/platform/win/images/color-profile-layer-filter-expected.png
index 3bcb94e..2378179 100644
--- a/third_party/WebKit/LayoutTests/platform/win/images/color-profile-layer-filter-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/images/color-profile-layer-filter-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/images/color-profile-mask-image-svg-expected.png b/third_party/WebKit/LayoutTests/platform/win/images/color-profile-mask-image-svg-expected.png
deleted file mode 100644
index fc34f08e..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/images/color-profile-mask-image-svg-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/images/color-profile-munsell-adobe-to-srgb-expected.png b/third_party/WebKit/LayoutTests/platform/win/images/color-profile-munsell-adobe-to-srgb-expected.png
index a7c575d..d246ff28 100644
--- a/third_party/WebKit/LayoutTests/platform/win/images/color-profile-munsell-adobe-to-srgb-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/images/color-profile-munsell-adobe-to-srgb-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/images/color-profile-munsell-adobe-to-srgb-expected.txt b/third_party/WebKit/LayoutTests/platform/win/images/color-profile-munsell-adobe-to-srgb-expected.txt
deleted file mode 100644
index 07a3654..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/images/color-profile-munsell-adobe-to-srgb-expected.txt
+++ /dev/null
@@ -1,42 +0,0 @@
-
-Color         Actual        Expected      dE
---------------------------------------------
-Dark Skin     114,80,64     115,80,64     1
-Light Skin    195,150,130   195,151,130   1
-Blue Sky      94,122,157    94,123,156    1
-Foliage       88,108,65     88,108,65     0
-Blue Flower   130,129,177   130,129,177   0
-Bluish Green  100,191,171   100,190,171   1
---------------------------------------------
-Orange        217,121,37    217,122,37    1
-Purplish Blue 72,90,166     72,91,165     1
-Moderate Red  194,84,97     194,84,98     1
-Purple        90,60,106     91,59,107     2
-Yellow Green  160,188,60    160,188,60    0
-Orange Yellow 231,163,42    230,163,42    1
---------------------------------------------
-Blue          47,60,153     46,60,153     1
-Green         70,149,69     71,150,69     1
-Red           177,44,56     177,44,56     0
-Yellow        239,200,27    238,200,27    1
-Magenta       187,82,147    187,82,148    1
-Cyan (*)      0,135,166     0,135,166     0
---------------------------------------------
-White         243,242,237   243,242,237   0
-Neutral 8     201,201,200   201,201,201   1
-Neutral 6.5   160,161,160   161,161,161   1
-Neutral 5     123,121,120   122,122,121   2
-Neutral 3.5   83,83,83      83,83,83      0
-Black         50,50,50      50,49,50      1
---------------------------------------------
-
-Result: total RMS color error: 0.98
- * Munsell Cyan is outside 255 sRGB gamut
-
-  
-
-
-
-
-
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/images/color-profile-object-expected.png b/third_party/WebKit/LayoutTests/platform/win/images/color-profile-object-expected.png
deleted file mode 100644
index af04af6..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/images/color-profile-object-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/images/color-profile-svg-expected.png b/third_party/WebKit/LayoutTests/platform/win/images/color-profile-svg-expected.png
deleted file mode 100644
index 2bd6ec28..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/images/color-profile-svg-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/images/color-profile-svg-fill-text-expected.png b/third_party/WebKit/LayoutTests/platform/win/images/color-profile-svg-fill-text-expected.png
index 3cf8370..7d0f474 100644
--- a/third_party/WebKit/LayoutTests/platform/win/images/color-profile-svg-fill-text-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/images/color-profile-svg-fill-text-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/images/color-profile-svg-foreign-object-expected.png b/third_party/WebKit/LayoutTests/platform/win/images/color-profile-svg-foreign-object-expected.png
deleted file mode 100644
index 2619eeaf..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/images/color-profile-svg-foreign-object-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/images/cross-fade-background-size-expected.png b/third_party/WebKit/LayoutTests/platform/win/images/cross-fade-background-size-expected.png
index c2a7140d..82f03761 100644
--- a/third_party/WebKit/LayoutTests/platform/win/images/cross-fade-background-size-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/images/cross-fade-background-size-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/images/jpeg-with-color-profile-expected.png b/third_party/WebKit/LayoutTests/platform/win/images/jpeg-with-color-profile-expected.png
index 862e3abd..dc6e487 100644
--- a/third_party/WebKit/LayoutTests/platform/win/images/jpeg-with-color-profile-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/images/jpeg-with-color-profile-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/images/png-suite/test-expected.png b/third_party/WebKit/LayoutTests/platform/win/images/png-suite/test-expected.png
index f3ab422..f28c076 100644
--- a/third_party/WebKit/LayoutTests/platform/win/images/png-suite/test-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/images/png-suite/test-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/images/png-with-color-profile-expected.png b/third_party/WebKit/LayoutTests/platform/win/images/png-with-color-profile-expected.png
index 862e3abd..dc6e487 100644
--- a/third_party/WebKit/LayoutTests/platform/win/images/png-with-color-profile-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/images/png-with-color-profile-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/images/webp-color-profile-lossless-expected.png b/third_party/WebKit/LayoutTests/platform/win/images/webp-color-profile-lossless-expected.png
deleted file mode 100644
index 1ac3b74..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/images/webp-color-profile-lossless-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/images/webp-color-profile-lossy-alpha-expected.png b/third_party/WebKit/LayoutTests/platform/win/images/webp-color-profile-lossy-alpha-expected.png
deleted file mode 100644
index f47b1d8..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/images/webp-color-profile-lossy-alpha-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/images/webp-color-profile-lossy-expected.png b/third_party/WebKit/LayoutTests/platform/win/images/webp-color-profile-lossy-expected.png
deleted file mode 100644
index cd5662e..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/images/webp-color-profile-lossy-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/media/color-profile-munsell-bt601-smpte-to-srgb-expected.png b/third_party/WebKit/LayoutTests/platform/win/media/color-profile-munsell-bt601-smpte-to-srgb-expected.png
index e3e0102..b39df69 100644
--- a/third_party/WebKit/LayoutTests/platform/win/media/color-profile-munsell-bt601-smpte-to-srgb-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/media/color-profile-munsell-bt601-smpte-to-srgb-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/media/color-profile-munsell-bt709-to-srgb-expected.png b/third_party/WebKit/LayoutTests/platform/win/media/color-profile-munsell-bt709-to-srgb-expected.png
index c5a9aa91..7536943 100644
--- a/third_party/WebKit/LayoutTests/platform/win/media/color-profile-munsell-bt709-to-srgb-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/media/color-profile-munsell-bt709-to-srgb-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/media/color-profile-video-poster-image-expected.png b/third_party/WebKit/LayoutTests/platform/win/media/color-profile-video-poster-image-expected.png
deleted file mode 100644
index a41d56d..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/media/color-profile-video-poster-image-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/filters/clip-under-filter-expected.png b/third_party/WebKit/LayoutTests/platform/win/paint/filters/clip-under-filter-expected.png
deleted file mode 100644
index 5c097ad..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/paint/filters/clip-under-filter-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/paintorder-filtered-expected.png b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/paintorder-filtered-expected.png
deleted file mode 100644
index 297f9f97..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/paintorder-filtered-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/relative-sized-image-expected.png b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/relative-sized-image-expected.png
index a285e9a..c6982de6 100644
--- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/relative-sized-image-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/relative-sized-image-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/scrolling-embedded-svg-file-image-repaint-problem-expected.png b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/scrolling-embedded-svg-file-image-repaint-problem-expected.png
index 303736bf..fa46351 100644
--- a/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/scrolling-embedded-svg-file-image-repaint-problem-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/paint/invalidation/svg/scrolling-embedded-svg-file-image-repaint-problem-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/scrollbars/listbox-scrollbar-combinations-expected.png b/third_party/WebKit/LayoutTests/platform/win/scrollbars/listbox-scrollbar-combinations-expected.png
index 7439b8d..bca7646 100644
--- a/third_party/WebKit/LayoutTests/platform/win/scrollbars/listbox-scrollbar-combinations-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/scrollbars/listbox-scrollbar-combinations-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/svg/W3C-SVG-1.1-SE/filters-image-03-f-expected.png b/third_party/WebKit/LayoutTests/platform/win/svg/W3C-SVG-1.1-SE/filters-image-03-f-expected.png
index e3cb0e7..b8f1866 100644
--- a/third_party/WebKit/LayoutTests/platform/win/svg/W3C-SVG-1.1-SE/filters-image-03-f-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/svg/W3C-SVG-1.1-SE/filters-image-03-f-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/svg/W3C-SVG-1.1-SE/filters-image-05-f-expected.png b/third_party/WebKit/LayoutTests/platform/win/svg/W3C-SVG-1.1-SE/filters-image-05-f-expected.png
index 399413f..8233a7d8 100644
--- a/third_party/WebKit/LayoutTests/platform/win/svg/W3C-SVG-1.1-SE/filters-image-05-f-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/svg/W3C-SVG-1.1-SE/filters-image-05-f-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/svg/W3C-SVG-1.1/filters-color-01-b-expected.png b/third_party/WebKit/LayoutTests/platform/win/svg/W3C-SVG-1.1/filters-color-01-b-expected.png
index e03bbc5..e6b6ed2 100644
--- a/third_party/WebKit/LayoutTests/platform/win/svg/W3C-SVG-1.1/filters-color-01-b-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/svg/W3C-SVG-1.1/filters-color-01-b-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/svg/W3C-SVG-1.1/filters-conv-01-f-expected.png b/third_party/WebKit/LayoutTests/platform/win/svg/W3C-SVG-1.1/filters-conv-01-f-expected.png
index 28c258a9..19c669b 100644
--- a/third_party/WebKit/LayoutTests/platform/win/svg/W3C-SVG-1.1/filters-conv-01-f-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/svg/W3C-SVG-1.1/filters-conv-01-f-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/svg/W3C-SVG-1.1/filters-example-01-b-expected.png b/third_party/WebKit/LayoutTests/platform/win/svg/W3C-SVG-1.1/filters-example-01-b-expected.png
index 6630885..78ec3512c 100644
--- a/third_party/WebKit/LayoutTests/platform/win/svg/W3C-SVG-1.1/filters-example-01-b-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/svg/W3C-SVG-1.1/filters-example-01-b-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/svg/W3C-SVG-1.1/filters-gauss-01-b-expected.png b/third_party/WebKit/LayoutTests/platform/win/svg/W3C-SVG-1.1/filters-gauss-01-b-expected.png
index a1de7cd..2ae160f1 100644
--- a/third_party/WebKit/LayoutTests/platform/win/svg/W3C-SVG-1.1/filters-gauss-01-b-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/svg/W3C-SVG-1.1/filters-gauss-01-b-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/svg/W3C-SVG-1.1/filters-morph-01-f-expected.png b/third_party/WebKit/LayoutTests/platform/win/svg/W3C-SVG-1.1/filters-morph-01-f-expected.png
index 85b575c0..a25b15e 100644
--- a/third_party/WebKit/LayoutTests/platform/win/svg/W3C-SVG-1.1/filters-morph-01-f-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/svg/W3C-SVG-1.1/filters-morph-01-f-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/svg/W3C-SVG-1.1/filters-offset-01-b-expected.png b/third_party/WebKit/LayoutTests/platform/win/svg/W3C-SVG-1.1/filters-offset-01-b-expected.png
index b10587be..d7a8742 100644
--- a/third_party/WebKit/LayoutTests/platform/win/svg/W3C-SVG-1.1/filters-offset-01-b-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/svg/W3C-SVG-1.1/filters-offset-01-b-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/svg/W3C-SVG-1.1/filters-turb-01-f-expected.png b/third_party/WebKit/LayoutTests/platform/win/svg/W3C-SVG-1.1/filters-turb-01-f-expected.png
index 231c11c5..76938d02 100644
--- a/third_party/WebKit/LayoutTests/platform/win/svg/W3C-SVG-1.1/filters-turb-01-f-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/svg/W3C-SVG-1.1/filters-turb-01-f-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/svg/W3C-SVG-1.1/filters-turb-02-f-expected.png b/third_party/WebKit/LayoutTests/platform/win/svg/W3C-SVG-1.1/filters-turb-02-f-expected.png
index ade454a7..7e6ca86 100644
--- a/third_party/WebKit/LayoutTests/platform/win/svg/W3C-SVG-1.1/filters-turb-02-f-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/svg/W3C-SVG-1.1/filters-turb-02-f-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/svg/W3C-SVG-1.1/render-groups-01-b-expected.png b/third_party/WebKit/LayoutTests/platform/win/svg/W3C-SVG-1.1/render-groups-01-b-expected.png
index 2cf660ad..d850b5f 100644
--- a/third_party/WebKit/LayoutTests/platform/win/svg/W3C-SVG-1.1/render-groups-01-b-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/svg/W3C-SVG-1.1/render-groups-01-b-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/svg/W3C-SVG-1.1/render-groups-03-t-expected.png b/third_party/WebKit/LayoutTests/platform/win/svg/W3C-SVG-1.1/render-groups-03-t-expected.png
index 50cfc09..65a317a 100644
--- a/third_party/WebKit/LayoutTests/platform/win/svg/W3C-SVG-1.1/render-groups-03-t-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/svg/W3C-SVG-1.1/render-groups-03-t-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/svg/W3C-SVG-1.1/struct-image-06-t-expected.png b/third_party/WebKit/LayoutTests/platform/win/svg/W3C-SVG-1.1/struct-image-06-t-expected.png
index 4c44746..5f162f1 100644
--- a/third_party/WebKit/LayoutTests/platform/win/svg/W3C-SVG-1.1/struct-image-06-t-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/svg/W3C-SVG-1.1/struct-image-06-t-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/svg/W3C-SVG-1.1/struct-use-01-t-expected.png b/third_party/WebKit/LayoutTests/platform/win/svg/W3C-SVG-1.1/struct-use-01-t-expected.png
index f1839ee..15b1043 100644
--- a/third_party/WebKit/LayoutTests/platform/win/svg/W3C-SVG-1.1/struct-use-01-t-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/svg/W3C-SVG-1.1/struct-use-01-t-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/svg/as-background-image/svg-as-background-3-expected.png b/third_party/WebKit/LayoutTests/platform/win/svg/as-background-image/svg-as-background-3-expected.png
index 5bcecf6..fef537e 100644
--- a/third_party/WebKit/LayoutTests/platform/win/svg/as-background-image/svg-as-background-3-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/svg/as-background-image/svg-as-background-3-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/svg/as-background-image/svg-as-background-with-relative-size-expected.png b/third_party/WebKit/LayoutTests/platform/win/svg/as-background-image/svg-as-background-with-relative-size-expected.png
deleted file mode 100644
index 6c2dcc4..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/svg/as-background-image/svg-as-background-with-relative-size-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/svg/as-image/image-preserveAspectRatio-all-expected.png b/third_party/WebKit/LayoutTests/platform/win/svg/as-image/image-preserveAspectRatio-all-expected.png
deleted file mode 100644
index 5aace34..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/svg/as-image/image-preserveAspectRatio-all-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/svg/batik/filters/feTile-expected.png b/third_party/WebKit/LayoutTests/platform/win/svg/batik/filters/feTile-expected.png
index 2cba819..bfca85a 100644
--- a/third_party/WebKit/LayoutTests/platform/win/svg/batik/filters/feTile-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/svg/batik/filters/feTile-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/svg/custom/group-opacity-expected.png b/third_party/WebKit/LayoutTests/platform/win/svg/custom/group-opacity-expected.png
deleted file mode 100644
index c9a8ada3..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/svg/custom/group-opacity-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/svg/custom/text-filter-expected.png b/third_party/WebKit/LayoutTests/platform/win/svg/custom/text-filter-expected.png
index 9b54e0c9..ff80f287 100644
--- a/third_party/WebKit/LayoutTests/platform/win/svg/custom/text-filter-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/svg/custom/text-filter-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/svg/dynamic-updates/SVGFEColorMatrixElement-dom-in-attr-expected.png b/third_party/WebKit/LayoutTests/platform/win/svg/dynamic-updates/SVGFEColorMatrixElement-dom-in-attr-expected.png
deleted file mode 100644
index 359a992f..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/svg/dynamic-updates/SVGFEColorMatrixElement-dom-in-attr-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/svg/dynamic-updates/SVGFEColorMatrixElement-dom-type-attr-expected.png b/third_party/WebKit/LayoutTests/platform/win/svg/dynamic-updates/SVGFEColorMatrixElement-dom-type-attr-expected.png
deleted file mode 100644
index 359a992f..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/svg/dynamic-updates/SVGFEColorMatrixElement-dom-type-attr-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/svg/dynamic-updates/SVGFEColorMatrixElement-dom-values-attr-expected.png b/third_party/WebKit/LayoutTests/platform/win/svg/dynamic-updates/SVGFEColorMatrixElement-dom-values-attr-expected.png
deleted file mode 100644
index 359a992f..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/svg/dynamic-updates/SVGFEColorMatrixElement-dom-values-attr-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/svg/dynamic-updates/SVGFEColorMatrixElement-svgdom-in-prop-expected.png b/third_party/WebKit/LayoutTests/platform/win/svg/dynamic-updates/SVGFEColorMatrixElement-svgdom-in-prop-expected.png
deleted file mode 100644
index 359a992f..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/svg/dynamic-updates/SVGFEColorMatrixElement-svgdom-in-prop-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/svg/dynamic-updates/SVGFEColorMatrixElement-svgdom-type-prop-expected.png b/third_party/WebKit/LayoutTests/platform/win/svg/dynamic-updates/SVGFEColorMatrixElement-svgdom-type-prop-expected.png
deleted file mode 100644
index 359a992f..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/svg/dynamic-updates/SVGFEColorMatrixElement-svgdom-type-prop-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/svg/dynamic-updates/SVGFEColorMatrixElement-svgdom-values-prop-expected.png b/third_party/WebKit/LayoutTests/platform/win/svg/dynamic-updates/SVGFEColorMatrixElement-svgdom-values-prop-expected.png
deleted file mode 100644
index 359a992f..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/svg/dynamic-updates/SVGFEColorMatrixElement-svgdom-values-prop-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/svg/dynamic-updates/SVGFECompositeElement-dom-in2-attr-expected.png b/third_party/WebKit/LayoutTests/platform/win/svg/dynamic-updates/SVGFECompositeElement-dom-in2-attr-expected.png
deleted file mode 100644
index 80ea6adb..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/svg/dynamic-updates/SVGFECompositeElement-dom-in2-attr-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/svg/dynamic-updates/SVGFECompositeElement-dom-k1-attr-expected.png b/third_party/WebKit/LayoutTests/platform/win/svg/dynamic-updates/SVGFECompositeElement-dom-k1-attr-expected.png
deleted file mode 100644
index 80ea6adb..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/svg/dynamic-updates/SVGFECompositeElement-dom-k1-attr-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/svg/dynamic-updates/SVGFECompositeElement-dom-k2-attr-expected.png b/third_party/WebKit/LayoutTests/platform/win/svg/dynamic-updates/SVGFECompositeElement-dom-k2-attr-expected.png
deleted file mode 100644
index 80ea6adb..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/svg/dynamic-updates/SVGFECompositeElement-dom-k2-attr-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/svg/dynamic-updates/SVGFECompositeElement-dom-k3-attr-expected.png b/third_party/WebKit/LayoutTests/platform/win/svg/dynamic-updates/SVGFECompositeElement-dom-k3-attr-expected.png
deleted file mode 100644
index 7bc67e6b..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/svg/dynamic-updates/SVGFECompositeElement-dom-k3-attr-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/svg/dynamic-updates/SVGFECompositeElement-dom-k4-attr-expected.png b/third_party/WebKit/LayoutTests/platform/win/svg/dynamic-updates/SVGFECompositeElement-dom-k4-attr-expected.png
deleted file mode 100644
index 80ea6adb..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/svg/dynamic-updates/SVGFECompositeElement-dom-k4-attr-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/svg/dynamic-updates/SVGFECompositeElement-dom-operator-attr-expected.png b/third_party/WebKit/LayoutTests/platform/win/svg/dynamic-updates/SVGFECompositeElement-dom-operator-attr-expected.png
deleted file mode 100644
index 80ea6adb..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/svg/dynamic-updates/SVGFECompositeElement-dom-operator-attr-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/svg/dynamic-updates/SVGFECompositeElement-svgdom-in2-prop-expected.png b/third_party/WebKit/LayoutTests/platform/win/svg/dynamic-updates/SVGFECompositeElement-svgdom-in2-prop-expected.png
deleted file mode 100644
index 80ea6adb..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/svg/dynamic-updates/SVGFECompositeElement-svgdom-in2-prop-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/svg/dynamic-updates/SVGFECompositeElement-svgdom-k1-prop-expected.png b/third_party/WebKit/LayoutTests/platform/win/svg/dynamic-updates/SVGFECompositeElement-svgdom-k1-prop-expected.png
deleted file mode 100644
index 80ea6adb..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/svg/dynamic-updates/SVGFECompositeElement-svgdom-k1-prop-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/svg/dynamic-updates/SVGFECompositeElement-svgdom-k2-prop-expected.png b/third_party/WebKit/LayoutTests/platform/win/svg/dynamic-updates/SVGFECompositeElement-svgdom-k2-prop-expected.png
deleted file mode 100644
index 80ea6adb..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/svg/dynamic-updates/SVGFECompositeElement-svgdom-k2-prop-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/svg/dynamic-updates/SVGFECompositeElement-svgdom-k3-prop-expected.png b/third_party/WebKit/LayoutTests/platform/win/svg/dynamic-updates/SVGFECompositeElement-svgdom-k3-prop-expected.png
deleted file mode 100644
index 7bc67e6b..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/svg/dynamic-updates/SVGFECompositeElement-svgdom-k3-prop-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/svg/dynamic-updates/SVGFECompositeElement-svgdom-k4-prop-expected.png b/third_party/WebKit/LayoutTests/platform/win/svg/dynamic-updates/SVGFECompositeElement-svgdom-k4-prop-expected.png
deleted file mode 100644
index 80ea6adb..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/svg/dynamic-updates/SVGFECompositeElement-svgdom-k4-prop-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/svg/dynamic-updates/SVGFECompositeElement-svgdom-operator-prop-expected.png b/third_party/WebKit/LayoutTests/platform/win/svg/dynamic-updates/SVGFECompositeElement-svgdom-operator-prop-expected.png
deleted file mode 100644
index 80ea6adb..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/svg/dynamic-updates/SVGFECompositeElement-svgdom-operator-prop-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/svg/dynamic-updates/SVGFEConvolveMatrixElement-dom-bias-attr-expected.png b/third_party/WebKit/LayoutTests/platform/win/svg/dynamic-updates/SVGFEConvolveMatrixElement-dom-bias-attr-expected.png
deleted file mode 100644
index f95394e2..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/svg/dynamic-updates/SVGFEConvolveMatrixElement-dom-bias-attr-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/svg/dynamic-updates/SVGFEConvolveMatrixElement-dom-divisor-attr-expected.png b/third_party/WebKit/LayoutTests/platform/win/svg/dynamic-updates/SVGFEConvolveMatrixElement-dom-divisor-attr-expected.png
deleted file mode 100644
index f95394e2..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/svg/dynamic-updates/SVGFEConvolveMatrixElement-dom-divisor-attr-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/svg/dynamic-updates/SVGFEConvolveMatrixElement-dom-edgeMode-attr-expected.png b/third_party/WebKit/LayoutTests/platform/win/svg/dynamic-updates/SVGFEConvolveMatrixElement-dom-edgeMode-attr-expected.png
deleted file mode 100644
index 242aaaac..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/svg/dynamic-updates/SVGFEConvolveMatrixElement-dom-edgeMode-attr-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/svg/dynamic-updates/SVGFEConvolveMatrixElement-dom-in-attr-expected.png b/third_party/WebKit/LayoutTests/platform/win/svg/dynamic-updates/SVGFEConvolveMatrixElement-dom-in-attr-expected.png
deleted file mode 100644
index f95394e2..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/svg/dynamic-updates/SVGFEConvolveMatrixElement-dom-in-attr-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/svg/dynamic-updates/SVGFEConvolveMatrixElement-dom-kernelMatrix-attr-expected.png b/third_party/WebKit/LayoutTests/platform/win/svg/dynamic-updates/SVGFEConvolveMatrixElement-dom-kernelMatrix-attr-expected.png
deleted file mode 100644
index f95394e2..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/svg/dynamic-updates/SVGFEConvolveMatrixElement-dom-kernelMatrix-attr-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/svg/dynamic-updates/SVGFEConvolveMatrixElement-dom-order-attr-expected.png b/third_party/WebKit/LayoutTests/platform/win/svg/dynamic-updates/SVGFEConvolveMatrixElement-dom-order-attr-expected.png
deleted file mode 100644
index f95394e2..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/svg/dynamic-updates/SVGFEConvolveMatrixElement-dom-order-attr-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/svg/dynamic-updates/SVGFEConvolveMatrixElement-dom-targetX-attr-expected.png b/third_party/WebKit/LayoutTests/platform/win/svg/dynamic-updates/SVGFEConvolveMatrixElement-dom-targetX-attr-expected.png
deleted file mode 100644
index 242aaaac..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/svg/dynamic-updates/SVGFEConvolveMatrixElement-dom-targetX-attr-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/svg/dynamic-updates/SVGFEConvolveMatrixElement-dom-targetY-attr-expected.png b/third_party/WebKit/LayoutTests/platform/win/svg/dynamic-updates/SVGFEConvolveMatrixElement-dom-targetY-attr-expected.png
deleted file mode 100644
index 348d42e..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/svg/dynamic-updates/SVGFEConvolveMatrixElement-dom-targetY-attr-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/svg/dynamic-updates/SVGFEConvolveMatrixElement-svgdom-bias-prop-expected.png b/third_party/WebKit/LayoutTests/platform/win/svg/dynamic-updates/SVGFEConvolveMatrixElement-svgdom-bias-prop-expected.png
deleted file mode 100644
index f95394e2..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/svg/dynamic-updates/SVGFEConvolveMatrixElement-svgdom-bias-prop-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/svg/dynamic-updates/SVGFEConvolveMatrixElement-svgdom-divisor-prop-expected.png b/third_party/WebKit/LayoutTests/platform/win/svg/dynamic-updates/SVGFEConvolveMatrixElement-svgdom-divisor-prop-expected.png
deleted file mode 100644
index f95394e2..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/svg/dynamic-updates/SVGFEConvolveMatrixElement-svgdom-divisor-prop-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/svg/dynamic-updates/SVGFEConvolveMatrixElement-svgdom-edgeMode-prop-expected.png b/third_party/WebKit/LayoutTests/platform/win/svg/dynamic-updates/SVGFEConvolveMatrixElement-svgdom-edgeMode-prop-expected.png
deleted file mode 100644
index f95394e2..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/svg/dynamic-updates/SVGFEConvolveMatrixElement-svgdom-edgeMode-prop-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/svg/dynamic-updates/SVGFEConvolveMatrixElement-svgdom-in-prop-expected.png b/third_party/WebKit/LayoutTests/platform/win/svg/dynamic-updates/SVGFEConvolveMatrixElement-svgdom-in-prop-expected.png
deleted file mode 100644
index f95394e2..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/svg/dynamic-updates/SVGFEConvolveMatrixElement-svgdom-in-prop-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/svg/dynamic-updates/SVGFEConvolveMatrixElement-svgdom-kernelMatrix-prop-expected.png b/third_party/WebKit/LayoutTests/platform/win/svg/dynamic-updates/SVGFEConvolveMatrixElement-svgdom-kernelMatrix-prop-expected.png
deleted file mode 100644
index c83d377..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/svg/dynamic-updates/SVGFEConvolveMatrixElement-svgdom-kernelMatrix-prop-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/svg/dynamic-updates/SVGFEConvolveMatrixElement-svgdom-order-prop-expected.png b/third_party/WebKit/LayoutTests/platform/win/svg/dynamic-updates/SVGFEConvolveMatrixElement-svgdom-order-prop-expected.png
deleted file mode 100644
index f95394e2..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/svg/dynamic-updates/SVGFEConvolveMatrixElement-svgdom-order-prop-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/svg/dynamic-updates/SVGFEConvolveMatrixElement-svgdom-targetX-prop-expected.png b/third_party/WebKit/LayoutTests/platform/win/svg/dynamic-updates/SVGFEConvolveMatrixElement-svgdom-targetX-prop-expected.png
deleted file mode 100644
index 242aaaac..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/svg/dynamic-updates/SVGFEConvolveMatrixElement-svgdom-targetX-prop-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/svg/dynamic-updates/SVGFEConvolveMatrixElement-svgdom-targetY-prop-expected.png b/third_party/WebKit/LayoutTests/platform/win/svg/dynamic-updates/SVGFEConvolveMatrixElement-svgdom-targetY-prop-expected.png
deleted file mode 100644
index 348d42e..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/svg/dynamic-updates/SVGFEConvolveMatrixElement-svgdom-targetY-prop-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/svg/dynamic-updates/SVGFEDropShadowElement-dom-dx-attr-expected.png b/third_party/WebKit/LayoutTests/platform/win/svg/dynamic-updates/SVGFEDropShadowElement-dom-dx-attr-expected.png
deleted file mode 100644
index 58f5094..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/svg/dynamic-updates/SVGFEDropShadowElement-dom-dx-attr-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/svg/dynamic-updates/SVGFEDropShadowElement-dom-dy-attr-expected.png b/third_party/WebKit/LayoutTests/platform/win/svg/dynamic-updates/SVGFEDropShadowElement-dom-dy-attr-expected.png
deleted file mode 100644
index 58f5094..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/svg/dynamic-updates/SVGFEDropShadowElement-dom-dy-attr-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/svg/dynamic-updates/SVGFEDropShadowElement-dom-in-attr-expected.png b/third_party/WebKit/LayoutTests/platform/win/svg/dynamic-updates/SVGFEDropShadowElement-dom-in-attr-expected.png
deleted file mode 100644
index 58f5094..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/svg/dynamic-updates/SVGFEDropShadowElement-dom-in-attr-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/svg/dynamic-updates/SVGFEDropShadowElement-svgdom-dx-prop-expected.png b/third_party/WebKit/LayoutTests/platform/win/svg/dynamic-updates/SVGFEDropShadowElement-svgdom-dx-prop-expected.png
deleted file mode 100644
index 58f5094..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/svg/dynamic-updates/SVGFEDropShadowElement-svgdom-dx-prop-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/svg/dynamic-updates/SVGFEDropShadowElement-svgdom-dy-prop-expected.png b/third_party/WebKit/LayoutTests/platform/win/svg/dynamic-updates/SVGFEDropShadowElement-svgdom-dy-prop-expected.png
deleted file mode 100644
index 58f5094..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/svg/dynamic-updates/SVGFEDropShadowElement-svgdom-dy-prop-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/svg/dynamic-updates/SVGFEDropShadowElement-svgdom-in-prop-expected.png b/third_party/WebKit/LayoutTests/platform/win/svg/dynamic-updates/SVGFEDropShadowElement-svgdom-in-prop-expected.png
deleted file mode 100644
index 58f5094..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/svg/dynamic-updates/SVGFEDropShadowElement-svgdom-in-prop-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/svg/dynamic-updates/SVGFEGaussianBlurElement-dom-in-attr-expected.png b/third_party/WebKit/LayoutTests/platform/win/svg/dynamic-updates/SVGFEGaussianBlurElement-dom-in-attr-expected.png
deleted file mode 100644
index 278e6bf7..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/svg/dynamic-updates/SVGFEGaussianBlurElement-dom-in-attr-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/svg/dynamic-updates/SVGFEGaussianBlurElement-dom-stdDeviation-attr-expected.png b/third_party/WebKit/LayoutTests/platform/win/svg/dynamic-updates/SVGFEGaussianBlurElement-dom-stdDeviation-attr-expected.png
deleted file mode 100644
index 278e6bf7..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/svg/dynamic-updates/SVGFEGaussianBlurElement-dom-stdDeviation-attr-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/svg/dynamic-updates/SVGFEGaussianBlurElement-dom-stdDeviation-call-expected.png b/third_party/WebKit/LayoutTests/platform/win/svg/dynamic-updates/SVGFEGaussianBlurElement-dom-stdDeviation-call-expected.png
deleted file mode 100644
index 278e6bf7..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/svg/dynamic-updates/SVGFEGaussianBlurElement-dom-stdDeviation-call-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/svg/dynamic-updates/SVGFEGaussianBlurElement-svgdom-in-prop-expected.png b/third_party/WebKit/LayoutTests/platform/win/svg/dynamic-updates/SVGFEGaussianBlurElement-svgdom-in-prop-expected.png
deleted file mode 100644
index 278e6bf7..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/svg/dynamic-updates/SVGFEGaussianBlurElement-svgdom-in-prop-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/svg/dynamic-updates/SVGFETurbulenceElement-dom-baseFrequency-attr-expected.png b/third_party/WebKit/LayoutTests/platform/win/svg/dynamic-updates/SVGFETurbulenceElement-dom-baseFrequency-attr-expected.png
deleted file mode 100644
index ffc57134..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/svg/dynamic-updates/SVGFETurbulenceElement-dom-baseFrequency-attr-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/svg/dynamic-updates/SVGFETurbulenceElement-dom-numOctaves-attr-expected.png b/third_party/WebKit/LayoutTests/platform/win/svg/dynamic-updates/SVGFETurbulenceElement-dom-numOctaves-attr-expected.png
deleted file mode 100644
index ffc57134..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/svg/dynamic-updates/SVGFETurbulenceElement-dom-numOctaves-attr-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/svg/dynamic-updates/SVGFETurbulenceElement-dom-seed-attr-expected.png b/third_party/WebKit/LayoutTests/platform/win/svg/dynamic-updates/SVGFETurbulenceElement-dom-seed-attr-expected.png
deleted file mode 100644
index ffc57134..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/svg/dynamic-updates/SVGFETurbulenceElement-dom-seed-attr-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/svg/dynamic-updates/SVGFETurbulenceElement-dom-stitchTiles-attr-expected.png b/third_party/WebKit/LayoutTests/platform/win/svg/dynamic-updates/SVGFETurbulenceElement-dom-stitchTiles-attr-expected.png
deleted file mode 100644
index d328b87d..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/svg/dynamic-updates/SVGFETurbulenceElement-dom-stitchTiles-attr-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/svg/dynamic-updates/SVGFETurbulenceElement-dom-type-attr-expected.png b/third_party/WebKit/LayoutTests/platform/win/svg/dynamic-updates/SVGFETurbulenceElement-dom-type-attr-expected.png
deleted file mode 100644
index ffc57134..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/svg/dynamic-updates/SVGFETurbulenceElement-dom-type-attr-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/svg/dynamic-updates/SVGFETurbulenceElement-svgdom-baseFrequency-prop-expected.png b/third_party/WebKit/LayoutTests/platform/win/svg/dynamic-updates/SVGFETurbulenceElement-svgdom-baseFrequency-prop-expected.png
deleted file mode 100644
index ffc57134..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/svg/dynamic-updates/SVGFETurbulenceElement-svgdom-baseFrequency-prop-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/svg/dynamic-updates/SVGFETurbulenceElement-svgdom-numOctaves-prop-expected.png b/third_party/WebKit/LayoutTests/platform/win/svg/dynamic-updates/SVGFETurbulenceElement-svgdom-numOctaves-prop-expected.png
deleted file mode 100644
index ffc57134..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/svg/dynamic-updates/SVGFETurbulenceElement-svgdom-numOctaves-prop-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/svg/dynamic-updates/SVGFETurbulenceElement-svgdom-seed-prop-expected.png b/third_party/WebKit/LayoutTests/platform/win/svg/dynamic-updates/SVGFETurbulenceElement-svgdom-seed-prop-expected.png
deleted file mode 100644
index eb8d075..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/svg/dynamic-updates/SVGFETurbulenceElement-svgdom-seed-prop-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/svg/dynamic-updates/SVGFETurbulenceElement-svgdom-stitchTiles-prop-expected.png b/third_party/WebKit/LayoutTests/platform/win/svg/dynamic-updates/SVGFETurbulenceElement-svgdom-stitchTiles-prop-expected.png
deleted file mode 100644
index ffc57134..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/svg/dynamic-updates/SVGFETurbulenceElement-svgdom-stitchTiles-prop-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/svg/dynamic-updates/SVGFETurbulenceElement-svgdom-type-prop-expected.png b/third_party/WebKit/LayoutTests/platform/win/svg/dynamic-updates/SVGFETurbulenceElement-svgdom-type-prop-expected.png
deleted file mode 100644
index ffc57134..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/svg/dynamic-updates/SVGFETurbulenceElement-svgdom-type-prop-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/svg/filters/color-interpolation-filters-expected.png b/third_party/WebKit/LayoutTests/platform/win/svg/filters/color-interpolation-filters-expected.png
deleted file mode 100644
index 253da30..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/svg/filters/color-interpolation-filters-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/svg/filters/feDropShadow-expected.png b/third_party/WebKit/LayoutTests/platform/win/svg/filters/feDropShadow-expected.png
index 99d4a2d..ba0a4b6 100644
--- a/third_party/WebKit/LayoutTests/platform/win/svg/filters/feDropShadow-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/svg/filters/feDropShadow-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/svg/filters/feGaussianBlur-expected.png b/third_party/WebKit/LayoutTests/platform/win/svg/filters/feGaussianBlur-expected.png
deleted file mode 100644
index 79895a1..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/svg/filters/feGaussianBlur-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/svg/filters/feImage-preserveAspectRatio-all-expected.png b/third_party/WebKit/LayoutTests/platform/win/svg/filters/feImage-preserveAspectRatio-all-expected.png
deleted file mode 100644
index d7b34fc2..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/svg/filters/feImage-preserveAspectRatio-all-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/svg/filters/feImage-preserveAspectratio-expected.png b/third_party/WebKit/LayoutTests/platform/win/svg/filters/feImage-preserveAspectratio-expected.png
deleted file mode 100644
index e6a215f..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/svg/filters/feImage-preserveAspectratio-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/svg/filters/feTurbulence-scale-expected.png b/third_party/WebKit/LayoutTests/platform/win/svg/filters/feTurbulence-scale-expected.png
deleted file mode 100644
index 5202f15..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/svg/filters/feTurbulence-scale-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/svg/filters/feTurbulence-tiled-expected.png b/third_party/WebKit/LayoutTests/platform/win/svg/filters/feTurbulence-tiled-expected.png
deleted file mode 100644
index 5abf39d..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/svg/filters/feTurbulence-tiled-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/svg/filters/filter-source-position-expected.png b/third_party/WebKit/LayoutTests/platform/win/svg/filters/filter-source-position-expected.png
deleted file mode 100644
index 0674a82..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/svg/filters/filter-source-position-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/svg/filters/filteredImage-expected.png b/third_party/WebKit/LayoutTests/platform/win/svg/filters/filteredImage-expected.png
deleted file mode 100644
index fc696c3a..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/svg/filters/filteredImage-expected.png
+++ /dev/null
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/svg/zoom/page/zoom-svg-through-object-with-absolute-size-2-expected.png b/third_party/WebKit/LayoutTests/platform/win/svg/zoom/page/zoom-svg-through-object-with-absolute-size-2-expected.png
index 809cddc..6e37c7d 100644
--- a/third_party/WebKit/LayoutTests/platform/win/svg/zoom/page/zoom-svg-through-object-with-absolute-size-2-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/svg/zoom/page/zoom-svg-through-object-with-absolute-size-2-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/svg/zoom/page/zoom-svg-through-object-with-absolute-size-expected.png b/third_party/WebKit/LayoutTests/platform/win/svg/zoom/page/zoom-svg-through-object-with-absolute-size-expected.png
index 809cddc..6e37c7d 100644
--- a/third_party/WebKit/LayoutTests/platform/win/svg/zoom/page/zoom-svg-through-object-with-absolute-size-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/svg/zoom/page/zoom-svg-through-object-with-absolute-size-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/svg/zoom/page/zoom-svg-through-object-with-percentage-size-expected.png b/third_party/WebKit/LayoutTests/platform/win/svg/zoom/page/zoom-svg-through-object-with-percentage-size-expected.png
index 8655d45..a4036d33 100644
--- a/third_party/WebKit/LayoutTests/platform/win/svg/zoom/page/zoom-svg-through-object-with-percentage-size-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/svg/zoom/page/zoom-svg-through-object-with-percentage-size-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/color-profile-drag-image-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/color-profile-drag-image-expected.png
index 659899c1..36809b99 100644
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/color-profile-drag-image-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/color-profile-drag-image-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/color-profile-image-canvas-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/color-profile-image-canvas-expected.png
index 2f9eab5..334fad1 100644
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/color-profile-image-canvas-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/color-profile-image-canvas-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/color-profile-image-canvas-pattern-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/color-profile-image-canvas-pattern-expected.png
index 94f2a00..98edd03 100644
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/color-profile-image-canvas-pattern-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/color-profile-image-canvas-pattern-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/color-profile-image-canvas-svg-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/color-profile-image-canvas-svg-expected.png
index f70a25e..b365038 100644
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/color-profile-image-canvas-svg-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/color-profile-image-canvas-svg-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/color-profile-image-filter-all-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/color-profile-image-filter-all-expected.png
index 15814593..90575de 100644
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/color-profile-image-filter-all-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/color-profile-image-filter-all-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/color-profile-image-profile-match-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/color-profile-image-profile-match-expected.png
index 4fa96d9..6a45cb0 100644
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/color-profile-image-profile-match-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/color-profile-image-profile-match-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/color-profile-munsell-adobe-to-srgb-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/color-profile-munsell-adobe-to-srgb-expected.png
index e9a90b45..aaacabd 100644
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/color-profile-munsell-adobe-to-srgb-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/color-profile-munsell-adobe-to-srgb-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/images/color-profile-munsell-adobe-to-srgb-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/color-profile-munsell-adobe-to-srgb-expected.txt
similarity index 100%
copy from third_party/WebKit/LayoutTests/platform/linux/images/color-profile-munsell-adobe-to-srgb-expected.txt
copy to third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/color-profile-munsell-adobe-to-srgb-expected.txt
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/jpeg-yuv-progressive-image-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/jpeg-yuv-progressive-image-expected.png
index d08af7d..d8aa952 100644
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/jpeg-yuv-progressive-image-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/virtual/exotic-color-space/images/jpeg-yuv-progressive-image-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/gpu-rasterization/images/color-profile-drag-image-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/gpu-rasterization/images/color-profile-drag-image-expected.png
index 659899c1..36809b99 100644
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/gpu-rasterization/images/color-profile-drag-image-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/virtual/gpu-rasterization/images/color-profile-drag-image-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/gpu-rasterization/images/color-profile-image-canvas-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/gpu-rasterization/images/color-profile-image-canvas-expected.png
index 008788d..0cb552e 100644
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/gpu-rasterization/images/color-profile-image-canvas-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/virtual/gpu-rasterization/images/color-profile-image-canvas-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/gpu-rasterization/images/color-profile-image-canvas-pattern-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/gpu-rasterization/images/color-profile-image-canvas-pattern-expected.png
index 8a3fbd56..28651f8 100644
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/gpu-rasterization/images/color-profile-image-canvas-pattern-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/virtual/gpu-rasterization/images/color-profile-image-canvas-pattern-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/gpu-rasterization/images/color-profile-image-canvas-svg-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/gpu-rasterization/images/color-profile-image-canvas-svg-expected.png
index 19fdb2b..9ff1d6b 100644
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/gpu-rasterization/images/color-profile-image-canvas-svg-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/virtual/gpu-rasterization/images/color-profile-image-canvas-svg-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/gpu-rasterization/images/color-profile-munsell-adobe-to-srgb-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/gpu-rasterization/images/color-profile-munsell-adobe-to-srgb-expected.png
index 1e766924..bc157067 100644
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/gpu-rasterization/images/color-profile-munsell-adobe-to-srgb-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/virtual/gpu-rasterization/images/color-profile-munsell-adobe-to-srgb-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/gpu-rasterization/images/color-profile-munsell-adobe-to-srgb-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/gpu-rasterization/images/color-profile-munsell-adobe-to-srgb-expected.txt
deleted file mode 100644
index 07a3654..0000000
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/gpu-rasterization/images/color-profile-munsell-adobe-to-srgb-expected.txt
+++ /dev/null
@@ -1,42 +0,0 @@
-
-Color         Actual        Expected      dE
---------------------------------------------
-Dark Skin     114,80,64     115,80,64     1
-Light Skin    195,150,130   195,151,130   1
-Blue Sky      94,122,157    94,123,156    1
-Foliage       88,108,65     88,108,65     0
-Blue Flower   130,129,177   130,129,177   0
-Bluish Green  100,191,171   100,190,171   1
---------------------------------------------
-Orange        217,121,37    217,122,37    1
-Purplish Blue 72,90,166     72,91,165     1
-Moderate Red  194,84,97     194,84,98     1
-Purple        90,60,106     91,59,107     2
-Yellow Green  160,188,60    160,188,60    0
-Orange Yellow 231,163,42    230,163,42    1
---------------------------------------------
-Blue          47,60,153     46,60,153     1
-Green         70,149,69     71,150,69     1
-Red           177,44,56     177,44,56     0
-Yellow        239,200,27    238,200,27    1
-Magenta       187,82,147    187,82,148    1
-Cyan (*)      0,135,166     0,135,166     0
---------------------------------------------
-White         243,242,237   243,242,237   0
-Neutral 8     201,201,200   201,201,201   1
-Neutral 6.5   160,161,160   161,161,161   1
-Neutral 5     123,121,120   122,122,121   2
-Neutral 3.5   83,83,83      83,83,83      0
-Black         50,50,50      50,49,50      1
---------------------------------------------
-
-Result: total RMS color error: 0.98
- * Munsell Cyan is outside 255 sRGB gamut
-
-  
-
-
-
-
-
-
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/prefer_compositing_to_lcd_text/scrollbars/listbox-scrollbar-combinations-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/prefer_compositing_to_lcd_text/scrollbars/listbox-scrollbar-combinations-expected.png
index 7439b8d..bca7646 100644
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/prefer_compositing_to_lcd_text/scrollbars/listbox-scrollbar-combinations-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/virtual/prefer_compositing_to_lcd_text/scrollbars/listbox-scrollbar-combinations-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/rootlayerscrolls/scrollbars/listbox-scrollbar-combinations-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/rootlayerscrolls/scrollbars/listbox-scrollbar-combinations-expected.png
index 7439b8d..bca7646 100644
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/rootlayerscrolls/scrollbars/listbox-scrollbar-combinations-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/virtual/rootlayerscrolls/scrollbars/listbox-scrollbar-combinations-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win7/paint/invalidation/svg/scrolling-embedded-svg-file-image-repaint-problem-expected.png b/third_party/WebKit/LayoutTests/platform/win7/paint/invalidation/svg/scrolling-embedded-svg-file-image-repaint-problem-expected.png
index 63ad4625..41ac9da6 100644
--- a/third_party/WebKit/LayoutTests/platform/win7/paint/invalidation/svg/scrolling-embedded-svg-file-image-repaint-problem-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win7/paint/invalidation/svg/scrolling-embedded-svg-file-image-repaint-problem-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win7/scrollbars/listbox-scrollbar-combinations-expected.png b/third_party/WebKit/LayoutTests/platform/win7/scrollbars/listbox-scrollbar-combinations-expected.png
index 86eb9f75..5b79efb 100644
--- a/third_party/WebKit/LayoutTests/platform/win7/scrollbars/listbox-scrollbar-combinations-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win7/scrollbars/listbox-scrollbar-combinations-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win7/svg/W3C-SVG-1.1/filters-color-01-b-expected.png b/third_party/WebKit/LayoutTests/platform/win7/svg/W3C-SVG-1.1/filters-color-01-b-expected.png
index 9de3317..2b83f40 100644
--- a/third_party/WebKit/LayoutTests/platform/win7/svg/W3C-SVG-1.1/filters-color-01-b-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win7/svg/W3C-SVG-1.1/filters-color-01-b-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win7/virtual/prefer_compositing_to_lcd_text/scrollbars/listbox-scrollbar-combinations-expected.png b/third_party/WebKit/LayoutTests/platform/win7/virtual/prefer_compositing_to_lcd_text/scrollbars/listbox-scrollbar-combinations-expected.png
index 86eb9f75..5b79efb 100644
--- a/third_party/WebKit/LayoutTests/platform/win7/virtual/prefer_compositing_to_lcd_text/scrollbars/listbox-scrollbar-combinations-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win7/virtual/prefer_compositing_to_lcd_text/scrollbars/listbox-scrollbar-combinations-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win7/virtual/rootlayerscrolls/scrollbars/listbox-scrollbar-combinations-expected.png b/third_party/WebKit/LayoutTests/platform/win7/virtual/rootlayerscrolls/scrollbars/listbox-scrollbar-combinations-expected.png
index 86eb9f75..5b79efb 100644
--- a/third_party/WebKit/LayoutTests/platform/win7/virtual/rootlayerscrolls/scrollbars/listbox-scrollbar-combinations-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win7/virtual/rootlayerscrolls/scrollbars/listbox-scrollbar-combinations-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/svg/as-background-image/svg-as-background-with-relative-size-expected.png b/third_party/WebKit/LayoutTests/svg/as-background-image/svg-as-background-with-relative-size-expected.png
similarity index 100%
rename from third_party/WebKit/LayoutTests/platform/mac/svg/as-background-image/svg-as-background-with-relative-size-expected.png
rename to third_party/WebKit/LayoutTests/svg/as-background-image/svg-as-background-with-relative-size-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/svg/as-image/image-preserveAspectRatio-all-expected.png b/third_party/WebKit/LayoutTests/svg/as-image/image-preserveAspectRatio-all-expected.png
similarity index 100%
rename from third_party/WebKit/LayoutTests/platform/mac/svg/as-image/image-preserveAspectRatio-all-expected.png
rename to third_party/WebKit/LayoutTests/svg/as-image/image-preserveAspectRatio-all-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/svg/custom/group-opacity-expected.png b/third_party/WebKit/LayoutTests/svg/custom/group-opacity-expected.png
similarity index 100%
rename from third_party/WebKit/LayoutTests/platform/mac/svg/custom/group-opacity-expected.png
rename to third_party/WebKit/LayoutTests/svg/custom/group-opacity-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/svg/dynamic-updates/SVGFEColorMatrixElement-dom-in-attr-expected.png b/third_party/WebKit/LayoutTests/svg/dynamic-updates/SVGFEColorMatrixElement-dom-in-attr-expected.png
similarity index 100%
rename from third_party/WebKit/LayoutTests/platform/mac/svg/dynamic-updates/SVGFEColorMatrixElement-dom-in-attr-expected.png
rename to third_party/WebKit/LayoutTests/svg/dynamic-updates/SVGFEColorMatrixElement-dom-in-attr-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/svg/dynamic-updates/SVGFEColorMatrixElement-dom-type-attr-expected.png b/third_party/WebKit/LayoutTests/svg/dynamic-updates/SVGFEColorMatrixElement-dom-type-attr-expected.png
similarity index 100%
rename from third_party/WebKit/LayoutTests/platform/mac/svg/dynamic-updates/SVGFEColorMatrixElement-dom-type-attr-expected.png
rename to third_party/WebKit/LayoutTests/svg/dynamic-updates/SVGFEColorMatrixElement-dom-type-attr-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/svg/dynamic-updates/SVGFEColorMatrixElement-dom-values-attr-expected.png b/third_party/WebKit/LayoutTests/svg/dynamic-updates/SVGFEColorMatrixElement-dom-values-attr-expected.png
similarity index 100%
rename from third_party/WebKit/LayoutTests/platform/mac/svg/dynamic-updates/SVGFEColorMatrixElement-dom-values-attr-expected.png
rename to third_party/WebKit/LayoutTests/svg/dynamic-updates/SVGFEColorMatrixElement-dom-values-attr-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/svg/dynamic-updates/SVGFEColorMatrixElement-svgdom-in-prop-expected.png b/third_party/WebKit/LayoutTests/svg/dynamic-updates/SVGFEColorMatrixElement-svgdom-in-prop-expected.png
similarity index 100%
rename from third_party/WebKit/LayoutTests/platform/mac/svg/dynamic-updates/SVGFEColorMatrixElement-svgdom-in-prop-expected.png
rename to third_party/WebKit/LayoutTests/svg/dynamic-updates/SVGFEColorMatrixElement-svgdom-in-prop-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/svg/dynamic-updates/SVGFEColorMatrixElement-svgdom-type-prop-expected.png b/third_party/WebKit/LayoutTests/svg/dynamic-updates/SVGFEColorMatrixElement-svgdom-type-prop-expected.png
similarity index 100%
rename from third_party/WebKit/LayoutTests/platform/mac/svg/dynamic-updates/SVGFEColorMatrixElement-svgdom-type-prop-expected.png
rename to third_party/WebKit/LayoutTests/svg/dynamic-updates/SVGFEColorMatrixElement-svgdom-type-prop-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/svg/dynamic-updates/SVGFEColorMatrixElement-svgdom-values-prop-expected.png b/third_party/WebKit/LayoutTests/svg/dynamic-updates/SVGFEColorMatrixElement-svgdom-values-prop-expected.png
similarity index 100%
rename from third_party/WebKit/LayoutTests/platform/mac/svg/dynamic-updates/SVGFEColorMatrixElement-svgdom-values-prop-expected.png
rename to third_party/WebKit/LayoutTests/svg/dynamic-updates/SVGFEColorMatrixElement-svgdom-values-prop-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/svg/dynamic-updates/SVGFECompositeElement-dom-in2-attr-expected.png b/third_party/WebKit/LayoutTests/svg/dynamic-updates/SVGFECompositeElement-dom-in2-attr-expected.png
similarity index 100%
rename from third_party/WebKit/LayoutTests/platform/mac/svg/dynamic-updates/SVGFECompositeElement-dom-in2-attr-expected.png
rename to third_party/WebKit/LayoutTests/svg/dynamic-updates/SVGFECompositeElement-dom-in2-attr-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/svg/dynamic-updates/SVGFECompositeElement-dom-k1-attr-expected.png b/third_party/WebKit/LayoutTests/svg/dynamic-updates/SVGFECompositeElement-dom-k1-attr-expected.png
similarity index 100%
rename from third_party/WebKit/LayoutTests/platform/mac/svg/dynamic-updates/SVGFECompositeElement-dom-k1-attr-expected.png
rename to third_party/WebKit/LayoutTests/svg/dynamic-updates/SVGFECompositeElement-dom-k1-attr-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/svg/dynamic-updates/SVGFECompositeElement-dom-k2-attr-expected.png b/third_party/WebKit/LayoutTests/svg/dynamic-updates/SVGFECompositeElement-dom-k2-attr-expected.png
similarity index 100%
rename from third_party/WebKit/LayoutTests/platform/mac/svg/dynamic-updates/SVGFECompositeElement-dom-k2-attr-expected.png
rename to third_party/WebKit/LayoutTests/svg/dynamic-updates/SVGFECompositeElement-dom-k2-attr-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/svg/dynamic-updates/SVGFECompositeElement-dom-k3-attr-expected.png b/third_party/WebKit/LayoutTests/svg/dynamic-updates/SVGFECompositeElement-dom-k3-attr-expected.png
similarity index 100%
rename from third_party/WebKit/LayoutTests/platform/mac/svg/dynamic-updates/SVGFECompositeElement-dom-k3-attr-expected.png
rename to third_party/WebKit/LayoutTests/svg/dynamic-updates/SVGFECompositeElement-dom-k3-attr-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/svg/dynamic-updates/SVGFECompositeElement-dom-k4-attr-expected.png b/third_party/WebKit/LayoutTests/svg/dynamic-updates/SVGFECompositeElement-dom-k4-attr-expected.png
similarity index 100%
rename from third_party/WebKit/LayoutTests/platform/mac/svg/dynamic-updates/SVGFECompositeElement-dom-k4-attr-expected.png
rename to third_party/WebKit/LayoutTests/svg/dynamic-updates/SVGFECompositeElement-dom-k4-attr-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/svg/dynamic-updates/SVGFECompositeElement-dom-operator-attr-expected.png b/third_party/WebKit/LayoutTests/svg/dynamic-updates/SVGFECompositeElement-dom-operator-attr-expected.png
similarity index 100%
rename from third_party/WebKit/LayoutTests/platform/mac/svg/dynamic-updates/SVGFECompositeElement-dom-operator-attr-expected.png
rename to third_party/WebKit/LayoutTests/svg/dynamic-updates/SVGFECompositeElement-dom-operator-attr-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/svg/dynamic-updates/SVGFECompositeElement-svgdom-in2-prop-expected.png b/third_party/WebKit/LayoutTests/svg/dynamic-updates/SVGFECompositeElement-svgdom-in2-prop-expected.png
similarity index 100%
rename from third_party/WebKit/LayoutTests/platform/mac/svg/dynamic-updates/SVGFECompositeElement-svgdom-in2-prop-expected.png
rename to third_party/WebKit/LayoutTests/svg/dynamic-updates/SVGFECompositeElement-svgdom-in2-prop-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/svg/dynamic-updates/SVGFECompositeElement-svgdom-k1-prop-expected.png b/third_party/WebKit/LayoutTests/svg/dynamic-updates/SVGFECompositeElement-svgdom-k1-prop-expected.png
similarity index 100%
rename from third_party/WebKit/LayoutTests/platform/mac/svg/dynamic-updates/SVGFECompositeElement-svgdom-k1-prop-expected.png
rename to third_party/WebKit/LayoutTests/svg/dynamic-updates/SVGFECompositeElement-svgdom-k1-prop-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/svg/dynamic-updates/SVGFECompositeElement-svgdom-k2-prop-expected.png b/third_party/WebKit/LayoutTests/svg/dynamic-updates/SVGFECompositeElement-svgdom-k2-prop-expected.png
similarity index 100%
rename from third_party/WebKit/LayoutTests/platform/mac/svg/dynamic-updates/SVGFECompositeElement-svgdom-k2-prop-expected.png
rename to third_party/WebKit/LayoutTests/svg/dynamic-updates/SVGFECompositeElement-svgdom-k2-prop-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/svg/dynamic-updates/SVGFECompositeElement-svgdom-k3-prop-expected.png b/third_party/WebKit/LayoutTests/svg/dynamic-updates/SVGFECompositeElement-svgdom-k3-prop-expected.png
similarity index 100%
rename from third_party/WebKit/LayoutTests/platform/mac/svg/dynamic-updates/SVGFECompositeElement-svgdom-k3-prop-expected.png
rename to third_party/WebKit/LayoutTests/svg/dynamic-updates/SVGFECompositeElement-svgdom-k3-prop-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/svg/dynamic-updates/SVGFECompositeElement-svgdom-k4-prop-expected.png b/third_party/WebKit/LayoutTests/svg/dynamic-updates/SVGFECompositeElement-svgdom-k4-prop-expected.png
similarity index 100%
rename from third_party/WebKit/LayoutTests/platform/mac/svg/dynamic-updates/SVGFECompositeElement-svgdom-k4-prop-expected.png
rename to third_party/WebKit/LayoutTests/svg/dynamic-updates/SVGFECompositeElement-svgdom-k4-prop-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/svg/dynamic-updates/SVGFECompositeElement-svgdom-operator-prop-expected.png b/third_party/WebKit/LayoutTests/svg/dynamic-updates/SVGFECompositeElement-svgdom-operator-prop-expected.png
similarity index 100%
rename from third_party/WebKit/LayoutTests/platform/mac/svg/dynamic-updates/SVGFECompositeElement-svgdom-operator-prop-expected.png
rename to third_party/WebKit/LayoutTests/svg/dynamic-updates/SVGFECompositeElement-svgdom-operator-prop-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/svg/dynamic-updates/SVGFEConvolveMatrixElement-svgdom-kernelMatrix-prop-expected.png b/third_party/WebKit/LayoutTests/svg/dynamic-updates/SVGFEConvolveMatrixElement-svgdom-kernelMatrix-prop-expected.png
similarity index 100%
rename from third_party/WebKit/LayoutTests/platform/mac/svg/dynamic-updates/SVGFEConvolveMatrixElement-svgdom-kernelMatrix-prop-expected.png
rename to third_party/WebKit/LayoutTests/svg/dynamic-updates/SVGFEConvolveMatrixElement-svgdom-kernelMatrix-prop-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/svg/dynamic-updates/SVGFEDropShadowElement-dom-dx-attr-expected.png b/third_party/WebKit/LayoutTests/svg/dynamic-updates/SVGFEDropShadowElement-dom-dx-attr-expected.png
similarity index 100%
rename from third_party/WebKit/LayoutTests/platform/mac/svg/dynamic-updates/SVGFEDropShadowElement-dom-dx-attr-expected.png
rename to third_party/WebKit/LayoutTests/svg/dynamic-updates/SVGFEDropShadowElement-dom-dx-attr-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/svg/dynamic-updates/SVGFEDropShadowElement-dom-dy-attr-expected.png b/third_party/WebKit/LayoutTests/svg/dynamic-updates/SVGFEDropShadowElement-dom-dy-attr-expected.png
similarity index 100%
rename from third_party/WebKit/LayoutTests/platform/mac/svg/dynamic-updates/SVGFEDropShadowElement-dom-dy-attr-expected.png
rename to third_party/WebKit/LayoutTests/svg/dynamic-updates/SVGFEDropShadowElement-dom-dy-attr-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/svg/dynamic-updates/SVGFEDropShadowElement-dom-in-attr-expected.png b/third_party/WebKit/LayoutTests/svg/dynamic-updates/SVGFEDropShadowElement-dom-in-attr-expected.png
similarity index 100%
rename from third_party/WebKit/LayoutTests/platform/mac/svg/dynamic-updates/SVGFEDropShadowElement-dom-in-attr-expected.png
rename to third_party/WebKit/LayoutTests/svg/dynamic-updates/SVGFEDropShadowElement-dom-in-attr-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/svg/dynamic-updates/SVGFEDropShadowElement-svgdom-dx-prop-expected.png b/third_party/WebKit/LayoutTests/svg/dynamic-updates/SVGFEDropShadowElement-svgdom-dx-prop-expected.png
similarity index 100%
rename from third_party/WebKit/LayoutTests/platform/mac/svg/dynamic-updates/SVGFEDropShadowElement-svgdom-dx-prop-expected.png
rename to third_party/WebKit/LayoutTests/svg/dynamic-updates/SVGFEDropShadowElement-svgdom-dx-prop-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/svg/dynamic-updates/SVGFEDropShadowElement-svgdom-dy-prop-expected.png b/third_party/WebKit/LayoutTests/svg/dynamic-updates/SVGFEDropShadowElement-svgdom-dy-prop-expected.png
similarity index 100%
rename from third_party/WebKit/LayoutTests/platform/mac/svg/dynamic-updates/SVGFEDropShadowElement-svgdom-dy-prop-expected.png
rename to third_party/WebKit/LayoutTests/svg/dynamic-updates/SVGFEDropShadowElement-svgdom-dy-prop-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/svg/dynamic-updates/SVGFEDropShadowElement-svgdom-in-prop-expected.png b/third_party/WebKit/LayoutTests/svg/dynamic-updates/SVGFEDropShadowElement-svgdom-in-prop-expected.png
similarity index 100%
rename from third_party/WebKit/LayoutTests/platform/mac/svg/dynamic-updates/SVGFEDropShadowElement-svgdom-in-prop-expected.png
rename to third_party/WebKit/LayoutTests/svg/dynamic-updates/SVGFEDropShadowElement-svgdom-in-prop-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/svg/dynamic-updates/SVGFEGaussianBlurElement-dom-in-attr-expected.png b/third_party/WebKit/LayoutTests/svg/dynamic-updates/SVGFEGaussianBlurElement-dom-in-attr-expected.png
similarity index 100%
rename from third_party/WebKit/LayoutTests/platform/mac/svg/dynamic-updates/SVGFEGaussianBlurElement-dom-in-attr-expected.png
rename to third_party/WebKit/LayoutTests/svg/dynamic-updates/SVGFEGaussianBlurElement-dom-in-attr-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/svg/dynamic-updates/SVGFEGaussianBlurElement-dom-stdDeviation-attr-expected.png b/third_party/WebKit/LayoutTests/svg/dynamic-updates/SVGFEGaussianBlurElement-dom-stdDeviation-attr-expected.png
similarity index 100%
rename from third_party/WebKit/LayoutTests/platform/mac/svg/dynamic-updates/SVGFEGaussianBlurElement-dom-stdDeviation-attr-expected.png
rename to third_party/WebKit/LayoutTests/svg/dynamic-updates/SVGFEGaussianBlurElement-dom-stdDeviation-attr-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/svg/dynamic-updates/SVGFEGaussianBlurElement-dom-stdDeviation-call-expected.png b/third_party/WebKit/LayoutTests/svg/dynamic-updates/SVGFEGaussianBlurElement-dom-stdDeviation-call-expected.png
similarity index 100%
rename from third_party/WebKit/LayoutTests/platform/mac/svg/dynamic-updates/SVGFEGaussianBlurElement-dom-stdDeviation-call-expected.png
rename to third_party/WebKit/LayoutTests/svg/dynamic-updates/SVGFEGaussianBlurElement-dom-stdDeviation-call-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/svg/dynamic-updates/SVGFEGaussianBlurElement-svgdom-in-prop-expected.png b/third_party/WebKit/LayoutTests/svg/dynamic-updates/SVGFEGaussianBlurElement-svgdom-in-prop-expected.png
similarity index 100%
rename from third_party/WebKit/LayoutTests/platform/mac/svg/dynamic-updates/SVGFEGaussianBlurElement-svgdom-in-prop-expected.png
rename to third_party/WebKit/LayoutTests/svg/dynamic-updates/SVGFEGaussianBlurElement-svgdom-in-prop-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/svg/dynamic-updates/SVGFESpecularLightingElement-dom-in-attr-expected.png b/third_party/WebKit/LayoutTests/svg/dynamic-updates/SVGFESpecularLightingElement-dom-in-attr-expected.png
index 4a196e4..eab1ad8 100644
--- a/third_party/WebKit/LayoutTests/svg/dynamic-updates/SVGFESpecularLightingElement-dom-in-attr-expected.png
+++ b/third_party/WebKit/LayoutTests/svg/dynamic-updates/SVGFESpecularLightingElement-dom-in-attr-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/svg/dynamic-updates/SVGFESpecularLightingElement-dom-kernelUnitLength-attr-expected.png b/third_party/WebKit/LayoutTests/svg/dynamic-updates/SVGFESpecularLightingElement-dom-kernelUnitLength-attr-expected.png
index bf354a6a..76e701b 100644
--- a/third_party/WebKit/LayoutTests/svg/dynamic-updates/SVGFESpecularLightingElement-dom-kernelUnitLength-attr-expected.png
+++ b/third_party/WebKit/LayoutTests/svg/dynamic-updates/SVGFESpecularLightingElement-dom-kernelUnitLength-attr-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/svg/dynamic-updates/SVGFESpecularLightingElement-dom-specularConstant-attr-expected.png b/third_party/WebKit/LayoutTests/svg/dynamic-updates/SVGFESpecularLightingElement-dom-specularConstant-attr-expected.png
index 4a196e4..eab1ad8 100644
--- a/third_party/WebKit/LayoutTests/svg/dynamic-updates/SVGFESpecularLightingElement-dom-specularConstant-attr-expected.png
+++ b/third_party/WebKit/LayoutTests/svg/dynamic-updates/SVGFESpecularLightingElement-dom-specularConstant-attr-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/svg/dynamic-updates/SVGFESpecularLightingElement-dom-specularExponent-attr-expected.png b/third_party/WebKit/LayoutTests/svg/dynamic-updates/SVGFESpecularLightingElement-dom-specularExponent-attr-expected.png
index 4a196e4..eab1ad8 100644
--- a/third_party/WebKit/LayoutTests/svg/dynamic-updates/SVGFESpecularLightingElement-dom-specularExponent-attr-expected.png
+++ b/third_party/WebKit/LayoutTests/svg/dynamic-updates/SVGFESpecularLightingElement-dom-specularExponent-attr-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/svg/dynamic-updates/SVGFESpecularLightingElement-dom-suraceScale-attr-expected.png b/third_party/WebKit/LayoutTests/svg/dynamic-updates/SVGFESpecularLightingElement-dom-suraceScale-attr-expected.png
index 4a196e4..eab1ad8 100644
--- a/third_party/WebKit/LayoutTests/svg/dynamic-updates/SVGFESpecularLightingElement-dom-suraceScale-attr-expected.png
+++ b/third_party/WebKit/LayoutTests/svg/dynamic-updates/SVGFESpecularLightingElement-dom-suraceScale-attr-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/svg/dynamic-updates/SVGFESpecularLightingElement-inherit-lighting-color-css-prop-expected.png b/third_party/WebKit/LayoutTests/svg/dynamic-updates/SVGFESpecularLightingElement-inherit-lighting-color-css-prop-expected.png
index 335045b..e828b3f 100644
--- a/third_party/WebKit/LayoutTests/svg/dynamic-updates/SVGFESpecularLightingElement-inherit-lighting-color-css-prop-expected.png
+++ b/third_party/WebKit/LayoutTests/svg/dynamic-updates/SVGFESpecularLightingElement-inherit-lighting-color-css-prop-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/svg/dynamic-updates/SVGFESpecularLightingElement-lighting-color-css-prop-expected.png b/third_party/WebKit/LayoutTests/svg/dynamic-updates/SVGFESpecularLightingElement-lighting-color-css-prop-expected.png
index 335045b..e828b3f 100644
--- a/third_party/WebKit/LayoutTests/svg/dynamic-updates/SVGFESpecularLightingElement-lighting-color-css-prop-expected.png
+++ b/third_party/WebKit/LayoutTests/svg/dynamic-updates/SVGFESpecularLightingElement-lighting-color-css-prop-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/svg/dynamic-updates/SVGFESpecularLightingElement-svgdom-in-prop-expected.png b/third_party/WebKit/LayoutTests/svg/dynamic-updates/SVGFESpecularLightingElement-svgdom-in-prop-expected.png
index 4a196e4..eab1ad8 100644
--- a/third_party/WebKit/LayoutTests/svg/dynamic-updates/SVGFESpecularLightingElement-svgdom-in-prop-expected.png
+++ b/third_party/WebKit/LayoutTests/svg/dynamic-updates/SVGFESpecularLightingElement-svgdom-in-prop-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/svg/dynamic-updates/SVGFESpecularLightingElement-svgdom-specularConstant-prop-expected.png b/third_party/WebKit/LayoutTests/svg/dynamic-updates/SVGFESpecularLightingElement-svgdom-specularConstant-prop-expected.png
index 4a196e4..eab1ad8 100644
--- a/third_party/WebKit/LayoutTests/svg/dynamic-updates/SVGFESpecularLightingElement-svgdom-specularConstant-prop-expected.png
+++ b/third_party/WebKit/LayoutTests/svg/dynamic-updates/SVGFESpecularLightingElement-svgdom-specularConstant-prop-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/svg/dynamic-updates/SVGFESpecularLightingElement-svgdom-specularExponent-prop-expected.png b/third_party/WebKit/LayoutTests/svg/dynamic-updates/SVGFESpecularLightingElement-svgdom-specularExponent-prop-expected.png
index 4a196e4..eab1ad8 100644
--- a/third_party/WebKit/LayoutTests/svg/dynamic-updates/SVGFESpecularLightingElement-svgdom-specularExponent-prop-expected.png
+++ b/third_party/WebKit/LayoutTests/svg/dynamic-updates/SVGFESpecularLightingElement-svgdom-specularExponent-prop-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/svg/dynamic-updates/SVGFESpecularLightingElement-svgdom-suraceScale-prop-expected.png b/third_party/WebKit/LayoutTests/svg/dynamic-updates/SVGFESpecularLightingElement-svgdom-suraceScale-prop-expected.png
index 4a196e4..eab1ad8 100644
--- a/third_party/WebKit/LayoutTests/svg/dynamic-updates/SVGFESpecularLightingElement-svgdom-suraceScale-prop-expected.png
+++ b/third_party/WebKit/LayoutTests/svg/dynamic-updates/SVGFESpecularLightingElement-svgdom-suraceScale-prop-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/svg/dynamic-updates/SVGFETurbulenceElement-dom-baseFrequency-attr-expected.png b/third_party/WebKit/LayoutTests/svg/dynamic-updates/SVGFETurbulenceElement-dom-baseFrequency-attr-expected.png
similarity index 100%
rename from third_party/WebKit/LayoutTests/platform/mac/svg/dynamic-updates/SVGFETurbulenceElement-dom-baseFrequency-attr-expected.png
rename to third_party/WebKit/LayoutTests/svg/dynamic-updates/SVGFETurbulenceElement-dom-baseFrequency-attr-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/svg/dynamic-updates/SVGFETurbulenceElement-dom-numOctaves-attr-expected.png b/third_party/WebKit/LayoutTests/svg/dynamic-updates/SVGFETurbulenceElement-dom-numOctaves-attr-expected.png
similarity index 100%
rename from third_party/WebKit/LayoutTests/platform/mac/svg/dynamic-updates/SVGFETurbulenceElement-dom-numOctaves-attr-expected.png
rename to third_party/WebKit/LayoutTests/svg/dynamic-updates/SVGFETurbulenceElement-dom-numOctaves-attr-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/svg/dynamic-updates/SVGFETurbulenceElement-dom-seed-attr-expected.png b/third_party/WebKit/LayoutTests/svg/dynamic-updates/SVGFETurbulenceElement-dom-seed-attr-expected.png
similarity index 100%
rename from third_party/WebKit/LayoutTests/platform/mac/svg/dynamic-updates/SVGFETurbulenceElement-dom-seed-attr-expected.png
rename to third_party/WebKit/LayoutTests/svg/dynamic-updates/SVGFETurbulenceElement-dom-seed-attr-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/svg/dynamic-updates/SVGFETurbulenceElement-dom-stitchTiles-attr-expected.png b/third_party/WebKit/LayoutTests/svg/dynamic-updates/SVGFETurbulenceElement-dom-stitchTiles-attr-expected.png
similarity index 100%
rename from third_party/WebKit/LayoutTests/platform/mac/svg/dynamic-updates/SVGFETurbulenceElement-dom-stitchTiles-attr-expected.png
rename to third_party/WebKit/LayoutTests/svg/dynamic-updates/SVGFETurbulenceElement-dom-stitchTiles-attr-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/svg/dynamic-updates/SVGFETurbulenceElement-dom-type-attr-expected.png b/third_party/WebKit/LayoutTests/svg/dynamic-updates/SVGFETurbulenceElement-dom-type-attr-expected.png
similarity index 100%
rename from third_party/WebKit/LayoutTests/platform/mac/svg/dynamic-updates/SVGFETurbulenceElement-dom-type-attr-expected.png
rename to third_party/WebKit/LayoutTests/svg/dynamic-updates/SVGFETurbulenceElement-dom-type-attr-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/svg/dynamic-updates/SVGFETurbulenceElement-svgdom-baseFrequency-prop-expected.png b/third_party/WebKit/LayoutTests/svg/dynamic-updates/SVGFETurbulenceElement-svgdom-baseFrequency-prop-expected.png
similarity index 100%
rename from third_party/WebKit/LayoutTests/platform/mac/svg/dynamic-updates/SVGFETurbulenceElement-svgdom-baseFrequency-prop-expected.png
rename to third_party/WebKit/LayoutTests/svg/dynamic-updates/SVGFETurbulenceElement-svgdom-baseFrequency-prop-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/svg/dynamic-updates/SVGFETurbulenceElement-svgdom-numOctaves-prop-expected.png b/third_party/WebKit/LayoutTests/svg/dynamic-updates/SVGFETurbulenceElement-svgdom-numOctaves-prop-expected.png
similarity index 100%
rename from third_party/WebKit/LayoutTests/platform/mac/svg/dynamic-updates/SVGFETurbulenceElement-svgdom-numOctaves-prop-expected.png
rename to third_party/WebKit/LayoutTests/svg/dynamic-updates/SVGFETurbulenceElement-svgdom-numOctaves-prop-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/svg/dynamic-updates/SVGFETurbulenceElement-svgdom-seed-prop-expected.png b/third_party/WebKit/LayoutTests/svg/dynamic-updates/SVGFETurbulenceElement-svgdom-seed-prop-expected.png
similarity index 100%
rename from third_party/WebKit/LayoutTests/platform/mac/svg/dynamic-updates/SVGFETurbulenceElement-svgdom-seed-prop-expected.png
rename to third_party/WebKit/LayoutTests/svg/dynamic-updates/SVGFETurbulenceElement-svgdom-seed-prop-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/svg/dynamic-updates/SVGFETurbulenceElement-svgdom-stitchTiles-prop-expected.png b/third_party/WebKit/LayoutTests/svg/dynamic-updates/SVGFETurbulenceElement-svgdom-stitchTiles-prop-expected.png
similarity index 100%
rename from third_party/WebKit/LayoutTests/platform/mac/svg/dynamic-updates/SVGFETurbulenceElement-svgdom-stitchTiles-prop-expected.png
rename to third_party/WebKit/LayoutTests/svg/dynamic-updates/SVGFETurbulenceElement-svgdom-stitchTiles-prop-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/svg/dynamic-updates/SVGFETurbulenceElement-svgdom-type-prop-expected.png b/third_party/WebKit/LayoutTests/svg/dynamic-updates/SVGFETurbulenceElement-svgdom-type-prop-expected.png
similarity index 100%
rename from third_party/WebKit/LayoutTests/platform/mac/svg/dynamic-updates/SVGFETurbulenceElement-svgdom-type-prop-expected.png
rename to third_party/WebKit/LayoutTests/svg/dynamic-updates/SVGFETurbulenceElement-svgdom-type-prop-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/svg/filters/color-interpolation-filters-expected.png b/third_party/WebKit/LayoutTests/svg/filters/color-interpolation-filters-expected.png
similarity index 100%
rename from third_party/WebKit/LayoutTests/platform/mac/svg/filters/color-interpolation-filters-expected.png
rename to third_party/WebKit/LayoutTests/svg/filters/color-interpolation-filters-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/svg/filters/feColorMatrix-offset-expected.png b/third_party/WebKit/LayoutTests/svg/filters/feColorMatrix-offset-expected.png
index 587ffa30..ea21e78 100644
--- a/third_party/WebKit/LayoutTests/svg/filters/feColorMatrix-offset-expected.png
+++ b/third_party/WebKit/LayoutTests/svg/filters/feColorMatrix-offset-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/svg/filters/feGaussianBlur-expected.png b/third_party/WebKit/LayoutTests/svg/filters/feGaussianBlur-expected.png
similarity index 100%
rename from third_party/WebKit/LayoutTests/platform/mac/svg/filters/feGaussianBlur-expected.png
rename to third_party/WebKit/LayoutTests/svg/filters/feGaussianBlur-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/svg/filters/feImage-preserveAspectRatio-all-expected.png b/third_party/WebKit/LayoutTests/svg/filters/feImage-preserveAspectRatio-all-expected.png
similarity index 100%
rename from third_party/WebKit/LayoutTests/platform/mac/svg/filters/feImage-preserveAspectRatio-all-expected.png
rename to third_party/WebKit/LayoutTests/svg/filters/feImage-preserveAspectRatio-all-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/svg/filters/feImage-preserveAspectratio-expected.png b/third_party/WebKit/LayoutTests/svg/filters/feImage-preserveAspectratio-expected.png
similarity index 100%
rename from third_party/WebKit/LayoutTests/platform/mac/svg/filters/feImage-preserveAspectratio-expected.png
rename to third_party/WebKit/LayoutTests/svg/filters/feImage-preserveAspectratio-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/svg/filters/feTurbulence-scale-expected.png b/third_party/WebKit/LayoutTests/svg/filters/feTurbulence-scale-expected.png
similarity index 100%
rename from third_party/WebKit/LayoutTests/platform/mac/svg/filters/feTurbulence-scale-expected.png
rename to third_party/WebKit/LayoutTests/svg/filters/feTurbulence-scale-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/svg/filters/feTurbulence-tiled-expected.png b/third_party/WebKit/LayoutTests/svg/filters/feTurbulence-tiled-expected.png
similarity index 100%
rename from third_party/WebKit/LayoutTests/platform/mac/svg/filters/feTurbulence-tiled-expected.png
rename to third_party/WebKit/LayoutTests/svg/filters/feTurbulence-tiled-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/svg/filters/filter-source-position-expected.png b/third_party/WebKit/LayoutTests/svg/filters/filter-source-position-expected.png
similarity index 100%
rename from third_party/WebKit/LayoutTests/platform/mac/svg/filters/filter-source-position-expected.png
rename to third_party/WebKit/LayoutTests/svg/filters/filter-source-position-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/svg/filters/filteredImage-expected.png b/third_party/WebKit/LayoutTests/svg/filters/filteredImage-expected.png
similarity index 100%
rename from third_party/WebKit/LayoutTests/platform/mac/svg/filters/filteredImage-expected.png
rename to third_party/WebKit/LayoutTests/svg/filters/filteredImage-expected.png
Binary files differ
diff --git a/third_party/WebKit/Source/bindings/bindings.gni b/third_party/WebKit/Source/bindings/bindings.gni
index a86b000..81dc3c93 100644
--- a/third_party/WebKit/Source/bindings/bindings.gni
+++ b/third_party/WebKit/Source/bindings/bindings.gni
@@ -23,7 +23,6 @@
                     "core/v8/custom/V8MessageChannelCustom.cpp",
                     "core/v8/custom/V8MessageEventCustom.cpp",
                     "core/v8/custom/V8MutationObserverCustom.cpp",
-                    "core/v8/custom/V8PerformanceObserverCustom.cpp",
                     "core/v8/custom/V8PopStateEventCustom.cpp",
                     "core/v8/custom/V8PromiseRejectionEventCustom.cpp",
                     "core/v8/custom/V8WindowCustom.cpp",
diff --git a/third_party/WebKit/Source/bindings/core/v8/custom/V8PerformanceObserverCustom.cpp b/third_party/WebKit/Source/bindings/core/v8/custom/V8PerformanceObserverCustom.cpp
deleted file mode 100644
index 128c1e0..0000000
--- a/third_party/WebKit/Source/bindings/core/v8/custom/V8PerformanceObserverCustom.cpp
+++ /dev/null
@@ -1,69 +0,0 @@
-// Copyright 2015 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "bindings/core/v8/V8PerformanceObserver.h"
-
-#include "bindings/core/v8/ExceptionMessages.h"
-#include "bindings/core/v8/PerformanceObserverCallback.h"
-#include "bindings/core/v8/V8BindingForCore.h"
-#include "bindings/core/v8/V8GCController.h"
-#include "bindings/core/v8/V8Performance.h"
-#include "core/frame/LocalDOMWindow.h"
-#include "core/timing/DOMWindowPerformance.h"
-#include "core/timing/PerformanceObserver.h"
-#include "platform/bindings/V8DOMWrapper.h"
-#include "platform/bindings/V8PrivateProperty.h"
-
-namespace blink {
-
-void V8PerformanceObserver::constructorCustom(
-    const v8::FunctionCallbackInfo<v8::Value>& info) {
-  v8::Isolate* isolate = info.GetIsolate();
-
-  if (UNLIKELY(info.Length() < 1)) {
-    V8ThrowException::ThrowTypeError(
-        isolate, ExceptionMessages::FailedToConstruct(
-                     "PerformanceObserver",
-                     ExceptionMessages::NotEnoughArguments(1, info.Length())));
-    return;
-  }
-
-  v8::Local<v8::Object> wrapper = info.Holder();
-
-  Performance* performance = nullptr;
-  LocalDOMWindow* window = ToLocalDOMWindow(wrapper->CreationContext());
-  if (!window) {
-    V8ThrowException::ThrowTypeError(
-        isolate, ExceptionMessages::FailedToConstruct(
-                     "PerformanceObserver", "No 'window' in current context."));
-    return;
-  }
-  performance = DOMWindowPerformance::performance(*window);
-  DCHECK(performance);
-
-  if (info.Length() <= 0 || !info[0]->IsFunction()) {
-    V8ThrowException::ThrowTypeError(
-        isolate,
-        ExceptionMessages::FailedToConstruct(
-            "PerformanceObserver",
-            "The callback provided as parameter 1 is not a function."));
-    return;
-  }
-  ScriptState* script_state = ScriptState::ForReceiverObject(info);
-  v8::Local<v8::Function> v8_callback = v8::Local<v8::Function>::Cast(info[0]);
-  PerformanceObserverCallback* callback =
-      PerformanceObserverCallback::Create(script_state, v8_callback);
-
-  PerformanceObserver* observer = PerformanceObserver::Create(
-      CurrentExecutionContext(isolate), performance, callback);
-
-  // TODO(bashi): Don't set private property (and remove this custom
-  // constructor) when we can trace correctly. See crbug.com/468240.
-  V8PrivateProperty::GetPerformanceObserverCallback(isolate).Set(wrapper,
-                                                                 v8_callback);
-  V8SetReturnValue(info, V8DOMWrapper::AssociateObjectWithWrapper(
-                             isolate, observer, &wrapperTypeInfo, wrapper));
-}
-
-}  // namespace blink
diff --git a/third_party/WebKit/Source/core/BUILD.gn b/third_party/WebKit/Source/core/BUILD.gn
index 8b26fa3..22c62c0 100644
--- a/third_party/WebKit/Source/core/BUILD.gn
+++ b/third_party/WebKit/Source/core/BUILD.gn
@@ -1439,6 +1439,7 @@
     "layout/ng/geometry/ng_physical_rect_test.cc",
     "layout/ng/inline/ng_inline_items_builder_test.cc",
     "layout/ng/inline/ng_inline_layout_algorithm_test.cc",
+    "layout/ng/inline/ng_inline_node_offset_mapping_test.cc",
     "layout/ng/inline/ng_inline_node_test.cc",
     "layout/ng/inline/ng_line_breaker_test.cc",
     "layout/ng/ng_absolute_utils_test.cc",
diff --git a/third_party/WebKit/Source/core/editing/BUILD.gn b/third_party/WebKit/Source/core/editing/BUILD.gn
index f4a1489..6293673 100644
--- a/third_party/WebKit/Source/core/editing/BUILD.gn
+++ b/third_party/WebKit/Source/core/editing/BUILD.gn
@@ -287,13 +287,6 @@
     sources += [ "commands/SmartReplaceCF.cpp" ]
   }
 
-  if (is_mac) {
-    jumbo_excluded_sources = [
-      # Using "using blink" in global scope.
-      "WebSubstringUtil.mm",
-    ]
-  }
-
   configs += [
     # TODO(jschuh): crbug.com/167187 fix size_t to int truncations.
     "//build/config/compiler:no_size_t_to_int_warning",
diff --git a/third_party/WebKit/Source/core/editing/WebSubstringUtil.mm b/third_party/WebKit/Source/core/editing/WebSubstringUtil.mm
index ca0473f..752ed80 100644
--- a/third_party/WebKit/Source/core/editing/WebSubstringUtil.mm
+++ b/third_party/WebKit/Source/core/editing/WebSubstringUtil.mm
@@ -58,11 +58,12 @@
 #include "public/web/WebHitTestResult.h"
 #include "public/web/WebLocalFrame.h"
 
-using namespace blink;
+namespace blink {
 
-static NSAttributedString* attributedSubstringFromRange(
-    const EphemeralRange& range,
-    float fontScale) {
+namespace {
+
+NSAttributedString* attributedSubstringFromRange(const EphemeralRange& range,
+                                                 float fontScale) {
   NSMutableAttributedString* string = [[NSMutableAttributedString alloc] init];
   NSMutableDictionary* attrs = [NSMutableDictionary dictionary];
   size_t length = range.EndPosition().ComputeOffsetInContainerNode() -
@@ -149,7 +150,7 @@
   return stringPoint;
 }
 
-namespace blink {
+}  // namespace
 
 NSAttributedString* WebSubstringUtil::AttributedWordAtPoint(
     WebFrameWidget* frame_widget,
diff --git a/third_party/WebKit/Source/core/imagebitmap/ImageBitmap.cpp b/third_party/WebKit/Source/core/imagebitmap/ImageBitmap.cpp
index 399e5c2..cb5d3fb7 100644
--- a/third_party/WebKit/Source/core/imagebitmap/ImageBitmap.cpp
+++ b/third_party/WebKit/Source/core/imagebitmap/ImageBitmap.cpp
@@ -21,6 +21,7 @@
 #include "third_party/skia/include/core/SkColorSpaceXformCanvas.h"
 #include "third_party/skia/include/core/SkImageInfo.h"
 #include "third_party/skia/include/core/SkSurface.h"
+#include "third_party/skia/include/core/SkSwizzle.h"
 
 namespace blink {
 
@@ -38,10 +39,6 @@
 
 namespace {
 
-ImageBitmap::ParsedOptions DefaultOptions() {
-  return ImageBitmap::ParsedOptions();
-}
-
 // The following two functions are helpers used in cropImage
 static inline IntRect NormalizeRect(const IntRect& rect) {
   return IntRect(std::min(rect.X(), rect.MaxX()),
@@ -73,6 +70,8 @@
         RuntimeEnabledFeatures::ColorCanvasExtensionsEnabled();
     if (!parsed_options.color_canvas_extensions_enabled) {
       DCHECK_EQ(options.colorSpaceConversion(), kImageBitmapOptionDefault);
+      parsed_options.color_params.SetCanvasColorSpace(kLegacyCanvasColorSpace);
+      parsed_options.color_canvas_extensions_enabled = true;
     } else {
       if (options.colorSpaceConversion() == kImageBitmapOptionDefault ||
           options.colorSpaceConversion() ==
@@ -182,7 +181,7 @@
 }
 
 static PassRefPtr<Uint8Array> CopySkImageData(sk_sp<SkImage> input,
-                                              const SkImageInfo& info) {
+                                              SkImageInfo info) {
   unsigned width = static_cast<unsigned>(input->width());
   RefPtr<ArrayBuffer> dst_buffer =
       ArrayBuffer::CreateOrNull(width * input->height(), info.bytesPerPixel());
@@ -200,51 +199,33 @@
   return CopySkImageData(input, GetSkImageSkImageInfo(input.get()));
 }
 
-static sk_sp<SkImage> NewSkImageFromRaster(const SkImageInfo& info,
-                                           PassRefPtr<Uint8Array> image_pixels,
-                                           unsigned image_row_bytes) {
+static sk_sp<SkImage> NewSkImageFromRaster(
+    const SkImageInfo& info,
+    PassRefPtr<Uint8Array> image_pixels) {
+  unsigned image_row_bytes = info.width() * info.bytesPerPixel();
   SkPixmap pixmap(info, image_pixels->Data(), image_row_bytes);
-  return SkImage::MakeFromRaster(pixmap,
-                                 [](const void*, void* pixels) {
-                                   static_cast<Uint8Array*>(pixels)->Deref();
-                                 },
+  auto raster_release_proc = [](const void*, void* pixels) {
+    static_cast<Uint8Array*>(pixels)->Deref();
+  };
+  return SkImage::MakeFromRaster(pixmap, raster_release_proc,
                                  image_pixels.LeakRef());
 }
 
-enum AlphaPremultiplyEnforcement {
-  kEnforceAlphaPremultiply,
-  kDontEnforceAlphaPremultiply,
-};
-
-static sk_sp<SkImage> FlipSkImageVertically(
-    sk_sp<SkImage> input,
-    AlphaPremultiplyEnforcement premultiply_enforcement =
-        kDontEnforceAlphaPremultiply,
-    const ImageBitmap::ParsedOptions& options = DefaultOptions()) {
-  unsigned width = static_cast<unsigned>(input->width());
-  unsigned height = static_cast<unsigned>(input->height());
-  SkAlphaType alpha_type =
-      ((premultiply_enforcement == kEnforceAlphaPremultiply) ||
-       options.premultiply_alpha)
-          ? kPremul_SkAlphaType
-          : kUnpremul_SkAlphaType;
-  SkImageInfo info = SkImageInfo::Make(input->width(), input->height(),
-                                       options.color_params.GetSkColorType(),
-                                       alpha_type, input->refColorSpace());
-
-  unsigned image_row_bytes = width * info.bytesPerPixel();
-  RefPtr<Uint8Array> image_pixels = CopySkImageData(input, info);
+static sk_sp<SkImage> FlipSkImageVertically(sk_sp<SkImage> input) {
+  RefPtr<Uint8Array> image_pixels = CopySkImageData(input);
   if (!image_pixels)
     return nullptr;
-  for (unsigned i = 0; i < height / 2; i++) {
+  SkImageInfo info = GetSkImageSkImageInfo(input.get());
+  unsigned image_row_bytes = info.width() * info.bytesPerPixel();
+  for (int i = 0; i < info.height() / 2; i++) {
     unsigned top_first_element = i * image_row_bytes;
     unsigned top_last_element = (i + 1) * image_row_bytes;
-    unsigned bottom_first_element = (height - 1 - i) * image_row_bytes;
+    unsigned bottom_first_element = (info.height() - 1 - i) * image_row_bytes;
     std::swap_ranges(image_pixels->Data() + top_first_element,
                      image_pixels->Data() + top_last_element,
                      image_pixels->Data() + bottom_first_element);
   }
-  return NewSkImageFromRaster(info, std::move(image_pixels), image_row_bytes);
+  return NewSkImageFromRaster(info, std::move(image_pixels));
 }
 
 static sk_sp<SkImage> GetSkImageWithAlphaDisposition(
@@ -256,18 +237,68 @@
   if (image->alphaType() == alpha_type)
     return image;
 
-  SkColorType color_type = kN32_SkColorType;
-  if (image->colorSpace() && image->refColorSpace()->gammaIsLinear())
-    color_type = kRGBA_F16_SkColorType;
-  SkImageInfo info = SkImageInfo::Make(image->width(), image->height(),
-                                       color_type, alpha_type);
-
+  SkImageInfo info = GetSkImageSkImageInfo(image.get());
+  info = info.makeAlphaType(alpha_type);
   RefPtr<Uint8Array> dst_pixels = CopySkImageData(image, info);
   if (!dst_pixels)
     return nullptr;
-  return NewSkImageFromRaster(
-      info, std::move(dst_pixels),
-      static_cast<unsigned>(image->width()) * info.bytesPerPixel());
+  return NewSkImageFromRaster(info, std::move(dst_pixels));
+}
+
+static sk_sp<SkImage> ScaleSkImage(sk_sp<SkImage> image,
+                                   unsigned resize_width,
+                                   unsigned resize_height,
+                                   SkFilterQuality resize_quality) {
+  SkAlphaType original_alpha = image->alphaType();
+  auto pm_image = image;
+  auto pm_info = GetSkImageSkImageInfo(image.get());
+  if (original_alpha == kUnpremul_SkAlphaType) {
+    pm_info = pm_info.makeAlphaType(kPremul_SkAlphaType);
+    SkPixmap pm_pixmap;
+    if (!image->peekPixels(&pm_pixmap))
+      return nullptr;
+    pm_pixmap.reset(pm_info, pm_pixmap.addr(), pm_pixmap.rowBytes());
+    pm_image = SkImage::MakeFromRaster(pm_pixmap, nullptr, nullptr);
+  }
+
+  RefPtr<ArrayBuffer> dst_buffer = ArrayBuffer::CreateOrNull(
+      resize_width * resize_height, pm_info.bytesPerPixel());
+  if (!dst_buffer)
+    return nullptr;
+  RefPtr<Uint8Array> resized_pixels =
+      Uint8Array::Create(dst_buffer, 0, dst_buffer->ByteLength());
+  SkImageInfo pm_resized_info = pm_info.makeWH(resize_width, resize_height);
+  SkPixmap pm_resized_pixmap(pm_resized_info, resized_pixels->Data(),
+                             resize_width * pm_info.bytesPerPixel());
+
+  // When the original image is unpremul and is tagged as premul, calling
+  // SkImage::scalePixels() with parameter kHigh_SkFilterQuality clamps RGB
+  // components to alpha (bugs.chromium.org/p/skia/issues/detail?id=6855).
+  // As a workaround, we downgrade kHigh_SkFilterQuality to kMedium_ for
+  // unpremul images. This does not affect the quality of down-scaling,
+  // but should be fixed to get the highest upscaling quality.
+  // Bug: 744636.
+  if (original_alpha == kUnpremul_SkAlphaType &&
+      resize_quality == kHigh_SkFilterQuality)
+    resize_quality = kMedium_SkFilterQuality;
+
+  // Only scale in premul
+  pm_image->scalePixels(pm_resized_pixmap, resize_quality);
+  auto raster_release_proc = [](const void*, void* pixels) {
+    static_cast<Uint8Array*>(pixels)->Deref();
+  };
+  sk_sp<SkImage> resized_image;
+  if (original_alpha == kPremul_SkAlphaType) {
+    resized_image = SkImage::MakeFromRaster(
+        pm_resized_pixmap, raster_release_proc, resized_pixels.LeakRef());
+  } else {
+    SkPixmap upm_resized_pixmap(
+        pm_resized_info.makeAlphaType(kUnpremul_SkAlphaType),
+        resized_pixels->Data(), resize_width * pm_info.bytesPerPixel());
+    resized_image = SkImage::MakeFromRaster(
+        upm_resized_pixmap, raster_release_proc, resized_pixels.LeakRef());
+  }
+  return resized_image;
 }
 
 static void ApplyColorSpaceConversion(sk_sp<SkImage>& image,
@@ -277,65 +308,38 @@
     image = image->makeColorSpace(options.color_params.GetSkColorSpace(),
                                   SkTransferFunctionBehavior::kIgnore);
   }
-  if (!options.color_canvas_extensions_enabled)
+  if (!options.color_canvas_extensions_enabled || !image->colorSpace())
     return;
 
-  SkColorType dst_color_type = options.color_params.GetSkColorType();
-  sk_sp<SkColorSpace> dst_color_space = options.color_params.GetSkColorSpace();
+  sk_sp<SkColorSpace> dst_color_space =
+      options.color_params.GetSkColorSpaceForSkSurfaces();
+  DCHECK(dst_color_space.get());
   if (SkColorSpace::Equals(image->colorSpace(), dst_color_space.get()))
     return;
 
-  SkImageInfo dst_info =
-      SkImageInfo::Make(image->width(), image->height(), dst_color_type,
-                        image->alphaType(), dst_color_space);
-
+  SkImageInfo dst_info = SkImageInfo::Make(
+      image->width(), image->height(), options.color_params.GetSkColorType(),
+      image->alphaType(), dst_color_space);
   size_t size = image->width() * image->height() * dst_info.bytesPerPixel();
   sk_sp<SkData> dst_data = SkData::MakeUninitialized(size);
   if (dst_data->size() != size)
     return;
-  sk_sp<SkImage> colored_image = nullptr;
-  // The desired way to apply color space conversion on a SkImage is to use
-  // SkImage::readPixels.
   if (image->readPixels(dst_info, dst_data->writable_data(),
                         image->width() * dst_info.bytesPerPixel(), 0, 0)) {
-    colored_image = SkImage::MakeRasterData(
-        dst_info, dst_data, image->width() * dst_info.bytesPerPixel());
-  } else {
-    // However, if the SkImage is GPU-backed, readPixels might not work
-    // properly (skia:6021). In this case, we fall back to drawing the
-    // SkImage to a canvas and reading back the result.
-    // Skia does not support drawing to unpremul surfaces/canvases.
-    sk_sp<SkImage> un_premul_image = nullptr;
-    if (image->alphaType() == kUnpremul_SkAlphaType) {
-      un_premul_image =
-          GetSkImageWithAlphaDisposition(image, kPremultiplyAlpha);
-      dst_info = dst_info.makeAlphaType(kPremul_SkAlphaType);
-    }
-
-    // If the color space of the source SkImage is null, the following code
-    // does not do any color conversion. This cannot be addressed here and
-    // the code that creates the SkImage must tag the SkImage with proper
-    // color space.
-    sk_sp<SkSurface> surface = SkSurface::MakeRaster(dst_info);
-    if (!surface)
-      return;
-    surface->getCanvas()->drawImage(
-        un_premul_image ? un_premul_image : sk_sp<SkImage>(image), 0, 0);
-    colored_image = surface->makeImageSnapshot();
-  }
-
-  if (!colored_image)
+    image = SkImage::MakeRasterData(dst_info, dst_data,
+                                    image->width() * dst_info.bytesPerPixel());
     return;
-  image = colored_image;
+  }
+  NOTREACHED();
+  return;
 }
 
 static RefPtr<StaticBitmapImage> MakeBlankImage(
-    const ImageBitmap::ParsedOptions& parsed_options,
-    const SkAlphaType alpha_type) {
+    const ImageBitmap::ParsedOptions& parsed_options) {
   SkImageInfo info = SkImageInfo::Make(
       parsed_options.crop_rect.Width(), parsed_options.crop_rect.Height(),
-      parsed_options.color_params.GetSkColorType(), alpha_type,
-      parsed_options.color_params.GetSkColorSpace());
+      parsed_options.color_params.GetSkColorType(), kPremul_SkAlphaType,
+      parsed_options.color_params.GetSkColorSpaceForSkSurfaces());
   if (parsed_options.should_scale_input) {
     info =
         info.makeWH(parsed_options.resize_width, parsed_options.resize_height);
@@ -347,22 +351,14 @@
 }
 
 sk_sp<SkImage> ImageBitmap::GetSkImageFromDecoder(
-    std::unique_ptr<ImageDecoder> decoder,
-    SkColorType* decoded_color_type,
-    sk_sp<SkColorSpace>* decoded_color_space,
-    ColorSpaceInfoUpdate color_space_info_update) {
+    std::unique_ptr<ImageDecoder> decoder) {
   if (!decoder->FrameCount())
     return nullptr;
   ImageFrame* frame = decoder->FrameBufferAtIndex(0);
   if (!frame || frame->GetStatus() != ImageFrame::kFrameComplete)
     return nullptr;
   DCHECK(!frame->Bitmap().isNull() && !frame->Bitmap().empty());
-  sk_sp<SkImage> image = frame->FinalizePixelsAndGetImage();
-  if (color_space_info_update == kUpdateColorSpaceInformation) {
-    *decoded_color_type = frame->Bitmap().colorType();
-    *decoded_color_space = sk_sp<SkColorSpace>(frame->Bitmap().colorSpace());
-  }
-  return image;
+  return frame->FinalizePixelsAndGetImage();
 }
 
 bool ImageBitmap::IsResizeOptionValid(const ImageBitmapOptions& options,
@@ -389,32 +385,24 @@
   return true;
 }
 
-// The parameter imageFormat indicates whether the first parameter "image" is
-// unpremultiplied or not.  imageFormat = PremultiplyAlpha means the image is in
-// premuliplied format For example, if the image is already in unpremultiplied
-// format and we want the created ImageBitmap in the same format, then we don't
-// need to use the ImageDecoder to decode the image.
 static PassRefPtr<StaticBitmapImage> CropImageAndApplyColorSpaceConversion(
     RefPtr<Image> image,
     ImageBitmap::ParsedOptions& parsed_options,
-    AlphaDisposition image_format,
     ColorBehavior color_behavior = ColorBehavior::TransformToGlobalTarget()) {
   DCHECK(image);
   IntRect img_rect(IntPoint(), IntSize(image->width(), image->height()));
   const IntRect src_rect = Intersection(img_rect, parsed_options.crop_rect);
 
-  // In the case when cropRect doesn't intersect the source image, we
-  // return a transparent black image, respecting the color_params but
-  // ignoring premultiply_alpha.
-  if (src_rect.IsEmpty()) {
-    return MakeBlankImage(parsed_options, kPremul_SkAlphaType);
-  }
+  // If cropRect doesn't intersect the source image, return a transparent black
+  // image.
+  if (src_rect.IsEmpty())
+    return MakeBlankImage(parsed_options);
 
   sk_sp<SkImage> skia_image = image->ImageForCurrentFrame();
   // Attempt to get raw unpremultiplied image data, executed only when
   // skia_image is premultiplied.
   if ((((!image->IsSVGImage() && !skia_image->isOpaque()) || !skia_image) &&
-       image->Data() && image_format == kPremultiplyAlpha) ||
+       image->Data() && skia_image->alphaType() == kPremul_SkAlphaType) ||
       color_behavior.IsIgnore()) {
     std::unique_ptr<ImageDecoder> decoder(ImageDecoder::Create(
         image->Data(), true,
@@ -423,66 +411,33 @@
         color_behavior));
     if (!decoder)
       return nullptr;
-    SkColorType color_type = parsed_options.color_params.GetSkColorType();
-    sk_sp<SkColorSpace> color_space =
-        parsed_options.color_params.GetSkColorSpace();
-    skia_image = ImageBitmap::GetSkImageFromDecoder(
-        std::move(decoder), &color_type, &color_space,
-        kUpdateColorSpaceInformation);
+    skia_image = ImageBitmap::GetSkImageFromDecoder(std::move(decoder));
     if (!skia_image)
       return nullptr;
   }
 
-  if (!parsed_options.should_scale_input) {
-    sk_sp<SkImage> cropped_sk_image = skia_image->makeSubset(src_rect);
-    ApplyColorSpaceConversion(cropped_sk_image, parsed_options);
-    if (parsed_options.flip_y) {
-      return StaticBitmapImage::Create(FlipSkImageVertically(
-          cropped_sk_image, kDontEnforceAlphaPremultiply, parsed_options));
-    }
-    // Special case: The first parameter image is unpremul but we need to turn
-    // it into premul.
-    if (parsed_options.premultiply_alpha &&
-        image_format == kDontPremultiplyAlpha) {
-      return StaticBitmapImage::Create(
-          GetSkImageWithAlphaDisposition(cropped_sk_image, kPremultiplyAlpha));
-    }
-    return StaticBitmapImage::Create(std::move(cropped_sk_image));
+  if (src_rect != img_rect)
+    skia_image = skia_image->makeSubset(src_rect);
+
+  // flip if needed
+  if (parsed_options.flip_y)
+    skia_image = FlipSkImageVertically(skia_image);
+
+  // premultiply / unpremultiply if needed
+  skia_image = GetSkImageWithAlphaDisposition(
+      skia_image, parsed_options.premultiply_alpha ? kPremultiplyAlpha
+                                                   : kDontPremultiplyAlpha);
+
+  // resize if needed
+  if (parsed_options.should_scale_input) {
+    skia_image = ScaleSkImage(skia_image, parsed_options.resize_width,
+                              parsed_options.resize_height,
+                              parsed_options.resize_quality);
   }
 
-  SkImageInfo info = SkImageInfo::Make(
-      parsed_options.resize_width, parsed_options.resize_height,
-      parsed_options.color_params.GetSkColorType(),
-      parsed_options.premultiply_alpha ? kPremul_SkAlphaType
-                                       : kUnpremul_SkAlphaType,
-      parsed_options.color_params.GetSkColorSpace());
-  sk_sp<SkSurface> surface = SkSurface::MakeRaster(info);
-  if (!surface)
-    return nullptr;
-  if (parsed_options.flip_y) {
-    surface->getCanvas()->translate(0, surface->height());
-    surface->getCanvas()->scale(1, -1);
-  }
-
-  SkRect draw_src_rect(parsed_options.crop_rect);
-  SkRect draw_dst_rect =
-      SkRect::MakeWH(parsed_options.resize_width, parsed_options.resize_height);
-  SkPaint paint;
-  paint.setFilterQuality(parsed_options.resize_quality);
-  surface->getCanvas()->drawImageRect(skia_image, draw_src_rect, draw_dst_rect,
-                                      &paint);
-  skia_image = surface->makeImageSnapshot();
+  // color correct the image
   ApplyColorSpaceConversion(skia_image, parsed_options);
-
-  if (parsed_options.premultiply_alpha) {
-    if (image_format == kDontPremultiplyAlpha) {
-      return StaticBitmapImage::Create(
-          GetSkImageWithAlphaDisposition(skia_image, kPremultiplyAlpha));
-    }
-    return StaticBitmapImage::Create(std::move(skia_image));
-  }
-  return StaticBitmapImage::Create(
-      GetSkImageWithAlphaDisposition(skia_image, kDontPremultiplyAlpha));
+  return StaticBitmapImage::Create(std::move(skia_image));
 }
 
 ImageBitmap::ImageBitmap(ImageElementBase* image,
@@ -495,13 +450,8 @@
   if (DstBufferSizeHasOverflow(parsed_options))
     return;
 
-  bool is_premultiply_alpha_reverted = false;
-  if (!parsed_options.premultiply_alpha) {
-    parsed_options.premultiply_alpha = true;
-    is_premultiply_alpha_reverted = true;
-  }
   image_ = CropImageAndApplyColorSpaceConversion(
-      input, parsed_options, kPremultiplyAlpha,
+      input, parsed_options,
       options.colorSpaceConversion() == kImageBitmapOptionNone
           ? ColorBehavior::Ignore()
           : ColorBehavior::TransformToGlobalTarget());
@@ -533,14 +483,6 @@
   if (!image_)
     return;
 
-  if (is_premultiply_alpha_reverted) {
-    parsed_options.premultiply_alpha = false;
-    image_ = StaticBitmapImage::Create(GetSkImageWithAlphaDisposition(
-        image_->ImageForCurrentFrame(), kDontPremultiplyAlpha));
-  }
-  if (!image_)
-    return;
-
   image_->SetOriginClean(
       !image->WouldTaintOrigin(document->GetSecurityOrigin()));
   image_->SetPremultiplied(parsed_options.premultiply_alpha);
@@ -550,51 +492,26 @@
                          Optional<IntRect> crop_rect,
                          Document* document,
                          const ImageBitmapOptions& options) {
-  IntSize player_size;
-  if (video->GetWebMediaPlayer())
-    player_size = video->GetWebMediaPlayer()->NaturalSize();
   ParsedOptions parsed_options =
       ParseOptions(options, crop_rect, video->BitmapSourceSize());
   if (DstBufferSizeHasOverflow(parsed_options))
     return;
 
-  std::unique_ptr<ImageBuffer> buffer = ImageBuffer::Create(
-      IntSize(parsed_options.resize_width, parsed_options.resize_height),
-      kNonOpaque, kDoNotInitializeImagePixels);
+  std::unique_ptr<ImageBuffer> buffer =
+      ImageBuffer::Create(IntSize(video->videoWidth(), video->videoHeight()),
+                          kNonOpaque, kDoNotInitializeImagePixels);
   if (!buffer)
     return;
 
-  IntPoint dst_point =
-      IntPoint(-parsed_options.crop_rect.X(), -parsed_options.crop_rect.Y());
-  if (parsed_options.flip_y) {
-    buffer->Canvas()->translate(0, buffer->size().Height());
-    buffer->Canvas()->scale(1, -1);
-  }
-  PaintFlags flags;
-  if (parsed_options.should_scale_input) {
-    float scale_ratio_x = static_cast<float>(parsed_options.resize_width) /
-                          parsed_options.crop_rect.Width();
-    float scale_ratio_y = static_cast<float>(parsed_options.resize_height) /
-                          parsed_options.crop_rect.Height();
-    buffer->Canvas()->scale(scale_ratio_x, scale_ratio_y);
-    flags.setFilterQuality(parsed_options.resize_quality);
-  }
-  buffer->Canvas()->translate(dst_point.X(), dst_point.Y());
   video->PaintCurrentFrame(
       buffer->Canvas(),
       IntRect(IntPoint(), IntSize(video->videoWidth(), video->videoHeight())),
-      parsed_options.should_scale_input ? &flags : nullptr);
-
-  sk_sp<SkImage> skia_image =
-      buffer->NewSkImageSnapshot(kPreferNoAcceleration, kSnapshotReasonUnknown);
-  ApplyColorSpaceConversion(skia_image, parsed_options);
-  if (!parsed_options.premultiply_alpha) {
-    skia_image =
-        GetSkImageWithAlphaDisposition(skia_image, kDontPremultiplyAlpha);
-  }
-  if (!skia_image)
+      nullptr);
+  RefPtr<Image> input = buffer->NewImageSnapshot();
+  image_ = CropImageAndApplyColorSpaceConversion(input, parsed_options);
+  if (!image_)
     return;
-  image_ = StaticBitmapImage::Create(std::move(skia_image));
+
   image_->SetOriginClean(
       !video->WouldTaintOrigin(document->GetSecurityOrigin()));
   image_->SetPremultiplied(parsed_options.premultiply_alpha);
@@ -611,28 +528,16 @@
     input = canvas->CopiedImage(kBackBuffer, kPreferAcceleration,
                                 kSnapshotReasonCreateImageBitmap);
   }
+
   ParsedOptions parsed_options = ParseOptions(
       options, crop_rect, IntSize(input->width(), input->height()));
   if (DstBufferSizeHasOverflow(parsed_options))
     return;
 
-  bool is_premultiply_alpha_reverted = false;
-  if (!parsed_options.premultiply_alpha) {
-    parsed_options.premultiply_alpha = true;
-    is_premultiply_alpha_reverted = true;
-  }
-  image_ = CropImageAndApplyColorSpaceConversion(input, parsed_options,
-                                                 kPremultiplyAlpha);
+  image_ = CropImageAndApplyColorSpaceConversion(input, parsed_options);
   if (!image_)
     return;
 
-  if (is_premultiply_alpha_reverted) {
-    parsed_options.premultiply_alpha = false;
-    image_ = StaticBitmapImage::Create(GetSkImageWithAlphaDisposition(
-        image_->ImageForCurrentFrame(), kDontPremultiplyAlpha));
-  }
-  if (!image_)
-    return;
   image_->SetOriginClean(canvas->OriginClean());
   image_->SetPremultiplied(parsed_options.premultiply_alpha);
 }
@@ -646,25 +551,13 @@
       FloatSize(offscreen_canvas->Size()));
   if (status != kNormalSourceImageStatus)
     return;
+
   ParsedOptions parsed_options = ParseOptions(
       options, crop_rect, IntSize(input->width(), input->height()));
   if (DstBufferSizeHasOverflow(parsed_options))
     return;
 
-  bool is_premultiply_alpha_reverted = false;
-  if (!parsed_options.premultiply_alpha) {
-    parsed_options.premultiply_alpha = true;
-    is_premultiply_alpha_reverted = true;
-  }
-  image_ = CropImageAndApplyColorSpaceConversion(input, parsed_options,
-                                                 kPremultiplyAlpha);
-  if (!image_)
-    return;
-  if (is_premultiply_alpha_reverted) {
-    parsed_options.premultiply_alpha = false;
-    image_ = StaticBitmapImage::Create(GetSkImageWithAlphaDisposition(
-        image_->ImageForCurrentFrame(), kDontPremultiplyAlpha));
-  }
+  image_ = CropImageAndApplyColorSpaceConversion(input, parsed_options);
   if (!image_)
     return;
   image_->SetOriginClean(offscreen_canvas->OriginClean());
@@ -690,26 +583,16 @@
   image_->SetOriginClean(is_image_bitmap_origin_clean);
 }
 
-static sk_sp<SkImage> ScaleSkImage(sk_sp<SkImage> sk_image,
-                                   const SkImageInfo& resize_info,
-                                   SkFilterQuality resize_quality) {
-  RefPtr<ArrayBuffer> dst_buffer = ArrayBuffer::CreateOrNull(
-      resize_info.width() * resize_info.height(), resize_info.bytesPerPixel());
-  if (!dst_buffer)
-    return nullptr;
-
-  unsigned byte_length = dst_buffer->ByteLength();
-  RefPtr<Uint8Array> resized_pixels =
-      Uint8Array::Create(std::move(dst_buffer), 0, byte_length);
-  SkPixmap pixmap(
-      resize_info, resized_pixels->Data(),
-      static_cast<unsigned>(resize_info.width()) * resize_info.bytesPerPixel());
-  sk_image->scalePixels(pixmap, resize_quality);
-  return SkImage::MakeFromRaster(pixmap,
-                                 [](const void*, void* pixels) {
-                                   static_cast<Uint8Array*>(pixels)->Deref();
-                                 },
-                                 resized_pixels.LeakRef());
+static void SwizzleImageDataIfNeeded(ImageData* data) {
+  if (!data || (kN32_SkColorType != kBGRA_8888_SkColorType) ||
+      (data->GetCanvasColorParams().GetSkColorSpaceForSkSurfaces() &&
+       data->GetCanvasColorParams()
+           .GetSkColorSpaceForSkSurfaces()
+           ->gammaIsLinear()))
+    return;
+  SkSwapRB(static_cast<uint32_t*>(data->BufferBase()->Data()),
+           static_cast<uint32_t*>(data->BufferBase()->Data()),
+           data->Size().Height() * data->Size().Width());
 }
 
 ImageBitmap::ImageBitmap(ImageData* data,
@@ -724,113 +607,57 @@
   IntRect src_rect = crop_rect
                          ? Intersection(parsed_options.crop_rect, data_src_rect)
                          : data_src_rect;
-  SkImageInfo unpremul_info = SkImageInfo::Make(
-      src_rect.Width(), src_rect.Height(),
-      parsed_options.color_params.GetSkColorType(), kUnpremul_SkAlphaType,
-      parsed_options.color_params.GetSkColorSpaceForSkSurfaces());
-  // if src_rect is empty, create an empty image bitmap with the requested size
-  // and return
+
+  // If cropRect doesn't intersect the source image, return a transparent black
+  // image.
   if (src_rect.IsEmpty()) {
-    SkImageInfo info = parsed_options.premultiply_alpha
-                           ? unpremul_info.makeAlphaType(kPremul_SkAlphaType)
-                           : unpremul_info;
-    if (parsed_options.should_scale_input) {
-      info = info.makeWH(parsed_options.resize_width,
-                         parsed_options.resize_height);
-    } else if (crop_rect) {
-      info = info.makeWH(parsed_options.crop_rect.Width(),
-                         parsed_options.crop_rect.Height());
-    } else {
-      info = info.makeWH(data->Size().Width(), data->Size().Height());
-    }
-    unsigned bytes_per_row =
-        info.width() * parsed_options.color_params.BytesPerPixel();
-    std::unique_ptr<uint8_t[]> pixels(
-        new uint8_t[info.height() * bytes_per_row]);
-    memset(pixels.get(), 0, info.height() * bytes_per_row);
-    sk_sp<SkImage> sk_image =
-        SkImage::MakeRasterCopy(SkPixmap(info, pixels.get(), bytes_per_row));
-    image_ = StaticBitmapImage::Create(sk_image);
-    image_->SetPremultiplied(parsed_options.premultiply_alpha);
+    image_ = MakeBlankImage(parsed_options);
     return;
   }
 
-  // crop/flip the input if needed.
+  // crop/flip the input if needed
   bool crop_or_flip = (src_rect != data_src_rect) || parsed_options.flip_y;
   ImageData* cropped_data = data;
   if (crop_or_flip)
     cropped_data = data->CropRect(src_rect, parsed_options.flip_y);
-  unsigned bytes_per_row =
-      src_rect.Size().Width() * parsed_options.color_params.BytesPerPixel();
-  unsigned data_size = src_rect.Size().Height() * bytes_per_row;
-  // color convert the pixels if needed
-  unsigned char* color_corrected_pixels = cropped_data->data()->Data();
-  std::unique_ptr<uint8_t[]> converted_pixels;
-  if (!SkColorSpace::Equals(
-          cropped_data->GetCanvasColorParams()
-              .GetSkColorSpaceForSkSurfaces()
-              .get(),
-          parsed_options.color_params.GetSkColorSpaceForSkSurfaces().get()) ||
-      cropped_data->GetCanvasColorParams().GetSkColorType() ==
-          kRGBA_F16_SkColorType) {
-    converted_pixels = WTF::WrapArrayUnique(new uint8_t[data_size]);
-    cropped_data->ImageDataInCanvasColorSettings(parsed_options.color_params,
-                                                 converted_pixels);
-    color_corrected_pixels = converted_pixels.get();
-  }
 
-  // treat non-premultiplyAlpha as a special case
-  if (!parsed_options.premultiply_alpha) {
-    SkImageInfo info = unpremul_info.makeColorType(kRGBA_8888_SkColorType);
-    sk_sp<SkImage> sk_image = SkImage::MakeRasterCopy(
-        SkPixmap(info, color_corrected_pixels, bytes_per_row));
+  SwizzleImageDataIfNeeded(cropped_data);
 
-    if (parsed_options.should_scale_input) {
-      image_ = StaticBitmapImage::Create(
-          ScaleSkImage(sk_image,
-                       info.makeWH(parsed_options.resize_width,
-                                   parsed_options.resize_height),
-                       parsed_options.resize_quality));
-    } else {
-      image_ = StaticBitmapImage::Create(sk_image);
-    }
-    if (!image_)
-      return;
-    image_->SetPremultiplied(parsed_options.premultiply_alpha);
+  int byte_length = cropped_data->BufferBase()->ByteLength();
+  RefPtr<ArrayBuffer> array_buffer = ArrayBuffer::CreateOrNull(byte_length, 1);
+  if (!array_buffer)
     return;
-  }
+  RefPtr<Uint8Array> image_pixels =
+      Uint8Array::Create(std::move(array_buffer), 0, byte_length);
+  memcpy(image_pixels->Data(), cropped_data->BufferBase()->Data(), byte_length);
 
-  IntSize buffer_size =
-      src_rect.IsEmpty() ? parsed_options.crop_rect.Size() : src_rect.Size();
-  std::unique_ptr<ImageBuffer> buffer =
-      ImageBuffer::Create(buffer_size, kNonOpaque, kDoNotInitializeImagePixels,
-                          parsed_options.color_params);
-  if (!buffer)
-    return;
-  if (src_rect.IsEmpty()) {
-    image_ = StaticBitmapImage::Create(buffer->NewSkImageSnapshot(
-        kPreferNoAcceleration, kSnapshotReasonUnknown));
-    return;
-  }
+  SkImageInfo info = SkImageInfo::Make(
+      cropped_data->width(), cropped_data->height(),
+      cropped_data->GetCanvasColorParams().GetSkColorType(),
+      kUnpremul_SkAlphaType,
+      cropped_data->GetCanvasColorParams().GetSkColorSpaceForSkSurfaces());
 
-  buffer->PutByteArray(kUnmultiplied, color_corrected_pixels,
-                       cropped_data->Size(),
-                       IntRect(IntPoint(), cropped_data->Size()), IntPoint());
+  sk_sp<SkImage> skia_image = NewSkImageFromRaster(info, image_pixels);
 
-  sk_sp<SkImage> sk_image =
-      buffer->NewSkImageSnapshot(kPreferNoAcceleration, kSnapshotReasonUnknown);
-  if (!sk_image)
-    return;
+  // swizzle back
+  SwizzleImageDataIfNeeded(cropped_data);
 
+  // premultiply if needed
+  if (parsed_options.premultiply_alpha)
+    skia_image = GetSkImageWithAlphaDisposition(skia_image, kPremultiplyAlpha);
+
+  // color correct if needed
+  ApplyColorSpaceConversion(skia_image, parsed_options);
+
+  // resize if needed
   if (parsed_options.should_scale_input) {
-    SkImageInfo resize_info = SkImageInfo::Make(
-        parsed_options.resize_width, parsed_options.resize_height,
-        parsed_options.color_params.GetSkColorType(), kPremul_SkAlphaType,
-        parsed_options.color_params.GetSkColorSpaceForSkSurfaces());
-    sk_image =
-        ScaleSkImage(sk_image, resize_info, parsed_options.resize_quality);
+    skia_image = ScaleSkImage(skia_image, parsed_options.resize_width,
+                              parsed_options.resize_height,
+                              parsed_options.resize_quality);
   }
-  image_ = StaticBitmapImage::Create(std::move(sk_image));
+
+  image_ = StaticBitmapImage::Create(std::move(skia_image));
+  image_->SetPremultiplied(parsed_options.premultiply_alpha);
 }
 
 ImageBitmap::ImageBitmap(ImageBitmap* bitmap,
@@ -844,9 +671,7 @@
   if (DstBufferSizeHasOverflow(parsed_options))
     return;
 
-  image_ = CropImageAndApplyColorSpaceConversion(
-      input, parsed_options,
-      bitmap->IsPremultiplied() ? kPremultiplyAlpha : kDontPremultiplyAlpha);
+  image_ = CropImageAndApplyColorSpaceConversion(input, parsed_options);
   if (!image_)
     return;
   image_->SetOriginClean(bitmap->OriginClean());
@@ -862,32 +687,10 @@
   if (DstBufferSizeHasOverflow(parsed_options))
     return;
 
-  if (image->ImageForCurrentFrame()->alphaType() == kUnpremul_SkAlphaType) {
-    sk_sp<SkImage> premul_image = GetSkImageWithAlphaDisposition(
-        image->ImageForCurrentFrame(), kPremultiplyAlpha);
-    image_ = StaticBitmapImage::Create(std::move(premul_image));
-  } else {
-    image_ = image.Get();
-  }
-
-  bool is_premultiply_alpha_reverted = false;
-  if (!parsed_options.premultiply_alpha) {
-    parsed_options.premultiply_alpha = true;
-    is_premultiply_alpha_reverted = true;
-  }
-
-  image_ = CropImageAndApplyColorSpaceConversion(image_, parsed_options,
-                                                 kPremultiplyAlpha);
+  image_ = CropImageAndApplyColorSpaceConversion(image, parsed_options);
   if (!image_)
     return;
 
-  if (is_premultiply_alpha_reverted) {
-    parsed_options.premultiply_alpha = false;
-    image_ = StaticBitmapImage::Create(GetSkImageWithAlphaDisposition(
-        image_->ImageForCurrentFrame(), kDontPremultiplyAlpha));
-  }
-  if (!image_)
-    return;
   image_->SetOriginClean(origin_clean);
   image_->SetPremultiplied(parsed_options.premultiply_alpha);
 }
@@ -1048,8 +851,7 @@
   // a transparent black image, respecting the color_params but ignoring
   // poremultiply_alpha.
   if (src_rect.IsEmpty()) {
-    ImageBitmap* bitmap =
-        new ImageBitmap(MakeBlankImage(parsed_options, kPremul_SkAlphaType));
+    ImageBitmap* bitmap = new ImageBitmap(MakeBlankImage(parsed_options));
     if (bitmap && bitmap->BitmapImage()) {
       bitmap->BitmapImage()->SetOriginClean(
           !image->WouldTaintOrigin(document->GetSecurityOrigin()));
diff --git a/third_party/WebKit/Source/core/imagebitmap/ImageBitmap.h b/third_party/WebKit/Source/core/imagebitmap/ImageBitmap.h
index 1417663..fc690fcd 100644
--- a/third_party/WebKit/Source/core/imagebitmap/ImageBitmap.h
+++ b/third_party/WebKit/Source/core/imagebitmap/ImageBitmap.h
@@ -90,11 +90,7 @@
       Document*,
       ScriptState*,
       const ImageBitmapOptions& = ImageBitmapOptions());
-  static sk_sp<SkImage> GetSkImageFromDecoder(
-      std::unique_ptr<ImageDecoder>,
-      SkColorType* decoded_color_type = nullptr,
-      sk_sp<SkColorSpace>* decoded_color_space = nullptr,
-      ColorSpaceInfoUpdate = kDontUpdateColorSpaceInformation);
+  static sk_sp<SkImage> GetSkImageFromDecoder(std::unique_ptr<ImageDecoder>);
   static bool IsResizeOptionValid(const ImageBitmapOptions&, ExceptionState&);
   static bool IsSourceSizeValid(int source_width,
                                 int source_height,
diff --git a/third_party/WebKit/Source/core/imagebitmap/ImageBitmapTest.cpp b/third_party/WebKit/Source/core/imagebitmap/ImageBitmapTest.cpp
index 44d782b..fd5909a 100644
--- a/third_party/WebKit/Source/core/imagebitmap/ImageBitmapTest.cpp
+++ b/third_party/WebKit/Source/core/imagebitmap/ImageBitmapTest.cpp
@@ -134,7 +134,7 @@
       ImageBitmap::Create(image_element, crop_rect,
                           &(image_element->GetDocument()), default_options);
 
-  ASSERT_NE(image_bitmap_no_crop->BitmapImage()->ImageForCurrentFrame(),
+  ASSERT_EQ(image_bitmap_no_crop->BitmapImage()->ImageForCurrentFrame(),
             image_element->CachedImage()->GetImage()->ImageForCurrentFrame());
   ASSERT_NE(image_bitmap_interior_crop->BitmapImage()->ImageForCurrentFrame(),
             image_element->CachedImage()->GetImage()->ImageForCurrentFrame());
@@ -162,10 +162,7 @@
       IntRect(0, 0, image_->width(), image_->height());
   ImageBitmap* image_bitmap = ImageBitmap::Create(
       image, crop_rect, &(image->GetDocument()), default_options);
-  // As we are applying color space conversion for the "default" mode,
-  // this verifies that the color corrected image is not the same as the
-  // source.
-  ASSERT_NE(image_bitmap->BitmapImage()->ImageForCurrentFrame(),
+  ASSERT_EQ(image_bitmap->BitmapImage()->ImageForCurrentFrame(),
             original_image_resource->GetImage()->ImageForCurrentFrame());
 
   ImageResourceContent* new_image_resource = ImageResourceContent::CreateLoaded(
@@ -173,14 +170,14 @@
   image->SetImageForTest(new_image_resource);
 
   {
-    ASSERT_NE(image_bitmap->BitmapImage()->ImageForCurrentFrame(),
+    ASSERT_EQ(image_bitmap->BitmapImage()->ImageForCurrentFrame(),
               original_image_resource->GetImage()->ImageForCurrentFrame());
     SkImage* image1 = image_bitmap->BitmapImage()->ImageForCurrentFrame().get();
     ASSERT_NE(image1, nullptr);
     SkImage* image2 =
         original_image_resource->GetImage()->ImageForCurrentFrame().get();
     ASSERT_NE(image2, nullptr);
-    ASSERT_NE(image1, image2);
+    ASSERT_EQ(image1, image2);
   }
 
   {
@@ -606,7 +603,9 @@
   sk_sp<SkColorSpace> color_space = nullptr;
   SkColorType color_type = SkColorType::kN32_SkColorType;
   SkColorSpaceXform::ColorFormat color_format =
-      SkColorSpaceXform::ColorFormat::kRGBA_8888_ColorFormat;
+      kN32_SkColorType == kRGBA_8888_SkColorType
+          ? SkColorSpaceXform::ColorFormat::kRGBA_8888_ColorFormat
+          : SkColorSpaceXform::ColorFormat::kBGRA_8888_ColorFormat;
 
   for (uint8_t i =
            static_cast<uint8_t>(ColorSpaceConversion::DEFAULT_COLOR_CORRECTED);
@@ -653,7 +652,7 @@
     }
 
     SkImageInfo image_info = SkImageInfo::Make(
-        1, 1, color_type, SkAlphaType::kUnpremul_SkAlphaType, color_space);
+        1, 1, color_type, SkAlphaType::kPremul_SkAlphaType, color_space);
     std::unique_ptr<uint8_t[]> converted_pixel(
         new uint8_t[image_info.bytesPerPixel()]());
     converted_image->readPixels(
@@ -669,7 +668,7 @@
     color_space_xform->apply(
         color_format, transformed_pixel.get(),
         SkColorSpaceXform::ColorFormat::kRGBA_8888_ColorFormat, src_pixel.get(),
-        1, SkAlphaType::kUnpremul_SkAlphaType);
+        1, SkAlphaType::kPremul_SkAlphaType);
 
     int compare = std::memcmp(converted_pixel.get(), transformed_pixel.get(),
                               image_info.bytesPerPixel());
diff --git a/third_party/WebKit/Source/core/inspector/InspectorPageAgent.cpp b/third_party/WebKit/Source/core/inspector/InspectorPageAgent.cpp
index 8932083..d2c9b162 100644
--- a/third_party/WebKit/Source/core/inspector/InspectorPageAgent.cpp
+++ b/third_party/WebKit/Source/core/inspector/InspectorPageAgent.cpp
@@ -173,15 +173,16 @@
 }
 
 static void MaybeEncodeTextContent(const String& text_content,
-                                   PassRefPtr<const SharedBuffer> buffer,
+                                   const char* buffer_data,
+                                   size_t buffer_size,
                                    String* result,
                                    bool* base64_encoded) {
   if (!text_content.IsNull() &&
       !text_content.Utf8(WTF::kStrictUTF8Conversion).IsNull()) {
     *result = text_content;
     *base64_encoded = false;
-  } else if (buffer) {
-    *result = Base64Encode(buffer->Data(), buffer->size());
+  } else if (buffer_data) {
+    *result = Base64Encode(buffer_data, buffer_size);
     *base64_encoded = true;
   } else if (text_content.IsNull()) {
     *result = "";
@@ -193,6 +194,20 @@
   }
 }
 
+static void MaybeEncodeTextContent(const String& text_content,
+                                   PassRefPtr<const SharedBuffer> buffer,
+                                   String* result,
+                                   bool* base64_encoded) {
+  if (!buffer) {
+    return MaybeEncodeTextContent(text_content, nullptr, 0, result,
+                                  base64_encoded);
+  }
+
+  const SharedBuffer::DeprecatedFlatData flat_buffer(std::move(buffer));
+  return MaybeEncodeTextContent(text_content, flat_buffer.Data(),
+                                flat_buffer.size(), result, base64_encoded);
+}
+
 // static
 bool InspectorPageAgent::SharedBufferContent(
     PassRefPtr<const SharedBuffer> buffer,
@@ -208,15 +223,16 @@
       CreateResourceTextDecoder(mime_type, text_encoding_name);
   WTF::TextEncoding encoding(text_encoding_name);
 
+  const SharedBuffer::DeprecatedFlatData flat_buffer(std::move(buffer));
   if (decoder) {
-    text_content = decoder->Decode(buffer->Data(), buffer->size());
+    text_content = decoder->Decode(flat_buffer.Data(), flat_buffer.size());
     text_content = text_content + decoder->Flush();
   } else if (encoding.IsValid()) {
-    text_content = encoding.Decode(buffer->Data(), buffer->size());
+    text_content = encoding.Decode(flat_buffer.Data(), flat_buffer.size());
   }
 
-  MaybeEncodeTextContent(text_content, std::move(buffer), result,
-                         base64_encoded);
+  MaybeEncodeTextContent(text_content, flat_buffer.Data(), flat_buffer.size(),
+                         result, base64_encoded);
   return true;
 }
 
@@ -234,7 +250,9 @@
                                             : cached_resource->ResourceBuffer();
     if (!buffer)
       return false;
-    *result = Base64Encode(buffer->Data(), buffer->size());
+
+    const SharedBuffer::DeprecatedFlatData flat_buffer(std::move(buffer));
+    *result = Base64Encode(flat_buffer.Data(), flat_buffer.size());
     *base64_encoded = true;
     return true;
   }
diff --git a/third_party/WebKit/Source/core/layout/BUILD.gn b/third_party/WebKit/Source/core/layout/BUILD.gn
index cc7d46b..0ad7609 100644
--- a/third_party/WebKit/Source/core/layout/BUILD.gn
+++ b/third_party/WebKit/Source/core/layout/BUILD.gn
@@ -374,6 +374,7 @@
     "ng/inline/ng_line_height_metrics.h",
     "ng/inline/ng_offset_mapping_builder.cc",
     "ng/inline/ng_offset_mapping_builder.h",
+    "ng/inline/ng_offset_mapping_result.h",
     "ng/inline/ng_physical_line_box_fragment.cc",
     "ng/inline/ng_physical_line_box_fragment.h",
     "ng/inline/ng_physical_text_fragment.h",
diff --git a/third_party/WebKit/Source/core/layout/LayoutTextFragment.h b/third_party/WebKit/Source/core/layout/LayoutTextFragment.h
index 7d37ef99..e62ac8f2 100644
--- a/third_party/WebKit/Source/core/layout/LayoutTextFragment.h
+++ b/third_party/WebKit/Source/core/layout/LayoutTextFragment.h
@@ -92,6 +92,8 @@
     return is_remaining_text_layout_object_;
   }
 
+  Text* AssociatedTextNode() const;
+
  protected:
   void WillBeDestroyed() override;
 
@@ -99,7 +101,6 @@
   LayoutBlock* BlockForAccompanyingFirstLetter() const;
   UChar PreviousCharacter() const override;
 
-  Text* AssociatedTextNode() const;
   void UpdateHitTestResult(HitTestResult&, const LayoutPoint&) override;
 
   unsigned start_;
diff --git a/third_party/WebKit/Source/core/layout/ng/inline/empty_offset_mapping_builder.h b/third_party/WebKit/Source/core/layout/ng/inline/empty_offset_mapping_builder.h
index 3a3f38a..7adf9d1d 100644
--- a/third_party/WebKit/Source/core/layout/ng/inline/empty_offset_mapping_builder.h
+++ b/third_party/WebKit/Source/core/layout/ng/inline/empty_offset_mapping_builder.h
@@ -18,9 +18,12 @@
 
  public:
   EmptyOffsetMappingBuilder() = default;
+  void Annotate(const void*) {}
   void AppendIdentityMapping(unsigned) {}
   void AppendCollapsedMapping(unsigned) {}
   void CollapseTrailingSpace(unsigned) {}
+  void Composite(const EmptyOffsetMappingBuilder&) {}
+  void Concatenate(const EmptyOffsetMappingBuilder&) {}
 
  private:
   DISALLOW_COPY_AND_ASSIGN(EmptyOffsetMappingBuilder);
diff --git a/third_party/WebKit/Source/core/layout/ng/inline/ng_inline_items_builder.cc b/third_party/WebKit/Source/core/layout/ng/inline/ng_inline_items_builder.cc
index 046fdac..781d19b 100644
--- a/third_party/WebKit/Source/core/layout/ng/inline/ng_inline_items_builder.cc
+++ b/third_party/WebKit/Source/core/layout/ng/inline/ng_inline_items_builder.cc
@@ -165,6 +165,7 @@
     return;
   text_.ReserveCapacity(string.length());
 
+  AutoReset<bool> appending_string_scope(&is_appending_string_, true);
   EWhiteSpace whitespace = style->WhiteSpace();
   if (!ComputedStyle::CollapseWhiteSpace(whitespace))
     return AppendWithoutWhiteSpaceCollapsing(string, style, layout_object);
@@ -312,6 +313,8 @@
 
   text_.Append(character);
   mapping_builder_.AppendIdentityMapping(1);
+  if (!is_appending_string_)
+    concatenated_mapping_builder_.AppendIdentityMapping(1);
   unsigned end_offset = text_.length();
   AppendItem(items_, type, end_offset - 1, end_offset, style, layout_object);
 
@@ -325,6 +328,7 @@
     UChar character) {
   text_.Append(character);
   mapping_builder_.AppendIdentityMapping(1);
+  concatenated_mapping_builder_.AppendIdentityMapping(1);
   unsigned end_offset = text_.length();
   AppendItem(items_, type, end_offset - 1, end_offset, nullptr, nullptr);
 
diff --git a/third_party/WebKit/Source/core/layout/ng/inline/ng_inline_items_builder.h b/third_party/WebKit/Source/core/layout/ng/inline/ng_inline_items_builder.h
index 35c58b4..017d0f3 100644
--- a/third_party/WebKit/Source/core/layout/ng/inline/ng_inline_items_builder.h
+++ b/third_party/WebKit/Source/core/layout/ng/inline/ng_inline_items_builder.h
@@ -97,12 +97,32 @@
   void ExitInline(LayoutObject*);
 
   OffsetMappingBuilder& GetOffsetMappingBuilder() { return mapping_builder_; }
+  OffsetMappingBuilder& GetConcatenatedOffsetMappingBuilder() {
+    return concatenated_mapping_builder_;
+  }
 
  private:
   Vector<NGInlineItem>* items_;
   StringBuilder text_;
+
+  // TODO(xiaochengh): Rename |mapping_builder_| to |collapsed_mapping_builder_|
+  // |collapsed_mapping_builder_| builds the whitespace-collapsed offset mapping
+  // during inline collection. It is updated whenever |text_| is modified or a
+  // white space is collapsed.
   OffsetMappingBuilder mapping_builder_;
 
+  // |concatenated_mapping_builder_| builds the concatenated offset mapping
+  // during inline collection. It is updated whenever a non-text character is
+  // appended to |text_|. User of NGInlineItemsBuilder should also update
+  // |concatenated_mapping_builder_| whenever collecting a text node during
+  // inline collection, by appending the text-transformed offset mapping of the
+  // text node to |concatenated_mapping_builder_|.
+  OffsetMappingBuilder concatenated_mapping_builder_;
+
+  // Indicates whether we are appending a string not, to help updating
+  // |concatenated_mapping_builder_|.
+  bool is_appending_string_ = false;
+
   typedef struct OnExitNode {
     LayoutObject* node;
     UChar character;
diff --git a/third_party/WebKit/Source/core/layout/ng/inline/ng_inline_node.cc b/third_party/WebKit/Source/core/layout/ng/inline/ng_inline_node.cc
index f64d52a..605cba3 100644
--- a/third_party/WebKit/Source/core/layout/ng/inline/ng_inline_node.cc
+++ b/third_party/WebKit/Source/core/layout/ng/inline/ng_inline_node.cc
@@ -8,6 +8,7 @@
 #include "core/layout/LayoutBlockFlow.h"
 #include "core/layout/LayoutObject.h"
 #include "core/layout/LayoutText.h"
+#include "core/layout/LayoutTextFragment.h"
 #include "core/layout/api/LineLayoutAPIShim.h"
 #include "core/layout/line/LineInfo.h"
 #include "core/layout/line/RootInlineBox.h"
@@ -18,6 +19,7 @@
 #include "core/layout/ng/inline/ng_inline_layout_algorithm.h"
 #include "core/layout/ng/inline/ng_line_box_fragment.h"
 #include "core/layout/ng/inline/ng_line_breaker.h"
+#include "core/layout/ng/inline/ng_offset_mapping_result.h"
 #include "core/layout/ng/inline/ng_physical_line_box_fragment.h"
 #include "core/layout/ng/inline/ng_physical_text_fragment.h"
 #include "core/layout/ng/inline/ng_text_fragment.h"
@@ -174,16 +176,105 @@
   return text_index;
 }
 
-LayoutBox* CollectInlinesInternal(LayoutBlockFlow* block,
-                                  NGInlineItemsBuilder* builder) {
+// Templated helper function for CollectInlinesInternal().
+template <typename OffsetMappingBuilder>
+void ClearNeedsLayoutIfUpdatingLayout(LayoutObject* node) {
+  node->ClearNeedsLayout();
+}
+
+template <>
+void ClearNeedsLayoutIfUpdatingLayout<NGOffsetMappingBuilder>(LayoutObject*) {}
+
+// Templated helper function for CollectInlinesInternal().
+template <typename OffsetMappingBuilder>
+String GetTextForInlineCollection(const LayoutText& node) {
+  return node.GetText();
+}
+
+// This function is a workaround of writing the whitespace-collapsed string back
+// to LayoutText after inline collection, so that we can still recover the
+// original text for building offset mapping.
+// TODO(xiaochengh): Remove this function once we can:
+// - paint inlines directly from the fragment tree, or
+// - perform inline collection directly from DOM instead of LayoutText
+template <>
+String GetTextForInlineCollection<NGOffsetMappingBuilder>(
+    const LayoutText& layout_text) {
+  if (layout_text.Style()->TextSecurity() != ETextSecurity::kNone)
+    return layout_text.GetText();
+
+  // TODO(xiaochengh): Return the text-transformed string instead of DOM data
+  // string.
+
+  // Special handling for first-letter.
+  if (layout_text.IsTextFragment()) {
+    const LayoutTextFragment& text_fragment = ToLayoutTextFragment(layout_text);
+    Text* node = text_fragment.AssociatedTextNode();
+    if (!node) {
+      // Reaches here if the LayoutTextFragment is due to a LayoutQuote.
+      return layout_text.GetText();
+    }
+    unsigned first_letter_length = node->GetLayoutObject()->TextStartOffset();
+    if (text_fragment.IsRemainingTextLayoutObject())
+      return node->data().Substring(first_letter_length);
+    return node->data().Substring(0, first_letter_length);
+  }
+
+  Node* node = layout_text.GetNode();
+  if (!node || !node->IsTextNode())
+    return layout_text.GetText();
+  return ToText(node)->data();
+}
+
+// Templated helper function for CollectInlinesInternal().
+template <typename OffsetMappingBuilder>
+void AppendTextTransformedOffsetMapping(OffsetMappingBuilder*,
+                                        const LayoutText*,
+                                        const String&) {}
+
+template <>
+void AppendTextTransformedOffsetMapping<NGOffsetMappingBuilder>(
+    NGOffsetMappingBuilder* concatenated_mapping_builder,
+    const LayoutText* node,
+    const String& text_transformed_string) {
+  // TODO(xiaochengh): We are assuming that DOM data string and text-transformed
+  // strings have the same length, which is incorrect.
+  NGOffsetMappingBuilder text_transformed_mapping_builder;
+  text_transformed_mapping_builder.AppendIdentityMapping(
+      text_transformed_string.length());
+  text_transformed_mapping_builder.Annotate(node);
+  concatenated_mapping_builder->Concatenate(text_transformed_mapping_builder);
+}
+
+// The function is templated to indicate the purpose of collected inlines:
+// - With EmptyOffsetMappingBuilder: updating layout;
+// - With NGOffsetMappingBuilder: building offset mapping on clean layout.
+//
+// This allows code sharing between the two purposes with slightly different
+// behaviors. For example, we clear a LayoutObject's need layout flags when
+// updating layout, but don't do that when building offset mapping.
+//
+// There are also performance considerations, since template saves the overhead
+// for condition checking and branching.
+template <typename OffsetMappingBuilder>
+LayoutBox* CollectInlinesInternal(
+    LayoutBlockFlow* block,
+    NGInlineItemsBuilderTemplate<OffsetMappingBuilder>* builder) {
   builder->EnterBlock(block->Style());
   LayoutObject* node = block->FirstChild();
   LayoutBox* next_box = nullptr;
   while (node) {
     if (node->IsText()) {
       builder->SetIsSVGText(node->IsSVGInlineText());
-      builder->Append(ToLayoutText(node)->GetText(), node->Style(), node);
-      node->ClearNeedsLayout();
+
+      LayoutText* layout_text = ToLayoutText(node);
+      const String& text =
+          GetTextForInlineCollection<OffsetMappingBuilder>(*layout_text);
+      builder->Append(text, node->Style(), layout_text);
+      ClearNeedsLayoutIfUpdatingLayout<OffsetMappingBuilder>(layout_text);
+
+      AppendTextTransformedOffsetMapping(
+          &builder->GetConcatenatedOffsetMappingBuilder(), layout_text, text);
 
     } else if (node->IsFloating()) {
       // Add floats and positioned objects in the same way as atomic inlines.
@@ -215,7 +306,7 @@
 
       } else {
         // An empty inline node.
-        node->ClearNeedsLayout();
+        ClearNeedsLayoutIfUpdatingLayout<OffsetMappingBuilder>(node);
       }
 
       builder->ExitInline(node);
@@ -235,7 +326,7 @@
       }
       DCHECK(node->IsInline());
       builder->ExitInline(node);
-      node->ClearNeedsLayout();
+      ClearNeedsLayoutIfUpdatingLayout<OffsetMappingBuilder>(node);
     }
   }
   builder->ExitBlock();
@@ -269,6 +360,25 @@
   ShapeText();
 }
 
+NGOffsetMappingResult NGInlineNode::BuildOffsetMapping() const {
+  DCHECK(!GetLayoutBlockFlow()->GetDocument().NeedsLayoutTreeUpdate());
+
+  // TODO(xiaochengh): BuildOffsetMapping() discards the NGInlineItems and
+  // text content built by |builder|, because they are already there in
+  // NGInlineNodeData. For efficiency, we should make |builder| not construct
+  // items and text content.
+  Vector<NGInlineItem> items;
+  NGInlineItemsBuilderForOffsetMapping builder(&items);
+  CollectInlinesInternal(GetLayoutBlockFlow(), &builder);
+  builder.ToString();
+
+  NGOffsetMappingBuilder& mapping_builder =
+      builder.GetConcatenatedOffsetMappingBuilder();
+  mapping_builder.Composite(builder.GetOffsetMappingBuilder());
+
+  return mapping_builder.Build();
+}
+
 // Depth-first-scan of all LayoutInline and LayoutText nodes that make up this
 // NGInlineNode object. Collects LayoutText items, merging them up into the
 // parent LayoutInline where possible, and joining all text content in a single
diff --git a/third_party/WebKit/Source/core/layout/ng/inline/ng_inline_node.h b/third_party/WebKit/Source/core/layout/ng/inline/ng_inline_node.h
index 11a28ba..107c5a8 100644
--- a/third_party/WebKit/Source/core/layout/ng/inline/ng_inline_node.h
+++ b/third_party/WebKit/Source/core/layout/ng/inline/ng_inline_node.h
@@ -28,6 +28,7 @@
 using NGInlineItemsBuilder =
     NGInlineItemsBuilderTemplate<EmptyOffsetMappingBuilder>;
 class NGLayoutResult;
+struct NGOffsetMappingResult;
 
 // Represents an anonymous block box to be laid out, that contains consecutive
 // inline nodes and their descendants.
@@ -64,6 +65,10 @@
 
   void GetLayoutTextOffsets(Vector<unsigned, 32>*);
 
+  // Returns the DOM to text content offset mapping of this block. Must be
+  // called with clean layout.
+  NGOffsetMappingResult BuildOffsetMapping() const;
+
   bool IsBidiEnabled() const { return Data().is_bidi_enabled_; }
   TextDirection BaseDirection() const { return Data().BaseDirection(); }
 
diff --git a/third_party/WebKit/Source/core/layout/ng/inline/ng_inline_node_offset_mapping_test.cc b/third_party/WebKit/Source/core/layout/ng/inline/ng_inline_node_offset_mapping_test.cc
new file mode 100644
index 0000000..e0a2a06
--- /dev/null
+++ b/third_party/WebKit/Source/core/layout/ng/inline/ng_inline_node_offset_mapping_test.cc
@@ -0,0 +1,228 @@
+// 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 "core/layout/ng/inline/ng_inline_node.h"
+
+#include "core/dom/FirstLetterPseudoElement.h"
+#include "core/layout/LayoutTestHelper.h"
+#include "core/layout/LayoutTextFragment.h"
+#include "core/layout/ng/inline/ng_offset_mapping_builder.h"
+#include "core/layout/ng/inline/ng_offset_mapping_result.h"
+#include "core/style/ComputedStyle.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace blink {
+
+class NGInlineNodeOffsetMappingTest : public RenderingTest {
+ protected:
+  void SetUp() override {
+    RenderingTest::SetUp();
+    RuntimeEnabledFeatures::SetLayoutNGEnabled(true);
+    style_ = ComputedStyle::Create();
+    style_->GetFont().Update(nullptr);
+  }
+
+  void TearDown() override {
+    RuntimeEnabledFeatures::SetLayoutNGEnabled(false);
+    RenderingTest::TearDown();
+  }
+
+  void SetupHtml(const char* id, String html) {
+    SetBodyInnerHTML(html);
+    layout_block_flow_ = ToLayoutNGBlockFlow(GetLayoutObjectByElementId(id));
+    layout_object_ = layout_block_flow_->FirstChild();
+    style_ = layout_object_->Style();
+  }
+
+  NGOffsetMappingResult BuildOffsetMapping() {
+    return NGInlineNode(layout_block_flow_).BuildOffsetMapping();
+  }
+
+  const LayoutText* GetLayoutTextUnder(const char* parent_id) {
+    Element* parent = GetDocument().getElementById(parent_id);
+    return ToLayoutText(parent->firstChild()->GetLayoutObject());
+  }
+
+  RefPtr<const ComputedStyle> style_;
+  LayoutNGBlockFlow* layout_block_flow_ = nullptr;
+  LayoutObject* layout_object_ = nullptr;
+  FontCachePurgePreventer purge_preventer_;
+};
+
+#define TEST_UNIT(unit, _type, _owner, domstart, domend, textcontentstart, \
+                  textcontentend)                                          \
+  EXPECT_EQ(_type, unit.type);                                             \
+  EXPECT_EQ(_owner, unit.owner);                                           \
+  EXPECT_EQ(domstart, unit.dom_start);                                     \
+  EXPECT_EQ(domend, unit.dom_end);                                         \
+  EXPECT_EQ(textcontentstart, unit.text_content_start);                    \
+  EXPECT_EQ(textcontentend, unit.text_content_end)
+
+#define TEST_RANGE(ranges, owner, start, end) \
+  ASSERT_TRUE(ranges.Contains(owner));        \
+  EXPECT_EQ(start, ranges.at(owner).first);   \
+  EXPECT_EQ(end, ranges.at(owner).second)
+
+TEST_F(NGInlineNodeOffsetMappingTest, OneTextNode) {
+  SetupHtml("t", "<div id=t>foo</div>");
+  const NGOffsetMappingResult& result = BuildOffsetMapping();
+
+  ASSERT_EQ(1u, result.units.size());
+  TEST_UNIT(result.units[0], NGOffsetMappingUnitType::kIdentity, layout_object_,
+            0u, 3u, 0u, 3u);
+
+  ASSERT_EQ(1u, result.ranges.size());
+  TEST_RANGE(result.ranges, ToLayoutText(layout_object_), 0u, 1u);
+}
+
+TEST_F(NGInlineNodeOffsetMappingTest, TwoTextNodes) {
+  SetupHtml("t", "<div id=t>foo<span id=s>bar</span></div>");
+  const LayoutText* foo = ToLayoutText(layout_object_);
+  const LayoutText* bar = GetLayoutTextUnder("s");
+  const NGOffsetMappingResult& result = BuildOffsetMapping();
+
+  ASSERT_EQ(2u, result.units.size());
+  TEST_UNIT(result.units[0], NGOffsetMappingUnitType::kIdentity, foo, 0u, 3u,
+            0u, 3u);
+  TEST_UNIT(result.units[1], NGOffsetMappingUnitType::kIdentity, bar, 0u, 3u,
+            3u, 6u);
+
+  ASSERT_EQ(2u, result.ranges.size());
+  TEST_RANGE(result.ranges, foo, 0u, 1u);
+  TEST_RANGE(result.ranges, bar, 1u, 2u);
+}
+
+TEST_F(NGInlineNodeOffsetMappingTest, BRBetweenTextNodes) {
+  SetupHtml("t", u"<div id=t>foo<br>bar</div>");
+  const LayoutText* foo = ToLayoutText(layout_object_);
+  const LayoutText* br = ToLayoutText(foo->NextSibling());
+  const LayoutText* bar = ToLayoutText(br->NextSibling());
+  const NGOffsetMappingResult& result = BuildOffsetMapping();
+
+  ASSERT_EQ(3u, result.units.size());
+  TEST_UNIT(result.units[0], NGOffsetMappingUnitType::kIdentity, foo, 0u, 3u,
+            0u, 3u);
+  TEST_UNIT(result.units[1], NGOffsetMappingUnitType::kIdentity, br, 0u, 1u, 3u,
+            4u);
+  TEST_UNIT(result.units[2], NGOffsetMappingUnitType::kIdentity, bar, 0u, 3u,
+            4u, 7u);
+
+  ASSERT_EQ(3u, result.ranges.size());
+  TEST_RANGE(result.ranges, foo, 0u, 1u);
+  TEST_RANGE(result.ranges, br, 1u, 2u);
+  TEST_RANGE(result.ranges, bar, 2u, 3u);
+}
+
+TEST_F(NGInlineNodeOffsetMappingTest, OneTextNodeWithCollapsedSpace) {
+  SetupHtml("t", "<div id=t>foo  bar</div>");
+  const NGOffsetMappingResult& result = BuildOffsetMapping();
+
+  ASSERT_EQ(3u, result.units.size());
+  TEST_UNIT(result.units[0], NGOffsetMappingUnitType::kIdentity, layout_object_,
+            0u, 4u, 0u, 4u);
+  TEST_UNIT(result.units[1], NGOffsetMappingUnitType::kCollapsed,
+            layout_object_, 4u, 5u, 4u, 4u);
+  TEST_UNIT(result.units[2], NGOffsetMappingUnitType::kIdentity, layout_object_,
+            5u, 8u, 4u, 7u);
+
+  ASSERT_EQ(1u, result.ranges.size());
+  TEST_RANGE(result.ranges, ToLayoutText(layout_object_), 0u, 3u);
+}
+
+TEST_F(NGInlineNodeOffsetMappingTest, FullyCollapsedWhiteSpaceNode) {
+  SetupHtml("t",
+            "<div id=t>"
+            "<span id=s1>foo </span>"
+            " "
+            "<span id=s2>bar</span>"
+            "</div>");
+  const LayoutText* foo = GetLayoutTextUnder("s1");
+  const LayoutText* bar = GetLayoutTextUnder("s2");
+  const LayoutText* space = ToLayoutText(layout_object_->NextSibling());
+  const NGOffsetMappingResult& result = BuildOffsetMapping();
+
+  ASSERT_EQ(3u, result.units.size());
+  TEST_UNIT(result.units[0], NGOffsetMappingUnitType::kIdentity, foo, 0u, 4u,
+            0u, 4u);
+  TEST_UNIT(result.units[1], NGOffsetMappingUnitType::kCollapsed, space, 0u, 1u,
+            4u, 4u);
+  TEST_UNIT(result.units[2], NGOffsetMappingUnitType::kIdentity, bar, 0u, 3u,
+            4u, 7u);
+
+  ASSERT_EQ(3u, result.ranges.size());
+  TEST_RANGE(result.ranges, foo, 0u, 1u);
+  TEST_RANGE(result.ranges, space, 1u, 2u);
+  TEST_RANGE(result.ranges, bar, 2u, 3u);
+}
+
+TEST_F(NGInlineNodeOffsetMappingTest, ReplacedElement) {
+  SetupHtml("t", "<div id=t>foo <img> bar</div>");
+  const LayoutText* foo = ToLayoutText(layout_object_);
+  const LayoutText* bar = ToLayoutText(foo->NextSibling()->NextSibling());
+  const NGOffsetMappingResult& result = BuildOffsetMapping();
+
+  ASSERT_EQ(2u, result.units.size());
+  TEST_UNIT(result.units[0], NGOffsetMappingUnitType::kIdentity, foo, 0u, 4u,
+            0u, 4u);
+  TEST_UNIT(result.units[1], NGOffsetMappingUnitType::kIdentity, bar, 0u, 4u,
+            5u, 9u);
+
+  ASSERT_EQ(2u, result.ranges.size());
+  TEST_RANGE(result.ranges, foo, 0u, 1u);
+  TEST_RANGE(result.ranges, bar, 1u, 2u);
+}
+
+TEST_F(NGInlineNodeOffsetMappingTest, FirstLetter) {
+  SetupHtml("t",
+            "<style>div:first-letter{color:red}</style>"
+            "<div id=t>foo</div>");
+  Element* div = GetDocument().getElementById("t");
+  const LayoutText* remaining_text =
+      ToLayoutText(div->firstChild()->GetLayoutObject());
+  const LayoutText* first_letter =
+      ToLayoutText(ToLayoutTextFragment(remaining_text)
+                       ->GetFirstLetterPseudoElement()
+                       ->GetLayoutObject()
+                       ->SlowFirstChild());
+  const NGOffsetMappingResult& result = BuildOffsetMapping();
+
+  ASSERT_EQ(2u, result.units.size());
+  TEST_UNIT(result.units[0], NGOffsetMappingUnitType::kIdentity, first_letter,
+            0u, 1u, 0u, 1u);
+  TEST_UNIT(result.units[1], NGOffsetMappingUnitType::kIdentity, remaining_text,
+            1u, 3u, 1u, 3u);
+
+  ASSERT_EQ(2u, result.ranges.size());
+  TEST_RANGE(result.ranges, first_letter, 0u, 1u);
+  TEST_RANGE(result.ranges, remaining_text, 1u, 2u);
+}
+
+TEST_F(NGInlineNodeOffsetMappingTest, FirstLetterWithLeadingSpace) {
+  SetupHtml("t",
+            "<style>div:first-letter{color:red}</style>"
+            "<div id=t>  foo</div>");
+  Element* div = GetDocument().getElementById("t");
+  const LayoutText* remaining_text =
+      ToLayoutText(div->firstChild()->GetLayoutObject());
+  const LayoutText* first_letter =
+      ToLayoutText(ToLayoutTextFragment(remaining_text)
+                       ->GetFirstLetterPseudoElement()
+                       ->GetLayoutObject()
+                       ->SlowFirstChild());
+  const NGOffsetMappingResult& result = BuildOffsetMapping();
+
+  ASSERT_EQ(3u, result.units.size());
+  TEST_UNIT(result.units[0], NGOffsetMappingUnitType::kCollapsed, first_letter,
+            0u, 2u, 0u, 0u);
+  TEST_UNIT(result.units[1], NGOffsetMappingUnitType::kIdentity, first_letter,
+            2u, 3u, 0u, 1u);
+  TEST_UNIT(result.units[2], NGOffsetMappingUnitType::kIdentity, remaining_text,
+            3u, 5u, 1u, 3u);
+
+  ASSERT_EQ(2u, result.ranges.size());
+  TEST_RANGE(result.ranges, first_letter, 0u, 2u);
+  TEST_RANGE(result.ranges, remaining_text, 2u, 3u);
+}
+
+}  // namespace blink
diff --git a/third_party/WebKit/Source/core/layout/ng/inline/ng_offset_mapping_builder.cc b/third_party/WebKit/Source/core/layout/ng/inline/ng_offset_mapping_builder.cc
index 4d42e54c..46c551c2 100644
--- a/third_party/WebKit/Source/core/layout/ng/inline/ng_offset_mapping_builder.cc
+++ b/third_party/WebKit/Source/core/layout/ng/inline/ng_offset_mapping_builder.cc
@@ -4,10 +4,47 @@
 
 #include "core/layout/ng/inline/ng_offset_mapping_builder.h"
 
+#include "core/layout/ng/inline/ng_offset_mapping_result.h"
 #include "platform/wtf/text/StringBuilder.h"
 
 namespace blink {
 
+namespace {
+
+// Returns the type of a unit-length simple offset mapping.
+NGOffsetMappingUnitType GetUnitLengthMappingType(unsigned value) {
+  if (value == 0u)
+    return NGOffsetMappingUnitType::kCollapsed;
+  if (value == 1u)
+    return NGOffsetMappingUnitType::kIdentity;
+  return NGOffsetMappingUnitType::kExpanded;
+}
+
+// Finds the offset mapping unit starting from index |start|.
+std::pair<NGOffsetMappingUnitType, unsigned> GetMappingUnitTypeAndEnd(
+    const Vector<unsigned>& mapping,
+    const Vector<const LayoutText*>& annotation,
+    unsigned start) {
+  DCHECK_LT(start + 1, mapping.size());
+  NGOffsetMappingUnitType type =
+      GetUnitLengthMappingType(mapping[start + 1] - mapping[start]);
+  if (type == NGOffsetMappingUnitType::kExpanded)
+    return std::make_pair(type, start + 1);
+
+  unsigned end = start + 1;
+  for (; end + 1 < mapping.size(); ++end) {
+    if (annotation[end] != annotation[start])
+      break;
+    NGOffsetMappingUnitType next_type =
+        GetUnitLengthMappingType(mapping[end + 1] - mapping[end]);
+    if (next_type != type)
+      break;
+  }
+  return std::make_pair(type, end);
+}
+
+}  // namespace
+
 NGOffsetMappingBuilder::NGOffsetMappingBuilder() {
   mapping_.push_back(0);
 }
@@ -19,6 +56,7 @@
     unsigned next = mapping_.back() + 1;
     mapping_.push_back(next);
   }
+  annotation_.resize(annotation_.size() + length);
 }
 
 void NGOffsetMappingBuilder::AppendCollapsedMapping(unsigned length) {
@@ -27,6 +65,7 @@
   const unsigned back = mapping_.back();
   for (unsigned i = 0; i < length; ++i)
     mapping_.push_back(back);
+  annotation_.resize(annotation_.size() + length);
 }
 
 void NGOffsetMappingBuilder::CollapseTrailingSpace(unsigned skip_length) {
@@ -43,8 +82,77 @@
   }
 }
 
+void NGOffsetMappingBuilder::Annotate(const LayoutText* layout_object) {
+  std::fill(annotation_.begin(), annotation_.end(), layout_object);
+}
+
+void NGOffsetMappingBuilder::Concatenate(const NGOffsetMappingBuilder& other) {
+  DCHECK(!mapping_.IsEmpty());
+  DCHECK(!other.mapping_.IsEmpty());
+  const unsigned shift_amount = mapping_.back();
+  for (unsigned i = 1; i < other.mapping_.size(); ++i)
+    mapping_.push_back(other.mapping_[i] + shift_amount);
+  annotation_.AppendVector(other.annotation_);
+}
+
+void NGOffsetMappingBuilder::Composite(const NGOffsetMappingBuilder& other) {
+  DCHECK(!mapping_.IsEmpty());
+  DCHECK_EQ(mapping_.back() + 1, other.mapping_.size());
+  for (unsigned i = 0; i < mapping_.size(); ++i)
+    mapping_[i] = other.mapping_[mapping_[i]];
+}
+
+NGOffsetMappingResult NGOffsetMappingBuilder::Build() const {
+  NGOffsetMappingResult result;
+
+  const LayoutText* current_node = nullptr;
+  unsigned inline_start = 0;
+  unsigned unit_range_start = 0;
+  for (unsigned start = 0; start + 1 < mapping_.size();) {
+    if (annotation_[start] != current_node) {
+      if (current_node) {
+        result.ranges.insert(current_node, std::make_pair(unit_range_start,
+                                                          result.units.size()));
+      }
+      current_node = annotation_[start];
+      inline_start = start;
+      unit_range_start = result.units.size();
+    }
+
+    if (!annotation_[start]) {
+      // Only extra characters are not annotated.
+      DCHECK_EQ(mapping_[start] + 1, mapping_[start + 1]);
+      ++start;
+      continue;
+    }
+
+    NGOffsetMappingUnit unit;
+    unsigned end;
+    std::tie(unit.type, end) =
+        GetMappingUnitTypeAndEnd(mapping_, annotation_, start);
+    unit.owner = current_node;
+    unit.dom_start = start - inline_start + current_node->TextStartOffset();
+    unit.dom_end = end - inline_start + current_node->TextStartOffset();
+    unit.text_content_start = mapping_[start];
+    unit.text_content_end = mapping_[end];
+    result.units.push_back(unit);
+
+    start = end;
+  }
+  if (current_node) {
+    result.ranges.insert(current_node,
+                         std::make_pair(unit_range_start, result.units.size()));
+  }
+  return result;
+}
+
 Vector<unsigned> NGOffsetMappingBuilder::DumpOffsetMappingForTesting() const {
   return mapping_;
 }
 
+Vector<const LayoutText*> NGOffsetMappingBuilder::DumpAnnotationForTesting()
+    const {
+  return annotation_;
+}
+
 }  // namespace blink
diff --git a/third_party/WebKit/Source/core/layout/ng/inline/ng_offset_mapping_builder.h b/third_party/WebKit/Source/core/layout/ng/inline/ng_offset_mapping_builder.h
index 03158f9..0ee873f5 100644
--- a/third_party/WebKit/Source/core/layout/ng/inline/ng_offset_mapping_builder.h
+++ b/third_party/WebKit/Source/core/layout/ng/inline/ng_offset_mapping_builder.h
@@ -6,12 +6,15 @@
 #define NGOffsetMappingBuilder_h
 
 #include "core/CoreExport.h"
+#include "core/layout/LayoutText.h"
 #include "platform/wtf/Allocator.h"
 #include "platform/wtf/Vector.h"
 #include "platform/wtf/text/WTFString.h"
 
 namespace blink {
 
+struct NGOffsetMappingResult;
+
 // This is the helper class for constructing the DOM-to-TextContent offset
 // mapping. It holds an offset mapping, and provides APIs to modify the mapping
 // step by step until the construction is finished.
@@ -23,11 +26,9 @@
  public:
   NGOffsetMappingBuilder();
 
-  // TODO(xiaochengh): Add the following API when we implement the construction
-  // of the concatenated offset mapping.
   // Associate the offset mapping with a simple annotation with the given node
   // as its value.
-  // void Annotate(const Node&);
+  void Annotate(const LayoutText*);
 
   // Append an identity offset mapping of the specified length with null
   // annotation to the builder.
@@ -53,22 +54,18 @@
   // This function changes the space into collapsed.
   void CollapseTrailingSpace(unsigned index);
 
-  // TODO(xiaochengh): Add the following API when we implement the construction
-  // of the concatenated offset mapping.
   // Concatenate the offset mapping held by another builder to this builder.
-  // void Concatenate(const OffsetMappingBuilder&);
-
-  // TODO(xiaochengh): Add the following APIs when we implement the construction
-  // of the DOM-to-TextContent offset mapping.
+  void Concatenate(const NGOffsetMappingBuilder&);
 
   // Composite the offset mapping held by another builder to this builder.
-  // void Composite(const OffsetMappingBuilder&);
+  void Composite(const NGOffsetMappingBuilder&);
 
   // Finalize and return the offset mapping.
-  // OffsetMappingResult Build();
+  NGOffsetMappingResult Build() const;
 
   // Exposed for testing only.
   Vector<unsigned> DumpOffsetMappingForTesting() const;
+  Vector<const LayoutText*> DumpAnnotationForTesting() const;
 
  private:
   // A mock implementation of the offset mapping builder that stores the mapping
@@ -76,6 +73,10 @@
   // will be replaced by a real efficient implementation.
   Vector<unsigned> mapping_;
 
+  // A mock implementation that stores the annotation value of all offsets in
+  // the plain way. It will be replaced by a real implementation for efficiency.
+  Vector<const LayoutText*> annotation_;
+
   DISALLOW_COPY_AND_ASSIGN(NGOffsetMappingBuilder);
 };
 
diff --git a/third_party/WebKit/Source/core/layout/ng/inline/ng_offset_mapping_result.h b/third_party/WebKit/Source/core/layout/ng/inline/ng_offset_mapping_result.h
new file mode 100644
index 0000000..12b0bec
--- /dev/null
+++ b/third_party/WebKit/Source/core/layout/ng/inline/ng_offset_mapping_result.h
@@ -0,0 +1,65 @@
+// 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 NGOffsetMappingResult_h
+#define NGOffsetMappingResult_h
+
+#include "platform/wtf/Allocator.h"
+#include "platform/wtf/Vector.h"
+
+namespace blink {
+
+class LayoutText;
+
+enum class NGOffsetMappingUnitType { kIdentity, kCollapsed, kExpanded };
+
+// An NGOffsetMappingUnit indicates a "simple" offset mapping between dom offset
+// range [dom_start, dom_end] on node |owner| and text content offset range
+// [text_content_start, text_content_end]. The mapping between them falls in one
+// of the following categories, depending on |type|:
+// - kIdentity: The mapping between the two ranges is the identity mapping. In
+//   other words, the two ranges have the same length, and the offsets are
+//   mapped one-to-one.
+// - kCollapsed: The mapping is collapsed, namely, |text_content_start| and
+//   |text_content_end| are the same, and characters in the dom range are
+//   collapsed.
+// - kExpanded: The mapping is expanded, namely, |dom_end == dom_start + 1|, and
+//   |text_content_end > text_content_start + 1|, indicating that the character
+//   in the dom range is expanded into multiple characters.
+// See design doc https://goo.gl/CJbxky for details.
+struct NGOffsetMappingUnit {
+  DISALLOW_NEW_EXCEPT_PLACEMENT_NEW();
+
+  NGOffsetMappingUnitType type = NGOffsetMappingUnitType::kIdentity;
+
+  // Ideally, we should store |Node| as owner, instead of |LayoutObject|.
+  // However, we need to ensure the invariant that, units of the same owner are
+  // consecutive in |NGOffsetMappingResult::units|. This might have a subtle
+  // conflict with :first-letter if, during inline collection, there there are
+  // other strings collected between the first letter and the remaining text of
+  // the node.
+  // TODO(xiaochengh): Figure out if this the issue really exists. If not, then
+  // we should use |Node| as owner.
+  const LayoutText* owner = nullptr;
+
+  unsigned dom_start = 0;
+  unsigned dom_end = 0;
+  unsigned text_content_start = 0;
+  unsigned text_content_end = 0;
+};
+
+// An NGOffsetMappingResult stores the units of a LayoutNGBlockFlow in sorted
+// order in a vector. For each text node, the index range of the units owned by
+// the node is also stored.
+// See design doc https://goo.gl/CJbxky for details.
+struct NGOffsetMappingResult {
+  DISALLOW_NEW_EXCEPT_PLACEMENT_NEW();
+
+  Vector<NGOffsetMappingUnit> units;
+  HashMap<const LayoutText*, std::pair<unsigned, unsigned>> ranges;
+};
+
+}  // namespace blink
+
+#endif  // NGOffsetMappingResult_h
diff --git a/third_party/WebKit/Source/core/layout/ng/inline/ng_physical_line_box_fragment.h b/third_party/WebKit/Source/core/layout/ng/inline/ng_physical_line_box_fragment.h
index 386e449..5d77b2b 100644
--- a/third_party/WebKit/Source/core/layout/ng/inline/ng_physical_line_box_fragment.h
+++ b/third_party/WebKit/Source/core/layout/ng/inline/ng_physical_line_box_fragment.h
@@ -27,6 +27,12 @@
 
   const NGLineHeightMetrics& Metrics() const { return metrics_; }
 
+  RefPtr<NGPhysicalFragment> CloneWithoutOffset() const {
+    Vector<RefPtr<NGPhysicalFragment>> children_copy(children_);
+    return AdoptRef(new NGPhysicalLineBoxFragment(size_, children_copy,
+                                                  metrics_, break_token_));
+  }
+
   // Compute baseline for the specified baseline type.
   LayoutUnit BaselinePosition(FontBaseline) const;
 
diff --git a/third_party/WebKit/Source/core/layout/ng/inline/ng_physical_text_fragment.h b/third_party/WebKit/Source/core/layout/ng/inline/ng_physical_text_fragment.h
index fc1b623..a767e4b 100644
--- a/third_party/WebKit/Source/core/layout/ng/inline/ng_physical_text_fragment.h
+++ b/third_party/WebKit/Source/core/layout/ng/inline/ng_physical_text_fragment.h
@@ -69,6 +69,12 @@
     return LineOrientation() == NGLineOrientation::kHorizontal;
   }
 
+  RefPtr<NGPhysicalFragment> CloneWithoutOffset() const {
+    return AdoptRef(new NGPhysicalTextFragment(
+        layout_object_, node_, item_index_, start_offset_, end_offset_, size_,
+        LineOrientation(), shape_result_));
+  }
+
  private:
   // TODO(kojii): NGInlineNode is to access text content and NGLayoutInlineItem.
   // Review if it's better to point them.
diff --git a/third_party/WebKit/Source/core/layout/ng/ng_layout_result.cc b/third_party/WebKit/Source/core/layout/ng/ng_layout_result.cc
index f38902f..af5c4632 100644
--- a/third_party/WebKit/Source/core/layout/ng/ng_layout_result.cc
+++ b/third_party/WebKit/Source/core/layout/ng/ng_layout_result.cc
@@ -23,4 +23,13 @@
   oof_positioned_descendants_.swap(oof_positioned_descendants);
 }
 
+RefPtr<NGLayoutResult> NGLayoutResult::CloneWithoutOffset() const {
+  Vector<NGOutOfFlowPositionedDescendant> oof_positioned_descendants(
+      oof_positioned_descendants_);
+  Vector<RefPtr<NGUnpositionedFloat>> unpositioned_floats(unpositioned_floats_);
+  return AdoptRef(new NGLayoutResult(
+      physical_fragment_->CloneWithoutOffset(), oof_positioned_descendants,
+      unpositioned_floats, bfc_offset_, end_margin_strut_, Status()));
+}
+
 }  // namespace blink
diff --git a/third_party/WebKit/Source/core/layout/ng/ng_layout_result.h b/third_party/WebKit/Source/core/layout/ng/ng_layout_result.h
index cf9c347..698bd76 100644
--- a/third_party/WebKit/Source/core/layout/ng/ng_layout_result.h
+++ b/third_party/WebKit/Source/core/layout/ng/ng_layout_result.h
@@ -69,6 +69,8 @@
 
   const NGMarginStrut EndMarginStrut() const { return end_margin_strut_; }
 
+  RefPtr<NGLayoutResult> CloneWithoutOffset() const;
+
  private:
   friend class NGFragmentBuilder;
 
diff --git a/third_party/WebKit/Source/core/layout/ng/ng_physical_box_fragment.cc b/third_party/WebKit/Source/core/layout/ng/ng_physical_box_fragment.cc
index d7b2c04..2151066 100644
--- a/third_party/WebKit/Source/core/layout/ng/ng_physical_box_fragment.cc
+++ b/third_party/WebKit/Source/core/layout/ng/ng_physical_box_fragment.cc
@@ -37,4 +37,13 @@
   return nullptr;
 }
 
+RefPtr<NGPhysicalFragment> NGPhysicalBoxFragment::CloneWithoutOffset() const {
+  Vector<RefPtr<NGPhysicalFragment>> children_copy(children_);
+  Vector<NGBaseline> baselines_copy(baselines_);
+  RefPtr<NGPhysicalFragment> physical_fragment = AdoptRef(
+      new NGPhysicalBoxFragment(layout_object_, size_, overflow_, children_copy,
+                                baselines_copy, border_edge_, break_token_));
+  return physical_fragment;
+}
+
 }  // namespace blink
diff --git a/third_party/WebKit/Source/core/layout/ng/ng_physical_box_fragment.h b/third_party/WebKit/Source/core/layout/ng/ng_physical_box_fragment.h
index 04ea052..f9d1de9f 100644
--- a/third_party/WebKit/Source/core/layout/ng/ng_physical_box_fragment.h
+++ b/third_party/WebKit/Source/core/layout/ng/ng_physical_box_fragment.h
@@ -35,6 +35,8 @@
 
   const NGBaseline* Baseline(const NGBaselineRequest&) const;
 
+  RefPtr<NGPhysicalFragment> CloneWithoutOffset() const;
+
  private:
   NGPhysicalSize overflow_;
   Vector<RefPtr<NGPhysicalFragment>> children_;
diff --git a/third_party/WebKit/Source/core/layout/ng/ng_physical_fragment.cc b/third_party/WebKit/Source/core/layout/ng/ng_physical_fragment.cc
index d1f234a..a07a08e 100644
--- a/third_party/WebKit/Source/core/layout/ng/ng_physical_fragment.cc
+++ b/third_party/WebKit/Source/core/layout/ng/ng_physical_fragment.cc
@@ -59,6 +59,27 @@
   return box_strut.SnapToDevicePixels();
 }
 
+RefPtr<NGPhysicalFragment> NGPhysicalFragment::CloneWithoutOffset() const {
+  switch (Type()) {
+    case kFragmentBox:
+      return static_cast<const NGPhysicalBoxFragment*>(this)
+          ->CloneWithoutOffset();
+      break;
+    case kFragmentText:
+      return static_cast<const NGPhysicalTextFragment*>(this)
+          ->CloneWithoutOffset();
+      break;
+    case kFragmentLineBox:
+      return static_cast<const NGPhysicalLineBoxFragment*>(this)
+          ->CloneWithoutOffset();
+      break;
+    default:
+      NOTREACHED();
+      break;
+  }
+  return nullptr;
+}
+
 String NGPhysicalFragment::ToString() const {
   return String::Format("Type: '%d' Size: '%s' Offset: '%s' Placed: '%d'",
                         Type(), Size().ToString().Ascii().data(),
diff --git a/third_party/WebKit/Source/core/layout/ng/ng_physical_fragment.h b/third_party/WebKit/Source/core/layout/ng/ng_physical_fragment.h
index dbf8786..6c5af24 100644
--- a/third_party/WebKit/Source/core/layout/ng/ng_physical_fragment.h
+++ b/third_party/WebKit/Source/core/layout/ng/ng_physical_fragment.h
@@ -67,6 +67,8 @@
   NGBreakToken* BreakToken() const { return break_token_.Get(); }
   const ComputedStyle& Style() const;
 
+  RefPtr<NGPhysicalFragment> CloneWithoutOffset() const;
+
   // GetLayoutObject should only be used when necessary for compatibility
   // with LegacyLayout.
   LayoutObject* GetLayoutObject() const { return layout_object_; }
diff --git a/third_party/WebKit/Source/core/paint/BoxModelObjectPainter.cpp b/third_party/WebKit/Source/core/paint/BoxModelObjectPainter.cpp
index 2569f7d..dff54ed8 100644
--- a/third_party/WebKit/Source/core/paint/BoxModelObjectPainter.cpp
+++ b/third_party/WebKit/Source/core/paint/BoxModelObjectPainter.cpp
@@ -29,6 +29,35 @@
          box_model_ == paint_info.PaintContainer();
 }
 
+void BoxModelObjectPainter::PaintFillLayers(const PaintInfo& paint_info,
+                                            const Color& c,
+                                            const FillLayer& fill_layer,
+                                            const LayoutRect& rect,
+                                            BackgroundImageGeometry& geometry,
+                                            BackgroundBleedAvoidance bleed,
+                                            SkBlendMode op) {
+  FillLayerOcclusionOutputList reversed_paint_list;
+  bool should_draw_background_in_separate_buffer =
+      CalculateFillLayerOcclusionCulling(reversed_paint_list, fill_layer,
+                                         box_model_.GetDocument(),
+                                         box_model_.StyleRef());
+
+  // TODO(trchen): We can optimize out isolation group if we have a
+  // non-transparent background color and the bottom layer encloses all other
+  // layers.
+  GraphicsContext& context = paint_info.context;
+  if (should_draw_background_in_separate_buffer)
+    context.BeginLayer();
+
+  for (auto it = reversed_paint_list.rbegin(); it != reversed_paint_list.rend();
+       ++it) {
+    PaintFillLayer(paint_info, c, **it, rect, bleed, geometry, op);
+  }
+
+  if (should_draw_background_in_separate_buffer)
+    context.EndLayer();
+}
+
 namespace {
 
 class InterpolationQualityContext {
@@ -243,9 +272,9 @@
     const LayoutRect& rect,
     BackgroundBleedAvoidance bleed_avoidance,
     BackgroundImageGeometry& geometry,
+    SkBlendMode op,
     const InlineFlowBox* box,
-    const LayoutSize& box_size,
-    SkBlendMode op) {
+    const LayoutSize& box_size) {
   GraphicsContext& context = paint_info.context;
   if (rect.IsEmpty())
     return;
diff --git a/third_party/WebKit/Source/core/paint/BoxModelObjectPainter.h b/third_party/WebKit/Source/core/paint/BoxModelObjectPainter.h
index 95b3f8a..b2da188 100644
--- a/third_party/WebKit/Source/core/paint/BoxModelObjectPainter.h
+++ b/third_party/WebKit/Source/core/paint/BoxModelObjectPainter.h
@@ -30,15 +30,23 @@
   BoxModelObjectPainter(const LayoutBoxModelObject& box_model)
       : box_model_(box_model) {}
 
+  void PaintFillLayers(const PaintInfo&,
+                       const Color&,
+                       const FillLayer&,
+                       const LayoutRect&,
+                       BackgroundImageGeometry&,
+                       BackgroundBleedAvoidance = kBackgroundBleedNone,
+                       SkBlendMode = SkBlendMode::kSrcOver);
+
   void PaintFillLayer(const PaintInfo&,
                       const Color&,
                       const FillLayer&,
                       const LayoutRect&,
                       BackgroundBleedAvoidance,
                       BackgroundImageGeometry&,
+                      SkBlendMode = SkBlendMode::kSrcOver,
                       const InlineFlowBox* = nullptr,
-                      const LayoutSize& = LayoutSize(),
-                      SkBlendMode = SkBlendMode::kSrcOver);
+                      const LayoutSize& = LayoutSize());
 
   static bool IsPaintingBackgroundOfPaintContainerIntoScrollingContentsLayer(
       const LayoutBoxModelObject*,
diff --git a/third_party/WebKit/Source/core/paint/BoxPainter.cpp b/third_party/WebKit/Source/core/paint/BoxPainter.cpp
index 67ba419..4dcb9a2b 100644
--- a/third_party/WebKit/Source/core/paint/BoxPainter.cpp
+++ b/third_party/WebKit/Source/core/paint/BoxPainter.cpp
@@ -18,7 +18,6 @@
 #include "core/paint/NinePieceImagePainter.h"
 #include "core/paint/ObjectPainter.h"
 #include "core/paint/PaintInfo.h"
-#include "core/paint/PaintLayer.h"
 #include "core/paint/ScrollRecorder.h"
 #include "core/paint/ThemePainter.h"
 #include "core/style/ShadowList.h"
@@ -194,40 +193,10 @@
   if (layout_box_.BackgroundIsKnownToBeObscured())
     return;
   BackgroundImageGeometry geometry(layout_box_);
-  PaintFillLayers(paint_info, background_color,
-                  layout_box_.Style()->BackgroundLayers(), paint_rect, geometry,
-                  bleed_avoidance);
-}
-
-void BoxPainter::PaintFillLayers(const PaintInfo& paint_info,
-                                 const Color& c,
-                                 const FillLayer& fill_layer,
-                                 const LayoutRect& rect,
-                                 BackgroundImageGeometry& geometry,
-                                 BackgroundBleedAvoidance bleed_avoidance,
-                                 SkBlendMode op) {
-  FillLayerOcclusionOutputList reversed_paint_list;
-  bool should_draw_background_in_separate_buffer =
-      CalculateFillLayerOcclusionCulling(reversed_paint_list, fill_layer,
-                                         layout_box_.GetDocument(),
-                                         layout_box_.StyleRef());
-
-  // TODO(trchen): We can optimize out isolation group if we have a
-  // non-transparent background color and the bottom layer encloses all other
-  // layers.
-  GraphicsContext& context = paint_info.context;
-  if (should_draw_background_in_separate_buffer)
-    context.BeginLayer();
-
   BoxModelObjectPainter box_model_painter(layout_box_);
-  for (auto it = reversed_paint_list.rbegin(); it != reversed_paint_list.rend();
-       ++it) {
-    box_model_painter.PaintFillLayer(paint_info, c, **it, rect, bleed_avoidance,
-                                     geometry, 0, LayoutSize(), op);
-  }
-
-  if (should_draw_background_in_separate_buffer)
-    context.EndLayer();
+  box_model_painter.PaintFillLayers(paint_info, background_color,
+                                    layout_box_.Style()->BackgroundLayers(),
+                                    paint_rect, geometry, bleed_avoidance);
 }
 
 void BoxPainter::PaintMask(const PaintInfo& paint_info,
@@ -278,8 +247,10 @@
 
   if (all_mask_images_loaded) {
     BackgroundImageGeometry geometry(layout_box_);
-    PaintFillLayers(paint_info, Color::kTransparent,
-                    layout_box_.Style()->MaskLayers(), paint_rect, geometry);
+    BoxModelObjectPainter box_model_painter(layout_box_);
+    box_model_painter.PaintFillLayers(paint_info, Color::kTransparent,
+                                      layout_box_.Style()->MaskLayers(),
+                                      paint_rect, geometry);
     NinePieceImagePainter::Paint(paint_info.context, layout_box_,
                                  layout_box_.GetDocument(), GetNode(),
                                  paint_rect, layout_box_.StyleRef(),
diff --git a/third_party/WebKit/Source/core/paint/BoxPainter.h b/third_party/WebKit/Source/core/paint/BoxPainter.h
index acf2901..2ced16a 100644
--- a/third_party/WebKit/Source/core/paint/BoxPainter.h
+++ b/third_party/WebKit/Source/core/paint/BoxPainter.h
@@ -14,12 +14,10 @@
 
 namespace blink {
 
-class FillLayer;
 class LayoutPoint;
 class LayoutRect;
 struct PaintInfo;
 class LayoutBox;
-class BackgroundImageGeometry;
 
 class BoxPainter : public BoxPainterBase {
   STACK_ALLOCATED();
@@ -33,13 +31,6 @@
   void PaintMask(const PaintInfo&, const LayoutPoint&);
   void PaintClippingMask(const PaintInfo&, const LayoutPoint&);
 
-  void PaintFillLayers(const PaintInfo&,
-                       const Color&,
-                       const FillLayer&,
-                       const LayoutRect&,
-                       BackgroundImageGeometry&,
-                       BackgroundBleedAvoidance = kBackgroundBleedNone,
-                       SkBlendMode = SkBlendMode::kSrcOver);
   void PaintMaskImages(const PaintInfo&, const LayoutRect&);
   void PaintBoxDecorationBackgroundWithRect(const PaintInfo&,
                                             const LayoutPoint&,
diff --git a/third_party/WebKit/Source/core/paint/FieldsetPainter.cpp b/third_party/WebKit/Source/core/paint/FieldsetPainter.cpp
index cc07807d..1b7010c 100644
--- a/third_party/WebKit/Source/core/paint/FieldsetPainter.cpp
+++ b/third_party/WebKit/Source/core/paint/FieldsetPainter.cpp
@@ -7,6 +7,7 @@
 #include "core/layout/LayoutFieldset.h"
 #include "core/paint/BackgroundImageGeometry.h"
 #include "core/paint/BoxDecorationData.h"
+#include "core/paint/BoxModelObjectPainter.h"
 #include "core/paint/BoxPainter.h"
 #include "core/paint/LayoutObjectDrawingRecorder.h"
 #include "core/paint/PaintInfo.h"
@@ -53,7 +54,7 @@
   BoxPainter::PaintNormalBoxShadow(paint_info, paint_rect,
                                    layout_fieldset_.StyleRef());
   BackgroundImageGeometry geometry(layout_fieldset_);
-  BoxPainter(layout_fieldset_)
+  BoxModelObjectPainter(layout_fieldset_)
       .PaintFillLayers(paint_info, box_decoration_data.background_color,
                        layout_fieldset_.Style()->BackgroundLayers(), paint_rect,
                        geometry);
diff --git a/third_party/WebKit/Source/core/paint/InlineFlowBoxPainter.cpp b/third_party/WebKit/Source/core/paint/InlineFlowBoxPainter.cpp
index 7ae3538..03b5cd8 100644
--- a/third_party/WebKit/Source/core/paint/InlineFlowBoxPainter.cpp
+++ b/third_party/WebKit/Source/core/paint/InlineFlowBoxPainter.cpp
@@ -88,16 +88,16 @@
       (!inline_flow_box_.PrevLineBox() && !inline_flow_box_.NextLineBox()) ||
       !inline_flow_box_.Parent()) {
     box_model_painter.PaintFillLayer(paint_info, c, fill_layer, rect,
-                                     kBackgroundBleedNone, geometry,
-                                     &inline_flow_box_, rect.Size(), op);
+                                     kBackgroundBleedNone, geometry, op,
+                                     &inline_flow_box_, rect.Size());
   } else if (inline_flow_box_.GetLineLayoutItem()
                  .Style()
                  ->BoxDecorationBreak() == EBoxDecorationBreak::kClone) {
     GraphicsContextStateSaver state_saver(paint_info.context);
     paint_info.context.Clip(PixelSnappedIntRect(rect));
     box_model_painter.PaintFillLayer(paint_info, c, fill_layer, rect,
-                                     kBackgroundBleedNone, geometry,
-                                     &inline_flow_box_, rect.Size(), op);
+                                     kBackgroundBleedNone, geometry, op,
+                                     &inline_flow_box_, rect.Size());
   } else {
     // We have a fill image that spans multiple lines.
     // FIXME: frameSize ought to be the same as rect.size().
@@ -110,7 +110,7 @@
     paint_info.context.Clip(PixelSnappedIntRect(rect));
     box_model_painter.PaintFillLayer(
         paint_info, c, fill_layer, image_strip_paint_rect, kBackgroundBleedNone,
-        geometry, &inline_flow_box_, rect.Size(), op);
+        geometry, op, &inline_flow_box_, rect.Size());
   }
 }
 
diff --git a/third_party/WebKit/Source/core/paint/PaintLayerScrollableArea.cpp b/third_party/WebKit/Source/core/paint/PaintLayerScrollableArea.cpp
index 18a6ea4..caf7dd5 100644
--- a/third_party/WebKit/Source/core/paint/PaintLayerScrollableArea.cpp
+++ b/third_party/WebKit/Source/core/paint/PaintLayerScrollableArea.cpp
@@ -907,8 +907,7 @@
   ClampScrollOffsetAfterOverflowChange();
 
   if (!scrollbars_are_frozen) {
-    UpdateScrollableAreaSet(HasScrollableHorizontalOverflow() ||
-                            HasScrollableVerticalOverflow());
+    UpdateScrollableAreaSet();
   }
 
   DisableCompositingQueryAsserts disabler;
@@ -1009,14 +1008,6 @@
   return PixelSnappedScrollHeight() > PixelSnappedClientSize().Height();
 }
 
-bool PaintLayerScrollableArea::HasScrollableHorizontalOverflow() const {
-  return HasHorizontalOverflow() && Box().ScrollsOverflowX();
-}
-
-bool PaintLayerScrollableArea::HasScrollableVerticalOverflow() const {
-  return HasVerticalOverflow() && Box().ScrollsOverflowY();
-}
-
 // This function returns true if the given box requires overflow scrollbars (as
 // opposed to the 'viewport' scrollbars managed by the PaintLayerCompositor).
 // FIXME: we should use the same scrolling machinery for both the viewport and
@@ -1032,8 +1023,7 @@
     const ComputedStyle* old_style) {
   // Don't do this on first style recalc, before layout has ever happened.
   if (!OverflowRect().Size().IsZero()) {
-    UpdateScrollableAreaSet(HasScrollableHorizontalOverflow() ||
-                            HasScrollableVerticalOverflow());
+    UpdateScrollableAreaSet();
   }
 
   // Whenever background changes on the scrollable element, the scroll bar
@@ -1830,7 +1820,7 @@
   return intersect;
 }
 
-void PaintLayerScrollableArea::UpdateScrollableAreaSet(bool has_overflow) {
+void PaintLayerScrollableArea::UpdateScrollableAreaSet() {
   LocalFrame* frame = Box().GetFrame();
   if (!frame)
     return;
@@ -1839,6 +1829,10 @@
   if (!frame_view)
     return;
 
+  bool has_overflow = !Box().Size().IsZero() &&
+                      ((HasHorizontalOverflow() && Box().ScrollsOverflowX()) ||
+                       (HasVerticalOverflow() && Box().ScrollsOverflowY()));
+
   bool is_visible_to_hit_test = Box().Style()->VisibleToHitTesting();
   bool did_scroll_overflow = scrolls_overflow_;
   if (Box().IsLayoutView()) {
diff --git a/third_party/WebKit/Source/core/paint/PaintLayerScrollableArea.h b/third_party/WebKit/Source/core/paint/PaintLayerScrollableArea.h
index fd863db..573e83c4 100644
--- a/third_party/WebKit/Source/core/paint/PaintLayerScrollableArea.h
+++ b/third_party/WebKit/Source/core/paint/PaintLayerScrollableArea.h
@@ -513,8 +513,6 @@
 
   bool HasHorizontalOverflow() const;
   bool HasVerticalOverflow() const;
-  bool HasScrollableHorizontalOverflow() const;
-  bool HasScrollableVerticalOverflow() const;
   bool VisualViewportSuppliesScrollbars() const;
 
   bool NeedsScrollbarReconstruction() const;
@@ -546,7 +544,7 @@
   void UpdateResizerAreaSet();
   void UpdateResizerStyle();
 
-  void UpdateScrollableAreaSet(bool has_overflow);
+  void UpdateScrollableAreaSet();
 
   void UpdateCompositingLayersAfterScroll();
 
diff --git a/third_party/WebKit/Source/core/paint/TableCellPainter.cpp b/third_party/WebKit/Source/core/paint/TableCellPainter.cpp
index 4baffbb2..137135a 100644
--- a/third_party/WebKit/Source/core/paint/TableCellPainter.cpp
+++ b/third_party/WebKit/Source/core/paint/TableCellPainter.cpp
@@ -7,6 +7,7 @@
 #include "core/layout/LayoutTableCell.h"
 #include "core/paint/BackgroundImageGeometry.h"
 #include "core/paint/BlockPainter.h"
+#include "core/paint/BoxModelObjectPainter.h"
 #include "core/paint/BoxPainter.h"
 #include "core/paint/LayoutObjectDrawingRecorder.h"
 #include "core/paint/ObjectPainter.h"
@@ -63,7 +64,7 @@
       paint_info.context.Clip(PixelSnappedIntRect(clip_rect));
     }
     BackgroundImageGeometry geometry(layout_table_cell_, &background_object);
-    BoxPainter(layout_table_cell_)
+    BoxModelObjectPainter(layout_table_cell_)
         .PaintFillLayers(paint_info, c, bg_layer, paint_rect, geometry,
                          kBackgroundBleedNone, SkBlendMode::kSrcOver);
   }
diff --git a/third_party/WebKit/Source/core/timing/PerformanceBaseTest.cpp b/third_party/WebKit/Source/core/timing/PerformanceBaseTest.cpp
index c17d5d6..ef429e0 100644
--- a/third_party/WebKit/Source/core/timing/PerformanceBaseTest.cpp
+++ b/third_party/WebKit/Source/core/timing/PerformanceBaseTest.cpp
@@ -47,8 +47,7 @@
         v8::Function::New(script_state->GetContext(), nullptr).ToLocalChecked();
     base_ = new TestPerformanceBase(script_state);
     cb_ = PerformanceObserverCallback::Create(script_state, callback);
-    observer_ = PerformanceObserver::Create(
-        ExecutionContext::From(script_state), base_, cb_);
+    observer_ = new PerformanceObserver(script_state, base_, cb_);
   }
 
   void SetUp() override {
diff --git a/third_party/WebKit/Source/core/timing/PerformanceObserver.cpp b/third_party/WebKit/Source/core/timing/PerformanceObserver.cpp
index 35f4c461..cfe26f8 100644
--- a/third_party/WebKit/Source/core/timing/PerformanceObserver.cpp
+++ b/third_party/WebKit/Source/core/timing/PerformanceObserver.cpp
@@ -4,34 +4,48 @@
 
 #include "core/timing/PerformanceObserver.h"
 
+#include <algorithm>
+#include "bindings/core/v8/ExceptionMessages.h"
 #include "bindings/core/v8/ExceptionState.h"
 #include "bindings/core/v8/PerformanceObserverCallback.h"
+#include "bindings/core/v8/V8BindingForCore.h"
 #include "core/dom/ExecutionContext.h"
-#include "core/timing/PerformanceBase.h"
+#include "core/frame/LocalDOMWindow.h"
+#include "core/timing/DOMWindowPerformance.h"
+#include "core/timing/Performance.h"
 #include "core/timing/PerformanceEntry.h"
 #include "core/timing/PerformanceObserverEntryList.h"
 #include "core/timing/PerformanceObserverInit.h"
 #include "platform/Timer.h"
-#include <algorithm>
 
 namespace blink {
 
 PerformanceObserver* PerformanceObserver::Create(
-    ExecutionContext* execution_context,
-    PerformanceBase* performance,
+    ScriptState* script_state,
     PerformanceObserverCallback* callback) {
   DCHECK(IsMainThread());
-  return new PerformanceObserver(execution_context, performance, callback);
+  LocalDOMWindow* window = ToLocalDOMWindow(script_state->GetContext());
+  if (!window) {
+    V8ThrowException::ThrowTypeError(
+        script_state->GetIsolate(),
+        ExceptionMessages::FailedToConstruct(
+            "PerformanceObserver", "No 'window' in current context."));
+    return nullptr;
+  }
+  return new PerformanceObserver(
+      script_state, DOMWindowPerformance::performance(*window), callback);
 }
 
-PerformanceObserver::PerformanceObserver(ExecutionContext* execution_context,
+PerformanceObserver::PerformanceObserver(ScriptState* script_state,
                                          PerformanceBase* performance,
                                          PerformanceObserverCallback* callback)
-    : execution_context_(execution_context),
+    : execution_context_(ExecutionContext::From(script_state)),
       callback_(this, callback),
       performance_(performance),
       filter_options_(PerformanceEntry::kInvalid),
-      is_registered_(false) {}
+      is_registered_(false) {
+  DCHECK(performance_);
+}
 
 void PerformanceObserver::observe(const PerformanceObserverInit& observer_init,
                                   ExceptionState& exception_state) {
diff --git a/third_party/WebKit/Source/core/timing/PerformanceObserver.h b/third_party/WebKit/Source/core/timing/PerformanceObserver.h
index d8c2f96e..2b289ee 100644
--- a/third_party/WebKit/Source/core/timing/PerformanceObserver.h
+++ b/third_party/WebKit/Source/core/timing/PerformanceObserver.h
@@ -31,8 +31,7 @@
   friend class PerformanceObserverTest;
 
  public:
-  static PerformanceObserver* Create(ExecutionContext*,
-                                     PerformanceBase*,
+  static PerformanceObserver* Create(ScriptState*,
                                      PerformanceObserverCallback*);
   static void ResumeSuspendedObservers();
 
@@ -45,7 +44,7 @@
   DECLARE_TRACE_WRAPPERS();
 
  private:
-  PerformanceObserver(ExecutionContext*,
+  PerformanceObserver(ScriptState*,
                       PerformanceBase*,
                       PerformanceObserverCallback*);
   void Deliver();
diff --git a/third_party/WebKit/Source/core/timing/PerformanceObserver.idl b/third_party/WebKit/Source/core/timing/PerformanceObserver.idl
index 960b95769..684ca3b 100644
--- a/third_party/WebKit/Source/core/timing/PerformanceObserver.idl
+++ b/third_party/WebKit/Source/core/timing/PerformanceObserver.idl
@@ -7,7 +7,8 @@
 
 // https://w3c.github.io/performance-timeline/#the-performance-observer-interface
 [
-    CustomConstructor(PerformanceObserverCallback callback),
+    Constructor(PerformanceObserverCallback callback),
+    ConstructorCallWith=ScriptState,
     RuntimeEnabled=PerformanceObserver
 ] interface PerformanceObserver {
     [RaisesException] void observe(PerformanceObserverInit options);
diff --git a/third_party/WebKit/Source/core/timing/PerformanceObserverTest.cpp b/third_party/WebKit/Source/core/timing/PerformanceObserverTest.cpp
index 89e6ed4..7fa6c9b5 100644
--- a/third_party/WebKit/Source/core/timing/PerformanceObserverTest.cpp
+++ b/third_party/WebKit/Source/core/timing/PerformanceObserverTest.cpp
@@ -34,8 +34,7 @@
         v8::Function::New(script_state->GetContext(), nullptr).ToLocalChecked();
     base_ = new MockPerformanceBase(script_state);
     cb_ = PerformanceObserverCallback::Create(script_state, callback);
-    observer_ = PerformanceObserver::Create(
-        ExecutionContext::From(script_state), base_, cb_);
+    observer_ = new PerformanceObserver(script_state, base_, cb_);
   }
 
   bool IsRegistered() { return observer_->is_registered_; }
diff --git a/third_party/WebKit/Source/core/workers/DedicatedWorkerMessagingProxy.cpp b/third_party/WebKit/Source/core/workers/DedicatedWorkerMessagingProxy.cpp
index 7cb47c65..42dbaeb5 100644
--- a/third_party/WebKit/Source/core/workers/DedicatedWorkerMessagingProxy.cpp
+++ b/third_party/WebKit/Source/core/workers/DedicatedWorkerMessagingProxy.cpp
@@ -34,10 +34,10 @@
                              : AtomicsWaitMode::kDisallow);
 }
 
-std::unique_ptr<WorkerThread> DedicatedWorkerMessagingProxy::CreateWorkerThread(
-    double origin_time) {
+std::unique_ptr<WorkerThread>
+DedicatedWorkerMessagingProxy::CreateWorkerThread() {
   return DedicatedWorkerThread::Create(CreateThreadableLoadingContext(),
-                                       WorkerObjectProxy(), origin_time);
+                                       WorkerObjectProxy());
 }
 
 }  // namespace blink
diff --git a/third_party/WebKit/Source/core/workers/DedicatedWorkerMessagingProxy.h b/third_party/WebKit/Source/core/workers/DedicatedWorkerMessagingProxy.h
index 026a993..280af1f 100644
--- a/third_party/WebKit/Source/core/workers/DedicatedWorkerMessagingProxy.h
+++ b/third_party/WebKit/Source/core/workers/DedicatedWorkerMessagingProxy.h
@@ -25,7 +25,7 @@
   WTF::Optional<WorkerBackingThreadStartupData> CreateBackingThreadStartupData(
       v8::Isolate*) override;
 
-  std::unique_ptr<WorkerThread> CreateWorkerThread(double origin_time) override;
+  std::unique_ptr<WorkerThread> CreateWorkerThread() override;
 };
 
 }  // namespace blink
diff --git a/third_party/WebKit/Source/core/workers/DedicatedWorkerTest.cpp b/third_party/WebKit/Source/core/workers/DedicatedWorkerTest.cpp
index 5765ca3f..4bba8b5 100644
--- a/third_party/WebKit/Source/core/workers/DedicatedWorkerTest.cpp
+++ b/third_party/WebKit/Source/core/workers/DedicatedWorkerTest.cpp
@@ -41,8 +41,7 @@
  public:
   DedicatedWorkerThreadForTest(InProcessWorkerObjectProxy& worker_object_proxy)
       : DedicatedWorkerThread(nullptr /* ThreadableLoadingContext */,
-                              worker_object_proxy,
-                              MonotonicallyIncreasingTime()) {
+                              worker_object_proxy) {
     worker_backing_thread_ = WorkerBackingThread::CreateForTest("Test thread");
   }
 
@@ -203,8 +202,7 @@
   }
 
  private:
-  std::unique_ptr<WorkerThread> CreateWorkerThread(
-      double origin_time) override {
+  std::unique_ptr<WorkerThread> CreateWorkerThread() override {
     auto worker_thread =
         WTF::MakeUnique<DedicatedWorkerThreadForTest>(WorkerObjectProxy());
     mock_worker_thread_lifecycle_observer_ =
diff --git a/third_party/WebKit/Source/core/workers/DedicatedWorkerThread.cpp b/third_party/WebKit/Source/core/workers/DedicatedWorkerThread.cpp
index 9bea3c34..6fe83ad 100644
--- a/third_party/WebKit/Source/core/workers/DedicatedWorkerThread.cpp
+++ b/third_party/WebKit/Source/core/workers/DedicatedWorkerThread.cpp
@@ -42,21 +42,18 @@
 
 std::unique_ptr<DedicatedWorkerThread> DedicatedWorkerThread::Create(
     ThreadableLoadingContext* loading_context,
-    InProcessWorkerObjectProxy& worker_object_proxy,
-    double time_origin) {
-  return WTF::WrapUnique(new DedicatedWorkerThread(
-      loading_context, worker_object_proxy, time_origin));
+    InProcessWorkerObjectProxy& worker_object_proxy) {
+  return WTF::WrapUnique(
+      new DedicatedWorkerThread(loading_context, worker_object_proxy));
 }
 
 DedicatedWorkerThread::DedicatedWorkerThread(
     ThreadableLoadingContext* loading_context,
-    InProcessWorkerObjectProxy& worker_object_proxy,
-    double time_origin)
+    InProcessWorkerObjectProxy& worker_object_proxy)
     : WorkerThread(loading_context, worker_object_proxy),
       worker_backing_thread_(
           WorkerBackingThread::Create("DedicatedWorker Thread")),
-      worker_object_proxy_(worker_object_proxy),
-      time_origin_(time_origin) {}
+      worker_object_proxy_(worker_object_proxy) {}
 
 DedicatedWorkerThread::~DedicatedWorkerThread() {}
 
diff --git a/third_party/WebKit/Source/core/workers/DedicatedWorkerThread.h b/third_party/WebKit/Source/core/workers/DedicatedWorkerThread.h
index af6c198d..a827208 100644
--- a/third_party/WebKit/Source/core/workers/DedicatedWorkerThread.h
+++ b/third_party/WebKit/Source/core/workers/DedicatedWorkerThread.h
@@ -42,8 +42,7 @@
  public:
   static std::unique_ptr<DedicatedWorkerThread> Create(
       ThreadableLoadingContext*,
-      InProcessWorkerObjectProxy&,
-      double time_origin);
+      InProcessWorkerObjectProxy&);
   ~DedicatedWorkerThread() override;
 
   WorkerBackingThread& GetWorkerBackingThread() override {
@@ -55,9 +54,7 @@
   }
 
  protected:
-  DedicatedWorkerThread(ThreadableLoadingContext*,
-                        InProcessWorkerObjectProxy&,
-                        double time_origin);
+  DedicatedWorkerThread(ThreadableLoadingContext*, InProcessWorkerObjectProxy&);
   WorkerOrWorkletGlobalScope* CreateWorkerGlobalScope(
       std::unique_ptr<GlobalScopeCreationParams>) override;
 
@@ -66,7 +63,6 @@
 
   std::unique_ptr<WorkerBackingThread> worker_backing_thread_;
   InProcessWorkerObjectProxy& worker_object_proxy_;
-  double time_origin_;
 };
 
 }  // namespace blink
diff --git a/third_party/WebKit/Source/core/workers/SharedWorkerGlobalScope.cpp b/third_party/WebKit/Source/core/workers/SharedWorkerGlobalScope.cpp
index 019446c4..3dffb4d 100644
--- a/third_party/WebKit/Source/core/workers/SharedWorkerGlobalScope.cpp
+++ b/third_party/WebKit/Source/core/workers/SharedWorkerGlobalScope.cpp
@@ -54,11 +54,12 @@
 SharedWorkerGlobalScope* SharedWorkerGlobalScope::Create(
     const String& name,
     SharedWorkerThread* thread,
-    std::unique_ptr<GlobalScopeCreationParams> creation_params) {
+    std::unique_ptr<GlobalScopeCreationParams> creation_params,
+    double time_origin) {
   SharedWorkerGlobalScope* context = new SharedWorkerGlobalScope(
       name, creation_params->script_url, creation_params->user_agent, thread,
       std::move(creation_params->starter_origin_privilege_data),
-      creation_params->worker_clients);
+      creation_params->worker_clients, time_origin);
   context->ApplyContentSecurityPolicyFromVector(
       *creation_params->content_security_policy_headers);
   context->SetWorkerSettings(std::move(creation_params->worker_settings));
@@ -77,11 +78,12 @@
     SharedWorkerThread* thread,
     std::unique_ptr<SecurityOrigin::PrivilegeData>
         starter_origin_privilege_data,
-    WorkerClients* worker_clients)
+    WorkerClients* worker_clients,
+    double time_origin)
     : WorkerGlobalScope(url,
                         user_agent,
                         thread,
-                        MonotonicallyIncreasingTime(),
+                        time_origin,
                         std::move(starter_origin_privilege_data),
                         worker_clients),
       name_(name) {}
diff --git a/third_party/WebKit/Source/core/workers/SharedWorkerGlobalScope.h b/third_party/WebKit/Source/core/workers/SharedWorkerGlobalScope.h
index b2caa68..ab956a3 100644
--- a/third_party/WebKit/Source/core/workers/SharedWorkerGlobalScope.h
+++ b/third_party/WebKit/Source/core/workers/SharedWorkerGlobalScope.h
@@ -50,7 +50,8 @@
   static SharedWorkerGlobalScope* Create(
       const String& name,
       SharedWorkerThread*,
-      std::unique_ptr<GlobalScopeCreationParams>);
+      std::unique_ptr<GlobalScopeCreationParams>,
+      double time_origin);
   ~SharedWorkerGlobalScope() override;
 
   bool IsSharedWorkerGlobalScope() const override { return true; }
@@ -70,7 +71,8 @@
                           const String& user_agent,
                           SharedWorkerThread*,
                           std::unique_ptr<SecurityOrigin::PrivilegeData>,
-                          WorkerClients*);
+                          WorkerClients*,
+                          double time_origin);
   void ExceptionThrown(ErrorEvent*) override;
 
   String name_;
diff --git a/third_party/WebKit/Source/core/workers/SharedWorkerThread.cpp b/third_party/WebKit/Source/core/workers/SharedWorkerThread.cpp
index 707b43dc..5213805 100644
--- a/third_party/WebKit/Source/core/workers/SharedWorkerThread.cpp
+++ b/third_party/WebKit/Source/core/workers/SharedWorkerThread.cpp
@@ -55,8 +55,8 @@
 
 WorkerOrWorkletGlobalScope* SharedWorkerThread::CreateWorkerGlobalScope(
     std::unique_ptr<GlobalScopeCreationParams> creation_params) {
-  return SharedWorkerGlobalScope::Create(name_, this,
-                                         std::move(creation_params));
+  return SharedWorkerGlobalScope::Create(
+      name_, this, std::move(creation_params), time_origin_);
 }
 
 }  // namespace blink
diff --git a/third_party/WebKit/Source/core/workers/ThreadedMessagingProxyBase.cpp b/third_party/WebKit/Source/core/workers/ThreadedMessagingProxyBase.cpp
index 9c8ffef..ac1bc8d5 100644
--- a/third_party/WebKit/Source/core/workers/ThreadedMessagingProxyBase.cpp
+++ b/third_party/WebKit/Source/core/workers/ThreadedMessagingProxyBase.cpp
@@ -79,12 +79,8 @@
   DCHECK(IsParentContextThread());
 
   Document* document = ToDocument(GetExecutionContext());
-  double origin_time =
-      document->Loader()
-          ? document->Loader()->GetTiming().ReferenceMonotonicTime()
-          : MonotonicallyIncreasingTime();
 
-  worker_thread_ = CreateWorkerThread(origin_time);
+  worker_thread_ = CreateWorkerThread();
   worker_thread_->Start(std::move(global_scope_creation_params),
                         thread_startup_data, GetParentFrameTaskRunners());
   WorkerThreadCreated();
diff --git a/third_party/WebKit/Source/core/workers/ThreadedMessagingProxyBase.h b/third_party/WebKit/Source/core/workers/ThreadedMessagingProxyBase.h
index 2f7c0d03..932266b7 100644
--- a/third_party/WebKit/Source/core/workers/ThreadedMessagingProxyBase.h
+++ b/third_party/WebKit/Source/core/workers/ThreadedMessagingProxyBase.h
@@ -91,8 +91,7 @@
   bool IsParentContextThread() const;
 
  private:
-  virtual std::unique_ptr<WorkerThread> CreateWorkerThread(
-      double origin_time) = 0;
+  virtual std::unique_ptr<WorkerThread> CreateWorkerThread() = 0;
 
   Member<ExecutionContext> execution_context_;
   Member<WorkerClients> worker_clients_;
diff --git a/third_party/WebKit/Source/core/workers/ThreadedWorkletTest.cpp b/third_party/WebKit/Source/core/workers/ThreadedWorkletTest.cpp
index 251ea92..38cd958 100644
--- a/third_party/WebKit/Source/core/workers/ThreadedWorkletTest.cpp
+++ b/third_party/WebKit/Source/core/workers/ThreadedWorkletTest.cpp
@@ -151,7 +151,7 @@
  private:
   friend class ThreadedWorkletTest;
 
-  std::unique_ptr<WorkerThread> CreateWorkerThread(double origin_time) final {
+  std::unique_ptr<WorkerThread> CreateWorkerThread() final {
     return WTF::MakeUnique<ThreadedWorkletThreadForTest>(WorkletObjectProxy());
   }
 
diff --git a/third_party/WebKit/Source/core/workers/WorkerThread.cpp b/third_party/WebKit/Source/core/workers/WorkerThread.cpp
index b19da30..537645b6 100644
--- a/third_party/WebKit/Source/core/workers/WorkerThread.cpp
+++ b/third_party/WebKit/Source/core/workers/WorkerThread.cpp
@@ -329,7 +329,8 @@
 
 WorkerThread::WorkerThread(ThreadableLoadingContext* loading_context,
                            WorkerReportingProxy& worker_reporting_proxy)
-    : worker_thread_id_(GetNextWorkerThreadId()),
+    : time_origin_(MonotonicallyIncreasingTime()),
+      worker_thread_id_(GetNextWorkerThreadId()),
       forcible_termination_delay_(kForcibleTerminationDelay),
       inspector_task_runner_(WTF::MakeUnique<InspectorTaskRunner>()),
       loading_context_(loading_context),
diff --git a/third_party/WebKit/Source/core/workers/WorkerThread.h b/third_party/WebKit/Source/core/workers/WorkerThread.h
index 5f24437..831b3beb 100644
--- a/third_party/WebKit/Source/core/workers/WorkerThread.h
+++ b/third_party/WebKit/Source/core/workers/WorkerThread.h
@@ -196,6 +196,10 @@
   // out of this class.
   virtual bool IsOwningBackingThread() const { return true; }
 
+  // Official moment of creation of worker: when the worker thread is created.
+  // (https://w3c.github.io/hr-time/#time-origin)
+  const double time_origin_;
+
  private:
   friend class WorkerThreadTest;
   FRIEND_TEST_ALL_PREFIXES(WorkerThreadTest,
diff --git a/third_party/WebKit/Source/modules/canvas2d/CanvasRenderingContext2DTest.cpp b/third_party/WebKit/Source/modules/canvas2d/CanvasRenderingContext2DTest.cpp
index 6eef0d9e..26cd6566b 100644
--- a/third_party/WebKit/Source/modules/canvas2d/CanvasRenderingContext2DTest.cpp
+++ b/third_party/WebKit/Source/modules/canvas2d/CanvasRenderingContext2DTest.cpp
@@ -1103,6 +1103,10 @@
   bool color_canvas_extensions_flag =
       RuntimeEnabledFeatures::ColorCanvasExtensionsEnabled();
 
+  RuntimeEnabledFeatures::SetExperimentalCanvasFeaturesEnabled(true);
+  RuntimeEnabledFeatures::SetColorCorrectRenderingEnabled(true);
+  RuntimeEnabledFeatures::SetColorCanvasExtensionsEnabled(true);
+
   Persistent<HTMLCanvasElement> canvas =
       Persistent<HTMLCanvasElement>(CanvasElement());
   CanvasContextCreationAttributes attributes;
@@ -1122,7 +1126,7 @@
     std::swap(src_pixel[0], src_pixel[2]);
 
   // Create and test the ImageBitmap objects.
-  Optional<IntRect> crop_rect = IntRect(0, 0, 10, 10);
+  Optional<IntRect> crop_rect = IntRect(0, 0, 300, 150);
   sk_sp<SkColorSpace> color_space = nullptr;
   SkColorType color_type = SkColorType::kN32_SkColorType;
   SkColorSpaceXform::ColorFormat color_format32 =
diff --git a/third_party/WebKit/Source/modules/compositorworker/AnimationWorkletMessagingProxy.cpp b/third_party/WebKit/Source/modules/compositorworker/AnimationWorkletMessagingProxy.cpp
index cdae694..5f1ba53 100644
--- a/third_party/WebKit/Source/modules/compositorworker/AnimationWorkletMessagingProxy.cpp
+++ b/third_party/WebKit/Source/modules/compositorworker/AnimationWorkletMessagingProxy.cpp
@@ -22,7 +22,7 @@
 AnimationWorkletMessagingProxy::~AnimationWorkletMessagingProxy() {}
 
 std::unique_ptr<WorkerThread>
-AnimationWorkletMessagingProxy::CreateWorkerThread(double origin_time) {
+AnimationWorkletMessagingProxy::CreateWorkerThread() {
   return AnimationWorkletThread::Create(CreateThreadableLoadingContext(),
                                         WorkletObjectProxy());
 }
diff --git a/third_party/WebKit/Source/modules/compositorworker/AnimationWorkletMessagingProxy.h b/third_party/WebKit/Source/modules/compositorworker/AnimationWorkletMessagingProxy.h
index 07a9371..72647ee 100644
--- a/third_party/WebKit/Source/modules/compositorworker/AnimationWorkletMessagingProxy.h
+++ b/third_party/WebKit/Source/modules/compositorworker/AnimationWorkletMessagingProxy.h
@@ -25,7 +25,7 @@
  private:
   ~AnimationWorkletMessagingProxy() override;
 
-  std::unique_ptr<WorkerThread> CreateWorkerThread(double origin_time) override;
+  std::unique_ptr<WorkerThread> CreateWorkerThread() override;
 };
 
 }  // namespace blink
diff --git a/third_party/WebKit/Source/modules/compositorworker/CompositorWorkerMessagingProxy.cpp b/third_party/WebKit/Source/modules/compositorworker/CompositorWorkerMessagingProxy.cpp
index ded2da58..cec5e4a3 100644
--- a/third_party/WebKit/Source/modules/compositorworker/CompositorWorkerMessagingProxy.cpp
+++ b/third_party/WebKit/Source/modules/compositorworker/CompositorWorkerMessagingProxy.cpp
@@ -24,9 +24,9 @@
 }
 
 std::unique_ptr<WorkerThread>
-CompositorWorkerMessagingProxy::CreateWorkerThread(double origin_time) {
+CompositorWorkerMessagingProxy::CreateWorkerThread() {
   return CompositorWorkerThread::Create(CreateThreadableLoadingContext(),
-                                        WorkerObjectProxy(), origin_time);
+                                        WorkerObjectProxy());
 }
 
 }  // namespace blink
diff --git a/third_party/WebKit/Source/modules/compositorworker/CompositorWorkerMessagingProxy.h b/third_party/WebKit/Source/modules/compositorworker/CompositorWorkerMessagingProxy.h
index 02a8660..f7666e42 100644
--- a/third_party/WebKit/Source/modules/compositorworker/CompositorWorkerMessagingProxy.h
+++ b/third_party/WebKit/Source/modules/compositorworker/CompositorWorkerMessagingProxy.h
@@ -19,7 +19,7 @@
   ~CompositorWorkerMessagingProxy() override;
   WTF::Optional<WorkerBackingThreadStartupData> CreateBackingThreadStartupData(
       v8::Isolate*) override;
-  std::unique_ptr<WorkerThread> CreateWorkerThread(double origin_time) override;
+  std::unique_ptr<WorkerThread> CreateWorkerThread() override;
 };
 
 }  // namespace blink
diff --git a/third_party/WebKit/Source/modules/compositorworker/CompositorWorkerThread.cpp b/third_party/WebKit/Source/modules/compositorworker/CompositorWorkerThread.cpp
index 54ca717..aeacc81 100644
--- a/third_party/WebKit/Source/modules/compositorworker/CompositorWorkerThread.cpp
+++ b/third_party/WebKit/Source/modules/compositorworker/CompositorWorkerThread.cpp
@@ -15,22 +15,19 @@
 
 std::unique_ptr<CompositorWorkerThread> CompositorWorkerThread::Create(
     ThreadableLoadingContext* loading_context,
-    InProcessWorkerObjectProxy& worker_object_proxy,
-    double time_origin) {
+    InProcessWorkerObjectProxy& worker_object_proxy) {
   TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("compositor-worker"),
                "CompositorWorkerThread::create");
   DCHECK(IsMainThread());
-  return WTF::WrapUnique(new CompositorWorkerThread(
-      loading_context, worker_object_proxy, time_origin));
+  return WTF::WrapUnique(
+      new CompositorWorkerThread(loading_context, worker_object_proxy));
 }
 
 CompositorWorkerThread::CompositorWorkerThread(
     ThreadableLoadingContext* loading_context,
-    InProcessWorkerObjectProxy& worker_object_proxy,
-    double time_origin)
+    InProcessWorkerObjectProxy& worker_object_proxy)
     : AbstractAnimationWorkletThread(loading_context, worker_object_proxy),
-      worker_object_proxy_(worker_object_proxy),
-      time_origin_(time_origin) {}
+      worker_object_proxy_(worker_object_proxy) {}
 
 CompositorWorkerThread::~CompositorWorkerThread() {}
 
diff --git a/third_party/WebKit/Source/modules/compositorworker/CompositorWorkerThread.h b/third_party/WebKit/Source/modules/compositorworker/CompositorWorkerThread.h
index f8428fe..39a22037 100644
--- a/third_party/WebKit/Source/modules/compositorworker/CompositorWorkerThread.h
+++ b/third_party/WebKit/Source/modules/compositorworker/CompositorWorkerThread.h
@@ -18,8 +18,7 @@
  public:
   static std::unique_ptr<CompositorWorkerThread> Create(
       ThreadableLoadingContext*,
-      InProcessWorkerObjectProxy&,
-      double time_origin);
+      InProcessWorkerObjectProxy&);
   ~CompositorWorkerThread() override;
 
   InProcessWorkerObjectProxy& WorkerObjectProxy() const {
@@ -32,11 +31,9 @@
 
  private:
   CompositorWorkerThread(ThreadableLoadingContext*,
-                         InProcessWorkerObjectProxy&,
-                         double time_origin);
+                         InProcessWorkerObjectProxy&);
 
   InProcessWorkerObjectProxy& worker_object_proxy_;
-  double time_origin_;
 };
 
 }  // namespace blink
diff --git a/third_party/WebKit/Source/modules/compositorworker/CompositorWorkerThreadTest.cpp b/third_party/WebKit/Source/modules/compositorworker/CompositorWorkerThreadTest.cpp
index af93464..dee6d0df 100644
--- a/third_party/WebKit/Source/modules/compositorworker/CompositorWorkerThreadTest.cpp
+++ b/third_party/WebKit/Source/modules/compositorworker/CompositorWorkerThreadTest.cpp
@@ -110,7 +110,7 @@
 
   std::unique_ptr<CompositorWorkerThread> CreateCompositorWorker() {
     std::unique_ptr<CompositorWorkerThread> worker_thread =
-        CompositorWorkerThread::Create(nullptr, *object_proxy_, 0);
+        CompositorWorkerThread::Create(nullptr, *object_proxy_);
     WorkerClients* clients = WorkerClients::Create();
     ProvideCompositorWorkerProxyClientTo(clients,
                                          new TestCompositorWorkerProxyClient);
diff --git a/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerGlobalScope.cpp b/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerGlobalScope.cpp
index 2130fc6e..f9c9cbf1 100644
--- a/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerGlobalScope.cpp
+++ b/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerGlobalScope.cpp
@@ -71,11 +71,11 @@
 
 ServiceWorkerGlobalScope* ServiceWorkerGlobalScope::Create(
     ServiceWorkerThread* thread,
-    std::unique_ptr<GlobalScopeCreationParams> creation_params) {
+    std::unique_ptr<GlobalScopeCreationParams> creation_params,
+    double time_origin) {
   ServiceWorkerGlobalScope* context = new ServiceWorkerGlobalScope(
       creation_params->script_url, creation_params->user_agent, thread,
-      MonotonicallyIncreasingTime(),
-      std::move(creation_params->starter_origin_privilege_data),
+      time_origin, std::move(creation_params->starter_origin_privilege_data),
       creation_params->worker_clients);
 
   context->SetV8CacheOptions(creation_params->v8_cache_options);
diff --git a/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerGlobalScope.h b/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerGlobalScope.h
index 4b47e6c..5d17247b 100644
--- a/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerGlobalScope.h
+++ b/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerGlobalScope.h
@@ -59,7 +59,8 @@
  public:
   static ServiceWorkerGlobalScope* Create(
       ServiceWorkerThread*,
-      std::unique_ptr<GlobalScopeCreationParams>);
+      std::unique_ptr<GlobalScopeCreationParams>,
+      double time_origin);
 
   ~ServiceWorkerGlobalScope() override;
   bool IsServiceWorkerGlobalScope() const override { return true; }
diff --git a/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerThread.cpp b/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerThread.cpp
index 07a98152..6d9bbf3 100644
--- a/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerThread.cpp
+++ b/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerThread.cpp
@@ -57,7 +57,8 @@
 
 WorkerOrWorkletGlobalScope* ServiceWorkerThread::CreateWorkerGlobalScope(
     std::unique_ptr<GlobalScopeCreationParams> creation_params) {
-  return ServiceWorkerGlobalScope::Create(this, std::move(creation_params));
+  return ServiceWorkerGlobalScope::Create(this, std::move(creation_params),
+                                          time_origin_);
 }
 
 InstalledScriptsManager* ServiceWorkerThread::GetInstalledScriptsManager() {
diff --git a/third_party/WebKit/Source/modules/webaudio/AudioWorkletMessagingProxy.cpp b/third_party/WebKit/Source/modules/webaudio/AudioWorkletMessagingProxy.cpp
index b21ac7a..231f151 100644
--- a/third_party/WebKit/Source/modules/webaudio/AudioWorkletMessagingProxy.cpp
+++ b/third_party/WebKit/Source/modules/webaudio/AudioWorkletMessagingProxy.cpp
@@ -16,8 +16,7 @@
 
 AudioWorkletMessagingProxy::~AudioWorkletMessagingProxy() {}
 
-std::unique_ptr<WorkerThread> AudioWorkletMessagingProxy::CreateWorkerThread(
-    double origin_time) {
+std::unique_ptr<WorkerThread> AudioWorkletMessagingProxy::CreateWorkerThread() {
   return AudioWorkletThread::Create(CreateThreadableLoadingContext(),
                                     WorkletObjectProxy());
 }
diff --git a/third_party/WebKit/Source/modules/webaudio/AudioWorkletMessagingProxy.h b/third_party/WebKit/Source/modules/webaudio/AudioWorkletMessagingProxy.h
index 0fe739b..818656f7 100644
--- a/third_party/WebKit/Source/modules/webaudio/AudioWorkletMessagingProxy.h
+++ b/third_party/WebKit/Source/modules/webaudio/AudioWorkletMessagingProxy.h
@@ -20,7 +20,7 @@
  private:
   ~AudioWorkletMessagingProxy() override;
 
-  std::unique_ptr<WorkerThread> CreateWorkerThread(double origin_time) override;
+  std::unique_ptr<WorkerThread> CreateWorkerThread() override;
 };
 
 }  // namespace blink
diff --git a/third_party/WebKit/Source/platform/bindings/V8PrivateProperty.h b/third_party/WebKit/Source/platform/bindings/V8PrivateProperty.h
index 7136a10..615c50d 100644
--- a/third_party/WebKit/Source/platform/bindings/V8PrivateProperty.h
+++ b/third_party/WebKit/Source/platform/bindings/V8PrivateProperty.h
@@ -48,7 +48,6 @@
   X(MessageEvent, CachedData)                         \
   X(MutationObserver, Callback)                       \
   X(NamedConstructor, Initialized)                    \
-  X(PerformanceObserver, Callback)                    \
   X(PopStateEvent, State)                             \
   X(SameObject, DetectedBarcodeCornerPoints)          \
   X(SameObject, DetectedFaceLandmarks)                \
diff --git a/tools/gn/README.md b/tools/gn/README.md
index ef61ca92..0d6fa99 100644
--- a/tools/gn/README.md
+++ b/tools/gn/README.md
@@ -1,8 +1,7 @@
 # What is GN?
 
-GN is a meta-build system that generates
-[NinjaBuild](https://ninja-build.org)
-files so that you can build Chromium with Ninja.
+GN is a meta-build system that generates [Ninja](https://ninja-build.org)
+build files so that you can build Chromium with Ninja.
 
 ## Why did you switch from GYP?
 
@@ -39,9 +38,9 @@
   * [Quick start](docs/quick_start.md)
   * [FAQ](docs/faq.md)
   * [Language and operation details](docs/language.md)
-  * [Reference](docs/reference.md) The built-in `gn help` documentation.
+  * [Reference](docs/reference.md): The built-in `gn help` documentation.
   * [Style guide](docs/style_guide.md)
   * [Cross compiling and toolchains](docs/cross_compiles.md)
   * [Hacking on GN itself](docs/hacking.md)
-  * [GNStandalone](docs/standalone.md) Standalone GN projects
-  * [UpdateGNBinaries](docs/update_binaries.md) Pushing new binaries
+  * [Standaline GN projects](docs/standalone.md)
+  * [Pushing new binaries](docs/update_binaries.md)
diff --git a/tools/gn/docs/cross_compiles.md b/tools/gn/docs/cross_compiles.md
index 52f9559..6da66543 100644
--- a/tools/gn/docs/cross_compiles.md
+++ b/tools/gn/docs/cross_compiles.md
@@ -80,8 +80,8 @@
 
 By default, dependencies listed in the `deps` variable of a rule use the
 same (currently active) toolchain. You may specify a different toolchain
-using the `foo(bar)` label notation as described in
-[GNLanguage#Labels](language.md#Labels).
+using the `foo(bar)` label notation as described in [the label section
+of the reference doc](reference.md#Toolchains).
 
 Here's an example of when to use `target_cpu` vs `current_cpu`:
 
@@ -111,9 +111,7 @@
 
 ## As a //build/config or //build/toolchain author
 
-As described in
-[GNLanguage#Overall-build-flow](language.md#Overall-build-flow), the
-`default_toolchain` is declared in the `//build/config/BUILDCONFIG.gn`
+The `default_toolchain` is declared in the `//build/config/BUILDCONFIG.gn`
 file. Usually the `default_toolchain` should be the toolchain for the
 `target_os` and `target_cpu`. The `current_toolchain` reflects the
 toolchain that is currently in effect for a rule.
diff --git a/tools/gn/docs/hacking.md b/tools/gn/docs/hacking.md
index ab94b58c..be3f132 100644
--- a/tools/gn/docs/hacking.md
+++ b/tools/gn/docs/hacking.md
@@ -2,9 +2,9 @@
 
 ## Building GN itself
 
-GN is part of the Chromium tree. If you have a Chromium checkout, you
-already have the source and you can do `ninja -C out/Debug gn` to
-build it.
+GN is part of the Chromium tree, in [//tools/gn/](../). If you have a
+Chromium checkout, you already have the source and you can do `ninja -C
+out/Debug gn` to build it.
 
 To build gn using gn, run (in the root `src` directory):
 
diff --git a/tools/gn/docs/language.md b/tools/gn/docs/language.md
index 0d60cb5..dcc6c9ef 100644
--- a/tools/gn/docs/language.md
+++ b/tools/gn/docs/language.md
@@ -90,8 +90,8 @@
 c = "foo${a}bar.cc"  # c -> "foomypathbar.cc"
 ```
 
-You can encode 8-bit haracters using "$0xFF" syntax, so a string with newlines
-(hex 0A) would `"look$0x0Alike$0x0Athis"
+You can encode 8-bit characters using "$0xFF" syntax, so a string with newlines
+(hex 0A) would `"look$0x0Alike$0x0Athis"`.
 
 ### Lists
 
@@ -291,7 +291,7 @@
 
   * `component`: Either a source set or shared library, depending on the
     build type.
-  * `test`: A test executable. On mobile this will create the appropritate
+  * `test`: A test executable. On mobile this will create the appropriate
     native app type for tests.
   * `app`: Executable or Mac/iOS application.
   * `android_apk`: Make an APK. There are a _lot_ of other Android ones, see
@@ -514,8 +514,7 @@
 
 Blaze is Google's internal build system, now publicly released as
 [Bazel](http://bazel.io/). It has inspired a number of other systems such as
-[Pants](https://github.com/twitter/commons/tree/master/src/python/twitter/pants)
-and [Buck](http://facebook.github.io/buck/).
+[Pants](http://www.pantsbuild.org/) and [Buck](http://facebook.github.io/buck/).
 
 In Google's homogeneous environment, the need for conditionals is very
 low and they can get by with a few hacks (`abi_deps`). Chrome uses
diff --git a/tools/gn/docs/quick_start.md b/tools/gn/docs/quick_start.md
index 8b064deb..629b36d 100644
--- a/tools/gn/docs/quick_start.md
+++ b/tools/gn/docs/quick_start.md
@@ -5,7 +5,7 @@
 ## Running GN
 
 You just run `gn` from the command line. There is a script in
-depot\_tools (which is presumably on your path) with this name. The
+`depot_tools`, which is presumably in your PATH, with this name. The
 script will find the binary in the source tree containing the current
 directory and run it.
 
@@ -45,10 +45,9 @@
 gn args --list out/my_build
 ```
 
-on the command line. See "Taking build arguments" below for information
-on how to use these in your code. (Note that you have to specify the
-build directory for this command because the available arguments can
-change according to what's set.
+on the command line. Note that you have to specify the build directory
+for this command because the available arguments can change according
+to what's set.
 
 Chrome developers can also read the [Chrome-specific build
 configuration](http://www.chromium.org/developers/gn-build-configuration)
diff --git a/tools/gn/docs/standalone.md b/tools/gn/docs/standalone.md
index 81dd8969..29d62360 100644
--- a/tools/gn/docs/standalone.md
+++ b/tools/gn/docs/standalone.md
@@ -39,6 +39,6 @@
 (e.g., to do the full Chrome build instead), you can use the command-line
 flags `--root` and `--dotfile` to set the values you want.
 
-If you want a completely standalone build that has nothing to do w/ Chrome
-and doesn't use Chrome's //build files, you can look at an example in
+If you want a completely standalone build that has nothing to do with Chrome
+and doesn't use Chrome's `//build` files, you can look at an example in
 [//tools/gn/example](../example).
diff --git a/tools/gn/docs/style_guide.md b/tools/gn/docs/style_guide.md
index a87ad8f..466f872 100644
--- a/tools/gn/docs/style_guide.md
+++ b/tools/gn/docs/style_guide.md
@@ -1,25 +1,27 @@
-# GN Style Guide 
+# GN Style Guide
 
 [TOC]
+
 ## Naming and ordering within the file
 
 ### Location of build files
 
 It usually makes sense to have more build files closer to the code than
-fewer ones at the toplevel (this is in contrast with what we did with
-GYP). This makes things easier to find and owners reviews easier since
-changes are more focused.
+fewer ones at the top level; this is in contrast with what we did with
+GYP. This makes things easier to find, and also makes the set of owners
+required for reviews smaller since changes are more focused to particular
+subdirectories.
 
 ### Targets
 
-  * Most BUILD files should have a target with the same name of the
+  * Most BUILD files should have a target with the same name as the
     directory. This target should be the first target.
-  * Other targets should be in "some order that makes sense." Usually
+  * Other targets should be in some logical order -- usually
     more important targets will be first, and unit tests will follow the
     corresponding target. If there's no clear ordering, consider
     alphabetical order.
   * Test support libraries should be static libraries named "test\_support".
-    So "//ui/compositor:test\_support". Test support libraries should
+    For example, "//ui/compositor:test\_support". Test support libraries should
     include as public deps the non-test-support version of the library
     so tests need only depend on the test\_support target (rather than
     both).
@@ -99,7 +101,7 @@
 GN contains a built-in code formatter which defines the formatting style.
 Some additional notes:
 
-  * Variables are `lower_case_with_underscores`
+  * Variables are `lower_case_with_underscores`.
   * Comments should be complete sentences with periods at the end.
   * Compiler flags and such should always be commented with what they do
     and why the flag is needed.
@@ -165,7 +167,7 @@
     loadable module, you normally need to use source sets. This is because
     object files with no symbols referenced from within the shared library will
     not be linked into the final library at all. This omission will happen even
-    if that object file has a symbol marked for export that targets dependant
+    if that object file has a symbol marked for export that targets dependent
     on that shared library need. This will result in undefined symbols when
     linking later targets.
 
@@ -203,14 +205,14 @@
 to be linked statically in a large binary, but for developers to use shared
 libraries for most operations.
 
-A shared library will be listed on the link line of dependant targets and will
+A shared library will be listed on the link line of dependent targets and will
 be loaded automatically by the operating system when the application starts
 and symbols automatically resolved. A loadable module will not be linked
 directly and the application must manually load it.
 
 On Windows and Linux shared libraries and loadable modules result in the same
 type of file (`.dll` and `.so`, respectively). The only difference is in how
-they are linked to dependant targets. On these platforms, having a `deps`
+they are linked to dependent targets. On these platforms, having a `deps`
 dependency on a loadable module is the same as having a `data_deps`
 (non-linked) dependency on a shared library.
 
diff --git a/tools/gn/docs/update_binaries.md b/tools/gn/docs/update_binaries.md
index 738da3c..d3e3bbc 100644
--- a/tools/gn/docs/update_binaries.md
+++ b/tools/gn/docs/update_binaries.md
@@ -1,4 +1,5 @@
-# How to update the [GN binaries](gn.md) that Chromium uses.
+# How to update the GN binaries that Chromium uses.
 
-Any committer should be able to do a roll by running //tools/gn/bin/roll_gn.py
-on linux or mac.
+Any committer should be able to do a roll by running
+[//tools/gn/bin/roll_gn.py](../bin/roll_gn.py) on Linux or Mac.
+
diff --git a/ui/app_list/views/search_result_page_view.cc b/ui/app_list/views/search_result_page_view.cc
index 92162c4d..6052175 100644
--- a/ui/app_list/views/search_result_page_view.cc
+++ b/ui/app_list/views/search_result_page_view.cc
@@ -356,7 +356,7 @@
 
   if (state != AppListModel::STATE_SEARCH_RESULTS) {
     // Hides this view behind the search box by using the same bounds.
-    return AppListPage::GetSearchBoxBounds();
+    return AppListPage::contents_view()->GetSearchBoxBoundsForState(state);
   }
 
   gfx::Rect onscreen_bounds(GetDefaultContentsBounds());
diff --git a/ui/app_list/views/start_page_view.cc b/ui/app_list/views/start_page_view.cc
index 4ab2053..58d7503 100644
--- a/ui/app_list/views/start_page_view.cc
+++ b/ui/app_list/views/start_page_view.cc
@@ -21,6 +21,7 @@
 #include "ui/app_list/search_result.h"
 #include "ui/app_list/views/all_apps_tile_item_view.h"
 #include "ui/app_list/views/app_list_main_view.h"
+#include "ui/app_list/views/app_list_view.h"
 #include "ui/app_list/views/contents_view.h"
 #include "ui/app_list/views/custom_launcher_page_view.h"
 #include "ui/app_list/views/expand_arrow_view.h"
@@ -50,6 +51,7 @@
 constexpr int kSearchBoxAndTilesSpacing = 35;
 constexpr int kStartPageSearchBoxWidth = 480;
 constexpr int kStartPageSearchBoxWidthFullscreen = 544;
+constexpr int kPreferredHeightFullscreen = 272;
 
 // WebView constants.
 constexpr int kWebViewWidth = 700;
@@ -97,7 +99,8 @@
 StartPageView::StartPageView(AppListMainView* app_list_main_view,
                              AppListViewDelegate* view_delegate,
                              AppListView* app_list_view)
-    : app_list_main_view_(app_list_main_view),
+    : app_list_view_(app_list_view),
+      app_list_main_view_(app_list_main_view),
       view_delegate_(view_delegate),
       search_box_spacer_view_(new View()),
       instant_container_(new views::View),
@@ -218,8 +221,22 @@
 gfx::Rect StartPageView::GetPageBoundsForState(
     AppListModel::State state) const {
   gfx::Rect onscreen_bounds(GetFullContentsBounds());
-  if (state == AppListModel::STATE_START)
+
+  if (!is_fullscreen_app_list_enabled_) {
+    if (state == AppListModel::STATE_START)
+      return onscreen_bounds;
+    return GetAboveContentsOffscreenBounds(onscreen_bounds.size());
+  }
+
+  if (state == AppListModel::STATE_START) {
+    if (app_list_view_->is_fullscreen()) {
+      // Make this view vertically centered in fullscreen mode.
+      onscreen_bounds.Offset(
+          0, (onscreen_bounds.height() - kPreferredHeightFullscreen) / 2);
+    }
     return onscreen_bounds;
+  }
+  onscreen_bounds.set_height(kPreferredHeightFullscreen);
 
   return GetAboveContentsOffscreenBounds(onscreen_bounds.size());
 }
diff --git a/ui/app_list/views/start_page_view.h b/ui/app_list/views/start_page_view.h
index e1df339..2a38ac9 100644
--- a/ui/app_list/views/start_page_view.h
+++ b/ui/app_list/views/start_page_view.h
@@ -64,6 +64,8 @@
 
   TileItemView* GetTileItemView(size_t index);
 
+  AppListView* app_list_view_;
+
   // The parent view of ContentsView which is the parent of this view.
   AppListMainView* app_list_main_view_;
 
diff --git a/ui/arc/BUILD.gn b/ui/arc/BUILD.gn
index 1b59735..b6af6d8 100644
--- a/ui/arc/BUILD.gn
+++ b/ui/arc/BUILD.gn
@@ -32,6 +32,7 @@
     "//base",
     "//components/arc:arc_base",
     "//components/exo",
+    "//components/keyed_service/content:content",
     "//components/signin/core/account_id",
     "//mojo/common:common_base",
     "//skia",
diff --git a/ui/arc/notification/DEPS b/ui/arc/notification/DEPS
index 89fd8ac..e472fa7 100644
--- a/ui/arc/notification/DEPS
+++ b/ui/arc/notification/DEPS
@@ -1,5 +1,6 @@
 include_rules = [
   "+components/exo",
+  "+components/keyed_service",
   "+components/signin/core/account_id",
   "+third_party/skia",
   "+ui/accessibility",
diff --git a/ui/arc/notification/arc_notification_manager.cc b/ui/arc/notification/arc_notification_manager.cc
index 70862020..4e56010 100644
--- a/ui/arc/notification/arc_notification_manager.cc
+++ b/ui/arc/notification/arc_notification_manager.cc
@@ -10,39 +10,85 @@
 #include "ash/shell.h"
 #include "ash/system/toast/toast_manager.h"
 #include "base/memory/ptr_util.h"
+#include "base/memory/singleton.h"
 #include "base/stl_util.h"
 #include "base/strings/utf_string_conversions.h"
 #include "components/arc/arc_bridge_service.h"
+#include "components/arc/arc_browser_context_keyed_service_factory_base.h"
 #include "ui/arc/notification/arc_notification_item_impl.h"
 
 namespace arc {
+namespace {
 
-ArcNotificationManager::ArcNotificationManager(ArcBridgeService* bridge_service,
-                                               const AccountId& main_profile_id)
+// Singleton factory for ArcNotificationManager.
+class ArcNotificationManagerFactory
+    : public internal::ArcBrowserContextKeyedServiceFactoryBase<
+          ArcNotificationManager,
+          ArcNotificationManagerFactory> {
+ public:
+  // Factory name used by ArcBrowserContextKeyedServiceFactoryBase.
+  static constexpr const char* kName = "ArcNotificationManagerFactory";
+
+  static ArcNotificationManagerFactory* GetInstance() {
+    return base::Singleton<ArcNotificationManagerFactory>::get();
+  }
+
+ private:
+  friend base::DefaultSingletonTraits<ArcNotificationManagerFactory>;
+  ArcNotificationManagerFactory() = default;
+  ~ArcNotificationManagerFactory() override = default;
+};
+
+}  // namespace
+
+// static
+ArcNotificationManager* ArcNotificationManager::GetForBrowserContext(
+    content::BrowserContext* context) {
+  return ArcNotificationManagerFactory::GetForBrowserContext(context);
+}
+
+// static
+std::unique_ptr<ArcNotificationManager>
+ArcNotificationManager::CreateForTesting(
+    ArcBridgeService* bridge_service,
+    const AccountId& main_profile_id,
+    message_center::MessageCenter* message_center) {
+  // MakeUnique cannot be used because the used ctor is private.
+  return base::WrapUnique(new ArcNotificationManager(
+      bridge_service, main_profile_id, message_center));
+}
+
+ArcNotificationManager::ArcNotificationManager(content::BrowserContext* context,
+                                               ArcBridgeService* bridge_service)
     : ArcNotificationManager(bridge_service,
-                             main_profile_id,
+                             ArcServiceManager::Get()->account_id(),
                              message_center::MessageCenter::Get()) {}
 
 ArcNotificationManager::ArcNotificationManager(
     ArcBridgeService* bridge_service,
     const AccountId& main_profile_id,
     message_center::MessageCenter* message_center)
-    : ArcService(bridge_service),
+    : arc_bridge_service_(bridge_service),
       main_profile_id_(main_profile_id),
       message_center_(message_center),
       binding_(this) {
-  arc_bridge_service()->notifications()->AddObserver(this);
+  arc_bridge_service_->notifications()->AddObserver(this);
 }
 
 ArcNotificationManager::~ArcNotificationManager() {
-  arc_bridge_service()->notifications()->RemoveObserver(this);
+  // TODO(hidehiko): Currently, the lifetime of ArcBridgeService and
+  // BrowserContextKeyedService is not nested.
+  // If ArcServiceManager::Get() returns nullptr, it is already destructed,
+  // so do not touch it.
+  if (ArcServiceManager::Get())
+    arc_bridge_service_->notifications()->RemoveObserver(this);
 }
 
 void ArcNotificationManager::OnInstanceReady() {
   DCHECK(!ready_);
 
   auto* notifications_instance =
-      ARC_GET_INSTANCE_FOR_METHOD(arc_bridge_service()->notifications(), Init);
+      ARC_GET_INSTANCE_FOR_METHOD(arc_bridge_service_->notifications(), Init);
   DCHECK(notifications_instance);
 
   mojom::NotificationsHostPtr host_proxy;
@@ -107,7 +153,7 @@
   items_.erase(it);
 
   auto* notifications_instance = ARC_GET_INSTANCE_FOR_METHOD(
-      arc_bridge_service()->notifications(), SendNotificationEventToAndroid);
+      arc_bridge_service_->notifications(), SendNotificationEventToAndroid);
 
   // On shutdown, the ARC channel may quit earlier than notifications.
   if (!notifications_instance) {
@@ -129,7 +175,7 @@
   }
 
   auto* notifications_instance = ARC_GET_INSTANCE_FOR_METHOD(
-      arc_bridge_service()->notifications(), SendNotificationEventToAndroid);
+      arc_bridge_service_->notifications(), SendNotificationEventToAndroid);
 
   // On shutdown, the ARC channel may quit earlier than notifications.
   if (!notifications_instance) {
@@ -152,7 +198,7 @@
   }
 
   auto* notifications_instance = ARC_GET_INSTANCE_FOR_METHOD(
-      arc_bridge_service()->notifications(), SendNotificationEventToAndroid);
+      arc_bridge_service_->notifications(), SendNotificationEventToAndroid);
 
   // On shutdown, the ARC channel may quit earlier than notifications.
   if (!notifications_instance) {
@@ -195,7 +241,7 @@
   }
 
   auto* notifications_instance = ARC_GET_INSTANCE_FOR_METHOD(
-      arc_bridge_service()->notifications(), CreateNotificationWindow);
+      arc_bridge_service_->notifications(), CreateNotificationWindow);
   if (!notifications_instance)
     return;
 
@@ -210,7 +256,7 @@
   }
 
   auto* notifications_instance = ARC_GET_INSTANCE_FOR_METHOD(
-      arc_bridge_service()->notifications(), CloseNotificationWindow);
+      arc_bridge_service_->notifications(), CloseNotificationWindow);
   if (!notifications_instance)
     return;
 
@@ -225,7 +271,7 @@
   }
 
   auto* notifications_instance = ARC_GET_INSTANCE_FOR_METHOD(
-      arc_bridge_service()->notifications(), OpenNotificationSettings);
+      arc_bridge_service_->notifications(), OpenNotificationSettings);
 
   // On shutdown, the ARC channel may quit earlier than notifications.
   if (!notifications_instance)
@@ -236,7 +282,7 @@
 
 bool ArcNotificationManager::IsOpeningSettingsSupported() const {
   const auto* notifications_instance = ARC_GET_INSTANCE_FOR_METHOD(
-      arc_bridge_service()->notifications(), OpenNotificationSettings);
+      arc_bridge_service_->notifications(), OpenNotificationSettings);
   return notifications_instance != nullptr;
 }
 
@@ -249,7 +295,7 @@
   }
 
   auto* notifications_instance = ARC_GET_INSTANCE_FOR_METHOD(
-      arc_bridge_service()->notifications(), SendNotificationEventToAndroid);
+      arc_bridge_service_->notifications(), SendNotificationEventToAndroid);
 
   // On shutdown, the ARC channel may quit earlier than notifications.
   if (!notifications_instance) {
diff --git a/ui/arc/notification/arc_notification_manager.h b/ui/arc/notification/arc_notification_manager.h
index 3ffddda..108f8d1 100644
--- a/ui/arc/notification/arc_notification_manager.h
+++ b/ui/arc/notification/arc_notification_manager.h
@@ -9,29 +9,42 @@
 #include <string>
 #include <unordered_map>
 
-#include "components/arc/arc_service.h"
 #include "components/arc/common/notifications.mojom.h"
 #include "components/arc/instance_holder.h"
+#include "components/keyed_service/core/keyed_service.h"
 #include "components/signin/core/account_id/account_id.h"
 #include "mojo/public/cpp/bindings/binding.h"
 #include "ui/message_center/message_center.h"
 
+namespace content {
+class BrowserContext;
+}  // namespace content
+
 namespace arc {
 
 class ArcBridgeService;
 class ArcNotificationItem;
 
 class ArcNotificationManager
-    : public ArcService,
+    : public KeyedService,
       public InstanceHolder<mojom::NotificationsInstance>::Observer,
       public mojom::NotificationsHost {
  public:
-  ArcNotificationManager(ArcBridgeService* bridge_service,
-                         const AccountId& main_profile_id);
+  // Returns singleton instance for the given BrowserContext,
+  // or nullptr if the browser |context| is not allowed to use ARC.
+  static ArcNotificationManager* GetForBrowserContext(
+      content::BrowserContext* context);
 
-  ArcNotificationManager(ArcBridgeService* bridge_service,
-                         const AccountId& main_profile_id,
-                         message_center::MessageCenter* message_center);
+  // Returns a created instance for testing.
+  static std::unique_ptr<ArcNotificationManager> CreateForTesting(
+      ArcBridgeService* bridge_service,
+      const AccountId& main_profile_id,
+      message_center::MessageCenter* message_center);
+
+  // TODO(hidehiko): Make ctor private to enforce all service users should
+  // use GetForBrowserContext().
+  ArcNotificationManager(content::BrowserContext* context,
+                         ArcBridgeService* bridge_service);
 
   ~ArcNotificationManager() override;
 
@@ -57,6 +70,11 @@
   void SendNotificationToggleExpansionOnChrome(const std::string& key);
 
  private:
+  ArcNotificationManager(ArcBridgeService* bridge_service,
+                         const AccountId& main_profile_id,
+                         message_center::MessageCenter* message_center);
+
+  ArcBridgeService* const arc_bridge_service_;  // Owned by ArcServiceManager.
   const AccountId main_profile_id_;
   message_center::MessageCenter* const message_center_;
 
diff --git a/ui/arc/notification/arc_notification_manager_unittest.cc b/ui/arc/notification/arc_notification_manager_unittest.cc
index e4e0f56..7d0dab6 100644
--- a/ui/arc/notification/arc_notification_manager_unittest.cc
+++ b/ui/arc/notification/arc_notification_manager_unittest.cc
@@ -119,7 +119,7 @@
     service_ = base::MakeUnique<ArcBridgeService>();
     message_center_ = base::MakeUnique<MockMessageCenter>();
 
-    arc_notification_manager_ = base::MakeUnique<ArcNotificationManager>(
+    arc_notification_manager_ = ArcNotificationManager::CreateForTesting(
         service_.get(), EmptyAccountId(), message_center_.get());
 
     NotificationsObserver observer;
diff --git a/ui/webui/resources/cr_elements/cr_toolbar/cr_toolbar_search_field.html b/ui/webui/resources/cr_elements/cr_toolbar/cr_toolbar_search_field.html
index 34446ee..5b38933 100644
--- a/ui/webui/resources/cr_elements/cr_toolbar/cr_toolbar_search_field.html
+++ b/ui/webui/resources/cr_elements/cr_toolbar/cr_toolbar_search_field.html
@@ -142,6 +142,7 @@
     <div id="searchTerm">
       <label id="prompt" for="searchInput" aria-hidden="true">[[label]]</label>
       <input id="searchInput"
+          aria-labelledby="prompt"
           type="search"
           on-input="onSearchTermInput"
           on-search="onSearchTermSearch"